销售公司员工管理c++实现


一、 设计目的

Ø  熟练掌握C++语法、能够使用该语言编写较为复杂的程序。

Ø  进一步熟悉类的用法,加深对类之间继承的规律的理解。

Ø  提高对较为复杂程序的编写能力,提高编程能力。

二、 题目设计要求

销售公司员工管理

设计一个虚基类Staff(员工),包含编号、姓名和年龄保护数据成员以及相关的成员函数;由Staff派生出销售员类Salesman,包含销售额保护数据成员以及相关的成员函数;再由Staff派生出经理类Manager;然后由Salesman和Manager类派生出销售经理类SalesManager。

设计一个利用文件处理方式实现对公司人员(包括销售员、经理和销售经理)进行管理,具有增加数据、更新数据、查询数据、删除数据以及重组文件的功能。(删除数据在记录中做删除标志,重组文件指在物理上删除有删除标志的记录。)另外要求分别统计这三类员工的人数以及所有员工的总数。

三、 问题分析

1.分析问题

由题目知至少需要四个类:一个基类、两个直接由基类派生的类、一个由上面两个派生出来的类共同派生的子类。对这四个类分别取名为:classstaff (基类)classSalesman、classManager、classSalesManager。其中classSalesman、classManager为基类直接派生,classSalesManager由classSalesman、classManager直接派生,他们之间关系图下图:


2.功能分析

   根据对问题的分析为了实现要求的功能,对基类设计voidInputInfo()用来输入信息,voidOutputInfo()用来输出信息、char*ShowInfo(int i)用来返回当前类的信息。在派生类中各自加入自己的函数。

 

>>类:
class staff
class Salesman:virtual public staff
class Manager:virtual public staff
class SalesManager:public Salesman,public Manager

>>函数:
void AddInfo();               //增加数据函数
void DeleteInfo(char no[ ]);     //删除数据函数
void LookforInfo(char no[ ]);    //查询数据函数
void ModifyInfo(char no[ ]);     //修改数据函数
void InputInfo();             
void OutputInfo();
char *ShowInfo(int i);

3.主要功能流程图

Ø  主要功能图:


Ø  增加数据:

Ø  查询数据:


Ø  更新数据:


Ø  删除数据:

四、 源代码


由于时间原因,此问题已经是好久之前写的了,在此只是做简单分析,具体细节的面向对象分析的uml图中类图等的分析并未给出,需要的话可以自行分析。

此题的具体代码实现如下:

 MyHeader.h
#ifndef MYHEADER_H_INCLUDED
#define MYHEADER_H_INCLUDED
#include 
#include 
#include 
#include 
#include void AddInfo();                 //增加数据函数
void DeleteInfo(char no[]);     //删除数据函数
void LookforInfo(char no[]);    //查询数据函数
void ModifyInfo(char no[]);     //修改数据函数#endif // MYHEADER_H_INCLUDED
   MyClass.h
#ifndef MYCLASS_H_INCLUDED
#define MYCLASS_H_INCLUDED#include "MyHeader.h"
using namespace std;
class staff                         //staff类
{
protected:char Name[10];char Uid[10];char Age[10];
public:void InputInfo()                //构造函数{;}void OutputInfo(){;}char *ShowInfo(int i){;}
};
class Salesman:virtual public staff      //销售员类虚拟继承staff
{
protected:char career[10];char title[10];
public:void InputInfo(){cout<<"请输入编号:"<>Uid;cout<<"请输入姓名:"<>Name;cout<<"请输入年龄:"<>Age;cout<<"请输入专业:"<>career;//  cout<<"请输入职称:"<>Uid;cout<<"请输入姓名:"<>Name;cout<<"请输入年龄:"<>Age;cout<<"请输入职务:"<>Job;cout<<"请输入部门:"<>Dep;}void OutputInfo(){cout<<"编号:"<>Uid;cout<<"请输入姓名:"<>Name;cout<<"请输入年龄:"<>Age;cout<<"请输入职务:"<>Job;cout<<"请输入部门:"<>Dep;cout<<"请输入专业:"<>career;cout<<"请输入职称:"<>title;}void OutputInfo(){cout<<"编号:"<>choice2;if(choice2=='1'){file.open("F:\\Salesman.txt",ios::out|ios::app);//ios::app  写入的数据将追加在文件的末尾,此方式需要使用ios::outif(!file)                     //文件不存在{cout<<"Salesman.txt cannot be open"<>s;file<>s;file<>s;file<>s;file<>s;file<>s;file<>s;file<>s;file<>s;file<>s;file<>s;file<>s;file<>s;file<>s;file<>s;file<>s;file<>s;file<>choice1)                //选择主选项;增加、更新、查询、删除、退出{if(choice1=='1'){AddInfo();}else if(choice1=='2'){cout<<"请输入要修改的员工的编号:";cin>>SelectNo;ModifyInfo(SelectNo);}else if(choice1=='3'){cout<<"请输入编号:"<>SelectNo;LookforInfo(SelectNo);}else if(choice1=='4'){cout<<"请输入要删除的员工的编号:";cin>>SelectNo;DeleteInfo(SelectNo);}else if(choice1=='5'){break;}cout<<"本次操作执行完毕"<

五、 运行结果


运行结果如下:


六、 问题及解决

        通过近一学期的C++学习,基本了解了C++的内容,重点学习了类、对象、继承、多态、I/O流、异常处理等,重点了解了class、virtual、inline、static、const等重要问题。C++相对于C语言来说引入两个重要的风险。一个是面向对象(即我们常使用的类),二是模板技术。通过此题的练习让我认识到我对C++并没有完全掌握,还是要不断学习,不断练习和进步。

        首先关于虚基类staff,以及由他进行派生所得到的各个子类,充分地体现了C++面向对象编程的思想,是对以前学习过的继承和多态的灵活运用。其次,便是将用户输入的数据进行存储,并在用户使用时读出并进行操作,那么此处考察的便是文件流的操作,以及异常处理的问题。对于uml图的分析比较欠缺(ps:当时没有学习相关的知识,在此并未给出相关类图等的分析)。

        遇到的最多的问题是由于题目要求,为了更好的处理问题,需要进行文件调用,在调用时出现一些细节问题,希今后能够认真对待。在此次试验中,遇到的最大的问题是在于对之前的知识的遗忘,有很多错误并不是由于逻辑的问题,而是关于具体的函数的定义声明语句的问题。而最大的问题便是对指针的引用,C++之所以强大是在于它的指针的灵活应用,而正是由于指针也会造成许多虽然在编译时没报错,但是得到的结果与实际不符的情况。

       希望在今后能够不断提高和进步,还是要多练多思考,熟能生巧,常常敲代码才能会有问题,常思考才能解决问题。


本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!

相关文章

立即
投稿

微信公众账号

微信扫一扫加关注

返回
顶部