实验七

1.实验名称:实验七 公司工资管理程序

2.实验时间:2008-4-1

3.实验目的:编程用面向对象设计思想分析、设计并实现实验七的内容。

4.实验内容:

一、编写程序实现公司工资管理程序,其中抽象基类包括工资salary和员工staff姓名两个数据成员,提供工资计算和工资显示两个虚函数。派生类包括雇主master、推销员salesman、记件piecepayworker工资工人、记时hourpayworker工资工人,其中雇主工资固定为10000元,推销员工资为基本工资加推销业绩提成,记件工人工资为基本工资加记件提成,记时工工资为小时数乘以每小时工资。试完成上述各类的声明、定义并进行测试。

二、定义一个有10个字符串的数组,用起泡排序算法对其进行排序并输出排序后的结果(提示使用strcmp函数比较字符串的大小)。

 //程序源代码

//SalaryManagement.cpp

#include <iostream.h>

#include <string.h>

class Staff

{

protected:

       double salary;

       char *sName;

public:

    Staff()

       {

              char name[30];

              salary=800;

              cout<<"姓名:";

              cin>>name;

              sName=new char[strlen(name)+1];

              strcpy(sName,name);

       }

       virtual ~Staff()

       {delete[] sName;}

       virtual void calSalary(){};

       virtual void dispMsg(){};

};

class Master:public Staff

{

public:

       Master()

       {Staff::salary=10000;}

       void calSalary()

       {

         salary=Staff::salary;     

       }

       void dispMsg()

       {

              cout<<"雇主的工资是:"<<salary<<endl;

       }

};

class Salesman:public Staff

{

private:

       double sales;

    double rate;

public:

       Salesman(): rate(0.01)

       {

              cout<<"销售员的销售业绩:";

              cin>>sales;

       }

       void calSalary()

       {salary=salary+sales*rate;}

       void dispMsg()

       {

              cout<<"销售员的工资是:"<<salary<<endl;

       }

};

class PiecePayWorker:public Staff

{

private:

       int pieces;

       double rate;

public:

       PiecePayWorker():rate(0.01)

       {

              cout<<"记件工人的件数:";

              cin>>pieces;

       }

       void calSalary()

       {salary=salary+pieces*rate;}

       void dispMsg()

       {

              cout<<"记件工人的工资是:"<<salary<<endl;

       }

};

class HourPayWorker:public Staff

{

private:

       double hours;

       double hourPay;

public:

       HourPayWorker():hourPay(20)

       {

              cout<<"记时工人工作小时数:";

              cin>>hours;

       }

       void calSalary()

       {salary=hours*hourPay;}

       void dispMsg()

       {

              cout<<"记时工人的工资是:"<<salary<<endl;

       }

};

void main()

{

       Master staff1;

       Salesman staff2;

       PiecePayWorker staff3;

       HourPayWorker staff4;

       Staff *ptrStaff;

 

       ptrStaff=&staff1;

       ptrStaff->calSalary();

       ptrStaff->dispMsg();

 

       ptrStaff=&staff2;

       ptrStaff->calSalary();

       ptrStaff->dispMsg();

 

       ptrStaff=&staff3;

       ptrStaff->calSalary();

       ptrStaff->dispMsg();

 

       ptrStaff=&staff4;

       ptrStaff->calSalary();

       ptrStaff->dispMsg();

}

/**************************************************************************

 * (C) Copyright 1992-2005 by Deitel & Associates, Inc. and               *

 * Pearson Education, Inc. All Rights Reserved.                           *

 *                                                                        *

 * DISCLAIMER: The authors and publisher of this book have used their     *

 * best efforts in preparing the book. These efforts include the          *

 * development, research, and testing of the theories and programs        *

 * to determine their effectiveness. The authors and publisher make       *

 * no warranty of any kind, expressed or implied, with regard to these    *

 * programs or to the documentation contained in these books. The authors *

 * and publisher shall not be liable in any event for incidental or       *

 * consequential damages in connection with, or arising out of, the       *

 * furnishing, performance, or use of these programs.                     *

 **************************************************************************/

//实验结果

/*

姓名:master

姓名:salesman

销售员的销售业绩:10000

姓名:piecepayworker

记件工人的件数:150

姓名:hourpayworker

记时工人工作小时数:50

雇主的工资是:10000

销售员的工资是:900

记件工人的工资是:801.5

记时工人的工资是:1000

Press any key to continue

*/

