当前位置:首页 >> 计算机软件及应用 >> C++程序设计

C++程序设计


沈 阳 工 程 学 院 信 息 学 院
C++程序设计

课 程 设 计
设计题目: 餐饮管理系统





计算机科学与技术系 徐

班级 宇

计算 C151

学生姓名 学 号

201544

6104 代钦 孙丽娜 李波 崔妍 张欣 讲师/讲师/讲师/讲师/副教授

指导教师 职 称

起止日期: 2016 年 3 月 6 日起——至 2016 年 3 月 24 日止

成绩评定表
班级 组长 项目组组员 本人工作简介: 计算 C151 学号 20154461 姓名 04 题目 徐 宇

餐饮管理系统

内容 出勤 (得分 10)

不及格
×(0~60)% 缺勤次数超过 1/2

及格
×(60~70)% 缺勤次数达 到 1/3 基本符合设 计要求, 完成 主要目标 结构有不合 理部分, 逻辑 性不强

中等
×(70~80)% 有缺勤记录 符合设计要求, 完成大部分设 计任务 结构基本合理, 层次较为分明, 文理通顺

良好
×(80~90)% 请假次数少于 2 次 完全符合设计要 求,全部完成设计 任务 结构合理,符合逻 辑,层次分明,语 言准确,文字通顺

优秀
×(90~100)% 无缺勤记录 完成全部任 务, 具备一定 应用价值 结构严谨, 逻 辑性强, 层次 清晰, 语言准 确, 文字流畅 有创新与应 用价值 完成全部任 务

最后 得分

报告内容 有抄袭行为 (得分 30) 报 告

结构混乱,有 格式规范 (得分 10) 抄袭行为

创新特色 无任何创新 (得分 10) 阶段考核 1 大部分功能不 全,有抄袭行 (功能部 分) (10 分) 为 阶 段 考 核 阶段考核 2 容不符合要 (设计部 求,有抄袭行 分) (20 分)
为 大部分设计内

无特色 基本符合设 计要求, 完成 主要目标

有自己的观点 符合设计要求, 完成大部分任 务

有自己独到的观点

完全符合设计要 求,全部完成任务

基本符合功 能要求

大部分设计合 理

整体设计内容合 理、清晰

所有设计内 容符合要求

阶段考核 3 (系统实现 及测试) (10 分)

未实现系统功 能,有抄袭行 为

完成基本功 能

完成大部分功 能

功能完善, 具 完成全部功能 备一定应用 价值

总评 负责指导教师: (签名) 指导教师: (签名)

沈阳工程学院信息学院

课程设计任务书

课程设计题目:

餐饮管理系统





计算机科学与技术系 徐

班级 宇

计算 C151

学生姓名 学 号

2015446104 代钦 孙丽娜 李波 崔妍 张欣 讲师/讲师/讲师/讲师/副教授 实训楼 F 六楼机房

指导教师 职 称

课程设计进行地点:

任 务 下 达 时 间: 2017 年 2 月 27 日 起止日期: 2017 年 3 月 6 日起——至 2016 年 3 月 24 日止 系主任 年 月 日批准

一、课程设计的原始资料及依据
查阅有关资料, 进一步理解面向对象程序设计的思想, 并编写一个简单的 windows 系统。 通过本设计可以加深理解使用面向对象程序设计思想开发一个系统的方法,提高分析问题、 解决问题和实际动手的能力。

二、课程设计主要内容及要求 设计内容:
某小型公司,主要有四类人员:经理,兼职技术人员,销售经理和兼职推销员. ⑴人员信息包括姓名,编号,级别,当月薪水,计算月薪总额等 ⑵能够显示这些人员的全部信息. ⑶添加删除功能:能根据公司人事的变动情况,添加删除记录; ⑷查询功能:能根据编号和姓名进行查询; ⑸保存功能:启动程序时能读取人员信息,关闭程序时能将信息保存至硬盘文件。 ⑹人员编号在生成人员信息时自动生成,每输入一个人员信息编号顺序加 1。

设计要求:
(1)要求利用面向对象的方法完成系统的设计; (2)要求在设计的过程中建立清晰的类层次,并画出类图; (3)设计功能满足要求、易于操作的友好界面; (4) (5)在系统的设计中,至少要用到面向对象的一种机制:继承、多态等; (6)在完成该题目时,小组人员进行详细的任务分工,并要在报告中体现出来。

三、对课程设计说明书撰写内容、格式、字数的要求
1.课程设计说明书是体现和总结课程设计成果的载体,主要内容包括:设计题目、设计 目的、设备器材、设计原理及内容、设计步骤、遇到的问题及解决方法、设计总结、参考文 献等。一般不应少于 3000 字。 2.在适当位置配合相应的实验原理图、功能模块图、算法流程图等图表进行说明。应做 到文理通顺,内容正确完整,书写工整,装订整齐。 3.设计总结部分主要写本人完成工作简介以及自己的设计体会,包括通过课程设计学到 了什么,哪里遇到了困难,解决的办法以及今后的目标。 4.课程设计说明书手写或打印均可。手写要用学校统一的课程设计用纸,用黑或蓝黑墨 水工整书写;打印时采用 A4 纸,页边距均为 20mm,正文采用宋体小四号字,行间距 18 磅。 文中大标题采用黑体小三号字,一级节标题采用黑体四号字,二级节标题采用黑体小四号字, 表题与图题采用宋体五号字。 5.课程设计说明书装订顺序为:封面、任务书、成绩评定表、目录、正文、参考文献。

四、设计完成后应提交成果的种类、数量、质量等方面的要求
1.完成“任务书”中指定的功能,运行结果正确。 2.课程设计说明书。

五、时间进度安排
序号 1 2 3 4 5 6 7 8 9 主 要 内 容 进行设计准备, 阅读资料, 分析设计任 务书,明确设计要求、内容和步骤 需求分析 总体设计 详细设计 功能实现 程序调试 测试 撰写课程设计报告 答辩 合 计 学 时 备 注

1天 1天 1天 1天 5天 2天 1天 2天 1天 15 天 编写代码 调试代码 测试代码 整合报告 教师给出答辩成绩

