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

📄 zhigonggongzi.c

📁 C语言的职工工资信息管理系统 在VC下运行
💻 C
📖 第 1 页 / 共 2 页
字号:
#include <stdio.h>
#include <stdlib.h> 
#include <string.h> 
#include <malloc.h> 
#include <conio.h> 
int shoudsave=0;  
char npassword[6],rpassword[6],password[6];  /*定义密码*/
struct staff 
{ 
    char num[10];   /*工资卡号*/
	char name[20];  /*姓名*/        	
    char sex[4];    /*性别*/           
	int age;        /*年龄*/                    
	char department[10];   /*部门*/    
	char jszc[10];  /*技术职称*/             
    int id;         /*身份证号*/     
	int jszcnum;    /*技术职称编号*/
	int jbgz;        /*基本工资*/
	int zwgz;        /*职务工资*/
	int gzbz;        /*各种补助*/
	int yfgz;        /*应发工资*/
	int taxes;       /*税金*/
    struct staff *next;
}; 

typedef struct node /*定义数据结构*/
{ 
struct staff data; 
struct node *next; 
}Node,*Link; 


void printline()   /*输出分隔线函数*/
{ 
printf("﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌");
} 
void Wrong()     /*输出提示出错函数*/
{ 
printf("\n=====>提示:输入错误!\n"); 
} 

void Nofind() /*提示无法查找信息函数*/
{ 
printf("\n=====>提示:没有找到该职工记录!\n"); 
} 

void printc()  /* 输出信息函数 */ 
{ 
printf("工资卡号  姓名  性别  年龄  身份证号   职称编号   职称  部门   应发工资    税金"); 
} 
void printe(Node *p)  /* 输出函数 */ 
{ 
printf("%s  %s   %s    %d   %d   %d  %s %s   %d     %d\n",p->data.num,p->data.name,p->data.sex,p->data.age,p->data.id,p->data.jszcnum,p->data.jszc,p->data.department,p->data.yfgz,p->data.taxes); 
}

void menu() /*主菜单函数*/
{ 
printf("\t\t★★★★★★欢迎进入系统界面★★★★★★\n");  
printf("\t\t§ 1.  录入新的职工资料               §\n");
printf("\t\t§ 2.  显示已存在职工资料             §\n");
printf("\t\t§ 3.  修改已存在职工资料             §\n");
printf("\t\t§ 4.  删除职工资料                   §\n");
printf("\t\t§ 5.  保存职工资料                   §\n");
printf("\t\t§ 6.  按工资卡号/姓名查询职工资料    §\n");
printf("\t\t§ 7.  按职工工资排行浏览             §\n");
printf("\t\t§ 8.  统计不同年龄段的职工人数       §\n");
printf("\t\t§ 9.  统计各技术职称职工工资总额     §\n");
printf("\t\t§ 10. 统计每月和全年税金总额         §\n");
printf("\t\t§ 11. 设置密码                       §\n");
printf("\t\t§ 0.  退出系统                       §\n");
printf("\t\t★★★★★★★★★★★★★★★★★★★★\n");
} 

void Query();  /* 该函数用于定位链表中符合要求的接点,并返回该指针 */ 
Node* Locate(Link l,char findmess[],char nameornum[])  
{ 
Node *r;  
if(strcmp(nameornum,"num")==0) /* 按工资卡号查询 */ 
{ 
r=l->next; 
while(r!=NULL) 
{ 
if(strcmp(r->data.num,findmess)==0) 
return r; 
r=r->next; 
} 
} 
else if(strcmp(nameornum,"name")==0) /* 按姓名查询 */ 
{ 
r=l->next; 
while(r!=NULL) 
{ 
if(strcmp(r->data.name,findmess)==0) 
return r; 
r=r->next; 
} 
} 
return 0; 
} 

