职工工资信息管理系统.docx
《职工工资信息管理系统.docx》由会员分享,可在线阅读,更多相关《职工工资信息管理系统.docx(34页珍藏版)》请在冰豆网上搜索。
职工工资信息管理系统
安徽科技学院
网络工程
《数据结构》课程设计
实验报告
实验名称
实验场所
1.概要设计:
一、主函数:
1)建立单项链表;
2)建立主菜单:
定义变量a,输入a的数值,并用switch语句分别对查找、添加、修改、删除、排序、统计、录入信息、保存信息和退出系统进行选择。
然后调用该功能的模块。
二、查找目录:
1)按工资卡卡号查询;
2)按身份证号码查询;
3)按姓名查找;
4)按部门查找;
5)显示所有的学生信息;
6)返回主菜单。
三、查找函数:
工资卡和身份证号码具有唯一性,所以查找这两个数据的时候只需要找到该员工的信息就可以结束该查找模块,并将数据显示出来。
姓名和部门的人数不一定是唯一的,所以当找到了符合需要的信息之后该该模块还要继续往下查找,直到将链表的所有数据全都查询为止。
显示全部就是调用输出模块将所有的数据全部显示出来。
查找是通过定义一个字符串,用来存储需要查找的数据,然后通过while循环,往下查找并结合if的选择性将需要查找的数据找到并显示出来。
四、添加函数:
1)定义两个字符型的数组,用来存储员工的工资卡号和身份证号码;
2)查找输入员工的工资卡号,如果该生存在则不能添加;
3)如果没有该学号,输入身份证号码;
4)查找整个链表的数据,如果存在相同的身份证号码,则提示该身份证号码存在,需要重新输入,当连续三次输入存在的身份证号码时,则不能再次输入,并返回主菜单;
5)当身份证号码不存在,则开辟一个内存空间,用来存储该员工的信息;
6)将该空间插入到链表的第一个位置。
五、修改函数:
1)定义一个字符型的数组,用来存储员工工资卡号;
2)查找该员工,如果找不到则提示没有该员工的信息,并返回主菜单;
3)找到该员工,显示该员工的信息,并在某些可以改动的信息上面标记了数字,并要求用户选择需要修改的项目,如果需要改卡号和身份证号码,则不能输入已经存在,否则不能改动,其他的信息可任意改动,每次修改都会将修改之后该员工的信息显示出来;
4)选择0停止修改并返回主菜单。
六、删除函数:
1)定义一个字符型的数组,用来存储学生学号;
2)查找输入的学生的学号,如果找到了该学号,显示该员工的信息;
3)提示用户是否需要删除,删除输入1,输入其他的数字返回主菜单。
七、排序目录:
1)按员工工号排序;
2)按员工姓名排序;
3)按应发工资排序;
4)按实发工资排序;
5)返回主菜单。
八、排序函数:
1)进入排序程序,先开辟一个内存空间,建立一个辅助结点phead,从head链表中卸下头结点,插入到phead中;
2)将无序链表head变换为有序链表phead,将head指向第一个结点,回收phead。
九、统计目录:
1)统计所有员工;
2)统计所有员工;
3)返回主菜单。
十、统计函数:
1)在输入信息和修改信息的时候用到了统计应发工资和实发工资;
2)定义计算公积金和税金的函数;
3)统计所有员工,将所有的员工的各种数据都统计出来;
4)俺部门统计,用while和if语句将同一个部门的数据统计出来。
十一、导入和保存文件程序:
1)定义一个字符型的数组,用来存储文件的地址;
2)导入信息时将开辟一个内存的空间,用来存储一个员工的信息,通过while语句控制,直到将所有的员工都录入进去,关闭文件!
3)保存信息,将链表中的数据保存到输入的地址,关闭文件。
2.详细设计
#include
#include
#include
#include
structworker
{
charno[10];
charsfz[18];
charname[9];
charbumen[6];
floatfee[8];
structworker*next;
};
floatshuijin(structworker*p)
{
if(p->fee[3]<=500)
returnp->fee[3]*0.05-0;
elseif(p->fee[3]<=2000)
returnp->fee[3]*0.1-25;
elseif(p->fee[3]<=5000)
returnp->fee[3]*0.15-125;
elseif(p->fee[3]<=20000)
returnp->fee[3]*0.2-375;
elseif(p->fee[3]<=40000)
returnp->fee[3]*0.25-1375;
elseif(p->fee[3]<=60000)
returnp->fee[3]*0.30-3375;
elseif(p->fee[3]<=80000)
returnp->fee[3]*0.35-6375;
elseif(p->fee[3]<=100000)
returnp->fee[3]*0.40-10375;
else
returnp->fee[3]*0.45-15375;
}
floatgongjijin(structworker*p)
{
if(p->fee[3]<=1500)
return0;
elseif(p->fee[3]<=3000)
returnp->fee[3]*0.05;
elseif(p->fee[3]<=4500)
returnp->fee[3]*0.1;
else
returnp->fee[3]*0.15;
}
voiddisplay(structworker*p)
{
printf("┏━━━━┳━━━━━┳━━━┳━━┳━━━━┳━━━━┳━━━━┳━━━━┳━━━━┳━━━━┳━━━━┳━━━━┓\n");
printf("┃卡号┃身份证号码┃姓名┃部门┃基本工资┃职务工资┃各种补助┃应发工资┃水电费┃公积金┃税金┃实发工资┃\n");
printf("┣━━━━╋━━━━━╋━━━╋━━╋━━━━╋━━━━╋━━━━╋━━━━╋━━━━╋━━━━╋━━━━╋━━━━┫\n");
printf("┃%-8s┃%-10s┃%-6s┃%-4s┃%8.2f┃%8.2f┃%8.2f┃%8.2f┃%8.2f┃%8.2f┃%8.2f┃%8.2f┃\n",p->no,p->sfz,p->name,p->bumen,p->fee[0],p->fee[1],p->fee[2],p->fee[3],p->fee[4],p->fee[5],p->fee[6],p->fee[7]);
printf("┗━━━━┻━━━━━┻━━━┻━━┻━━━━┻━━━━┻━━━━┻━━━━┻━━━━┻━━━━┻━━━━┻━━━━┛\n");
}
intA(structworker*head)
{
structworker*p=head;
charno[10];
printf("请输入员工工资卡卡号:
");
scanf("%s",no);
while(p!
=NULL)
{
if(strcmp(no,p->no)==0)
{
display(p);
printf("\n\n按回车键返回查找菜单!
");
getchar();getchar();
printf("\n\n");
return1;
}
p=p->next;
}
printf("该员工未找到!
\n");
printf("\n\n按回车键返回查找菜单!
");
getchar();getchar();
printf("\n\n");
return0;
}
intB(structworker*head)
{
structworker*p=head;
charsfz[18];
printf("请输入身份证号码:
");
scanf("%s",sfz);
while(p!
=NULL)
{
if(strcmp(sfz,p->sfz)==0)
{
display(p);
printf("\n\n按回车键返回查找菜单!
");
getchar();getchar();
printf("\n\n");
return1;
}
p=p->next;
}
printf("该员工未找到!
\n");
printf("\n\n按回车键返回查找菜单!
");
getchar();getchar();
printf("\n\n");
return0;
}
voidC(structworker*head)
{
structworker*p=head;
charname[9];
inti=0;
printf("请输入姓名:
");
scanf("%s",name);
printf("┏━━━━┳━━━━━┳━━━┳━━┳━━━━┳━━━━┳━━━━┳━━━━┳━━━━┳━━━━┳━━━━┳━━━━┓\n");
printf("┃卡号┃身份证号码┃姓名┃部门┃基本工资┃职务工资┃各种补助┃应发工资┃水电费┃公积金┃税金┃实发工资┃\n");
printf("┣━━━━╋━━━━━╋━━━╋━━╋━━━━╋━━━━╋━━━━╋━━━━╋━━━━╋━━━━╋━━━━╋━━━━┫\n");
while(p!
=NULL)
{
if(strcmp(name,p->name)==0)
{
printf("┃%-8s┃%-10s┃%-6s┃%-4s┃%8.2f┃%8.2f┃%8.2f┃%8.2f┃%8.2f┃%8.2f┃%8.2f┃%8.2f┃\n",p->no,p->sfz,p->name,p->bumen,p->fee[0],p->fee[1],p->fee[2],p->fee[3],p->fee[4],p->fee[5],p->fee[6],p->fee[7]);
i=1;
}
p=p->next;
}
printf("┗━━━━┻━━━━━┻━━━┻━━┻━━━━┻━━━━┻━━━━┻━━━━┻━━━━┻━━━━┻━━━━┻━━━━┛\n");
if(i==0)
printf("该员工未找到!
\n");
printf("\n\n按回车键返回查找菜单!
");
getchar();getchar();
printf("\n\n");
}
voidD(structworker*head)
{
structworker*p=head;
charbm[6];
inti=0;
printf("请输入部门:
");
scanf("%s",bm);
printf("┏━━━━┳━━━━━┳━━━┳━━┳━━━━┳━━━━┳━━━━┳━━━━┳━━━━┳━━━━┳━━━━┳━━━━┓\n");
printf("┃卡号┃身份证号码┃姓名┃部门┃基本工资┃职务工资┃各种补助┃应发工资┃水电费┃公积金┃税金┃实发工资┃\n");
printf("┣━━━━╋━━━━━╋━━━╋━━╋━━━━╋━━━━╋━━━━╋━━━━╋━━━━╋━━━━╋━━━━╋━━━━┫\n");
while(p!
=NU