职工信息管理系统C语言源代码
职工信息管理系统C语言课程设计+源代码

课程设计报告(本科)课程:高级语言课程设计学号:姓名:班级:教师:时间:计算机科学与技术系23图1:进入主菜单界:”进行录入职工信息2.输入数字“1:录入职工信息图2。
y3.输入“”返回主菜单(界面同图1):职浏2入4.输“”览工息信 43:浏览职工信息图 3输入“y”后继续,输入“”进行查询职工信息:5.:按职工号查询职工信息图457图:按姓名删除职工信息:按职工号删除职工信息图8:职添进5入单主进7.入菜输“”行加工息信6:添加职工信息图9:工信息”进行修改职6单进8.入主菜输入“:按姓名修改职工信息10图:按职工号修改职工信息图11:息工出””输菜入9.进主单入7退职信管统理系7退出系统图12:优点是:基本实现了程序的多功能,对与查询职工信息提供了三种方法,对与修改和删除职工信息提供了两种方法,功能多种多样。
旗帜变量的使用也是优点之一;这个程序用到了的结构体,整个程序简单,易懂。
缺点是:保存职工信息有限,程序段比较臃长。
设计体会与建议:语言函数调语言,学会更好的使用C通过这次的课程设计,我更加了解C用和结构体等,把学过的知识运用于实践中,而不仅仅停留于对课本的单纯理要学习的东西还有很多。
想完成一项功能解;这次设计也让我知道我懂的太少,就要用很复杂的语句去实现,所以整个程序变的很长,复杂,但是结构体,数组,指针等的灵活运用又可使程序变的易懂。
另外,团队的合作也是成功的一部分!结果找起来和修改,在编写代码时一开始没有运用有意义的函数名和变量我认为最重要的就是耐心和细心。
,也使别人看不懂。
在整个课程设计中,好麻烦细心,就是在编写过程中注意拼写,仔细编写程序;耐心,就是程序编译中出现很多错误的时候能够耐心去修改,只有这样,才能很好的完成程序。
虽然在整个过程中出现了不少错误,但最终还是圆满完成了,此次程序设以前好多不懂的也都理解了。
也学会了作为大学生我,计的经历让我学到了太多们也应该学会不仅从课堂上学习知识,还应该学会自学。
职工信息管理系统C语言课程设计 源代码

