C语言课程设计 职工信息管理系统 结构体数组实现程序源代码
- 格式:doc
- 大小:17.50 KB
- 文档页数:4
C语言课程设计报告职工信息管理系统设计班级:0346502姓名:杨鸣学号:20081003456指导老师:谷老师职工信息管理系统一、题目要求职工信息包括职工号、姓名、性别、年龄、学历、工资、住址、电话等(职工号不重复)。
试设计一职工信息管理系统,使之能提供以下功能:(1)系统以菜单的方式工作。
(2)职工信息录入功能(职工信息用文件保存)。
(3)职工浏览功能。
(4)职工信息查询功能,查询方式可按学历查询或者工号查询。
(5)职工信息的删除、修改功能(可选项)。
二、具体要求1、输入功能:职工信息录入(职工信息用文件保存),可以一次完成若干条记录的输入。
2、浏览功能:完成对全部职工信息的显示。
3、查找功能:①完成按职工的职工号查询职工的相关信息,并显示。
②完成按职工的学历查询职工的相关信息,并显示。
4、删除功能:通过输入职工的姓名完成对该名职工的信息进行删除。
5、修改功能:通过输入职工的姓名完成对该名职工的信息进行修改。
6、退出职工信息管理系统。
三、解决方案1、首先进行需求分析,搞清楚系统功能和任务;2、然后在总体设计中确定模块结构、划分功能模块,将软件功能需求分配给所划分的最单元模块。
确定模块间的联系,确定数据结构、文件结构、数据库模式,确定测试方法与策略;3、在详细设计中,为每个模块确定采用的算法,选择适当的流程图来描述模块的详细过程。
确定每一模块采用的数据结构和模块接口的细节,包括对系统外部的接口和用户界面,对系统内部其他模块的接口;4、根据分析编写C语言代码。
四、写课程设计总结课程设计报告要求总结报告包括需求分析、总体设计、详细设计、编码(详细写出编程步骤)、测试的步骤和内容等。
总设计方案一.系统的总体流程图图1.系统的总体流程图菜单开始根据菜单输入n 的值选择程序保存结束是否继续进行NY5 修改职工信息 2 浏览职工信息 3 查询职工信息 4 删除职工信息6 退出1 录入职工信息二. 为了方便使用结构此系统结构均为全局类型定义struct employee //定义一个职工信息的结构体//{int num;char name[10];char sex;int age;char xueli[30];int wage;char addr[30];char tel[20];}em[100];三.各模块的功能及实现步骤1.菜单模块:显示职工管理系统的主菜单,供用户选择所需的功能,通过自己定义的void menu()函数来实现。
//C语言课程设计职工信息管理系统—结构体数组实现#include <stdio.h>#include <stdlib.h>#include <string.h>struct employee{char num[10];char name[15];char sex[5];char bm[20];char zc[20];int gz;};int read_file(struct employee em[]);void menu();void write_file(struct employee em[]);void add();void select(); //查看职工所有信息void zc_query(); //按职称查询void num_del(); //按工号删除void tongji(); //统计void sort(); //排序void num_modify(); //按工号修改职工信息void save(); //保存信息void disp(); //显示职工信息void fh(); //返回主菜单struct employee em[300]; //这个数组用来保存所有的职工信息和文件里面的一致int Number=0; //记录总的职工人数也就是数组/文件里面的职工人数void menu(){printf("\t***********************************************************************\n");printf("\t* *\n");printf("\t* 职工信息管理系统_结构体数组实现*\n");printf("\t* *\n");printf("\t* [1] 增加职工信息 [2] 查看职工信息 *\n");printf("\t* [3] 查找职工信息 [4] 删除职工信息 *\n");printf("\t* [5] 统计 [6] 职工工资排列 *\n");printf("\t* [7] 修改职工信息 [8] 保存职工信息 *\n");printf("\t* [9] 显示职工信息 [0] 退出系统 *\n");printf("\t* *\n");printf("\t***********************************************************************\n");}void main(){int choose=0;FILE *fp=NULL;char yesorno;if((fp=fopen("employee1.txt","rb+"))==NULL){printf("\n=========>提示:文件不存在,是否要创建一个?(y/n)\n");scanf("%c",&yesorno);if(yesorno=='y'||yesorno=='Y'){//这里仅为了建立文件fp=fopen("employee1.txt","wb+");fclose(fp); //关闭fp所指的文件,释放文件缓冲区}elseexit(0);}else{Number=read_file(em); //要是文件已经有数据将数据初始化到数组中}system("cls");while(1){menu();printf("\t\t====>请选择:");scanf("%d",&choose);system("cls");switch(choose){case 0:exit(0); //退出break;case 1:add();fh();//增加职工信息 break;case 2:select();fh();//查看职工信息 break;case 3:zc_query();fh();// 查找break;case 4:num_del();fh();//删除break;case 5:tongji();fh();//统计break;case 6:sort();fh();//排序break;case 7:num_modify();fh();//修改后返回 break;case 8:save();fh();//保存break;case 9:disp();fh();break;//显示default:break;}fflush(stdin);getchar();system("cls");}}void save(){printf("\t=====程序在运行时已自动保存.....\n");}void fh(){printf("\t===>按Enter键返回主菜单\n");}void num_modify() //修改职工信息{FILE *fp=NULL;char gh[60];int i=0;int changeIndex=0; //changeIndex 改变标记int index=0;printf("请输入要修改的职工工号:");scanf("%s",gh);for (i=0;i<Number;i++){if (strcmp(gh,em[i].num)==0) //比较输入工号和数组中已有工号{changeIndex=i; //保存要修改的人的下标break;}}printf("\t工号\t姓名\t性别\t部门\t职称\t工资\n");printf("\t%s\t%s\t%s\t%s\t%s\t%d\n\n",em[changeIndex].num,em[chan geIndex].name,em[changeIndex].sex,em[changeIndex].bm,em[changeIndex]. zc,em[changeIndex].gz);printf("请重新输入该职工信息");printf("工号:");scanf("%s",em[changeIndex].num);printf("姓名:");scanf("%s",em[changeIndex].name);printf("性别:");scanf("%s",em[changeIndex].sex);printf("部门:");scanf("%d",em[changeIndex].bm);printf("职称:");scanf("%s",em[changeIndex].zc);printf("工资:");scanf("%d",&em[changeIndex].gz);//信息修改后重新更新文件里面的数据以保持数据一致性fp=fopen("employee1.txt","wb+");for (i=0;i<Number;i++){fwrite(&em[i],sizeof(struct employee),1,fp); //把ptr所指向n*size个字节输入到fp所指向的文件中}fclose(fp);printf("\t=======>修改成功\n");}void disp() //输出所有职工信息{int i=0;for (i=0;i<Number;i++){printf("\t%s\t%s\t%s\t%s\t%s\t%d\n\n",em[i].num,em[i].name,em[i]. sex,em[i].bm,em[i].zc,em[i].gz);}}void sort()//排序{struct employee t;int wantNUmber=0;int i=0;int j=0;int k=0;for(i=0;i<Number-1;i++){k=i;for(j=i+1;j<Number;j++){if(em[j].gz>em[k].gz)k=j;}if(k!=i){t=em[i];em[i]=em[k];em[k]=t;}}printf("你想输出前几名职工的信息:");scanf("%d",&wantNUmber);if (wantNUmber>Number){wantNUmber=Number;}printf("\t工号\t姓名\t性别\t部门\t职称\t工资\n");for(i=0;i<wantNUmber;i++){printf("\t%s\t%s\t%s\t%s\t%s\t%d\n\n",em[i].num,em[i].name,em[i].sex, em[i].bm,em[i].zc,em[i].gz);}}void tongji()//统计{int i,m,k,max,min;double sum=0.0;for(i=0;i<Number;i++){sum=sum+em[i].gz;}printf("全体职工的总工资为:%f\n",sum);printf("平均工资为:%f\n",sum/Number);i=0;m=0;max=0;max=em[m].gz;for(i=1;i<Number;i++){if (em[i].gz>max)m=i;max=em[m].gz;}printf("最高工资为:%d\n",max);printf("\t%s\t%s\t%s\t%s\t%s\t%d\n\n",em[m].num,em[m].name,em[m]. sex,em[m].bm,em[m].zc,em[m].gz);i=0;k=0;min=0;min=em[0].gz;for(i=1;i<Number;i++){if (em[i].gz<min)k=i;min=em[k].gz;}printf("最低工资:%d\n",min);printf("\t%s\t%s\t%s\t%s\t%s\t%d\n\n",em[k].num,em[k].name,em[k]. sex,em[k].bm,em[k].zc,em[k].gz);}void num_del()//按工号删除FILE *fp=NULL;char gh[60];int i=0;int j=0;printf("请输入要删除的职工工号:");scanf("%d",gh);for(i=0;i<Number;i++){if (strcmp(gh,em[i].num)==0) //如果查找到就删除{for (j=i;j<Number-1;j++){em[j]=em[j+1];}Number--;}}//将剩余数据写入文件重新一写的方式打开文件把以前的数据擦除了fp=fopen("employee1.dat","wb");for (i=0;i<Number;i++){fwrite(&em[i],sizeof(struct employee),1,fp);}fclose(fp);printf("删除成功;\n");}void zc_query()//按职称查找{char zc[20];int i=0;printf("请输入要查找职工职称:");scanf("%s",zc);system("cls");printf("\t工号\t姓名\t性别\t部门\t职称\t工资\n");for (i=0;i<Number;i++){if (strcmp(zc,em[i].zc)==0){printf("\t%s\t%s\t%s\t%s\t%s\t%d\n\n",em[i].num,em[i].name,em[i]. sex,em[i].bm,em[i].zc,em[i].gz);}}void select()//查看职工{int i=0;printf("以下是全部职工信息\n");printf("\t工号\t姓名\t性别\t部门\t职称\t工资\n");for(i=0;i<Number;i++){printf("\t%s\t%s\t%s\t%s\t%s\t%d\n\n",em[i].num,em[i].name,em[i]. sex,em[i].bm,em[i].zc,em[i].gz);}}void add()//增加职工{int numberTemp=0;int i=0;struct employee temp; //临时保存信息printf("请输入要增加职工信息的个数:");scanf("%d",&numberTemp);for(i=0;i<numberTemp;i++){printf("输入第%d个职工信息\n",i+1);printf("工号:");scanf("%s",temp.num);printf("姓名:");scanf("%s",);printf("性别:");scanf("%s",temp.sex);printf("部门:");scanf("%s",temp.bm);printf("职称:");scanf("%s",temp.zc);printf("工资:");scanf("%d",&temp.gz);em[Number++]=temp; //将刚添加的写入到数组write_file(&temp); //将刚添加的写入到文件}printf("添加成功\n");}void write_file(struct employee *em){FILE *fp=NULL;fp=fopen("employee1.txt","rb+");fwrite(em,sizeof(struct employee),1,fp);fclose(fp);}int read_file(struct employee em[]){FILE *fp=NULL;int i=0;fp=fopen("employee1.txt","rb");while(fread(&em[i],sizeof(struct employee),1,fp)) i++;fclose(fp);return i;}。
课程设计报告(本科)课程:高级语言课程设计学号:姓名:班级:教师:时间:计算机科学与技术系修改职工信息,添加职工信息,删除职工信息。
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语言课程设计报告职工信息管理系统设计班级:0346502姓名:杨鸣学号:20081003456指导老师:谷老师职工信息管理系统一、题目要求职工信息包括职工号、姓名、性别、年龄、学历、工资、住址、电话等(职工号不重复)。
试设计一职工信息管理系统,使之能提供以下功能:(1)系统以菜单的方式工作。
(2)职工信息录入功能(职工信息用文件保存)。
(3)职工浏览功能。
(4)职工信息查询功能,查询方式可按学历查询或者工号查询。
(5)职工信息的删除、修改功能(可选项)。
二、具体要求1、输入功能:职工信息录入(职工信息用文件保存),可以一次完成若干条记录的输入。
2、浏览功能:完成对全部职工信息的显示。
3、查找功能:①完成按职工的职工号查询职工的相关信息,并显示。
②完成按职工的学历查询职工的相关信息,并显示。
4、删除功能:通过输入职工的姓名完成对该名职工的信息进行删除。
5、修改功能:通过输入职工的姓名完成对该名职工的信息进行修改。
6、退出职工信息管理系统。
三、解决方案1、首先进行需求分析,搞清楚系统功能和任务;2、然后在总体设计中确定模块结构、划分功能模块,将软件功能需求分配给所划分的最单元模块。
确定模块间的联系,确定数据结构、文件结构、数据库模式,确定测试方法与策略;3、在详细设计中,为每个模块确定采用的算法,选择适当的流程图来描述模块的详细过程。
确定每一模块采用的数据结构和模块接口的细节,包括对系统外部的接口和用户界面,对系统内部其他模块的接口;4、根据分析编写C语言代码。
四、写课程设计总结课程设计报告要求总结报告包括需求分析、总体设计、详细设计、编码(详细写出编程步骤)、测试的步骤和内容等。
总设计方案一.系统的总体流程图图1.系统的总体流程图菜单开始根据菜单输入n 的值选择程序保存结束是否继续进行NY5 修改职工信息 2 浏览职工信息 3 查询职工信息 4 删除职工信息6 退出1 录入职工信息二. 为了方便使用结构此系统结构均为全局类型定义struct employee //定义一个职工信息的结构体//{int num;char name[10];char sex;int age;char xueli[30];int wage;char addr[30];char tel[20];}em[100];三.各模块的功能及实现步骤1.菜单模块:显示职工管理系统的主菜单,供用户选择所需的功能,通过自己定义的void menu()函数来实现。
企业人事管理信息系统(两种方法)方法一#include "stdio.h"#include "stdlib.h"#include "string.h"struct date{int year,month,day;};typedef struct manrecord{int id;char name[20];char sex[10];char dept[20];struct date worktime;struct manrecord *next;}Elemtype;Elemtype *init(){Elemtype *h;h=(Elemtype *)malloc(sizeof(Elemtype));if (h==NULL){printf("内存空间不足!\n");return NULL;}else{h->next=NULL;return h;}}void term( Elemtype *h){Elemtype *p,*q;p=h;while (p!=NULL){q=p;p=p->next;free(q);}}Elemtype * isidExist(Elemtype *h,int id){Elemtype *p;p=h->next;while (p!=NULL)if (p->id==id)return p;elsep=p->next;return NULL;}void inputStaff(Elemtype *h){Elemtype *p;int id;while (1){printf("输入员工编号(小于等于0,则结束输入):");scanf("%d",&id);if (id<=0){printf("数据输入结束。
\n");break;}p=(Elemtype *)malloc(sizeof(Elemtype));if (p==NULL){printf("内存空间不足,输入结束。
课程设计任务书目录一、题目要求 (1)二、算法设计 (3)三、编程实现 (6)四、结果分析 (13)五、参考文献 (14)一、题目要求题目名称:设计字符串比较的函数和销售员业绩管理程序内容:1. 有两个字符串,各有10个字符,是编程完成如下功能:(1)分别找出两个字符串中最大的字符元素;(2)将两字符串对应位置元素逐个比较,并统计输出两个字符串对应元素大于、小于和等于的次数。
2. 销售员业绩管理程序主要用结构体数组实现,用结构体表示每项记录,包含数据为:编号、姓名、销售产品名、产品单价、销售数量、销售额。
其中销售额通过计算得到,计算公式:销售额=产品单价*销售数量设计各个函数,分别实现以下功能:(1)录入:完成业绩信息的输入,最好是追加方式;(2)删除:完成业绩信息的删除;(3)修改:允许对已经录入的数据重新进行编辑、修改;(4)显示:显示所有业绩信息(多者可分页显示) ,可以根据某种条件显示,如出销售额大小顺序;(5)查询:a) 输入姓名,显示该销售员的销售记录,并计算销售总额;c) 输入产品名,显示该产品的销售记录及总量;(6)统计: 统计所有销售员的销售总额,以图形显示比较结果,如下:Jack |**********Marry |*******************John |**************(7)退出程序。
设计菜单,通过选择菜单调用以上各函数。
要求:利用C语言编写上述程序,开发环境可采用Turbo C 2.0 或Visual C++ 6.0等。
二、算法设计1. 有两个字符串,各有10个字符,是编程完成如下功能:(1)分别找出两个字符串中最大的字符元素;(2)将两字符串对应位置元素逐个比较,并统计输出两个字符串对应元素大于、小于和等于的次数(第一题流程图)2. 销售员业绩管理程序主要用结构体数组实现,用结构体表示每项记录,包含数据为:编号、姓名、销售产品名、产品单价、销售数量、销售额。
#include<stdio.h>#include<string.h>#include<stdlib.h>#include<conio.h>#include<time.h>#define N 100#define PRINT "\n%5d|%8s|%10.2f|%10.2f|%8.2f|%8.2f|%10.2f|%10.2f ",em[i].num,em[i].name,em[i].basicsalary,em[i].benefit,em[i].waterfare,em[i].electricityfare,em[i]. shouldpay,em[i].actualpay#define TOTAL1 em[i].basicsalary+em[i].benefit#define TOTAL2 TOTAL1-em[i].waterfare-em[i].electricityfare-em[i].personalstruct clerk{int num; //ID号char name[20]; //姓名double basicsalary; //基本工资double benefit; // 津贴double waterfare; //水费double electricityfare; //电费double actualpay; //实发工资double shouldpay; //应发工资double personal; //个人所得税}em[N];void menu();void input();void save(int);void display();void del();void add();void search();void search_num();void search_name();void modify();void arrange();void sta();unsigned int password();void start(); /*定义各函数*/void start() //开始界面{printf("\n\n\n\n\n\n");system("color 06");//黄色字体printf("************************************************************************* *********");printf("**********************************");printf("*******************欢迎使用职工工资管理模拟系统*********************");printf("***************************************");printf("************************************************************************\ n\n\n\n\n");printf("\t\t\t ***请按任意键进入***\n");}void menu() //菜单界面{system("cls");printf("\t\t\t\t***菜单***\n\n");printf("|~~~~~~~~~~~~~~~~~~~~~~~~ \t\t\t 1 输入~~|\n");printf("| 小贴士: 2 显示|\n");printf("| 请按说明 3 查找|\n");printf("| 进行操作 4 删除|\n");printf("| 5 添加|\n");printf("| 6 修改|\n");printf("| 7 统计|\n");printf("| 8 排序|\n");printf("|________________________ \t\t\t 9 退出___|\n");printf("说明:\n *如首次使用尚未输入数据请先输入数据\n *输入的数据将自动保存\n *再次选择输入功能时原数据将被覆盖,此时可选添加加入职工\n\n");}unsigned int password()//密码模块{char a1[20],a2[20],a3[20];int i,j;FILE *fp1;time_t start,end;if((fp1=fopen("D:\\password.dat","rb"))==NULL)//无密码文件,设置密码。
c语言课程设计报告_员工信息管理系统_结构数组实现程序源代
码。
//C语言课程设计人员信息管理系统-结构数组实现# INCLUDE # INCLUDE # INCLUDE STRUCT EMPLOYEE { Charnum[10];char name[15];迷人的性感[5];[·XXXX日期、教育背景、职位、电话号码、地址等。
系统可以完成员工信息的查询、更新、插入、删除和排序功能。
基本要求和说明
1.员工信息保存在文本文件中
2.排序:
根据不同的关键字对所有员工的信息进行排序,并输出排序结果。
3.询问:
根据特定标准查找员工。
4.更新:
通过编号修改员工的某些信息。
5.插入:
关于添加新员工的信息。
6.删除:
按号码删除已离开公司的员工信息。
计算机科学与信息工程学院欢迎您的来访。
下载后可以修改和编辑word文档。
双击以删除页眉和页脚。
谢谢!简单的教科书内容不能满足学生的需要。
教育中常见
的问题是教大脑的人不使用手,不使用手的人使用大脑,所以他们什么也做不了。
教育革命的对策是手脑联盟。
因此,双手和大脑的力量都是不可思议的。
单词模型divI)。
#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){f lag=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);}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;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;DP05b_205_215TC005 092-661解决方案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; }} 雨滴穿石,不是靠蛮力,而是靠持之以恒。
//C语言课程设计职工信息管理系统—单链表实现#include "stdio.h"#include "stdlib.h"#include "string.h"int saveflag=0; /*是否需要存盘的标志变量*/struct employee{char name[15];char num[10];/* 工号*/char sex[4];char bm[15];char zc[20];int gz;};typedef struct node{struct employee data;struct node *next;}Node,*Link;//Link l (注意是:字母l不是数字1)void add(Link l);void disp(Link l); //查看职工所有信息void del(Link l); //删除功能Node* Locate(Link l,char findmess[],char nameornum[]);void Qur(Link l); //查询功能void Tongji(Link l); //统计void Sort(Link l); //排序void Modify(Link l); //修改功能void save(Link l); //将单链表l中的数据写入文件void printe(Node *p); //本函数用于打印链表中某个节点的数据内容*///以下4个函数用于输出中文标题void printstart();void Wrong();void Nofind();void printc();void menu(){printf("\t*****************************************************************\n");printf("\t* *\n");printf("\t* 职工信息管理系统_结构体数组实现*\n");printf("\t* *\n");printf("\t* [1] 增加职工信息[2] 删除职工信息*\n");printf("\t* [3] 查询职工信息[4] 修改职工信息*\n");printf("\t* [5] 插入职工记录[6] 统计职工记录*\n");printf("\t* [7] 排序[8] 保存职工信息*\n");printf("\t* [9] 显示数据[0] 退出系统*\n");printf("\t* *\n");printf("\t*****************************************************************\n"); } //void menu菜单结束void Disp(Link l) //显示单链表l中存储的职工记录,内容为employee结构中定义的内容{int count=0;Node *p;p=l->next; // l存储的是单链表中头结点的指针,该头结点没有存储职工信息,指针域指向的后继结点才有职工信息if(!p) /*p==NULL,NUll在stdlib中定义为0*/{printf("\n=====>提示:没有职工记录可以显示!\n");return;}printf("\t\t\t\t显示结果\n");printstart(); //打印横线printc(); //打印各学科标题printf("\n");while(p) //逐条输出链表中存储的职工信息{printe(p);p=p->next;}printstart();printf("\n");} //void Disp结束void printstart(){printf("-----------------------------------------------------------------------\n");}void Wrong(){printf("\n=====>提示:输入错误!\n");}void Nofind(){printf("\n=====>提示:没有找到该职工!\n");}void printc() /* 本函数用于输出中文*/{printf(" 工号\t 姓名性别部门职称工资总工资平均工资\n");}void printe(Node *p)/* 本函数用于打印链表中某个节点的数据内容*/{printf("%-12s%s\t%s\t%d\t%d\t%d\t %d\t %d\n",p->data.num,p->,p->data.sex,p->data.bm,p->data.zc,p->data.gz);}//Locate(l,findmess,"num");/* 该函数用于定位连表中符合要求的结点,并返回该指针*/Node* Locate(Link l,char findmess[],char zcornum[]){Node *r;if(strcmp(zcornum,"num")==0) /* 按工号查询*/{r=l->next;while(r!=NULL){if(strcmp(r->data.num,findmess)==0) /*若找到findmess值的工号*/return r;r=r->next;}}else if(strcmp(zcornum,"zc")==0) /* 按职称查询*/{r=l->next;while(r!=NULL){if(strcmp(r->data.zc,findmess)==0) /*若找到findmess值的职工职称*/ return r;r=r->next;}}return 0; /*若未找到,返回一个空指针*/}//add()函数中,无节点时,r指向list头,有节点时,r指向末尾节点void Add(Link l) /* 增加职工*/{Node *p,*r,*s; /*实现添加操作的临时的结构体指针变量*/char num[10];int flag=0;r=l;s=l->next; //链表没有节点时,s=null;/链表有节点时,指向第一个职工节点while(r->next!=NULL) //如果存在后继结点时,r指针后移一个r=r->next; /*将指针移至于链表最末尾,准备添加记录*/while(1){printf("请你输入工号(以'0'返回上一级菜单:)");scanf("%s",num);if(strcmp(num,"0")==0) //输入'0',跳出while(1),即跳出add()函数break;s=l->next; //作用?每次从第一个节点开始找,看num是否重复。
...\n");
}
void fh()
{
printf("\t===>按Enter键返回主菜单\n");
}
void num_modify() um)==0) um,em[changeIndex].name,em[changeIndex].sex,em[changeIndex].bm,em[cha ngeIndex].zc,em[changeIndex].gz);
printf("请重新输入该职工信息");
printf("工号:");
scanf("%s",em[changeIndex].num);
printf("姓名:");
scanf("%s",em[changeIndex].name);
printf("性别:");
scanf("%s",em[changeIndex].sex);
printf("部门:");
scanf("%d",em[changeIndex].bm);
printf("职称:");
scanf("%s",em[changeIndex].zc);
printf("工资:");
scanf("%d",&em[changeIndex].gz);
um,em[i].name,em[i].sex,em[i].bm,em[i].zc,em[i].gz);
}
}
void sort()z>em[k].gz)
k=j;
}
if(k!=i)
{
t=em[i];
em[i]=em[k];
em[k]=t;
}
}
printf("你想输出前几名职工的信息:");
scanf("%d",&wantNUmber);
if (wantNUmber>Number)
{
wantNUmber=Number;
}
printf("\t工号\t姓名\t性别\t部门\t职称\t工资\n");
for(i=0;i<wantNUmber;i++)
{
printf("\t%s\t%s\t%s\t%s\t%s\t%d\n\n",em[i].num,em[i].name,em[i].sex, em[i].bm,em[i].zc,em[i].gz);
}
}
void tongji()z;
}
printf("全体职工的总工资为:%f\n",sum);
printf("平均工资为:%f\n",sum/Number);
i=0;m=0;max=0;
max=em[m].gz;
for(i=1;i<Number;i++)
{
if (em[i].gz>max)
m=i;
max=em[m].gz;
}
printf("最高工资为:%d\n",max);
printf("\t%s\t%s\t%s\t%s\t%s\t%d\n\n",em[m].num,em[m].name,em[m]. sex,em[m].bm,em[m].zc,em[m].gz);
i=0;k=0;min=0;
min=em[0].gz;
for(i=1;i<Number;i++)
{
if (em[i].gz<min)
k=i;
min=em[k].gz;
}
printf("最低工资:%d\n",min);
printf("\t%s\t%s\t%s\t%s\t%s\t%d\n\n",em[k].num,em[k].name,em[k].
sex,em[k].bm,em[k].zc,em[k].gz);
}
void num_del()um)==0) c)==0)
{
printf("\t%s\t%s\t%s\t%s\t%s\t%d\n\n",em[i].num,em[i].name,em[i]. sex,em[i].bm,em[i].zc,em[i].gz);
}
}
}
void select()um,em[i].name,em[i].sex,em[i].bm,em[i].zc,em[i].gz);
}
}
void add()//增加职工
{
int numberTemp=0;
int i=0;
struct employee temp; //临时保存信息
printf("请输入要增加职工信息的个数:");
scanf("%d",&numberTemp);
for(i=0;i<numberTemp;i++)
{
printf("输入第%d个职工信息\n",i+1);
printf("工号:");
scanf("%s",;
printf("姓名:");
scanf("%s",;
printf("性别:");
scanf("%s",;
printf("部门:");
scanf("%s",;
printf("职称:");
scanf("%s",;
printf("工资:");
scanf("%d",&;
em[Number++]=temp; //将刚添加的写入到数组
write_file(&temp); //将刚添加的写入到文件
}
printf("添加成功\n");
}
void write_file(struct employee *em)
{
FILE *fp=NULL;
fp=fopen("","rb+");
fwrite(em,sizeof(struct employee),1,fp);
fclose(fp);
}
int read_file(struct employee em[])
{
FILE *fp=NULL;
int i=0;
fp=fopen("","rb");
while(fread(&em[i],sizeof(struct employee),1,fp)) i++;
fclose(fp);
return i;
}。