//string.h

#include <iostream.h>

#include <stdio.h>

#include <string.h>

void scan(char **p,int n)

{

for(int i=0;i<n;i++)

       {

       *p=new char [10];

       gets(*p);

//    puts(*p);

       p++;

       }

}

void print(char **p,int n)

{

       printf("排序结果为:/n");

       for(int i=0;i<n;i++)

       {

       puts(p[i]);

       }

}

/*********************起泡排序***************************/

void Bubble_Sort(char **p,int n)

{

       char temp[30];

       int jtemp;

       printf("*******起泡排序*******/n");

       for(int i=1;i<=n-1;i++)

              for(int j=0;j<n-i;j++)

              {

                     jtemp=j;

                     if(strcmp(p[jtemp],p[jtemp+1])>0)

                     {

                            strcpy(temp,p[j]);

                            strcpy(p[j],p[j+1]);

                            strcpy(p[j+1],temp);

                     }

              }

}

void main()

{

       char *s[10];

       cout<<"请输入10个字符串:"<<endl;

       scan(s,10);

       Bubble_Sort(s,10);

       print(s,10);

}

/*

请输入10个字符串:

abc

abb

aba

acc

acb

aca

aac

aab

aaa

aaaa

*******起泡排序*******

排序结果为:

aaa

aaaa

aab

aac

aba

abb

abc

aca

acb

acc

Press any key to continue

*/

5.实验总结:由于有课本的综合实例教职工工资管理程序做模板,做公司工资管理程序就比较容易了,对派生中类的多态性有更深的理解,以及虚函数的应用,还可以继续完善。

