中南大学C语言程序设计实验职工工资管理系统附详细操作说明及注释.docx
《中南大学C语言程序设计实验职工工资管理系统附详细操作说明及注释.docx》由会员分享,可在线阅读,更多相关《中南大学C语言程序设计实验职工工资管理系统附详细操作说明及注释.docx(21页珍藏版)》请在冰豆网上搜索。
中南大学C语言程序设计实验职工工资管理系统附详细操作说明及注释
/*Note:
YourchoiceisCIDE*/
#include"stdio.h"
#include"string.h"
#include"conio.h"
#include"stdlib.h"
structMessage/*此结构体用于存放职工信息以及创建链表*/
{
charname[30];
intID;
intJBGZ;
intZWGZ;
intJT;
intYLBX;
intGJJ;
longintTotal;
floatSum_3;
structMessage*nextPrt;
}static*head,*Rec_1=NULL,*Rec_2=NULL,*Rec_3=NULL;/*此处创建一个表头,以及三个用于恢复函数的静态变量*/
staticfloatSum_JBGZ=0,Sum_ZWGZ=0,Sum_JT=0,Sum_YLBX=0,Sum_GJJ=0;
staticfloatAverage_JBGZ,Average_ZWGZ,Average_JT,Average_YLBX,Average_GJJ;
voidInput();/*此处声明各一级函数*/
voidOutput();
voidDelete();
voidAdd();
voidRecover();
voidModify();
voidSearch();
voidStatistic();
structMessage*creat(structMessage*h);/*此处声明各二级函数*/
voidprint_Message(structMessage*h);
structMessage*del_Message(structMessage*h,char*str);
structMessage*add_Message(structMessage*h,structMessage*a,char*strafter);
structMessage*Recover_Message(structMessage*h);
structMessage*Modify_Message(structMessage*h,char*str);
voidSearch_Message(structMessage*h);
voidStatistic_Message(structMessage*h);
main()/*主函数为菜单页*/
{chari;/*功能:
调用各一级函数一级退出程序*/
clrscr();
gotoxy(27,9);
printf("\16[中南大学]");
gotoxy(27,11);
printf("\16[职工工资管理系统]");
gotoxy(27,13);
printf("\16[设计者:
路]");
gotoxy(27,15);
printf("\16[输入任意键继续]\n");
getch();
for(;;)
{
clrscr();
gotoxy(25,9);
printf("*******菜单******");
gotoxy(25,10);
printf("*a.输入记录*");
gotoxy(25,11);
printf("*b.显示记录*");
gotoxy(25,12);
printf("*c.修改记录*");
gotoxy(25,13);
printf("*d.查找记录*");
gotoxy(25,14);
printf("*e.添加记录*");
gotoxy(25,15);
printf("*f.删除记录*");
gotoxy(25,16);
printf("*g.恢复记录*");
gotoxy(25,17);
printf("*h.统计数据*");
gotoxy(25,18);
printf("*i.退出程序*");
gotoxy(25,19);
printf("*请选择a—i*");
gotoxy(25,20);
printf("***************");
i=getch();
if(i=='i')break;
elseswitch(i)
{case'a':
Input();break;/*调用记录输入函数*/
case'b':
Output();break;/*调用记录显示函数*/
case'c':
Modify();break;/*调用记录修改函数*/
case'd':
Search();break;/*调用记录查找函数*/
case'e':
Add();break;/*调用记录添加函数*/
case'f':
Delete();break;/*调用记录删除函数*/
case'g':
Recover();break;/*调用记录恢复函数*/
case'h':
Statistic();break;/*调用记录统计函数*/
}}}
voidInput()/*定义输入函数(一级)*/
{/*主要功能:
调用二级子函数创建链表*/
head=NULL;
head=creat(head);
}
voidOutput()/*定义显示函数(一级)*/
{/*主要功能:
调用二级子函数实现按一定格式输出所有职工工资信息*/
clrscr();
print_Message(head);
}
voidDelete()/*定义删除函数(一级)*/
{/*主要功能:
调用二级子函数实现删除任意职工工资信息并输出删除后的工资信息*/
charname[50],*del_Mes=name;
clrscr();
gotoxy(1,1);
printf("请输入姓名:
\n");
scanf("%s",name);
head=del_Message(head,del_Mes);
clrscr();
printf("删除数据后:
\n");
printf("----------------------------------------------------------\n");
print_Message(head);
}
voidAdd()/*定义添加函数(一级)*/
{/*主要功能:
调用二级函数以实现在任意位置添加一条或多条职工工资信息*/
charafter_name[30],i;
structMessage*p;
clrscr();
gotoxy(1,1);
printf("\n请输入需要添加的信息\n");
printf("----------------------------------------------------------\n");
p=(structMessage*)malloc(sizeof(structMessage));
if(p!
=NULL)
{
printf("请输入姓名:
\n");
scanf("%s",&p->name);
printf("请输入ID:
\n");
scanf("%d",&p->ID);
printf("请输入基本工资:
\n");
scanf("%d",&p->JBGZ);
printf("请输入职位工资:
\n");
scanf("%d",&p->ZWGZ);
printf("请输入津贴:
\n");
scanf("%d",&p->JT);
printf("请输入医疗保险:
\n");
scanf("%d",&p->YLBX);
printf("请输入公积金:
\n");
scanf("%d",&p->GJJ);
p->Total=p->JBGZ+p->ZWGZ+p->JT-p->YLBX-p->GJJ;
printf("总工资为:
%d\n",p->Total);
}
printf("\n输入在哪个职工信息下方添加新信息:
\n");
scanf("%s",after_name);
head=add_Message(head,p,after_name);
printf("\n是否继续添加?
Y/N");
i=getch();
while(i!
='N')
{
printf("\n请输入你想要添加的信息\n");
printf("----------------------------------------------------------\n");
p=(structMessage*)malloc(sizeof(structMessage));
if(p!
=NULL)
{
printf("请输入姓名:
\n");
scanf("%s",&p->name);
printf("请输入ID:
\n");
scanf("%d",&p->ID);
printf("请输入基本工资:
\n");
scanf("%d",&p->JBGZ);
printf("请输入职位工资:
\n");
scanf("%d",&p->ZWGZ);
printf("请输入津贴:
\n");
scanf("%d",&p->JT);
printf("请输入医疗保险:
\n");
scanf("%d",&p->YLBX);
printf("请输入公积金:
\n");
scanf("%d",&p->GJJ);
p->Total=p->JBGZ+p->ZWGZ+p->JT-p->YLBX-p->GJJ;
printf("总工资为:
%ld\n",p->Total);
}
printf("\n输入在哪个职工信息下方添加新信息:
\n");
scanf("%s",after_name);
head=add_Message(head,p,after_name);
printf("\n是否继续添加?
Y/N");
i=getch();
}
clrscr();
gotoxy(1,1);
printf("\n添加后的信息为:
\n");
printf("----------------------------------------------------------\n");
print_Message(head);
}
voidRecover()/*定义记录恢复函数(一级)*/
{/*主要功能:
调用二级函数以实现恢复已删除的信息*/
clrscr();
head=Recover_Message(head);
gotoxy(1,4);
printf("恢复成功!
^_^\n");
printf("\n输入任意键退出...");
getch();
}
voidModify()/*定义记录修改函数(一级)*/
{/*主要功能:
调用二级函数以实现修改任意职工的任意信息*/
charname[50],*Mod_Message=name;
clrscr();
printf("请输入需要修改信息的员工:
\n");
scanf("%s",name);
head=Modify_Message(head,Mod_Message);
clrscr();
printf("修改后的信息为:
\n");
printf("----------------------------------------------------------\n");
print_Message(head);
}
voidSearch()/*定义记录查找函数(一级)*/
{/*主要功能:
调用二级函数实现按照姓名或ID通过关键字查找或精确查找的方式搜索职工信息*/
clrscr();
Search_Message(head);
}
voidStatistic()/*定义记录统计函数(一级)*/
{/*调用二级函数以实现以表格的形式输出职工工资信息并统计前三项工资总额在一定围的人数及比例*/
clrscr();
Statistic_Message(head);
printf("\n输入任意键退出...");
getch();
}
structMessage*creat(structMessage*h)/*定义创建链表函数(二级)*/
{
chari;
structMessage*p1,*p2;
clrscr();
p1=p2=(structMessage*)malloc(sizeof(structMessage));
if(p2!
=NULL)
{
gotoxy(1,1);
printf("请输入姓名:
\n");
scanf("%s",&p2->name);
printf("请输入ID:
\n");
scanf("%d",&p2->ID);
printf("请输入基本工资:
\n");
scanf("%d",&p2->JBGZ);
printf("请输入职位工资:
\n");
scanf("%d",&p2->ZWGZ);
printf("请输入津贴:
\n");
scanf("%d",&p2->JT);
printf("请输入医疗保险:
\n");
scanf("%d",&p2->YLBX);
printf("请输入公积金:
\n");
scanf("%d",&p2->GJJ);
p2->Total=p2->JBGZ+p2->ZWGZ+p2->JT-p2->YLBX-p2->GJJ;
printf("总工资为:
%ld\n",p2->Total);
h=p2;
p2->nextPrt=NULL;
printf("输入s退出,输入其他键继续...\n");
i=getch();
}
while(i!
='s')
{
p2=(structMessage*)malloc(sizeof(structMessage));
if(p2!
=NULL)
{
printf("请输入姓名:
\n");
scanf("%s",&p2->name);
printf("请输入ID:
\n");
scanf("%d",&p2->ID);
printf("请输入基本工资:
\n");
scanf("%d",&p2->JBGZ);
printf("请输入职位工资:
\n");
scanf("%d",&p2->ZWGZ);
printf("请输入津贴:
\n");
scanf("%d",&p2->JT);
printf("请输入医疗保险:
\n");
scanf("%d",&p2->YLBX);
printf("请输入公积金:
\n");
scanf("%d",&p2->GJJ);
p2->Total=p2->JBGZ+p2->ZWGZ+p2->JT-p2->YLBX-p2->GJJ;
printf("总工资为:
%ld\n",p2->Total);
p2->nextPrt=NULL;
p1->nextPrt=p2;
p1=p2;
printf("输入s退出,输入其他键继续...\n");
i=getch();
}
}
returnh;
}
voidprint_Message(structMessage*h)/*定义记录输出函数(二级)*/
{
structMessage*temp;
inti=0;
temp=h;
gotoxy(1,4);
printf("ID\t\b\b姓名\t\b\b基本工资\t职位工资\t\b\b\b\b\b\b津贴\t\b医疗保险\t公积金\t\b总工资\n");
if(temp==NULL)printf("没有找到信息!
\n");
while(temp!
=NULL)
{
i++;
printf("%d\t\b\b%s\t\b\b%d\t%d\t%d\t%d\t%d\t%d\n",temp->ID,temp->name,temp->JBGZ,temp->ZWGZ,temp->JT,temp->YLBX,temp->GJJ,temp->Total);
(Sum_JBGZ+=temp->JBGZ,Sum_ZWGZ+=temp->ZWGZ,Sum_JT+=temp->JT,Sum_YLBX+=temp->YLBX,Sum_GJJ+=temp->GJJ);
temp=temp->nextPrt;
}
(Average_JBGZ=Sum_JBGZ/i,Average_ZWGZ=Sum_ZWGZ/i,Average_JT=Sum_JT/i,Average_YLBX=Sum_YLBX/i,Average_GJJ=Sum_GJJ/i);
printf("各项平均工资:
\t\b\b%.1f\t%.1f\t%.1f\t%.1f\t%.1f\n",Average_JBGZ,Average_ZWGZ,Average_JT,Average_YLBX,Average_GJJ);
printf("输入任意键退出...");
getch();
}
structMessage*del_Message(structMessage*h,char*str)/*定义记录删除函数(二级)*/
{
structMessage*p1,*p2;
p1=h;
if(p1==NULL)
{
printf("没有找到信息!
\n");
returnh;
}
p2=p1->nextPrt;
if(!
strcmp(p1->name,str))
{
Rec_2=p1;
Rec_3=p2;
h=p2;
returnh;
}
while(p2!
=NULL)
{
if(!
strcmp(p2->name,str))
{
Rec_1=p1;
Rec_2=p2;
Rec_3=p2->nextPrt;
p1->nextPrt=p2->nextPrt;
returnh;
}
else
{
p1=p2;
p2=p2->nextPrt;
}
}
printf("删除成功!
^_^");
getch();
returnh;
}
structMessage*add_Message(structMessage*h,structMessage*a,char*strafter)/*定义记录添加函数(二级)*/
{
structMessage*p1,*p2;
p1=h;
while(p1!
=NULL)
{
if(!
strcmp(p1->name,strafter))
{
a->nextPrt=p1->nextPrt;
p1->nextPrt=a;
returnh;
}
else
p1=p1->nextPrt;
}
returnh;
}
structMessage*Recover_Message(structMessage*h)/*定义记录恢复函数(二级)*/
{
if(Rec_1==NULL)
{
h=Rec_2;
Rec_2->nextPrt=Rec_3;
}
else
{
Rec_1->nextPrt=Rec_2;
Rec_2->nextPrt=Rec_3;
}
returnh;
}
structMessage*Modify_Message(structMessage*h,char*str)/*定义记录修改函数(二级)*/
{
structMessage*p1;
inti;
p1=h;
if(p1==NULL)
{
printf("没有找到信息!
");
returnh;
}
while(strcmp(p1->name,str))
p1=p1->nextPrt;
printf("请输入需要修改的信息(序号):
\n");
printf("1.姓名2.ID3.基本工资4.职务工资5.津贴6.医疗保险7.公积金8.总工资\n");
scanf("%d",&i);
switch(i)
{
case1:
{printf("请输入修改后的姓名:
\n");
scanf("%s",&p1->name);};break;
case2:
{printf("请输入修改后的ID:
\n");
scanf("%d",&p1->ID);};break;
case3:
{printf("请输入修改后的基本工资:
\n");
scanf("%d",&p1->JBGZ);};break;
case4:
{printf("请输入修改后的职务工资:
\n");
scanf("%d",&p1->ZWGZ);};break;
case5:
{printf("请输入修改后的津贴:
\n");
scanf("%d",&p1->JT);};break;
case6:
{printf("请输入修改后的医疗保险:
\n");
scanf("%d",&p1->YLBX);};break;
case7:
{printf("请输入修改后的公积金:
\n");
scanf("%d",&p1->GJJ);};break;
case8:
{printf("请输入总工资:
\n");
scanf("%d",&p1->Total);};break;
}
printf("\n修改成功!
^_^\n输入任