六、主要参考资料(文献)
[1]郑莉 董渊 张瑞丰 编着 . 《 C++ 语言程序设计》 (第 4 版 ). 北京:清华大学出版 社.2010 [2] 陈维兴, 林小茶.《C++高级程序设计教程》. 北京:清华大学出版社 [3] 谭浩强.《C++程序设计教程》. 北京:中国科学技术出版社 [4] 王燕.《面向对象的理论与 C++实践》. 北京:清华大学出版社 [5] 马石安, 魏文平. 主编《Visual C++程序设计与应用教程》. 北京:清华大学出版 社 [6] 王育坚. 主编《Visual C++面向对象编程教程》 (第二版). 北京:清华大学出版

沈阳工程学院课程设计报告

目录





第一章 绪论 .................................................................................................................. I
1.1 绪论 .............................................................................................................................................I 1.2 课程设计的目的 .........................................................................................................................I 1.3 设计内容和要求 .........................................................................................................................I 1.3.1 设计内容: .........................................................................................................................I 1.3.2 设计要求: .........................................................................................................................I 1.4 系统分析 .....................................................................................................................................I 1.4.1 问题分析 .............................................................................................................................I 1.5 课程设计意义 ........................................................................................................................... II

第二章 设计原理与运行环境 ................................................................................ - 3 2.1 c++语言概述 ......................................................................................................................... - 3 2.1.1 C++语言概述 ................................................................................................................ - 3 2.1.2 C++语言的主要特点 .................................................................................................... - 3 2.2 基本操作 .............................................................................................................................. - 3 -

第三章 系统分析与设计 ........................................................................................ - 9 3.1 系统设计 ............................................................................................................................... - 9 3.1.1 系统总体框架 ............................................................................................................... - 9 3.1.2 类的层次图 ................................................................................................................... - 9 3.1.3 系统流程图 ................................................................................................................. - 10 3.2 系统关键算法流程图 ......................................................................................................... - 10 -

第四章 系统功能的实现 ...................................................................................... - 15 4.1 菜单函数 ............................................................................................................................. - 15 4.2 添加功能 ............................................................................................................................. - 16 4.3 删除功能 ............................................................................................................................. - 18 4.4 显示功能 ............................................................................................................................. - 20 4.5 基础数据设置 ..................................................................................................................... - 21 4.6 查询功能 ............................................................................................................................. - 23 4.7 保存功能 ............................................................................................................................. - 25 4.8 退出功能 ............................................................................................................................. - 27 -

结论 ........................................................................................................................ - 29 -

III

沈阳工程学院课程设计报告

第一章

绪论

第一章 绪论
1.1 绪论
公司人员管理系统是公司管理中的一个重要内容,随着时代的进步,公司人员数量也不 断增加、分工的不断细化、各个行业间联系的不断密切,对人事管理的要求也不断提高。早 期的人工方式的管理系统已不适合现代企业的公司的发展,实现企业人事管理的系统化、规 范化、自动化,是现代公司管理的首选。 此次课程设计的目的是以 《C++语言程序设计》 为基础, 针对具有一定难度的综合性题目, 进行分析、编程、调试和运行,进一步掌握面向对象和面向过程程序设计的基本方法和编程 技巧,巩固所学理论知识,使理论与实践相结合,提高分析问题、解决问题的能力。 通过设计一个简单的公司人员管理系统,进一步熟悉 C++中类的概念、类的封装、继承和多 态的实现方式。了解系统开发的需要分析,类层次设计,模块分析,编码测试,模块组装与 整体调试的全过程,逐步熟悉程序设计的方法,并养成良好的编程习惯。

1.2 课程设计的目的
⑴要求学生能够熟练掌握 C++语言的基本知识和技能。 ⑵基本掌握面向对象程序设计的基本思路和方法。 ⑶能够利用所学的基本知识和技能,解决简单的面向对象程序设计问题。

1.3 设计内容和要求
1.3.1 设计内容: 某小型公司,主要有四类人员:经理,兼职技术人员,销售经理和兼职推销员. ⑴人员信息包括姓名,编号,级别,当月薪水,计算月薪总额等 ⑵能够显示这些人员的全部信息. ⑶添加删除功能:能根据公司人事的变动情况,添加删除记录; ⑷查询功能:能根据编号和姓名进行查询; ⑸保存功能:启动程序时能读取人员信息,关闭程序时能将信息保存至硬盘文件。 ⑹人员编号在生成人员信息时自动生成,每输入一个人员信息编号顺序加 1。 1.3.2 设计要求: (1) 要求在设计的过程中建立清晰的类层次,并画出类图; (2) 设计功能满足要求、易于操作的友好界面; (3) 在系统的设计中,至少要用到面向对象的一种机制:继承、多态等; (4) 在完成该题目时,小组人员进行详细的任务分工,并要在报告中体现出来。

1.4 系统分析
1.4.1 问题分析 根据问题描述和要求,系统要求能够按姓名或者编号显示、查找、增加、删除和保存各 类人员的信息。确定程序至少应该具备如下功能: “查询人员” 、 “增加人员” 、 “删除人员” 、 “数据存盘”基本模块。 系统既然具有“数据存盘”功能-人员数据可以保存到磁盘文件,那么也就意味着今后
I

沈阳工程学院课程设计报告

第一章

绪论

可以从磁盘文件读出人员数据,所以系统增加了“人员数据装入”模块,以方便用户使用、 避免数据重复录入。考虑到系统实现简捷,人员数据文件采用文本文件,人员数据文件名: Person.txt。 考虑到根据编号查找人员信息功能在“删除人员”模块都使用,所以可以考虑设置为一 个模块。 考虑到系统要求人员编号在生成人员信息时同时生成,每输入一个人员信息编号顺序加 1。这样就要求人员编号在增加人员时自动生成(增加 1)且不重复。根据这个要求,可以考虑 设置一个全局量: “当前最大编号” ,每增加一个人员,当前最大编号自动增 1,然后新增加 人员使用这个编号。为了保证系统能记忆这个编号,可以使用一个数据文件保存当前这个编 号。系统每次开始运行前从文件读入这个编号,随着人员增加,编号自动增加,系统每次运 行结束时将这个编号写入文件。本系统将初值(没有一个用户时)设置为 0。 考虑到人员的许多固定信息如:经理、销售经理的固定月薪,销售经理、销售人员提成, 技术人员小时工资等都是一些不需要每个人员都要输入的信息,所以可以将这些信息都保存 在一个数据文件中,本系统为了方便起见,将这些信息与“最大编号”全部保存在一个文件 中,并使用“基础数据设置”模块进行设置和管理。基础数据文件也采用文本文件,基础数 据文件名:Base.txt。 本系统还提供“查询本月经营信息”帮助计算销售总额,工资总额,并按照公式计算本 月盈亏。 综合考虑系统具有下面 8 项功能模块:增加人员,删除人员,修改人员,查询本月经营 信息,基础数据设置,数据存盘,数据装入。 系统使用的数据文件格式如下:
Base.txt:(格式:项目 数据) 经理固定月薪 3000 销售经理固定月薪 2000 销售经理提成% 1 销售人员提成% 2 技术人员小时工资 20 ID 6 Person.txt: (格式:编号,姓名,人员类别,其它数据,销售员销售额,技术人员工作小时) 2 shijinwan 3 100000 3 hejinwei 1 4 zengying 4 100 5 chenying 2 6 sunyiming 3 150000 注:人员类型编号 1-经理;2-销售经理;3-销售员;4-技术人员

