**
职工信息管理系统**
问题描述
对职工信息进行管理,职工信息包括职工号、姓名、性别、年龄、学历、工资、住址、电话等(职工号不重复)。
基本要求
(1)系统以菜单方式工作。
(2)职工信息录入功能(职工信息用文件保存)。
(3)输出职工信息、浏览职工信息功能。
(4)查询和排序功能:(至少一种查询方式),如按工资查询、按学历查询等。
(5)职工信息删除、修改功能(任选项)。
// 头文件 #include#include #include #include #include // 常量 #define NUMBER_MAX_LENGTH 20 // 工号 #define NAME_MAX_LENGTH 20 // 姓名 #define SEX_MAX_LENGTH 20 // 性别 #define EDUCATION_MAX_LENGTH 40 // 年龄 #define ADDRESS_MAX_LENGTH 40 // 住址 #define PHONE_MAX_LENGTH 20 // 电话 #define STAFF_MAX 1010 // 结构体数组 // 全局变量 int nowStaff = 0; // 计算当前总的职工人数 // 结构体 struct staff { char number[NUMBER_MAX_LENGTH]; // 工号 char name[NAME_MAX_LENGTH]; // 姓名 char sex[SEX_MAX_LENGTH]; // 性别 int age; // 年龄 char education[EDUCATION_MAX_LENGTH]; // 学历 int salary; // 工资 char address[ADDRESS_MAX_LENGTH]; // 住址 char phone[PHONE_MAX_LENGTH]; // 电话 }sta[STAFF_MAX]; void startup(); int compare(); // 比较大小 void swap(); // 交换 void menu(); // 菜单 void quitFunction(); // 按ESC退出 void showStaffInformation(int i); // 展示第i+1个员工的个人信息 void enterStaffInformation(); // 1.录入职工信息 void outputStaffInformation(); // 2.输出职工信息 void traverseStaffInformation(); // 3.浏览职工信息 void staffInformationQuery(); // 4.职工信息查询 void staffInformationOrder(); // 5.职工信息排序 void staffInformationDelete(); // 6.职工信息删除 void staffInformationSet(); // 7.职工修改功能 // 主函数 int main() { startup(); while(1) { menu(); } return 0; } void startup() { char strLine[1024]; char item[60]; FILE *fp = NULL; fp = fopen("staff.csv","r"); printf("正在加载中,请稍等..."); if(fp==NULL) { Sleep(1500); return; } int flag=1; int i=0,j=0,k=0; while (!feof(fp)) { if(flag) { fgets(strLine,1024,fp); flag=0; } else { fgets(strLine,1024,fp); while(strLine[i]!=',') { sta[nowStaff].number[j]=strLine[i]; i++; j++; } sta[nowStaff].number[j]=' '; i++; j=0; while(strLine[i]!=',') { sta[nowStaff].name[j]=strLine[i]; i++; j++; } sta[nowStaff].name[j]=' '; i++; j=0; while(strLine[i]!=',') { sta[nowStaff].sex[j]=strLine[i]; i++; j++; } sta[nowStaff].sex[j]=' '; i++; j=0; while(strLine[i]!=',') { item[j]=strLine[i]; i++; j++; } item[j]=' '; sta[nowStaff].age=atof(item); i++; j=0; while(strLine[i]!=',') { sta[nowStaff].education[j]=strLine[i]; i++; j++; } sta[nowStaff].education[j]=' '; i++; j=0; while(strLine[i]!=',') { item[j]=strLine[i]; i++; j++; } item[j]=' '; sta[nowStaff].salary=atof(item); i++; j=0; while(strLine[i]!=',') { sta[nowStaff].address[j]=strLine[i]; i++; j++; } sta[nowStaff].address[j]=' '; i++; j=0; while( strLine[i] != 'n' ) { sta[nowStaff].phone[j]=strLine[i]; i++; j++; } sta[nowStaff].phone[j]=' '; j=0; i=0; nowStaff++; } } nowStaff--; Sleep(1500); fclose(fp); } // 比较大小 int compare(long long a,long long b) { if(a>b) return 1; else return 0; } // 交换 void swap(struct staff *a,struct staff *b) { struct staff temp = *a; *a = *b; *b = temp; } // 菜单 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("| 8.退出职工系统 |n"); printf("--------------------n"); char input = '0'; input = getch(); switch(input) { case '1': enterStaffInformation(); return; case '2': outputStaffInformation(); return; case '3': traverseStaffInformation(); return; case '4': staffInformationQuery(); break; case '5': staffInformationOrder(); return; case '6': staffInformationDelete(); return; case '7': staffInformationSet(); return; case '8': exit(0); return; default: return; } } // 按ESC退出 void quitFunction() { printf("按ESC退出"); while(1) { char input = '0'; input = getch(); if( input == 27 ) { break; } } return; } void showStaffInformation(int i) { printf("工号:%sn",sta[i].number); printf("姓名:%sn",sta[i].name); printf("性别:%sn",sta[i].sex); printf("年龄:%dn",sta[i].age); printf("学历:%sn",sta[i].education); printf("工资:%dn",sta[i].salary); printf("住址:%sn",sta[i].address); printf("电话:%sn",sta[i].phone); printf("n"); } //1.职工信息录入 void enterStaffInformation() { system("cls"); // 工号 struct staff s; char input; printf("输入工号:"); scanf("%s",s.number); // 检验是否重复 int i; for (i=0;i if (strcmp(s.number,sta[i].number)==0) { printf("该工号已存在"); Sleep(2000); system("cls"); printf("即将返回菜单"); Sleep(1000); return; } } // 姓名 printf("输入姓名:"); scanf("%s",s.name); // 性别 printf("输入性别:"); scanf("%s",s.sex); // 年龄 printf("输入年龄:"); scanf("%d",&s.age); scanf("%c",&input); // if( scanf("%d",&s.age) != 1 ) // { // printf("输入内容非法,已终止程序"); // exit(0); // } // 学历 printf("输入学历:"); scanf("%s",s.education); // 工资 printf("输入工资:"); scanf("%d",&s.salary); scanf("%c",&input); // if( scanf("%d",&s.salary) != 1 ) // { // printf("输入内容非法,已终止程序"); // exit(0); // } // 住址 printf("输入住址:"); scanf("%s",s.address); // 电话 printf("输入电话:"); scanf("%s",s.phone); sta[nowStaff] = s; nowStaff++; printf("录入成功!n"); Sleep(2000); system("cls"); printf("即将返回菜单"); Sleep(1000); return; } //2.输出职工信息 void outputStaffInformation() { FILE *fp = NULL; fp = fopen("staff.csv","w"); int i; fprintf(fp,"%s,%s,%s,%s,%s,%s,%s,%sn","工号","姓名","性别","年龄","学历","工资","住址","电话"); for(i=0;i struct staff s = sta[i]; fprintf(fp,"%s,%s,%s,%d,%s,%d,%s,%sn",s.number,s.name,s.sex,s.age,s.education,s.salary,s.address,s.phone); } system("cls"); printf("正在保存信息中n"); Sleep(1500); printf("保存成功!"); Sleep(1500); system("cls"); fclose(fp); } //3.浏览职工信息 void traverseStaffInformation() { system("cls"); int i; for(i=0;i showStaffInformation(i); } quitFunction(); system("cls"); return; } // 4.职工信息查询 void staffInformationQuery() { system("cls"); while(1) { 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("| 8.电话 |n"); printf("| 9.退出 |n"); printf("------------------------n"); char input = '0'; input = getch(); if (input == '1') { system("cls"); char s[NUMBER_MAX_LENGTH]; printf("请输入你要查询的工号:"); scanf("%s",s); int flag=1,i; for (i=0;i if(strcmp(s,sta[i].number)==0) { if(flag) printf("找到匹配的工号n"); flag=0; showStaffInformation(i); } } if(flag) { printf("未找到匹配的工号n"); } } else if (input == '2') { system("cls"); char s[NAME_MAX_LENGTH]; printf("请输入你要查询的姓名:"); scanf("%s",s); int flag=1,i; for (i=0;i if(strcmp(s,sta[i].name)==0) { if(flag) printf("找到匹配的姓名n"); flag=0; showStaffInformation(i); } } if(flag) { printf("未找到匹配的姓名n"); } } else if (input == '3') { system("cls"); char s[SEX_MAX_LENGTH]; printf("请输入你要查询的性别:"); scanf("%s",s); int flag=1,i; for (i=0;i if(strcmp(s,sta[i].sex)==0) { if(flag) printf("找到匹配的性别n"); flag=0; showStaffInformation(i); } } if(flag) { printf("未找到匹配的性别n"); } } else if (input == '4') { system("cls"); int a,b; printf("请输入你要查询年龄的范围[a,b]:"); scanf("%d %d",&a,&b); int flag=1,i; for (i=0;i if(sta[i].age>=a&&sta[i].age<=b) { if(flag) printf("找到匹配的年龄n"); flag=0; showStaffInformation(i); } } if(flag) { printf("未找到匹配的年龄n"); } } else if (input == '5') { system("cls"); char s[EDUCATION_MAX_LENGTH]; printf("请输入你要查询的学历:"); scanf("%s",s); int flag=1,i; for (i=0;i if(strcmp(s,sta[i].education)==0) { if(flag) printf("找到匹配的学历n"); flag=0; showStaffInformation(i); } } if(flag) { printf("未找到匹配的学历n"); } } else if (input == '6') { system("cls"); int a,b; printf("请输入你要查询工资的范围[a,b]:"); scanf("%d %d",&a,&b); int flag=1,i; for (i=0;i if(sta[i].salary>=a&&sta[i].salary<=b) { if(flag) printf("找到匹配的工资n"); flag=0; showStaffInformation(i); } } if(flag) { printf("未找到匹配的工资n"); } } else if (input == '7') { system("cls"); char s[ADDRESS_MAX_LENGTH]; printf("请输入你要查询的住址:"); scanf("%s",s); int flag=1,i; for (i=0;i if(strcmp(s,sta[i].address)==0) { if(flag) printf("找到匹配的住址n"); flag=0; showStaffInformation(i); } } if(flag) { printf("未找到匹配的住址n"); } } else if (input == '8') { system("cls"); char s[PHONE_MAX_LENGTH]; printf("请输入你要查询的电话:"); scanf("%s",s); int flag=1,i; for (i=0;i if(strcmp(s,sta[i].phone)) { if(flag) printf("找到匹配的电话n"); flag=0; showStaffInformation(i); } } if(flag) { printf("未找到匹配的电话n"); } } else if (input == '9') { system("cls"); printf("即将返回菜单"); Sleep(1000); return; } printf("n"); quitFunction(); system("cls"); } } //5.职工信息排序 void staffInformationOrder() { system("cls"); int i,j; printf("请选择你排序的关键字(1.年龄,2.工资):"); char input1; input1 = getch(); printf("n请选择你排序的顺序(1.升序,2.降序):"); char input2; input2 = getch(); if(input1 == '1' && input2 == '1') { for(i=nowStaff-1;i>0;i--) { for(j=0;j if(compare(sta[j].age,sta[j+1].age)) { swap(&sta[j],&sta[j+1]); } } } printf("n排序成功!nn"); quitFunction(); } else if(input1 == '1' && input2 == '2') { for(i=nowStaff-1;i>0;i--) { for(j=0;j if(compare(sta[j+1].age,sta[j].age)) { swap(&sta[j],&sta[j+1]); } } } printf("n排序成功!nn"); quitFunction(); } else if(input1 == '2' && input2 == '1') { for(i=nowStaff-1;i>0;i--) { for(j=0;j if(compare(sta[j].salary,sta[j+1].salary)) { swap(&sta[j],&sta[j+1]); } } } printf("n排序成功!nn"); quitFunction(); } else if(input1 == '2' && input2 == '2') { for(i=nowStaff-1;i>0;i--) { for(j=0;j if(compare(sta[j+1].salary,sta[j].salary)) { swap(&sta[j],&sta[j+1]); } } } printf("n排序成功!nn"); quitFunction(); } else { printf("n按键方式不符合要求nn"); quitFunction(); } system("cls"); printf("即将返回菜单"); Sleep(1000); system("cls"); return; } //6.职工信息删除 void staffInformationDelete() { system("cls"); printf("请输入职工的工号:"); char s[NUMBER_MAX_LENGTH]; scanf("%s",s); int flag = 1; int i,j; for(i=0;i if(strcmp(sta[i].number,s)==0) { flag = 0; for(j=i;j sta[j] = sta[j+1]; } nowStaff--; printf("删除成功"); break; } } if(flag) printf("不存在该工号"); Sleep(1000); system("cls"); printf("即将返回菜单"); Sleep(1000); return; } //7.职工信息修改 void staffInformationSet() { int k; system("cls"); printf("请输入职工的工号:"); char s[NUMBER_MAX_LENGTH]; scanf("%s",s); int flag = 1; int i; for(i=0;i if(strcmp(sta[i].number,s)==0) { flag=0; k=i; printf("找到职工信息"); Sleep(1000); break; } } if(flag) { printf("不存在该职工号"); Sleep(1000); system("cls"); return; } system("cls"); while(1) { 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("| 8.电话 |n"); printf("| 9.退出 |n"); printf("------------------------n"); char input; input = getch(); system("cls"); switch(input) { case '1': printf("请输入修改后的职工工号:"); char s1[60]; scanf("%s",s1); // 检验是否重复 flag = 1; for (i=0;i if ( strcmp(s1,sta[i].number)==0 ) { printf("该工号已存在,修改失败...nn"); flag = 0; } } if(flag) { strcpy(sta[k].number,s1); printf("修改完成nn"); } quitFunction(); break; case '2': printf("请输入修改后的职工姓名:"); scanf("%s",sta[k].name); printf("修改完成nn"); quitFunction(); break; case '3': printf("请输入修改后的职工性别:"); scanf("%s",sta[k].sex); printf("修改完成nn"); quitFunction(); break; case '4': printf("请输入修改后的职工年龄:"); scanf("%d",&sta[k].age); printf("修改完成nn"); quitFunction(); break; case '5': printf("请输入修改后的职工学历:"); scanf("%s",sta[k].education); printf("修改完成nn"); quitFunction(); break; case '6': printf("请输入修改后的职工工资:"); scanf("%d",&sta[k].salary); printf("修改完成nn"); quitFunction(); break; case '7': printf("请输入修改后的职工住址:"); scanf("%s",sta[k].address); printf("修改完成nn"); quitFunction(); break; case '8': printf("请输入修改后的职工姓名:"); scanf("%s",sta[k].phone); printf("修改完成nn"); quitFunction(); break; case '9': return; default: break; } system("cls"); } }



