#include
#include
#include
#include
#define LEN sizeof(struct worker)
#define N 3
int n;
typedef struct worker //定义结构体
{
long num;
char name[20];
char bm[20];
int gwgz;
int gwjt;
int bfgz;
int ylbx;
int sds;
int sdf;
int yfgz;
int sfgz;
struct worker*next;
}YZY;
int*tzz()//创建头指针
{
YZY*head;
head = (YZY*)malloc(LEN);
return (head);
}
void create(YZY*head)//创建链表函数
{
YZY*p1;
YZY*p2;
p2 = (YZY*)malloc(LEN);
p1 = head;
p2 = head;
for(n = 1; n < N; n++)
{
p1 = (YZY*)malloc(LEN);
p2->next = p1;
p2 = p1;
}
p2->next = NULL;
}
void save(YZY*head) //保存函数
{
FILE*fp;
YZY*p1;
p1 = head;
if ((fp = fopen("stu.txt", "wb")) == NULL)
{
printf("can not open file\n");
}
do
{
fwrite(p1, sizeof(LEN), 1, fp);
p1 = p1->next;
}while (p1 != NULL);
fclose(fp);
return;
}
void add(YZY*head) //添加原始信息函数
{
YZY*p1;
p1 = head;
n = 1;
do
{
printf("请输入第%d个职工的初始信息:\n", n);
printf("请输入员工的职工号:\n");
scanf("%d", &p1->num);
printf("请输入员工的姓名:\n");
scanf("%s", p1->name);
printf("请输入员工的所属部门\n");
scanf("%s", p1->bm);
printf("请输入员工的岗位工资\n");
scanf("%d", &p1->gwgz);
printf("请输入员工的岗位津贴\n");
scanf("%d", &p1->gwjt);
printf("请输入员工的补发工资\n");
scanf("%d", &p1->bfgz);
printf("请输入员工的医疗保险\n");
scanf("%d", &p1->ylbx);
printf("请输入员工的水电费\n");
scanf("%d", &p1->sdf);
p1->yfgz = p1->gwgz + p1->gwjt + p1->bfgz + p1->ylbx;
p1 = p1->next;
system("cls");
n++;
} while (p1 != NULL);
save(head);
}
void load(YZY*head)//读取函数
{
FILE*fp;
YZY*p;
p = head;
if ((fp = fopen("stu.txt", "rb")) == NULL)
{
printf("error\n");
exit(0);
}
do
{
fread(p, sizeof(LEN),1, fp);
printf("%d", p->num);
p = p->next;
} while (p != NULL);
fclose(fp);
return;
}
void print(YZY*head)//输出所有员工信息
{
YZY*p;
printf("全体职工信息如下:\n");
/*load(head);*/
p = head;
do
{
printf("员工号为:%d\n", p->num);
printf("姓名:%s\n", p->name);
printf("所属部门:%s\n", p->bm);
printf("岗位工资为:%d\n", p->gwgz);
printf("岗位津贴为:%d\n", p->gwjt);
printf("医疗保险为:%d\n", p->ylbx);
printf("补发工资为:%d\n", p->bfgz);
printf("所得税为:%d\n", p->sds);
printf("水电费为:%d\n", p->sdf);
printf("应发工资为%d\n", p->yfgz);
printf("实发工资为:%d\n", p->sfgz);
p = p->next;
} while (p != NULL);
}
void del(YZY*head) //删除函数
{
YZY*p;
YZY*q;
q = (YZY*)malloc(LEN);
p = head;
int ch;
int a;
printf("请输入您要删除的职工的职工号\n");
scanf("%d", &ch);
printf("请确认是否删除员工号为%d的员工\n", ch);
printf("1(确认删除) 2(退出主菜单)");
scanf("%d", &a);
if (a == 2)
{
menu();
}
if (a == 1)
{
if (head->num == ch)
{
head = p->next;
free(head);
printf("删除成功按任意键返回 主菜单\n");
system("pause");
menu();
}
for (p = p->next; p->num != ch; p = p->next)
{
p = q;
if (p->num = ch)
{
q->next = p->next;
free(p);
return;
printf("删除成功按任意键返回主菜单\n");
system("pause");
menu();
}
}
if (p->num != ch)
{
printf("对不起查无此人 将返回主菜单\n");
menu();
}
}
save(head);
}
void insert(YZY*head) //增添函数
{
YZY*p;
YZY*q;
q = head;
p = (YZY*)malloc(LEN);
printf("请输入您要增加的员工的员工号:\n");
scanf("%d", &p->num);
for (; q != NULL; q = q->next)
{
if (q->num == p->num)
printf("对不起 该工号已经被占用 请重新输入\n");
else
{
printf("输入成功 请完成其它信息的输入\n");
printf("请输入员工的姓名:\n");
scanf("%s", p->name);
printf("请输入员工的所属部门\n");
scanf("%s", p->bm);
printf("请输入员工的岗位工资\n");
scanf("%d", &p->gwgz);
printf("请输入员工的岗位津贴\n");
scanf("%d", &p->gwjt);
printf("请输入员工的补发工资\n");
scanf("%d", &p->bfgz);
printf("请输入员工的医疗保险\n");
scanf("%d", &p->ylbx);
printf("请输入员工的水电费\n");
scanf("%d", &p->sdf);
p->yfgz = p->gwgz + p->gwjt + p->bfgz + p->bfgz + p->ylbx;
p->next = head->next;
head->next = p;
save(head);
}
break;
}
}
void search(YZY*head)
{
int ch;
int i;
YZY m;
YZY*p;
p = head;
printf("请选择您要查询的方式: 1、按职工号查找 2、按职工姓名查找\n");
scanf("%d", &ch);
if (ch == 1)
{
printf("请输入您要查找的职工号\n");
scanf("%d", &i);
if (p->num == i)
{
printf("该员工的信息如下\n");
printf("该员工的员工号为:%d\n", p->num);
printf("该员工的姓名为:%s\n", p->name);
printf("该员工所属的部门是:%s\n", p->bm);
printf("该员工的岗位工资为:%d\n", p->gwgz);
printf("该员工的岗位津贴为:%d\n", p->gwjt);
printf("该员工的补发工资为:%d\n", p->bfgz);
printf("该员工的医疗保险为:%d\n", p->ylbx);
printf("该员工的所得税为:%d\n", p->sds);
printf("该员工的水电费为:%d\n", p->sdf);
printf("该员工的应发工资为:%d\n", p->yfgz);
printf("该员工的实发工资为:%d\n", p->sfgz);
}
for (p = p->next; p != NULL; p = p->next)
{
if (p->num == i)
{
printf("该员工的信息如下\n");
printf("该员工的员工号为:%d\n", p->num);
printf("该员工的姓名为:%s\n", p->name);
printf("该员工所属的部门是:%s\n", p->bm);
printf("该员工的岗位工资为:%d\n", p->gwgz);
printf("该员工的岗位津贴为:%d\n", p->gwjt);
printf("该员工的补发工资为:%d\n", p->bfgz);
printf("该员工的医疗保险为:%d\n", p->ylbx);
printf("该员工的所得税为:%d\n", p->sds);
printf("该员工的水电费为:%d\n", p->sdf);
printf("该员工的应发工资为:%d\n", p->yfgz);
printf("该员工的实发工资为:%d\n", p->sfgz);
goto loop;
}
}
if (p == NULL)
{
printf("输入的职工号错误\n");
}
loop:i = 0;
}
if (ch == 2)
{
printf("请输入要查找的的员工姓名\n");
scanf("%s", m.name);
if (strcmp(p->name, m.name) == 0)
{
printf("该员工的信息如下\n");
printf("该员工的员工号为:%d\n", p->num);
printf("该员工的姓名为:%s\n", p->name);
printf("该员工所属的部门是:%s\n", p->bm);
printf("该员工的岗位工资为:%d\n", p->gwgz);
printf("该员工的岗位津贴为:%d\n", p->gwjt);
printf("该员工的补发工资为:%d\n", p->bfgz);
printf("该员工的医疗保险为:%d\n", p->ylbx);
printf("该员工的所得税为:%d\n", p->sds);
printf("该员工的水电费为:%d\n", p->sdf);
printf("该员工的应发工资为:%d\n", p->yfgz);
printf("该员工的实发工资为:%d\n", p->sfgz);
}
menu();
}
if (p = NULL)
{
printf("你输入的的名字错误\n");
}
menu();
}
void modify(YZY*head)
{
YZY*p1;
int ch;
printf("请输入您要改的员工的工号:\n");
scanf("%d", &ch);
p1 = head;
for (; p1->num != ch; p1 = p1->next)
{
if (p1->num == ch)
{
printf("请输入新员工的初始信息:\n");
printf("请输入新的职工号:\n");
scanf("%d", &p1->num);
printf("请输入新的姓名:\n");
scanf("%s", p1->name);
printf("请输入新的所属部门\n");
scanf("%s", p1->bm);
printf("请输入新的岗位工资\n");
scanf("%d", &p1->gwgz);
printf("请输入新的岗位津贴\n");
scanf("%d", &p1->gwjt);
printf("请输入新的补发工资\n");
scanf("%d", &p1->bfgz);
printf("请输入新的医疗保险\n");
scanf("%d", &p1->ylbx);
printf("请输入新的水电费\n");
scanf("%d", &p1->sdf);
p1->yfgz = p1->gwgz + p1->gwjt + p1->bfgz + p1->bfgz + p1->ylbx;
/*count(p1);*/
save(head);
}
if (p1 == NULL)
{
printf("对不起查无此人 将返回主菜单\n");
}
}
}
int menu()
{
printf(" ****************欢迎进入南天职工工资管理系统******************** \n");
printf(" 1.录入员工基本信息 2.输出所有员工初始数据 \n");
printf(" 3.查询员工工资明细 4.增加员工工资信息 \n");
printf(" 5.修改员工工资信息 6.删除员工工资信息 \n");
printf(" 7.读出原始数据 制作人:姚智瀛");
printf(" (请选择输入1-6选择您的操作 ) \n");
return 0;
}
int main()
{
int m;
m = 0;
int button;
YZY*head;
head = tzz();
create(head);
menu();
while (m != 1)
{
printf("请根据提示选择您要使用的功能\n");
scanf("%d", &button);
switch (button)
{
case 1: add(head); break;
case 2:print(head); break;
case 3:search(head); break;
case 4:insert(head); break;
case 5:modify(head); break;
case 6:del(head); break;
case 7:load(head); break;
case 8:
case 9:printf("输入错误 请依照提示重新输入\n"); break;
default: break;
}
menu();
}
}