职工信息管理系统

#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;
}
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值