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
预备党员入党思想汇报范文12-11
电子(填空、选择、判断、简答)04-19
济南市人民政府办公厅关于印发济南市城市污水处理费征收使用管理办法的通知01-10
选择题整理标准答案05-02
落叶之歌作文800字07-15
综采工作面更换液压支架立柱安全阀技术措施04-09
广西大学2011新电感应舞会策划10-31
90后的女生学什么技术才好?04-13
- 多层物业服务方案
- (审判实务)习惯法与少数民族地区民间纠纷解决问题(孙 潋)
- 人教版新课标六年级下册语文全册教案
- 词语打卡
- 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控件讲义