#include <stdio.h>
#include <string.h>
#include <stdlib.h>
typedef struct employee
{
char num[10]; //保存员工编号
char name[15]; //保存员工姓名
char old[15]; //保存员工年龄
float jbgz; //保存员工基本工资
float jxgz; //保存绩效工资
float zgz; //保存总工资
} ZGGZ;
void menu()
{
system("cls");
printf("菜单\n");
printf("1. 输入员工信息\n");
printf("2. 删除员工信息\n");
printf("3. 查找员工信息\n");
printf("4. 修改员工信息\n");
printf("5. 插入员工信息\n");
printf("6. 保存员工信息\n");
printf("7. 查看员工信息\n");
printf("0. 退出\n");
printf("请选择您要进行的操作\n");
}
int input(ZGGZ a[], int k)
{
int j, x, z = 0;
char str[10];
j = x = 0;
printf("请输入员工的编号:\n");
scanf("%s", str);
strcpy(a[k].num, str);
for (j = 0; j < k; j++) //判断是否有重复值
{
if (strcmp(a[j].num, str) == 0)
{
printf("已经有工号为%s的员工信息!请重新输入员工号。\n\n", str);
k = input(a, k);
return k;
}
}
printf("请输入员工的姓名:");
scanf("%s", a[k].name);
printf("请输入员工的年龄:");
scanf("%s", a[k].old);
printf("请输入员工的基本工资:");
scanf("%f", &a[k].jbgz);
printf("请输入员工的绩效工资:");
scanf("%f", &a[k].jxgz);
a[k].zgz = a[k].jbgz + a[k].jxgz;
k++;
return k;
}
int del(ZGGZ a[], int y)
{
int i = 0;
int x = 0;
char str[15];
printf("请输入你要删除的编号或姓名:");
scanf("%s", str);
printf("--------删除中--------\n");
for (i = 0; i < y; i++)
if (!strcmp(str, a[i].num) || !strcmp(str, a[i].name))
{
while (i < y)
{
strcpy(a[i].num, a[i + 1].num);
strcpy(a[i].name, a[i + 1].name);
strcpy(a[i].old, a[i + 1].old);
a[i].jbgz = a[i + 1].jbgz;
a[i].jxgz = a[i + 1].jxgz;
a[i].zgz = a[i + 1].zgz;
i++;
}
x++;
}
if (x == 0)
{
printf("输入的编号或姓名不存在,请重新输入:\n\n");
}
else
printf("删除成功\n\n");
return y - x;
}
int search(ZGGZ a[], int y)
{
int i;
int x = 0;
char str[15];
printf("请输入你要查找的编号或姓名:");
scanf("%s", str);
for (i = 0; i < y; i++)
if (!strcmp(str, a[i].num) || !strcmp(str, a[i].name))
{
printf("员工编号:%s\n", a[i].num);
printf("员工姓名:%s\n", a[i].name);
printf("员工年龄:%s\n", a[i].old);
printf("基本工资:%0.2f\n", a[i].jbgz);
printf("绩效工资:%0.2f\n", a[i].jxgz);
printf("总工资:%0.2f\n", a[i].zgz);
x++;
}
if (x == 0)
{
printf("未找到该记录\n");
return 0;
}
}
void mod(ZGGZ a[], int y)
{
int i;
int x = 0;
char str[15];
printf("\n请输入你要修改的编号:");
scanf("%s", str);
for (i = 0; i < y; i++)
if (!strcmp(str, a[i].num) || !strcmp(str, a[i].name))
{
printf("请输入修改后员工的姓名:");
scanf("%s", a[i].name);
printf("请输入修改后员工的年龄:");
scanf("%s", a[i].old);
printf("请输入修改后员工的基本工资:");
scanf("%f", &a[i].jbgz);
printf("请输入修改后员工的绩效工资:");
scanf("%f", &a[i].jxgz);
a[i].zgz = a[i].jbgz + a[i].jxgz;
printf("-------------修改成功------------\n");
x++;
}
if (x == 0)
printf("未找到要修改的编号\n");
}
int insert(ZGGZ a[], int y)
{
int i;
int x = 0;
char str[15];
printf("请输入你要插入的编号:");
scanf("%s", str);
printf("请输入一条新的记录信息:\n");
for (i = 0; i < y; i++)
if (strcmp(str, a[i].num) == 0)
{
x = i;
for (i = y; i > x + 1; i--)
{
strcpy(a[i].num, a[i - 1].num);
strcpy(a[i].name, a[i - 1].name);
strcpy(a[i].old, a[i - 1].old);
a[i].jbgz = a[i - 1].jbgz;
a[i].jxgz = a[i - 1].jxgz;
a[i].zgz = a[i - 1].zgz;
}
}
x++;
printf("请输入员工的编号:");
scanf("%s", a[x].num);
printf("请输入员工的姓名:");
scanf("%s", a[x].name);
printf("请输入员工的年龄:");
scanf("%s", a[x].old);
printf("请输入员工的基本工资:");
scanf("%f", &a[x].jbgz);
printf("请输入员工的绩效工资:");
scanf("%f", &a[x].jxgz);
a[x].zgz = a[x].jbgz + a[x].jxgz;
return y + 1;
}
void save(ZGGZ a[], int n)
{
FILE *fp;
int i, n1 = 0;
if ((fp = fopen("sj.txt", "wb")) == NULL)
{
printf("不能打开文件\n");
return;
}
for (i = 0; i < n; i++)
{
if (fwrite(&a[i], sizeof(struct employee), 1, fp) != 1)
{
printf("文件写入错误\n");
n1++;
}
}
if (n1 == 0)
printf("保存成功\n");
fclose(fp);
}
int display(ZGGZ a[], int n)
{
int i = 0;
if (n == 0)
{
printf("无数据\n\n");
return n;
}
do
{
printf("————————————————————————————————\n");
printf("员工编号:%s\n", a[i].num);
printf("员工姓名:%s\n", a[i].name);
printf("员工年龄:%s\n", a[i].old);
printf("基本工资:%0.2f\n", a[i].jbgz);
printf("绩效工资:%0.2f\n", a[i].jxgz);
printf("总工资:%0.2f\n", a[i].zgz);
i++;
} while (i < n);
return n;
}
int main()
{
int selete, c = 0;
int i = 0;
int z = 0;
char q, p, x, s;
ZGGZ b[100];
FILE *fp;
if ((fp = fopen("sj.txt", "rb")) == NULL)
printf("找不到文件\n");
else
{
do
{
fread(&b[i], sizeof(struct employee), 1, fp);
i++;
} while (!feof(fp));
fclose(fp);
c = i - 1;
}
while (1)
{
menu();
scanf("%d", &selete);
if (selete == 0)
{
printf("感谢您的使用,谢谢 o(* ̄▽ ̄*)o \n");
break;
}
switch (selete)
{
case 1:
c = input(b, c);
break;
case 2:
{
display(b, c);
do
{
c = del(b, c);
printf("是否继续删除,是按y,否则请按其他值\n");
getchar();
scanf("%c", &p);
} while (p == 'Y' || p == 'y');
break;
}
case 3:
{
do
{
search(b, c);
printf("是否继续查找,是按y,否则请按其他值\n");
getchar();
scanf("%c", &x);
} while (x == 'Y' || x == 'y');
break;
}
case 4:
{
display(b, c);
do
{
mod(b, c);
printf("是否继续修改,是按y,否则请按其他值\n");
getchar();
scanf("%c", &q);
} while (q == 'Y' || q == 'y');
break;
}
case 5:
{
do
{
c = insert(b, c);
printf("是否继续插入,是按y,否则请按其他值\n");
getchar();
scanf("%c", &s);
} while (s == 'Y' || s == 'y');
break;
}
case 6:
{
char ch1;
printf("您是否确定保存员工信息?\n\n输入y确认,否则请输入其他值\n");
getchar();
scanf("%c", &ch1);
if (ch1 == 'y' || ch1 == 'Y')
{
save(b, c);
printf("\n输入任意值继续\n");
getchar();
scanf("%c", &s);
break;
}
else
break;
}
case 7:
{
c = display(b, c);
printf("\n输入任意值继续\n");
getchar();
scanf("%c", &s);
break;
}
default:
printf("请重新输入范围为0-7的数字\n");
}
}
return 0;
}