#define _CRT_SECURE_NO_WARNINGS 1
#include<stdio.h>
#include<string.h>
#include<stdlib.h>
#include<windows.h>
#define N 5
#define M 5
struct worker
{ int number;//职工号
char name[15];//姓名
char department[15];//部门
int wage;//基本工资
int salary;//总工资
}
worker[M], t[M]; //引入一个中间变量方便后续排序
void input();//录入职工信息
void display();//显示职工信息
void dele();//删除职工信息
void modify();//修改职工信息
void query();//查询职工信息
void order();//按总工资排序
int readFromFile();
void writeToFile();
void input() //职工数据录入,将录入的数据存到数组中
{int i;
for (i = 0; i < M; i++)
{printf("\n输入第%d个职工信息", i + 1);
printf("\n输入职工号:");
scanf_s("%d", &worker[i].number);
printf("\n输入职工姓名:");
scanf("%s", &worker[i].name);
printf("\n输入职工部门:");
scanf("%s", &worker[i].department);
printf("\n输入基本工资:");
scanf("%d", &worker[i].wage);
printf("\n输入总工资:");
scanf_s("%d", &worker[i].salary);
}writeToFile();
}
void writeToFile() //将职工数据写到文件中
{int i;
FILE* fp;
fopen_s(&fp, "worker", "wb");
for (i = 0; i < 5; i++)
{if (fwrite(&worker[i], sizeof(struct worker), 1, fp) != 1)
{printf("file write error\n");
return;
}
}fclose(fp);
}
int readFromFile() //从文件中读取职工数据并存入数组stu[M]
{int i = 0;
FILE* fp;
fopen_s(&fp, "worker", "rb");
do {
fread(&worker[i], sizeof(struct worker), 1, fp);
i++;
} while (feof(fp) == 0);
fclose(fp);
return(i - 1);
}
void display() //信息显示
{ int i;
int m = readFromFile();
printf("\n公司职工信息:\n");
printf("\n职工号\t姓名\t部门\t基本工资\t总工资\n");
for (i = 0; i < M; i++)
printf("\n %d\t %s\t %s\t %d\t %d\n",worker[i].number,worker[i].name,worker[i].department,worker[i].wage, worker[i].salary);
printf("\n");
}
void dele() //信息删除
{int m = readFromFile();
int i, j, t, n, f, Num;
display();
printf("请输入要删除的职工的职工号:");
scanf_s("%d", &Num);
for (f = 1, i = 0; f && i < m; i++)
{if (worker[i].number == Num)
{printf("\n已找到此人,原始记录为:\n");
printf("\n职工号\t姓名\t部门\t基本工资\t总工资\n"); printf("\n %d\t %s\t %s\t %d\t %d\n", worker[i].number, worker[i].name, worker[i].department,worker[i].wage, worker[i].salary);
printf("\n确认删除请按 1,取消删除请按 0: ");
scanf_s("%d", &n);
if (n == 1) /*如果删除,则其他的信息都向前移一行*/
{for (j = i; j < m - 1; j++)
worker[j] = worker[j + 1]; /*当找到第j个职工时,for语句后j自加了1,所以下面的应该把改后的 信息赋值给第j-1个人*/
f = 0;
}else f = 2;
}
}
system("cls");
switch (f) {case 0: m = m - 1;
printf("\n删除成功!\n");
writeToFile(); /*调用保存函数*/
display(); /*调用浏览函数*/
break;
case 1: printf("\n没有该员工!\n");
display(); /*调用浏览函数*/
break;
case 2: printf("\n取消删除!\n");
break;
}
display(); /*调用浏览函数*/
printf("\n继续删除请按1,返回主菜单请按0:");
scanf_s("%d", &t);
system("cls");
switch (t)
{case 1: dele();
break;
case 0: system("cls");
break;
default: break;
}system("cls");
}
void modify()//信息修改
{int m = readFromFile();
int number;
char name[15];
char department[15];
int wage;
int salary;
int b = 1, c, i, n, t, k = 0; /*导入文件内的信息*/
printf("\n");
printf("请输入要修改的职工的职工号: ");
scanf_s("%d", &number);
system("cls");
for (i = 0; i < m; i++)
{if (worker[i].number == number)
{k = 1;
printf("\n已找到该职工号员工,其记录为:\n");
printf("\n职工号\t姓名\t部门\t基本工资\t总工资\n");
printf("\n %d\t %s\t %s\t %d\t %d\n", worker[i].number, worker[i].name,worker[i].department,worker[i].wage, worker[i].salary);
printf("\n确认修改请按1,取消修改请按0:");
scanf_s("%d", &n);
if (n == 1)
{printf("\n需要进行修改的选项\n 1.职工号 2.姓名 3.部门 4.基本工资 5.总工资\n");
printf("请输入你想修改的那一项序号: ");
scanf_s("%d", &c);
do {switch (c)
{case 1: printf("职工号改为:");
scanf_s("%d", &number);
worker[i].number = number;
break;
case 2: printf("姓名改为:");
scanf("%s", name);
strcpy(worker[i].name, name);
break;
case 3: printf("部门改为:");
scanf("%s", department);
strcpy(worker[i].department, department);
break;
case 4:printf("基本工资改为:");
scanf("%d", &wage);
worker[i].wage = wage;
case 5: printf("总工资改为:");
scanf_s("%d", &salary);
worker[i].salary = salary;
break;
}
printf("\n确认修改 请按1,重新输入 请按2: ");
scanf_s("%d", &b);
if (b == 1)
{system("cls");
writeToFile();//储存修改后的数据
printf("\n");
display();//浏览修改后的数据
}
} while (b == 2);
}
}
else if (i == (m - 1)) i++;
}
if (k == 0) {printf("\n输入有误!\n");
getchar();
getchar();
}
else {printf("\n继续修改请按 1,退出修改请按 0: ");
scanf_s("%d", &t);
}
system("cls");
switch (t)
{case 1: display();
modify();//返回修改函数
break;
case 0: break;
default:break;
}system("cls");
}
void query() //信息查询
{char name1[15];
int i, t, n = 0;
int m = readFromFile();
printf("\n请输入要查找的姓名: ");
scanf("%s", name1);
for (i = 0; i < m; i++)
if (strcmp(name1, worker[i].name) == 0)
{if (n == 0)
{printf("\n已找到以下信息:\n");
printf("\n职工号\t姓名\t部门\t基本工资\t总工资\n");
}
n++;
printf("\n %d\t %s\t %s\t %d\t %d\n", worker[i].number, worker[i].name, worker[i].department,worker[i].wage, worker[i].salary);
}
if (n == 0)
{printf("\n没有该员工!\n");
getchar();
getchar();
}
else
{printf("\n查询到有 %d 个员工符合要求。\n", n);
printf("\n");
printf("继续查询请按 1,,返回主菜单请按 0 :");
scanf_s("%d", &t);
switch (t)
{
case 0: system("cls");
break;
case 1: break;
default:break;
}
}
}
void order()//按总工资排序函数// //浏览信息时按工资由大到小排序 //信息排序
{int i, j, k;
for (i = 0; i < M - 1; i++)
{k = i;
for (j = i + 1; j < M; j++)
if (worker[j].salary > worker[k].salary)
{k = j;
t[k] = worker[k];
worker[k] = worker[i];
worker[i] = t[k]; //选择法排序
}
}
for (i = 0; i < M; i++)
{printf("\n职工号\t姓名\t部门\t基本工资\t总工资\n");
printf("\n %d\t %s\t %s\t %d\t %d\t %d\n", worker[i].number, worker[i].name, worker[i].department,worker[i].wage, worker[i].salary);
printf("\n");
}
}
int main()
{char c;
do
{printf("职工信息管理系统\n");
printf("1.录入职工信息\n");printf(" 2.显示职工信息\n");
printf("3.修改职工信息"); printf(" 4.删除职工信息\n");
printf("5.查询职工信息"); printf(" 6.职工信息排序 \n");
printf("0.退出管理系统\n");
printf("\n 请输入:");
c = getchar();
switch (c)
{
case '1': {input(); getchar(); break; }
case '2': {display(); getchar(); break; }
case '3': {modify(); getchar(); break; }
case '4': {dele(); getchar(); break; }
case '5': {query(); getchar(); break; }
case '6': {order(); getchar(); break; }
case '0':
{printf("\n ");
exit(0);
}
default:
{printf("\n请输入有效数字:");
c = getchar();
}
}
} while (1);
return 0;
}
职工信息管理系统
于 2023-07-06 23:06:52 首次发布