




已阅读5页,还剩32页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
数据结构数据结构 课程设计报告课程设计报告 设计题目设计题目 职工信息管理系统职工信息管理系统 专专 业业 班班 级级 姓姓 名名 学学 号号 完成日期完成日期 2 目目 录录 1 1 问题描述问题描述 3 3 2 2 系统设计系统设计 3 3 3 3 数据结构与算法描述数据结构与算法描述 5 5 4 4 测试结果与分析测试结果与分析 1515 5 5 总总 结结 2020 6 6 参考文献参考文献 2020 附录附录 程序源代码程序源代码 2020 3 职工信息管理系统职工信息管理系统 1 1 问题描述问题描述 试设计一个职工信息管理系统 要求可对职工信息进行插入 删除 查找 排序 输出等功能 职工对象包括编号 姓名 性别 出生年月 学历 工作 年月 基本工资 电话 家庭住址等等 2 2 系统设计系统设计 2 12 1 设计目标设计目标 随着计算机产业的不断发展和信息时代的到来 各个企业和部门对员工的 信息管理也已经走上了数字化的阶段 尤其是利用微机对工资的管理已经在各 个企业单位起着越来越多的作用 以前的财会人员完全是靠手写来完成员工的 各种记录 每天都忙碌于各种繁多的票据之间 这种工作繁重复杂 容易出错 不易修改 所以使用一个好的管理系统对减轻管理人员的工作量是很有帮助的 也是一个企业发展不可缺少的基础 它的开发应用简单而不失一般性 操作方 便 功能强大 系统化 规范化 自动化 而且经济使用的职工管理系统已经 成为了各个企业和部门离不开的电脑软件 本系统实现的操作和功能如下 1 职工信息表的建立 根据职工提供的信息 按单链表的方法建立职工信 息表 2 职工信息的添加 根据公司的需要 增加新的职工 必须把职工的基本 信息写入职工信息表 方便公司管理 3 职工信息的查询 根据公司需要 查找某一个职工的信息 可以按姓名 或编号查找 将都显示职工的全部信息 4 职工信息的修改 根据公司或职工需要 如果信息需要修改 可对职工 的人一个信息进行更改 5 职工信息的排序 根据公司需要 可对职工进行排序 6 职工信息的删除 根据公司需要 若职工不在公司工作 可对其信息删 除 以及时更新职工信息表 4 7 职工信息的输出 根据公司需要 若要浏览职工信息 可对职工的全部 信息输出 方便观看 2 22 2 设计思想设计思想 职工信息表用单链表作为存储结构 且为了查找方便 职工信息应有序 为了查找方便 职工的线性表按职工编号有序 并且 为了插入和删除方便 应以链表作为存储结构 通过 c 使系统实现建表 增加信息 删除信息 查找信息 排序 输出等功能 而且提供一个界面来调用各个功能 并使界面 尽可能清晰美观 2 32 3 系统模块划分系统模块划分 菜单界面 建立职工信息表 职工信息的添加 职工信息的查询 职工信息的排序 职工信息的删除 职工信息的输出 退出职工管理系 统 职工信息的修改 尾插法建立职工信息表 插入新的结点 按姓名查询 按编号查询 冒泡排序法实现 输出记录 结束程序运行 按菜单选项 无记录 删除结点 5 3 3 数据结构与算法描述数据结构与算法描述 3 23 2 职工信息表的建立 将一个职工结点按其编号的次序插入有序职工链表 的相应位置 以保持链表的有序性 基本思想是使用尾插法建立新的结点 建 表算法如下描述 用尾插法建立职工链表函数 void CreateList NodePtr rear new ListNode int flag 0 结束标志置 0 rear head 尾指针初始指向头结点 while flag 0 NodePtr p p new ListNode p link NULL cout 请输入 cout 编号 姓名 性别 出生日期 学历 工作年月 职务 基本 工资 电话 地址 n cout p num p name p sex p birthday p education p working day cin p post p base pay p phone p addr rear link p 新结点连接到尾结点之后 rear p 尾结点指向新结点 cout flag filesave head 6 3 23 2 职工信息的输出 void PrintList NodePtr head NodePtr p p new ListNode p head link 因为链表带头结点 使 p 指向链表开始接点 cout 编号 姓名 性别 出生年月 学历 工作年月 职务 基本工资 电话 地址 n cout n while p NULL cout num name sex birthday cout education working day post cout base pay phone addr link 后移一个结点 3 23 2 职工信息的查询 如果结点为空 输出 没有查到要查询的职工 若结点 不为空 可按姓名和编号进行查询 void ListFind NodePtr p new ListNode p head link 假定职工表带头结点 char num 10 name 20 int xz 7 cout n cout 1 按编号查询 n cout 2 按姓名查询 n cout n cout xz if xz 1 cout num do if strcmp p num num 0 cout 编号 姓名 性别 出生年月 学历 工作年月 职务 基本工资 电话 地址 n cout n cout num name sex birthday cout education working day post cout base pay phone addr endl cout link if p NULL cout 没有查到要查询的职工 n while p NULL if xz 2 cout name do 8 if strcmp p name name 0 cout 编号 姓名 性别 出生年月 学历 工作年月 职务 基本工资 电话 地址 n cout n cout num name sex birthday cout education working day post cout base pay phone addr endl cout link if p NULL cout link head link head link p cin p num p name p sex p birthday p education p working day cin p post p base pay p phone p addr 9 3 23 2 职工信息的修改 先输入职工的姓名 若没有该职工 输出 该系统没有 该姓名的职工信息 无法修改 若有该职工 则可以修改该职工的任何一个信 息 具体算法如下 void Modify NodePtr p head link char name 15 姓名 cout name while p if strcmp p name name 0 break p p link if p NULL cout 该系统没有该姓名的职工信息 无法修改 endl cout 请按任意键继续 endl getch ListFind head else cout 你现在可以修改此职工的信息了 endl 数据域 cout p num cout endl p name cout endl p sex cout endl p birthday while cin fail cout 请输入正确的年份格式 p birthday cout endl p education cout endl p working day cout endl p post cout endl p base pay while cin fail cout 请输入正确的工资数据 p base pay 11 cout endl p phone cout endl p addr cout link if p NULL cout 该系统还没有储存一个职工 没法进行排序 endl cout link while q NULL if p base paybase pay swap p q 12 q q link p p link cout 排序成功 num strcpy p num q num strcpy q num num strcpy name p name strcpy p name q name strcpy q name name strcpy sex p sex strcpy p sex q sex strcpy q sex sex strcpy birthday p birthday strcpy p birthday q birthday strcpy q birthday birthday strcpy education p education strcpy p education q education strcpy q education education strcpy working day p working day strcpy p working day q working day strcpy q working day working day strcpy post p post strcpy p post q post strcpy q post post base pay p base pay p base pay q base pay q base pay base pay 13 strcpy phone p phone strcpy p phone q phone strcpy q phone phone strcpy addr p addr strcpy p addr q addr strcpy q addr addr 3 23 2 职工信息的删除 先输入职工的工号 若结点为空 则输出 没有找到要 删除的职工 若结点不为空 输出职工信息 提示真的要删除该职工吗 选择 y 或 n 可进行操作 具体算法如下 void DelNode NodePtr p new ListNode q new ListNode p head link 假定职工信息表带头结点 q head char num 10 int flag 0 cout num do if strcmp p num num 0 cout 编号 姓名 性别 出生年月 学历 工作年月 职务 基本工资 电话 地址 n cout n cout num name sex birthday cout education working day post cout base pay phone addr endl cout link if p NULL cout link while p NULL if flag 1 cout jx if jx y jx Y q link p link 删除结点 free p 释放被删除的结点空间 cout 职工已被删除 n return 0 通过以上算法实现以下菜单模块 通过以上算法实现以下菜单模块 printf 欢迎进入职工信息管理系统 n printf n printf 1 职工信息表的建立 n printf 2 职工结点的添加 n printf 3 职工结点的查询 n printf 4 职工信息的修改 n printf 5 职工信息的排序 n 15 printf 6 职工结点的删除 n printf 7 职工链表的输出 n printf 0 退出管理系统 n printf n printf 请选择 0 7 4 4 测试结果与分析 将测试结果抓图说明 测试结果与分析 将测试结果抓图说明 16 17 18 19 20 5 5 总结总结 通过本次课程设计 我学会了如何工程化的编写以下系统软件 首先 要对 软件的需求有一个比较明确的认识 然后系统分析与系统设计 最后是代码设 计与调试 软件实现上 设计了清楚的界面 并采用功能模块的设计思想 在这个过程中 确实付出了很对努力 流了很多汗水 比如 要思考整个设 计过程 要一点一点的改正代码中出现的错误等等 但现在想想 都不值得一 提 因为从中的收获比什么都重要 同时 我也知道 我的设计还存在不足之 处 我会坚持不懈 继续努力 6 6 参考文献参考文献 包括书籍 论文 网络资料等包括书籍 论文 网络资料等 C buider 实例入门 陈雪飞 中国青年出版社 C buider 彻底研究 陈灿煌 中国铁路出版社 C 面向对象程序设计 第 6 版 清华出版社 网络上一些代码资料 附录附录 程序源代码程序源代码 主控菜单处理测试程序 include include include include include include using namespace std struct ListNode 职工结点类型 char num 10 编号 char name 15 姓名 char sex 5 性别 char birthday 50 出生年月 21 char education 50 学历 char working day 50 工作年月 char post 50 职务 int base pay 基本工资 char phone 50 电话 char addr 50 地址 ListNode link 结点指针域 typedef ListNode NodePtr NodePtr load 导入信息到系统 void filesave NodePtr head 将链表中的信息保存到文件里 int menu select void CreateList NodePtr void PrintList NodePtr head void ListFind NodePtr void InsertNode NodePtr void DelNode NodePtr void DomoDify NodePtr void Modify NodePtr void Sort NodePtr head void swap NodePtr 交换两个节点里所含的信息 void Disp NodePtr 主函数 int main NodePtr head p ptr int base pay head new ListNode 申请头结点 head load 22 int n char tp 100 for switch menu select case 1 cout n cout 职工信息表的建立 n cout n CreateList head break case 2 cout n cout 职工信息的添加 n cout 编号 姓名 性别 出生日期 学历 工作年月 职务 基本工资 电话 地址 n cout n InsertNode head filesave head break case 3 cout n cout 职工信息的查询 n cout n ListFind head break case 4 cout n cout 职工信息的修改 n cout n DomoDify head 修改结点 Modify head break case 5 cout n 23 cout 按工资排序 n cout n Sort head 按工资排序 PrintList head Disp tp n break case 6 cout n cout 职工信息的删除 n cout n DelNode head 删除结点 filesave head break case 7 cout n cout 职工信息表的输出 n cout n PrintList head break case 0 cout link FILE fp int num 0 if fp fopen file txt w NULL 24 cout 新建文件失败 endl cout 请按任意键退出系统 link p head link char c 255 sprintf c 文件中 d 个信息如下 n num fputs c fp while p NULL fprintf fp s p num fprintf fp t fprintf fp s p name fprintf fp t fprintf fp s p sex fprintf fp t fprintf fp s p birthday fprintf fp t fprintf fp s p education fprintf fp t fprintf fp s p working day fprintf fp t fprintf fp s p post fprintf fp t fprintf fp d p base pay fprintf fp t fprintf fp s p phone fprintf fp t fprintf fp s p addr fprintf fp t fprintf fp n p p link 25 fclose fp NodePtr load NodePtr p q head head new ListNode head link NULL q head char base pay 10 p new ListNode int num i 0 FILE fp if fp fopen file txt r NULL cout 文件尚未存储数据 n exit 1 return head char c 255 fgets c 256 fp sscanf c 文件中 d 个信息如下 n while inum fscanf fp s p name fscanf fp s p sex fscanf fp s p birthday 26 fscanf fp s p education fscanf fp s p working day fscanf fp s p post fscanf fp d p base pay fscanf fp s base pay p base pay atoi base pay fscanf fp s p phone fscanf fp s p addr p link NULL q link p q p i fclose fp return head 菜单选择函数程序 int menu select int sn printf 欢迎进入职工信息管理系统 n printf n printf 1 职工信息表的建立 n printf 2 职工结点的添加 n printf 3 职工结点的查询 n printf 4 职工信息的修改 n printf 5 职工信息的排序 n printf 6 职工结点的删除 n printf 7 职工链表的输出 n 27 printf 0 退出管理系统 n printf n printf 请选择 0 7 for cin sn if sn7 cout link NULL cout 请输入 cout 编号 姓名 性别 出生日期 学历 工作年月 职务 基 本工资 电话 地址 n cout p num p name p sex p birthday p education p working day 28 cin p post p base pay p phone p addr rear link p 新结点连接到尾结点之后 rear p 尾结点指向新结点 cout flag filesave head 职工链表的输出函数 void PrintList NodePtr head NodePtr p p new ListNode p head link 因为链表带头结点 使 p 指向链表开始接点 cout 编号 姓名 性别 出生年月 学历 工作年月 职务 基本工 资 电话 地址 n cout n while p NULL cout num name sex birthday cout education working day post cout base pay phone addr link 后移一个结点 29 有序职工链表的查找 void ListFind NodePtr p new ListNode p head link 假定职工表带头结点 char num 10 name 20 int xz cout n cout 1 按编号查询 n cout 2 按姓名查询 n cout n cout xz if xz 1 cout num do if strcmp p num num 0 cout 编号 姓名 性别 出生年月 学历 工作年月 职务 基本工资 电话 地址 n cout n cout num name sex birthday cout education working day post cout base pay phone addr endl cout link if p NULL cout 没有查到要查询的职工 n while p NULL if xz 2 cout name do if strcmp p name name 0 cout 编号 姓名 性别 出生年月 学历 工作年月 职务 基本工资 电话 地址 n cout n cout num name sex birthday cout education working day post cout base pay phone addr endl cout link if p NULL cout link head link head link p cin p num p name p sex p birthday p education p working day cin p post p base pay p phone p addr 职工信息的修改 void Modify NodePtr p head link char name 15 姓名 cout name while p if strcmp p name name 0 break p p link if p NULL cout 该系统没有该姓名的职工信息 无法修改 endl cout 请按任意键继续 endl getch ListFind head 32 else cout 你现在可以修改此职工的信息了 endl 数据域 cout p num cout endl p name cout endl p sex cout endl p birthday while cin fail cout 请输入正确的年份格式 p birthday cout endl p education cout endl p working day cout endl p post cout endl p base pay while cin fail 33 cout 请输入正确的工资数据 p base pay cout endl p phone cout endl p addr cout link if p NULL cout 该系统还没有储存一个职工 没法进行排序 endl cout link while q NULL if p base paybase pay swap p q q q link p p link cout 排序成功 num strcpy
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025房地产行业劳动合同解除与补偿操作规程
- 说明文阅读课件完整
- 2025木材采购合同
- 语法操练课件
- 红酒原料知识培训课件
- 2025加强合同管理提升工程施工业绩
- 2025国际融资租赁合同
- 诗词知识培训内容课件
- 2025咨询服务合同范本(合同版本)
- 红楼色彩课件
- 2024-2025银行信贷员培训计划
- 保密培训课件 银行
- 2.2 养成亲社会行为 课件+内嵌视频 统编版八年级道德与法治上册
- 意大利足协协议书
- 以物抵债方案(3篇)
- 秋季预防常见传染病课件
- 2025年中国商用开水器市场调查研究报告
- 中国绿色食品市场深度调查研究报告2025-2028版
- 2025年苏教版小学数学小升初模拟考试测试卷及答案(共五套)
- 基于赋能理论的老年COPD稳定期患者慢病管理方案的构建及应用
- 公司员工特殊岗位补贴政策
评论
0/150
提交评论