1.5 课程设计意义
通过设计此系统,熟练掌握 C++语言的基本知识和技能,基本掌握面向对象程序开发的 基本思路和方法,培养学生的动手操作能力,提高自主学艺能力,能够利用所学的基本知识 和技能,进行简单应用程序设计。加深理解利用程序设计思想开发一个系统的整个流程,提 高分析问题、解决问题和实际动手的能力。
II

沈阳工程学院课程设计报告

第二章

设计原理与运行环境

第二章 设计原理与运行环境
2.1 c++语言概述
2.1.1 C++语言概述 C++语言即保留了 C 语言的有效性、灵活性、便于移植等全部精华和特点,有添加了面 向对象编程的支持,具有强大的编程功能,可方便地构造出模拟现实问题的实体和操作;编 写出的程序具有结构清晰、易于扩充等优良特性,适合与各种应用软件、系统软件的程序设 计。用 C++编写的程序可读性好,生成的代码质量高,运行效率仅比汇编语言慢 10%~20%。 2.1.2 C++语言的主要特点 C++语言是 C 语言的超集。它即保持了 C 语言的简洁、高效和接近汇编语言等特点,又 克服了 C 语言的缺点,其编译系统能检查更多的语法错误,因此,C++比 C 语言更安全。 C++保持了与 C 语言的兼容。绝大多数 C 语言程序可以不经修改直接在 C++环境中运 行,用 C 语言编写的众多库函数可以用于 C++程序中。 C++程序在可重用性、可扩充性、可维护性和可靠性等方面都较 C 语言得到了提高,使 其更适合开发大中型的系统软件和应用程序。 C++设计成静态类型、和 C 同样高效且可移植的多用途程序设计语言。

2.2 基本操作
1.新建一个工程 首先鼠标左键单击“文件”菜单,选择“新建”单击鼠标左键,系统将弹出一个窗口,单击 “工程”选项,将得到图 2.1 所示窗口。请在“工程名称”栏填入工程名,然后鼠标左键单 击左边窗口倒数第三项“Win32 Console Application” ,使该项变蓝,然后鼠标左键单击“确 定”按钮。得到图 2.2 所示窗口,选择“一个空工程” ,单击“完成”得到图 2.3。再单击“确 定”得到图 2.4 所示的窗口。

-3-

沈阳工程学院课程设计报告

第二章

设计原理与运行环境

图 2.1 新建工程窗口

图 2.2 选择控制台程序
-4-

沈阳工程学院课程设计报告

第二章

设计原理与运行环境

图 2.3 创建新工程

图 2.4 Visual C++ 6.0 的工作环境
-5-

沈阳工程学院课程设计报告

第二章

设计原理与运行环境

2.新建一个源文件 要新建一个 C 程序源文件可以选择“文件”菜单的“新建”选项,在弹出的窗口中选择“文 件”选项单击,得到如图 2.5 所示的窗口,其“位置”栏中的内容是默认的,在“添加到工 程”前打勾, “工程名”也是默认的。

图 2.5 新建源文件

3.编辑程序 编辑环境如图 2.6 所示。把程序代码输入计算机,如图 2.7 所示。

-6-

沈阳工程学院课程设计报告

第二章

设计原理与运行环境

图 2.6 编辑区域

图 2.7 编辑程序

4. 编译、连接、运行、调试一个程序 当源文件编辑完成后,就可以编译、连接和运行程序了。方法如下: ①单击“组建”菜单的“编译”选项,将完成编译工作得到***.cpp 目标文件(文件名就是源 文件的名字),编译结果将在窗口最下面的输出窗口显示。可根据窗口的提示修改源文件以改 正错误。 ②单击“组建”菜单的“组建”选项,完成连接工作得到可执行文件(文件名是工程名) ,连 接的结果也将在窗口最下面的输出窗口显示。 ③单击“组建”菜单的“全部重建”选项,将完成编译和连接两项工作,编译和连接的结果 将在输出窗口显示。 ④单击“组建”菜单的“执行”选项,可运行程序,程序运行的结果如图 2.8 所示。

-7-

沈阳工程学院课程设计报告

第二章

设计原理与运行环境

图 2.8 程序运行结果

-8-

沈阳工程学院课程设计报告

第三章

系统分析与设计

第三章 系统分析与设计
3.1 系统设计
3.1.1 系统总体框架 使用面向对象的程序设计思想进行分析,整个系统涉及两大类信息和操作,公司,人员。 所以系统主要涉及两个大类:公司类 Company、人员类 Person。系统的总体框架就是公司类, 人员类的定义;主函数中定义一个公司对象,循环显示主菜单并根据用户选择调用公司类的 相应方法(成员函数)。 (1)公司类 Company:考虑系统操作的人员信息的数量具有不确定性,所以考虑使用链表 保存、处理人员信息。公司类包含:所有人员信息的一个不带头结点的链表(作为数据成员) 及可以对人员信息进行增,删,改,查询经营信息,基础数据设置,数据存盘,数据装入等 操作的相关模块(Add,Delete,Modify,Query,Set,Save,Load)作为成员函数。 (2)人员类 Person:所有人员都具有的公共信息及操作可以使用人员类进行描述。由于 系统具有 4 类人员且 4 类人员数据,操作有所不同,如销售员包含销售额,而技术人员包含 工作小时数且计算工资的方法不同,所以应当为 4 类人员创建相应的 Person 类的派生类。 (3)为了使公司类可以方便处理人员信息, 可以考虑将公司类确定为人员类的友元类或者 人员类提供公共的方法以便公司类进行操作。为了公司类可以用共同方法操作人员类,可以 将人员类的方法确定为虚函数。 3.1.2 类的层次图 类的层次图如图 3.1 所示。

