c语言职工信息管理系统设计.doc_第1页
c语言职工信息管理系统设计.doc_第2页
c语言职工信息管理系统设计.doc_第3页
c语言职工信息管理系统设计.doc_第4页
c语言职工信息管理系统设计.doc_第5页
免费预览已结束,剩余30页可下载查看

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

程序设计基础课程设计题目名称: 职工信息管理系统设计 姓 名 赵家振 学 号 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.文件的建立、存储、读取:203.信息录入功能214.数据体结构定义215.信息忘记修改216.对条件的控制227.画面界面设置228.程序模块化设计229.未完成的想法23六、源代码清单241.感谢35一、需求分析1.选题 题目一:职工信息管理系统设计 职工信息包括职工号、姓名、性别、年龄、学历、工资、住址、电话等(职工号不重复)。 试设计一职工信息管理系统,使之能提供以下功能: 1、系统以菜单方式工作 2、职工信息录入功能(职工信息用文件保存)输入 3、职工信息浏览功能输出 4、职工信息查询功能算法 查询方式 按学历查询等 按职工号查询等 5、职工信息删除、修改功能2.题目分析 该职工信息管理系统包括以下几个功能: 信息录入 信息浏览 信息查询 信息修改 信息删除 据此,该系统应至少构建以下函数: 信息录入函数 信息输出函数 信息查找函数 信息更改函数 信息删除函数 五大功能对应五大函数,便于编写出规划的模块化程序。 此外,题目要求以菜单方式工作、职工信息用文件保存,同时程序应满足美观以及使用简单方便的要求,构建下列函数: 菜单函数(包括几个子菜单函数) 信息储存函数 信息读取函数 系统终止函数 需要成功编写上述函数,主要需要突破以下难点: 利用结构体类型保存职工信息 将职工信息保存在文件中 将职工信息从文件中读取出来 信息成功录入(每次录入都是新增) 结构体变量成员的引用 strcmp函数的使用(成功搜索所需信息,用于查找、更改、删除等功能)数组信息的删除 菜单循环功能 系统界面、文字、注释优化,信息对齐输出二、总体设计 1.基本思路: 如流程图(简略)所示:系统基本思路为:将不同功能模块化,分别调用相应函数进行设计,使程序代码清晰易读,设计思路清晰明了。系统分为5大功能:录入、浏览、查询、删除、更改功能。 录入功能:调用录入函数,信息储存、读取函数:利用for循环,对信息进行录入(新增),并保存到文件中; 浏览功能:调用浏览函数:利用for循环,简单地对已有职工信息进行打印,并做到输出界面美观,可读性强的效果; 查询功能:调用查询函数、信息读取函数:拥有两种功能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)!=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. return(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.sex,membert.age);8. printf(工资ttt学历ttt地址ttt手机号码nn);9. for(t=0;ti;t+)10. printf(%-12ldtt%-12stt%-12stt%-12snn,membert.wages,,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. case(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.sex,membert.age);25. printf(工资ttt学历ttt地址ttt手机号码nn);26. printf(%-12ldtt%-12stt%-12stt%-12snn,membert.wages,,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(感谢您使用本系统,您如有对本团队的不满或建议,请致电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(,edu)=0)50. 51. printf(恭喜你查找到结果:nn);52. printf(工号ttt姓名ttt性别ttt年龄nn);53. printf(%-12stt%-12stt%-12stt%-12dnn,membera.no,,membera.sex,membera.age);54. printf(工资ttt学历ttt地址ttt手机号码nn);55. printf(%-12ldtt%-12stt%-12stt%-12snn,membera.wages,,membera.addr,membera.telno);56. 57. else 58. printf(对不起,您的输入有误。nn请您选择接下来的操作:n1.重新输入t2.返回上一级菜单t3.终止程序n);59. fflush(stdin);60. scanf(%d,&cmd3);61. switch(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. 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(,name)=0)15. 16. printf(恭喜您找到此人,ta的信息如下:nn);17. printf(工号ttt姓名ttt性别ttt年龄nn);18. printf(%-12stt%-12stt%-12stt%-12dnn,memberi.no,,memberi.sex,memberi.age);19. printf(工资ttt学历ttt地址ttt手机号码nn);20. printf(%-12ldtt%-12stt%-12stt%-12snn,memberi.wages,,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.no,memberj+1.no);29. strcpy(,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+1.edu);34. strcpy(memberj.addr,memberj+1.addr);35. strcpy(memberj.telno,memberj+1.telno);36. 37. judge=0;38. 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(cmd2=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.信息浏览功能:该功能可实现从文件中读取信息并打印到屏幕上,信息对称具有一定可读性。(并不是每次运行程序都需要录入信息再浏览,可以直接浏览以前运行程序时曾经录入的信息)3.信息录入功能:此处为信息录入功能菜单界面,简洁清新。此处为录入功能工作界面,按照提示输入相应数据即可成功录入此处为录入成功后,录入结束界面(每一个功能结束界面均为这个)4.信息查询功能此处为信息查询功能,按照题目要求分两种查询功能:1.职工号查询;2.学历查询。两种功能的实现方式均为从文件中读取信息再与输入信息对比,一致即将信息输出到屏幕。最后调用END函数,选择后续操作。5.信息删除功能如上图,每次执行删除功能前,都会将信息从文件中读取出来并输出到屏幕,以便于用户选择所需删除的信息。如上图,输入想要删除的职工信息之后,成功搜索后输出此人信息并询问用户是否需要删除此人信息:确定后执行删除功能。如上图,删除功能执行后,将信息删除后的信息输出屏幕,此后询问用户是否需要继续删除,需要即重复删除功能操作,不需要则调用END函数选择后续操作。6.信息修改功能如上图,与删除功能一致,执行功能前将所有信息输出屏幕,以便用户选择其所需更改的职工信息如上图,找到此人信息后,询问是否确定修改:否,则选择重新修改或是返回主菜单;确定修改则再次进行功能选择:1.整体修改 2.单个修改如上图,此处为整体修改功能界面,只需按照文字提示即可顺利操作如上图,此处为单个修改界面,每次修改只能修改一个选项。如上图,此处为单个修改修改后效果,只将工号改变7.退出界面最后表达感谢以及留下联系方式。注:由于电脑问题,程序不能全屏显示,因此上述截图中的电话号码没有空间输出,自动换行到第二行。正常情况下是不会出现的。五、结论与心得1.变量定义、命名:最初进行设计时,出错最多的地方是每一个函数变量的定义,因为函数较多,而我也从未进行过这样的程序设计,导致局部变量,全局变量方面有些许混乱,再加上对变量的命名,将我弄得焦头烂额。解决方法:在将程序大体上编写好后,重新仔细阅读了课本在这方面的知识,对变量进行了一定程度上的规范,解决了这上面的问题。2.文件的建立、存储、读取:在拿到课设题目的时候,便发现基本上大多数题目都需要将信息储存到文件中,当初我的内心是崩溃的,因为并没有学习过这方面的内容,据说文件还是C语言的精髓之一。只好乖乖地拿起书本,将这方面的内容浏览一遍。一遍遍地试,虽然对文件还是一知半懂,但也终于可以实现文件的建立,存储、读取功能了。3.信息录入功能 这一点也许并不算是难点,但在程序运行初期,这个功能每次录入的时候会将之前录入的信息覆盖掉,而不是更新。考虑到程序的实用性,显然这样的功能是不符合要求的,于是对其进行了更改,还是改了一下控制条件,便实现了我想要的功能:每次录入都是新增,而不是覆盖。我称之为神奇的条件。4.数据体结构定义刚开始的定义,对职工编号、电话号码等数据定义的是长整型,后来却发现因为职工编号(测试时我输入的是学号,有10位)、电话号码过长,已超出长整型数据的范围。这里给予我警醒:在以前的C语言学习过程中,我总是忽略了这些数据范围大小,认为记这些并没有什么用,在课设时才意识到,这一点也是不可忽略的!随后我便将这些数据定义为字符串数组,顺利解决了这个问题。5.信息忘记修改比如说,在第三点更改数据类型后,将后面的一些相应点修改后,却依然有漏改的:如信息查询时,整型与字符串的比较方式不一样,此处漏改将会导致程序出错。至今未能有较好的改正方法,只能更加细心,或修改前将所需要修改的点罗列出来。6.对条件的控制在这样一个比较大(在我这样的初学者看来)的程序中,对某些条件的控制出错可谓是致命的,因为编译并不会出错,而程序运行结果却会偏离预想轨道,发现错误难度大大提高。我便是在职工信息查询功能职工姓名查询中,久久发现不了错误,就是一直查找不成功,后来经过多次检查才发现是条件控制少了个“等于号”。解决方案,只能是在进行条件控制时加倍留心,力争不出错。7.画面界面设置 作为一个应用程序,界面必须好看具有较强可读性,否则实用性不强。在做清屏功能时,也有想过每做一步自动清屏,但根据用户需要,有时候需要查阅前面的操作,因此,最终选择的是手动清屏功能,适合不同的需求。 此外,在进行信息输出到屏幕时,往往会因为长度不够,出现不对齐的现象,这个问题困扰我比较久,最后通过长度规定,一个一个尝试,试出比较适合的一个长度,实现了对齐输出。 8.程序模块化设计此处课程设计,最大的收获可能便是模块化设计,将程序分为一块一块的函数,便于浏览,思路清晰,简洁明了,修改方便,也可以减少程序代码行数,降低了程序的复杂度,使程序设计、调试和维护等操作简单化9.未完成的想法界面还可以更加优美,同学中还有能改变背景色的,我也希望可以这样做。程序中有很多重复的地方(可直接用函数调用),比如说在删除、修改功能中的删除修改前的信息展示,可直接调用信息显示函数;但在查询功能中,由于在一些文字解释上面的需要或者是功能特别要求,不能直接套用,需要做一些修改。这是我觉得比较不好的地方,想要改,但其他课程的压力实在有些大,找不出时间好好想想怎么修改。用链表储存信息。现在的这个程序采用的是数组储存信息,在删除、修改功能上并没有链表方便,但想要采用链表时,程序已经写完了一半,如果重新采用链表,就需要重写程序,留下了一个遗憾。另外,课上学习的链表内容我也没有完全掌握,似懂非懂,也希望能够在寒假的时候好好看看,确实学会C语言。多项修改功能。该程序已有整体修改功能以及单个修改功能,但在实际应用中,可能还需要实现多项修改功能,比如同时修改两项等等。这个想法一闪而过,我也并没有在上面研究研究,时间确实不够。六、源代码清单 #include #include #include struct inf 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(文件写入错误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();55 printf(工号ttt姓名ttt性别ttt年龄nn);56 for(t=0;ti;t+)57 printf(%-12stt%-12stt%-12stt%-12dnn,membert.no,,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.addr,membert.telno);6162 63 void del()64 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(,name)=0)77 78 printf(恭喜您找到此人,ta的信息如下:nn);79 printf(工号ttt姓名ttt性别ttt年龄nn);80 printf(%-12stt%-12stt%-12stt%-12dnn,memberi.no,,memberi.sex,memberi.age);81 printf(工资ttt学历ttt地址ttt手机号码nn);82 printf(%-12ldtt%-12stt%-12stt%-12snn,memberi.wages,,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+1.name);92 strcpy(memberj.sex,memberj+1.sex);93 memberj.age=memberj+1.age;94 memberj.wages=memberj+1.wages;95 strcpy(,memberj+1.edu);96 strcpy(memberj.addr,memberj+1.addr);97 strcpy(memberj.telno,memberj+1.telno);98 99 judge=0;100 101 else102 103 printf(请选择您接下来想要做的:n1.返回主菜单t2.重新执行删除功能n);104 fflush(stdin);105 scanf(%d,&cmd2);106 if(cmd2=1)107 main();108 else109 del();110 111 112 113 if(!judge!=0)114 m=m-1;115 else116 117 printf(对不起,查无此人nn);118 printf(请选择您接下来想要做的:n1.返回主菜单t2.重新输入n);119 fflush(stdin);120 scanf(%d,&cmd2);121 if(cmd2=1)122 main();123 else124 del();125 126 printf(下面为删除信息后所有职工信息:nn);127 save(m);128 show();129 printf(请问您要继续删除吗?n1.是t2.不需要n);130 fflush(stdin);131 scanf(%d,&t);132 switch(t)133 134 case(1):del();break;135 case(2):break;136 137 138 void change()139 140 char no11;141 char name18;142 char sex5;143 int age;144 long wages;145 char edu12;146 char addr40;147 char telno12;148 int a,b,c=0,i,n,t,judge;149 int m=load();150 printf(以下为系统中已存在的职工信息:nn);151 show();152 printf(n);153 printf(请输入您想要修改的职工的姓名:n);154 fflush(stdin);155 scanf(%s,name);156 for(judge=1,i=0;judge&im;i+)157 158 if(strcmp(,name)=0)159 160 printf(恭喜您找到此人,ta的信息如下:nn);161 printf(工号ttt姓名ttt性别ttt年龄nn);162 printf(%-12stt%-12stt%-12stt%-12dnn,memberi.no,,memberi.sex,memberi.age);163 printf(工资ttt学历ttt地址ttt手机号码nn);164 printf(%-12ldtt%-12stt%-12stt%-12snn,memberi.wages,,memberi.addr,memberi.telno);165 printf(您确定要修改此人信息吗?n1.确定t2.不修改n);166 fflush(stdin);167 scanf(%d,&n);168 if(n=1)169 170 printf(请问你需要进行整体修改还是单个修改?n请选择:1.整体修改t2.单个修改n);171 fflush(stdin);172 scanf(%d,&a);173 switch(a)174 175 case(1):printf(整体修改:n请您按以下顺序进行整体修改输入:nn);176 printf(工号t姓名t性别t年龄t工资t学历t地址t手机号码nn);177 fflush(stdin);178 scanf(%s%s%s%d%ld%s%s%s,&memberi.no,memberi.n

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论