void Add(Link l) /* 增加职工信息 */ 
{ 
Node *p,*r,*s; 
char num[10];    /*定义输入的工资卡号*/
r=l; 
s=l->next; 
while(r->next!=NULL) 
r=r->next; /* 将指针置于最末尾 */ 
while(1) 
{ 
printf("请输入工资卡号(以'0'返回上一级菜单:)"); 
scanf("%s",num);    /*键盘输入工资卡号*/
getchar(); 
if(strcmp(num,"0")==0)   /*工资卡号为'0'结束输入*/
break; 
while(s) 
{ 
if(strcmp(s->data.num,num)==0)   /*比较输入和已存在的工资卡号*/
{ 

printf("=====>提示:工资卡号为'%s'的职工已经存在,若要修改请选择'3'修改'!\n",num); 
printline();   /*调用打印分隔线函数*/
printc();      /*调用输出资料函数*/
printe(s);     /*调用输出函数*/
printline();   /*调用打印分隔线函数*/
printf("\n");  /*输出换行*/
return; 
} 
s=s->next;   /*指针后移*/
} 

p=(Node *)malloc(sizeof(Node));   /*申请空间,创建链表*/

strcpy(p->data.num,num); 
printf("请输入姓名:");    
scanf("%s",p->data.name);   /*输入姓名*/
getchar(); 
printf("请输入性别:");   
scanf("%s",&p->data.sex);   /*输入性别*/
getchar(); 
printf("请输入年龄:");   
scanf("%d",&p->data.age);   /*输入年龄*/
getchar(); 
printf("请输入身份证号:");    
scanf("%d",&p->data.id);    /*输入身份证号*/
getchar(); 
printf("请输入技术职称编号:"); 
scanf("%d",&p->data.jszcnum);   /*输入技术职称编号*/
printf("请输入部门:"); 
scanf("%s",&p->data.department);   /*输入部门*/
printf("请输入技术职称:");   
scanf("%s",&p->data.jszc);    /*输入技术职称*/
printf("请输入基本工资:"); 
scanf("%d",&p->data.jbgz);    /*输入基本工资*/
printf("请输入职务工资:"); 
scanf("%d",&p->data.zwgz);    /*输入职务工资*/
printf("请输入各种补助:"); 
scanf("%d",&p->data.gzbz);    /*输入各种补助*/
getchar();
p->data.yfgz=p->data.jbgz+p->data.zwgz+p->data.gzbz; /*计算应发工资*/ 
if(p->data.yfgz<2000)    /*计算税金*/
{
p->data.taxes=0;
}
if(p->data.yfgz>2000&&p->data.yfgz<=3000)
{
p->data.taxes=(p->data.yfgz-2000)*0.05;
}
if(p->data.yfgz>3000)
{
p->data.taxes=(p->data.yfgz-2000)*0.05+(p->data.yfgz-3000)*0.1;
}

p->next=NULL;   /*信息输入完成,指针赋值为空*/
r->next=p; 
r=p; 
shoudsave=1; /*保存上面操作*/
} 
} 


void Show(Link l) /*显示已输入职工信息*/
{ 
int count=0; 
Node *p; 
p=l->next; /*指针后移*/

if(!p)   /*没有存在信息则提示*/
{ 
printline();  /*调用分隔线函数*/
printf("\t\t\t\t没有资料可以显示!\n"); 
printline();  /*调用分隔线函数*/
return; 
} 
printline();  /*调用分隔线函数*/
printf("\t\t\t\t   显示结果\n\n"); 
printc();     /*调用输出信息函数*/
printf("\n"); 
while(p)      /*当系统有保存信息则进行显示*/
{ 
printe(p);    /*调用输出函数*/
p=p->next;    /*指针后移*/
} 
printf("\n"); 
while(p) 
{ 
p=p->next;    /*指针后移*/
} 
printline();   /*调用分隔线函数*/
printf("\n"); 
} 

