面向对象程序设计大作业

目录

面向对象程序设计大作业

1.问题重述

2.编程思想

2.1数据结构

2.2功能确定

3.类的设计

3.1UML图标准

3.2本题类图

4.运行结果

1.输出所有信息

2.查询总人数

3.添加数据

4.更新数据

5.查询数据

6.删除数据

7.重组数据

5.问题及解决

6.源代码


1.问题重述

销售公司员工管理

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

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

2.编程思想

2.1数据结构

一开始我想采用对象数组来实现,但是其中的问题在于插入删除的时候效率不高,需要对数据进行大量的移动修改。于是我采用了链表的数据结构,即所有的员工对象构成一个链表,通过头指针和尾指针进行相关操作,对于进行大量插入删除重组操作而言效率较高,且代码易于维护。

2.2功能确定

对于题中所述的四个类(员工类、销售员类、经理类、销售经理类)以及相应成员(编号、姓名、年龄、销售额),都进行了实现,并进行了成员扩充:经理类添加成员变量dept即部门,基类员工类添加了成员变量status表示在职状态,若在职状态为离职则在重组文件时删除对应记录。每个类添加了set函数以实现初始化、show函数实现输出、get函数输出成员变量的值、ReadFormFile从文件读入一条数据。

上述四个类(员工类、销售员类、经理类、销售经理类)实现了对单条记录的操作,我为了实现文件管理,定义了对相应四个对象链表进行文件操作的类(Staff_file,Salesman_file,Manager_file,SalesManager_file),具体实现了7个功能:

1.输出所有信息

2.查询总人数

3.添加数据

4.更新数据

5.查询数据

6.删除数据

7.重组数据

来实现对文件的管理。

3.类的设计

3.1UML图标准

UML图也即类图,UML(Unified Model Language) 即统一建模语言,画类图是有一定标准的,具体如下:

虚线箭头指向依赖;

实线箭头指向关联;

虚线三角指向接口;

实线三角指向基类;

空心菱形能分离而独立存在,是聚合;

实心菱形精密关联不可分,是组合;

由于UML图能够清晰的表达出类的设计,画类图时应按上述标准作图。

3.2本题类图

我一共设计了八个类,其UML图如下:

(由于作图工具画不出实线三角,只能使用实心箭头代替)下面两张类图画下面两个箭头的时候画反了。。。

图1:员工类、销售员类、经理类、销售经理类的类图

其中图成员变量num为编号,name为名字,age为年龄,status为在职状态,get方法为获得相应成员变量值的函数,show方法输出该条数据信息(一个对象代表文件中一条数据),remove方法即添加删除标记,将status置为离职,ReadFromFile方法从文件流中读入一条数据初始化当前对象。

实现文件操作类的类图如下:

图2:文件操作类的类图

其中Head为指向对象链表的头指针,End是链表尾指针,in为文件输入流对象,out为文件输出流对象,构造函数从文件读入数据初始化对象链表,析构函数删除链表和头尾指针,findItem方法以员工编号查找相应对象,返回对象指针,save方法用out文件输出流对象将变动更新至相应文件,add方法实现添加信息功能,find方法实现查询功能,alter方法实现修改功能 ,del方法实现删除功能,rebuild方法实现文件重组功能,findsum方法实现查询人员总数功能,display方法实现输出所有信息功能。

4.运行结果

文本文件位于工作环境中

以销售员为例

查询之前销售员文件内容

分别执行七个功能

1.输出所有信息

2.查询总人数

3.添加数据

文件内容为

成功向文件添加信息

4.更新数据

文件内容为

更新文件内容成功

5.查询数据

6.删除数据

文件中的内容为

7.重组数据

文件内容为

5.问题及解决

程序第一次编译时报了不少语法错误,经过细心的修改之后算是可以正常运行了(语法错误就不细讲了,查看ppt以及网上查找资料就可以解决),但是在测试功能7即重组数据的时候出现了问题,无法重组文件。

