c语言职工信息管理系统
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
目录
一、课程设计目的 (3)
二、设计题目分析 (3)
题目简介 (3)
设计要求 (3)
三、课程设计内容 (3)
总体设计 (3)
详细设计 (4)
~
调试与测试 (12)
四、设计心得与总结: (13)
五、附录(完整源程序清单) (14)
《
(
…
一、课程设计目的
通过亲自设计程序,可以令我们熟悉c语言操作,更熟练的掌握c语句。初步体会编程的过程,为将来的程序深入学习打下基础和培养兴趣。
二、设计题目分析
2.1 题目简介
可以向文件中写入、删除、添加职工信息,也可以从文件中导出来浏览
2.2 设计要求
$
职工信息包括职工号、姓名、性别、年龄、学历、工资、住址、电话等(职工号不重复)。试设计职工信息管理系统,使之能提供以下功能:
系统以菜单方式工作。
职工信息录入功能(职工信息用文件保存)--输入
职工信息浏览功能--输出
查询和排序功能:(至少一种查询方式) --算法
按职工号查询
按学历查询等
职工信息删除、添加功能
'
三、课程设计内容
3.2 详细设计:
1、主函数:main()
(
显示系统工作菜单,罗列该系统所有功能。先声明所有将会调用到的函数名。再运用选择函数switch即可根据使用者所输入的功能代号进入对应的功能程序。亮点:定义一个全局指针变量*p和全局变量a。其中a表示当前系统中职工人数,p指向a的地址,追踪人数变化,这样在添加或者删除导致人数变化后,浏览函数display()能够正确显示出当前人数的职工信息。宏定义define N指定首次输入的职工人数,可根据不同需要随时更改。
)
3、保存函数:void save(int m)
)
定义文件指针fp,用fopen"只写"打开指定在D盘的“,若fopen返回值不为0,则可继续下面操作。用for循环通过fprintf语句将结构数组em中的内容写入保存在D盘的文本文件里面。形参m指需要写入文件的职工人数。最后关闭文件。
4、导出函数:void load(int b)
首先判断fopen"只读"打开“,若其返回值不为零,继续下面操作。用for循环通过fscanf 语句将文件中的职工信息取出放到em结构数组里面。形参b指需要导出的职工人数。最后关闭文件。
5、浏览函数void display(int a)
声明整形变量i和b,其中i记录输出的职工序数,b用来接收调用浏览函数时所传递过来的实参,接着将其值传递给导出函数load(b),使得导出的职工人数与浏览的职工人数保持一致。通过调用load函数后(即给em数组附值),用for循环输出每个职工的各种信息。
8、按姓名查询void search_name()
声明整形变量i和字符形数组name[20],调用导出函数load(*p),用scanf 语句输入要查询的职工名字(字符串)放在数组name里面。用for循环,循环主体是先判断中是否有输入的职工姓名,如果有,用printf语句输出与职工名字相对应的该职工所有信息,再跳出循环;如果没有,输出“查无此人”,并调用search()返回查询菜单。
流程图同上
9、按学历查询void search_xueli()
声明整形变量i,k=0,char形数组xueli[20]。调用导出函数load(*P),用scanf 语句输入要查询的职工学历(字符串)放在数组xueli里面。考虑到与前两种查询方式不一样的是,可能有多个职工具有相同的学历,所以循环主体较之前稍有变化。即在判断并执行第一次后不用break,而是继续循环,直到找出所有该学历的职工。为解决输入错误而提示“查无此人”的问题,就需要再写一段for循环代码,通过计量数k记录循环的次数,若直到循环到最后一次仍无结果输出,则表示输入错误,这时用printf输出“查无此人”,并调用search()返回查询菜单。
:
流程图同上
10、,删除函数void del(int *b)
声明整形变量i,j,t,m,a和char形数组name[20]。其中给a附初始值a=*b,表示当前职工人数。首先调用浏览函数display(a),显示所有职工信息,便于使用者审阅需删除的对象。用printf语句提示“输入要删除的职工名字”,接着用scanf 语句输入删除对象名字。用for循环,循环主体是先判断中是否存在所输入的名字(调用字符串比较函数stecmp)。若存在,printf语句提示是否确认删除,用scanf语句输入确认指令,再用for循环从要删除的这个职工开始,依次用后一个职工的信息覆盖前一个的。循环结束后当前职工人数a自减1,并保存,跳出大循环;若不存在,输出“输入错误,无此人”。再将a的新值附给*b,实参p所指的人数地址中的人数也随即改变删除后的人数。printf提示下一步操作“继续删除请按1\n浏览信息请按2\n返回主菜单请按3”。switch根据键盘输入的指令代号选择下一步连接的函数。
11、添加函数void add(int *a)
声明整形变量i,n,m,定义文件指针fp,用追加的方式打开文件"",若打开失败,退出。若成功,继续下面操作。printf提示“输入要添加的人数”
【
scanf输入要添加的人数存放在n。用for循环输入要添加的职工信息,再用另一个for循环将输入的新信息追加写入""文件保存。关闭文件。再调用switch语句选择下一步操作,并连接到相应函数。
流程图与删除函数类似。
3.3 调试与测试:。
遇到最大的问题是所有程序代码编完放在一起后,虽然能够成功运行,但使用时如果职工人数发生变化,会导致文件后部出现乱码。若要使每次运行都正常,必须在人数改变后退出程序,修改宏定义N的值。这样很不方便,不能够连续运行。为解决这一大问题,最后我想到了定义一个全局指针变量,用来追踪最新的人数。特别是删除和添加这两个会导致人数变化的函数中,全局指针变量p起了很大作用。经过一边修改一边调试,最终可