1、 程序设计工程训练汇报 职员信息管理系统 课程名称 C语言程序设计工程训练姓 名 院(系) 专业班级 学 号 指导老师 目 录1 需求分析12 系统总框图和功效模块说明12.1 系统总框图12.2 功效模块说明23 系统设计23.1 关键结构体23.2关键功效函数33.3 关键函数步骤图44 系统调试45 总结96 源程序清单101 需求分析职员信息包含职员号、姓名、性别、年纪、学历、工资、住址、电话(职员号不反复)。试设计职员信息管理系统,使之能提供以下功效:l 系统以菜单方法工作l 职员信息录入功效(职员信息用文件保留)输入l 职员信息浏览功效输出l 职员信息查询功效算法(其中查询方法能够
2、按学历查询、按职员号查询等)l 职员信息删除、修改功效2 系统总框图和功效模块说明2.1 系统总框图职员信息管理系统输入职员信息修改职员信息删除职员信息查询职员信息保留职员信息按职员号查询按姓名查询按学历查询图1 系统总框图2.2 功效模块说明1.菜单模块:显示职员管理系统主菜单,供用户选择所需功效,经过自己定义void menu()函数来实现。2.输入模块:输入职员工号、姓名和其它部分职员相关信息,经过自己定义void input()函数来实现。3.保留模块:将内存中职员信息输出到磁盘文件中,能够经过自己定义void save(int)函数来实现。4.浏览模块:浏览全部职员相关信息,经过自己
3、定义void display()函数来实现。5.删除模块:删除需要删除职员全部信息,经过自己定义void del()函数来实现。6.添加模块:添加需要添加职员相关信息,经过自己定义void add()函数来实现。7.按职员学历查询模块:能够按职员学一向查询职员相关信息,经过自己定义void search_xuelil函数来实现。8.按职员电话号码查询模块:能够按职员电话来查询职员相关信息,经过自己定义void search_tel函数来实现。9.修改模块:能够修改需要修改职员相关信息,经过自己定义void modify()函数 来实现。10.退出系统模块:退出职员信息管理系统,经过头文件win
4、dows.h中exit(0)函数来实现。3 系统设计3.1 关键结构体struct employee /定义一个职员信息结构体 int num; char name10; char sex; int age; char xueli30; int wage; char addr30; char tel20;em100; ;3.2关键功效函数void menu();void input();void save(int);void display();void del();void add();void search();void search_num();void search_xueli();v
5、oid search_tel();void modify();3.3 系统总体步骤图菜单开始依据菜单输入n值选择程序保留结束是否继续进行 NY YY5添加职员信息6修改职员信息2浏览职员信息3查询职员信息4删除职员信息7退出1录入职员信息4 系统调试1.运行程序,进入职员信息管理系统主菜单: 2.输入数字“1”进行录入职员信息: 3.录入职员信息4.输入“2”浏览职员信息: 5.输入“y”后继续,输入“3”进行查询职员信息: 6.进入主菜单,输入“4”进行删除职员信息: 7.进入主菜单输入“5”进行添加职员信息: 8.进入主菜单输入“6”进行修改职员信息: 9.进入主菜单输入”7”退出职员信息
6、管理系统。5 总结经过这次课程设计,增加了我们对软件技术了解,即使还不明确软件技术包含具体内容,但从学习C语言这门课程开始,已发觉程序设计好处,它对我们数学学习也有很大帮助。在学习C语言过程中也学到和巩固了很多计算机应用基础知识,对计算机机体也有了一个较为具体了解。在具体操作中对这学期所学C语言理论知识得到巩固加强,达成实训目标,也发觉自己不足之处,为我们以后c语言学习奠定了基础,同时体会到C语言含有语句简练,使用灵活,实施效率高等特点。发觉上机操作关键作用,尤其是对数组和循环有了深刻了解。经过实际操作,学会 C语言程序编程基础步骤、基础方法,开发了自己逻辑思维能力,培养了分析问题、处理问题能
7、力。 因为本课题中很多知识点全部没有学过全部要靠自己到课外资料中去查找。在用时候难免出现这么那样错误。如开始设计出来菜单不是预想那样,而是总个窗中出现混乱。处理这个问题措施是调整。一个系统菜单和提醒信息很关键。假如没有这些用户根本不知道怎么用你设计这个系统。在设计调试过程中也无法顺利完成调试工作。有了一个清楚简单菜单和部分提醒信息这后,调试过程完成比较顺利。回顾起此次课程设计,至今我们仍感慨颇多,确实,从拿到题目到完成整个编程,从理论到实践,在这些日子里,能够学到很多很多东西,同时不仅能够巩固了以前所学过知识,而且学到了很多在书本上所没有学到过知识。经过这次课程设计使我们知道了理论和实际相结合
8、是很关键,只有理论知识是远远不够,只有把所学理论知识和实践相结合起来,从理论中得出结论,才能真正为社会服务,从而提升自己实际动手能力和独立思索能力。在设计过程中碰到问题,能够说得是困难重重,这毕竟第一次做,难免会碰到过多种多样问题,同时在设计过程中发觉了自己不足之处,对以前所学过知识了解得不够深刻,掌握得不够牢靠,比如说结构体经过这次课程设计以后,一定把以前所学过知识此次课程设计结束了,对于我们影响很大。我们经过这次实践学到了很多知识。学到了设计一个简单系统。要注意哪些方面。也使我们知道自己哪些方面做得还不够。6 源程序清单#include #include #include #include
9、 #define N 100struct employee int num; char name10; char sex; int age; char xueli30; int wage; char addr30; double tel;em100; /*定义一个结构体*/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(); /
10、*定义各函数*/void menu() /*菜单函数*/ printf(计算机科学和技术专业n); printf(n); printf(计算机123班 敖立伟n); printf(n); 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 main()
11、 int n,flag; char a; menu(); /*调用菜单函数*/ 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(
12、按职员号查询职员信息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; s
13、ystem(cls); /*清屏*/ menu(); /*调用菜单函数*/ printf(请再次选择你需要操作步骤(1-6):n); scanf(%d,&n); printf(n); else exit(0); void input() /*录入函数*/ int i,m; printf(请输入需要创建信息职员人数(1-100):n); scanf(%d,&m); for (i=0;im;i+) printf(请输入职员号:); scanf(%d,&emi.num); printf(n); printf(请输入姓名: ); scanf(%s,emi.name); getchar(); print
14、f(请输入性别(f-女 m-男): ); scanf(%c,&emi.sex); printf(请输入年纪: ); scanf(%d,&emi.age); printf(请输入学历: ); scanf(%s,emi.xueli); printf(请输入工资: ); scanf(%d,&emi.wage); printf(请输入住址: ); scanf(%s,emi.addr); printf(请输入电话: ); scanf(%lf,&emi.tel); printf(n); printf(n创建完成!n); save(m);void save(int m) /*保留文件函数*/ int i;
15、FILE*fp; if (fp=fopen(employee_list,wb)=NULL) /*创建文件并判定是否能打开*/ printf (cannot open filen); exit(0); for (i=0;im;i+) /*将内存中职员信息输出到磁盘文件中去*/ if (fwrite(&emi,sizeof(struct employee),1,fp)!=1) printf(file write errorn); fclose(fp);int load() /*导入函数*/ FILE*fp; int i=0; if(fp=fopen(employee_list,rb)=NULL)
16、printf (cannot open filen); exit(0); else do fread(&emi,sizeof(struct employee),1,fp); i+; while(feof(fp)=0); fclose(fp); return(i-1);void display() /*浏览函数*/ int i; int m=load(); printf(n 职员号t姓名t性别t年纪t学历t工资t住址t电话 n); for(i=0;im;i+) /*m为输入部分职员人数*/ printf(n %dt%st%ct%dt%st%dt%st%.0lfn,emi.num,emi.name
17、,emi.sex,emi.age,emi.xueli,emi.wage,emi.addr,emi.tel); void del() /*删除函数*/ int m=load(); int i,j,n,t,flag; char name20; printf(n 原来职员信息:n); display(); /* 调用浏览函数*/ printf(n); printf(请输入要删除职员姓名:n); scanf(%s,name); for(flag=1,i=0;flag&im;i+) if(strcmp(emi.name,name)=0) printf(n已找到此人,原始统计为:n); printf(n职
18、员号t姓名t性别t年纪t学历t工资t住址t电话 n); printf(n%dt%st%ct%dt%st%dt%st%.0lfn,emi.num,emi.name,emi.sex,emi.age,emi.xueli,emi.wage,emi.addr,emi.tel); printf(n确实要删除此人信息请按1,不删除请按0n); scanf(%d,&n); if(n=1) /*假如删除,则其它信息全部往上移一行*/ for(j=i;jm-1;j+) strcpy(emj.name,emj+1.name); emj.num=emj+1.num; emj.sex=emj+1.sex; emj.ag
19、e=emj+1.age; strcpy(emj.xueli,emj+1.xueli); emj.wage=emj+1.wage; strcpy(emj.addr,emj+1.addr); emj.tel=emj+1.tel; flag=0; if(!flag) m=m-1; else printf(n对不起,查无此人!n); printf(n 浏览删除后全部职员信息:n); save(m); /*调用保留函数*/ display(); /*调用浏览函数*/ printf(n继续删除请按1,不再删除请按0n); scanf(%d,&t); switch(t) case 1:del();break
20、; 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=1&t=4) flag=1; break; else flag=0; printf(您输入有误,请重新选择!); while(flag=0); w
21、hile(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(请输入要查找职员号(0-):n); scanf(%d,&num); for(i=0;im;i+) if(n
22、um=emi.num) printf(n已找到此人,其统计为:n); printf(n职员号t姓名t性别t年纪t学历t工资t住址t电话 n); printf(n%dt%st%ct%dt%st%dt%st%.0lfn,emi.num,emi.name,emi.sex,emi.age,emi.xueli,emi.wage,emi.addr,emi.tel); break; if(i=m) printf(n对不起,查无此人n); printf(n); printf(返回查询函数请按1,继续查询职员号请按2n); scanf(%d,&t); switch(t) case 1:search();brea
23、k; case 2: break; default:break; void search_xueli() char xueli30; int i,t; int m=load(); printf(请输入要查找学历:n); scanf(%s,xueli); for(i=0;im;i+) if(strcmp(emi.xueli,xueli)=0) printf(n已找到,其统计为:n); printf(n职员号t姓名t性别t年纪t学历t工资t住址t电话 n); printf(n%dt%st%ct%dt%st%dt%st%.0lfn,emi.num,emi.name,emi.sex,emi.age,e
24、mi.xueli,emi.wage,emi.addr,emi.tel); if(i=m) printf(n对不起,查无此人n); printf(n); printf(返回查询函数请按1,继续查询学历请按2n); scanf(%d,&t); switch(t) case 1:search();break; case 2:break; default :break; void search_tel() long int tel; int i, t; int m=load(); printf(请输入要查找电话号码:n); scanf(%lf,&tel); for(i=0;im;i+) if(tel=
25、emi.tel) printf(n已找到此人,其统计为:n); printf(n职员号t姓名t性别t年纪t学历t工资t住址t电话 n); printf(n%dt%st%ct%dt%st%dt%st%.0lfn,emi.num,emi.name,emi.sex,emi.age,emi.xueli,emi.wage,emi.addr,emi.tel); break; if(i=m) printf(n对不起,查无此人n); printf(n); printf(返回查询函数请按1,继续查询电话号码请按2n); scanf(%d,&t); switch(t) case 1:search();break;
26、 case 2:break; default :break; void modify() /*修改函数*/ int num; char name10; char sex; int age; char xueli30; int wage; char addr30; long int tel; 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;f
27、lag&i8|c1) 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); emi-1.num=num; break; case 2:printf(姓名改为: ); scanf(%s,name); strcpy(emi-1.name,name); break; case 3:printf(性别改为: ); getchar(
28、); scanf(%c,&sex); emi-1.sex=sex; break; case 4:printf(年纪改为: ); scanf(%d,&age); emi-1.age=age; break; case 5:printf(学历改为: ); scanf(%s,xueli); strcpy(emi-1.xueli,xueli); break; case 6:printf(工资改为: ); scanf(%d,wage); break; case 7:printf(住址改为: ); scanf(%s,addr); strcpy(emi-1.addr,addr); break; case 8:printf(电话改为: ); scanf(%lf,&tel); emi-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,不再修改请按0n); scanf(%d,&t); switch(t) case 1:modify();break; case 0:break; default :break;