修改前相关代码如下:

void rebuild() //5.重组文件,该含标记的销售员从文件中删除

{

char num[20];

Salesman *p=NULL,*temp=NULL;

cout<<"正在重组文件..."<<endl;

for(p=Head->Next;p!=End;p=p->Next,q=q->Next)

{

//cout<<"正在重组文件"<<endl;

//cout<<strcmp(p->get_status(),"离职")<<endl;

if(strcmp(p->get_status(),"离职")==0)

{

temp=p->Next;

p->Next=p->Next->Next;

delete temp;

}

}

save();

cout<<"重组完毕!"<<endl;

}

经过调试后,我发现问题在于代码段

if(strcmp(p->get_status(),"离职")==0)

{

temp=p->Next;

p->Next=p->Next->Next;

delete temp;

}

如果p指向的是最后一条数据,则p->Next->Next语句发生了越界,但是编译运行的时候并没有保错,于是解决方法为重组文件时对每条信息分类讨论,如果是最后一条数据,则采用其前一个指针q即可。

修改后代码如下

void rebuild() //5.重组文件,该含标记的销售员从文件中删除

{

char num[20];

Salesman *p=NULL,*temp=NULL;

Salesman *q=Head; //q是p的front

cout<<"正在重组文件..."<<endl;

for(p=Head->Next;p!=End;p=p->Next,q=q->Next)

{

//cout<<"正在重组文件"<<endl;

//cout<<strcmp(p->get_status(),"离职")<<endl;

if(strcmp(p->get_status(),"离职")==0)

{

if(p->Next!=End) //若待删除的是最后一项数据,则使用q指针

{

temp=p->Next;

p->Next=p->Next->Next;

delete temp;

}

else{

temp=q->Next;

q->Next=q->Next->Next;

delete temp;

}

}

}

save();

cout<<"重组完毕!"<<endl;

}

此时可以正常运行

6.源代码


#include<iostream>#include<fstream>#include<string.h>using namespace std;class Staff{protected:char num[20];char name[20];int age;char status[10]; //在职信息,若删除该信息,员工状态置为离职,重组文件时删除//取值为:“在职”或“离职”public:Staff *Next; //所有的员工构成一个链表void set_Staff() //设置员工信息{cout << "请输入员工编号:" << endl;cin >> num;cout << "请输入员工名字:" << endl;cin >> name;cout << "请输入员工年龄:" << endl;cin >> age;cout << "请输入员工的在职状态:" << endl;cin >> status;}void ReadFormFile(istream &in){in >> num >> name >> age >> status; //从文件读入一个员工的信息}void show(){cout << "该员工的编号为:" << num << endl;cout << "该员工的名字为:" << name << endl;cout << "该员工的年龄为:" << age << endl;cout << "该员工的在职状态为:" << status << endl;//输出员工信息}void remove() //删除员工,添加标记{strcpy(status, "离职");}char *get_num(){return num;}char *get_name(){return name;}int get_age(){return age;}char *get_status(){return status;}};class Salesman :virtual public Staff{protected:int sales;public:Salesman *Next;void set_Salesman(){cout << "请输入销售员编号:" << endl;cin >> num;cout << "请输入销售员名字:" << endl;cin >> name;cout << "请输入销售员年龄:" << endl;cin >> age;cout << "请输入销售员的在职状态:" << endl;cin >> status;cout << "请输入销售员销售额:" << endl;cin >> sales;}void ReadFormFile(istream &in){in >> num >> name >> age >> status >> sales; //从文件读入一个员工的信息}void show(){cout << "该销售员的编号为:" << num << endl;cout << "该销售员的名字为:" << name << endl;cout << "该销售员的年龄为:" << age << endl;cout << "该销售员的在职状态为:" << status << endl;cout << "该销售员的销售额为:" << sales << endl;//输出员工信息}int get_sales(){return sales;}};class Manager :virtual public Staff{protected:char dept[10];   //经理所属部门public:Manager *Next;void set_Manager(){cout << "请输入经理编号:" << endl;cin >> num;cout << "请输入经理名字:" << endl;cin >> name;cout << "请输入经理年龄:" << endl;cin >> age;cout << "请输入经理的在职状态:" << endl;cin >> status;cout << "请输入经理所在部门:" << endl;cin >> dept;}void ReadFormFile(istream &in){in >> num >> name >> age >> status >> dept; //从文件读入一个员工的信息}void show(){cout << "该经理的编号为:" << num << endl;cout << "该经理的名字为:" << name << endl;cout << "该经理的年龄为:" << age << endl;cout << "该经理的在职状态为:" << status << endl;cout << "该经理所在部门为:" << dept << endl;}char *get_dept(){return dept;}};class SalesManager :public Salesman, public Manager{public:SalesManager *Next;void set_SalesManager(){cout << "请输入销售经理编号:" << endl;cin >> num;cout << "请输入销售经理名字:" << endl;cin >> name;cout << "请输入销售经理年龄:" << endl;cin >> age;cout << "请输入销售经理的在职状态:" << endl;cin >> status;cout << "请输入销售经理的销售额:" << endl;cin >> sales;cout << "请输入销售经理所在部门:" << endl;cin >> dept;}void ReadFormFile(istream &in){in >> num >> name >> age >> status >> sales >> dept; //从文件读入一个员工的信息}void show(){cout << "该销售经理的编号为:" << num << endl;cout << "该销售经理的名字为:" << name << endl;cout << "该销售经理的年龄为:" << age << endl;cout << "该销售经理的在职状态为:" << status << endl;cout << "该销售经理的销售额为:" << sales << endl;cout << "该销售经理所在部门为:" << dept << endl;}};class Staff_file{protected:Staff *Head, *End;ifstream in;ofstream out;Staff *findItem(char *num){for (Staff *p = Head; p->Next != End; p = p->Next){if (strcmp(p->Next->get_num(), num) == 0)return p;}return NULL;}public:Staff_file(){Head = new Staff; //链表头指针,不存储数据Head->Next = new Staff;End = Head->Next; //链表尾指针in.open("Staff.txt");while (in.eof() != true) //从文件读入到员工对象链表中{End->ReadFormFile(in);if (End->get_num()[0] == '\0')break;End->Next = new Staff;End = End->Next;}in.close();}~Staff_file(){for (Staff *temp; Head->Next != End;){temp = Head->Next;Head->Next = Head->Next->Next;delete temp;}delete Head, End;}void save() //将对象链表存入文件{out.open("Staff.txt"); //默认输出方式,若文件存在则删除文件for (Staff *p = Head->Next; p != End; p = p->Next){out << p->get_num() << " " << p->get_name() << " " << p->get_age()<< " " << p->get_status() << endl;}out.close();}void add() //1.增加员工信息{End->set_Staff();End->Next = new Staff;End = End->Next;save();}void find() //2.查询员工信息功能{char num[20];Staff *p = NULL;cout << "请输入需要查询的员工编号" << endl;cin >> num;if ((p = findItem(num)) != NULL) //查找该员工的前驱p->Next->show(); //输出员工信息else{cout << "Not Found!" << endl;}save();}void alter() //3.修改员工信息功能{char num[20];Staff *p = NULL;cout << "请输入要修改的员工编号" << endl;cin >> num;if ((p = findItem(num)) != NULL) //查找该员工的前驱{p->Next->show(); //输出员工信息cout << "请输入新的信息" << endl;p->Next->set_Staff();}else{cout << "Not Found!" << endl;}save();}void del() //4.删除员工,即添加标记{char num[20];Staff *p = NULL;cout << "请输入要删除的员工编号" << endl;cin >> num;if ((p = findItem(num)) != NULL) //查找该员工的前驱{cout << "已删除该员工,将其在职信息改为“离职”,若要删除该员工信息,请重组文件" << endl;p->Next->remove();}else{cout << "Not Found!" << endl;}save();}void rebuild() //5.重组文件,该含标记的员工从文件中删除{char num[20];Staff *p = NULL, *temp = NULL;Staff *q = Head; //q是p的frontcout << "正在重组文件..." << endl;for (p = Head->Next; p != End; p = p->Next, q = q->Next){//cout<<"正在重组文件"<<endl;//cout<<strcmp(p->get_status(),"离职")<<endl;if (strcmp(p->get_status(), "离职") == 0){if (p->Next != End) //若待删除的是最后一项数据,则使用q指针{temp = p->Next;p->Next = p->Next->Next;delete temp;}else {temp = q->Next;q->Next = q->Next->Next;delete temp;}}}save();cout << "重组完毕!" << endl;}int findsum() //6.查询总人数{int n = -1;Staff *p = Head->Next;while (p != NULL){n++;p = p->Next;}cout << "员工总数为:" << n - 1 << endl;return n - 1;}void display() //7.输出所有员工信息{int n = findsum();int i = 1;Staff *p = Head->Next;cout << "总共有" << n << "名员工,其信息如下:" << endl;for (; p != End; p = p->Next){cout << "第" << i << "名员工的信息为:" << endl;p->show();cout << endl;i++;}}};class Salesman_file :virtual public Staff_file{protected:Salesman *Head, *End;//ifstream in;//ofstream out;Salesman *findItem(char *num){for (Salesman *p = Head; p->Next != End; p = p->Next){if (strcmp(p->Next->get_num(), num) == 0)return p;}return NULL;}public:Salesman_file(){Head = new Salesman; //链表头指针,不存储数据Head->Next = new Salesman;End = Head->Next; //链表尾指针in.open("Salesman.txt");while (in.eof() != true) //从文件读入到销售员对象链表中{End->ReadFormFile(in);if (End->get_num()[0] == '\0')break;End->Next = new Salesman;End = End->Next;}in.close();}~Salesman_file(){for (Salesman *temp; Head->Next != End;){temp = Head->Next;Head->Next = Head->Next->Next;delete temp;}delete Head, End;}void save() //将对象链表存入文件{out.open("Salesman.txt"); //默认输出方式,若文件存在则删除文件for (Salesman *p = Head->Next; p != End; p = p->Next){out << p->get_num() << " " << p->get_name() << " " << p->get_age()<< " " << p->get_status() << " " << p->get_sales() << endl;}out.close();}void add() //1.增加销售员信息{End->set_Salesman();End->Next = new Salesman;End = End->Next;save();}void find() //2.查询销售员信息功能{char num[20];Salesman *p = NULL;cout << "请输入需要查询的销售员编号" << endl;cin >> num;if ((p = findItem(num)) != NULL) //查找该销售员的前驱p->Next->show(); //输出销售员信息else{cout << "Not Found!" << endl;}save();}void alter() //3.修改销售员信息功能{char num[20];Salesman *p = NULL;cout << "请输入要修改的销售员编号" << endl;cin >> num;if ((p = findItem(num)) != NULL) //查找该销售员的前驱{p->Next->show(); //输出销售员信息cout << "请输入新的信息" << endl;p->Next->set_Salesman();}else{cout << "Not Found!" << endl;}save();}void del() //4.删除销售员,即添加标记{char num[20];Salesman *p = NULL;cout << "请输入要删除的销售员编号" << endl;cin >> num;if ((p = findItem(num)) != NULL) //查找该销售员的前驱{cout << "已删除该销售员,将其在职信息改为“离职”,若要删除该销售员信息,请重组文件" << endl;p->Next->remove();}else{cout << "Not Found!" << endl;}save();}void rebuild() //5.重组文件,该含标记的销售员从文件中删除{char num[20];Salesman *p = NULL, *temp = NULL;Salesman *q = Head; //q是p的frontcout << "正在重组文件..." << endl;for (p = Head->Next; p != End; p = p->Next, q = q->Next){//cout<<"正在重组文件"<<endl;//cout<<strcmp(p->get_status(),"离职")<<endl;if (strcmp(p->get_status(), "离职") == 0){if (p->Next != End) //若待删除的是最后一项数据,则使用q指针{temp = p->Next;p->Next = p->Next->Next;delete temp;}else {temp = q->Next;q->Next = q->Next->Next;delete temp;}}}save();cout << "重组完毕!" << endl;}int findsum() //6.查询总人数{int n = 0;Salesman *p = Head->Next;//cout<<"进入findsum"<<endl;while (p != End){n++;p = p->Next;}//cout<<"进入findsum1"<<endl;cout << "销售员总数为:" << n << endl;return n;}void display() //7.输出所有销售员信息{//cout<<"进入display"<<endl;int n = findsum();//cout<<"进入display1"<<endl;int i = 1;Salesman *p = Head->Next;cout << "总共有" << n << "名销售员,其信息如下:" << endl;for (; p != End; p = p->Next){cout << "第" << i << "名销售员的信息为:" << endl;p->show();cout << endl;i++;}}};class Manager_file :virtual public Staff_file{protected:Manager *Head, *End;//ifstream in;//ofstream out;Manager *findItem(char *num){for (Manager *p = Head; p->Next != End; p = p->Next){if (strcmp(p->Next->get_num(), num) == 0)return p;}return NULL;}public:Manager_file(){Head = new Manager; //链表头指针,不存储数据Head->Next = new Manager;End = Head->Next; //链表尾指针in.open("Manager.txt");while (in.eof() != true) //从文件读入到经理对象链表中{End->ReadFormFile(in);if (End->get_num()[0] == '\0')break;End->Next = new Manager;End = End->Next;}in.close();}~Manager_file(){for (Manager *temp; Head->Next != End;){temp = Head->Next;Head->Next = Head->Next->Next;delete temp;}delete Head, End;}void save() //将对象链表存入文件{out.open("Manager.txt"); //默认输出方式,若文件存在则删除文件for (Manager *p = Head->Next; p != End; p = p->Next){out << p->get_num() << " " << p->get_name() << " " << p->get_age()<< " " << p->get_status() << " " << p->get_dept() << endl;}out.close();}void add() //1.增加经理信息{End->set_Manager();End->Next = new Manager;End = End->Next;save();}void find() //2.查询经理信息功能{char num[20];Manager *p = NULL;cout << "请输入需要查询的经理编号" << endl;cin >> num;if ((p = findItem(num)) != NULL) //查找该经理的前驱p->Next->show(); //输出经理信息else{cout << "Not Found!" << endl;}save();}void alter() //3.修改经理信息功能{char num[20];Manager *p = NULL;cout << "请输入要修改的经理编号" << endl;cin >> num;if ((p = findItem(num)) != NULL) //查找该经理的前驱{p->Next->show(); //输出经理信息cout << "请输入新的信息" << endl;p->Next->set_Manager();}else{cout << "Not Found!" << endl;}save();}void dele() //4.删除经理,即添加标记{char num[20];Manager *p = NULL;cout << "请输入要删除的经理编号" << endl;cin >> num;if ((p = findItem(num)) != NULL) //查找该经理的前驱{cout << "已删除该经理,将其在职信息改为“离职”,若要删除该经理信息,请重组文件" << endl;p->Next->remove();}else{cout << "Not Found!" << endl;}save();}void rebuild() //5.重组文件,该含标记的经理从文件中删除{char num[20];Manager *p = NULL, *temp = NULL;Manager *q = Head; //q是p的frontcout << "正在重组文件..." << endl;for (p = Head->Next; p != End; p = p->Next, q = q->Next){//cout<<"正在重组文件"<<endl;//cout<<strcmp(p->get_status(),"离职")<<endl;if (strcmp(p->get_status(), "离职") == 0){if (p->Next != End) //若待删除的是最后一项数据,则使用q指针{temp = p->Next;p->Next = p->Next->Next;delete temp;}else {temp = q->Next;q->Next = q->Next->Next;delete temp;}}}save();cout << "重组完毕!" << endl;}int findsum() //6.查询总人数{int n = -1;Manager *p = Head->Next;while (p != NULL){n++;p = p->Next;}cout << "经理总数为:" << n << endl;return n;}void display() //7.输出所有经理信息{int n = findsum();int i = 1;Manager *p = Head->Next;cout << "总共有" << n << "名经理,其信息如下:" << endl;for (; p != End; p = p->Next){cout << "第" << i << "名经理的信息为:" << endl;p->show();cout << endl;}}};class SalesManager_file :public Salesman_file, public Manager_file{protected:SalesManager *Head, *End;//ifstream in;//ofstream out;SalesManager *findItem(char *num){for (SalesManager *p = Head; p->Next != End; p = p->Next){if (strcmp(p->Next->get_num(), num) == 0)return p;}return NULL;}public:SalesManager_file(){Head = new SalesManager; //链表头指针,不存储数据Head->Next = new SalesManager;End = Head->Next; //链表尾指针in.open("SalesManager.txt");while (in.eof() != true) //从文件读入到销售经理对象链表中{End->ReadFormFile(in);if (End->get_num()[0] == '\0')break;End->Next = new SalesManager;End = End->Next;}in.close();}~SalesManager_file(){for (SalesManager *temp; Head->Next != End;){temp = Head->Next;Head->Next = Head->Next->Next;delete temp;}delete Head, End;}void save() //将对象链表存入文件{out.open("SalesManager.txt"); //默认输出方式,若文件存在则删除文件for (SalesManager *p = Head->Next; p != End; p = p->Next){out << p->get_num() << " " << p->get_name() << " " << p->get_age()<< " " << p->get_status() << " " << p->get_sales() << " " << p->get_dept() << endl;}out.close();}void add() //1.增加销售经理信息{End->set_SalesManager();End->Next = new SalesManager;End = End->Next;save();}void find() //2.查询销售经理信息功能{char num[20];SalesManager *p = NULL;cout << "请输入需要查询的销售经理编号" << endl;cin >> num;if ((p = findItem(num)) != NULL) //查找该销售经理的前驱p->Next->show(); //输出销售经理信息else{cout << "Not Found!" << endl;}save();}void alter() //3.修改销售经理信息功能{char num[20];SalesManager *p = NULL;cout << "请输入要修改的销售经理编号" << endl;cin >> num;if ((p = findItem(num)) != NULL) //查找该销售经理的前驱{p->Next->show(); //输出销售经理信息cout << "请输入新的信息" << endl;p->Next->set_SalesManager();}else{cout << "Not Found!" << endl;}save();}void del() //4.删除销售经理,即添加标记{char num[20];SalesManager *p = NULL;cout << "请输入要删除的销售经理编号" << endl;cin >> num;if ((p = findItem(num)) != NULL) //查找该销售经理的前驱{cout << "已删除该销售经理,将其在职信息改为“离职”,若要删除该销售经理信息,请重组文件" << endl;p->Next->remove();}else{cout << "Not Found!" << endl;}save();}void rebuild() //5.重组文件,该含标记的销售经理从文件中删除{char num[20];SalesManager *p = NULL, *temp = NULL;SalesManager *q = Head; //q是p的frontcout << "正在重组文件..." << endl;for (p = Head->Next; p != End; p = p->Next, q = q->Next){//cout<<"正在重组文件"<<endl;//cout<<strcmp(p->get_status(),"离职")<<endl;if (strcmp(p->get_status(), "离职") == 0){if (p->Next != End) //若待删除的是最后一项数据,则使用q指针{temp = p->Next;p->Next = p->Next->Next;delete temp;}else {temp = q->Next;q->Next = q->Next->Next;delete temp;}}}save();cout << "重组完毕!" << endl;}int findsum() //6.查询总人数{int n = -1;SalesManager *p = Head->Next;while (p != NULL){n++;p = p->Next;}cout << "销售经理总数为:" << n << endl;return n;}void display() //7.输出所有销售经理信息{int n = findsum();int i = 1;SalesManager *p = Head->Next;cout << "总共有" << n << "名销售经理,其信息如下:" << endl;for (; p != End; p = p->Next){cout << "第" << i << "名销售经理的信息为:" << endl;p->show();cout << endl;}}};int main() {int m, n;Staff_file staff;Salesman_file salesman;Manager_file manager;SalesManager_file salesmanager;int quit = 0;while (quit == 0){cout << "请输入你所需要的功能:" << endl;cout << "1.输出所有信息" << endl<< "2.查询总人数" << endl<< "3.添加数据" << endl<< "4.更新数据" << endl<< "5.查询数据" << endl<< "6.删除数据" << endl<< "7.重组数据" << endl;cin >> m;cout << "请输入你的操作对象:" << endl;cout << "1.员工" << endl<< "2.销售员" << endl<< "3.经理" << endl<< "4.销售经理" << endl;cin >> n;switch (m){case 1:{switch (n){case 1: {staff.display();break;}case 2: {salesman.display();break;}case 3: {manager.display();break;}case 4: {salesmanager.display();break;}default: {cout << "输入有误,请重新输入!" << endl;break;}}break;}case 2: {switch (n){case 1: {staff.findsum();break;}case 2: {salesman.findsum();break;}case 3: {manager.findsum();break;}case 4: {salesmanager.findsum();break;}default: {cout << "输入有误,请重新输入!" << endl;break;}}break;}case 3: {switch (n){case 1: {staff.add();break;}case 2: {salesman.add();break;}case 3: {manager.add();break;}case 4: {salesmanager.add();break;}default: {cout << "输入有误,请重新输入!" << endl;break;}}break;}case 4: {switch (n){case 1: {staff.alter();break;}case 2: {salesman.alter();break;}case 3: {manager.alter();break;}case 4: {salesmanager.alter();break;}default: {cout << "输入有误,请重新输入!" << endl;break;}}break;}case 5: {switch (n){case 1: {staff.find();break;}case 2: {salesman.find();break;}case 3: {manager.find();break;}case 4: {salesmanager.find();break;}default: {cout << "输入有误,请重新输入!" << endl;break;}}break;}case 6: {switch (n){case 1: {staff.del();break;}case 2: {salesman.del();break;}case 3: {manager.del();break;}case 4: {salesmanager.del();break;}default: {cout << "输入有误,请重新输入!" << endl;break;}}break;}case 7: {switch (n){case 1: {staff.rebuild();break;}case 2: {salesman.rebuild();break;}case 3: {manager.rebuild();break;}case 4: {salesmanager.rebuild();break;}default: {cout << "输入有误,请重新输入!" << endl;break;}}break;}default: {cout << "输入有误,请重新输入!" << endl;break;}}cout << endl << "输入1退出,0继续查询" << endl;cin >> quit;}return 0;}