Person { No,Name,Duty,Earning,next,Person(),CalcSalary(),Output()}

Manager { Manager(), CalcSalary(), Output()}

Sales {Amount, Sales(),GetAmount(), SetAmount(), CalcSalary(), Output()}

SalesManager {Amount, SalesManager(), SetAmount(), CalcSalary(), Output()}

Technician { t, Technician(), GetT(),SetT(), CalcSalary(), Output()}

3.1 类的层次图

其中: ⑴Person 类的 No-人员编号,Name-人员姓名,Duty-人员类别,Earning-工资,next指向下一个人员的指针;Person 类的 CalcSalary(),Output()定义为纯虚函数分别表示要计 算人员工资和输出人员信息,由于定义纯虚函数,所以 Person 是抽象类,具体计算工资,输
-9-

沈阳工程学院课程设计报告

第三章

系统分析与设计

出人员信息由派生类完成。
⑵ 各 个 派 生 的 类 , 包 含 本 类 对 象 特 有 的 数 据 , Sales::Amount- 销 售 员 销 售 额 ,

SalesManager::Amount-销售经理的总销售额 (系统统计各个销售员销售额得到销售经理的总 销售额) ,Technician::t-技术人员工作小时数。
Company {Person *Worker, Clear(),Company(),~Company(),Add(),Delete(),Modify(), Query(),Set(),Save(),Load()}

其中: ⑴Worker 就是人员链表。
⑵Clear()用于清除人员链表所有结点。 ⑶Add(),Delete(),Modify(),Query(),Set(),Save(),Load() 分别表示系统各个功能模

块:增加人员,删除人员,修改人员,查询本月经营信息,基础数据设置,数据存盘,数据装 入。 3.1.3 系统流程图 主函数首先调用菜单函数,显示菜单,菜单函数给出用户可选择的项目,用户可以通过 选择该项前的代码来实现想要实现的功能。菜单函数返回一个值给主函数,主函数根据返回 值,调用相应函数。 主函数流程图如图 3.2 所示

开始

创建公 司 对象

显示菜 单 接受输 入 根据输 入 执行公 司 操作 N

退出 ? Y 结束

图 3.2 主函数流程图

3.2 系统关键算法流程图
(1)增加人员 Company::Add()
- 10 -

沈阳工程学院课程设计报告

第三章

系统分析与设计

开始 ID号增 1 输入岗 位 输入数 据,创建员 工对象结 点 员工结 点加入链 表 结束

图 3.3 增加人员函数流程图

(2) 删除人员 Company::Delete()

开始 输入员 工 ID 查找要 删除结点

结点存 在 ? 链表删 除员工结点 提示未 找到

结束
图 3.4 删除人员函数流程图

(3) 显示本月经营信息 Company::Display()

- 11 -

沈阳工程学院课程设计报告

第三章

系统分析与设计

开始 遍历统计 销售额 遍历统计 工资 总额 计算盈亏 打印本月 经营信息 结束

图 3.5 显示本月经营信息函数流程图

(4)查询 Company::Query()

开始 输入员 工 ID 查找结 点

结点存 在 ? 修改结 点 提示未 找到

结束
图 3.6 查询函数流程图

- 12 -

沈阳工程学院课程设计报告

第三章

系统分析与设计

(4) 保存 Company::Save()

开始 打开员工 数据文件 遍历链表 保存人员数据 关闭文件 打开基础 数据文件 保存基础 数据 关闭文件 结束

图 3.7 保存函数流程图

- 13 -

沈阳工程学院课程设计报告

第三章

系统分析与设计

(7) 数据装入 Company::Load()

开始 打开员 工数据文件 读取基 础 数据 关闭文 件 打开人 员数据文件 读取一 条 记录 Y 文件未 结束 N 根据人 员类型创建 结点

链表加 入 结点 读 下面 一行记 录

关闭文 件 结束
图 3.7 数据装入函数流程图

- 14 -

沈阳工程学院课程设计报告

第四章 系统功能的实现

第四章 系统功能的实现
4.1 菜单函数
菜单函数首先标出欢迎使用公司人员管理系统,然后给出用户可选择的项目,用户可以 通过选择该项前的代码来实现想要实现的功能。程序源代码如下:
void main() { char c; Company a; do { system("cls"); cout<<"\n\t\t*********** 公司人员管理系统 ***********\n"; cout<<"\t\t\t1-增加人员\n"; cout<<"\t\t\t2-删除人员\n"; cout<<"\t\t\t3-显示本月经营信息\n"; cout<<"\t\t\t4-基础数据设置\n"; cout<<"\t\t\t5-查询\n"; cout<<"\t\t\t6-保存\n"; cout<<"\t\t\t7-退出\t 请选择(1-7):"; cin>>c; switch(c) { case '1': a.Add(); system("pause");break; case '2': a.Delete();system("pause");break; case '3': a.display(); system("pause");break; case '4': a.Set(); system("pause");break; case '5': a.Query(); system("pause");break; case '6': a.Save(); system("pause");break; } }while(c!='7'); }

程序运行时,主界面如图 4.1 所示
- 15 -

沈阳工程学院课程设计报告

第四章 系统功能的实现

图 4.1 菜单功能实现

用户可以通过选择该项前的代码来实现想要实现的功能,例如,要添加记录,从键盘输 入 1,按回车后,用户可按相应的提示进行添加操作。

4.2 添加功能
添加功能要求:能根据公司人事的变动情况,添加记录。人员编号在生成人员信息时自动 生成,每输入一个人员信息编号顺序加 1。程序源代码如下:
void Company::Add() { Person *p; int Duty; char Name[20]; double Amount,T;

//新结点指针

cout<<"\n** 新增员工 **\n"; //输入员工信息 ID++; cout<<"输入岗位(1-经理 2-销售经理 3-销售员 4-技术员):"; cin>>Duty; cout<<"输入姓名:"; cin>>Name; if(Duty==3) { cout<<"本月销售额:"; cin>>Amount;
- 16 -

沈阳工程学院课程设计报告

第四章 系统功能的实现

} else if(Duty==4) { cout<<"本月工作小时数(0-168):"; cin>>T; } //创建新员工结点 switch(Duty) { case 1:p=new Manager(ID,Name,Duty); break; case 2:p=new SalesManager(ID,Name,Duty); break; case 3:p=new Sales(ID,Name,Duty,Amount); break; case 4:p=new Technician(ID,Name,Duty,T); break; } p->next=0; //员工结点加入链表 if(Worker) //若已经存在结点 { Person *p2; p2=Worker; while(p2->next) //查找尾结点 { p2=p2->next; } p2->next=p; //连接 } else //若不存在结点(表空) { Worker=p; //连接 } }

