项目信息保存在文本文档"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;
}