C语言课设:公司员工信息统计程序

C语言:删除指定文件内容-CSDN博客

项目信息保存在文本文档"employeelist.txt"中

#define  _CRT_SECURE_NO_WARNINGS

#include <stdio.h>
#include <string.h>
#include <stdlib.h>

struct Employee
{
	char name[15];//名字
	char sex[8];//性别
	char id[15];//员工编号
	int age;//年龄
	int workage;//工龄
	char job[15];//职位
	char department[15];//部门
	char map[200];//住址
};
struct Employee people[200];
int index = 0;

int employeecount = 0;//员工数量

//菜单
void menu()
{
	printf("-----员工信息管理系统-----\n");
	printf("\n");
	printf("         1.录入           \n");
	printf("         2.删除           \n");
	printf("         3.修改           \n");
	printf("         4.显示           \n");
	printf("         5.查询           \n");
	printf("         6.保存           \n");
	printf("         7.退出           \n");
	printf("\n");
	printf("   更改信息后请保存!!!!!\n");
	printf("--------------------------\n");
	printf("请选择你的操作:");
}

//姓名查重
int getname(char* s)
{
	int res = -1;
	for (int i = 0; i < employeecount; i++)
	{
		if (strcmp(s, people[i].name) == 0)
		{
			res = i;//名字相同返回下标
			break;
		}
	}
	return res;
}

//员工信息录入
void add()
{
	char select = 'Y';//表示继续添加员工信息
	if (select == 'N')
		return;
	while (select == 'Y')
	{
		int i = 0;
		printf("您需要添加几名员工?");
		scanf("%d", &i);
		for (int j = 1; j <= i; j++)
		{
			printf("\n第%d位员工:", j);
			index = j;
			printf("\n请输入员工姓名:");
			scanf("%s", &people[employeecount].name);
			if (getname(people[employeecount].name) != -1)
			{
				printf("输入重复!\n");
				break;
			}
			printf("\n请输入员工性别:");
			scanf("%s", &people[employeecount].sex);
			getchar();
			printf("\n请输入员工编号:");
			scanf("%s", &people[employeecount].id);
			getchar();
			printf("\n请输入员工年龄:");
			scanf("%d", &people[employeecount].age);
			getchar();
			printf("\n请输入员工工龄:");
			scanf("%d", &people[employeecount].workage);
			getchar();
			printf("\n请输入员工职位:");
			scanf("%s", &people[employeecount].job);
			getchar();
			printf("\n请输入员工部门:");
			scanf("%s", &people[employeecount].department);
			getchar();
			printf("\n请输入员工住址:");
			scanf("%s", &people[employeecount].map);
			getchar();

			employeecount++;
		}
		printf("是否继续添加?(Y/N)");
		scanf("%c", &select);
		getchar();
	}
	printf("\n已添加%d名员工的信息", employeecount);
}

//删除文件中的行
void deletline(const char* filename, int line)
{
	FILE* fp_in, * fp_out;//输入,输出
	int count = 1;//从第一行开始
	char ch;
	char temp_filename[256];
	sprintf(temp_filename, "%s.tmp", filename);
	fp_in = fopen(filename, "r");
	fp_out = fopen(temp_filename, "w");
	if (!fp_in || !fp_out)
	{
		printf("文件打开失败!");
		exit(1);
	}
	while (ch = fgetc(fp_in) != EOF)
	{
		if (ch != '\n')
			count++;
		if (count != line)
			fputc(ch, fp_out);
	}
	fclose(fp_in);
	fclose(fp_out);
	remove(filename);
	rename(temp_filename, filename);
}

//员工信息删除(子函数)
int deleemployee(int deleindex)
{
	if (deleindex<0 || deleindex>employeecount)
		return 0;
	int i;
	for (i = deleindex - 1; i < employeecount - 1; i++)
		people[i] = people[i + 1];
	deletline("employeelist.txt.txt", deleindex);
	printf("已删除第%d位员工\n", deleindex);
	employeecount--;
	return 1;
}

//员工信息删除
void remove()
{
	printf("请输入需要删除的员工下标:");
	int removeindex = 0;
	scanf("%d", &removeindex);
	int removeres = deleemployee(removeindex);
	if (removeres)
		printf("删除成功!\n");
	else
		printf("删除失败!\n");

}