在主界面中,选择 1(即输入 1,回车) ,即可输入要添加的信息,如图 4.2 所示。系统 会罗列需要添加的项目,用户只需根据对应项目输入信息。

- 17 -

沈阳工程学院课程设计报告

第四章 系统功能的实现

图 4.2 添加功能实现

4.3 删除功能
删除功能要求:选中某个人的 ID 时,可对此人的相应数据进行删除。程序源代码如下:
void Company::Delete() //删除人员 { int No; cout<<"\n** 删除员工 **\n"; cout<<"ID:"; cin>>No; //查找要删除的结点 Person *p1,*p2; p1=Worker; while(p1) { if(p1->No==No) break; else { p2=p1; p1=p1->next; } } //删除结点 if(p1!=NULL)//若找到结点,则删除
- 18 -

沈阳工程学院课程设计报告

第四章 系统功能的实现

{ if(p1==Worker) //若要删除的结点是第一个结点 { Worker=p1->next; delete p1; } else //若要删除的结点是后续结点 { p2->next=p1->next; delete p1; } cout<<"找到并删除\n"; } else //未找到结点 cout<<"未找到!\n"; }

在主界面中输入 2,系统提示输入要删除的名字,用户从键盘输入名字,系统便自动删 除要删除的通讯录信息,并提示已经删除成功,如图 4.3 和 4.4 所示:

图 4.3 删除功能实现

- 19 -

沈阳工程学院课程设计报告

第四章 系统功能的实现

图 4.4 显示找到并删除

4.4 显示功能
显示功能要求:能够显示这些人员的全部信息。程序源代码如下:
void Company::display() { cout<<"\n**************** 公司人员本月工资和销售信息 *********************\n"; cout<<"编号\t 姓名\t\t 职位\t\t 月工资\t\t 销售额或工作时间"<<endl; double sum=0; //销售额总和 Person *p=Worker; while(p) { if(p->Duty==3) sum+=((Sales *)p)->GetAmount(); p=p->next; } p=Worker; double sum2=0; //工资总和 while(p) { if(p->Duty==2)((SalesManager *)p)->SetAmount(sum); //sum 和 sum2 必须分开计算 p->Output(); sum2+=p->Earning; p=p->next; }
- 20 -

沈阳工程学院课程设计报告

第四章 系统功能的实现

cout<<"本月盈利:"<<sum*0.20-sum2<<" (按照 20%利润计算)"<<endl; } /***********************设置基础数据**************************/ void Company::Set() { cout<<"\n** 设置基础数据 **\n"; cout<<"经理固定月薪["<<ManagerSalary<<"元]:"; cin>>ManagerSalary; cout<<"销售经理固定月薪["<<SalesManagerSalary<<"元]:"; cin>>SalesManagerSalary; cout<<"销售经理提成["<<SalesManagerPercent<<"%]:"; cin>>SalesManagerPercent; cout<<"销售人员提成["<<SalesPercent<<"%]:"; cin>>SalesPercent; cout<<"技术人员小时工资["<<WagePerHour<<"(元/小时)]:"; cin>>WagePerHour; cout<<"员工标识[>="<<ID<<"]:"; cin>>ID; }

在主界面中输入 3,显示通讯录中所有人信息。如图 4.5 所示:

图 4.5 显示功能实现

4.5 基础数据设置
基础设置要求:对各类人员的基本信息进行初始设置。程序源代码如下:
- 21 -

沈阳工程学院课程设计报告

第四章 系统功能的实现

void Company::Load() //数据装入(包括基础数据,人员数据) { //基础数据装入 ifstream fBase; //建立文件输入流对象 char buf[80]; //buf 用于保存数据文件中的注释字符串 fBase.open("base.txt",ios::in); fBase>>buf>>ManagerSalary; //经理固定月薪 fBase>>buf>>SalesManagerSalary; //销售经理固定月薪 fBase>>buf>>SalesManagerPercent; //销售经理提成% fBase>>buf>>SalesPercent; //销售人员提成% fBase>>buf>>WagePerHour; //技术人员小时工资 fBase>>buf>>ID; //员工标识 fBase.close(); //人员数据数据装入 ifstream fPerson; Person *p=Worker; int No; char Name[20]; int Duty; double Amount,T; fPerson.open("person.txt",ios::in); //读一条记录 fPerson>>No>>Name>>Duty; if(Duty==3)fPerson>>Amount; else if(Duty==4)fPerson>>T; while(fPerson.good()) { //创建员工结点 switch(Duty) { case 1:p=new Manager(No,Name,Duty); break; case 2:p=new SalesManager(No,Name,Duty); break; case 3:p=new Sales(No,Name,Duty,Amount); break; case 4:p=new Technician(No,Name,Duty,T); break; } p->next=0; //员工结点加入链表 if(Worker) //若已经存在结点 { Person *p2; p2=Worker; while(p2->next) //查找尾结点 {
- 22 -

沈阳工程学院课程设计报告

第四章 系统功能的实现

p2=p2->next; } p2->next=p; //连接 } else //若不存在结点(表空) { Worker=p; //连接 } //读下一条记录 fPerson>>No>>Name>>Duty; if(Duty==3)fPerson>>Amount; else if(Duty==4)fPerson>>T; } fPerson.close(); cout<<"\n 人员和基础数据已经装入...\n"; }

在主界面中输入 4,显示需要设置的基础数据。如图 4.6 所示:

图 4.6 基础数据设置功能

4.6 查询功能
查询功能要求:能根据编号和姓名进行查询。查找函数通过输入查找方式,进一步输入 编号和姓名,与原系统中存储的编号,姓名的比较,找到与输入相同的位置。程序源代码如
- 23 -

