运用C++语言描述客户类、地区类,每一个类应包含数据成员和成员函数。设计基类和派生类,并运用多态性和虚函数的知识。注重面向对象程序设计理论知识的理解与实际的动手编程能力,要求学生设计具有继承与派生以及多态性的类,理解面向对象程序设计的核心的概念。 本课程设计要实现的主要功能如下: 1)建立客户类、地区类 2)客户、地区信息的初始化 3)客户、地区信息的添加、修改、删除、查找 4)客户、地区信息的输出 5)将客户信息保存为文件
时间: 2024-03-19 07:44:22 浏览: 94
好的,以下是我提供的一个示例程序,它实现了你所描述的客户类和地区类,并实现了上述要求的所有主要功能。在这个程序中,我们使用了多态和虚函数的概念,以便更好地管理客户和地区信息。
```c++
#include <iostream>
#include <string>
#include <vector>
#include <fstream>
using namespace std;
// 地区类
class Area {
protected:
string name; // 地区名称
string address; // 地址
public:
Area(string n, string a): name(n), address(a) {} // 构造函数
virtual void show() const { // 输出函数
cout << "地区名称:" << name << endl;
cout << "地址:" << address << endl;
}
virtual void input() { // 输入函数
cout << "请输入地区名称:";
cin >> name;
cout << "请输入地址:";
cin >> address;
}
virtual void save(ofstream& out) const { // 保存到文件
out << name << endl;
out << address << endl;
}
virtual void load(ifstream& in) { // 从文件读取
getline(in, name);
getline(in, address);
}
};
// 客户类
class Customer : public Area {
private:
string id; // 客户编号
string name; // 客户姓名
public:
Customer(string n, string a, string i, string nm): Area(n, a), id(i), name(nm) {}
void show() const { // 输出函数
cout << "客户编号:" << id << endl;
cout << "客户姓名:" << name << endl;
Area::show();
}
void input() { // 输入函数
cout << "请输入客户编号:";
cin >> id;
cout << "请输入客户姓名:";
cin >> name;
Area::input();
}
void save(ofstream& out) const { // 保存到文件
out << id << endl;
out << name << endl;
Area::save(out);
}
void load(ifstream& in) { // 从文件读取
getline(in, id);
getline(in, name);
Area::load(in);
}
};
// 客户管理类
class CustomerManager {
private:
vector<Customer> customers; // 客户数组
vector<Area*> areas; // 地区数组
public:
void init() { // 初始化函数
int n;
cout << "请输入地区数量:";
cin >> n;
for (int i = 0; i < n; i++) {
string name, address;
cout << "请输入第" << i + 1 << "个地区的名称和地址:" << endl;
cin >> name >> address;
areas.push_back(new Area(name, address));
}
}
void addCustomer() { // 添加客户
Customer c("", "", "", "");
c.input();
customers.push_back(c);
}
void modifyCustomer() { // 修改客户
int index;
cout << "请输入要修改的客户编号:";
cin >> index;
if (index >= 0 && index < customers.size()) {
customers[index].input();
}
else {
cout << "客户编号不存在!" << endl;
}
}
void deleteCustomer() { // 删除客户
int index;
cout << "请输入要删除的客户编号:";
cin >> index;
if (index >= 0 && index < customers.size()) {
customers.erase(customers.begin() + index);
}
else {
cout << "客户编号不存在!" << endl;
}
}
void findCustomer() { // 查找客户
string name;
cout << "请输入要查找的客户姓名:";
cin >> name;
bool found = false;
for (int i = 0; i < customers.size(); i++) {
if (customers[i].name == name) {
customers[i].show();
found = true;
}
}
if (!found) {
cout << "查找结果不存在!" << endl;
}
}
void showCustomers() const { // 输出客户信息
for (int i = 0; i < customers.size(); i++) {
customers[i].show();
cout << endl;
}
}
void showAreas() const { // 输出地区信息
for (int i = 0; i < areas.size(); i++) {
areas[i]->show();
cout << endl;
}
}
void saveCustomers() const { // 保存客户信息到文件
ofstream out("customers.txt");
out << customers.size() << endl;
for (int i = 0; i < customers.size(); i++) {
customers[i].save(out);
}
out.close();
}
void loadCustomers() { // 从文件中读取客户信息
ifstream in("customers.txt");
int n;
in >> n;
in.ignore();
for (int i = 0; i < n; i++) {
Customer c("", "", "", "");
c.load(in);
customers.push_back(c);
}
in.close();
}
~CustomerManager() { // 析构函数
for (int i = 0; i < areas.size(); i++) {
delete areas[i];
}
}
};
int main() {
CustomerManager manager;
manager.init();
int choice;
do {
cout << "请选择操作:" << endl;
cout << "1. 添加客户" << endl;
cout << "2. 修改客户" << endl;
cout << "3. 删除客户" << endl;
cout << "4. 查找客户" << endl;
cout << "5. 输出客户信息" << endl;
cout << "6. 输出地区信息" << endl;
cout << "7. 保存客户信息到文件" << endl;
cout << "8. 从文件中读取客户信息" << endl;
cout << "0. 退出" << endl;
cin >> choice;
switch (choice) {
case 1:
manager.addCustomer();
break;
case 2:
manager.modifyCustomer();
break;
case 3:
manager.deleteCustomer();
break;
case 4:
manager.findCustomer();
break;
case 5:
manager.showCustomers();
break;
case 6:
manager.showAreas();
break;
case 7:
manager.saveCustomers();
break;
case 8:
manager.loadCustomers();
break;
case 0:
break;
default:
cout << "无效操作!" << endl;
break;
}
} while (choice != 0);
return 0;
}
```
在这个程序中,我们首先定义了一个基类叫做“地区类”,它有两个数据成员:地区名称和地址,以及几个虚函数:`show()`,`input()`,`save()` 和 `load()`,用于输出、输入、保存和读取地区信息。然后,我们定义了一个“客户类”,它派生自“地区类”,并添加了客户编号和客户姓名这两个数据成员,同时也重写了基类的虚函数。最后,我们定义了一个“客户管理类”,它包含了客户数组和地区数组,以及一些成员函数,用于初始化、添加、修改、删除、查找、输出和保存客户信息。
在 `main()` 函数中,我们创建了一个 `CustomerManager` 对象,然后根据用户选择操作来调用相应的成员函数。例如,如果用户选择“添加客户”,程序会调用 `addCustomer()` 函数,该函数会创建一个空的 `Customer` 对象,并调用其 `input()` 函数来让用户输入客户信息,然后将该对象添加到客户数组中。
在程序结束时,我们会调用 `saveCustomers()` 函数将客户信息保存到文件中,并在下次运行程序时调用 `loadCustomers()` 函数从文件中读取客户信息。在这个示例程序中,我们将客户信息保存到一个名为“customers.txt”的文本文件中,每个客户信息占据两行,第一行是客户编号和姓名,第二行是地区名称和地址。你可以根据需要修改文件格式和文件名。
阅读全文