《c语言职工信息管理系统设计.doc》由会员分享,可在线阅读,更多相关《c语言职工信息管理系统设计.doc(35页珍藏版)》请在三一文库上搜索。
1、程序设计基础课程设计题目名称: 职工信息管理系统设计 姓 名 赵家振 学 号 0906150207 专 业 信息安全 班 级 信安1502 指导教师 冯启龙 编写日期 2015/12/20 目录一、需求分析31.选题32.题目分析3二、总体设计51.基本思路:5三、详细设计6(一)信息储存函数:6(二)信息读取函数:6(三)信息展示函数:7(四)信息查找函数:8(五)信息删除函数10四、程序运行结果测试与分析121.主菜单界面:122.信息浏览功能:133.信息录入功能:134.信息查询功能145.信息删除功能156.信息修改功能177.退出界面19五、结论与心得201.变量定义、命名:202
2、.文件的建立、存储、读取:203.信息录入功能214.数据体结构定义215.信息忘记修改216.对条件的控制227.画面界面设置228.程序模块化设计229.未完成的想法23六、源代码清单241.感谢35一、需求分析1.选题 题目一:职工信息管理系统设计 职工信息包括职工号、姓名、性别、年龄、学历、工资、住址、电话等(职工号不重复)。 试设计一职工信息管理系统,使之能提供以下功能: 1、系统以菜单方式工作 2、职工信息录入功能(职工信息用文件保存)输入 3、职工信息浏览功能输出 4、职工信息查询功能算法 查询方式 按学历查询等 按职工号查询等 5、职工信息删除、修改功能2.题目分析 该职工信息
3、管理系统包括以下几个功能: 信息录入 信息浏览 信息查询 信息修改 信息删除 据此,该系统应至少构建以下函数: 信息录入函数 信息输出函数 信息查找函数 信息更改函数 信息删除函数 五大功能对应五大函数,便于编写出规划的模块化程序。 此外,题目要求以菜单方式工作、职工信息用文件保存,同时程序应满足美观以及使用简单方便的要求,构建下列函数: 菜单函数(包括几个子菜单函数) 信息储存函数 信息读取函数 系统终止函数 需要成功编写上述函数,主要需要突破以下难点: 利用结构体类型保存职工信息 将职工信息保存在文件中 将职工信息从文件中读取出来 信息成功录入(每次录入都是新增) 结构体变量成员的引用 s
4、trcmp函数的使用(成功搜索所需信息,用于查找、更改、删除等功能)数组信息的删除 菜单循环功能 系统界面、文字、注释优化,信息对齐输出二、总体设计 1.基本思路: 如流程图(简略)所示:系统基本思路为:将不同功能模块化,分别调用相应函数进行设计,使程序代码清晰易读,设计思路清晰明了。系统分为5大功能:录入、浏览、查询、删除、更改功能。 录入功能:调用录入函数,信息储存、读取函数:利用for循环,对信息进行录入(新增),并保存到文件中; 浏览功能:调用浏览函数:利用for循环,简单地对已有职工信息进行打印,并做到输出界面美观,可读性强的效果; 查询功能:调用查询函数、信息读取函数:拥有两种功能
5、1.按职工号查询信息2.按姓名查询信息; 删除功能:调用删除函数,信息储存、读取函数:将文件中的信息读取出并删除,之后保存新信息 更改功能:调用更改函数,信息储存、读取函数:具有两种功能1.整体修改信息2.局部修改信息三、详细设计(一)信息储存函数:1. void save(int m)2. 3. int i;4. FILE*fp;5. if(fp=fopen(职工名单.txt,wb)=NULL)6. 7. printf(文件打开错误n);8. exit(0);9. 10. for(i=0;im;i+)11. if(fwrite(&memberi,sizeof(struct inf),1,fp
6、)!=1)12. printf(文件写入错误n);13. fclose(fp);14. 函数功能:将信息存储到文件中 (二)信息读取函数:1. int load()2. 3. FILE*fp;4. int i=0;5. if(fp=fopen(职工名单.txt,rb)=NULL)6. 7. printf(文件打开失败n);8. exit(0);9. 10. else11. 12. do13. 14. fread(&memberi,sizeof(struct inf),1,fp);15. i+;16. 17. while(feof(fp)=0);18. 19. fclose(fp);20. re
7、turn(i-1);21. 函数功能:将储存在文件中的信息读入程序中,返回已有信息量的值 (三)信息展示函数:1. void show()2. 3. int t;4. int i=load();5. printf(工号ttt姓名ttt性别ttt年龄nn);6. for(t=0;ti;t+)7. printf(%-12stt%-12stt%-12stt%-12dnn,membert.no,membert.name,membert.sex,membert.age);8. printf(工资ttt学历ttt地址ttt手机号码nn);9. for(t=0;ti;t+)10. printf(%-12ld
8、tt%-12stt%-12stt%-12snn,membert.wages,membert.edu,membert.addr,membert.telno);11.12. 函数功能:简单地将存储在文件中的信息打印在屏幕上(四)信息查找函数:1. void func3()2. 3. int t,a,cmd3;4. int i=load();5. char no11;6. char edu20;7. Menu3();8. fflush(stdin);9. scanf(%d,&cmd1);10. show();11. switch(cmd1)12. 13. case(0):main();14. cas
9、e(1):15. 16. printf(请输入您想要查找的职工号:n);17. fflush(stdin);18. scanf(%s,no);19. for(t=0;ti;t+)20. if(strcmp(membert.no,no)=0)21. 22. printf(恭喜你查找到结果:nn);23. printf(工号ttt姓名ttt性别ttt年龄nn);24. printf(%-12stt%-12stt%-12stt%-12dnn,membert.no,membert.name,membert.sex,membert.age);25. printf(工资ttt学历ttt地址ttt手机号码n
10、n);26. printf(%-12ldtt%-12stt%-12stt%-12snn,membert.wages,membert.edu,membert.addr,membert.telno);27. 28. else 29. printf(对不起,您的输入有误。nn请您选择接下来的操作:n1.重新输出t2.返回上一级菜单t3.终止程序n);30. fflush(stdin);31. scanf(%d,&cmd3);32. switch(cmd3)33. 34. case(1):func3();35. case(2):Menu();36. case(3):printf(感谢您使用本系统,您如
11、有对本团队的不满或建议,请致电123456789,谢谢!n);37. exit(0);38. 39. 40. break;41. 42.43. case(2):44. 45. printf(请输入您想要要查找的学历:n);46. fflush(stdin);47. scanf(%s,edu);48. for(a=0;ai;a+)49. if(strcmp(membera.edu,edu)=0)50. 51. printf(恭喜你查找到结果:nn);52. printf(工号ttt姓名ttt性别ttt年龄nn);53. printf(%-12stt%-12stt%-12stt%-12dnn,me
12、mbera.no,membera.name,membera.sex,membera.age);54. printf(工资ttt学历ttt地址ttt手机号码nn);55. printf(%-12ldtt%-12stt%-12stt%-12snn,membera.wages,membera.edu,membera.addr,membera.telno);56. 57. else 58. printf(对不起,您的输入有误。nn请您选择接下来的操作:n1.重新输入t2.返回上一级菜单t3.终止程序n);59. fflush(stdin);60. scanf(%d,&cmd3);61. switch(
13、cmd3)62. 63. case(1):func3();64. case(2):main();65. case(3):printf(感谢您使用本系统,您如有对本团队的不满或建议,请致电123456789,谢谢!n);66. exit(0);67. 68. 69. break;70. 71. End();72.73. 函数名字说明:函数为菜单3(信息查询)所需功能,故为func3 函数功能说明:1.输入职工号查找信息2.输入姓名查找信息 (五)信息删除函数1. void del()2. 3. int m=load();4. int i,j,n,t,judge;5. char name18;6.
14、 printf(以下为系统中已存在的职工信息:nn);7. show();8. printf(n);9. printf(请输入您想要删除的职工的姓名:n);10. fflush(stdin);11. scanf(%s,name);12. for(judge=1,i=0;judge&im;i+)13. 14. if(strcmp(memberi.name,name)=0)15. 16. printf(恭喜您找到此人,ta的信息如下:nn);17. printf(工号ttt姓名ttt性别ttt年龄nn);18. printf(%-12stt%-12stt%-12stt%-12dnn,memberi
15、.no,memberi.name,memberi.sex,memberi.age);19. printf(工资ttt学历ttt地址ttt手机号码nn);20. printf(%-12ldtt%-12stt%-12stt%-12snn,memberi.wages,memberi.edu,memberi.addr,memberi.telno);21. printf(您确定要删除此人信息吗?n1.确定t2.不删除n);22. fflush(stdin);23. scanf(%d,&n);24. if(n=1)25. 26. for(j=i;jm-1;j+)27. 28. strcpy(memberj
16、.no,memberj+1.no);29. strcpy(memberj.name,memberj+1.name);30. strcpy(memberj.sex,memberj+1.sex);31. memberj.age=memberj+1.age;32. memberj.wages=memberj+1.wages;33. strcpy(memberj.edu,memberj+1.edu);34. strcpy(memberj.addr,memberj+1.addr);35. strcpy(memberj.telno,memberj+1.telno);36. 37. judge=0;38.
17、39. else40. 41. printf(请选择您接下来想要做的:n1.返回主菜单t2.重新执行删除功能n);42. fflush(stdin);43. scanf(%d,&cmd2);44. if(cmd2=1)45. main();46. else47. del();48. 49. 50. 51. if(!judge!=0)52. m=m-1;53. else54. 55. printf(对不起,查无此人nn);56. printf(请选择您接下来想要做的:n1.返回主菜单t2.重新输入n);57. fflush(stdin);58. scanf(%d,&cmd2);59. if(cm
18、d2=1)60. main();61. else62. del();63. 64. printf(下面为删除信息后所有职工信息:nn);65. save(m);66. show();67. printf(请问您要继续删除吗?n1.是t2.不需要n);68. fflush(stdin);69. scanf(%d,&t);70. switch(t)71. 72. case(1):del();break;73. case(2):break;74. 75. 四、程序运行结果测试与分析 1.主菜单界面:菜单简洁明了,不失美观,为方便用户使用,提供手动清屏功能(9)2.信息浏览功能:该功能可实现从文件中读
19、取信息并打印到屏幕上,信息对称具有一定可读性。(并不是每次运行程序都需要录入信息再浏览,可以直接浏览以前运行程序时曾经录入的信息)3.信息录入功能:此处为信息录入功能菜单界面,简洁清新。此处为录入功能工作界面,按照提示输入相应数据即可成功录入此处为录入成功后,录入结束界面(每一个功能结束界面均为这个)4.信息查询功能此处为信息查询功能,按照题目要求分两种查询功能:1.职工号查询;2.学历查询。两种功能的实现方式均为从文件中读取信息再与输入信息对比,一致即将信息输出到屏幕。最后调用END函数,选择后续操作。5.信息删除功能如上图,每次执行删除功能前,都会将信息从文件中读取出来并输出到屏幕,以便于
20、用户选择所需删除的信息。如上图,输入想要删除的职工信息之后,成功搜索后输出此人信息并询问用户是否需要删除此人信息:确定后执行删除功能。如上图,删除功能执行后,将信息删除后的信息输出屏幕,此后询问用户是否需要继续删除,需要即重复删除功能操作,不需要则调用END函数选择后续操作。6.信息修改功能如上图,与删除功能一致,执行功能前将所有信息输出屏幕,以便用户选择其所需更改的职工信息如上图,找到此人信息后,询问是否确定修改:否,则选择重新修改或是返回主菜单;确定修改则再次进行功能选择:1.整体修改 2.单个修改如上图,此处为整体修改功能界面,只需按照文字提示即可顺利操作如上图,此处为单个修改界面,每次
21、修改只能修改一个选项。如上图,此处为单个修改修改后效果,只将工号改变7.退出界面最后表达感谢以及留下联系方式。注:由于电脑问题,程序不能全屏显示,因此上述截图中的电话号码没有空间输出,自动换行到第二行。正常情况下是不会出现的。五、结论与心得1.变量定义、命名:最初进行设计时,出错最多的地方是每一个函数变量的定义,因为函数较多,而我也从未进行过这样的程序设计,导致局部变量,全局变量方面有些许混乱,再加上对变量的命名,将我弄得焦头烂额。解决方法:在将程序大体上编写好后,重新仔细阅读了课本在这方面的知识,对变量进行了一定程度上的规范,解决了这上面的问题。2.文件的建立、存储、读取:在拿到课设题目的时
22、候,便发现基本上大多数题目都需要将信息储存到文件中,当初我的内心是崩溃的,因为并没有学习过这方面的内容,据说文件还是C语言的精髓之一。只好乖乖地拿起书本,将这方面的内容浏览一遍。一遍遍地试,虽然对文件还是一知半懂,但也终于可以实现文件的建立,存储、读取功能了。3.信息录入功能 这一点也许并不算是难点,但在程序运行初期,这个功能每次录入的时候会将之前录入的信息覆盖掉,而不是更新。考虑到程序的实用性,显然这样的功能是不符合要求的,于是对其进行了更改,还是改了一下控制条件,便实现了我想要的功能:每次录入都是新增,而不是覆盖。我称之为神奇的条件。4.数据体结构定义刚开始的定义,对职工编号、电话号码等数
23、据定义的是长整型,后来却发现因为职工编号(测试时我输入的是学号,有10位)、电话号码过长,已超出长整型数据的范围。这里给予我警醒:在以前的C语言学习过程中,我总是忽略了这些数据范围大小,认为记这些并没有什么用,在课设时才意识到,这一点也是不可忽略的!随后我便将这些数据定义为字符串数组,顺利解决了这个问题。5.信息忘记修改比如说,在第三点更改数据类型后,将后面的一些相应点修改后,却依然有漏改的:如信息查询时,整型与字符串的比较方式不一样,此处漏改将会导致程序出错。至今未能有较好的改正方法,只能更加细心,或修改前将所需要修改的点罗列出来。6.对条件的控制在这样一个比较大(在我这样的初学者看来)的程
24、序中,对某些条件的控制出错可谓是致命的,因为编译并不会出错,而程序运行结果却会偏离预想轨道,发现错误难度大大提高。我便是在职工信息查询功能职工姓名查询中,久久发现不了错误,就是一直查找不成功,后来经过多次检查才发现是条件控制少了个“等于号”。解决方案,只能是在进行条件控制时加倍留心,力争不出错。7.画面界面设置 作为一个应用程序,界面必须好看具有较强可读性,否则实用性不强。在做清屏功能时,也有想过每做一步自动清屏,但根据用户需要,有时候需要查阅前面的操作,因此,最终选择的是手动清屏功能,适合不同的需求。 此外,在进行信息输出到屏幕时,往往会因为长度不够,出现不对齐的现象,这个问题困扰我比较久,
25、最后通过长度规定,一个一个尝试,试出比较适合的一个长度,实现了对齐输出。 8.程序模块化设计此处课程设计,最大的收获可能便是模块化设计,将程序分为一块一块的函数,便于浏览,思路清晰,简洁明了,修改方便,也可以减少程序代码行数,降低了程序的复杂度,使程序设计、调试和维护等操作简单化9.未完成的想法界面还可以更加优美,同学中还有能改变背景色的,我也希望可以这样做。程序中有很多重复的地方(可直接用函数调用),比如说在删除、修改功能中的删除修改前的信息展示,可直接调用信息显示函数;但在查询功能中,由于在一些文字解释上面的需要或者是功能特别要求,不能直接套用,需要做一些修改。这是我觉得比较不好的地方,想
26、要改,但其他课程的压力实在有些大,找不出时间好好想想怎么修改。用链表储存信息。现在的这个程序采用的是数组储存信息,在删除、修改功能上并没有链表方便,但想要采用链表时,程序已经写完了一半,如果重新采用链表,就需要重写程序,留下了一个遗憾。另外,课上学习的链表内容我也没有完全掌握,似懂非懂,也希望能够在寒假的时候好好看看,确实学会C语言。多项修改功能。该程序已有整体修改功能以及单个修改功能,但在实际应用中,可能还需要实现多项修改功能,比如同时修改两项等等。这个想法一闪而过,我也并没有在上面研究研究,时间确实不够。六、源代码清单 #include #include #include struct i
27、nf char no11; char name18; char sex5; int age; long wages; char edu20; char addr40; char telno11; member100; int cmd1,cmd2; void save(int m) int i; FILE*fp; if(fp=fopen(职工名单.txt,wb)=NULL)21 22 printf(文件打开错误n);23 exit(0);24 25 for(i=0;im;i+)26 if(fwrite(&memberi,sizeof(struct inf),1,fp)!=1)27 printf(
28、文件写入错误n);28 fclose(fp);29 30 int load()31 32 FILE*fp;33 int i=0;34 if(fp=fopen(职工名单.txt,rb)=NULL)35 36 printf(文件打开失败n);37 exit(0);38 39 else40 41 do42 43 fread(&memberi,sizeof(struct inf),1,fp);44 i+;45 46 while(feof(fp)=0);47 48 fclose(fp);49 return(i-1);50 51 void show()52 53 int t;54 int i=load()
29、;55 printf(工号ttt姓名ttt性别ttt年龄nn);56 for(t=0;ti;t+)57 printf(%-12stt%-12stt%-12stt%-12dnn,membert.no,membert.name,membert.sex,membert.age);58 printf(工资ttt学历ttt地址ttt手机号码nn);59 for(t=0;ti;t+)60 printf(%-12ldtt%-12stt%-12stt%-12snn,membert.wages,membert.edu,membert.addr,membert.telno);6162 63 void del()6
30、4 65 int m=load();66 int i,j,n,t,judge;67 char name18;68 printf(以下为系统中已存在的职工信息:nn);69 show();70 printf(n);71 printf(请输入您想要删除的职工的姓名:n);72 fflush(stdin);73 scanf(%s,name);74 for(judge=1,i=0;judge&im;i+)75 76 if(strcmp(memberi.name,name)=0)77 78 printf(恭喜您找到此人,ta的信息如下:nn);79 printf(工号ttt姓名ttt性别ttt年龄nn)
31、;80 printf(%-12stt%-12stt%-12stt%-12dnn,memberi.no,memberi.name,memberi.sex,memberi.age);81 printf(工资ttt学历ttt地址ttt手机号码nn);82 printf(%-12ldtt%-12stt%-12stt%-12snn,memberi.wages,memberi.edu,memberi.addr,memberi.telno);83 printf(您确定要删除此人信息吗?n1.确定t2.不删除n);84 fflush(stdin);85 scanf(%d,&n);86 if(n=1)87 88 for(j=i;jm-1;j+)89 90 strcpy(memberj.no,memberj+1.no);91 strcpy(memberj.name,memberj+1.name);92 strcpy(memberj.sex,memberj+1.sex);93 memberj.age=me
链接地址:https://www.31doc.com/p-2369090.html