📄 zhigonggongzi.c
字号:
#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 + -