已阅读5页,还剩21页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
信息与电子工程学院 C 语言课程设计语言课程设计 职工信息管理系统设计 实验日期和时间 2011 年 06 月 27 日 06 月 29 日 实验类别 课程设计 实验类型 设计性 一 一 实验环境实验环境 操作系统 windows xp 编程工具 Microsoft Visual C 6 0 开发环境 CPU Inter R Core TM 2 Quad cpu QB200 2 33GHz 内存 2 76GB 硬盘 228 3GB 开发地点 现代教育中心 201 机房 A17 座 IP 10 250 11 17 二 实验目的和要求二 实验目的和要求 实验目的 1 使学生进一步理解和掌握课堂上所学各种基本抽象数据类型的逻辑结构 存储结构和操作算法 2 使学生进一步掌握程序设计 编写 调试能力 3 使学生了解软件开发的基本步骤和内容 实验要求 完成一个职工信息管理系统程序 具体内容如下 1 在内存中用链表记录 在硬盘上用二进制文件保存 2 设计完的程序能够以命令行或者菜单形式增加 删除 更新和查询数据的 内容 数据内容能够排序以方便查询 3 数据库中应该有至少 20 条记录 三 实验内容和结果三 实验内容和结果 1 程序整体功能 程序整体功能 1 1 系统总体框 系统总体框 菜单 开始 根据菜单输入n 的值选 择程序 结束 是否继续进行 N Y 2 修改 职工 信息 3 浏览 职工 信息 4 分类 查找 职工 信息 5 删除 职工 信息 6 从文 件读 取信 息 0 退出 1 录入 职工 信息 按职 工号 查找 按姓 名查 找 2 模块设计 模块设计 该程序主要分为 7 个模块 分别是创建与添加模块 显示模块 查找模块 修改模块 删除模块 存档模块 文件统计模块 退出模块 2 程序组成及各模块 程序组成及各模块 函数功能 函数功能 创建与添加模块创建与添加模块 该模块的功能是输入职工信息 函数为 void Add Node woker 原理 采用尾插法 先建立链表与头结点 新增一个结点 键盘输入职工 号 职工姓名 职工性别 职工出生年月 职工学历 职工职位 职工工资 将这些信息存储到新增结点中 将新增加的节点连到链表的尾端 如此以往 将尾结点的指针域置空 这样就得到了一条存储职工信息的链表 这样就完成 了职工信息的创建与增加 显示模块显示模块 该模块功能是显示职工信息 函数为 void Disp Node woker 原理 先新建一个指针 P 指向头结点 判断它的指针域是否为空 若为空 则输出 没有记录可以显示 若不为空 则输出它的指针域所指向节点所储存 的职工信息 并将该指针向后移一个结点 直到 P 指向空 即输出了所有职工 的信息 这样就完成了所有职工信息的显示 查找模块查找模块 该模块功能是查找职工信息 函数为 void Tongji Node woker 原理 该模块分为两种查找方法 分别是按职工号查找和按职工姓名查找 因为这两种查找方法雷同 所以这里将只解释按职工号查找的原理 先键盘输 入一个要查找的职工号并新建一个指针 P 指向头结点 判断它的指针域是否为 空 若为空 则输出 没有资料可以统计分类 若不为空 则判断它的指针域 所指向节点所储存的职工信息中的职工号 若相等 则输出这个职工的其他所 有信息 并将 P 指向下一个结点 再次进行判断 直到 P 指向空 即输出了所 有查找到的信息 若不相等 则 P 指向下一个结点 再次进行判断 直到 P 指 向空 即输出了所有查找到的信息 这样就完成了职工信息的查找 修改模块修改模块 该模块功能是修改职工信息 函数为 void change Node woker 原理 根据查找原理 查找到要修改信息的职工 删除这一节点 并新建 一个节点 键盘输入想要修改的内容 并储存到新的结点中 将新的节点连接 到链表中原先删除结点的位子 这样就完成了职工信息的修改 删除模块删除模块 该模块功能是删除管理职工信息 函数为 void dismiss Node woker 根据查找的原理 查找到要修改信息的职工 删除这一节点 并将其前驱 结点的指针域指向其后继结点 这样就完成了职工信息的删除 存档模块 存档模块 将内存中的信息存储到文件中 函数为 void save Node woker 原理 打开文件 新建一个指针 P 指向头结点 判断它的指针域是否为空 若为空 则输出 无记录 若不为空 则将这个职工的所有信息输入到文件中 并将 P 指向下一个结点 直到 P 指向空 即输入了的信息 文件统计模块 文件统计模块 打开文件 统计职工数目 并输出 函数为 void load Node woker 退出模块 退出模块 该模块功能是退出管理档案 3 重要数据结构 重要模块 重要数据结构 重要模块 函数算法 函数算法 1 创建与添加模块 void Add Node woker 添加记录 Node p r s char n 10 先用于输入职工号 也用于判断是否跳出循 环 r woker s woker next 使 s 为第一个有用的结点 while r next NULL 这个循环的作用是使 r 为最后一个有用的结 点 r r next 将指针置于最末尾 while 1 printf 提示 输入 0 则返回主菜单 n printf n 请你输入职工号 scanf s n if strcmp n 0 0 break p Node malloc sizeof Node 申请空间 strcpy p data num n printf n 请输入姓名 scanf s p data name printf n 请输入性别 scanf s p data sex printf n 请输入出生年月 scanf s printf n 请输入学历 scanf s printf n 请输入职位 scanf s printf n 请输入工资 scanf s printf 提示 已经完成一条记录的添加 n p next NULL r next p 这一步是必需的 将 p 与先前的链表连起来构成一条 新链表 r p 也是必需的 将 r 又重设为新链的最后一个有用结点 2 显示模块 void Disp Node woker 输出职工信息 Node p p woker next if p printf n 提示 没有记录可以显示 n return printf t t t t 显示结果 n printf 职工号 职工姓名 职工性别 职工生日 职工学历 职工职位 职工 工资 n while p printf n 13s 11s 7s 10s 13s 10s 5s n p data num p data name p data sex p data birthday p data degree p data position p data salary p p next 3 查找模块 void Tongji Node woker 查找统计函数 Node p int sel int flag2 0 ha 0 p woker next char find 20 if woker next 若链表为空 printf n 提示 没有资料可以统计分类 n return printf 提示 n 0 退出 n 1 按职工号统计 n 2 按职工姓名 名称统计 n scanf d if sel 1 printf n 输入你要统计分类的职工号 scanf s find while p if strcmp p data num find 0 flag2 if flag2 1 printf n 13s 11s 7s 10s 13s 10s 5s n p data num p data name p data sex p data birthday p data degree p data position p data salary ha flag2 else if flag2 ha printf n 13s 11s 7s 10s 13s 10s 5s n p data num p data name p data sex p data birthday p data degree p data position p data salary ha flag2 p p next if flag2 printf n 按设备号 s 统计分类的有 d 条记录 n n find flag2 else printf n 按职工号 s 统计的结果为 0 个 n n find else if sel 2 printf n 输入你要统计分类的职工姓名 scanf s find while p if strcmp p data name find 0 flag2 if flag2 1 printf n 13s 11s 7s 10s 13s 10s 5s n p data num p data name p data sex p data birthday p data degree p data position p data salary ha flag2 else if flag2 ha printf n 13s 11s 7s 10s 13s 10s 5s n p data num p data name p data sex p data birthday p data degree p data position p data salary ha flag2 p p next if flag2 printf n 按设备名称 s 统计的有 d 条记录 n n find flag2 else printf n 按职工姓名 s 统计分类的结果为 0 个 n n find else if sel 0 return 4 修改模块 void change Node woker 修改职工信息函数 Node p char find 20 if woker next printf n 提示 没有资料可以修改 n return printf 请输入要修改的职工号 scanf s find p woker next while p NULL if strcmp p data num find 0 如果找到的话返回的是符合要求 break p p next if p int x while 1 printf 完成修改请输入 0 否则输入任意数再进行修改 scanf d if x 0 break printf 请输入新职工号 原来是 s p data num scanf s p data num printf 请输入新职工姓名 原来是 s p data name scanf s p data name printf 请输入新职工性别 原来是 s p data sex scanf s p data sex printf 请输入新出生年月 原来是 s p data birthday scanf s p data birthday printf 请输入新职工学历 原来是 s p data degree scanf s p data degree printf 请输入新职工职位 原来是 s p data position scanf s p data position printf 请输入新职工工资 原来是 s p data salary scanf s p data salary printf n 提示 该项记录资料已经成功修改 n else printf n 提示 你要修改的信息不存在 n 5 删除模块 void dismiss Node woker 删除职工信息函数 Node p r s char find 10 if woker next printf n 提示 没有资料可以显示 n return printf n 提示 请输入您要删除的职工号 n scanf s find p woker next while p NULL if strcmp p data num find 0 如果找到的话返回的是符合 要求 break p p next if p printf n 提示 找不到您想删除的职工号 n else r woker while r next p r r next s r next r next r next next 6 存档模块 void save Node woker 将职工信息保存到文件 int n Node p FILE fp 指向文件的指针 printf 需要保存吗 1 保存 0 不保存 scanf d if n if woker next NULL printf 无记录 else p woker next if fp fopen 职工管理系统 dat wb NULL 打开文件 并判断打开是否正常 printf can not open file n 打开文件出错 while p NULL fprintf fp s s s s s s s p p next fclose fp 关闭文件 7 文件统计模块 void load Node woker Node p q FILE fp 指向文件的指针 int recordNum 统计记录数 if fp fopen 职工管理系统 dat rb NULL 打开文件 printf can not open file n 不能打开 p woker recordNum 0 while feof fp q Node malloc sizeof Node fscanf fp s s s s s s s p data num p data name p data sex p data birthday p data degree p data position p data salary 从文件读入记录 p next q q next NULL p q recordNum fclose fp printf 文件里共有 d 条记录 n recordNum 8 主函数模块 void main Node woker FILE fp int flag Node p q printf t t t t 职工信息管理系统 n woker Node malloc sizeof Node woker next NULL p woker while 1 printf 目录 printf n1 添加记录 n printf n2 修改记录 n printf n3 浏览记录 n printf n4 分类查找记录 n printf n5 删除记录 n printf n6 从文件读取记录 n printf n0 EXIT n printf 请输入你要操作的序号 scanf d switch flag case 0 printf n 提示 已经退出系统 ByeBye n break case 1 Add woker save woker break 增加记录 case 2 change woker break 修改记录 case 3 Disp woker break 显示记录信息 case 4 Tongji woker break 查找记录 case 5 dismiss woker break 删除记录 case 6 load woker break 读取记录 default printf n 提示 输入错误 n break 4 程序的运行和测试结果 程序的运行和测试结果 主界面 主界面 创建与增加模块 创建与增加模块 输入职工信息为 职工号 职工姓 名 职工性 别 职工出生年 月 职工学 历 职工职 位 职工工 资 1Af11aaa1000 2Bm22bbb2000 3Cf33ccc3000 4Dm44ddd4000 输入第一次时 输入第二次时 输入第三次时 输入第四次时 显示模块 显示模块 输入四次后显示的结果为 存档模块 存档模块 文件统计模块 文件统计模块 查找模块 查找模块 输入查找职工号为 3 的职工信息 输入查找职工姓名为 c 的职工信息 修改模块 修改模块 修改职工号为 3 的职工信息为 职工号 职工姓 名 职工性 别 职工出生年 月 职工学 历 职工职 位 职工工 资 5Ef55eee5000 职工信息变成 删除模块 删除模块 删除职工号为 5 的职工信息 删除后的结果为 退出模块 退出模块 四 实验中的问题及心得四 实验中的问题及心得 此次实践课编写的是一个应用程序 相对于以前我们见到的程序 它要大得多 运行的结果也没有预想中的好 数据的输出格式不太规范 而且各模块也出现了一些小问题 在老师和同学的帮助下 我很有耐心 的一次又一次的进行修改 最后运行的结果基本上达到了预期的目的 本次 C 语言的实习课让我对 C 语言的学习又有了更深入的了解 也让我更深刻地领悟到了 实践出真理 这个道理 在上机实践过程中 学到的知识远远超过了在课堂上十几周学到的 这次程序设计课让我增 添了许多程序设计经验 为我们将来走上工作岗位其了不小的铺垫作用 本次实习中遇到了很多以前没有遇到过的问题 也曾想过要放弃 但看到那些同学都在那认真的写程序 给了我继续的信心 在同学和老 师的帮助下 我顺利的结束了本次实习 让我知道原来凭借自己努力取 得的成功会让自己这么欣慰 也让我知道了友谊和团结的重要性 4 程序清单 include stdio h include stdlib h include string h struct wokers 定义一个 woker 的结构体 char num 10 职工号 char name 15 职工姓名 char sex 15 职工性别 char birthday 15 职工出生年月 char degree 10 职工学历 char position 10 职工职位 char salary 10 职工工资 typedef struct node struct wokers data struct node next 建立一个链表 Node void Add Node woker 添加记录 Node p r s char n 10 先用于输入职工号 也用于判断是否跳出循环 r woker s woker next 使 s 为第一个有用的结点 while r next NULL 这个循环的作用是使 r 为最后一个有用的结点 r r next 将指针置于最末尾 while 1 printf 提示 输入 0 则返回主菜单 n printf n 请你输入职工号 scanf s n if strcmp n 0 0 break p Node malloc sizeof Node 申请空间 strcpy p data num n printf n 请输入姓名 scanf s p data name printf n 请输入性别 scanf s p data sex printf n 请输入出生年月 scanf s printf n 请输入学历 scanf s printf n 请输入职位 scanf s printf n 请输入工资 scanf s printf 提示 已经完成一条记录的添加 n p next NULL r next p 这一步是必需的 将 p 与先前的链表连起来构成一条新链表 r p 也是必需的 将 r 又重设为新链的最后一个有用结点 void change Node woker 修改职工信息函数 Node p char find 20 if woker next printf n 提示 没有资料可以修改 n return printf 请输入要修改的职工号 scanf s find p woker next while p NULL if strcmp p data num find 0 如果找到的话返回的是符合要求 break p p next if p int x while 1 printf 完成修改请输入 0 否则输入任意数再进行修改 scanf d if x 0 break printf 请输入新职工号 原来是 s p data num scanf s p data num printf 请输入新职工姓名 原来是 s p data name scanf s p data name printf 请输入新职工性别 原来是 s p data sex scanf s p data sex printf 请输入新出生年月 原来是 s p data birthday scanf s p data birthday printf 请输入新职工学历 原来是 s p data degree scanf s p data degree printf 请输入新职工职位 原来是 s p data position scanf s p data position printf 请输入新职工工资 原来是 s p data salary scanf s p data salary printf n 提示 该项记录资料已经成功修改 n else printf n 提示 你要修改的信息不存在 n void Disp Node woker 输出职工信息 Node p p woker next if p printf n 提示 没有记录可以显示 n return printf t t t t 显示结果 n printf 职工号 职工姓名 职工性别 职工生日 职工学历 职工职位 职 工工资 n while p printf n 13s 11s 7s 10s 13s 10s 5s n p data num p data name p data sex p data birthday p data degree p data position p data salary p p next void Tongji Node woker 查找统计函数 Node p int sel int flag2 0 ha 0 p woker next char find 20 if woker next 若链表为空 printf n 提示 没有资料可以统计分类 n return printf 提示 n 0 退出 n 1 按职工号统计 n 2 按职工姓名 名称统计 n scanf d if sel 1 printf n 输入你要统计分类的职工号 scanf s find while p if strcmp p data num find 0 flag2 if flag2 1 printf n 13s 11s 7s 10s 13s 10s 5s n p data num p data name p data sex p data birthday p data degree p data position p data salary ha flag2 else if flag2 ha printf n 13s 11s 7s 10s 13s 10s 5s n p data num p data name p data sex p data birthday p data degree p data position p data salary ha flag2 p p next if flag2 printf n 按设备号 s 统计分类的有 d 条记录 n n find flag2 else printf n 按职工号 s 统计的结果为 0 个 n n find else if sel 2 printf n 输入你要统计分类的职工姓名 scanf s find while p if strcmp p data name find 0 flag2 if flag2 1 printf n 13s 11s 7s 10s 13s 10s 5s n p data num p data name p data sex p data birthday p data degree p data position p data salary ha flag2 else if flag2 ha printf n 13s 11s 7s 10s 13s 10s 5s n p data num p data name p data sex p data birthday p data degree p data position p data salary ha flag2 p p next if flag2 printf n 按设备名称 s 统计的有 d 条记录 n n find flag2 else printf n 按职工姓名 s 统计分类的结果为 0 个 n n find else if sel 0 return void load Node woker Node p q FILE fp 指向文件的指针 int recordNum 统计记录数 if fp fopen 职工管理系统 dat rb NULL 打开文件 printf can not open file n 不能打开 p woker recordNum 0 while feof fp q Node malloc sizeof Node fscanf fp s s s s s s s p data num p data name p data sex p data birthday p data degree p data position p data salary 从文件读入 记录 p next q q next NULL p q recordNum fclose fp printf 文件里共有 d 条记录 n recordNum void save Node woker 将职工信息保存到文件 int n Node p FILE fp 指向文件的指针 printf 需要保存吗 1 保存 0 不保存 scanf d if n if woker next NULL printf 无记录 else p woker next if fp fopen 职工管理系统 dat wb NULL 打开文件 并判断打开是 否正常 printf can not open file n 打开文件出错 while p NULL fprintf fp s s s s s s s p p next fclose fp 关闭文件 void dismiss Node woker 删除职工信息函数 Node p r s char find 10 if woker next printf n 提示 没有资料可以显示 n return printf n 提示 请输入您要删除的职工号 n scanf s find p woker next while p NULL if strcmp p data num find 0 如果找到的话返回的是 符合要求 break p p next if p printf n 提示 找不到您想删除的职工号 n e
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 国际组织预算编制中的透明度与合规性研究-洞察及研究
- 2026-2031中国平板电脑市场全景调查与投资潜力分析报告
- 多模态文本分析在教育中的应用-洞察及研究
- 2025-2030中国液体化工物流行业成本结构与利润空间分析报告
- 囊腺瘤形态学特征与肿瘤干细胞特性的相关性研究-洞察及研究
- 基于神经网络的默认值调整方法-洞察及研究
- 2026中国口腔数字化设备技术演进与市场增长预测报告
- 2026中国医疗AI辅助诊断系统商业化应用障碍与突破方向报告
- 人工智能项目研发成本管理策略
- 幼儿园小班工作计划范文
- 2025年高速公路内业资料归档目录
- 锅炉维修改造施工组织设计范本
- 徕卡全站仪TCA1800使用说明
- 老年性肺炎病人的护理
- 循环经济产业园总体规划
- 7.2《秦腔》课件-2024-2025学年高二语文统编版选择性必修下册
- 山西省2020-2022年中考满分作文111篇
- 小学健康课:认识我们的身体结构
- 林业行政执法培训
- 项目话术培训
- 2021-2024年江苏新高考历史真题考点分布汇编
评论
0/150
提交评论