1、(7)保存数据文件功能。例如:职工工资信息表ID号XX基本工资职务工资津贴医疗保险- 公积金- 总工资01 望 1286 794 198 109 135 2034 02 明 1185 628 135 94 114 1740 03 王小民 895 438 98 64 73 1294 04 效章 1350 868 210 116 150 2162 05 彭山 745 398 84 61 68 1098 各项平均工资 1092.2 625.2 145 88.8 108(要求:1.源文件采用多文件的工程结构2.数据存储采用文件形式3.标准的C输入输出4.功能完善,适当的注释,5.关于文件的容需要自学)
2、2.3 设计环境(1)WINDOWS 2000/2003/XP/7/Vista系统(2)Visual C+2.4 开发语言C语言3 分析和设计从主菜单中选择相对应的数字,使程序进入不同的程序模块,用switch实现其功能,程序共分为六个模块,分别为:主函数、Input( )函数(输入函数)、Display(T)显示函数(计算职工工资信息并输入文件)、Delete (T)删除函数(从文件中读入信息并将其删除),Chick(T)查询模块,Change(T);修改模块,sum(T);统计模块3.1 系统模块图图3.1 系统模块图4 具体代码实现#includestdio.h #includeconi
3、o.hstring.h / 头文件static int n=0; / 定义静态全局变量,存储已经读入记录的条数。typedef struct char id15; /*ID号*/ char name10; /*XX*/ double base; /*基本工资*/ double position; /*职务工资*/ double allowance; /*津贴*/ double insurance; /*医疗保险*/ double fund; /公积金double wage; /总工资 Student;Student T100;int Menu_Select() int c; do system
4、(cls); /清屏 printf(tt*职工工资管理系统*nttntt# 1. 添加记录 #ntt# #ntt# 2. 显示记录 #n printf(tt# 3. 删除记录 #ntt# 4. 查询记录 #ntt# 5. 修改记录 #ntt# 6. 统计记录 #ntt# 0. 退出程序 #ntt#nttt请您选择(0-6)选择请输入: scanf(%d,&c); while(c=7); return(c); int Input(Student stu) int i=0; char sign; while(sign!=nsign!N) tID:t%s,stun+i.id);tXX:,stun+i
5、.name);t基本工资:t%lfstun+i.base);t职务工资:stun+i.position);t津贴:stun+i.allowance);t医疗保险:stun+i.insurance);t公积金:stun+i.fund); stun+i.wage=stun+i.base +stun+i.position +stun+i.allowance +stun+i.insurance +stun+i.fund; ;nt是否继续添加?(Y/N)t%csign); i+; return(n+i); void Display(Student stu) int i; double m1=0,m2=0
6、,m3=0,m4=0,m5=0;nn按照XX进行排序!nn-n /显示的格式ID XX基本工资职务工资津贴医疗保险公积金总工资n for(i=0;in;i+) %-6s%-8s%-11.2lf%-11.2lf%-11.2lf%-11.2lf%-11.2lf%-11.2lfn,stui.id,stui.name,stui.base,stui.position,stui.allowance,stui.insurance,stui.fund,stui.wage); /-14d% -表示左对齐 14 表示十四个字节的位置不足用空格补齐i+) m1+=stui.base; m2+=stui.positi
7、on; m3+=stui.allowance; m4+=stui.insurance; m5+=stui.fund; if(n!=0) printf(-n各项平均工资:%-11.2lf%-11.2lf%-11.2lf%-11.2lf%-11.2lfnn,m1/n,m2/n,m3/n,m4/n,m5/n);pause /系统函数停止。int Delete(Student stu) int i=0,j,x; char m10;t 1.全部删除nt 2.根据ID号删除nt请选择: x); if(x=1) for(j=0;jj+)/后一条记录覆盖前一条记录 stuj=stun+1; n=0;已抹掉数据
8、文件中的所有数据!n system( else if(x=2)t请输入想删除记录中的ID号: scanf(%s,m); while(strcmp(stui.id,m)!=0&n) i+; if(i=n) t职工工资管理系统中没有此人! else for(j=i;n-1; stuj=stuj+1; ttt已经成功删除! n=n-1; return (n);void Chick(Student stu) int m;tn请选择查询方式: /printf输出查询格式t*n/格式:t* 1-XX查询 *nt* 2-ID查询 *n请选择:m); while(m!=1&m!=2) 输入错误,请重新选择:
9、if(m=1) /此处对名字进行特殊处理 char s20; int f=0;t请输入想查询的XX:,s); while(strcmp(stui.name,s)!n ) /名字如果有重复的也照常输出 if(i=n) return; else %sn,stui.id);,stui.name); %.2lfn,stui.base);,stui.position);,stui.allowance);,stui.insurance);,stui.fund);t总工资:,stui.wage); if(m=2)/用ID作为索引查询t请输入想查询的ID: while(strcmp(stui.id,s)!n)
10、 void Change(Student stu) tn请选择修改方式:t* 1-ID *nt* 2-XX *n if(m=1) int i=0;t请输入想修改的记录中人的ID: while(strcmp(stui.id,m)!stui.base);stui.position);stui.allowance);stui.insurance);stui.fund); stui.wage=stui.base +stui.position +stui.allowance +stui.insurance +stui.fund;t修改成功! else if(m=2)t请输入想修改的记录中人的XX: wh
11、ile(strcmp(stui.name,m)!void WritetoText(Student stu) FILE *fp; /*定义文件指针*/ t保存到文件n /*输入文件名*/ if(fp=fopen(output,w)=NULL) t无法打开文件n while(i2000) s+;在职工工资前三项之和于2000的占总职工的百分比:%.2lfn,s/n); return(n);void Menu() while(1) /让这里程序循环,否则就退出程序了。 switch(Menu_Select() case 1:nt添加记录到职工工资管理系统n /*添加记录*/ n=Input(T); WritetoText(T); break; case 2:nttt职工工资管理系统记录表n Read(T); Display(T); /*显示记录*/ case 3:nt从职工工资管理系统中删除记录n n=Delete(T); /*删除记录*/ t /*按任
copyright@ 2008-2023 冰点文库 网站版权所有
经营许可证编号:鄂ICP备19020893号-2