c语言职工信息管理系统设计(编辑修改稿)内容摘要:

trcpy(member[j].telno,member[j+1].telno)。 36. } 37. judge=0。 38. } 39. else 40. { 41. printf(请选择您接下来想要做的 :\菜单 \ \n)。 42. fflush(stdin)。 43. scanf(%d,amp。 cmd2)。 44. if(cmd2==1) 45. main()。 46. else 47. del()。 48. } 49. } 50. } 51. if(!judge!=0) 52. m=m1。 53. else 54. { 55. printf(对不起,查无此人 \n\n)。 56. printf(请选择您接下来想要做的 :\ \新输入 \n)。 57. fflush(stdin)。 58. scanf(%d,amp。 cmd2)。 59. if(cmd2==1) 60. main()。 61. else 62. del()。 63. } 64. printf(下面为删除信息后所有职工信息: \n\n)。 65. save(m)。 66. show()。 67. printf(请问您要继续删除吗。 \ \ \n)。 68. fflush(stdin)。 69. scanf(%d,amp。 t)。 70. switch(t) 71. { 72. case(1):del()。 break。 73. case(2):break。 74. } 75. } 四、 程序运行结果测试与分析 菜单界面 : 菜单简洁明了,不失美观,为方便用户使用,提供手动清屏功能( 9) : 该功能可实现从文件中读取信息并打印到屏幕上,信息对称具有一定可读性。 (并不是每次运行程序都需要录入信息再浏览,可以直接浏览以前运行程序时曾经录入的信息) : 此处为信息录入功能 菜单界面,简洁清新。 此处为录入功能工作界面,按 照提示输入相应数据即可成功录入 此处为录入成功后,录入结束界面(每一个功能结束界面均为这个) 此处为信息查询功能,按照题目要求分两种查询功能: 查询;。 两种功能的实现方式均为从文件中读取信息再与输入信息对比,一致即将信息输出到屏幕。 最后调用 END函数,选择后续操作。 如上图,每次执行删除功能前,都会将信息从文件中读取出来并输出到屏幕,以便于用户选择所需删除的信息。 如上图,输入想要删除的职工信息之后,成功搜索后输出此人信息并询问 用户是否需要删除此人信息:确定后执行删除功能。 如上图,删除功能执行后,将信息删除后的信息输出屏幕,此后询问用户是否需要继续删除,需要即重复删除功能操作,不需要则调用 END 函数选择后续操作。 如上图,与删除功能一致,执行功能前将所有信息输出屏幕,以便用户选择其所需更改的职工信息 如上图,找到此人信息后,询问是否确定修改:否,则选择重新修改或是返回主菜单;确定修改则再次进行功能选择: 改 如上图,此处为整体修改功能界面 ,只需按照文字提示即可顺利操作 如上图,此处为单个修改界面,每次修改只能修改一个选项。 如上图,此处为单个修改修改后效果,只将工号改变 最后表达感谢以及留下联系方式。 注:由于电脑问题,程序不能全屏显示,因此上述截图中的电话号码没有空间输出,自动换行到第二行。 正常情况下是不会出现的。 五、结论与心得 、命名 : 最初进行设计时,出错最多的地方是每一个函数变量的定义,因为函数较多,而我也从未进行过这样的程序设计,导致局部变量,全局变量方面有些许混乱,再加上对变量的命名,将我 弄得焦头烂额。 解决方法:在将程序大体上编写好后,重新仔细阅读了课本在这方面的知识,对变量进行了一定程度上的规范,解决了这上面的问题。 、存储、读取: 在拿到课设题目的时候,便发现基本上大多数题目都需要将信息储存到文件中,当初我的内心是崩溃的,因为并没有学习过这方面的内容,据说文件还是 C 语言的精髓之一。 只好乖乖地拿起书本,将这方面的内容浏览一遍。 一遍遍地试,虽然对文件还是一知半懂,但也终于可以实现文件的建立,存储、读取功能了。 这一点也许并不算是难点 ,但在程序运行初期 ,这个功能每次录入的时候会将之前录入的信息覆盖掉,而不是更新。 考虑到程序的实用性,显然这样的功能是不符合要求的,于是对其进行了更改,还是改了一下控制条件,便实现了我想要的功能:每次录入都是新增,而不是覆盖。 我称之为神奇的条件。 刚开始的定义,对职工编号、电话号码等数据定义的是长整型,后来却发现因为职工编号(测试时我输入的是学号,有 10位)、电话号码过长,已超出长整型数据的范围。 这里给予我警醒:在以前的 C 语言学习过程中,我总是忽略了这些数据范围大小,认为记这些并没有什么用,在课设时才意识 到,这一点也是不可忽略的。 随后我便将这些数据定义为字符串数组,顺利解决了这个问题。 比如说,在第三点更改数据类型后,将后面的一些相应点修改后,却依然有漏改的:如信息查询时,整型与字符串的比较方式不一样,此处漏改将会导致程序出错。 至今未能有较好的改正方法,只能更加细心,或修改前将所需要修改的点罗列出来。 在这样一个比较大(在我这样的初学者看来)的程序中,对某些条件的控制出错可谓是致命的, 因为编译并不会出错,而程序运行结果却会偏离预想轨道,发现错误难度大大提高。 我便是在职工 信息查询功能 —职工姓名查询中,久久发现不了错误,就是一直查找不成功,后来经过多次检查才发现是条件控制少了个“等于号”。 解决方案,只能是在进行条件控制时加倍留心,力争不出错。 作为一个应用程序,界面必须好看具有较强可读性,否则实用性不强。 在做清屏功能时,也有想过每做一步自动清屏,但根据用户需要,有时候需要查阅前面的操作,因此,最终选择的是手动清屏功能,适合不同的需求。 此外,在进行信息输出到屏幕时,往往会因为长度不够,出现不对齐的现象,这个问题困扰我比较久,最后通过长度规定 ,一个一个尝试,试出比较适合的一个长度,实现了对齐输出。 此处课程设计,最大的收获可能便是模块化设计,将程序分为一块一块的函数,便于浏览,思路清晰,简洁明了,修改方便,也可以减少程序代码行数,降低了程序的复杂度,使程序设计、调试和维护等操作简单化 ①界面还可以更加优美,同学中还有能改变背景色的,我也希望可以这样做。 ② 程序中有很多重复的地方(可直接用函数调用),比如说在删除、修改功能中的删除修改前的信息展示,可直接调用信息显示函数;但在查询功能中,由于在一些文 字解释上面的需要或者是功能特别要求,不能直接套用,需要做一些修改。 这是我觉得比较不好的地方,想要改,但其他课程的压力实在有些大,找不出时间好好想想怎么修改。 ③ 用链表储存信息。 现在的这个程序采用的是数组储存信息,在删除、修改功能上并没有链表方便,但想要采用链表时,程序已经写完了一半,如果重新采用链表,就需要重写程序,留下了一个遗憾。 另外,课上学习的链表内容我也没有完全掌握,似懂非懂,也希望能够在寒假的时候好好看看,确实学会 C 语言。 ④多项修改功能。 该程序已有整体修改功能以及单个修改功能,但在实际应用中,可能 还需要实现多项修改功能,比如同时修改两项等等。 这个想法一闪而过,我也并没有在上面研究研究,时间确实不够。 六、源代码清单 ① include ② include ③ include ④ struct inf ⑤ { ⑥ char no[11]。 ⑦ char name[18]。 ⑧ char sex[5]。 ⑨ int age。 ⑩ long wages。 ⑪ char edu[20]。 ⑫ char addr[40]。 ⑬ char telno[11]。 ⑭ }member[100]。 ⑮ 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(amp。 member[i],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 else 40 { 41 do 42 { 43 fread(amp。 member[i],sizeof(struct inf),1,fp)。 44 i++。 45 } 46 while(feof(fp)==0)。 47 } 48 fclose(fp)。 49 return(i1)。 50 } 51 void show() 52 { 53 int t。 54 int i=load()。 55 printf(工号 \t\t\t 姓名 \t\t\t性别 \t\t\t 年龄 \n\n)。 56 for(t=0。 ti。 t++) 57 printf(%12s\t\t%12s\t\t%12s\t\t%12d\n\n,member[t].no,member[t].name,member[t].sex,member[t].age)。 58 printf(工资 \t\t\t 学历 \t\t\t地址 \t\t\t 手机号码 \n\n)。 59 for(t=0。 ti。 t++) 60 printf(%12ld\t\t%12s\t\t%12s\t\t%12s\n\n,member[t].wages,member[t].edu,member[t].addr,member[t].telno)。 61 62 } 63 void del() 64 { 65 int m=load()。 66 int i,j,n,t,judge。 67 char name[18]。 68 printf(以下为系统中已存在的职工信息: \n\n)。 69 show()。 70 printf(\n)。 71 printf(请输入您想要删除的职工的姓名: \n)。 72 fflush(stdin)。 73 scanf(%s,name)。 74 for(judge=1,i=0。 judgeamp。 amp。 im。 i++) 75 { 76 if(strcmp(member[i].name,name)==0) 77 { 78 printf(恭喜您找到此人, ta的信息如下: \n\n)。 79 printf(工号 \t\t\t姓名 \t\t\t性别 \t\t\t年龄 \n\n)。 80 printf(。
阅读剩余 0%
本站所有文章资讯、展示的图片素材等内容均为注册用户上传(部分报媒/平媒内容转载自网络合作媒体),仅供学习参考。 用户通过本站上传、发布的任何内容的知识产权归属用户或原始著作权人所有。如有侵犯您的版权,请联系我们反馈本站将在三个工作日内改正。