课程设计报告(本科)课程:高级语言课程设计学号:姓名:班级:教师:时间:计算机科学与技术系图1:进入主菜单界2.输入数字“1”进行录入职工信息:图2:录入职工信息3.输入“y”返回主菜单(界面同图1)。
4.输入“2”浏览职工信息:图4:按职工号查询职工信息图6:按电话号码查询职工信息6.进入主菜单,输入“4”进行删除职工信息:图7:按姓名删除职工信息图8:按职工号删除职工信息7.进入主菜单输入“5”进行添加职工信息:图10:按姓名修改职工信息图11:按职工号修改职工信息9.进入主菜单输入”7”退出职工信息管理系统:附录:#include<stdio.h> //标准输入输出函数库#include<string.h> //字符串函数库#include<stdlib.h>struct employee{int num; //职工号char name[20]; //姓名char sex; //性别int age; //年龄char xueli[30]; //学历int wage; //工资char addr[30]; //家庭住址char tel[20]; //联系电话}employee[100]; //定义一个结构体int main() //函数主体{void menu(); //菜单函数void input(); // 录入函数void save(int m); //保存文件函数void display(); //浏览函数void del(); // 删除函数void del_name(); //按姓名删除函数void del_num(); //按职工号删除函数void add(); //添加函数void search(); //查询函数void search_num(); //按职工号码查询函数void search_xueli(); //按学历查询函数void search_tel(); //按号码查询函数void modify(); // 修改函数void modify_num(); //按员工号修改函数void modify_name(); //按姓名修改函数int n,flag;char a;menu();printf("请选择你需要操作的步骤(1--7):\n");scanf("%d",&n);doif(n>=1&&n<=7){flag=1;break;}else{flag=0;printf("您输入有误,请重新选择!");}}while(flag==0);while(flag==1){switch(n){case 1:printf(" ◆◆◆输入职工信息◆◆◆\n");printf("\n");input();break;case 2:printf(" ◆◆◆浏览职工信息◆◆◆\n");printf("\n");display();break;case 3:printf(" ◆◆◆查询职工信息◆◆◆\n");printf("\n");search();break;case 4:printf(" ◆◆◆删除职工信息◆◆◆\n");printf("\n");del();break;case 5:printf(" ◆◆◆添加职工信息◆◆◆\n");printf("\n");add();break;case 6:printf(" ◆◆◆修改职工信息◆◆◆\n");printf("\n");modify();break;case 7:exit(0);break;default :break;}getchar();printf("\n");printf("是否继续进行(y or n):\n");scanf("%c",&a);if(a=='y'){flag=1;system("cls"); //清屏menu(); //调用菜单函数printf("请再次选择你需要操作的步骤(1--7):\n");scanf("%d",&n);printf("\n");elseexit(0);}}void menu() //菜单函数{printf(" ************欢迎进入职工信息管理系统**********\n"); printf(" 1.录入职工信息");printf(" 2.浏览职工信息\n");printf(" 3.查询职工信息");printf(" 4.删除职工信息\n");printf(" 5.添加职工信息");printf(" 6.修改职工信息\n");printf(" 7.退出\n");printf(" ********************谢谢使用******************\n"); printf("\n");printf("\n");}void input() //录入函数{int i,m;printf("请输入需要创建信息的职工人数(1--100):\n");scanf("%d",&m);for (i=0;i<m;i++){printf("请输入职工号:");scanf("%d",&employee[i].num);printf("请输入姓名: ");scanf("%s",employee[i].name);getchar();printf("请输入性别(f--女m--男): ");scanf("%c",&employee[i].sex);printf("请输入年龄: ");scanf("%d",&employee[i].age);printf("请输入学历: ");scanf("%s",employee[i].xueli);printf("请输入工资: ");scanf("%d",&employee[i].wage);printf("请输入住址: ");scanf("%s",employee[i].addr);printf("请输入电话: ");scanf("%s",employee[i].tel);printf("\n");}printf("\n创建完毕!\n");save(m);}void save(int m) //保存文件函数{int i;FILE*fp;if ((fp=fopen("employee_list.txt","wb"))==NULL){printf ("cannot open file\n");exit(0);}for (i=0;i<m;i++) //将内存中职工的信息输出到磁盘文件中去if (fwrite(&employee[i],sizeof(struct employee),1,fp)!=1) printf("file write error\n");fclose(fp);}int load() //导入函数{FILE*fp;int i=0;if((fp=fopen("employee_list.txt","rb"))==NULL){printf ("cannot open file\n");exit(0);}else{do{fread(&employee[i],sizeof(struct employee),1,fp);i++;}while(feof(fp)==0);}fclose(fp);return(i-1);//循环过程中跳出循环时i自动加一,所以要减去一}void display() //浏览函数{int i;int m=load();printf(" 职工号姓名性别年龄学历工资住址电话\n");for(i=0;i<m;i++) //m为输入部分的职工人数printf(" %d %s %c %d %s %d %s %s\n",employee[i].num,empl oyee[i].name,employee[i].sex,employee[i].age,employee[i].xueli,employee[i].wage,employee[i].addr,employee[i].tel);}void del() //删除函数{int t,flag;do{printf("\n按职工号删除请按1; 按姓名删除请按2; 进入主函数请按3\n");scanf("%d",&t);if(t>=1&&t<=3){flag=1;break;}else{flag=0;printf("您输入有误,请重新选择!");}}while(flag==0);while(flag==1){switch(t){case 1:printf("按职工号删除\n");del_num();break;case 2:printf("按姓名删除\n");del_name();break;case 3:main();break;default:break;}}}void del_name() //按姓名删除函数{int m=load();int i,j,n,t,flag;char name[20];printf("\n 原来的职工信息:\n");display(); //调用浏览函数printf("\n");printf("请输入要删除的职工的姓名:\n");scanf("%s",name);for(flag=1,i=0;flag&&i<m;i++){if(strcmp(employee[i].name,name)==0){printf("\n已找到此人,原始记录为:\n");printf(" 职工号姓名性别年龄学历工资住址电话\n");printf(" %d %s %c %d %s %d %s %s\n",employee[i].num,empl oyee[i].name,employee[i].sex,employee[i].age,employee[i].xueli,employee[i].wage,employee[i].addr,employee[i].tel);printf("\n确实要删除此人信息请按1,不删除请按0\n");scanf("%d",&n);if(n==1){for(j=i;j<m-1;j++){strcpy(employee[j].name,employee[j+1].name);//strcpy(str1,str2)把str2指向的字符串复制到str1中去employee[j].num=employee[j+1].num;employee[j].sex=employee[j+1].sex;employee[j].age=employee[j+1].age;strcpy(employee[j].xueli,employee[j+1].xueli);employee[j].wage=employee[j+1].wage;strcpy(employee[j].addr,employee[j+1].addr);strcpy(employee[j].tel,employee[j+1].tel);//把下一员工的信息复制到上一个员工信息的位置中去}flag=0;}}}if(!flag) //flag取逻辑反,及flag==0m=m-1;elseprintf("\n对不起,查无此人!\n");printf("\n 浏览删除后的所有职工信息:\n");save(m); //调用保存函数display(); //调用浏览函数printf("\n不在删除请按0, 返回删除菜单请按1,继续按姓名删除请按2\n");scanf("%d",&t);switch(t){case 0:main();break;case 1:del();break;case 2:break;default :break;}}void del_num() //按职工号删除函数{int m=load();int i,j,n,t,flag;int num;printf("\n 原来的职工信息:\n");display(); //调用浏览函数printf("\n");printf("请输入要删除的职工的职工号:\n");scanf("%d",&num);for(flag=1,i=0;flag&&i<m;i++){if(employee[i].num==num){printf("\n已找到此人,原始记录为:\n");printf(" 职工号姓名性别年龄学历工资住址电话\n");printf(" %d %s %c %d %s %d %s %s\n",employee[i].num,empl oyee[i].name,employee[i].sex,employee[i].age,employee[i].xueli,employee[i].wage,employee[i].addr,employee[i].tel);printf("\n确实要删除此人信息请按1,不删除请按0\n");scanf("%d",&n);if(n==1){for(j=i;j<m-1;j++){strcpy(employee[j].name,employee[j+1].name);//strcpy(str1,str2)把str2指向的字符串复制到str1中去employee[j].num=employee[j+1].num;employee[j].sex=employee[j+1].sex;employee[j].age=employee[j+1].age;strcpy(employee[j].xueli,employee[j+1].xueli);employee[j].wage=employee[j+1].wage;strcpy(employee[j].addr,employee[j+1].addr);strcpy(employee[j].tel,employee[j+1].tel);//把下一员工的信息复制到上一个员工信息的位置中去}flag=0;}}}if(!flag) //flag取逻辑反,及flag==0m=m-1;elseprintf("\n对不起,查无此人!\n");printf("\n 浏览删除后的所有职工信息:\n");save(m); //调用保存函数display(); //调用浏览函数printf("\n不在删除请按0,返回删除菜单请按1,继续按职工号删除请按2\n");scanf("%d",&t);switch(t){case 0:main();break;case 1:del();break;case 2:break;default :break;}}void add() //添加函数{FILE*fp;int n;int count=0;int i;int m=load();printf("\n 原来的职工信息:\n");display();printf("\n");fp=fopen("emploee_list.txt","a");printf("请输入想增加的职工数:\n"); scanf("%d",&n);for (i=m;i<(m+n);i++){printf("\n 请输入新增加职工的信息:\n"); printf("请输入职工号: ");scanf("%d",&employee[i].num);printf("\n");printf("请输入姓名: ");scanf("%s",employee[i].name);getchar();printf("请输入性别(f--女m--男): ");scanf("%c",&employee[i].sex);printf("请输入年龄: ");scanf("%d",&employee[i].age);printf("请输入学历: ");scanf("%s",employee[i].xueli);printf("请输入工资: ");scanf("%d",&employee[i].wage);printf("请输入住址: ");scanf("%s",employee[i].addr);printf("请输入电话: ");scanf("%s",employee[i].tel);printf("\n");count=count+1;printf("已增加的人数:\n");printf("%d\n",count);}printf("\n添加完毕!\n");m=m+count;printf("\n浏览增加后的所有职工信息:\n"); printf("\n");save(m);display();fclose(fp);}void search()//查询函数{int t,flag;do{printf("\n按职工号查询请按1; 按学历查询请按2; 按电话号码查询请按3;进入主函数请按4\n");scanf("%d",&t);if(t>=1&&t<=4){flag=1;break;}else{flag=0;printf("您输入有误,请重新选择!");}}while(flag==0);while(flag==1){switch(t){case 1:printf("按职工号查询\n");search_num();break;case 2:printf("按学历查询\n");search_xueli();break;case 3:printf("按电话号码查询\n");search_tel();break;case 4:main();break;default:break;}}}void search_num() //按职工号码查询函数{int num;int i,t;int m=load();printf("请输入要查找的职工号:\n");scanf("%d",&num);for(i=0;i<m;i++)if(num==employee[i].num){printf("\n已找到此人,其记录为:\n");printf(" 职工号姓名性别年龄学历工资住址电话\n");printf(" %d %s %c %d %s %d %s %s\n",employee[i].num,empl oyee[i].name,employee[i].sex,employee[i].age,employee[i].xueli,employee[i].wage,employee[i].addr,employee[i].tel);break;}if(i==m)printf("\n对不起,查无此人\n");printf("\n");printf("不在查询请按0,返回查询函数请按1,继续查询职工号请按2\n");scanf("%d",&t);switch(t){case 0:main();break;case 1:search();break;case 2: break;default:break;}}void search_xueli() //按职工号码查询函数{char xueli[30];int i,t,n=0;int m=load();printf("请输入要查找的学历:\n");scanf("%s",xueli);for(i=0;i<m;i++)if(strcmp(employee[i].xueli,xueli)==0){printf("\n已找到,其记录为:\n");printf(" 职工号姓名性别年龄学历工资住址电话\n");printf(" %d %s %c %d %s %d %s %s\n",employee[i].num,empl oyee[i].name,employee[i].sex,employee[i].age,employee[i].xueli,employee[i].wage,employee[i].addr,employee[i].tel);n++;}if(i==m&&n==m)printf("\n对不起,查无此人\n");printf("\n");printf("不在查询请按0,返回查询函数请按1,继续查询学历请按2\n");scanf("%d",&t);switch(t){case 0:main();break;case 1:search();break;case 2:break;default :break;}}void search_tel() //按号码查询函数{char tel[20];int i, t;int m=load();printf("请输入要查找的电话号码:\n");scanf("%s",tel);for(i=0;i<m;i++)if(strcmp(tel,employee[i].tel)==0){printf("\n已找到此人,其记录为:\n");printf(" 职工号姓名性别年龄学历工资住址电话\n");printf(" %d %s %c %d %s %d %s %s\n",employee[i].num,empl oyee[i].name,employee[i].sex,employee[i].age,employee[i].xueli,employee[i].wage,employee[i].addr,employee[i].tel);break;}if(i==m)printf("\n对不起,查无此人\n");printf("\n");printf("不在查询请按0;返回查询函数请按1,继续查询电话号码请按2\n");scanf("%d",&t);switch(t){case 0:main();break;case 1:search();break;case 2:break;default :break;}}void modify() //修改函数{int t,flag;do{printf("\n按职工号修改请按1; 按姓名修改请按2; 进入主函数请按3\n");scanf("%d",&t);if(t>=1&&t<=3){flag=1;break;}else{flag=0;printf("您输入有误,请重新选择!");}}while(flag==0);while(flag==1){switch(t){case 1:printf("按职工号修改\n");modify_num();break;case 2:printf("按姓名修改\n");modify_name();break;case 3:main();break;default:break;}}}void modify_num() //按员工号修改函数{int num;char name[20];char sex;int age;char xueli[30];int wage;char addr[30];char tel[20];int b,c,i,n,t,flag;int m=load();printf("\n 原来的职工信息:\n");display(); //调用浏览函数printf("\n");printf("请输入要修改的职工的员工号:\n");scanf("%d",&num);for(flag=1,i=0;flag&&i<m;i++){if(num==employee[i].num)//比较两个字符串,{printf("\n已找到此人,原始记录为:\n");printf(" 职工号姓名性别年龄学历工资住址电话\n");printf(" %d %s %c %d %s %d %s %s\n",employee[i].num,empl oyee[i].name,employee[i].sex,employee[i].age,employee[i].xueli,employee[i].wage,employee[i].addr,employee[i].tel);printf("\n确实要修改此人信息请按1 ; 不修改请按0\n");scanf("%d",&n);if(n==1){printf("\n需要进行修改的选项\n 1.职工号2.姓名3.性别4.年龄5.学历6.工资7.住址8.电话\n");printf("请输入你想修改的那一项序号:\n");scanf("%d",&c);if(c>8||c<1)printf("\n选择错误,请重新选择!\n");}flag=0;}}if(flag==1)printf("\n对不起,查无此人!\n");do{switch(c) //因为当找到第i个职工时,for语句后i自加了1,所以下面的应该把改后的信息赋值给第i-1个人{case 1:printf("职工号改为: ");scanf("%d",&num);employee[i-1].num=num;break;case 2:printf("姓名改为: ");scanf("%s",name);strcpy(employee[i-1].name,name);break;case 3:printf("性别改为: ");getchar();scanf("%c",&sex);employee[i-1].sex=sex;break;case 4:printf("年龄改为: ");scanf("%d",&age);employee[i-1].age=age;break;case 5:printf("学历改为: ");scanf("%s",xueli);strcpy(employee[i-1].xueli,xueli);break;case 6:printf("工资改为: ");scanf("%d",&wage);employee[i-1].wage=wage;break;case 7:printf("住址改为: ");scanf("%s",addr);strcpy(employee[i-1].addr,addr);break;case 8:printf("电话改为: ");scanf("%s",tel);strcpy(employee[i-1].tel,tel);break;}printf("\n");printf("\n是否确定所修改的信息?\n 是请按1 ; 不,重新修改请按2: \n");scanf("%d",&b);}while(b==2);printf("\n浏览修改后的所有职工信息:\n");printf("\n");save(m);display();printf("\n 不在修改请按0, 返回修改函数请按1, 继续修改职工号码请按2\n"); scanf("%d",&t);switch(t){case 0:main();break;case 1:modify();break;case 2:break;default :break;}}void modify_name() //按姓名修改函数{int num;char name[20];char sex;int age;char xueli[30];int wage;char addr[30];char tel[20];int b,c,i,n,t,flag;int m=load();printf("\n 原来的职工信息:\n");display(); //调用浏览函数printf("\n");printf("请输入要修改的职工的姓名:\n");scanf("%s",name);for(flag=1,i=0;flag&&i<m;i++){if(strcmp(employee[i].name,name)==0)//比较两个字符串,{printf("\n已找到此人,原始记录为:\n");printf(" 职工号姓名性别年龄学历工资住址电话\n");printf(" %d %s %c %d %s %d %s %s\n",employee[i].num,empl oyee[i].name,employee[i].sex,employee[i].age,employee[i].xueli,employee[i].wage,employee[i].addr,employee[i].tel);printf("\n确实要修改此人信息请按1 ; 不修改请按0\n");scanf("%d",&n);if(n==1){printf("\n需要进行修改的选项\n 1.职工号2.姓名3.性别4.年龄5.学历6.工资7.住址8.电话\n");printf("请输入你想修改的那一项序号:\n");scanf("%d",&c);if(c>8||c<1)printf("\n选择错误,请重新选择!\n");}flag=0;}}if(flag==1)printf("\n对不起,查无此人!\n");do{switch(c) //因为当找到第i个职工时,for语句后i自加了1,所以下面的应该把改后的信息赋值给第i-1个人{case 1:printf("职工号改为: ");scanf("%d",&num);employee[i-1].num=num;break;case 2:printf("姓名改为: ");scanf("%s",name);strcpy(employee[i-1].name,name);break;case 3:printf("性别改为: ");getchar();scanf("%c",&sex);employee[i-1].sex=sex;break;case 4:printf("年龄改为: ");scanf("%d",&age);employee[i-1].age=age;break;case 5:printf("学历改为: ");scanf("%s",xueli);strcpy(employee[i-1].xueli,xueli);break;case 6:printf("工资改为: ");scanf("%d",&wage);employee[i-1].wage=wage;break;case 7:printf("住址改为: ");scanf("%s",addr);strcpy(employee[i-1].addr,addr);break;case 8:printf("电话改为: ");scanf("%s",tel);strcpy(employee[i-1].tel,tel);break;}printf("\n");printf("\n是否确定所修改的信息?\n 是请按1 ; 不,重新修改请按2: \n");scanf("%d",&b);}while(b==2);printf("\n浏览修改后的所有职工信息:\n");printf("\n");save(m);display();printf("\n 不在修改请按0, 返回修改函数请按1, 继续修改职工姓名请按2\n");scanf("%d",&t);switch(t){case 0:main();break;case 1:modify();break;case 2:break;default :break;}}。
C语言课程设计职工信息管理系统源程序

