c语言职工信息管理系统设计共24页.docx
- 文档编号:9335557
- 上传时间:2023-02-04
- 格式:DOCX
- 页数:28
- 大小:26.80KB
c语言职工信息管理系统设计共24页.docx
《c语言职工信息管理系统设计共24页.docx》由会员分享,可在线阅读,更多相关《c语言职工信息管理系统设计共24页.docx(28页珍藏版)》请在冰豆网上搜索。
c语言职工信息管理系统设计共24页
程序设计基础课程设计
死记硬背是一种传统的教学方式,在我国有悠久的历史。
但随着素质教育的开展,死记硬背被作为一种僵化的、阻碍学生能力发展的教学方式,渐渐为人们所摒弃;而另一方面,老师们又为提高学生的语文素养煞费苦心。
其实,只要应用得当,“死记硬背”与提高学生素质并不矛盾。
相反,它恰是提高学生语文水平的重要前提和基础。
题目名称:
职工信息管理系统设计
语文课本中的文章都是精选的比较优秀的文章,还有不少名家名篇。
如果有选择循序渐进地让学生背诵一些优秀篇目、精彩段落,对提高学生的水平会大有裨益。
现在,不少语文教师在分析课文时,把文章解体的支离破碎,总在文章的技巧方面下功夫。
结果教师费劲,学生头疼。
分析完之后,学生收效甚微,没过几天便忘的一干二净。
造成这种事倍功半的尴尬局面的关键就是对文章读的不熟。
常言道“书读百遍,其义自见”,如果有目的、有计划地引导学生反复阅读课文,或细读、默读、跳读,或听读、范读、轮读、分角色朗读,学生便可以在读中自然领悟文章的思想内容和写作技巧,可以在读中自然加强语感,增强语言的感受力。
久而久之,这种思想内容、写作技巧和语感就会自然渗透到学生的语言意识之中,就会在写作中自觉不自觉地加以运用、创造和发展。
姓名赵家振
课本、报刊杂志中的成语、名言警句等俯首皆是,但学生写作文运用到文章中的甚少,即使运用也很难做到恰如其分。
为什么?
还是没有彻底“记死”的缘故。
要解决这个问题,方法很简单,每天花3-5分钟左右的时间记一条成语、一则名言警句即可。
可以写在后黑板的“积累专栏”上每日一换,可以在每天课前的3分钟让学生轮流讲解,也可让学生个人搜集,每天往笔记本上抄写,教师定期检查等等。
这样,一年就可记300多条成语、300多则名言警句,日积月累,终究会成为一笔不小的财富。
这些成语典故“贮藏”在学生脑中,自然会出口成章,写作时便会随心所欲地“提取”出来,使文章增色添辉。
学号0906150207
专业信息安全
班级信安1502
指导教师冯启龙
编写日期2019/12/20
一、需求分析
1.选题
题目一:
职工信息管理系统设计
职工信息包括职工号、姓名、性别、年龄、学历、工资、住址、电话等(职工号不重复)。
试设计一职工信息管理系统,使之能提供以下功能:
1、系统以菜单方式工作
2、职工信息录入功能(职工信息用文件保存)--输入
3、职工信息浏览功能--输出
4、职工信息查询功能--算法
查询方式
按学历查询等
按职工号查询等
5、职工信息删除、修改功能
2.题目分析
该职工信息管理系统包括以下几个功能:
①信息录入
②信息浏览
③信息查询
④信息修改
⑤信息删除
据此,该系统应至少构建以下函数:
①信息录入函数
②信息输出函数
③信息查找函数
④信息更改函数
⑤信息删除函数
五大功能对应五大函数,便于编写出规划的模块化程序。
此外,题目要求以菜单方式工作、职工信息用文件保存,同时程序应满足美观以及使用简单方便的要求,构建下列函数:
⑥菜单函数(包括几个子菜单函数)
⑦信息储存函数
⑧信息读取函数
⑨系统终止函数
需要成功编写上述函数,主要需要突破以下难点:
①利用结构体类型保存职工信息
②将职工信息保存在文件中
③将职工信息从文件中读取出来
④信息成功录入(每次录入都是新增)
⑤结构体变量成员的引用
⑥strcmp函数的使用(成功搜索所需信息,用于查找、更改、删除等功能)
⑦数组信息的删除
⑧菜单循环功能
⑨系统界面、文字、注释优化,信息对齐输出
二、总体设计
1.基本思路:
如流程图(简略)所示:
系统基本思路为:
将不同功能模块化,分别调用相应函数进行设计,使程序代码清晰易读,设计思路清晰明了。
系统分为5大功能:
录入、浏览、查询、删除、更改功能。
1录入功能:
调用录入函数,信息储存、读取函数:
利用for循环,对信息进行录入(新增),并保存到文件中;
2浏览功能:
调用浏览函数:
利用for循环,简单地对已有职工信息进行打印,并做到输出界面美观,可读性强的效果;
3查询功能:
调用查询函数、信息读取函数:
拥有两种功能1.按职工号查询信息2.按姓名查询信息;
4删除功能:
调用删除函数,信息储存、读取函数:
将文件中的信息读取出并删除,之后保存新信息
5更改功能:
调用更改函数,信息储存、读取函数:
具有两种功能1.整体修改信息2.局部修改信息
三、详细设计
(一)信息储存函数:
1.voidsave(intm)
2.inti;
3.FILE*fp;
4.if((fp=fopen("职工名单.txt","wb"))==NULL)
5.printf("文件打开错误\n");
6.exit(0);
7.for(i=0;i 8.if(fwrite(&member[i],sizeof(structinf),1,fp)! =1) 9.printf("文件写入错误\n"); 10.fclose(fp); 函数功能: 将信息存储到文件中 (二)信息读取函数: 1.intload() 2.FILE*fp; 3.inti=0; 4.if((fp=fopen("职工名单.txt","rb"))==NULL) 5.printf("文件打开失败\n"); 6.exit(0); 7.else 8.do 9.fread(&member[i],sizeof(structinf),1,fp); 10.i++; 11.while(feof(fp)==0); 12.fclose(fp); 13.return(i-1); 函数功能: 将储存在文件中的信息读入程序中,返回已有信息量的值 (三)信息展示函数: 1.voidshow() 2.intt; 3.inti=load(); 4.printf("工号\t\t\t姓名\t\t\t性别\t\t\t年龄\n\n"); 5.for(t=0;t 6.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); 7.printf("工资\t\t\t学历\t\t\t地址\t\t\t手机号码\n\n"); 8.for(t=0;t 9.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); 函数功能: 简单地将存储在文件中的信息打印在屏幕上 (四)信息查找函数: 1.voidfunc3() 2.intt,a,cmd3; 3.inti=load(); 4.charno[11]; 5.charedu[20]; 6.Menu3(); 7.fflush(stdin); 8.scanf("%d",&cmd1); 9.show(); 10.switch(cmd1) 11.case(0): main(); 12.case (1): 13.printf("请输入您想要查找的职工号: \n"); 14.fflush(stdin); 15.scanf("%s",no); 16.for(t=0;t 17.{if(strcmp(member[t].no,no)==0) 18.printf("恭喜你查找到结果: \n\n"); 19.printf("工号\t\t\t姓名\t\t\t性别\t\t\t年龄\n\n"); 20.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); 21.printf("工资\t\t\t学历\t\t\t地址\t\t\t手机号码\n\n"); 22.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); 23.else{ 24.printf("对不起,您的输入有误。 \n\n请您选择接下来的操作: \n1.重新输出\t2.返回上一级菜单\t3.终止程序\n"); 25.fflush(stdin); 26.scanf("%d",&cmd3); 27.switch(cmd3) 28.case (1): func3(); 29.case (2): Menu(); 30.case(3): printf("感谢您使用本系统,您如有对本团队的不满或建议,请致电123456789,谢谢! \n"); 31.exit(0); 32.}break; 33.case (2): 34.printf("请输入您想要要查找的学历: \n"); 35.fflush(stdin); 36.scanf("%s",edu); 37.for(a=0;a 38.{if(strcmp(member[a].edu,edu)==0) 39.printf("恭喜你查找到结果: \n\n"); 40.printf("工号\t\t\t姓名\t\t\t性别\t\t\t年龄\n\n"); 41.printf("%-12s\t\t%-12s\t\t%-12s\t\t%-12d\n\n",member[a].no,member[a].name,member[a].sex,member[a].age); 42.printf("工资\t\t\t学历\t\t\t地址\t\t\t手机号码\n\n"); 43.printf("%-12ld\t\t%-12s\t\t%-12s\t\t%-12s\n\n",member[a].wages,member[a].edu,member[a].addr,member[a].telno); 44.else{ 45.printf("对不起,您的输入有误。 \n\n请您选择接下来的操作: \n1.重新输入\t2.返回上一级菜单\t3.终止程序\n"); 46.fflush(stdin); 47.scanf("%d",&cmd3); 48.switch(cmd3) 49.case (1): func3(); 50.case (2): main(); 51.case(3): printf("感谢您使用本系统,您如有对本团队的不满或建议,请致电123456789,谢谢! \n"); 52.exit(0); 53.}break; 54.}End(); 函数名字说明: 函数为菜单3(信息查询)所需功能,故为func3 函数功能说明: 1.输入职工号查找信息2.输入姓名查找信息 (五)信息删除函数 1.voiddel() 2.intm=load(); 3.inti,j,n,t,judge; 4.charname[18]; 5.printf("以下为系统中已存在的职工信息: \n\n"); 6.show(); 7.printf("\n"); 8.printf("请输入您想要删除的职工的姓名: \n"); 9.fflush(stdin); 10.scanf("%s",name); 11.for(judge=1,i=0;judge&&i 12.if(strcmp(member[i].name,name)==0) 13.printf("恭喜您找到此人,ta的信息如下: \n\n"); 14.printf("工号\t\t\t姓名\t\t\t性别\t\t\t年龄\n\n"); 15.printf("%-12s\t\t%-12s\t\t%-12s\t\t%-12d\n\n",member[i].no,member[i].name,member[i].sex,member[i].age); 16.printf("工资\t\t\t学历\t\t\t地址\t\t\t手机号码\n\n"); 17.printf("%-12ld\t\t%-12s\t\t%-12s\t\t%-12s\n\n",member[i].wages,member[i].edu,member[i].addr,member[i].telno); 18.printf("您确定要删除此人信息吗? \n1.确定\t2.不删除\n"); 19.fflush(stdin); 20.scanf("%d",&n); 21.if(n==1) 22.for(j=i;j 23.strcpy(member[j].no,member[j+1].no); 24.strcpy(member[j].name,member[j+1].name); 25.strcpy(member[j].sex,member[j+1].sex); 26.member[j].age=member[j+1].age; 27.member[j].wages=member[j+1].wages; 28.strcpy(member[j].edu,member[j+1].edu); 29.strcpy(member[j].addr,member[j+1].addr); 30.strcpy(member[j].telno,member[j+1].telno); 31.judge=0; 32.else 33.printf("请选择您接下来想要做的: \n1.返回主菜单\t2.重新执行删除功能\n"); 34.fflush(stdin); 35.scanf("%d",&cmd2); 36.if(cmd2==1) 37.main(); 38.else 39.del(); 40.if(! judge! =0) 41.m=m-1; 42.else 43.printf("对不起,查无此人\n\n"); 44.printf("请选择您接下来想要做的: \n1.返回主菜单\t2.重新输入\n"); 45.fflush(stdin); 46.scanf("%d",&cmd2); 47.if(cmd2==1) 48.main(); 49.else 50.del(); 51.printf("下面为删除信息后所有职工信息: \n\n"); 52.save(m); 53.show(); 54.printf("请问您要继续删除吗? \n1.是\t2.不需要\n"); 55.fflush(stdin); 56.scanf("%d",&t); 57.switch(t) 58.case (1): del();break; 59.case (2): break; 四、程序运行结果测试与分析 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语言。 ④多项修改功能。 该程序已有整体修改功能以及单个修改功能,但在实际应用中,可能还需要实现多项修改功能,比如同时修改两项等等。 这个想法一闪而过,我也并没有在上面研究研究,时间确实不够。 六、源代码清单 1#include 2#include 3#include 4structinf 5charno[11]; 6charname[18]; 7charsex[5]; 8intage; 9longwages; 10charedu[20]; 11charaddr[40]; 12chartelno[11]; 13}member[100]; 14intcmd1,cmd2; 15voidsave(intm) 16inti; 17FILE*fp; 18if((fp=fopen("职工名单.txt","wb"))==NULL) 19printf("文件打开错误\n"); 20exit(0); 21for(i=0;i 22if(fwrite(&member[i],sizeof(structinf),1,fp)! =1) 23printf("文件写入错误\n"); 24fclose(fp); 25intload() 26FILE*fp; 27inti=0; 28if((fp=fopen("职工名单.txt","rb"))==NULL) 29printf("文件打开失败\n"); 30exit(0); 31else 32do 33fread(&member[i],sizeof(structinf),1,fp); 34i++; 35while(feof(fp)==0); 36fclose(fp); 37return(i-1); 38voidshow() 39intt; 40inti=load(); 41printf("工号\t\t\t姓名\t\t\t性别\t\t\t年龄\n\n"); 42for(t=0;t 43printf("%-12s\t\t%-12s\t\t%-12s\t\t%-12d\n\n",member[t].no,member[t].name,member[t].sex,member[t].age);
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 语言 职工 信息管理 系统 设计 24