资源描述
本科学生设计性实验报告
项目组长 学号
专 业 班级
实验项目名称 实现一个公司的人员和月薪管理系统
指导教师及职称
开课学期 2007 至 2008 学年 第一 学期
上课时间 2007 年 9 月 3 日
目 录
一、需求分析主要包括: 3
1.1 开发背景: 3
1.2项目目标: 3
1.3运行环境: 4
二、程序分析主要包括: 4
2.1 技术要点: 4
2.2 项目任务书: 5
三、技术路线主要包括: 6
3.1 总体方案: 6
3.2详细设计: 6
四、工程进度主要包括: 10
五、测试分析主要包括: 11
六、个人小结主要包括: 21
七、参考文献: 22
一、需求分析主要包括:
1.1 开发背景:
任务要求: 设计和开发一个公司的人员和月薪管理系统
任务提出者:
开发者:
用户: 公司财务部门
1.2项目目标:
项目的主要目标是什么?
为该公司财务部门提供一个公司的人员和月薪管理系统,能够在该公司发放薪水时,方便财务部门人员为公司各成员发放薪水时提供方便直观的工资报表。
项目具体的功能要求:
某公司,主要有四类人员:经理、兼职技术人员、销售经理和兼职推销员。现在,需要存储这些人的姓名、编号、级别、当月薪水,计算月薪总额并显示全部信息。人员编号技术为2000,每输入一个人员信息编号顺序加1。程序要有对所有人员提升级别的功能。简单起见,本题要求所有人员的初始级别均为1级,然后进行升级,经理升为4级,兼职技术人员和销售经理升为3级,推销员仍为1级。月薪的计算法是:经理拿固定月薪8000元;兼职技术人员按每小时100元领取月薪;兼职推销员的月薪按该推销员当月销售额的4%提成;销售经理既拿固定月薪也领取销售提成,固定月薪为5000元,销售提成为所管辖部门当月销售总额的1.5%。
1.3运行环境:
项目运行的软、硬件环境是什么?
软件:运行在Windows软件环境下的Visual C++ 6.0
硬件:能够运行Visual C++ 6.0软件的PC机或笔记本电脑;
最低配置:要求内存大于128M,硬盘大于2G。
二、程序分析主要包括:
2.1 技术要点:
项目实现过程中如何构建其中的关键类:
首先构建一个person类作为基类:定义职工等级、薪水、职位为保护成员数据;为求职工编号和姓名方便,则定义职工编号、姓名为公有成员数据;另外定义一个静态数据成员count记录当前员工中编号最大的数,从而求出职工编号。
在此基础上定义manager、art、market和salesman为派生类,并在其中定义自身特有的成员数据。然后各自定义一个class_name *next指向下一个同类职工结点的指针,另外定义默认构造函数、带参数的构造函数,以及需要进行操作void create();void insert();int dele();int modified();int search();void show();void save()等需待做的的操作函数。
然后再定义一个menu类,构造菜单,选择需进行的操作。
其余需要使用的技术:
通过定义经理类头manager *head1、兼职技术人员类头art*head2、销售经理类头market *head3、兼职推销员类头salesman*head4为静态局变量,这样利于后面的修改与记录,避免使用返回值。
另外还定义了选择菜单menu的全局对象m,这样可以避免使用menu类时重复定义对象。
三、技术路线主要包括:
3.1 总体方案:
采用的软件及开发平台是什么?
采用的是Microsoft公司的Visual C++作为开发平台。
项目的总体方案—包括模块及模块间的联系、信息流、数据流等:
person
manager
art
market
salesman
类manager、art、market和salesman是由基类person派生出的四个派生类。将person类中的所有成员传递给它的派生类,person类的信息可供四个派生类共享。
当调用menu类中某一成员函数时,将信息传递给类中成员函数,而将其数据流返回给原空间,让其由此数据确定选择需进行的操作。
3.2详细设计:
项目的详细设计—包括模块的功能、数据结构及算法等
模块person
person类将职员的基本信息,包括 职工等级、职工薪水、职工职位、职工编号、职工姓名五个数据成员,但为了能在派生类中使用,将其定义为protected,而其中的职工编号和职工姓名为了操作方便定义为public。再定义一个实现对所有职员信息输出的函数。
class person
{
protected:
int level; //职工等级
double salary; //职工薪水
char *position; //职工职位
public:
int number; //职工编号
char *name; //职工姓名
void display(); //显示职工基本信息
};
模块manager、art、market、salesman(相似)
四个派生类manager类,art类,market类和salesman类对基类负责,实现基类的定义,并各自实现不同薪水的计算。除此之外,四个派生类还可定义自身的特有成员数据,并实现对其的赋值和输出。
除此之外,四个类还分别有指向相应下一结点的指针next。
用employer表示四个派生类名,他们的数据结构皆可为:
class employer:public person
{
public:
market *next; //指向下一个职员的指针
void disp();
void create();
void insert();
int dele();
int modified();
int search();
void show();
void save();
};
模块menu:
int menu0()//选择要进行的操作
{
cout<<"1.create the people information."<<endl;
cout<<"2.insert the people information."<<endl;
cout<<"3.delete the people information."<<endl;
cout<<"4.modifi the people information."<<endl;
cout<<"5.displa the people information."<<endl;
cout<<"6.search the people information."<<endl;
cout<<"7.save the people information."<<endl;
cout<<"0.out"<<endl<<endl;
}
int menu1()//选择操作的对象
{
cout<<"1.manager"<<endl;
cout<<"2.art"<<endl;
cout<<"3.market"<<endl;
cout<<"4.salesman"<<endl;
cout<<"0.out"<<endl<<endl;
}
int menu2()//选择操作依据的方法
{
cout<<"1.input the people num."<<endl;
cout<<"2.input the people name."<<endl;
cout<<"0.out."<<endl<<endl;
}
int menu3()//选择要修改的对象
{
cout<<"1.modified the people's name."<<endl;
cout<<"2.modified the people's position."<<endl;
cout<<"3.modified the people's work time."<<endl;
cout<<"4.modified the people's earn."<<endl;
cout<<"0.out."<<endl<<endl;
}四、工程进度主要包括:
工程进度表—包括时间、计划完成的工作、实际完成情况等
时间
计划完成的工作
实际完成情况
2007.12.8
9:00-10:00
完成对程序的分析
对实验要求及所要实现的目标分析,并相应制定工作计划
2007.12.8
10:00-11:30
编写menu.类和基类person
编写了一小程序调试运行,能实现预期目标。
2007.12.8
14:00-16:00
编写一个单一功能的主函数保存在<main.cpp>文件中
2007.12.9
7:30-11:00
编写manager类并在此操作的基础上修改person类的数据
通过调用主函数,调试运行后,预期功能得以实现
2007.12.9
13:30-15:00
以类manager为样板,编写其他三个派生类art、market、salesman
通过主函数调用、调试和运行,实现了预期的结果
2007.12.9
19:00-22:30
通过主函数的修改,将四个类统一于程序之中,共同完成目标
得到了实验初期的预期目标
2007.12.10
6:30-9:00
依据算法的需求,并根据美观程度等,将程序进行相应地修改
在基本功能不变的情况下,使程序易读健壮
2007.12.10
6:30-22:00
对程序进行最后一次检查和调试,并填写实验报告
工作结束
五、测试分析主要包括:
总体测试—包括测试时间、测试目标、实际测试情况、不足之处等:
开始选择操作界面:
创建信息界面
插入信息界面
删除信息界面
修改职员信息界面
选择如何找到该职员
找到该职员时要进行修改的操作
选择显示某类职工信息界面
查找某职工是否存在
保存某类职工信息到可读文件中
具体操作为:
(1) 在选择操作菜单中选1创建职员信息中:
在manager中输入两个成员名字分别为123和321
在art中输入两个成员名字分别为258和852,工作时间分别为120和210
在market中输入两个成员名字分别为159和951
在salesman中输入两个成员名字分别为357和753,其所挣为1200和2100
(2)在选择操作菜单中选2插入职员信息中:
在manager中插入一成员名字为11
在art中插入一成员名字为22,其工作时间为110
在market中插入一成员名字为33
在salesmank中插入一成员名字为44,所挣为4400
(3)在选择操作菜单中选5显示员工信息
(4)在选择操作菜单中选3删除员工信息
一,没有要删除的职工
二,用两种方法找到了职工
(5)在选择操作菜单中选4修改员工信息
一,没有找到要修改的职工
二,找到了要修改的职工
(6)在选择操作菜单中选6查找某信息的职工是否已存在
一,不存在
二,存在
(7)假若在删除操作中删除了编号为2001和姓名为159的职工信息
再次选择显示操作时则可得到如下结果
(8)假若再在修改操作中修改了编号为2009的姓名为gong,姓名为852的工作时间为110,名字为33的姓名为hao,编号为2008的所挣为1100。
然后再修改名字为321的职工职位成为一个salesman,名字仍为321,所挣为1200
再修改编号为2011的职工职位为一个art,名字仍为hao,工作时间269。
再次选择显示操作时则可得到如下结果
(9)保存该信息到一个.txt文件中:
(10)输入操作数有误
其他操作均有类似的结果
(11)输入0退出操作
确定退出输入y或Y,不退出输入n或N。
六、个人小结主要包括:
经验:
能够利用类的继承关系实现数据重复使用;利用全局变量的关系,减少返回值的使用;使用链表中的知识,使同一类中的单个对象一一串联起来。
教训:
开始因main函数编写不完整,以及程序分析时考虑不全,导致走了许多歪路。所以以后在编写程序之前,应尽力考虑周全。
收获:
进一步加深了对类的认识,而且从中能够在程序中应运到数据结构中的知识,如使用了链表中的next指针。
总结(改进):
能加强对抽象类的认识,使得四类派生职工能再共同派生出一个employer类,使得四类同样的操作能在一个类中得以实现,能够减少空间,这样也增强了文件的可读性。
还希望能加强模板的学习,这样亦可以实现对四个类中同样的操作用模板知识解决。
加深文件操作的学习,该程序只能实现将数据保存到一个.txt文件中供人们查看并作永久保存,但不能将其保存到一个二进制文件中,供人导入至DOS命令中,实现其他操作。
七、参考文献:
[1] 钱能:C++程序设计教程. 清华大学出版社. 2005
[2] 张德慧, 周元哲:C++面向对象程序设计. 科学出版社.2005
[3] 陈志泊:C++语言例题 习题及实验指导.人民邮电出版社.2003
[4]朱振元, 朱承C++程序设计与应用开发.清华大学出版社.2005
[5]陈文宇:面向对象程序设计语言C++.机械工业出版社.2004
[6]李春葆, 章启俊:C++程序设计.清华大学出版社.2005
[7]朱战立, 张玉祥:C++面向对象程序设计.人民邮电出版社.2006
展开阅读全文