系统管理:包 括用户管理、 权限管理、系
统设置等
系统开发背景
企业信息化需求:提高工作效率,降低管理成本 技术发展:云计算、大数据等技术的成熟 市场竞争:提高企业竞争力,满足客户需求 企业内部管理:优化人力资源管理,提高员工满意度
系统目标
提高工作效率
简化工作流程
提高数据准确性
加强信息安全管理
Part Five
系统实现
数据库连接实现
连接方式:使用JDBC(Java Database Connectivity)进行 数据库连接
连接参数:包括数据库地址、用户 名、密码等
添加标题
添加标题
添加标题
添加标题
数据库类型:支持MySQL、 Oracle、SQL Server等多种数据 库
连接过程:通过JDBC驱动程序建 立与数据库的连接,执行SQL语句 进行数据操作
数据需求分析
员工信息:包括姓名、性别、年龄、职位、部门等信息 考勤信息:包括上下班时间、请假、加班等信息
薪资信息:包括基本工资、绩效工资、奖金等信息 培训信息:包括培训课程、培训时间、培训效果等信息
绩效评估信息:包括绩效考核标准、绩效考核结果等信息 系统管理信息:包括用户管理、权限管理、系统日志等信
息
性能需求分析
系统响应时间:要求系统响应时间不超过3秒 数据处理速度:要求系统数据处理速度不低于每秒1000条记录 系统稳定性:要求系统在连续运行72小时后,仍能保持稳定运行 系统安全性:要求系统具备防病毒、防黑客等安全措施,确保数据安全
Part Four
系统设计
系统架构设计
架构设计原则:高 内聚、低耦合、可 扩展、可维护
系统维护
定期备份数据:确保数据安全,防止数据丢失 定期更新系统:确保系统安全,防止病毒攻击 定期检查硬件:确保硬件正常运行,防止硬件故障 定期培训员工:确保员工熟练掌握系统操作,提高工作效率
员工管理系统c语言源代码