void Query(Link l) /* 查询职工信息函数*/ 
{ 
int sel; 
char findmess[20]; 
Node *p; 

if(!l->next)   /*当系统没有存储信息则提示*/
{ 
printf("\n=====>提示:没有资料可以查询!\n"); 
return; 


} 
printf("\n---->1按工资卡号查询\n---->2按姓名查询\n"); 
scanf("%d",&sel);     
if(sel==1)/*按工资卡号查询*/ 
{ 
printf("请输入要查询职工的工资卡号:"); 
scanf("%s",findmess); 
p=Locate(l,findmess,"num"); /*查找相匹配的职工信息*/
if(p) /*如果有要查询信息则输出结果*/
{ 
printf("\t\t\t\t查找结果\n"); 
printline();  /*调用分隔线函数*/
printc();     /*调用输出信息函数*/
printe(p);    /*调用输出函数*/
printline();  /*调用分隔线函数*/
} 
else 
Nofind();   /*调用分隔线函数*/
} 
else if(sel==2) /* 姓名 */ 
{ 
printf("请输入要查询的职工姓名:"); 
scanf("%s",findmess); 
p=Locate(l,findmess,"name"); 
if(p) 
{ 
printf("\t\t\t\t查找结果\n"); 
printline();
printc(); 
printe(p); 
printline();
} 
else 
Nofind(); /*调用输出提示出错函数*/
} 
else 
Wrong();  /*调用提示无法查找信息函数*/
} 

void Del(Link l) /* 删除职工信息函数 */ 
{ 
int sel; 
Node *p,*r; 
char findmess[20]; 
if(!l->next)    /*如果没有已存储信息则提示*/
{ 
printf("\n=====>提示:没有资料可以删除!\n\n"); 
return; 
} 
printf("\n=====>1按工资卡号删除\n=====>2按姓名删除\n"); 
scanf("%d",&sel);   
if(sel==1)   /*按工资卡号删除信息*/
{ 
printf("请输入要删除的工资卡号:"); 
scanf("%s",findmess);  /*输入要删除的工资卡号*/
p=Locate(l,findmess,"num");  /*在系统中查找相匹配的工资卡号*/
if(p) /*如果有相应的工资卡号则删除*/
{ 
r=l; 
while(r->next!=p) 
r=r->next; /*指针后移,按顺序查找相应信息*/
r->next=p->next; 
free(p); 
printf("\n=====>提示:该职工已经成功删除!\n\n"); 
shoudsave=1;  /*保存上面操作*/
} 
else 
Nofind();   /*调用输出提示出错函数*/
} 
else if(sel==2) /*按姓名删除信息*/
{ 
printf("请输入要删除职工的姓名:"); 
scanf("%s",findmess); /*输入要删除职工的姓名*/
p=Locate(l,findmess,"name"); /*在系统中查找相匹配的姓名*/
if(p) /*如果有相应的姓名则删除*/
{ 
r=l; 
while(r->next!=p) 
r=r->next;   /*指针后移,按顺序查找相应信息*/
r->next=p->next; 
free(p); 
printf("\n=====>提示:该职工已经成功删除!\n"); 
shoudsave=1; /*保存上面操作*/
} 
else 
Nofind(); /*调用输出提示出错函数*/
} 
else 
Wrong();  /*调用提示无法查找信息函数*/
} 

void Modify(Link l) /*修改职工信息函数*/
{ 
Node *p; 
char findmess[20]; 
if(!l->next)  /*当系统没有存储信息则提示*/
{ 
printf("\n=====>提示:没有资料可以修改!\n"); 
return; 
} 
printf("请输入要修改的职工工资卡号:"); 
scanf("%s",findmess);  /*输入要修改的职工工资卡号*/
p=Locate(l,findmess,"num"); /*在系统中查找相匹配的工资卡号*/
if(p) /*如果存在则按信息顺序修改*/
{ 
printf("请输入新的工资卡号(原来是%s):",p->data.num); 
scanf("%s",p->data.num);   /*输入新的工资卡号*/

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -