职工信息管理系统设计说明书

上传人:re****.1 文档编号:513657668 上传时间:2022-07-28 格式:DOC 页数:59 大小:694.01KB
返回 下载 相关 举报
职工信息管理系统设计说明书_第1页
第1页 / 共59页
职工信息管理系统设计说明书_第2页
第2页 / 共59页
职工信息管理系统设计说明书_第3页
第3页 / 共59页
职工信息管理系统设计说明书_第4页
第4页 / 共59页
职工信息管理系统设计说明书_第5页
第5页 / 共59页
点击查看更多>>
资源描述

《职工信息管理系统设计说明书》由会员分享,可在线阅读,更多相关《职工信息管理系统设计说明书(59页珍藏版)》请在金锄头文库上搜索。

1、*实践教学* 兰州理工大学计算机与通信学院2011年秋季学期面向对象课程设计题 目:职工信息管理系统专业班级:计算机科学与技术姓 名: 钱晓栋 学 号:10240438指导教师: 朱红蕾 成 绩: 目录一、 需求分析3二、 总体设计4三、 详细设计5四、 编码10五、 调试21六、 设计总结24致谢25参考文献26一、需求分析一、课程设计目的通过亲自设计程序,可以令我们熟悉c语言操作,更熟练的掌握c语句。初步体会编程的过程,为将来的程序深入学习打下基础和培养兴趣。二、设计题目分析21 题目简介可以向文件中写入、删除、添加职工信息,也可以从文件中导出来浏览22 设计要求职工信息主要包括职工号、姓

2、名、性别、年龄、学历、工资、住址、电话等(职工号不重复)。三、系统概要设计系统以菜单方式工作1.职工信息录入功能(职工信息用文件保存)输入2.职工信息浏览功能 输出3.查询和排序功能:(至少一种查询方式) 算法 按职工号查询 按学历查询等4.职工信息删除、添加功能5.面向公司所有员工 二、总体设计总流程图:职工信息管理系统职工信息输入职工信息浏览退出职工信息查找、排序按照此总体设计方案,快速而简洁的设计出职工信息管理系统的源代码程序。三、详细设计32 详细设计: 、主函数:main() 显示系统工作菜单,罗列该系统所有功能。先声明所有将会调用到的函数名。再运用选择函数switch即可根据使用者

3、所输入的功能代号进入对应的功能程序。亮点:定义一个全局指针变量*p和全局变量。其中表示当前系统中职工人数,指向的地址,追踪人数变化,这样在添加或者删除导致人数变化后,浏览函数display()能够正确显示出当前人数的职工信息。宏定义define N指定首次输入的职工人数,可根据不同需要随时更改。 、保存函数:void save(int m) 定义文件指针,用只写打开指定在盘的“d:/bbb.txt”文本文件。首先用语句判断文件是否打开成功,若返回值不为,则可继续下面操作。用循环通过语句将结构数组中的内容写入保存在盘的文本文件里面。形参m指需要写入文件的职工人数。最后关闭文件。4、导出函数:vo

4、id load(int b) 首先判断fopen只读打开“d:/bbb.txt”是否成功,若其返回值不为零,继续下面操作。用for循环通过fscanf语句将文件中的职工信息取出放到em结构数组里面。形参b指需要导出的职工人数。最后关闭文件。5、浏览函数void display(int a)8、按姓名查询void search_name() 声明整形变量i和字符形数组name20,调用导出函数load(*p),用scanf语句输入要查询的职工名字(字符串)放在数组name里面。用for循环,循环主体是先判断em.name中是否有输入的职工姓名,如果有,用printf语句输出与职工名字相对应的该职

5、工所有信息,再跳出循环;如果没有,输出“查无此人”,并调用search()返回查询菜单。流程图同上9、按学历查询void search_xueli() 声明整形变量i,k=0,char形数组xueli20。调用导出函数load(*P),用scanf语句输入要查询的职工学历(字符串)放在数组xueli里面。考虑到与前两种查询方式不一样的是,可能有多个职工具有相同的学历,所以循环主体较之前稍有变化。即在判断并执行第一次后不用break,而是继续循环,直到找出所有该学历的职工。为解决输入错误而提示“查无此人”的问题,就需要再写一段for循环代码,通过计量数k记录循环的次数,若直到循环到最后一次仍无结

6、果输出,则表示输入错误,这时用printf输出“查无此人”,并调用search()返回查询菜单。流程图同上10、,删除函数void del(int *b)声明整形变量i,j,t,m,a和char形数组name20。其中给a附初始值a=*b,表示当前职工人数。首先调用浏览函数display(a),显示所有职工信息,便于使用者审阅需删除的对象。用printf语句提示“输入要删除的职工名字”,接着用scanf语句输入删除对象名字。用for循环,循环主体是先判断em.name中是否存在所输入的名字(调用字符串比较函数stecmp)。若存在,printf语句提示是否确认删除,用scanf语句输入确认指令

7、,再用for循环从要删除的这个职工开始,依次用后一个职工的信息覆盖前一个的。循环结束后当前职工人数a自减1,并保存,跳出大循环;若不存在,输出“输入错误,无此人”。再将a的新值附给*b,实参p所指的人数地址中的人数也随即改变删除后的人数。printf提示下一步操作“继续删除请按1n浏览信息请按2n返回主菜单请按3”。switch根据键盘输入的指令代号选择下一步连接的函数。11、添加函数void add(int *a) 声明整形变量i,n,m,定义文件指针fp,用追加的方式打开文件d:/bbb.txt,若打开失败,退出。若成功,继续下面操作。printf提示“输入要添加的人数”scanf输入要添

8、加的人数存放在n。用for循环输入要添加的职工信息,再用另一个for循环将输入的新信息追加写入d:/bbb.txt文件保存。关闭文件。再调用switch语句选择下一步操作,并连接到相应函数。 流程图与删除函数类似。修改文件的打开方式,不能运行。经多次检查后终于发现了,解决:将只写w改为只读r。2是用fscanf语句时,漏写地址符。调试和链接都没问题,但点击运行后,总出现一个提示出错的蓝色小窗口。经老师提时候发现了错误所在。解决:在emi.name等之前加上地址符。3、浏览函数display()遇到的问题虽然不大,但解决起来很麻烦。理想的运行结果是美观整齐。即下面的职工信息分别与第一个print

9、f输出的中文项目提示对齐。解决方法:不断修改空格个数,不断运行察看效果。4、按学历查询函数search_xueli(),要考虑输入一种学历,可能对应出很多职工,这就不能延用按姓名和职工号查询中判断是否输入错误的方法了。为了显示出所有具有该学历的职工,就需要让for循环一直运行到最后一个为止。这时计量数i始终会等于职工人数,不能再用i来判断是否不存在此人。这就需要再定一个整形变量k,用来计量单独的一个循环次数。5、删除函数del()的难点在于多次删除。即在删除掉第一个人以后,现有职工人数发生改变,而宏定义中的N却是不变的。最开始我想到了用static定义一个整形变量a来计量当前人数。这在单独运行

10、删除函数时,可以成功的连续删除。最后所有函数串在一起时,有了更好的解决方法,全局指针。6、添加函数add()遇到的问题是用printf输入新职工信息后,保存到文件里面,发现原有的信息不见了。解决:文件打开方式改用a追加写入。四、编码# include # include # include # include # include using namespace std;struct worker_inf int month; /月份 int code; /工人编号 string name; /姓名 float get4; /基本工资,津贴,房帖,交通补贴 float pay4; /房租,储蓄,

11、交通费,会费 float tax; /个人所得税 float theory_num; /应发书 float reduce_num; /应扣数 float practice_num; /实发数 worker_inf *next;/class worker /定义职工类private: worker_inf *head; void print(worker_inf *); /输出一条指定职工的工资记录,并返回该记录的指针 worker_inf *find(int); /查找条例条件的记录,并返回该记录的指针public: worker()head=NULL; worker_inf *get_hea

12、d()return head; int listcount(); /统计当前链表的记录总数,并返回一个整数 void additem(int month,int code,string name,float get4,float pay4); /添加一条工资记录表尾 void removeitem(int); /删除一条指定职工的工资记录 int menu(); /修改某职工工资的菜单 void changemonth(); /修改月份 void changeitem(int); /修改职工的工资信息 void list(); /输出当月全体职工的工资信息 void search(int); /输出指定编号职工的工资信息 float tax_num(); /计算职工个人所得税 float theorynumber(); /计算应发工资 float reducenumber(); /计算应扣工资 float practicenumber(); /计算实发工资;/int worker:listcount() /统计当前链表数,并返回一个整数 if(!head)return 0; worker_inf *p=head; int n=0; while(p) n+;p=p-next; return n;/

展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 办公文档 > 工作计划

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号