#include〈string.h>#include〈stdio.h〉#define N 10000 /*员工的最大数*/typedef struct wage{float wage1; /*员工的基本工资*/float Bonus;/*员工的奖金*/float tax;/*员工的税金*/float S_fee;/*员工的水费*/float D_fee; /*员工的电费*/float T_fee;/*员工的有线电视费*/float Q_fee; /*员工的清洁费*/float S_wage;/*员工的实发工资*/}WAGE;typedef struct worker{char name[10]; /*员工的姓名*/char ID[10];/*员工的工号*/int ID_P;/*员工的职务代号1-—-—高级工程师2————中级工程师3—--—初级工程师*/char ID_Wage[10]; /*员工的工资卡号*/char depart[10]; /*员工的部门*/int age;/*员工的年龄*/char sex;/*员工的性别*/char m_phone[10];/*员工的手机*/char H_phone[10]; /*员工的住宅电话*/WAGE salary;}WORK;WORK wo[N];int n;/*员工的总数*/void menu();/*员工管理操作主菜单函数声明*/void menu1();/*员工管理操作子菜单函数声明*//********************************************************Author : GTCopyRight :tgao@sohu。
comfunction name :saveComments :保存文件函数input : 无output : 无CreatedDate :2007/06/01*********************************************************/save()/*保存函数,保存n个记录*/{int w=1;FILE *fp;int i;system("cls" );if((fp=fopen("work。
职工信息管理系统源代码

#include <malloc.h>#include <stdio.h>#include <string.h>#include <stdlib.h>#define ALLMAX 100 //总共统计的职工的人数typedef struct Node{long int born_date,work_date,tele_num;charsex,name[ALLMAX],degree[ALLMAX],job[ALLMAX],address[ALLMAX];struct Node *next;}SLNode;typedef struct{long int born_date,work_date,tele_num;charname[ALLMAX],sex,degree[ALLMAX],job[ALLMAX],address[ALLMAX];}DataType;void ListInitiate(SLNode **head)//链表初始化{if((*head=(SLNode *)malloc(sizeof(SLNode)))==NULL) exit(1);//动态分配存储空间(*head)->next=NULL;}SLNode *ListInsert(SLNode *head,DataType x)//职工信息的插入姓名并按照升序排列{SLNode *p,*q,*s;p=head->next;if((q=(SLNode *)malloc(sizeof(SLNode)))==NULL) exit(1);//动态分配存储空间q->born_date=x.born_date;q->work_date=x.work_date;q->tele_num=x.tele_num;strcpy(q->name,);q->sex=x.sex;strcpy(q->degree,x.degree);strcpy(q->job,x.job);strcpy(q->address,x.address);if(head->next==NULL){//如果只有链表的头结点,没有其他的结点,直接插入在头结点后面head->next=q;head->next->next=NULL;}else{//链表非空for(;p;p=p->next){if(p->next!=NULL){if(strcmp(p->name,)<0&&strcmp(p->next->name,)>0){//位于两个结点之间s=p->next;p->next=q;q->next=s;break;}//else if(strcmp(p->name,)==0)break; //如果姓名相同则不插入信息}else if(strcmp(p->name,)<0&&p->next==NULL){//链表非空,并且在排序中是最后一个p->next=q;q->next=NULL;break;}if(strcmp(p->name,)>0){//位于链表头结点之后的位置s=head->next;head->next=q;q->next=s;break;}}}return head;}void ListDelete(SLNode *head)//职工信息的删除{SLNode *p,*s;char x[20];s=head;p=head->next;if(head->next==NULL){//链表为空,输出:名单中无职工信息,无须删除!printf("名单中无此职工信息,无须删除!\n");return;}printf("请输入要删除职工的姓名:\n"); //输入要删除的人的姓名scanf("%s",x);for(p;p;p=p->next){//在链表中从头到尾查找输入的人的姓名if(strcmp(p->name,x)==0){ //如果存在,则删除,否则输出:名单中无职工信息,无须删除!s->next=p->next;free(p);printf("删除成功!请继续操作!\n");break;}s=p;}if(p==NULL){//链表本身为空printf("名单中无此职工信息,无须删除!\n");}}void ListModify(SLNode *head)//职工信息的修改{DataType x;SLNode *p;p=head->next;if(p==NULL){//链表本身为空printf("职工名单无职工信息,无须修改!\n");return;}printf("请输入要修改的职工姓名:\n");scanf("%s",);for(;p;p=p->next){if(strcmp(,p->name)==0){//查找到了该职工的信息printf("依次写入该职工的新信息:\n");printf("请输入职工信息:\n姓名、性别、出生年月、工作年月、学历、职务、住址、电话\n");scanf("%s %c %d %d %s %s %s %d",p->name,&p->sex,&p->born_date,&p->work_ date,p->degree,p->job,p->address,&p->tele_num);printf("修改成功!请继续操作!\n");break;}}if(p==NULL)//如果链表为空printf("此职工不存在,无法修改其信息!\n");}void put(SLNode *head,FILE *fp)//职工信息的保存{SLNode *p;if((fp=fopen("Employee.txt","w"))==NULL){//printf("无法打开'Employee.txt'!\n");exit(0);}for(p=head->next;p;p=p->next){fprintf(fp,"%s %c %d %d %s %s %s %d\n",p->name,p->sex,p->born_date,p->work_ date,p->degree,p->job,p->address,p->tele_num);}if(fclose(fp)){printf("无法关闭'Employee.txt'!\n"); exit(0);}}void Listfind(SLNode head)//职工信息的查找{int i,j;SLNode *p;DataType x;if(head.next==NULL){//链表为空printf("名单中无职工信息,查询失败!\n");return;}//返回主菜单printf("\n");printf("\t*********************************\n");printf("\t*职工信息查询操作*\n");printf("\t**\n");printf("\t*0.退出查询系统,回到主菜单\t\t 1.对姓名进行查询\t*\n\t * 2.对出生年月进行查询\t\t 3.对学历进行查询\t*\n\t* 4.对工作年月进行查询\t\t 5.对职务进行查询\t*\n\t* 6.对住址进行查询\t\t 7.对电话进行查询\t*\n");printf("\t*********************************\n");while(1){printf("请输入您要选择的操作:");scanf("%d",&i);if(i==0)//输入0,退出查询系统,回到主菜单break;else if(i==1){//输入1,对姓名进行查询p=head.next;printf("请输入姓名:");scanf("%s",);j=0;for(p;p;p=p->next){if(strcmp(p->name,)==0){//如果存在这个人,那么j自加++j;printf("\n姓名、性别、出生年月、工作年月、学历、职务、住址、电话\n");printf("%s %c %d %d %s %s %s %d\n",p->name,p->sex,p->born_date,p->work_date ,p->degree,p->job,p->address,p->tele_num);}}if(j==0)//表示没有找到输入的信息printf("职工名单中不存在此人!\n");else printf("查询成功!继续操作!\n");}else if(i==2){//输入2,对出生年月进行查询p=head.next;printf("请输入出生年月:");scanf("%d",&x.born_date);j=0;for(p;p;p=p->next){if(p->born_date==x.born_date){//输入的出生年月在链表中存在++j;//如果存在这个人,那么j自加printf("\n姓名、性别、出生年月、工作年月、学历、职务、住址、电话\n");printf("%s %c %d %d %s %s %s %d\n",p->name,p->sex,p->born_date,p->work_date ,p->degree,p->job,p->address,p->tele_num);}}if(j==0)//表示没有找到输入的信息printf("职工名单中没有这个时间出生的!\n");else printf("查询成功!请继续操作!\n");}else if(i==4){//输入4,对工作年月进行查询p=head.next;printf("请输入工作年月:");scanf("%d",&x.work_date);j=0;for(p;p;p=p->next){if(p->work_date==x.work_date){++j;//如果存在这个人,那么j自加printf("\n姓名、性别、出生年月、工作年月、学历、职务、住址、电话\n");printf("%s %c %d %d %s %s %s %d\n",p->name,p->sex,p->born_date,p->work_date ,p->degree,p->job,p->address,p->tele_num);}}if(j==0)//表示没有找到输入的信息printf("职工名单中没有这个时间工作的!\n");else printf("查询成功!请继续操作!\n");}else if(i==3){//输入3,对学历进行查询p=head.next;printf("请输入学历:");scanf("%s",x.degree);j=0;for(p;p;p=p->next){if(strcmp(p->degree,x.degree)==0){++j;//如果存在这个人,那么j自加printf("\n姓名、性别、出生年月、工作年月、学历、职务、住址、电话\n");printf("%s %c %d %d %s %s %s %d\n",p->name,p->sex,p->born_date,p->work_date ,p->degree,p->job,p->address,p->tele_num);}}if(j==0)//表示没有找到输入的信息printf("职工名单中没有这种学历的!\n");else printf("查询成功!请继续操作!\n");}else if(i==5){//输入5,对职务进行查询p=head.next;printf("请输入职务:");scanf("%s",x.job);j=0;for(p;p;p=p->next){if(strcmp(p->job,x.job)==0){++j;//如果存在这个人,那么j自加printf("\n姓名、性别、出生年月、工作年月、学历、职务、住址、电话\n");printf("%s %c %d %d %s %s %s %d\n",p->name,p->sex,p->born_date,p->work_date ,p->degree,p->job,p->address,p->tele_num);}}if(j==0)//表示没有找到输入的信息printf("职工名单中没有这种职务的!\n");else printf("查询成功!请继续操作!\n");}else if(i==6){//输入6,对住址进行查询p=head.next;printf("请输入住址:");scanf("%s",x.address);j=0;for(p;p;p=p->next){if(strcmp(p->address,x.address)==0){++j;//如果存在这个人,那么j自加printf("\n姓名、性别、出生年月、工作年月、学历、职务、住址、电话\n");printf("%s %c %d %d %s %s %s %d\n",p->name,p->sex,p->born_date,p->work_date ,p->degree,p->job,p->address,p->tele_num);}}if(j==0)//表示没有找到输入的信息printf("职工名单中没有住这的!\n");else printf("查询成功!请继续操作!\n");}else if(i==7){//输入7,对电话号码进行查询p=head.next;printf("请输入电话:");scanf("%d",&x.tele_num);j=0;for(p;p;p=p->next){if(p->tele_num==x.tele_num){++j;//如果存在这个人,那么j自加printf("\n姓名、性别、出生年月、工作年月、学历、职务、住址、电话\n");printf("%s %c %d %d %s %s %s %d\n",p->name,p->sex,p->born_date,p->work_date ,p->degree,p->job,p->address,p->tele_num);}}if(j==0)//表示没有找到输入的信息printf("职工名单中没人用这个号码!\n");else printf("查询成功!请继续操作!\n");}else if(i!=0 && i!=1 && i!=2 && i!=3 && i!=4 && i!=5 && i!=6 && i!=7)//输入任意不是上述数字的,那么久显示输入错误printf("输入出错!请再次输入!\n");printf("\n");printf("\t*********************************\n");printf("\t*职工信息查询系统*\n");printf("\t**\n");printf("\t*0.退出查询系统,回到主菜单\t\t 1.对姓名进行查询\t*\n\t* 2.对出生年月进行查询\t\t 3.对学历进行查询\t*\n\t*4.对工作年月进行查询\t\t 5.对职务进行查询\t*\n\t* 6.对住址进行查询\t\t 7.对电话进行查询\t*\n");printf("\t*********************************\n");//printf("0.退出查询系统,回到主菜单\n1.对姓名进行查询\n2.对出生年月进行查询\n3.对工作年月进行查询\n4.对学历进行查询\n5.对职务进行查询\n6.对住址进行查询\n7.对电话号码进行查询\n");}}void print(SLNode *head)//职工信息的显示{SLNode *p;for(p=head->next;p!=NULL;p=p->next)//输出所有职工的信息printf("%s %c %d %d %s %s %s %d\n",p->name,p->sex,p->born_date,p->work_date ,p->degree,p->job,p->address,p->tele_num);}void printLink(SLNode *head)//职工信息的显示{printf("职工名单:\n姓名、性别、出生年月、工作年月、学历、职务、住址、电话\n");print(head);}void Listpaixu(SLNode *head)//职工信息的排序{int i,n=0,m,flag=1;SLNode *p,*q,*s;if(head->next==NULL){//职工链表为空printf("名单中无职工信息,无法排序!\n\n");return;}// printf("输入出错!请再次输入!\n\n");printf("\t\t~.~.~.~.~.~.~.~.~.~.~.~.~.~.~.~.~.~.~.~.~.~.~.~\n");printf("\t\t~.~ 职工信息排序操作~.~\n");printf("\t\t~.~ ~.~\n");printf("\t\t~.~\t0.退出排序系统,回到主菜单~.~\n\t\t~.~\t1.对性别进行排序~.~\n\t\t~.~\t2.对出生年月进行排序~.~\n\t\t~.~\t3.对工作年月进行排序~.~\n\t\t~.~\t4.对姓名进行排序~.~\n");printf("\t\t~.~.~.~.~.~.~.~.~.~.~.~.~.~.~.~.~.~.~.~.~.~.~.~\n");while(1){printf("请输入您要选择的操作:");scanf("%d",&i);if(i==0)//输入0,退出排序系统,回到主菜单break;else if(i==1){//输入1,对性别进行排序n=0,m,flag=1;for(p=head;NULL!=p;p=p->next)//统计职工人数n++;for(m=1;flag&&m<=n;m++){flag=0;for(q=head->next,p=head,s=p;q;s=p,p=q,q=q->next){if(p->sex>q->sex)//p为当前节点,p的性别>p的后继节点的性别{if(head==p)//p为头结点{head->next=q->next;head=q;q->next=p;//交换节点信息q=head->next;p=head;}else{p->next=q->next;q->next=p;s->next=q;p=q;q=p->next;}flag=1;}}}printf("排好序的信息如下:\n");printLink(head);//输出所有节点的信息return;}else if(i==2){//输入2,对出生年月进行排序n=0,m,flag=1;for(p=head;NULL!=p;p=p->next)//统计职工人数n++;for(m=1;flag&&m<=n;n++)//循环{flag=0;for(q=head->next,p=head,s=p;q;s=p,p=q,q=q->next){if(p->born_date>q->born_date)//对出生年月进行排序{if(head==p){head->next=q->next;head=q;q->next=p;q=head->next;p=head;}else{p->next=q->next;q->next=p;s->next=q;p=q;q=p->next;}flag=1;}}}printf("排好序的信息如下:\n");printLink(head);return;}else if(i==3){//输入3,按工作时间进行排序n=0,m,flag=1;for(p=head;NULL!=p;p=p->next)n++;for(m=1;flag&&m<=n;n++){flag=0;for(q=head->next,p=head,s=p;q;s=p,p=q,q=q->next){ if(p->work_date>q->work_date){if(head==p){head->next=q->next;head=q;q->next=p;q=head->next;p=head;}else{p->next=q->next;q->next=p;s->next=q;p=q;q=p->next;}flag=1;}}}printf("排好序的信息如下:\n");printLink(head);return;}else if(i==4){n=0,m,flag=1;for(p=head;NULL!=p;p=p->next)n++;for(m=1;flag&&m<=n;n++){flag=0;for(q=head->next,p=head,s=p;q;s=p,p=q,q=q->next){if(p->name[0]>q->name[0]){if(head==p){head->next=q->next;head=q;q->next=p;q=head->next;p=head;}else{p->next=q->next;q->next=p;s->next=q;p=q;q=p->next;}flag=1;}}}printf("排好序的信息如下:\n");printLink(head);return;}else if(i!=0&&i!=1&&i!=2&&i!=3&&i!=4)printf("输入出错!请再次输入!\n\n");printf("\t\t~.~.~.~.~.~.~.~.~.~.~.~.~.~.~.~.~.~.~.~.~.~.~.~\n");printf("\t\t~.~ 职工信息排序系统~.~\n");printf("\t\t~.~~.~\n");printf("\t\t~.~\t0.退出排序系统,回到主菜单~.~\n\t\t~.~\t1.对性别进行排序~.~\n\t\t~.~\t2.对出生年月进行排序~.~\n\t\t~.~\t3.对工作年月进行排序~.~\n\t\t~.~\t4.显示全部职工信息~.~\n");printf("\t\t~.~.~.~.~.~.~.~.~.~.~.~.~.~.~.~.~.~.~.~.~.~.~.~\n");//printf("0.退出排序系统,回到主菜单\n1.对性别进行排序\n2.对出生年月进行排序\n3.对工作年月进行排序\n");}}void main(){DataType x;SLNode *head;int i,n;FILE *fp;ListInitiate(&head);//初始化链表printf("\n");printf("*************************************************************** ****************\n");printf("************************ 欢迎使用职工管理系统***************************\n");printf("*************************************************************** ****************\n");printf("请输入要录入的职工人数n:");//输入要录入的职工人数scanf("%d",&n);if(n==0) goto aa;printf("请输入职工信息:\n姓名、性别、出生年月、工作年月、学历、职务、住址、电话\n");for(i=0;i<n;i++)//职工信息的输入{scanf("%s %c %d %d %s %s %s %d",,&x.sex,&x.born_date,&x.work_date,x. degree,x.job,x.address,&x.tele_num);head=ListInsert(head,x);}if((fp=fopen("Employeetxt","a"))==NULL){printf("\t无法打开'Employee.txt'!\n");exit(0);}put(head,fp);if(fclose(fp)){printf("\t无法关闭'Employee.txt'!\n"); exit(0);}printLink(head);aa: printf("\n");printf("\t★☆☆★☆☆★☆☆★★☆☆★☆☆★☆☆★★☆☆★☆☆★☆☆★☆☆★\n");printf("\t☆* 主菜单* ☆\n");printf("\t★********** ★\n");printf("\t☆☆\n");printf("\t★\t0.结束管理系统\t\t\t1.新增职工信息\t\t★\n\t☆\t2.删除职工信息\t\t\t3.查询职工信息\t\t☆\n\t★\t4.修改职工信息\t\t\t5.职工信息排序\t\t★\n");printf("\t☆☆\n");printf("\t★☆☆★☆☆★☆☆★★☆☆★☆☆★☆☆★★☆☆★☆☆★☆☆★☆☆★\n");while(1){printf("请输入您要选择的操作:");scanf("%d",&i);if(i==0)//输入0,结束系统{printf("\t\t您已经成功退出职工管理系统,谢谢使用!\n");break;}else if(i==1){//输入1,新增一名职工printf("请输入职工信息:\n姓名、性别、出生年月、工作年月、学历、职务、住址、电话\n");scanf("%s %c %d %d %s %s %s %d",,&x.sex,&x.born_date,&x.work_date,x. degree,x.job,x.address,&x.tele_num);head=ListInsert(head,x);printf("新增成功!请继续操作!\n");printLink(head);put(head,fp);//保存在文件中else if(i==2){//输入2,删除一名职工ListDelete(head);if((fp=fopen("Employee.txt","w"))==NULL){printf("无法打开'职工名单.txt'!\n");exit(0);}put(head,fp);//保存在文件中if(fclose(fp)){printf("无法关闭'Employee.txt'!\n"); exit(0);}}else if(i==3)//输入3,查找一名职工Listfind(*head);else if(i==4){//输入4,修改职工信息ListModify(head);if((fp=fopen("Employee.txt","w"))==NULL){printf("无法打开'Employee.txt'!\n");exit(0);}put(head,fp);//保存在文件中if(fclose(fp)){printf("无法关闭'Employee.txt'!\n"); exit(0);}}else if(i==5){//输入5,对职工信息进行排序SLNode *p=head;Listpaixu(p);}//如果出入的不是上述任何一种情况就输出:输入出错else printf("输入出错!请再次输入!\n");printf("\n");printf("\t★☆☆★☆☆★☆☆★★☆☆★☆☆★☆☆★★☆☆★☆☆★☆☆★☆☆★\n");printf("\t☆* 主菜单* ☆\n");printf("\t★********** ★\n");printf("\t☆☆\n");printf("\t★0.结束管理系统\t\t\t\t1.新增职工信息\t★\n\t☆ 2.删除职工信息\t\t\t\t3.查询职工信息\t☆\n\t★ 4.修改职工信息\t\t\t\t5.职工信息排序\t★\n");printf("\t☆☆\n");printf("\t★☆☆★☆☆★☆☆★★☆☆★☆☆★☆☆★★☆☆★☆☆★☆☆★☆☆★\n");//printf("0.结束系统\n1.新增一名职工\n2.删除一名职工\n3.查询职工信息\n4.修改职工信息\n5.对职工信息进行排序\n");}}。
职工信息管理系统C语言课程设计+源代码

课程设计报告(本科)课程:高级语言课程设计学号:姓名:班级:教师:时间:计算机科学与技术系修改职工信息,添加职工信息,删除职工信息。
5.执行程序。
结果与分析(可以加页):功能上有对职工信息的增加,删除,浏览,查询,修改等简单的功能. 使用说明及运行实例1.运行程序,进入职工信息管理系统的主菜单:图1:进入主菜单界2.输入数字“1”进行录入职工信息:图2:录入职工信息3.输入“y”返回主菜单(界面同图1)。
4.输入“2”浏览职工信息:图3:浏览职工信息5.输入“y”后继续,输入“3”进行查询职工信息:图4:按职工号查询职工信息5:按学历查询职工信息图6:按电话号码查询职工信息6.进入主菜单,输入“4”进行删除职工信息:图7:按姓名删除职工信息图8:按职工号删除职工信息7.进入主菜单输入“5”进行添加职工信息:图9:添加职工信息8.进入主菜单输入“6”进行修改职工信息:图10:按姓名修改职工信息图11:按职工号修改职工信息9.进入主菜单输入”7”退出职工信息管理系统:图12:退出系统优点是:基本实现了程序的多功能,对与查询职工信息提供了三种方法,对与修改和删除职工信息提供了两种方法,功能多种多样。
旗帜变量的使用也是优点之一;这个程序用到了的结构体,整个程序简单,易懂。
缺点是:保存职工信息有限,程序段比较臃长。
设计体会与建议:通过这次的课程设计,我更加了解C语言,学会更好的使用C语言函数调用和结构体等,把学过的知识运用于实践中,而不仅仅停留于对课本的单纯理解;这次设计也让我知道我懂的太少,要学习的东西还有很多。
想完成一项功能就要用很复杂的语句去实现,所以整个程序变的很长,复杂,但是结构体,数组,指针等的灵活运用又可使程序变的易懂。
另外,团队的合作也是成功的一部分!在编写代码时一开始没有运用有意义的函数名和变量,结果找起来和修改好麻烦,也使别人看不懂。
在整个课程设计中,我认为最重要的就是耐心和细心。
附录:#include<stdio.h> //标准输入输出函数库#include<string.h> //字符串函数库#include<stdlib.h>struct employee{int num; //职工号char name[20]; //姓名char sex; //性别int age; //年龄char xueli[30]; //学历int wage; //工资char addr[30]; //家庭住址char tel[20]; //联系电话}employee[100]; //定义一个结构体int main() //函数主体{void menu(); //菜单函数void input(); // 录入函数void save(int m); //保存文件函数void display(); //浏览函数void del(); // 删除函数void del_name(); //按姓名删除函数void del_num(); //按职工号删除函数void add(); //添加函数void search(); //查询函数void search_num(); //按职工号码查询函数void search_xueli(); //按学历查询函数void search_tel(); //按号码查询函数void modify(); // 修改函数void modify_num(); //按员工号修改函数void modify_name(); //按姓名修改函数int n,flag;char a;menu();printf("请选择你需要操作的步骤(1--7):\n");scanf("%d",&n);do{if(n>=1&&n<=7){flag=1;break;}else{flag=0;printf("您输入有误,请重新选择!");}}while(flag==0);while(flag==1){switch(n){case 1:printf(" ◆◆◆输入职工信息◆◆◆\n");printf("\n");input();break;case 2:printf(" ◆◆◆浏览职工信息◆◆◆\n");printf("\n");display();break;case 3:printf(" ◆◆◆查询职工信息◆◆◆\n");printf("\n");search();break;case 4:printf(" ◆◆◆删除职工信息◆◆◆\n");printf("\n");del();break;case 5:printf(" ◆◆◆添加职工信息◆◆◆\n");printf("\n");add();break;case 6:printf(" ◆◆◆修改职工信息◆◆◆\n");printf("\n");modify();break;case 7:exit(0);break;default :break;}getchar();printf("\n");printf("是否继续进行(y or n):\n");scanf("%c",&a);if(a=='y'){flag=1;system("cls"); //清屏menu(); //调用菜单函数printf("请再次选择你需要操作的步骤(1--7):\n");scanf("%d",&n);printf("\n");}elseexit(0);}}void menu() //菜单函数{printf(" ************欢迎进入职工信息管理系统**********\n"); printf(" 1.录入职工信息");printf(" 2.浏览职工信息\n");printf(" 3.查询职工信息");printf(" 4.删除职工信息\n");printf(" 5.添加职工信息");printf(" 6.修改职工信息\n");printf(" 7.退出\n");printf(" ********************谢谢使用******************\n"); printf("\n");printf("\n");}void input() //录入函数{int i,m;printf("请输入需要创建信息的职工人数(1--100):\n");scanf("%d",&m);for (i=0;i<m;i++){printf("请输入职工号:");scanf("%d",&employee[i].num);printf("请输入姓名: ");scanf("%s",employee[i].name);getchar();printf("请输入性别(f--女m--男): ");scanf("%c",&employee[i].sex); printf("请输入年龄: ");scanf("%d",&employee[i].age); printf("请输入学历: ");scanf("%s",employee[i].xueli); printf("请输入工资: ");scanf("%d",&employee[i].wage); printf("请输入住址: ");scanf("%s",employee[i].addr); printf("请输入电话: ");scanf("%s",employee[i].tel); printf("\n");}printf("\n创建完毕!\n");save(m);}void save(int m) //保存文件函数{int i;FILE*fp;if ((fp=fopen("employee_list.txt","wb"))==NULL){printf ("cannot open file\n");exit(0);}for (i=0;i<m;i++) //将内存中职工的信息输出到磁盘文件中去if (fwrite(&employee[i],sizeof(struct employee),1,fp)!=1) printf("file write error\n");fclose(fp);}int load() //导入函数{FILE*fp;int i=0;if((fp=fopen("employee_list.txt","rb"))==NULL){printf ("cannot open file\n");exit(0);}elsedo{fread(&employee[i],sizeof(struct employee),1,fp);i++;}while(feof(fp)==0);}fclose(fp);return(i-1);//循环过程中跳出循环时i自动加一,所以要减去一}void display() //浏览函数{int i;int m=load();printf(" 职工号姓名性别年龄学历工资住址电话\n"); for(i=0;i<m;i++) //m为输入部分的职工人数printf(" %d %s %c %d %s %d %s %s\n",employee[i].num, employee[i].name,employee[i].sex,employee[i].age,employee[i].xueli,employee[i].wage,employee[i].addr,employ ee[i].tel);}void del() //删除函数{int t,flag;do{printf("\n按职工号删除请按1; 按姓名删除请按2; 进入主函数请按3\n");scanf("%d",&t);if(t>=1&&t<=3){flag=1;break;}else{flag=0;printf("您输入有误,请重新选择!");}}while(flag==0);while(flag==1){switch(t){case 1:printf("按职工号删除\n");del_num();break;case 2:printf("按姓名删除\n");del_name();break;case 3:main();break;default:break;}}}void del_name() //按姓名删除函数{int m=load();int i,j,n,t,flag;char name[20];printf("\n 原来的职工信息:\n");display(); //调用浏览函数printf("\n");printf("请输入要删除的职工的姓名:\n");scanf("%s",name);for(flag=1,i=0;flag&&i<m;i++){if(strcmp(employee[i].name,name)==0){printf("\n已找到此人,原始记录为:\n");printf(" 职工号姓名性别年龄学历工资住址电话\n");printf(" %d %s %c %d %s %d %s %s\n",employee[i].num, employee[i].name,employee[i].sex,employee[i].age,employee[i].xueli,employee[i].wage,employee[i].addr,employ ee[i].tel);printf("\n确实要删除此人信息请按1,不删除请按0\n");scanf("%d",&n);if(n==1){for(j=i;j<m-1;j++){strcpy(employee[j].name,employee[j+1].name);//strcpy(str1,str2)把str2指向的字符串复制到str1中去employee[j].num=employee[j+1].num;employee[j].sex=employee[j+1].sex;employee[j].age=employee[j+1].age;strcpy(employee[j].xueli,employee[j+1].xueli);employee[j].wage=employee[j+1].wage;strcpy(employee[j].addr,employee[j+1].addr);strcpy(employee[j].tel,employee[j+1].tel);//把下一员工的信息复制到上一个员工信息的位置中去}flag=0;}}}if(!flag) //flag取逻辑反,及flag==0m=m-1;elseprintf("\n对不起,查无此人!\n");printf("\n 浏览删除后的所有职工信息:\n");save(m); //调用保存函数display(); //调用浏览函数printf("\n不在删除请按0, 返回删除菜单请按1,继续按姓名删除请按2\n"); scanf("%d",&t);switch(t){case 0:main();break;case 1:del();break;case 2:break;default :break;}}void del_num() //按职工号删除函数{int m=load();int i,j,n,t,flag;int num;printf("\n 原来的职工信息:\n");display(); //调用浏览函数printf("\n");printf("请输入要删除的职工的职工号:\n");scanf("%d",&num);for(flag=1,i=0;flag&&i<m;i++){if(employee[i].num==num){printf("\n已找到此人,原始记录为:\n");printf(" 职工号姓名性别年龄学历工资住址电话\n");printf(" %d %s %c %d %s %d %s %s\n",employee[i].num, employee[i].name,employee[i].sex,employee[i].age,employee[i].xueli,employee[i].wage,employee[i].addr,employ ee[i].tel);printf("\n确实要删除此人信息请按1,不删除请按0\n");scanf("%d",&n);if(n==1){for(j=i;j<m-1;j++){strcpy(employee[j].name,employee[j+1].name);//strcpy(str1,str2)把str2指向的字符串复制到str1中去employee[j].num=employee[j+1].num;employee[j].sex=employee[j+1].sex;employee[j].age=employee[j+1].age;strcpy(employee[j].xueli,employee[j+1].xueli);employee[j].wage=employee[j+1].wage;strcpy(employee[j].addr,employee[j+1].addr);strcpy(employee[j].tel,employee[j+1].tel);//把下一员工的信息复制到上一个员工信息的位置中去}flag=0;}}}if(!flag) //flag取逻辑反,及flag==0m=m-1;elseprintf("\n对不起,查无此人!\n");printf("\n 浏览删除后的所有职工信息:\n");save(m); //调用保存函数display(); //调用浏览函数printf("\n不在删除请按0,返回删除菜单请按1,继续按职工号删除请按2\n");scanf("%d",&t);switch(t){case 0:main();break;case 1:del();break;case 2:break;default :break;}}void add() //添加函数{FILE*fp;int n;int count=0;int i;int m=load();printf("\n 原来的职工信息:\n");display();printf("\n");fp=fopen("emploee_list.txt","a");printf("请输入想增加的职工数:\n"); scanf("%d",&n);for (i=m;i<(m+n);i++){printf("\n 请输入新增加职工的信息:\n"); printf("请输入职工号: ");scanf("%d",&employee[i].num);printf("\n");printf("请输入姓名: ");scanf("%s",employee[i].name);getchar();printf("请输入性别(f--女m--男): ");scanf("%c",&employee[i].sex);printf("请输入年龄: ");scanf("%d",&employee[i].age);printf("请输入学历: ");scanf("%s",employee[i].xueli);printf("请输入工资: ");scanf("%d",&employee[i].wage);printf("请输入住址: ");scanf("%s",employee[i].addr);printf("请输入电话: ");scanf("%s",employee[i].tel);printf("\n");count=count+1;printf("已增加的人数:\n");printf("%d\n",count);}printf("\n添加完毕!\n");m=m+count;printf("\n浏览增加后的所有职工信息:\n");printf("\n");save(m);display();fclose(fp);}void search()//查询函数{int t,flag;do{printf("\n按职工号查询请按1; 按学历查询请按2; 按电话号码查询请按3;进入主函数请按4\n");scanf("%d",&t);if(t>=1&&t<=4){flag=1;break;}else{flag=0;printf("您输入有误,请重新选择!");}}while(flag==0);while(flag==1){switch(t){case 1:printf("按职工号查询\n");search_num();break;case 2:printf("按学历查询\n");search_xueli();break;case 3:printf("按电话号码查询\n");search_tel();break;case 4:main();break;default:break;}}}void search_num() //按职工号码查询函数{int num;int i,t;int m=load();printf("请输入要查找的职工号:\n");scanf("%d",&num);for(i=0;i<m;i++)if(num==employee[i].num){printf("\n已找到此人,其记录为:\n");printf(" 职工号姓名性别年龄学历工资住址电话\n");printf(" %d %s %c %d %s %d %s %s\n",employee[i].num, employee[i].name,employee[i].sex,employee[i].age,employee[i].xueli,employee[i].wage,employee[i].addr,employ ee[i].tel);break;}if(i==m)printf("\n对不起,查无此人\n");printf("\n");printf("不在查询请按0,返回查询函数请按1,继续查询职工号请按2\n");scanf("%d",&t);switch(t){case 0:main();break;case 1:search();break;case 2: break;default:break;}}void search_xueli() //按职工号码查询函数{char xueli[30];int i,t,n=0;int m=load();printf("请输入要查找的学历:\n");scanf("%s",xueli);for(i=0;i<m;i++)if(strcmp(employee[i].xueli,xueli)==0){printf("\n已找到,其记录为:\n");printf(" 职工号姓名性别年龄学历工资住址电话\n");printf(" %d %s %c %d %s %d %s %s\n",employee[i].num, employee[i].name,employee[i].sex,employee[i].age,employee[i].xueli,employee[i].wage,employee[i].addr,employ ee[i].tel);n++;}if(i==m&&n==m)printf("\n对不起,查无此人\n");printf("\n");printf("不在查询请按0,返回查询函数请按1,继续查询学历请按2\n");scanf("%d",&t);switch(t){case 0:main();break;case 1:search();break;case 2:break;default :break;}}void search_tel() //按号码查询函数{char tel[20];int i, t;int m=load();printf("请输入要查找的电话号码:\n"); scanf("%s",tel);for(i=0;i<m;i++)if(strcmp(tel,employee[i].tel)==0) {printf("\n已找到此人,其记录为:\n");printf(" 职工号姓名性别年龄学历工资住址电话\n");printf(" %d %s %c %d %s %d %s %s\n",employee[i].num, employee[i].name,employee[i].sex,employee[i].age,employee[i].xueli,employee[i].wage,employee[i].addr,employ ee[i].tel);break;}if(i==m)printf("\n对不起,查无此人\n");printf("\n");printf("不在查询请按0;返回查询函数请按1,继续查询电话号码请按2\n");scanf("%d",&t);switch(t){case 0:main();break;case 1:search();break;case 2:break;default :break;}}void modify() //修改函数{int t,flag;do{printf("\n按职工号修改请按1; 按姓名修改请按2; 进入主函数请按3\n");scanf("%d",&t);if(t>=1&&t<=3){flag=1;break;}else{flag=0;printf("您输入有误,请重新选择!");}}while(flag==0);while(flag==1){switch(t){case 1:printf("按职工号修改\n");modify_num();break;case 2:printf("按姓名修改\n");modify_name();break;case 3:main();break;default:break;}}}void modify_num() //按员工号修改函数{int num;char name[20];char sex;int age;char xueli[30];int wage;char addr[30];char tel[20];int b,c,i,n,t,flag;int m=load();printf("\n 原来的职工信息:\n");display(); //调用浏览函数printf("\n");printf("请输入要修改的职工的员工号:\n");scanf("%d",&num);for(flag=1,i=0;flag&&i<m;i++){if(num==employee[i].num)//比较两个字符串,{printf("\n已找到此人,原始记录为:\n");printf(" 职工号姓名性别年龄学历工资住址电话\n");printf(" %d %s %c %d %s %d %s %s\n",employee[i].num, employee[i].name,employee[i].sex,employee[i].age,employee[i].xueli,employee[i].wage,employee[i].addr,employ ee[i].tel);printf("\n确实要修改此人信息请按1 ; 不修改请按0\n");scanf("%d",&n);if(n==1){printf("\n需要进行修改的选项\n 1.职工号2.姓名3.性别4.年龄5.学历6.工资7.住址8.电话\n");printf("请输入你想修改的那一项序号:\n");scanf("%d",&c);if(c>8||c<1)printf("\n选择错误,请重新选择!\n");}flag=0;}}if(flag==1)printf("\n对不起,查无此人!\n");do{switch(c) //因为当找到第i个职工时,for语句后i自加了1,所以下面的应该把改后的信息赋值给第i-1个人{case 1:printf("职工号改为: ");scanf("%d",&num);employee[i-1].num=num;break;case 2:printf("姓名改为: ");scanf("%s",name);strcpy(employee[i-1].name,name);break;case 3:printf("性别改为: ");getchar();scanf("%c",&sex);employee[i-1].sex=sex;break;case 4:printf("年龄改为: ");scanf("%d",&age);employee[i-1].age=age;break;case 5:printf("学历改为: ");scanf("%s",xueli);strcpy(employee[i-1].xueli,xueli);break;case 6:printf("工资改为: ");scanf("%d",&wage);employee[i-1].wage=wage;break;case 7:printf("住址改为: ");scanf("%s",addr);strcpy(employee[i-1].addr,addr);break;case 8:printf("电话改为: ");scanf("%s",tel);strcpy(employee[i-1].tel,tel);break;}printf("\n");printf("\n是否确定所修改的信息?\n 是请按1 ; 不,重新修改请按2: \n"); scanf("%d",&b);}while(b==2);printf("\n浏览修改后的所有职工信息:\n");printf("\n");save(m);display();printf("\n 不在修改请按0, 返回修改函数请按1, 继续修改职工号码请按2\n"); scanf("%d",&t);switch(t){case 0:main();break;case 1:modify();break;case 2:break;default :break;}}void modify_name() //按姓名修改函数{int num;char name[20];char sex;int age;char xueli[30];int wage;char addr[30];char tel[20];int b,c,i,n,t,flag;int m=load();printf("\n 原来的职工信息:\n");display(); //调用浏览函数printf("\n");printf("请输入要修改的职工的姓名:\n");scanf("%s",name);for(flag=1,i=0;flag&&i<m;i++){if(strcmp(employee[i].name,name)==0)//比较两个字符串,{printf("\n已找到此人,原始记录为:\n");printf(" 职工号姓名性别年龄学历工资住址电话\n");printf(" %d %s %c %d %s %d %s %s\n",employee[i].num, employee[i].name,employee[i].sex,employee[i].age,employee[i].xueli,employee[i].wage,employee[i].addr,employ ee[i].tel);printf("\n确实要修改此人信息请按1 ; 不修改请按0\n");scanf("%d",&n);if(n==1){printf("\n需要进行修改的选项\n 1.职工号2.姓名3.性别4.年龄5.学历6.工资7.住址8.电话\n");printf("请输入你想修改的那一项序号:\n");scanf("%d",&c);if(c>8||c<1)printf("\n选择错误,请重新选择!\n");}flag=0;}}if(flag==1)printf("\n对不起,查无此人!\n");do{switch(c) //因为当找到第i个职工时,for语句后i自加了1,所以下面的应该把改后的信息赋值给第i-1个人{case 1:printf("职工号改为: ");scanf("%d",&num);employee[i-1].num=num;break;case 2:printf("姓名改为: ");scanf("%s",name);strcpy(employee[i-1].name,name);break;case 3:printf("性别改为: ");getchar();scanf("%c",&sex);employee[i-1].sex=sex;break;case 4:printf("年龄改为: ");scanf("%d",&age);employee[i-1].age=age;break;case 5:printf("学历改为: ");scanf("%s",xueli);strcpy(employee[i-1].xueli,xueli);break;case 6:printf("工资改为: ");scanf("%d",&wage);employee[i-1].wage=wage;break;case 7:printf("住址改为: ");scanf("%s",addr);strcpy(employee[i-1].addr,addr);case 8:printf("电话改为: ");scanf("%s",tel);strcpy(employee[i-1].tel,tel);break;}printf("\n");printf("\n是否确定所修改的信息?\n 是请按1 ; 不,重新修改请按2: \n"); scanf("%d",&b);}while(b==2);printf("\n浏览修改后的所有职工信息:\n");printf("\n");save(m);display();printf("\n 不在修改请按0, 返回修改函数请按1, 继续修改职工姓名请按2\n"); scanf("%d",&t);switch(t){case 0:main();break;case 1:modify();break;case 2:break;} }。
员工信息管理系统c语言

员工信息管理系统c语言员工信息管理系统是一个使用C语言编写的程序,旨在帮助企业或组织管理员工的相关信息。
这个系统可以有效地记录和管理员工的基本信息、职位、工资、考勤等。
它能够提供一种便捷、高效的方式来管理员工信息,提高工作效率和准确性。
以下是一个简单的员工信息管理系统的参考代码,以展示一些基本功能:```c#include <stdio.h>#include <stdlib.h>#include <string.h>#define MAX_EMPLOYEES 100struct Employee {char name[50];int id;char position[50];float salary;};struct Employee employees[MAX_EMPLOYEES];int numEmployees = 0;void addEmployee() {if (numEmployees >= MAX_EMPLOYEES) {printf("无法添加新员工,员工数量已达上限。
\n");return;}struct Employee newEmployee;printf("请输入员工姓名: ");scanf("%s", );printf("请输入员工编号: ");scanf("%d", &newEmployee.id);printf("请输入员工职位: ");scanf("%s", newEmployee.position);printf("请输入员工工资: ");scanf("%f", &newEmployee.salary);employees[numEmployees++] = newEmployee;printf("员工添加成功!\n");}void searchEmployee() {char name[50];printf("请输入要查询的员工姓名: ");scanf("%s", name);int found = 0;for (int i = 0; i < numEmployees; i++) {if (strcmp(employees[i].name, name) == 0) {printf("员工姓名: %s\n", employees[i].name); printf("员工编号: %d\n", employees[i].id);printf("员工职位: %s\n", employees[i].position); printf("员工工资: %.2f\n", employees[i].salary);found = 1;break;}}if (!found) {printf("未找到该员工!\n");}}void printAllEmployees() {if (numEmployees == 0) {printf("没有员工信息可打印。
职工信息管理系统C语言课程设计+源代码

课程设计报告(本科)课程:高级语言课程设计学号:姓名:班级:教师:时间:计算机科学与技术系附录:#include<> del入职工信息");printf(" 2.浏览职工信息\n");printf(" 3.查询职工信息");printf(" 4.删除职工信息\n");printf(" 5.添加职工信息");printf(" 6.修改职工信息\n");printf(" 7.退出\n");printf(" ********************谢谢使用******************\n");printf("\n");printf("\n");}void input() um);printf("请输入姓名: ");scanf("%s",employee[i].name);getchar();printf("请输入性别(f--女 m--男): ");scanf("%c",&employee[i].sex);printf("请输入年龄: ");scanf("%d",&employee[i].age);printf("请输入学历: ");scanf("%s",employee[i].xueli);printf("请输入工资: ");scanf("%d",&employee[i].wage);printf("请输入住址: ");scanf("%s",employee[i].addr);printf("请输入电话: ");scanf("%s",employee[i].tel);printf("\n");}printf("\n创建完毕!\n");save(m);}void save(int m) um,employee[i].name,employee[i].sex,employee[i].age,employee[i].xueli,employee[i].wage,employee[i].addr,employee[i ].tel);}void del() ame,name)==0){printf("\n已找到此人,原始记录为:\n");printf(" 职工号姓名性别年龄学历工资住址电话 \n");printf(" %d %s %c %d %s %d %s %s\n",employee[i].num,employee [i].name,employee[i].sex,employee[i].age,employee[i].xueli,employee[i].wage,employee[i].addr,employee[i ].tel);printf("\n确实要删除此人信息请按1,不删除请按0\n");scanf("%d",&n);if(n==1){for(j=i;j<m-1;j++){strcpy(employee[j].name,employee[j+1].name);um=employee[j+1].num;employee[j].sex=employee[j+1].sex;employee[j].age=employee[j+1].age;strcpy(employee[j].xueli,employee[j+1].xueli);employee[j].wage=employee[j+1].wage;strcpy(employee[j].addr,employee[j+1].addr);strcpy(employee[j].tel,employee[j+1].tel);delum==num){printf("\n已找到此人,原始记录为:\n");printf(" 职工号姓名性别年龄学历工资住址电话 \n");printf(" %d %s %c %d %s %d %s %s\n",employee[i].num,employee [i].name,employee[i].sex,employee[i].age,employee[i].xueli,employee[i].wage,employee[i].addr,employee[i ].tel);printf("\n确实要删除此人信息请按1,不删除请按0\n");scanf("%d",&n);if(n==1){for(j=i;j<m-1;j++){strcpy(employee[j].name,employee[j+1].name);um=employee[j+1].num;employee[j].sex=employee[j+1].sex;employee[j].age=employee[j+1].age;strcpy(employee[j].xueli,employee[j+1].xueli);employee[j].wage=employee[j+1].wage;strcpy(employee[j].addr,employee[j+1].addr);strcpy(employee[j].tel,employee[j+1].tel);delum);printf("\n");printf("请输入姓名: ");scanf("%s",employee[i].name);getchar();printf("请输入性别(f--女 m--男): ");scanf("%c",&employee[i].sex);printf("请输入年龄: ");scanf("%d",&employee[i].age);printf("请输入学历: ");scanf("%s",employee[i].xueli);printf("请输入工资: ");scanf("%d",&employee[i].wage);printf("请输入住址: ");scanf("%s",employee[i].addr);printf("请输入电话: ");scanf("%s",employee[i].tel);printf("\n");count=count+1;printf("已增加的人数:\n");printf("%d\n",count);}printf("\n添加完毕!\n");m=m+count;printf("\n浏览增加后的所有职工信息:\n");printf("\n");save(m);display();fclose(fp);}void search()um){printf("\n已找到此人,其记录为:\n");printf(" 职工号姓名性别年龄学历工资住址电话\n");printf(" %d %s %c %d %s %d %s %s\n",employee[i].num,employee [i].name,employee[i].sex,employee[i].age,employee[i].xueli,employee[i].wage,employee[i].addr,employee[i ].tel);break;}if(i==m)printf("\n对不起,查无此人\n");printf("\n");printf("不在查询请按0,返回查询函数请按1,继续查询职工号请按2\n");scanf("%d",&t);switch(t){case 0:main();break;case 1:search();break;case 2: break;default:break;}}void search_xueli() ueli,xueli)==0){printf("\n已找到,其记录为:\n");printf(" 职工号姓名性别年龄学历工资住址电话\n");printf(" %d %s %c %d %s %d %s %s\n",employee[i].num,employee [i].name,employee[i].sex,employee[i].age,employee[i].xueli,employee[i].wage,employee[i].addr,employee[i ].tel);n++;}if(i==m&&n==m)printf("\n对不起,查无此人\n");printf("\n");printf("不在查询请按0,返回查询函数请按1,继续查询学历请按2\n");scanf("%d",&t);switch(t){case 0:main();break;case 1:search();break;case 2:break;default :break;}}void search_tel() el)==0){printf("\n已找到此人,其记录为:\n");printf(" 职工号姓名性别年龄学历工资住址电话\n");printf(" %d %s %c %d %s %d %s %s\n",employee[i].num,employee [i].name,employee[i].sex,employee[i].age,employee[i].xueli,employee[i].wage,employee[i].addr,employee[i ].tel);break;}if(i==m)printf("\n对不起,查无此人\n");printf("\n");printf("不在查询请按0;返回查询函数请按1,继续查询电话号码请按2\n");scanf("%d",&t);switch(t){case 0:main();break;case 1:search();break;case 2:break;default :break;}}void modify() um)um,employee[i].name,employee[i].sex,employee[i].age,employee[i].xueli,employee[i].wage,employee[i].addr,employee[i ].tel);printf("\n确实要修改此人信息请按1 ; 不修改请按0\n");scanf("%d",&n);if(n==1){printf("\n需要进行修改的选项\n 1.职工号 2.姓名 3.性别 4.年龄 5.学历 6.工资 7.住址 8.电话\n");printf("请输入你想修改的那一项序号:\n");scanf("%d",&c);if(c>8||c<1)printf("\n选择错误,请重新选择!\n");}flag=0;}}if(flag==1)printf("\n对不起,查无此人!\n");do{switch(c) um=num;break;case 2:printf("姓名改为: ");scanf("%s",name);strcpy(employee[i-1].name,name);break;case 3:printf("性别改为: ");getchar();scanf("%c",&sex);employee[i-1].sex=sex;break;case 4:printf("年龄改为: ");scanf("%d",&age);employee[i-1].age=age;break;case 5:printf("学历改为: ");scanf("%s",xueli);strcpy(employee[i-1].xueli,xueli);break;case 6:printf("工资改为: ");scanf("%d",&wage);employee[i-1].wage=wage;break;case 7:printf("住址改为: ");scanf("%s",addr);strcpy(employee[i-1].addr,addr);break;case 8:printf("电话改为: ");scanf("%s",tel);strcpy(employee[i-1].tel,tel);break;}printf("\n");printf("\n是否确定所修改的信息\n 是请按1 ; 不,重新修改请按2: \n"); scanf("%d",&b);}while(b==2);printf("\n浏览修改后的所有职工信息:\n");printf("\n");save(m);display();printf("\n 不在修改请按0, 返回修改函数请按1, 继续修改职工号码请按2\n"); scanf("%d",&t);switch(t){case 0:main();break;case 1:modify();break;case 2:break;default :break;}}void modify_name() ame,name)==0)um,employee[i].name,employee[i].sex,employee[i].age,employee[i].xueli,employee[i].wage,employee[i].addr,employee[i ].tel);printf("\n确实要修改此人信息请按1 ; 不修改请按0\n");scanf("%d",&n);if(n==1){printf("\n需要进行修改的选项\n 1.职工号 2.姓名 3.性别 4.年龄 5.学历 6.工资 7.住址 8.电话\n");printf("请输入你想修改的那一项序号:\n");scanf("%d",&c);if(c>8||c<1)printf("\n选择错误,请重新选择!\n");}flag=0;}}if(flag==1)printf("\n对不起,查无此人!\n");do{switch(c) um=num;break;case 2:printf("姓名改为: ");scanf("%s",name);strcpy(employee[i-1].name,name);break;case 3:printf("性别改为: ");getchar();scanf("%c",&sex);employee[i-1].sex=sex;break;case 4:printf("年龄改为: ");scanf("%d",&age);employee[i-1].age=age;break;case 5:printf("学历改为: ");scanf("%s",xueli);strcpy(employee[i-1].xueli,xueli);break;case 6:printf("工资改为: ");scanf("%d",&wage);employee[i-1].wage=wage;break;case 7:printf("住址改为: ");scanf("%s",addr);strcpy(employee[i-1].addr,addr);break;case 8:printf("电话改为: ");scanf("%s",tel);strcpy(employee[i-1].tel,tel);break;}printf("\n");printf("\n是否确定所修改的信息\n 是请按1 ; 不,重新修改请按2: \n");scanf("%d",&b);}while(b==2);printf("\n浏览修改后的所有职工信息:\n");printf("\n");save(m);display();printf("\n 不在修改请按0, 返回修改函数请按1, 继续修改职工姓名请按2\n"); scanf("%d",&t);switch(t){case 0:main();break;case 1:modify();break;case 2:break;default :break;}}。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
#include <stdio.h>#include <windows.h>#include <string.h>#define N 100struct employee{int num;char name[20];char sex;int age;char xueli[30];int wage;char addr[30];char tel[20];}em[100]; /*定义一个结构体*/void menu();void input();void save(int);void display();void del();void add();void search();void search_num();void search_xueli();void search_tel();void modify(); /*定义各函数*/void main(){menu();int n,flag;char a;do{ printf("请选择你需要操作的步骤(1--7):\n"); scanf("%d",&n);if(n>=1 && n<=7){flag=1;break;}else{flag=0;printf("您输入有误,请重新选择!");}}while(flag==0);while(flag==1){switch(n){case 1:printf(" ◆◆◆输入职工信息◆◆◆\n");printf("\n");input();break;case 2:printf(" ◆◆◆浏览职工信息◆◆◆\n");printf("\n");display();break;case 3:printf(" ◆◆◆按职工号查询职工信息◆◆◆\n");printf("\n");search();break;case 4:printf(" ◆◆◆删除职工信息◆◆◆\n");printf("\n");del();break;case 5:printf(" ◆◆◆添加职工信息◆◆◆\n");printf("\n");add();break;case 6:printf(" ◆◆◆修改职工信息◆◆◆\n");printf("\n");modify();break;case 7:exit(0);break;default :break;}getchar();printf("\n");printf("是否继续进行(y or n):\n");scanf("%c",&a);if(a=='y'){flag=1;system("cls"); /*清屏*/menu(); /*调用菜单函数*/printf("请再次选择你需要操作的步骤(1--7):\n");scanf("%d",&n);printf("\n");}elseexit(0);}}void menu() /*菜单函数*/{printf(" ************欢迎进入职工信息管理系统**********\n");printf(" 1.录入职工信息");printf(" 2.浏览职工信息\n");printf(" 3.查询职工信息");printf(" 4.删除职工信息\n");printf(" 5.添加职工信息");printf(" 6.修改职工信息\n");printf(" 7.退出\n");printf(" ********************使用******************\n"); printf("\n");printf("\n");}void input() /*录入函数*/{ int i,m;printf("请输入需要创建信息的职工人数(1--100):\n");scanf("%d",&m);for (i=0;i<m;i++){printf("请输入职工号: ");scanf("%d",&em[i].num);printf("请输入: ");scanf("%s",em[i].name);getchar();printf("请输入性别(f--女 m--男): ");scanf("%c",&em[i].sex);printf("请输入年龄: ");scanf("%d",&em[i].age);printf("请输入学历: ");scanf("%s",em[i].xueli);printf("请输入工资: ");scanf("%d",&em[i].wage);printf("请输入住址: ");scanf("%s",em[i].addr);printf("请输入: ");scanf("%s",em[i].tel);printf("\n");}printf("\n创建完毕!\n");save(m);}void save(int m) /*保存文件函数*/{int i;FILE*fp;if ((fp=fopen("employee_list","wb"))==NULL){printf ("cannot open file\n");exit(0);}for (i=0;i<m;i++) /*将存中职工的信息输出到磁盘文件中去*/if (fwrite(&em[i],sizeof(struct employee),1,fp)!=1)printf("file write error\n");fclose(fp);}int load() /*导入函数*/{FILE*fp;int i=0;if((fp=fopen("employee_list","rb"))==NULL){printf ("cannot open file\n");exit(0);}else{do{fread(&em[i],sizeof(struct employee),1,fp);i++;}while(feof(fp)==0);}fclose(fp);return(i-1);}void display() /*浏览函数*/{int i;int m=load();printf(" 职工号性别年龄 \n");for(i=0;i<m;i++) /*m为输入部分的职工人数*/printf("\n %-8d%-6s%-6c%-6d\n",em[i].num,em[i].name,em[i].sex,em[i].age); printf("\n 学历工资住址 \n");for(i=0;i<m;i++) /*m为输入部分的职工人数*/printf("\n %-6s%-6d%-6s%-6s\n",em[i].xueli,em[i].wage,em[i].addr,em[i].tel); }void del() /*删除函数*/{int m=load();int i,j,n,t,flag;char name[20];printf("\n 原来的职工信息:\n");display();printf("\n");printf("请输入要删除的职工的:\n");scanf("%s",name);for(flag=1,i=0;flag&&i<m;i++){if(strcmp(em[i].name,name)==0){printf("\n已找到此人,原始记录为:\n");printf(" 职工号性别年龄 \n");printf("\n %-8d%-6s%-6c%-6d\n",em[i].num,em[i].name,em[i].sex,em[i].age); printf("\n 学历工资住址 \n");printf("\n %-6s%-6d%-6s%-6s\n",em[i].xueli,em[i].wage,em[i].addr,em[i].tel);printf("\n确实要删除此人信息请按1,不删除请按0\n");scanf("%d",&n);if(n==1){for(j=i;j<m-1;j++){strcpy(em[j].name,em[j+1].name);em[j].num=em[j+1].num;em[j].sex=em[j+1].sex;em[j].age=em[j+1].age;strcpy(em[j].xueli,em[j+1].xueli);em[j].wage=em[j+1].wage;strcpy(em[j].addr,em[j+1].addr);strcpy(em[j].tel,em[j+1].tel);}flag=0;}}}if(!flag)m=m-1;elseprintf("\n对不起,查无此人!\n");printf("\n 浏览删除后的所有职工信息:\n");save(m); /*调用保存函数*/display(); /*调用浏览函数*/printf("\n继续删除请按1,不再删除请按0\n");scanf("%d",&t);switch(t){case 1:del();break;case 0:break;default :break;}}void add()/*添加函数*/{FILE*fp;int n;int count=0;int i;int m=load();printf("\n 原来的职工信息:\n");display();printf("\n");fp=fopen("emploee_list","a");printf("请输入想增加的职工数:\n");scanf("%d",&n);for (i=m;i<(m+n);i++){printf("\n 请输入新增加职工的信息:\n");printf("请输入职工号: ");scanf("%d",&em[i].num);printf("\n");printf("请输入: ");scanf("%s",em[i].name);getchar();printf("请输入性别(f--女 m--男): "); scanf("%c",&em[i].sex);printf("请输入年龄: ");scanf("%d",&em[i].age);printf("请输入学历: ");scanf("%s",em[i].xueli);printf("请输入工资: ");scanf("%d",&em[i].wage);printf("请输入住址: ");scanf("%s",em[i].addr);printf("请输入: ");scanf("%s",em[i].tel);printf("\n");count=count+1;printf("已增加的人数:\n");printf("%d\n",count);}printf("\n添加完毕!\n");m=m+count;printf("\n浏览增加后的所有职工信息:\n");printf("\n");save(m);display();fclose(fp);}void search()/*查询函数*/{int t,flag;do{ printf("\n按职工号查询请按1; 按学历查询请按2; 按查询请按3;进入主函数请按4\n");scanf("%d",&t);if(t>=1&&t<=4){flag=1;break;}else{flag=0;printf("您输入有误,请重新选择!");}}while(flag==0);while(flag==1){switch(t){ case 1:printf("按职工号查询\n");search_num();break;case 2:printf("按学历查询\n");search_xueli();break;case 3:printf("按查询\n");search_tel();break;case 4:main();break;default:break;}}}void search_num(){int num;int i,t;int m=load();printf("请输入要查找的职工号:\n");scanf("%d",&num);for(i=0;i<m;i++)if(num==em[i].num){ printf("\n已找到此人,其记录为:\n");printf(" 职工号性别年龄 \n");printf("\n %-8d%-6s%-6c%-6d\n",em[i].num,em[i].name,em[i].sex,em[i].age); printf("\n 学历工资住址 \n");printf("\n %-6s%-6d%-6s%-6s\n",em[i].xueli,em[i].wage,em[i].addr,em[i].tel);break;}if(i==m)printf("\n对不起,查无此人\n");printf("\n");printf("返回查询函数请按1,继续查询职工号请按2\n");scanf("%d",&t);switch(t){ case 1:search();break;case 2: break;default:break;}}void search_xueli(){ char xueli[30];int i,t;int m=load();printf("请输入要查找的学历:\n");scanf("%s",xueli);for(i=0;i<m;i++)if(strcmp(em[i].xueli,xueli)==0){printf ("\n已找到,其记录为:\n");printf(" 职工号性别年龄 \n");printf("\n %-8d%-6s%-6c%-6d\n",em[i].num,em[i].name,em[i].sex,em[i].age); printf("\n 学历工资住址 \n");printf("\n %-6s%-6d%-6s%-6s\n",em[i].xueli,em[i].wage,em[i].addr,em[i].tel); }if(i==m)printf("\n对不起,查无此人\n");printf("\n");printf("返回查询函数请按1,继续查询学历请按2\n");scanf("%d",&t);switch(t){case 1:search();break;case 2:break;default :break;}}void search_tel(){ char tel[20];int i, t;int m=load();printf("请输入要查找的:\n");scanf("%s",tel);for(i=0;i<m;i++)if(strcmp(tel,em[i].tel)==0){printf("\n已找到此人,其记录为:\n");printf(" 职工号性别年龄 \n");printf("\n %-8d%-6s%-6c%-6d\n",em[i].num,em[i].name,em[i].sex,em[i].age); printf("\n 学历工资住址 \n");printf("\n %-6s%-6d%-6s%-6s\n",em[i].xueli,em[i].wage,em[i].addr,em[i].tel);break;}if(i==m)printf("\n对不起,查无此人\n");printf("\n");printf("返回查询函数请按1,继续查询请按2\n");scanf("%d",&t);switch(t){case 1:search();break;case 2:break;default :break;}}void modify() /*修改函数*/{int num;char name[20];char sex;int age;char xueli[30];int wage;char addr[30];char tel[20];int b,c,i,n,t,flag;int m=load();printf("\n 原来的职工信息:\n");display();printf("\n");printf("请输入要修改的职工的:\n");scanf("%s",name);for(flag=1,i=0;flag&&i<m;i++){if(strcmp(em[i].name,name)==0){printf("\n已找到此人,原始记录为:\n");printf(" 职工号性别年龄 \n");printf("\n %-8d%-6s%-6c%-6d\n",em[i].num,em[i].name,em[i].sex,em[i].age); printf("\n 学历工资住址 \n");printf("\n %-6s%-6d%-6s%-6s\n",em[i].xueli,em[i].wage,em[i].addr,em[i].tel);printf("\n确实要修改此人信息请按1 ; 不修改请按0\n");scanf("%d",&n);if(n==1){printf("\n需要进行修改的选项\n 1.职工号 2. 3.性别 4.年龄 5.学历6.工资 7.住址 8.\n");printf("请输入你想修改的那一项序号:\n");scanf("%d",&c);if(c>8||c<1)printf("\n选择错误,请重新选择!\n");}flag=0;}}if(flag==1)printf("\n对不起,查无此人!\n");do{switch(c) /*因为当找到第i个职工时,for语句后i自加了1,所以下面的应该把改后的信息赋值给第i-1个人*/{case 1:printf("职工号改为: ");scanf("%d",&num);em[i-1].num=num;break;case 2:printf("改为: ");scanf("%s",name);strcpy(em[i-1].name,name);break;case 3:printf("性别改为: ");getchar();scanf("%c",&sex);em[i-1].sex=sex;break;case 4:printf("年龄改为: ");scanf("%d",&age);em[i-1].age=age;break;case 5:printf("学历改为: ");scanf("%s",xueli);strcpy(em[i-1].xueli,xueli);break;case 6:printf("工资改为: ");scanf("%d",wage);break;case 7:printf("住址改为: ");scanf("%s",addr);strcpy(em[i-1].addr,addr);break;case 8:printf("改为: ");scanf("%s",tel);strcpy(em[i-1].tel,tel);break;}printf("\n");printf("\n是否确定所修改的信息?\n 是请按1 ; 不,重新修改请按2: \n"); scanf("%d",&b);}while(b==2);printf("\n浏览修改后的所有职工信息:\n");printf("\n");save(m);display();printf("\n继续修改请按1,不再修改请按0\n");scanf("%d",&t);switch(t){case 1:modify();break;case 0:break;default :break; }}。