沈阳工程学院课程设计报告

第四章 系统功能的实现

下:
void Company:: Query() { int No,a; char Name[20]; Person *p1,*p2; p1=Worker; cout<<"\n*************************查找员工***********************\n"; cout<<"请选择查找方式:1 按编号查找 2 按姓名查找"<<endl; cin>>a; if(a==1) { cout<<"ID:"; cin>>No; //查找要修改的结点 while(p1) { if(p1->No==No) break; else { p2=p1; p1=p1->next; } } } else { cout<<"姓名:"; cin>>Name; //查找要修改的结点 Person *p1,*p2; p1=Worker; while(p1) { if((strcmp(p1->Name,Name))==0) break; else { p2=p1; p1=p1->next; } } } p1->Output(); }

在主界面中输入 5 后,选择查询方式,根据系统提示输入信息。例如,按编号查找,输 入要找的编号。在系统没有要找信息时,系统会给出提示,如图 4.7 所示。系统中有符合所 查询信息时,显示该人信息。如图 4.8 所示
- 24 -

沈阳工程学院课程设计报告

第四章 系统功能的实现

图 4.7 查询功能(按编号查找)

图 4.8 查询功能(按姓名查找)

4.7 保存功能
保存功能:启动程序时能读取人员信息,关闭程序时能将信息保存至硬盘文件。程序源 代码如下:
void Company::Save() //数据存盘(包括基础数据,人员数据),均采用文本文件 {
- 25 -

沈阳工程学院课程设计报告

第四章 系统功能的实现

ofstream fPerson,fBase; //定义文件输出流对象 char c; cout<<"\n 保存人员和基础数据,是否继续?[Y/N]:"; cin>>c; if(c!='Y'&&c!='y')return; //保存人员编号、姓名、岗位 fPerson.open("person.txt",ios::out); Person *p=Worker; while(p) { fPerson<<p->No<<"\t"<<p->Name<<"\t"<<p->Duty<<"\t"; if(p->Duty==3) fPerson<<((Sales*)p)->GetAmount()<<"\t"; else if(p->Duty==4) fPerson<<((Technician *)p)->GetT()<<"\t"; fPerson<<endl; p=p->next; } fPerson.close(); //保存基础数据 fBase.open("base.txt",ios::out); fBase<<"经理固定月薪\t"<<ManagerSalary<<endl; fBase<<"销售经理固定月薪\t"<<SalesManagerSalary<<endl; fBase<<"销售经理提成%\t"<<SalesManagerPercent<<endl; fBase<<"销售人员提成%\t"<<SalesPercent<<endl; fBase<<"技术人员小时工资\t"<<WagePerHour<<endl; fBase<<"ID\t"<<ID<<endl; fPerson.close(); cout<<"\n 保存人员和基础数据已经完成...\n"; }

在主界面中输入 6,系统会将系统中所有人信息保存到文件如图 4.9 和 4.10 所示。

- 26 -

沈阳工程学院课程设计报告

第四章 系统功能的实现

图 4.9 保存功能(1)

图 4.10 保存功能(2)

4.8 退出功能
退出功能要求:编辑完毕后,退出此公司人员管理系统。在主界面中输入 7,便可退出
- 27 -

沈阳工程学院课程设计报告

第四章 系统功能的实现

系统,如图 4.11 所示:

图 4.11 退出功能

- 28 -

沈阳工程学院课程设计报告

总结

结论

充实的一周实训过去了,从刚开始的不只如何下手到最后看到自己的程序按自己的想法 运行,心里时不时的有一种喜悦。通过这一周的实习,我认识到书上和老师教的内容是有限 的,要想掌握更多的知识我们必须多动脑,多思考,不断地靠自己去学习,同时我们还应向 他人请教,从而了解更多自己不知道的知识。 通过这周的编程我发现了自己的一些不足,在编写时经常犯一些低级错误,由于自己的 马虎而浪费了不少时间。这些不足既然被发现就得在以后的做事中注意,争取改掉。 经过一周的努力我掌握了一些基本的 C++语言进行程序设计的技巧,更深的理解和运用 结构化程序设计的思想和方法,掌握开发一个小型实用系统的基本方法,同时学会了一些调 试一个较长程序的基本方法,提高了书写程序设计开发文档的能力(书写课程设计报告) 。 这次的课程设计让我受益匪浅,在此我要感谢孜孜不倦指导我们的老师,感谢在我困惑 时给我帮助的同学,感谢学校给我们一个这样动手动脑的机会,使我们在理论与实践相结合 方面又得到了一次很好的锻炼,让我们得到很大的收获。

- 29 -

沈阳工程学院课程设计报告

结 论

附录: 源程序 #include <iostream.h> #include <fstream.h> #include<stdlib.h> #include <string.h> //全局数据,对象 double ManagerSalary; double SalesManagerSalary; double SalesManagerPercent;

//经理固定月薪 //销售经理固定月薪 //销售经理提成%

double SalesPercent; //销售人员提成% double WagePerHour; //技术人员小时工资 int ID; // 员工标识(要保证唯一) /***********************员工类**********************/ class Person { protected: int No; //编号 char Name[20]; //姓名 int Duty; //岗位 double Earning; //收入 Person *next; public: Person(char ID,char *Name,int Duty) { this->Duty=Duty; strcpy(this->Name,Name); this->No=ID; } virtual void CalcSalary()=0; virtual void Output()=0; friend class Company; }; /************************经理类*******************/ class Manager:public Person { public: Manager(char ID,char *Name,int Duty):Person(ID,Name,Duty){ } void CalcSalary(){Earning=ManagerSalary;}
30

沈阳工程学院课程设计报告

结 论

void Output() { CalcSalary(); cout<<No<<"\t"<<Name<<"\t\t 经理\t\t"<<Earning<<endl; } }; /********************销售经理类********************/ class SalesManager:public Person { private: double Amount; public: SalesManager(char ID,char *Name,int Duty):Person(ID,Name,Duty){} void SetAmount(double s) { Amount=s; } void CalcSalary() { Earning=SalesManagerSalary+Amount*SalesManagerPercent/100; } void Output() { CalcSalary(); cout<<No<<"\t"<<Name<<"\t\t 销售经理\t"<<Earning<<endl; } }; /**************销售员类***************************/ class Sales:public Person { private: double Amount; public: Sales(char ID,char *Name,int Duty,double Amount):Person(ID,Name,Duty) { this->Amount=Amount; } double GetAmount() //用于计算月销售总额 sum { return Amount;
31

沈阳工程学院课程设计报告

结 论

} void CalcSalary() { Earning=SalesPercent/100*Amount; } void Output() { CalcSalary(); cout<<No<<"\t"<<Name<<"\t\t 销售员\t\t"<<Earning<<"\t\t"<<Amount<<endl; } }; /***********************技术员类**********************/ class Technician:public Person { private: double t; public: Technician(char ID,char *Name,int Duty,double T):Person(ID,Name,Duty) { this->t=T; } double GetT() { return t; } void CalcSalary() { Earning=WagePerHour*t; } void Output() { CalcSalary(); cout<<No<<"\t"<<Name<<"\t\t 技术员\t\t"<<Earning<<"\t\t"<<t<<endl; } }; /**************************公司类***********************/ class Company { private: Person *Worker; /*员工表*/
32

沈阳工程学院课程设计报告

结 论

public: Company() { Worker=NULL; Load(); } ~Company() { Person *p; p=Worker; while(p) { p=p->next; delete Worker; Worker=p; } Worker=0; } void Add(); //增加人员-----------------------------------------------(姚天驰) void Delete(); //删除人员 void display();//显示本月工资和销售信息 void Query(); void Set(); void Save(); void Load(); }; void Company::Add() { Person *p; //新结点指针 int Duty; char Name[20]; double Amount,T; cout<<"\n** 新增员工 **\n"; //输入员工信息 ID++; cout<<"输入岗位(1-经理 2-销售经理 3-销售员 4-技术员):"; cout<<"输入姓名:"; cin>>Name; if(Duty==3) {
33

//查询 //基础数据设置 //数据存盘(包括基础数据,人员数据) //数据装入(包括基础数据,人员数据)

cin>>Duty;

沈阳工程学院课程设计报告

结 论

cout<<"本月销售额:";

cin>>Amount;

} else if(Duty==4) { cout<<"本月工作小时数(0-168):"; cin>>T; } //创建新员工结点 switch(Duty) { case 1:p=new Manager(ID,Name,Duty); break; case 2:p=new SalesManager(ID,Name,Duty); break; case 3:p=new Sales(ID,Name,Duty,Amount); break; case 4:p=new Technician(ID,Name,Duty,T); break; } p->next=0; //员工结点加入链表 if(Worker) //若已经存在结点 { Person *p2; p2=Worker; while(p2->next) //查找尾结点 { p2=p2->next; } p2->next=p; //连接 } else //若不存在结点(表空) { Worker=p; } } /**************************删除*************************//---------------------(姚天驰) void Company::Delete() //删除人员 { int No; cout<<"\n** 删除员工 **\n"; cout<<"ID:"; cin>>No;
34

