Chinaunix首页 | 论坛 | 博客
  • 博客访问: 2349494
  • 博文数量: 816
  • 博客积分: 10000
  • 博客等级: 上将
  • 技术积分: 5010
  • 用 户 组: 普通用户
  • 注册时间: 2008-12-17 17:57
文章分类

全部博文(816)

文章存档

2011年(1)

2008年(815)

分类:

2008-12-17 18:08:31

面向对象编程:C++ 作业案例
一、 总体描述
为一个公司设计一个打印每月工资单程序,要求用面向对象的方法实现,该公司有三类雇员,老板(Boss)、销售员(SaleEmployee)和小时工(HourlyWorker),定义一个工资单链表类,此类用来存放不同雇员的的对象。用虚函数和多态性根据雇员的类型完成工资单的打印。
二、 设计
可以采用自顶向下的模块化方法来设计这个程序。这个程序可以划分为三个部分:欢迎模块、输入雇员基本信息和工资、和打印工资单模块。
首先设计欢迎模块,该模块主要是主要用于增强程序界面的友好性,用来显示欢迎信息、软件名称及作者信息,我们希望显示如下信息:
/******************************/
/*    欢迎使用工资管理系统    */
/*       作者:王   林        */
/******************************/
输入模块应告诉用户需输入雇员的基本信息(姓名、职务),以及工资信息,根据雇员不同的类型输入工资信息。要求连续输入雇员信息直到满足结束条件为止。
打印模块要求连续打印雇员姓名、职务,以及本月工资等信息。要求格式输出规范的工资单信息,如:
姓名         雇员类型             工资
李明         老板                 5000
王武         销售员               4000
张三         小时工               1000
三、 开发计划
在前面设计阶段已经指出需要设计四个程序模块。实际上还需要一个根模块来调用这四个模块,调用的次序是:欢迎模块、输入模块和输出模块。程序的模块结构如下图所示。每个模块都可以独立地编写。根模块将被编写成一个main函数,欢迎模块、输入模块和输出路径模块将分别对应于一个函数。






程序结构如下:
// 函数模块
// 欢迎模块Welcome
// 输入模块InputInfo
// 打印模块PrintSalaryList
void main()
{
Welcome( );
InputInfo(… );
PrintSalaryList(… );
}
四、 程序具体实现
4.1阶段一
1.描述:不同雇员类的创建
2.对应书中的内容:《面向对象编程:C++》第2章 详解类 第5章 继承 第6章 多态性
3.具体实现:
(1)从老板(Boss)、销售员(SaleEmployee)和小时工(HourlyWorker) 中抽象出一个抽象基类雇员(Employee)。
(2)基类中定义姓名、雇员(分为老板、销售员和小时工)等公共信息,提供公共信息打印接口(print( )),提供一个计算雇员月工资的纯虚函数(earnings( ))。
(3)基类中派生老板类(Boss),老板的每月工资是固定的,所以只要在老板类中定义一个月工资数据成员(monthsalary),另外具体实现基类计算工资函数。
(4)从基类中派生销售员类(SaleEmployee),销售员的工资是他的基本工资加上本月销售额的2%,所以要在销售员类中分别定义两个数据成员:基本工资(BaseSalary)和本月销售额(SalarySum)。另外具体实现基类计算工资的函数。
(5)从基类中派生小时工类(HourlyWorker),小时工没有基本工资,他的工资只是该月工作的小时数*每小时的工资,所以要在小时工类中分别定义每月工作的总的小时数和每小时的工资这两个数据成员。
类其本定义如下,要求实现各个类的构造函数、析构函数以及其它成员函数的定义,不同雇员类的工资计算函数按照以上各种类的工资计算。
//基类:雇员类
class Employee
{
protected:
char * name;          //姓名
char * headship;       //雇员类型
public:
Employee(const char *,const char *); //构造函数
~Employee();                        
virtual void print() const;          //定义虚函数
virtual double earnings() const=0;  //工资
    //其他所需的公共接口
};
//老板类
class Boss:public Employee
{
private:
double monthsalary;          //月薪
public:
Boss(const char * ,const char *,double=0.0);
void setmonthsalary(double);
double earnings() const;
void print() const;
//其他所需的公共接口
};
class SaleEmployee:public Employee
{
private:
double basesalary;  //基本工资
double salesum;     //销售额  
public:
    SaleEmployee(const char *,const char *,double,double);
void print() const;
double earnings() const;
//其他所需的公共接口
};
class HourlyWorker:public Employee
{
    double hours;
double wage;
public:
HourWorker(const char*,const char*,double,double);
void print()const;
double earnings()const;
//其他所需的公共接口
};
4.2 阶段二
1.描述:创建工资单链表类
2.对应书中的内容:《面向对象编程:C++》第2章 详解类
3.具体实现:
   定义一个工资单链表类(SalaryList),并将该类声明为上面所有类的友元,使该类可以访问他们的私有成员。要求在链表中能完成插入、删除操作,可以判断链表是否空,可以打印链表中元素。首先定义一个链表结点类,结点

class SalaryList;  //前向声明
//以下链表结点类
class SalaryListNode  
{
  friend class SalaryList;
private:
    Employee data;
    SalaryListNode *Next;
}
//以下链表类
class SalaryList
{
private:
  SalaryListNode * first; //链表头指针
public:
  SalaryList( );
  void insert_Employee(Employee * node); //向工资表插入一个雇员
  void print_SalaryList( );              //打印工资表信息
      bool isEmpty( );                     //判断链表是否空
     //其他所需的公共接口
};
4.3 阶段三
描述:欢迎模块、输入模块、打印模块以及主模块的设计
欢迎模块的实现非常简单,直接输出即可。
输入模块的实现:首先实例化一个工资链表对象,要求通过各种雇员类的构造函数实例化各个雇员对象,然后调用工资链表类(SalaryList)的插入工资表方法,将每个雇员插入工资表。
输出模块的实现:调用工资链表类的打印工资表信息方法实现。
主模块(main)的实现

附:评分标准
整个作业分3个阶段,全部完成100分,各个阶段评分方法如下:

阶段一
总分35分,按阶段一要求创建四个类,创建抽象基类Employee类并正确编写构造函数和析构函数以及其它函数(5分),其它三个类各10分。

阶段二
总分35分,按阶段二要求创建工资链表类(8分),并正确编写构造函数(2分)、析构函数(2分)、插入函数(10分)和打印函数(5分),将工资链表类声明为其它四个类的友元(8分)。

阶段三
      总分30分,欢迎模块的实现(5分),输入模块的实现(10分),打印模块的实现(10分),主模块(5分)。


我们这个要两部分,一部分是那个程序,而另一部分是就是要像这个北大青鸟的一样写一个表出来,按照他那种形式写出来,有哪写地方编的好



哪位老大能帮帮我啊,搞了很久也不会,很急!感激不尽啊!,可以将答案发到我邮箱吗?  cpy242@163.com


--------------------next---------------------

阅读(1698) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~