1、C语言 职工工资管理系统设计报告C语言程序设计课 程 设 计 报 告分 值 设计题目: 职工工资管理系统专 业: 班 级: 学 号: 姓 名: 信息工程学院1 前言工资管理系统是企业不可缺少的一部分,它利用计算机对员工工资进行统一管理,实现工资管理系统的系统化、规化和自动化,为企业提高工作效率。本程序旨在训练读者的基本编程能力,了解管理信息系统的开发流程,熟悉C语言的文件和结构数组的各种基本操作。本程序中涉及结构体、数组、文件等面的知识。2 需求分析2.1 课程设计目的 学生在教师指导下运用所学课程的知识来研究、解决一些具有一定综合性问题的专业课题。通过课程设计(论文),提高学生综合运用所学知
2、识来解决实际问题、使用文献资料、及进行科学实验或技术设计的初步能力,为毕业设计(论文)打基础。2.2 课程设计任务职工工资管理系统 功能设计要求 (1)输入记录:将每一个职工的姓名、ID号以及基本工资、职务工资、岗位津贴、医疗保险、公积金的数据作为一个记录。该软件能建立一个新的数据文件或给已建立好的数据文件增加记录。(2)显示记录:根据用户提供的记录或者根据职工姓名显示一个或几个职工的各项工资和平均工资。(3)修改记录:可以对数据文件的任意记录的数据进行修改并在修改前后对记录容进行显示。(4)查找记录:可以对数据文件的任意记录的数据进行查找并在查找前后对记录容进行显示。 (5)删除记录:可删除
3、数据文件中的任一记录。 (6) 统计: (A)计算各项工资平均工资及总工资, (B)统计符合指定条件(如职工工资前三项之和在3000元以上、30002000元、20001000元) 以的工资职工人数及占总职工人数的百分比。(C)按字符表格形式打印全部职工工资信息表及平均工资(包括各项总的平均工资)。 (7)保存数据文件功能。 例如:职工工资信息表 ID号 姓名 基本工资 职务工资 津贴 医疗保险- 公积金- 总工资 01 望 1286 794 198 109 2034 02 明 1185 628 94 114 1740 03 小民 895 438 98 64 73 1294 04 效章 135
4、0 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.3 设计环境(1)WINDOWS 2000/2003/XP/7/Vista系统(2)Visual C+ 2.4 开发语言C语言3 分析和设计从主菜单中选择相对应的数字,使程序进入不同的程序模块,用switch实现其功能,程序共分为六个模块,分别为:主函数、Input( )函数(输入函数)、Disp
5、lay(T)显示函数(计算职工工资信息并输入文件)、Delete (T)删除函数(从文件中读入信息并将其删除),Chick(T)查询模块,Change(T);修改模块,sum(T);统计模块3.1 系统模块图 图3.1 系统模块图 4 具体代码实现#includestdio.h #include #include #include / 头文件 static int n=0; / 定义静态全局变量,存储已经读入记录的条数。 typedef struct char id15; /*ID号*/ char name10; /*姓名*/ double base; /*基本工资*/ double posi
6、tion; /*职务工资*/ double allowance; /*津贴*/ double insurance; /*医疗保险*/ double fund; /公积金 double wage; /总工资 Student; Student T100; int Menu_Select() int c; do system(cls); /清屏 printf(tt*职工工资管理系统*n); printf(ttn); printf(tt# 1. 添加记录 #n); printf(tt# #n); printf(tt# 2. 显示记录 #n); printf(tt# #n); printf(tt# 3.
7、 删除记录 #n); printf(tt# #n); printf(tt# 4. 查询记录 #n); printf(tt# #n); printf(tt# 5. 修改记录 #n); printf(tt# #n); printf(tt# 6. 统计记录 #n); printf(tt# #n); printf(tt# 0. 退出程序 #n); printf(tt#n); printf(ttt请您选择(0-6)选择请输入:); scanf(%d,&c); while(c=7); return(c); int Input(Student stu) int i=0; char sign; while(s
8、ign!=n&sign!=N) printf(tID:); scanf(t%s,stun+i.id); printf(t姓名:); scanf(t%s,stun+i.name); printf(t基本工资:); scanf(t%lf,&stun+i.base); printf(t职务工资:); scanf(t%lf,&stun+i.position); printf(t津贴:); scanf(t%lf,&stun+i.allowance); printf(t医疗保险:); scanf(t%lf,&stun+i.insurance); printf(t公积金:); scanf(t%lf,&stu
9、n+i.fund); stun+i.wage=stun+i.base +stun+i.position +stun+i.allowance +stun+i.insurance +stun+i.fund; ; printf(nt是否继续添加?(Y/N); scanf(t%c,&sign); i+; return(n+i); void Display(Student stu) int i; double m1=0,m2=0,m3=0,m4=0,m5=0; printf(nn按照姓名进行排序!nn); printf(-n); /显示的格式 printf(ID 姓名 基本工资 职务工资 津贴 医疗保险
10、 公积金 总工资n); printf(-n); for(i=0;in;i+) printf(%-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 表示十四个字节的位置 不足用空格补齐 for(i=0;in;i+) m1+=stui.base; m2+=stui.position; m3+=stui.allowanc
11、e; m4+=stui.insurance; m5+=stui.fund; if(n!=0) printf(-n); printf(各项平均工资:%-11.2lf%-11.2lf%-11.2lf%-11.2lf%-11.2lfnn,m1/n,m2/n,m3/n,m4/n,m5/n); system(pause); /系统函数停止。 int Delete(Student stu) int i=0,j,x; char m10; printf(t 1.全部删除n); printf(t 2.根据ID号删除n); printf(t请选择: ); scanf(%d,&x); if(x=1) for(j=0
12、;jn;j+)/后一条记录覆盖前一条记录 stuj=stun+1; n=0; printf(已抹掉数据文件中的所有数据!n); system(pause); else if(x=2) printf(t请输入想删除记录中的ID号:); scanf(%s,m); while(strcmp(stui.id,m)!=0&in) i+; if(i=n) printf(t职工工资管理系统中没有此人!n); else for(j=i;jn-1;j+)/后一条记录覆盖前一条记录 stuj=stuj+1; printf(ttt已经成功删除!n); n=n-1; return (n); void Chick(St
13、udent stu) int m; printf(tn请选择查询式:n); /printf输出查询格式 printf(t*n);/格式: printf(t* 1-姓名查询 *n); printf(t* 2-ID查询 *n); printf(t*n); printf(请选择:); scanf(%d,&m); while(m!=1&m!=2) printf(输入错误,请重新选择:); scanf(%d,&m); if(m=1) /此处对名字进行特殊处理 char s20; int i=0; int f=0; printf(t请输入想查询的姓名:); scanf(t%s,s); while(strc
14、mp(stui.name,s)!=0&in ) /名字如果有重复的也照常输出 i+; if(i=n) printf(t职工工资管理系统中没有此人!n); return; else printf(tID: %sn,stui.id); printf(t姓名: %sn,stui.name); printf(t基本工资: %.2lfn,stui.base); printf(t职务工资: %.2lfn,stui.position); printf(t津贴: %.2lfn,stui.allowance); printf(t医疗保险: %.2lfn,stui.insurance); printf(t公积金:
15、 %.2lfn,stui.fund); printf(t总工资: %.2lfn,stui.wage); if(m=2)/用ID作为索引查询 char s20; int i=0; printf(t请输入想查询的ID:); scanf(t%s,s); while(strcmp(stui.id,s)!=0&in) i+; if(i=n) printf(t职工工资管理系统中没有此人!n); return; printf(tID: %sn,stui.id); printf(t姓名: %sn,stui.name); printf(t基本工资: %.2lfn,stui.base); printf(t职务工资
16、: %.2lfn,stui.position); printf(t津贴: %.2lfn,stui.allowance); printf(t医疗保险: %.2lfn,stui.insurance); printf(t公积金: %.2lfn,stui.fund); printf(t总工资: %.2lfn,stui.wage); void Change(Student stu) int m; printf(tn请选择修改式:n); /printf输出查询格式 printf(t*n);/格式: printf(t* 1-ID *n); printf(t* 2-姓名 *n); printf(t*n); p
17、rintf(请选择:); scanf(%d,&m); while(m!=1&m!=2) printf(输入错误,请重新选择:); scanf(%d,&m); if(m=1) int i=0; char m10; printf(t请输入想修改的记录中人的ID:); scanf(%s,m); while(strcmp(stui.id,m)!=0&in) i+; if(i=n) printf(t职工工资管理系统中没有此人!n); return; printf(tID:); scanf(t%s,stui.id); printf(t姓名:); scanf(t%s,stui.name); printf(t
18、基本工资:); scanf(t%lf,&stui.base); printf(t职务工资:); scanf(t%lf,&stui.position); printf(t津贴:); scanf(t%lf,&stui.allowance); printf(t医疗保险:); scanf(t%lf,&stui.insurance); printf(t公积金:); scanf(t%lf,&stui.fund); stui.wage=stui.base +stui.position +stui.allowance +stui.insurance +stui.fund; printf(t修改成功!); el
19、se if(m=2) int i=0; char m10; printf(t请输入想修改的记录中人的姓名:); scanf(%s,m); while(strcmp(stui.name,m)!=0&in) i+; if(i=n) printf(t职工工资管理系统中没有此人!n); return; printf(tID:); scanf(t%s,stui.id); printf(t姓名:); scanf(t%s,stui.name); printf(t基本工资:); scanf(t%lf,&stui.base); printf(t职务工资:); scanf(t%lf,&stui.position)
20、; printf(t津贴:); scanf(t%lf,&stui.allowance); printf(t医疗保险:); scanf(t%lf,&stui.insurance); printf(t公积金:); scanf(t%lf,&stui.fund); stui.wage=stui.base +stui.position +stui.allowance +stui.insurance +stui.fund; printf(t修改成功!); void WritetoText(Student stu) int i=0; FILE *fp; /*定义文件指针*/ printf(t保存到文件n);
21、 /*输入文件名*/ if(fp=fopen(output,w)=NULL) printf(t无法打开文件n); system(pause); return; while(in) fprintf(fp,%s %s %lf %lf %lf %lf %lf %lfn,stui.id,stui.name,stui.base,stui.position,stui.allowance,stui.insurance,stui.fund,stui.wage); i+; fclose(fp); /*关闭文件*/ printf(保存成功!n); void Read(Student stu) FILE *fp;
22、int i; char filename20; strcpy(filename,output); if(fp=fopen(filename,r)=NULL) printf(找不到%s文件!n,filename); system(pause); return ; n=0; for(i=0;i100&!feof(fp);i+) /这里的100 是前面已经说明了 最多可以存100条记录 fscanf(fp,%s %s %lf %lf %lf %lf %lf %lf n,stui.id,&stui.name,&stui.base,&stui.position,&stui.allowance,&stui
23、.insurance,&stui.fund,&stui.wage); n+; fclose(fp); /qsort(stu,n,sizeof(Student),comp);/调用qsort排序 printf(读取成功,文件%s中的所有信息已经读入!n,filename); int sum(Student stu) int i; double s=0,m=0,n1,s1; for(i=0;i2000) s+; printf(在职工工资前三项之和于2000的占总职工的百分比:%.2lfn,s/n); return(n); system(pause); void Menu() while(1) /让这里程序循环,否则就退出程序了。 switch(Menu_Select() case 1: printf(nt添加记录到职工工资管理系统n); /*添加记录*/ n=Input(T); WritetoText(T); system(pause); break; case 2: printf(nttt职工工资管理系统记录表n); Read(T); Display(T); /*显示记录*/ system(pause); break; case 3: printf(nt从职工工资管理系统中删
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1