//连接

沈阳工程学院课程设计报告

结 论

//查找要删除的结点 Person *p1,*p2; p1=Worker; while(p1) { if(p1->No==No) break; else { p2=p1; p1=p1->next; } } //删除结点 if(p1!=NULL)//若找到结点,则删除 { if(p1==Worker) //若要删除的结点是第一个结点 { Worker=p1->next; delete p1; } else //若要删除的结点是后续结点 { p2->next=p1->next; delete p1; } cout<<"找到并删除\n"; } else //未找到结点 cout<<"未找到!\n"; } /********************显示**************************//--------------------------(杨家辉) void Company::display() { cout<<"\n**************** 公司人员本月工资和销售信息 *********************\n"; cout<<"编号\t 姓名\t\t 职位\t\t 月工资\t\t 销售额或工作时间"<<endl; double sum=0; //销售额总和 Person *p=Worker;
35

沈阳工程学院课程设计报告

结 论

while(p) { if(p->Duty==3) sum+=((Sales *)p)->GetAmount(); p=p->next; } p=Worker; double sum2=0; //工资总和 while(p) { if(p->Duty==2)((SalesManager *)p)->SetAmount(sum); //sum 和 sum2 必须分开计算 p->Output(); sum2+=p->Earning; p=p->next; } cout<<"本月盈利:"<<sum*0.20-sum2<<" (按照 20%利润计算)"<<endl;

} /***********************设置基础数据**************************//----------(夏振新) void Company::Set() { cout<<"\n** 设置基础数据 **\n"; cout<<"经理固定月薪["<<ManagerSalary<<"元]:"; cin>>ManagerSalary; cout<<"销售经理固定月薪["<<SalesManagerSalary<<"元]:"; cin>>SalesManagerSalary; cout<<"销售经理提成["<<SalesManagerPercent<<"%]:"; cin>>SalesManagerPercent; cout<<"销售人员提成["<<SalesPercent<<"%]:"; cin>>SalesPercent; cout<<"技术人员小时工资["<<WagePerHour<<"(元/小时)]:"; cin>>WagePerHour; cout<<"员工标识[>="<<ID<<"]:"; cin>>ID; } /***********************查找**************************//------------------(夏振新) void Company:: Query() {
36

沈阳工程学院课程设计报告

结 论

int No,a; char Name[20]; Person *p1,*p2; p1=Worker; cout<<"\n*************************查找员工***********************\n"; cout<<"请选择查找方式:1 按编号查找 2 按姓名查找"<<endl; cin>>a; if(a==1) { cout<<"ID:"; cin>>No; //查找要修改的结点 while(p1) { if(p1->No==No) break; else { p2=p1; p1=p1->next; } } } else { cout<<"姓名:"; cin>>Name;

//查找要修改的结点 Person *p1,*p2; p1=Worker; while(p1) { if((strcmp(p1->Name,Name))==0) break; else { p2=p1; p1=p1->next; } } p1->Output(); } /***************************保存******************************/---------------(王泽岩) void Company::Save() //数据存盘(包括基础数据,人员数据),均采用文本文件 {
37

}

沈阳工程学院课程设计报告

结 论

ofstream fPerson,fBase;

//定义文件输出流对象 cin>>c;

char c; cout<<"\n 保存人员和基础数据,是否继续?[Y/N]:"; if(c!='Y'&&c!='y')return;

//保存人员编号、姓名、岗位 fPerson.open("person.txt",ios::out); Person *p=Worker; while(p) { fPerson<<p->No<<"\t"<<p->Name<<"\t"<<p->Duty<<"\t"; if(p->Duty==3) fPerson<<((Sales*)p)->GetAmount()<<"\t"; else if(p->Duty==4) fPerson<<((Technician *)p)->GetT()<<"\t"; fPerson<<endl; p=p->next; } fPerson.close(); //保存基础数据 fBase.open("base.txt",ios::out); fBase<<"经理固定月薪\t"<<ManagerSalary<<endl; fBase<<"销售经理固定月薪\t"<<SalesManagerSalary<<endl; fBase<<"销售经理提成%\t"<<SalesManagerPercent<<endl; fBase<<"销售人员提成%\t"<<SalesPercent<<endl; fBase<<"技术人员小时工资\t"<<WagePerHour<<endl; fBase<<"ID\t"<<ID<<endl; fPerson.close(); cout<<"\n 保存人员和基础数据已经完成...\n"; } void Company::Load() //数据装入(包括基础数据,人员数据) { //基础数据装入 ifstream fBase; //建立文件输入流对象 char buf[80]; //buf 用于保存数据文件中的注释字符串 fBase.open("base.txt",ios::in); fBase>>buf>>ManagerSalary; //经理固定月薪
38

沈阳工程学院课程设计报告

结 论

fBase>>buf>>SalesManagerSalary;

//销售经理固定月薪

fBase>>buf>>SalesManagerPercent; //销售经理提成% fBase>>buf>>SalesPercent; //销售人员提成% fBase>>buf>>WagePerHour; //技术人员小时工资 fBase>>buf>>ID; //员工标识 fBase.close(); //人员数据数据装入 ifstream fPerson; Person *p=Worker; int No; char Name[20];

int Duty;

double Amount,T; fPerson.open("person.txt",ios::in); //读一条记录 fPerson>>No>>Name>>Duty; if(Duty==3)fPerson>>Amount; else if(Duty==4)fPerson>>T; while(fPerson.good()) { //创建员工结点 switch(Duty) { case 1:p=new Manager(No,Name,Duty); break; case 2:p=new SalesManager(No,Name,Duty); break; case 3:p=new Sales(No,Name,Duty,Amount); break; case 4:p=new Technician(No,Name,Duty,T); break; } p->next=0; //员工结点加入链表 if(Worker) //若已经存在结点 { Person *p2; p2=Worker; while(p2->next) //查找尾结点 { p2=p2->next; } p2->next=p; //连接
39

沈阳工程学院课程设计报告

结 论

} else //若不存在结点(表空) { Worker=p; //连接 } //读下一条记录 fPerson>>No>>Name>>Duty; if(Duty==3)fPerson>>Amount; else if(Duty==4)fPerson>>T; } fPerson.close(); cout<<"\n 人员和基础数据已经装入...\n"; } void main() { char c; Company a; do { system("cls"); //----------------------------------------------------(杨家辉)

