⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 zhigonggongzi.c

📁 C语言的职工工资信息管理系统 在VC下运行
💻 C
📖 第 1 页 / 共 2 页
字号:
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 + -