📄 zhigonggongzi.c
字号:
printf("请输入新的姓名(原来是%s):",p->data.name);
scanf("%s",p->data.name); /*输入新的姓名*/
getchar();
printf("请输入新的性别(原来是%s):",p->data.sex);
scanf("%s",p->data.sex); /*输入新的性别*/
printf("请输入新的年龄(原来是%d):",p->data.age);
scanf("%s",&p->data.age); /*输入新的年龄*/
getchar();
printf("请输入新的身份证号(原来是%d):",p->data.id);
scanf("%d",&p->data.id); /*输入新的身份证号*/
getchar();
printf("请输入新的技术职称编号(原来是%d):",p->data.jszcnum);
scanf("%d",&p->data.jszcnum); /*输入新的技术职称编号*/
printf("请输入新的部门(原来是%s):",p->data.department);
scanf("%s",&p->data.department); /*输入新的部门*/
printf("请输入新的技术职称(原来是%s):",p->data.jszc);
scanf("%s",&p->data.jszc); /*输入新的技术职称*/
printf("请输入新的基本工资(原来是%d):",p->data.jbgz);
scanf("%d",&p->data.jbgz); /*输入新的基本工资*/
printf("请输入新的职务工资(原来是%d):",p->data.zwgz);
scanf("%d",&p->data.zwgz); /*输入新的职务工资*/
printf("请输入新的各种补助(原来是%d):",p->data.gzbz);
scanf("%d",&p->data.gzbz); /*输入新的各种补助*/
printf("\n=====>提示:资料修改成功!\n");
shoudsave=1; /*保存上面操作*/
}
else
Nofind(); /*调用输出提示出错函数*/
}
void SortByStaffWage(Link l) /*按职工应发工资排序函数*/
{
Link ll;
Node *p,*rr,*s;
ll=(Link)malloc(sizeof(Node)); /* 用于做新的链表 */
ll->next=NULL;
if(l->next==NULL) /*如果没有已存储信息则提示*/
{
printf("\n=====>提示:没有资料可以排序!\n");
return ;
}
p=l->next;
while(p) /*如果系统有信息则进行排序*/
{
s=(Node*)malloc(sizeof(Node)); /* 新建接点用于保存信息 */
s->data=p->data;
s->next=NULL;
rr=ll;
while(rr->next!=NULL && rr->next->data.yfgz>=p->data.yfgz) /*按降序排行*/
rr=rr->next; /*指针后移*/
if(rr->next==NULL)
rr->next=s;
else
{
s->next=rr->next;
rr->next=s;
}
p=p->next;
}
free(l);
l->next=ll->next;
printf("\n=====>提示:排序已经完成!\n");
Show(l); /*调用显示信息函数*/
}
void Save(Link l) /*保存信息函数*/
{
FILE* fp;
Node *p;
int flag=1,count=0;
fp=fopen("c:\\staff.txt","wb"); /*打开文件,如果文件不存在则创建*/
if(fp==NULL) /*如果不能打开文件则提示*/
{
printf("\n=====>提示:重新打开文件时发生错误!\n");
exit(1);
}
p=l->next;
while(p)
{
if(fwrite(p,sizeof(Node),1,fp)==1) /*写文件操作*/
{
p=p->next; /*指针后移*/
count++;
}
else
{
flag=0;
break;
}
}
if(flag)
{
printf("\n=====>提示:文件保存成功.(有%d条记录已经保存.)\n",count);
shoudsave=0;
}
fclose(fp); /*关闭文件*/
}
void Login()/*输入密码函数*/
{
int i;
printf("请输入密码:");
for(i=2;i>=0;--i) /*输入密码超过三次错误则退出系统*/
{
scanf("%s", password);
if(strcmp(password, rpassword) == 0 )
{printf("欢迎使用系统!\n");
break; }
if(i==0)
{
printf("输入密码超过三次!系统自动退出!");
break;
}
printf("你还有%d次机会: ",i);
}
}
void SetPassword()/*设置密码函数*/
{
int i;
printf ("请输入'6'个字符的新密码:\n");
for (i=0;i<6;i++)
{
npassword[i]=getch(); /*输入密码时屏幕输出'*'号*/
printf ("*");
if (npassword[i]=='\r'&&i>3)break;
}
npassword[i]='\0';
strcpy(rpassword,npassword); /*比较两次输入是否有误*/
printf ("\n再次输入确认密码:\n");
do
{
for (i=0;i<6;i++)
{
npassword[i]=getch();
printf ("*");
if (npassword[i]=='\r')break;
}
npassword[i+1]='\0';
if (strcmp(npassword,rpassword)==0)
{
printf ("\nPassword OK!\n");break;
}
else
if (strcmp(npassword,"0\r")==0)break;
else
printf ("\n密码检验错误,重新输入:(或输入'0'退出)\n");
}while (1);
}
void StatisticsByAge(Link l)/*统计不同年龄段的职工人数函数*/
{
int age,age1=0,age2=0,age3=0;
Node *p;
p=l;
while(p!=NULL)/*如果系统有存储信息则统计年龄段*/
{
if(p->data.age>0&&p->data.age<20)/*统计20岁以下的人数*/
age1+=1;
if(p->data.age>=20&&p->data.age<=55)/*统计20岁以上,55岁以下的人数*/
age2+=1;
if(p->data.age>55) /*统计55岁以上的人数*/
age3+=1;
p=p->next; /*指针后移*/
}
age=age1+age2+age3; /*计算总人数*/
printf("\n");
printline();/* 调用输出分割线函数*/
printf("20岁以下的职工人数为:%d\n",age1);
printf("20岁以上,55岁以下的职工人数为:%d\n",age2);
printf("55岁以上的职工人数为:%d\n",age3);
printf("职工总人数为:%d\n",age);
printline();/* 调用输出分割线函数*/
printf("\n");
}
void StatisticsJszcWage(Link l)/*统计各技术职称职工工资总额函数*/
{
int jbgz=0,zwgz=0,gzbz=0,yfgz=0,total=0,jszccount=0,jszcave;
char jszc[10];
Node *p;
p=l;
printf("请输入要查询的技术职称:");
scanf("%s",jszc);/*输入要查询的技术职称*/
while(p)
{
if(strcmp(p->data.jszc,jszc)==0) /*在系统中查找相应的技术职称进行工资累加*/
{
jbgz+=p->data.jbgz;
zwgz+=p->data.zwgz;
gzbz+=p->data.gzbz;
yfgz+=p->data.yfgz;
total=jbgz+zwgz+gzbz; /*计算全公司的工资总额*/
jszccount++; /*计算本技术职称人数*/
jszcave=total/jszccount; /*计算本技术职称职工的平均工资*/
}
p=p->next;/*指针后移*/
}
printf("\n");
printline();
printf("本技术职称人数为:%d\n",jszccount);
printf("本技术职称的基本工资总额为:%d\n",jbgz);
printf("本技术职称的职务工资总额为:%d\n",zwgz);
printf("本技术职称的各种补助总额为:%d\n",gzbz);
printf("本技术职称的应发工资总额为:%d\n",yfgz);
printf("本技术职称职工的平均工资为:%d\n",jszcave);
printf("全公司的工资总额为:%d\n",total);
printline(); /* 调用输出分割线函数*/
printf("\n");
}
void Statisticstaxes(Link l)/*统计税金函数*/
{
int monthtaxes=0,yeartaxes=0;
Node *p;
p=l->next;
while(p!=NULL)/*当系统有存储信息时计算税金*/
{
monthtaxes+=p->data.taxes;/*计算每月税金*/
yeartaxes=(monthtaxes*12);/*计算全年税金*/
p=p->next;/*指针后移*/
}
printf("\n");
printline();/* 调用输出分割线函数*/
printf("每月税金总额为:%d\n",monthtaxes);
printf("全年税金总额为:%d\n",yeartaxes);
printline();/* 调用输出分割线函数*/
printf("\n");
}
void main() /*主函数*/
{
Link l;/* 定义链表 */
FILE *fp; /* 定义文件指针 */
int sel;
char ch;
char creatfile;
int i;
int count=0;
Node *r;
printf("\t\t\t 职工工资信息管理系统\n\t\t\t\t\n");
l=(Node*)malloc(sizeof(Node)); /*申请空间*/
l->next=NULL;
r=l;
printf("第一次使用系统请设置密码!\n\n");
SetPassword(); /*调用设置密码函数*/
fp=fopen("C:\\staff","rb")
; /*打开文件*/
if(fp==NULL) /*如果没有文件则创建*/
{
printf("\n=====>提示:文件还不存在,是否创建?(y/n)\n");
scanf("%s",&creatfile); /*输入是否创建文件*/
if(creatfile=='y'||creatfile=='Y')
fp=fopen("C:\\staff","wb"); /*打开文件*/
else
exit(0); /*不创建则退出*/
}
{
printf("请输入密码:");
for(i=2;i>=0;--i)
{
scanf("%s", password);
if(strcmp(password, rpassword) == 0 )/*比较输入密码和设置密码是否一致*/
{printf("欢迎使用系统!\n");
break; }
if(i==0)
{
printf("输入密码超过三次!系统自动退出!");
exit(0);/*输入三次错误则退出*/
}
printf("你还有%d次机会: ",i);
}
}
printf("\n文件已经打开,正在导入......\n");
printf("\n=====>提示:记录导入完毕,共导入%d条记录.\n",count);
while(1)
{
menu(); /*调用主菜单函数*/
printf("请选择要进行的操作:");
scanf("%d",&sel);
if(sel==0)
{
if(shoudsave==1)
{ getchar();
printf("\n=====>提示:资料已经改动,是否将改动保存到文件中(y/n)?\n");
scanf("%c",&ch); /*输入是否保存改动*/
if(ch=='y'||ch=='Y')
Save(l);
}
printf("\n成功退出系统,谢谢使用!\n");
break;
}
switch(sel) /*按需求输入要进行的操作*/
{
case 1:Add(l);break; /*增加职工信息*/
case 2:Show(l);break;/*显示职工信息*/
case 3:Modify(l);break;/*修改职工信息*/
case 4:Del(l);break;/*删除职工信息*/
case 5:Save(l);break;/*保存职工信息*/
case 6:Query(l);break;/*按工资卡号/姓名查询职工信息*/
case 7:SortByStaffWage(l);break;/*按职工工资排行浏览*/
case 8:StatisticsByAge(l);break;/*统计不同年龄段的职工人数*/
case 9:StatisticsJszcWage(l);break;/*统计各技术职称职工工资总额*/
case 10:Statisticstaxes(l);break;/*统计每月和全年税金总额*/
case 11:SetPassword();break; /*设置密码*/
default: Wrong();getchar();break;
}
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -