用c++设计一个网上购书系统,包含book类,buyer类,buyer类派生了member类、honoured_guest类、layfolk类;order类,容器类,加入文件流输入输出,进行人机交互
时间: 2024-03-29 11:04:14 浏览: 105
好的,我可以为您提供一个大致的实现思路。
首先,我们需要设计一个 Book 类,包含书名、作者、出版社、价格等属性。可以定义一些函数来获取和修改这些属性。
接着,设计一个 Buyer 类,包含买家的姓名、地址、联系方式等信息。此外,我们还可以定义一个 Member 类,它是 Buyer 类的派生类,包含会员等级、积分等信息;还可以定义一个 HonouredGuest 类,它也是 Buyer 类的派生类,用于处理特殊情况下的购买需求;最后,定义一个 Layfolk 类,它也是 Buyer 类的派生类,表示普通买家。
然后,设计一个 Order 类,用于表示订单信息,包含订单编号、买家信息、购买书籍信息等。可以定义一些函数来获取和修改这些信息。
接下来,设计一个容器类,用于存储所有的订单信息。可以定义一些函数来添加、删除、修改订单信息等。
最后,我们需要实现文件流输入输出和人机交互。可以定义一些函数来读取和写入订单信息,以及与用户进行交互,如显示菜单、接收用户输入等。
这是一个初步的设计思路,具体实现细节需要根据实际需求进行调整。希望能够帮助到您。
相关问题
写一个c++项目程序设计一个网上购书系统,包含book类,buyer类,buyer类派生了member类、honoured_guest类、layfolk类;order类,容器类,加入文件流输入输出,进行人机交互
好的,我可以为您提供一个大致的实现思路和代码示例。
首先,我们需要定义 Book 类,其中包含书籍的一些基本信息,如书名、作者、出版社、价格等。代码如下:
```cpp
class Book {
public:
Book(string name, string author, string publisher, double price) :
name(name), author(author), publisher(publisher), price(price) {}
string getName() { return name; }
string getAuthor() { return author; }
string getPublisher() { return publisher; }
double getPrice() { return price; }
private:
string name;
string author;
string publisher;
double price;
};
```
接下来,我们需要定义 Buyer 类,其中包含买家的一些基本信息,如姓名、地址、联系方式等。代码如下:
```cpp
class Buyer {
public:
Buyer(string name, string address, string phone) :
name(name), address(address), phone(phone) {}
string getName() { return name; }
string getAddress() { return address; }
string getPhone() { return phone; }
private:
string name;
string address;
string phone;
};
```
然后,我们可以定义 Member 类、HonouredGuest 类和 Layfolk 类,它们都是 Buyer 类的派生类。代码如下:
```cpp
class Member : public Buyer {
public:
Member(string name, string address, string phone, int level, int points) :
Buyer(name, address, phone), level(level), points(points) {}
int getLevel() { return level; }
int getPoints() { return points; }
private:
int level;
int points;
};
class HonouredGuest : public Buyer {
public:
HonouredGuest(string name, string address, string phone, string specialReq) :
Buyer(name, address, phone), specialReq(specialReq) {}
string getSpecialReq() { return specialReq; }
private:
string specialReq;
};
class Layfolk : public Buyer {
public:
Layfolk(string name, string address, string phone) :
Buyer(name, address, phone) {}
};
```
接下来,我们需要定义 Order 类,用于表示订单信息,包含订单编号、买家信息、购买书籍信息等。代码如下:
```cpp
class Order {
public:
Order(int id, Buyer* buyer, Book* book, int quantity) :
id(id), buyer(buyer), book(book), quantity(quantity) {}
int getId() { return id; }
Buyer* getBuyer() { return buyer; }
Book* getBook() { return book; }
int getQuantity() { return quantity; }
private:
int id;
Buyer* buyer;
Book* book;
int quantity;
};
```
然后,我们可以定义一个容器类,用于存储所有的订单信息。可以定义一些函数来添加、删除、修改订单信息等。代码如下:
```cpp
class OrderContainer {
public:
void addOrder(Order* order) {
orders.push_back(order);
}
void removeOrder(int id) {
for (auto it = orders.begin(); it != orders.end(); it++) {
if ((*it)->getId() == id) {
orders.erase(it);
break;
}
}
}
void modifyOrder(int id, int quantity) {
for (auto it = orders.begin(); it != orders.end(); it++) {
if ((*it)->getId() == id) {
(*it)->getBook()->setQuantity(quantity);
break;
}
}
}
private:
vector<Order*> orders;
};
```
最后,我们需要实现文件流输入输出和人机交互。可以定义一些函数来读取和写入订单信息,以及与用户进行交互,如显示菜单、接收用户输入等。代码如下:
```cpp
void addOrder(OrderContainer& container) {
int id, type, quantity;
string name, address, phone, specialReq, bookName, author, publisher;
double price;
cout << "请输入订单编号:";
cin >> id;
cout << "请选择买家类型(1.普通买家 2.会员 3.贵宾):";
cin >> type;
cout << "请输入买家姓名:";
cin >> name;
cout << "请输入买家地址:";
cin >> address;
cout << "请输入买家电话:";
cin >> phone;
switch (type) {
case 1:
container.addOrder(new Order(id, new Layfolk(name, address, phone), nullptr, 0));
break;
case 2:
int level, points;
cout << "请输入会员等级:";
cin >> level;
cout << "请输入会员积分:";
cin >> points;
container.addOrder(new Order(id, new Member(name, address, phone, level, points), nullptr, 0));
break;
case 3:
cout << "请输入特殊要求:";
cin >> specialReq;
container.addOrder(new Order(id, new HonouredGuest(name, address, phone, specialReq), nullptr, 0));
break;
}
cout << "请输入书籍名称:";
cin >> bookName;
cout << "请输入书籍作者:";
cin >> author;
cout << "请输入书籍出版社:";
cin >> publisher;
cout << "请输入书籍价格:";
cin >> price;
cout << "请输入书籍数量:";
cin >> quantity;
container.addOrder(new Order(id, container.getBuyer(id), new Book(bookName, author, publisher, price), quantity));
}
void removeOrder(OrderContainer& container) {
int id;
cout << "请输入订单编号:";
cin >> id;
container.removeOrder(id);
}
void modifyOrder(OrderContainer& container) {
int id, quantity;
cout << "请输入订单编号:";
cin >> id;
cout << "请输入书籍数量:";
cin >> quantity;
container.modifyOrder(id, quantity);
}
void showMenu() {
cout << "欢迎使用网上购书系统!" << endl;
cout << "1. 添加订单" << endl;
cout << "2. 删除订单" << endl;
cout << "3. 修改订单" << endl;
cout << "4. 退出系统" << endl;
}
int main() {
OrderContainer container;
int choice;
do {
showMenu();
cin >> choice;
switch (choice) {
case 1:
addOrder(container);
break;
case 2:
removeOrder(container);
break;
case 3:
modifyOrder(container);
break;
}
} while (choice != 4);
return 0;
}
```
这是一个初步的实现,具体细节还需要根据实际需求进行调整。希望能够帮助到您。
根据以下要求,用c++完成相关设计:1. 课程设计要求: (1)根据实际情况,确定购书人分为3类:普通人、会员、贵宾。 ①“普通人”的购书费用按照原价收取; ②“会员”购书费的计算方法是:五星级会员按照原价的70%收取, 四星级会员按照原价的80%收取, 三星级会员按照原价的85%收取, 二星级会员按照原价的90%收取, 一星级会员按照原价的95%收取。 ③“贵宾”的购书费根据特别指定的折扣率计算机收取的费用,例如折扣率40%,则按照实际书费的60%收取。 (2)对象(类)的设计 ①根据(1)分析,需要设计一个基类buyer和它的3各派生类member(会员) 、layfolk(普通人) 、honoured_guest(贵宾)。基类中包括的数据成员是姓名、购书人编号、地址、购书金额。member类中除了继承了buyer的数据,还增加了会员级别:honoured_guest则增加了折扣率一项。 ②在基类中定义了构造函数和对所有类型的购书人相同的操作,getbuyname()负责取出购书者的姓名;getaddress()负责取出购书者的地址;getpay()负责取出购书者应付出的金额;getid()负责取出购书者的编号。由于对不同购书者的购书额的计算方法不同,所以不能在基类中确定计算方法;又由于各类购书者的数据内容不同,显示的方法也不一样.因此在基类中将setpay和display定义为虚函数。
以下是C++代码实现:
```cpp
#include<iostream>
#include<string>
using namespace std;
// 基类
class Buyer{
protected:
string name; // 姓名
string id; // 购书人编号
string address; // 地址
float pay; // 购书金额
public:
Buyer(string n,string i,string a,float p){
name = n;
id = i;
address = a;
pay = p;
}
virtual void setPay(){} // 定义虚函数
virtual void display(){} // 定义虚函数
string getName(){
return name;
}
string getAddress(){
return address;
}
float getPay(){
return pay;
}
string getId(){
return id;
}
};
// 派生类1:会员
class Member:public Buyer{
private:
int level; // 会员级别
public:
Member(string n,string i,string a,float p,int l):Buyer(n,i,a,p){
level = l;
}
void setPay(){ // 重写虚函数
switch(level){
case 1: pay = pay * 0.95; break;
case 2: pay = pay * 0.9; break;
case 3: pay = pay * 0.85; break;
case 4: pay = pay * 0.8; break;
case 5: pay = pay * 0.7; break;
}
}
void display(){ // 重写虚函数
cout<<"姓名:"<<name<<endl;
cout<<"编号:"<<id<<endl;
cout<<"地址:"<<address<<endl;
cout<<"应付金额:"<<pay<<endl;
cout<<"会员级别:"<<level<<endl;
}
};
// 派生类2:普通人
class Layfolk:public Buyer{
public:
Layfolk(string n,string i,string a,float p):Buyer(n,i,a,p){}
void setPay(){ // 重写虚函数
pay = pay;
}
void display(){ // 重写虚函数
cout<<"姓名:"<<name<<endl;
cout<<"编号:"<<id<<endl;
cout<<"地址:"<<address<<endl;
cout<<"应付金额:"<<pay<<endl;
}
};
// 派生类3:贵宾
class HonouredGuest:public Buyer{
private:
float discount; // 折扣率
public:
HonouredGuest(string n,string i,string a,float p,float d):Buyer(n,i,a,p){
discount = d;
}
void setPay(){ // 重写虚函数
pay = pay * (1 - discount);
}
void display(){ // 重写虚函数
cout<<"姓名:"<<name<<endl;
cout<<"编号:"<<id<<endl;
cout<<"地址:"<<address<<endl;
cout<<"应付金额:"<<pay<<endl;
cout<<"折扣率:"<<discount<<endl;
}
};
int main(){
// 创建对象
Member member("张三","001","北京市海淀区",1000,3);
Layfolk layfolk("李四","002","北京市朝阳区",1000);
HonouredGuest honouredGuest("王五","003","北京市东城区",1000,0.4);
// 调用函数
member.setPay();
layfolk.setPay();
honouredGuest.setPay();
member.display();
layfolk.display();
honouredGuest.display();
return 0;
}
```
注意:本代码仅供参考,具体实现方式可能因实际情况而异。
阅读全文