重 庆 交 通 大 学 计 算 机 与 信 息 学 院
课 程 设 计 报 告 书
专 业:计算机科学与技术
课程设计名称:《面象对象程序设计课程设计》
题 目:公司人员管理系统
班 级:计算机信息技术应用 2 班
设 计 者:
学 号:631106060210
指 导 教 师:罗宪
完 成 时 间:2012 年 6 月 18 日至 2011 年 6 月 29 日
重庆交通大学计算机与信息学院课程设计任务书
课 程
C++ 面 向 对 象 程
序设计
班级
计算机信息技术应
用 2 班
指导教师
罗宪
题 目
公司人员管理系统
完成时间
2012.06.18-2012.06.29
主要内容
问题描述(功能要求):
某小型公司,主要有四类人员:经理、兼职技术人员、销售经理和兼职
推销员。现在,需要存储这些人员的姓名、编号、级别、当月薪水,计算月
薪总额并显示全部信息。要求:
1.其中,人员编号在生成人员信息时同时生成,每输入一个人员信息编号顺
序加 1。
2.程序对所有人员有提升级别的功能。
3.月薪的计算方法是:经理拿固定月薪,兼职技术人员按工作小时数领取月
薪,兼职推销员的报酬按该推销员当月销售额提成 ,销售经理既拿固定月薪也
领取销售提成。
4.能按姓名或者编号显示、查找、增加、删除和保存各类人员的信息。
5.用文件方式处理实现。
6.主要操作用菜单方式。
设计报告要求
1.封面
2.课程设计任务书
3.课程设计报告:
⑴ 系统总体方案
⑵ 设计思路和主要步骤
⑶ 各功能模块和流程图
⑷ 主要代码
⑸ 测试说明
⑹ 心得体会和参考资料
⑺ 说明
学生完成课程设计后,提交课程设计报告及软件;
设计报告要求文字通畅,排版规范;
设计报告文字不少于 5000 字,并装订成册。
版面要求
1.题目用黑体三号,段后距 18 磅(或 1 行),居中对齐;
2.标题用黑体四号,段前、段后距 6 磅(或 0.3 行);
3.正文用小四号宋体,行距为固定值“20”;
4.标题按“一”、“㈠”、“1”、“⑴”顺序编号。
上机时间安排
星期
周次
一 二 三 四 五 六 日
第 17
周
2-7 2-7 2-7 2-7
第 18
周
2-7 2-7 2-7 2-7 2-7
指导时
间地点
上机时间:双福校区信息技术实验室
公司人员管理系统
一、系统总体方案
根据系统要求,将问题解决分为以下几个步骤:
(一)、分析系统功能,建立系统的功能模块框图及界面的组织设计;
(二)、分析系统中的各个对象及其关系;
(三)、根据功能要求,设计系统的类层次;
(四)、完成类层次中各个类的描述;
(五)、完成类中各个成员函数的定义;
(六)、完成系统中的各功能模块;
(七)、功能调试;
(八)、完成课程设计报告。
二、设计思路和主要步骤
(一)、 根 据 系统要求 , 在 程序设计 中 主 要分为 两个大 类 : 即 person 人 类 与
company 公司类。其中考虑到人员信息具有编号、姓名、工资等共有信息,故将
person 类设置为基类,将 manager 经理类、tech_man 兼职技术员类、sale_man 兼
推销员类、sale_manager 设置为 person 的派生类,以避免变量的重复定义。
(二)、人员工资计算中,经理工资 managersalary、兼职技术员每小时工资
pay、兼职推销员提成 sale_man_percent、销售经理工资 sale_managersalary、销
售经理提成 manager_percent 是整个公司的参数,即为整个系统使用的变量,所以在
系统中将此几个变量设为全局变量。同时系统要求人员编号在生成人员信息时同时生成,
每输入一个人员信息编号顺序加 1,故可以设置一个全局变量 numdata 用于记录当前编
号数据,随着人员增加编号自动增加。为统计公司的销售总额,设置一个全局变量
num_saleroom 来进行统计。
(三)、有了存储人员信息的 person 类后,在 company 类中实现对人员信息即
person 类的管理,实现基本数据的设置、增加人员、删除人员、修改人员信息、查询人
员信息、显示人员信息、保存人员信息、加载已存储人员信息等功能。其中人员信息的
保存与加载利用文件处理实现,将数据保存在 company_person.txt 中。为了数据存储
的安全性,所以保存的数据不采用任何注释!
(四)、考虑到系统要能够增加与删除人员,因此在程序中使用链表来实现各个成员
的连接,而不采用对象数组,以方便各成员间的连接。在定义 person 类时,在其数据成
员中定义自身的 next 指针,用以实现链表结构。
(五)、由于人员类型以及人员人数具有很大的不确定性,在生成人员数据时采用动
态的方式,也更方便执行删除人员的操作,或者修改人员后的原成员的删除。
三、各功模块和流程图
(一)、功能模块
1. 程 序 除 person 类 和 company 类 两 主 要 类 外 , 还 有 manager 经 理 类 、
tech_man 兼职技术员类、sale_man 兼推销员类、sale_manager。将此几类设为
person 类的共有派生类。
2.在 person 类中定义人员的编号、姓名、工资、职位及其自身的 next 指针(实现
链表结构),并定义构造函数;由于几个派生类的功能相似,为避免出现程序二义性的
问题,在 person 类中定 义纯虚函 数为派生类函数提供接口。并将 company 设为
person 类的友元类以实现类与类之间的连接。
3.为便于工资的计算,在 tech_man 类中增加工作时间参数 time,sale_man 类中
增加销售额参数 saleroom。
4.在 company 中定义系统的各功能性函数,其中包含 set()数据设置、add()增加人
员、del()删除人员、modify()修改人员信息、search()查询人员信息、show()显示人
员信息、save()保存人员信息及 load()加载已保存的数据。在 company 的数据成员中
定义 person 的 head 头结点,构造函数中将 head 指向 NULL,并选择是否加载已存数
据。
模块图见下页:
采用共有继承
person 类
参数:
int number;
char name[20];
double salary;
int position;
函数:
person();
virtual void
calc_salary()=0;
virtual void print()=0;
friend class company;
manager 类
tech_man 类
sale_man 类
sale_manager 类
double time;
double saleroom