用二级指针指向指针数组来操控指针数组的方法。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
某公司雇员(Employee)包括经理(Manager),技术人员(Technician)和销售员(Salesman)。开发部经理(DeveloperManger),既是经理也是技术人员。销售部经理(SalesManager),既是经理也是销售员。 以Employee类为虚基类派生出Manager,Technician和Salesman类;再进一步派生出Developermanager和Salesmanager类。 Employee类的属性包括姓名、职工号、工资级别,月薪(实发基本工资加业绩工资)。操作包括月薪计算函数(pay()),该函数要求输入请假天数,扣去应扣工资后,得出实发基本工资。 Technician类派生的属性有每小时附加酬金和当月工作时数,及研究完成进度系数。业绩工资为三者之积。也包括同名的pay()函数,工资总额为基本工资加业绩工资。 Salesman类派生的属性有当月销售额和酬金提取百分比,业绩工资为两者之积。也包括同名的pay()函数,工资总额为基本工资加业绩工资。 Manager类派生属性有固定奖金额和业绩系数,业绩工资为两者之积。工资总额也为基本工资加业绩工资。 而DeveloperManager类,pay()函数是将作为经理和作为技术人员业绩工资之和的一半作为业绩工资。 SalesManager类,pay()函数则是经理的固定奖金额的一半,加上部门总销售额与提成比例之积,这是业绩工资。 编程实现工资管理。特别注意pay()的定义和调用方法:先用同名覆盖,再用运行时多态。
<h3>回答1:</h3><br/>实验是关于“基于主成分分析的图像压缩”的智能计算方法实验。该实验目的是利用主成分分析方法对图像进行压缩,实现高效率的图像储存与传输。 首先,在MATLAB环境下,导入图像文件,并将其转化为灰度图像。然后,利用主成分分析方法将图像压缩至指定的压缩比,再将压缩后的图像进行解压缩,最后与原图进行比较,分析压缩质量。 主成分分析(Principal Component Analysis,PCA)是一种常用的线性降维分析方法,将高维数据降维至低维空间,从而提高数据的处理效率。在图像处理中,PCA可以将图像转化为主成分矢量的线性组合,即将原图像分解为多个小波分量,然后根据重要程度进行压缩。由于小波分量中最大的几个分量占图像信息的大部分,因此只需将这几个分量保存,便可实现图像压缩。 在实验中,主要使用MATLAB中自带的函数实现PCA算法,如pca和coder.pca,同时还可以使用MATLAB中的imwrite和imread函数实现图像压缩与解压缩。此外,还可以使用MATLAB中的imresize函数对图像进行调整,以实现更高的压缩比。 总之,MATLAB提供了丰富的函数和工具箱,可以方便地实现基于主成分分析的图像压缩。通过该实验,不仅可以掌握PCA算法的使用方法,还可以了解图像处理中的压缩方法,具有较高的实用价值。 <h3>回答2:</h3><br/>实验是“分类问题的智能计算方法及应用”的实验,主要目的是掌握分类问题的智能计算方法,并实现基于智能计算的分类应用。 在实验中,主要采用了支持向量机(SVM)和人工神经网络(ANN)两种方法来对分类问题进行处理。SVM是一种非线性分类器,具有较强的泛化能力;ANN则可以通过学习来调整网络中各层之间的连接权值,从而得到分类结果。 具体实现过程如下: 1. 首先,需要准备分类问题的数据集,并将其划分为训练集和测试集。训练集用于训练模型,测试集用于测试模型的准确率和泛化能力。 2. 对于SVM方法,需要选择合适的核函数和参数。一般而言,径向基函数(RBF)是一种较为常用的核函数,可以通过交叉验证等方法来确定最优参数。 3. 对于ANN方法,需要选择合适的网络结构和参数。一般而言,三层前馈网络是一种较为常用的网络结构,可以通过反向传播算法来训练网络,从而得到最优参数。 4. 训练好模型后,可以使用测试集来测试模型的准确率和泛化能力。同时,也可以使用模型对新的数据进行分类。 5. 最后,还可以使用其他方法来对分类问题进行处理,比如遗传算法、模糊逻辑等。不同的方法对不同的问题有不同的适用性,需要根据具体情况进行选择。 总的来说,实验通过对分类问题的处理,进一步掌握了智能计算方法的应用,提高了对算法的理解和运用能力。同时,也加强了对数据分析和机器学习的认知,对工程实践具有一定的指导意义。 <h3>回答3:</h3><br/>实验是关于模糊逻辑的实验,利用MATLAB实现。模糊逻辑是一种基于模糊集合的逻辑,可以用来处理信息不确定、模糊的问题。在实际生活中,常常会遇到许多难以明确的问题,例如:天气预报、医学诊断、评估风险等等,这些问题都需要模糊逻辑方法来解决。 模糊逻辑的运算方式与传统的逻辑运算不同,传统的逻辑运算是真或假,而模糊逻辑运算则是存在一定程度上真或假的可能性。因此,在模糊逻辑中需要用到模糊集合、隶属度函数、模糊关系等概念。 MATLAB提供了许多工具箱,其中包括了模糊逻辑工具箱,可以方便的实现模糊逻辑的运算。下面以一个简单的汽车速度控制系统为例来介绍MATLAB实现模糊逻辑的方法。 假设一个汽车速度控制系统,其控制过程是根据车速与期望速度之间的偏差大小来控制加速度或制动。将速度偏差分为五个模糊集合:NB(Negative Big)、NM(Negative Medium)、ZE(Zero)、PM(Positive Medium)、PB(Positive Big),分别代表速度偏差令人担忧、偏低、正常、偏高、过高。假设加速度或制动也分为五个模糊集合:NB、NM、ZE、PM、PB,分别代表急刹车、轻微减速、稳定、轻微加速、急加速。 使用MATLAB中的模糊逻辑工具箱,可以通过设定隶属度函数来定义这些模糊集合。定义好这些模糊集合之后,就可以利用模糊规则和模糊推理的方法,来完成汽车速度控制系统的设计。模糊规则可以使用类似于if-then的形式表示,例如:如果速度偏差为NB,则加速度应为NB。在MATLAB中,可以将这些规则通过Fuzzy Inference System(FIS)表示出来。 最后,我们可以通过MATLAB编写代码,利用以上定义的模糊规则和FIS,对汽车速度控制系统进行建模和仿真。 综上所述,MATLAB实现模糊逻辑的步骤包括:定义模糊集合、设定隶属度函数、制定模糊规则、进行模糊推理和建模、进行仿真分析等。通过这些步骤,可以方便地处理信息不确定或模糊的问题,提高智能计算的效率和准确性。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

yangzhenping

你的鼓励将是我创作的最大动力

¥2 ¥4 ¥6 ¥10 ¥20
输入1-500的整数
余额支付 (余额:-- )
扫码支付
扫码支付:¥2
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、C币套餐、付费专栏及课程。

余额充值