//员工信息修改
void mod()
{
	int wind = 0;
	char modwind = 'Y';
	int indexmod = -1;
	char modname[20] = { 0 };
	while (modwind == 'Y')
	{
		printf("请输入要修改员工的下标:");
		scanf("%d", &indexmod);
		getchar();
		printf("0:修改全部\n");
		printf("1:修改单项\n");
		printf("请选择:");
		scanf("%d", &wind);
		getchar();
		if (wind == 0)
		{
			if (indexmod >= 0 && indexmod <= employeecount)
			{
				printf("请输入员工的姓名:");
				char modname[20] = { 0 };
				scanf("%s", modname);
				getchar();
				while (strcmp(people[indexmod - 1].name, modname) != 0 && getname(modname) > -1)
				{
					printf("当前员工姓名存在!请重新输入:\n");
					scanf("%s", modname);
				}
				strcpy(people[indexmod - 1].name, modname);
				printf("请修改性别:");
				scanf("%s", people[indexmod - 1].sex);
				getchar();
				printf("请修改编号:");
				scanf("%s", people[indexmod - 1].id);
				getchar();
				printf("请修改年龄:");
				scanf("%d", &people[indexmod - 1].age);
				getchar();
				printf("请修改工龄:");
				scanf("%d", &people[indexmod - 1].workage);
				getchar();
				printf("请修改职位:");
				scanf("%s", people[indexmod - 1].job);
				getchar();
				printf("请修改部门:");
				scanf("%s", people[indexmod - 1].department);
				getchar();
				printf("请修改地址:");
				scanf("%s", people[indexmod - 1].map);
				getchar();
			}
			else
			{
				printf("下标无效!");
			}
		}
		else
		{
			int anotherwind = 0;
			printf("         1.姓名           \n");
			printf("         2.性别           \n");
			printf("         3.编号           \n");
			printf("         4.年龄           \n");
			printf("         5.工龄           \n");
			printf("         6.职位           \n");
			printf("         7.部门           \n");
			printf("         8.地址           \n");
			printf("请选择修改:");
			scanf("%d", &anotherwind);
			switch (anotherwind)
			{
				case 1:
					printf("请输入员工的姓名:");
					scanf("%s", modname);
					getchar();
					while (strcmp(people[indexmod - 1].name, modname) != 0 && getname(modname) > -1)
					{
						printf("当前员工姓名存在!请重新输入:\n");
						scanf("%s", modname);
					}
					strcpy(people[indexmod - 1].name, modname);
					break;
				case 2:
					printf("请修改性别:");
					scanf("%s", people[indexmod - 1].sex);
					getchar();
					break;
				case 3:
					printf("请修改编号:");
					scanf("%s", people[indexmod - 1].id);
					getchar();
					break;
				case 4:
					printf("请修改年龄:");
					scanf("%d", &people[indexmod - 1].age);
					getchar();
					break;
				case 5:
					printf("请修改工龄:");
					scanf("%d", &people[indexmod - 1].workage);
					getchar();
					break;
				case 6:
					printf("请修改职位:");
					scanf("%s", people[indexmod - 1].job);
					getchar();
					break;
				case 7:
					printf("请修改部门:");
					scanf("%s", people[indexmod - 1].department);
					getchar();
					break;
				case 8:
					printf("请修改地址:");
					scanf("%s", people[indexmod - 1].map);
					getchar();
					break;
				default:
					printf("输入错误!");
			}
		}
		printf("是否继续操作:(Y/N)");
		scanf("%c", &modwind);
		getchar();
	}
}