C++大作业(面向对象程序设计大作业)——销售公司员工管理相关推荐

  1. C++面向对象程序设计大作业:魔兽世界(三):开战

    C++面向对象程序设计大作业:魔兽世界(三):开战 问题描述 问题分析 代码 问题描述 问题来自于北京大学郭炜老师的C++慕课的大作业 魔兽世界的西面是红魔军的司令部,东面是蓝魔军的司令部.两个司令部 ...

  2. 2017《面向对象程序设计》作业四

    2017<面向对象程序设计>作业四 林燊 031602325 https://www.cnblogs.com/linshen/ github链接:https://github.com/Tr ...

  3. 浙大远程教c语言在线作业答案,浙江大学远程教育2020面向对象程序设计在线作业答案...

    <浙江大学远程教育2020面向对象程序设计在线作业答案>由会员分享,可在线阅读,更多相关<浙江大学远程教育2020面向对象程序设计在线作业答案(28页珍藏版)>请在人人文库网上 ...

  4. 《面向对象程序设计》作业(四)

    <面向对象程序设计>第四次作业 作者信息 刘思泳 佘岳昕 031602524 031602131 博客链接 博客链接 设计思路 之前的思路是在函数中调用resource,但查资料及询问学长 ...

  5. 2017福州大学面向对象程序设计寒假作业一

    作业链接 第一次作业统计完成,本次作业满分10分,统计结果如下: 学号 姓名 博客 分数 111500206 赵畅 ZCplayground 9.5 031602211 盖嘉轩 031602211 8 ...

  6. c++面向对象程序设计大作业(人事管理系统)

    1.登录 Administrator_login.h #pragma once #include"controller.h" #include<string> #inc ...

  7. 【2017级面向对象程序设计】作业一

    Github PTA 这次电梯就把之前的代码改了一下,但是还是有很多之前留下的现在没用接口,没有删除,下次作业时看一下如果真的没用就删除了. 困难主要集中在调用函数上面,我再一次给参数忘记加引用了,导 ...

  8. 2017级面向对象程序设计——团队作业2

    Deadline:2018/6/19 22:00 作业要求 根据上一阶段的设计和分工,完成构建地图.基地.英雄.小兵等基本游戏元素的编程任务(构建相应的类和对象即可,不要求实现可操控移动等功能). 每 ...

  9. 2017福州大学面向对象程序设计寒假作业四

    作业链接 第四次作业统计完成,本次作业满分100分,统计结果如下: 学号 姓名 作业地址 分数 031602431 王源 http://www.cnblogs.com/circlek/p/652872 ...

