C职工工资管理系统报告
更新时间:2024-05-20 08:10:01 阅读量: 综合文库 文档下载
1.题目
《职工工资管理系统》的设计与实现
2.功能
(1)每一条记录包括一个职工的工号、姓名、基本工资、职务工资、津贴、医疗保险、公积金和总工资。
(2)输入功能:可以一次完成多条记录的输入。 (3)显示功能:完成全部职工记录的显示。
(4)查找功能:完成按工号和姓名查找职工记录,并显示。 (5)排序功能:按职工的工号进行排序。 (6)插入功能:可以插入多名职工信息记录。
(7)保存功能:将职工记录保存在任何自定义的文件中。
(8)读取功能:将保存在文件中的职工信息工资信息读取出来。 (9)有一个清晰美观界面来调用各个功能
3.要求
(1)整个系统均用C语言实现;
(2)利用指针、链表来实现学生成绩的数据结构设计;
(3)系统具有输入、显示、查询、删除、排序、插入,保存、读取基本功能; (4)系统的各个功能模块都用函数的形式来实现; (5)可以将职工工资信息保存在文件中。 (6)可以将职工工资信息从文件中读取出来。
4.设计内容
整个系统除了主函数外,另外还有14个函数,实现八大功能:输入功能、显示功能、查找功能、排序功能、插入功能、保存功能、读取功能。各个函数的详细设计说明分别如下:
4.1主函数 main()
利用无限次循环for( )和swithch()实现各函数的调用,系统根据输入的数字选项来调用相应的函数。
4.2菜单选择函数 void menu()
这是一个无参函数,主要实现“功能选择”的界面,在这个界面里有显示系统的主要功能,根据每个功能前面的序号进行选择。等执行完每一个函数功能后,按任一键回到主界面也要通过这个函数来实现!
void menu() //菜单界面 { system(\ printf(\菜单***\\n\\n\ printf(\ 0 排序 *****************\\n\\n\ printf(\ 1 输入 *****************\\n\\n\
}
printf(\ 2 显示 *****************\\n\\n\printf(\ 3 查找 *****************\\n\\n\printf(\ 4 删除 *****************\\n\\n\printf(\ 5 添加 *****************\\n\\n\printf(\ 6 修改 *****************\\n\\n\printf(\ 7 帮助 *****************\\n\\n\printf(\ 8 退出 *****************\\n\\n\
4.3输入记录函数 void input()
通过结构体的数组来进行操作,先头定义数组em[],先输入需要输入的职工人数m,然后进入循环,每次循环将各项输入结构体数组对应项的对应成员中,当循环次数等于人数时,完成全部职工的信息输入,退出循环,同时将数据存储在employee_list文件中并自动保存到磁盘中。
void input() /*录入函数*/ {
int i,m;
system(\
printf(\职工人数(1--100):\\n\ scanf(\ for (i=0;i scanf(\ printf(\请输入职务工资: \ scanf(\ printf(\请输入津贴: \ scanf(\ printf(\请输入医疗保险: \ scanf(\ printf(\请输入公积金: \ scanf(\ em[i].total=((em[i].jbgz)+(em[i].zwgz)+(em[i].jt)-(em[i].yb)-(em[i].gjj));//计算总工资 printf(\计算总工资 } printf(\创建完毕!\\n\ save(m);//保存职工人数m } 4.4保存数据到文件函数 void save(int m) 读取文件employee_list,若文件不存在,打印“打开失败”并退出。若存在,通过循环语句将输入到结构体数组的数据逐个输入磁盘。 void save(int m) /*保存文件函数*/ { int i; FILE*fp; //声明fp是指针,用来指向FILE类型的对象 if ((fp=fopen(\打开职工列表文件为空 { printf (\打开失败\\n\ exit(0); } for (i=0;i if (fwrite(&em[i],sizeof(struct employee),1,fp)!=1)//写入数据块 &em[i]:是要输出数据的地址 sizeof(struct employee):获取一个单体的长度 1:数据项的个数 fp:目标文件指针 printf(\文件读写错误\\n\ fclose(fp);// 缓冲区内最后剩余的数据输出到磁盘文件中,并释放文件指针和有关的缓冲区 } 4.5从文件读数据函数 int load() 打开文件employee_list,若文件不存在,打印“打开失败”并退出。若存在读取文件中的数据,并返回职工人数。 int load() /*导入函数 int型*/ { FILE*fp; int i=0; if((fp=fopen(\ { printf (\ exit(0); } else { do { fread(&em[i],sizeof(struct employee),1,fp); //读取 i++; } while(feof(fp)==0); //检测流上的文件结束符 } fclose(fp); return(i-1);//返回人数 } 4.6显示记录函数 void display() 先通过读取函数的返回值确定职工人数m,再通过循环将员工工资信息逐个打印,当循 环次数达到m时退出循环。 void display() /*浏览函数*/ { int i,sum=0; int m=load(); system(\ printf(\职工号 姓名 基本工资 职务工资 津贴 医疗保险 公积金 总工资 \\n\ for(i=0;i printf(\职工平均工资为:%d \\n\} 4.7查找记录函数 void search() 根据提示输入要查询的工号或者姓名,程序通过循环语句将输入的数字与保存的结构体数组中的数据对比,如果相同,则打印该职工的信息,当循环数等于人数时结束循环,若等循环结束也没有找到相同的,则输出“查无此人”。 void search()/*查询函数*/ { int t,button; system(\清屏 do { printf(\按1 按工号查询\\n按2 按姓名查询\\n按3 回主菜单\\n\ scanf(\ if(t>=1&&t<=3) { button=1; break; } else { button=0; } { } } printf(\输入错误\} while(button==0);//回到查询选择项 while(button==1) switch(t)//选择查询方式 { case 1:printf(\按工号查询\\n\ case 2:printf(\按姓名查询\\n\ case 3:main();break; default:break; } 按照工号查询: void search_num()//按职工号查询 { int a; int i,t; int m=load(); printf(\请输入要查找的职工号:\\n\ scanf(\ for(i=0;i printf(\职工号 姓名 基本工资 职务工资 津贴 医疗保险 公积金 总工资 \\n\ printf(\ %-6d%-6s %-8d %-8d %-8d %-8d %-8d %-8d \ break; } if(i==m) printf(\对不起,查无此人\\n\ printf(\ printf(\返回查询函数请按1,继续查询职工号请按2\\n\ scanf(\ switch(t) { case 1:search();break; case 2: break; default:break; } } 按姓名查询: void search_name() { char name[30]; int i,t; int m=load(); printf(\请输入姓名:\\n\ scanf(\ for(i=0;i if(strcmp(em[i].name,name)==0) { printf(\已找到,其记录为:\\n\ printf(\职工号 姓名 基本工资 职务工资 津贴 医疗保险 公积金 总工资 \\n\ printf(\ %-6d%-6s %-8d %-8d %-8d %-8d %-8d %-8d \ } if(i==m) printf(\ printf(\ printf(\返回查询菜单请按1,继续查询姓名请按2\\n\ scanf(\ switch(t) { case 1:search();break; case 2:break; default :break; } } 4.8删除记录函数 void del() 先将职工信息打印出来,然后输入要删除职工的姓名,若该姓名不存在,则显示“查无此人”,如果存在则显示职工信息并且询问是否确认删除,若确定则删除。 void del() /*删除函数 */ { int m=load(); int i,j,n,t,button; char name[20]; printf(\原来的职工信息:\\n\ display(); //显示删除前的员工信息 printf(\ printf(\按姓名删除:\\n\ scanf(\ for(button=1,i=0;button&&i em[j].yb=em[j+1].yb; em[j].gjj=em[j+1].gjj; em[j].total=em[j+1].total; } button=0; } } } if(!button)//button==0表明删除已完成 m=m-1;//总员工数减少一人 else printf(\查无此人!\\n\ printf(\删除后的所有职工信息:\\n\ save(m); //调用保存函数 display(); //调用浏览函数 printf(\继续删除请按1,不再删除请按0\\n\ scanf(\ switch(t) { case 1:del();break; case 0:break; default :break; } } 删除后为 4.9插入函数 void add() 打印原有职工信息,询问要添加到职工人数并询问是否确定添加。逐个逐项输入职工信息,之后计算总工资。完成后显示“添加成功”,打印新的职工信息并自动保存。 void add()/*添加函数*/ { FILE*fp; int n; int count=0; int i; int m=load(); printf(\原来的职工信息:\\n\ display(); printf(\ fp=fopen(\ printf(\请输入想增加的职工数:\\n\确定要加入的职工数n scanf(\ for (i=m;i<(m+n);i++)//添加n名员工的信息 { printf(\请输入新增加职工的信息:\\n\ printf(\请输入职工号: \ scanf(\ printf(\ printf(\请输入姓名: \ scanf(\ getchar(); printf(\请输入基本工资: \ scanf(\ printf(\请输入职务工资: \ scanf(\ printf(\请输入津贴: \ scanf(\ printf(\请输入医疗保险: \ scanf(\ printf(\请输入公积金: \ scanf(\ em[i].total=( em[i].jbgz+ em[i].zwgz + em[i].jt- em[i].yb- em[i].gjj);//计算该员工 总工资 printf(\ count=count+1; printf(\已增加的人数:\\n\ printf(\ } printf(\添加成功\\n\ m=m+count;//将新添加员工的人数加到总员工人数中 printf(\增加后的所有职工信息:\\n\ printf(\ save(m); display();//显示添加后的信息 fclose(fp); } 运行后结果为 4.10排序函数 void sort() 根据职工的工号来进行排序,此处采用冒泡法。如果前一个职工的工号大于后面一个职工的工号,则两人位置交换,依次类推,经过多次交换后可得到工号从小到大的排序。 void sort() { int i,j; int m=load(); struct employee p; for(i=0;i printf(\职工号 姓名 基本工资 职务工资 津贴 医疗保险 公积金 总工资 \\n\ for(i=0;i 4.11修改数据函数 void modify() 打印职工信息并提示输入要修改信息的职工姓名。按照提示选择要修改的项目,输入要修改的结果并将该结果赋值给对应的成员,完成指定的修改。 void modify() /*修改函数*/ { int num; char name[20]; int jbgz; int zwgz; int jt; int yb; int gjj; int b,c,i,n,t,button; int m=load(); system(\ printf(\原来的职工信息:\\n\ display(); printf(\ printf(\请输入要修改的职工的姓名:\\n\ scanf(\ for(button=1,i=0;button&&i printf(\查无此人\\n\ do { switch(c) /*因为当找到第i个职工时,for语句后i自加了1,所以下面的应该把改后的信息赋值给第i-1个人*/ { case 1:printf(\职工号改为: \ scanf(\ em[i-1].num=num; break; case 2:printf(\姓名改为: \ scanf(\ strcpy(em[i-1].name,name); break; case 3:printf(\基本工资改为: \ getchar(); scanf(\ em[i-1].jbgz=jbgz; em[i-1].total=( em[i-1].jbgz+ em[i-1].zwgz + em[i-1].jt- em[i-1].yb- em[i-1].gjj); break; case 4:printf(\职务工资改为: \ scanf(\ em[i-1].zwgz=zwgz; em[i-1].total=( em[i-1].jbgz+ em[i-1].zwgz + em[i-1].jt- em[i-1].yb- em[i-1].gjj); break; case 5:printf(\津贴改为: \ scanf(\ em[i-1].jt=jt; em[i-1].total=( em[i-1].jbgz+ em[i-1].zwgz + em[i-1].jt- em[i-1].yb- em[i-1].gjj); break; case 6:printf(\医疗保险改为: \ scanf(\ em[i-1].yb=yb; em[i-1].total=( em[i-1].jbgz+ em[i-1].zwgz + em[i-1].jt- em[i-1].yb- em[i-1].gjj); break; case 7:printf(\公积金改为: \ scanf(\ em[i-1].gjj=gjj; em[i-1].total=( em[i-1].jbgz+ em[i-1].zwgz + em[i-1].jt- em[i-1].yb- em[i-1].gjj); break; case 8:modify(); break; } printf(\ printf(\确定修改 请按1 ; 重新修改 请按2: \\n\ scanf(\ } while(b==2); printf(\修改后的所有职工信息:\\n\ printf(\ save(m); display(); printf(\按1 继续修改 ,不再修改请按0\\n\ scanf(\ switch(t) { case 1:modify();break; case 0:break; default :break; } } 修改后为 程序部分 #include struct employee { int num; //ID号 char name[20]; //姓名 int jbgz; //基本工资 int zwgz; //职务工资 int jt; // 津贴 int yb; //医疗保险 int gjj; //公积金/ int total; //总工资 }em[100]; void menu(); void input(); void save(int); void display(); void del(); void add(); void search(); void search_num(); void search_name(); void modify(); void help(); void sort(); void start(); /*定义各函数*/ void start() //开始界面 { system(\清屏 printf(\ printf(\***********\ printf(\欢迎使用工资管理系统 *****************************\ printf(\************\\n\\n\\n\\n\\n\ printf(\ ***按任意键进入***\\n\ } void menu() //菜单界面 { system(\ printf(\菜单***\\n\\n\ printf(\*************************************\\n\\n\ printf(\*************************************\\n\\n\ printf(\*************************************\\n\\n\ printf(\*************************************\\n\\n\ printf(\*************************************\\n\\n\ printf(\*************************************\\n\\n\ printf(\*************************************\\n\\n\ printf(\*************************************\\n\\n\ printf(\*************************************\\n\\n\} void input() /*录入函数*/ { int i,m; system(\ printf(\职工人数(1--100):\\n\ scanf(\ 0 1 2 3 4 5 6 7 8 排序输入显示查找删除添加修改帮助退出 for (i=0;i printf(\创建完毕!\\n\ save(m);//保存职工人数m } void save(int m) /*保存文件函数*/ { int i; FILE*fp; //声明fp是指针,用来指向FILE类型的对象 if ((fp=fopen(\打开职工列表文件为空 { printf (\打开失败\\n\ exit(0); } for (i=0;i if (fwrite(&em[i],sizeof(struct employee),1,fp)!=1)//写入数据块 &em[i]:是要输出数据的地址 sizeof(struct employee):获取一个单体的长度 1:数据项的个数 fp:目标文件指针 printf(\文件读写错误\\n\ fclose(fp);// 缓冲区内最后剩余的数据输出到磁盘文件中,并释放文件指针和有关的缓冲区 } int load() /*导入函数 int型*/ { FILE*fp; int i=0; if((fp=fopen(\ { printf (\ exit(0); } else { do { fread(&em[i],sizeof(struct employee),1,fp); //读取 i++; } while(feof(fp)==0); //检测流上的文件结束符 } fclose(fp); return(i-1);//返回人数 } void display() /*浏览函数*/ { int i,sum=0; int m=load(); system(\ printf(\职工号 姓名 基本工资 职务工资 津贴 医疗保险 公积金 总工 资 \\n\ for(i=0;i {printf(\ %-6d%-6s %-8d %-8d %-8d %-8d %-8d %-8d \ sum+=em[i].total;//计算员工总工资之和 } printf(\职工平均工资为:%d \\n\} void del() /*删除函数 */ { int m=load(); int i,j,n,t,button; char name[20]; printf(\原来的职工信息:\\n\ display(); //显示删除前的员工信息 printf(\ printf(\按姓名删除:\\n\ scanf(\ for(button=1,i=0;button&&i em[j].jt=em[j+1].jt; em[j].yb=em[j+1].yb; em[j].gjj=em[j+1].gjj; em[j].total=em[j+1].total; } button=0; } } } if(!button)//button==0表明删除已完成 m=m-1;//总员工数减少一人 else printf(\查无此人!\\n\ printf(\删除后的所有职工信息:\\n\ save(m); //调用保存函数 display(); //调用浏览函数 printf(\继续删除请按1,不再删除请按0\\n\ scanf(\ switch(t) { case 1:del();break; case 0:break; default :break; } } void add()/*添加函数*/ { FILE*fp; int n; int count=0; int i; int m=load(); printf(\原来的职工信息:\\n\ display(); printf(\ fp=fopen(\ printf(\请输入想增加的职工数:\\n\确定要加入的职工数n scanf(\ for (i=m;i<(m+n);i++)//添加n名员工的信息 { printf(\请输入新增加职工的信息:\\n\ printf(\请输入职工号: \ scanf(\ printf(\ printf(\请输入姓名: \ scanf(\ getchar(); printf(\请输入基本工资: \ scanf(\ printf(\请输入职务工资: \ scanf(\ printf(\请输入津贴: \ scanf(\ printf(\请输入医疗保险: \ scanf(\ printf(\请输入公积金: \ scanf(\ em[i].total=( em[i].jbgz+ em[i].zwgz + em[i].jt- em[i].yb- em[i].gjj);//计算该员工总工资 printf(\ count=count+1; printf(\已增加的人数:\\n\ printf(\ } printf(\添加成功\\n\ m=m+count;//将新添加员工的人数加到总员工人数中 printf(\增加后的所有职工信息:\\n\ printf(\ save(m); display();//显示添加后的信息 fclose(fp); } void search()/*查询函数*/ { int t,button; system(\清屏 do { printf(\按1 按工号查询\\n按2 按姓名查询\\n按3 回主菜单\\n\ scanf(\ if(t>=1&&t<=3) { button=1; break; } else { button=0; printf(\输入错误\ } } while(button==0);//回到查询选择项 while(button==1) { switch(t)//选择查询方式 { case 1:printf(\按工号查询\\n\ case 2:printf(\按姓名查询\\n\ case 3:main();break; default:break; } } } void search_num()//按职工号查询 { int a; int i,t; int m=load(); printf(\请输入要查找的职工号:\\n\ scanf(\ for(i=0;i printf(\职工号 姓名 基本工资 职务工资 津贴 医疗保险公积金 总工资 \\n\ printf(\ %-6d%-6s %-8d %-8d %-8d %-8d %-8d \ break; } if(i==m) printf(\对不起,查无此人\\n\ printf(\ printf(\返回查询函数请按1,继续查询职工号请按2\\n\ scanf(\ switch(t) { case 1:search();break; case 2: break; default:break; } } void search_name() { char name[30]; int i,t; int m=load(); printf(\请输入姓名:\\n\ scanf(\ for(i=0;i if(strcmp(em[i].name,name)==0) { printf(\已找到,其记录为:\\n\ printf(\职工号 姓名 基本工资 职务工资 津贴 医疗保险 公积金 资 \\n\ printf(\ %-6d%-6s %-8d %-8d %-8d %-8d %-8d \ } if(i==m) printf(\ printf(\ printf(\返回查询菜单请按1,继续查询姓名请按2\\n\ scanf(\ switch(t) { case 1:search();break; %-8d 总工%-8d case 2:break; default :break; } } void modify() /*修改函数*/ { int num; char name[20]; int jbgz; int zwgz; int jt; int yb; int gjj; int b,c,i,n,t,button; int m=load(); system(\ printf(\原来的职工信息:\\n\ display(); printf(\ printf(\请输入要修改的职工的姓名:\\n\ scanf(\ for(button=1,i=0;button&&i if(c>8||c<1) printf(\选择错误,请重新选择!\\n\ } button=0; } } if(button==1) printf(\查无此人\\n\ do { switch(c) /*因为当找到第i个职工时,for语句后i自加了1,所以下面的应该把改后的信息赋值给第i-1个人*/ { case 1:printf(\职工号改为: \ scanf(\ em[i-1].num=num; break; case 2:printf(\姓名改为: \ scanf(\ strcpy(em[i-1].name,name); break; case 3:printf(\基本工资改为: \ getchar(); scanf(\ em[i-1].jbgz=jbgz; em[i-1].total=( em[i-1].jbgz+ em[i-1].zwgz + em[i-1].jt- em[i-1].yb- em[i-1].gjj); break; case 4:printf(\职务工资改为: \ scanf(\ em[i-1].zwgz=zwgz; em[i-1].total=( em[i-1].jbgz+ em[i-1].zwgz + em[i-1].jt- em[i-1].yb- em[i-1].gjj); break; case 5:printf(\津贴改为: \ scanf(\ em[i-1].jt=jt; em[i-1].total=( em[i-1].jbgz+ em[i-1].zwgz + em[i-1].jt- em[i-1].yb- em[i-1].gjj); break; case 6:printf(\医疗保险改为: \ scanf(\ em[i-1].yb=yb; em[i-1].total=( em[i-1].jbgz+ em[i-1].zwgz + em[i-1].jt- em[i-1].yb- em[i-1].gjj); break; case 7:printf(\公积金改为: \ scanf(\ em[i-1].gjj=gjj; em[i-1].total=( em[i-1].jbgz+ em[i-1].zwgz + em[i-1].jt- em[i-1].yb- em[i-1].gjj); break; case 8:modify(); break; } printf(\ printf(\确定修改 请按1 ; 重新修改 请按2: \\n\ scanf(\ } while(b==2); printf(\修改后的所有职工信息:\\n\ printf(\ save(m); display(); printf(\按1 继续修改 ,不再修改请按0\\n\ scanf(\ switch(t) { case 1:modify();break; case 0:break; default :break; } } void help()// { system(\ printf(\说明:*如首次使用 尚未输入数据 请先输入数据 \\n 保存 \\n *再次选择输入功能时原数据将被覆盖\\n\\n\ getch(); menu(); *输入的数据将自动 } void sort() { int i,j; int m=load(); struct employee p; for(i=0;i printf(\职工号 姓名 基本工资 职务工资 津贴 医疗保险 公积金 总工资 \\n\ for(i=0;i int main()//主函数 { int n,button; char a; start(); getch(); menu(); do { printf(\功能选择(0--8):\\n\ scanf(\ if(n>=0&&n<=7) { button=1; break; } else { button=0; printf(\您输入有误,请重新选择!\ } }while(button==0); while(button==1) { switch(n) { case 0:sort();break; case 1: input();break; case 2: display();break; case 3: search();break; case 4:del();break; case 5: add();break; case 6:modify();break; case 7:help();break; case 8:exit(0);break; default :break; } getchar(); printf(\ printf(\按任意键继续\\n\ getch(); system(\ /*清屏*/ menu(); /*调用菜单函数*/ printf(\功能选择(1--8):\\n\ scanf(\ printf(\ } return 0; }
正在阅读:
C职工工资管理系统报告05-20
我是一个快乐的人作文(精选4篇)02-05
实验五 基于MATLAB控制系统的根轨迹及其性能分析09-17
网络视频服务器和网络摄像机操作手册V3.0.2 - 图文10-02
技术质量组钢筋施工员绩效考核表06-03
三相正弦变频电源的软件设计论文 - 图文01-28
北京市西城区2016-2017学年七年级上学期期末政治试卷(解析版)08-30
如何认识当今中美关系06-05
最新上海浦东机场大巴时刻表11-05
初中语文期中考试质量分析报告03-09
- 多层物业服务方案
- (审判实务)习惯法与少数民族地区民间纠纷解决问题(孙 潋)
- 人教版新课标六年级下册语文全册教案
- 词语打卡
- photoshop实习报告
- 钢结构设计原理综合测试2
- 2014年期末练习题
- 高中数学中的逆向思维解题方法探讨
- 名师原创 全国通用2014-2015学年高二寒假作业 政治(一)Word版
- 北航《建筑结构检测鉴定与加固》在线作业三
- XX县卫生监督所工程建设项目可行性研究报告
- 小学四年级观察作文经典评语
- 浅谈110KV变电站电气一次设计-程泉焱(1)
- 安全员考试题库
- 国家电网公司变电运维管理规定(试行)
- 义务教育课程标准稿征求意见提纲
- 教学秘书面试技巧
- 钢结构工程施工组织设计
- 水利工程概论论文
- 09届九年级数学第四次模拟试卷
- 管理系统
- 职工
- 工资
- 报告
- 教师心理健康与压力管理
- A5监理工程师通知回复单
- 材料作文“过往与现在”写作指导与示例
- 你越成熟,可以责怪的人就越少
- 基于二分网络模型的模拟电路网络特性分析及测点选择 - 图文
- c#udp(接收和发送源码)源码完整
- 家庭暴力的法律特征及法律对策
- 化学实验报告 实验__直接碘量法测定维生素C的含量
- 3、最新鄂教版三年级上册品社教案
- 白芍炮制
- 《人力资源管理》形考作业及答案(供参考)
- 8Aunit one练习题(牛津英语上海版)
- 2018届中考第二次(6月)模拟考试数学试题含答案
- 现代出版研究所读书沙龙纪要
- “电路原理”第1-6章作业
- 关于初中物理课堂小组合作学习的探究
- 江苏省扬州中学 高二物理下学期3月月考试卷含解析
- 桃花源诗词
- Dyxspm雅思口语高分公式
- 第十五章,Access数据库与ADO控件讲义