//员工信息查询(0),显示(1)
void find(int all)
{
	int select = 0;
	char conarry[40] = { 0 };
	char sex1[8] = { 0 };
	int num1 = 0, num2 = 0;
	if (all == 0)
	{
		printf("1:按 姓名 查询\n");
		printf("2:按 性别 查询\n");
		printf("3:按 部门 查询\n");
		printf("4:按 年龄 查询\n");
		printf("5:按 年龄和性别 查询\n");
		printf("6:按 部门和性别 查询\n");
		printf("请输入您的选择:");
		scanf("%d", &select);
		getchar();
		if (select == 1 || select == 2 || select == 3)
		{
			printf("\n请输入筛选条件:");
			scanf("%s", &conarry);
			getchar();
		}
		else if (select == 4)
		{
			printf("\n请输入筛选范围:n <= 年龄 <= m");
			scanf("%d", &num1);
			getchar();
			scanf("%d", &num2);
			getchar();
		}
		else if (select == 5 || select == 6)
		{
			printf("\n请输入筛选性别:");
			scanf("%s", &sex1);
			getchar();
			if (select == 5)
			{
				printf("\n请输入筛选范围:n <= 年龄 <= m\n");
				scanf("%d", &num1);
				getchar();
				scanf("%d", &num2);
				getchar();
			}
			else
			{
				printf("\n请输入筛选的部门");
				scanf("%s", &conarry);
				getchar();
			}
		}
	}
	int i = 0;
	int count = 0;
	printf("\n%-10s%-10s%-15s%-17s%-16s%-12s%-15s%-17s%-15s\n\n","下标","姓名", "性别", "编号", "年龄", "工龄", "职位", "部门", "地址");
	for (i = 0; i < employeecount; i++)
	{
		if (select == 0
			||
			select == 1 && strstr(people[i].name, conarry)
			||
			select == 2 && strstr(people[i].sex, conarry)
			||
			select == 3 && strstr(people[i].department, conarry)
			||
			select == 4 && people[i].age >= num1 && people[i].age <= num2
			||
			select == 5 && strstr(people[i].sex, sex1) && people[i].age >= num1 && people[i].age <= num2
			||
			select == 6 && strstr(people[i].department, conarry) && strstr(people[i].sex, sex1))//前者包含后者返回大于1的数
		{
			printf("\n%-10d%-10s%-15s%-17s%-16d%-12d%-15s%-17s%-15s\n\n",i+1,people[i].name,
				people[i].sex, people[i].id, people[i].age, people[i].workage,
				people[i].job, people[i].department, people[i].map);
			count++;
		}
	}
	printf("已查询%d人\n", count);
}

//员工信息保存
void write()
{
	FILE* fp = NULL;
	fp = fopen("C:\\Users\\ASUS\\Desktop\\employeelist.txt.txt", "w+");
	for (int i = 0; i < employeecount; i++)
	{
		//fprintf(fp, "%s    %s    %s    %s    %s    %s    %s    %s    %s\n", "编号", "姓名", "性别", "编号", "年龄", "工龄", "职位", "部门", "地址");
		fprintf(fp, "%s %s %s %d %d %s %s %s\n",  people[i].name,
			people[i].sex, people[i].id, people[i].age, people[i].workage,
			people[i].job, people[i].department, people[i].map);
	}
	fclose(fp);
}

//从文件读取员工信息
void read()
{
	//printf("\n%-6s%-10s%-15s%-10s%-16s%-12s%-10s%-12s%-15s\n\n", "编号", "姓名", "性别", "编号", "年龄", "工龄", "职位", "部门", "地址");
	FILE* fp = NULL;
	if ((fp = fopen("C:\\Users\\ASUS\\Desktop\\employeelist.txt.txt", "r")) == NULL)
	{
		printf("文件不存在!");
		fclose(fp);
		return;
	}
	int i = 0;
	while (fscanf(fp, "%s%s%s%d%d%s%s%s\n", people[i].name,
		people[i].sex, people[i].id, &people[i].age, &people[i].workage,
		people[i].job, people[i].department, people[i].map) != EOF)
	{
		i++;
	}
	employeecount = i;
	fclose(fp);
}

//主函数
int main()
{
	read();
	while (1)
	{
		menu();
		int choice = 0;
		scanf("%d", &choice);
		if (choice == 7)
		{
			printf("程序已退出,感谢您的使用");
			break;
		}
		switch (choice)
		{
		case 1:
			add();
			printf("\n员工信息添加成功!\n");
			printf("\n");
			break;
		case 2:
			remove();
			printf("\n");
			break;
		case 3:
			find(1);
			mod();
			printf("\n员工信息修改成功!\n");
			printf("\n");
			break;
		case 4:
			find(1);
			printf("\n员工信息显示成功!\n");
			printf("\n");
			break;
		case 5:
			find(0);
			printf("\n员工信息查找成功!\n");
			printf("\n");
			break;
		case 6:
			write();
			printf("\n员工信息保存成功!\n");
			printf("\n");
			break;
		default:
			printf("输入错误,请重新输入!\n");
		}
	}
	return 0;
}

  • 18
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 8
    评论
评论 8
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

深情秋刀鱼@

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值