cout<<"\n\t\t*********** 公司人员管理系统 ***********\n"; cout<<"\t\t\t1-增加人员\n"; cout<<"\t\t\t2-删除人员\n"; cout<<"\t\t\t3-显示本月经营信息\n"; cout<<"\t\t\t4-基础数据设置\n"; cout<<"\t\t\t5-查询\n"; cout<<"\t\t\t6-保存\n"; cout<<"\t\t\t7-退出\t 请选择(1-7):"; cin>>c; switch(c) { case '1': case '2': case '3': case '4': case '5': case '6': } }while(c!='7');}
40

a.Add(); system("pause");break; a.Delete();system("pause");break; a.display(); system("pause");break; a.Set(); system("pause");break; a.Query(); system("pause");break; a.Save(); system("pause");break;


更多相关文档:

《C++程序设计》习题解答

C++程序设计》习题解答 第1章 1.填空题(1)在面向对象程序设计中,对象是由__对象名___、___一组属性数据___ 和___一组操作___封装在一起构成的实体。...

C++语言程序设计实验答案_C++简单程序设计

C++语言程序设计实验答案_C++简单程序设计_理学_高等教育_教育专区。实验 02 C++简单程序设计(6 学时)(第 2 章 C++简单程序设计) 一、实验目的 (1) 学会编写...

C++程序设计(第二版_吴乃陵_况迎辉)课后答案

C++程序设计(第二版_吴乃陵_况迎辉)课后答案_工学_高等教育_教育专区。C++程序设计(第二版_吴乃陵_况迎辉)课后答案第一章 C++基础知识习题 1 第一章 C++基础知识...

c++程序设计1

c++程序设计1_计算机软件及应用_IT/计算机_专业资料 暂无评价|0人阅读|0次下载|举报文档 c++程序设计1_计算机软件及应用_IT/计算机_专业资料。一、单项选择题 1...

C++程序设计基础-程序源代码

C++程序设计基础》例题电子稿 第一章 【例 1.1】一个简单的控制台程序 #include< iostream> using namespace std int main() { cout<<"Hello, World! "...

C++程序设计报告

C++程序设计报告_实习总结_总结/汇报_实用文档。课程名称: C++ 课程设计 n, 设计题目: 编写程序提示用户输入一个班级中的学生人数 再依次提示用户输入 n 个人在...

c++程序设计 谭浩强 答案 完整版

c++程序设计 谭浩强 答案 完整版_理学_高等教育_教育专区。c++程序设计 谭浩强 答案 完整版 第一章 1.5 题 #include <iostream> using namespace std; int main...

C++程序设计-实践报告

C++程序设计-实践报告_实习总结_总结/汇报_应用文书。C++程序设计-实践报告课程实践报告 设计题目: 程序设计(VC++)实践 设计时间 2013-1- 至 2013-1学院(系):...

c++程序设计教案

70 1 海南软件职业技术学院《C++程序设计》教案 课题 01:Visual C++6.0 开发环境 一、教学目标: 1.掌握 Visual C++6.0 开发工具的选单、工具栏、项目、工作区...

C++程序设计(第二版_吴乃陵_况迎辉)课后答案

C++程序设计(第二版_吴乃陵_况迎辉)课后答案_理学_高等教育_教育专区。c++课后习题解答第一章 C++基础知识习题 1 第一章 C++基础知识习题 1.1 判断下列标识符的...
更多相关标签:
网站地图

文档资料共享网 nexoncn.com copyright ©right 2010-2020。
文档资料共享网内容来自网络,如有侵犯请联系客服。email:zhit325@126.com