最新文章

  1. sharepoint 页面定制经验小结
  2. 鸿蒙日程管理若离,2020华为HDC日程确定,鸿蒙、HMS以及EMUI 11成最关注点
  3. C# ini文件的读写
  4. 数据库索引 类型 (转载)
  5. 微信小程序中相机api_微信拍照翻译, 使用小程序拍照翻译API功能
  6. 车间和仓库可以一起吗_车间和仓库可以划分为一个防火分区吗
  7. Laravel - 从百草园到三味书屋 From Apprentice To Artisan目录
  8. 进程、线程与协程傻傻分不清?一文带你吃透!
  9. 可靠传输的实现机制——回退N帧协议GBN(Go Back N)
  10. 微信会员卡,信息类目字段跳转小程序【custom_field1】【巨巨巨巨坑】
  11. ImportError: /home/yang/anaconda3/envs/sar/bin/../lib/libgio-2.0.so.0: undefined symbol: g_unix_get_
  12. 书签同步工具android,「效率工具推荐」跨平台在线云书签管理工具
  13. Dialog 对话框
  14. SpringMVC @ResponseBody在IE8变下载
  15. java 与jni转码,Android NDK开发之旅37--FFmpeg转码压缩
  16. 蒙纳丽莎的微笑系列 广告软文:“效益之源”(转载自:中国灯饰商贸网)
  17. 测试环境部署——selenium+python
  18. 【078期】java.util.* 并发包下 LongAdder 和 AtomicLong 哪个性能更好,为什么?
  19. (附源码)node.js 游戏网站 毕业设计 031726
  20. cad完全卸载教程_如何完全卸载(删除)cad吗? _ 设计学院_设计软件教程自学网...

热门文章

  1. 合理使用for循环批量处理seq命令
  2. laravel 框架时间显示.000000Z问题解决
  3. 留给百度云的时间不多了
  4. 仿京东树形菜单插件hovertree
  5. iOS 如何修改App图标和App显示在iPhone的名字
  6. 深度学习——残差网络(ResNet)
  7. 水晶报表--显示图片
  8. 【分享】7-Zip解压缩软件的超详细使用攻略
  9. php qq对话,PHP WEB版QQ多人聊天
  10. 女孩学计算机号码,为什么女孩学计算机的要比男孩少很多