c++模拟网上购书结账系统

用c++设计一个模拟网上购书的结账系统(或类似系统),要求包含至少5个类以上,实现一组完整的功能。增加将信息(客户、书本信息)从文件中读取,最后结果(订单信息)再写入到文件中去。最后从文件读取的地方麻烦解释一下可以吗,谢谢了

内容引用通义千问
下面是一个简单的示例,演示如何使用 C++ 实现一个简单的网上购书结账系统。

首先,需要连接到互联网,可以使用 C++ 的网络编程库(如 Boost.Asio、Winsock 等)来完成。接着,需要定义一些数据结构,如商品信息、用户信息、订单信息等。商品信息包括书名、作者、价格等,用户信息包括用户名、密码、地址等,订单信息包括订单号、商品信息、总价等。

然后,可以定义一个购物车类,用于管理用户购物车中的商品。购物车类应该包括添加商品、删除商品、计算总价等方法。

接着,可以定义一个结账类,用于处理用户的订单信息和结账操作。结账类应该包括添加订单、查询订单状态、支付等方法。

最后,可以在用户界面中添加购物车、结账等按钮,以及显示订单信息、支付状态等内容。


#include <iostream>
#include <string>
#include <boost/asio.hpp>
#include <winsock2.h>
#include <vector>

using namespace std;
using namespace boost::asio;
using namespace std::placeholders;

const int BUFFER_SIZE = 1024; // 缓冲区大小

struct Book {
    string title;
    string author;
    int price;
};

struct User {
    string username;
    string password;
    string address;
};

struct Order {
    string order_no;
    Book book;
    int total_price;
};

int main() {
    try {
        // 创建网络编程客户端
        tcp::resolver resolver(io_service);
        tcp::resolver::query query("www.example.com", "http");
        tcp::resolver::iterator endpoint_iterator = resolver.resolve(query);
        tcp::socket socket(io_service);
        socket.set_option(tcp::no_delay(true));

        // 连接到服务器
        socket.connect(*endpoint_iterator, "8888");

        // 创建用户对象
        User user;
        user.username = "user";
        user.password = "passwd";
        user.address = "123 Main St, Anytown, USA";

        // 创建订单对象
        Order order;
        order.order_no = "123456";
        order.book.title = "The Great Gatsby";
        order.book.author = "F. Scott Fitzgerald";
        order.book.price = 19.99;
        order.total_price = order.book.price * 1.2;

        // 添加商品到购物车
        vector<Book> books;
        books.push_back(order.book);
        shopping_cart cart(books);
        socket.async_read_some(boost::asio::buffer(
            "{\"action\":\"add_to_cart\",\"book\":" + string(book.title + " by " + book.author) + "}",
            BUFFER_SIZE),
            boost::bind(&User::handle_add_to_cart, &user,
                boost::asio::placeholders::error,
                boost::asio::placeholders::bytes_transferred));

        // 显示购物车
        cout << "Shopping cart:" << endl;
        for (const auto& book : cart) {
            cout << " - " << book.title << " by " << book.author << endl;
        }

        // 显示订单信息
        cout << "Order:" << endl;
        cout << "Order No.: " << order.order_no << endl;
        cout << "Book Title: " << order.book.title << endl;
        cout << "Author: " << order.book.author << endl;
        cout << "Price: " << order.book.price << endl;
        cout << "Total Price: " << order.total_price << endl;

        // 创建结账对象
        OrderCheckout checkout;
        checkout.order_no = order.order_no;
        checkout.total_price = order.total_price;
        socket.async_read_some(
            boost::asio::buffer(
                "{\"action\":\"checkout\",\"total_price\":" + std::to_string(checkout.total_price) + "}",
                BUFFER_SIZE),
            boost::bind(&User::handle_checkout, &user,
                boost::asio::placeholders::error,
                boost::asio::placeholders::bytes_transferred));

        // 等待结账完成
        socket.async_read_some(
            boost::asio::buffer(
                "{\"action\":\"confirm\",\"order_no\":\"" + order.order_no + "\"}",
                BUFFER_SIZE),
            boost::bind(&User::handle_confirm, &user,
                boost::asio::placeholders::error,
                boost::asio::placeholders::bytes_transferred));

        // 等待交易完成
        socket.async_read_some(
            boost::asio::buffer(
                "{\"action\":\"finish\",\"order_no\":\"" + order.order_no + "\"}",
                BUFFER_SIZE),
            boost::bind(&User::handle_finish, &user,
                boost::asio::placeholders::error,
                boost::asio::placeholders::bytes_transferred));

        // 关闭连接
        socket.close();

    } catch (std::exception& e) {
        cerr << "Exception: " << e.what() << endl;
    }

    return 0;
}

// 处理添加到购物车请求
void handle_add_to_cart(const boost::system::error_code& e, std::size_t bytes_transferred) {
    if (!e) {
        cout << "Book added to cart!" << endl;
    }
}

// 处理结账请求
void handle_checkout(const boost::system::error_code& e, std::size_t bytes_transferred) {
    if (!e) {
        cout << "Order confirmed!" << endl;
    }
}

// 处理确认交易请求
void handle_confirm(const boost::system::error_code& e, std::size_t bytes_transferred) {
    if (!e) {
        cout << "Order processed!" << endl;
    }
}

// 处理结账完成请求
void handle_finish(const boost::system::error_code& e, std::size_t bytes_transferred) {
    if (!e) {
        cout << "Order completed!" << endl;
    }
}

#include<iostream>
#include<string>
using namespace std;
class buyfolk;
class member;
class honoured_guest;
class buyer
{
public:
       buyer()
       {

              name="Null";
              addr="Null";
              number=0;
              expense=0;
              level=0;
       }

void getid(int num)

       {

              number=num;
              if(number>=0&&number<=20)
              {   level=1;}
              else
if(number>=21&&number<=40)
              {     level=2;}
              else
if(number>=41&&number<=60)
              {     level=3;}
              else
if(number>=61&&number<=80)

              {     level=4;}
              else
if(number>=81&&number<=100)
              {     level=5;}
              else
if(number>=200&&number<=300)

              {            }

              else
if(number>=1000&&number<=2000)

              {            }

              else

                     cout<<"Error
munber please register"<<endl;

       }

       void
getbuyname()

       {

              cout<<"请输入你的姓名:"<<endl;
              cin>>name;

       }

       void
getaddress()

       {

              cout<<"请输入你的地址:"<<endl;
              cin>>addr;
       }
       virtual
void setpay()
       {
              getbuyname();
              getaddress();
              cout<<"请输入你的未打折消费: "<<endl;
              cin>>expense;
       }
       virtual
void display()
       {
              cout<<"姓名: "<<name<<endl<<"地址:
"<<addr<<endl<<"编号: "<<number<<endl<<"消费:
"<<expense<<endl;
       }
protected:
       string name;
       string addr;
       int  number;
       int level;
       double  expense;
};
class buyfolk:public buyer
{
public:
       virtual
void display()
       {
              cout<<"--欢迎您,亲爱的普通会员--"<<endl;
              buyer::display();
       }
       virtual
void setpay()
       {
              buyer::setpay();
       }      
}; 
class member:public buyer
{
public:
       member()
       {
       }
       virtual
void setpay()
       {
              buyer::setpay();
              if(level==1)
                     expense=expense*0.95;
              if(level==2)
                     expense*=0.90;
              if(level==3)
                     expense*=0.85;
              if(level==4)
                     expense*=0.80;
              if(level==5)
                     expense*=0.70;
       }

       virtual
void display()

       {

              cout<<"--欢迎您,亲爱的黄金会员--"<<endl;

              buyer::display();

              cout<<"Level:
"<<level<<endl;

       }

private:

};

 

class honoured_guest:public buyer

{

public:

       honoured_guest()
       {
              discount=0;
       }

       virtual
void setpay()
       {
              buyer::setpay();
              cout<<"请输入你的折扣: "<<endl;
              cin>>discount;
              expense*=(1-discount);
       }

       virtual
void display()
       {
              cout<<"--欢迎您,亲爱的钻石会员--"<<endl;
              buyer::display();
              cout<<"折扣:"<<discount<<endl;
       }
private:
       double discount;
}; 
int main()
{
       int number;

       buyfolk
b[10];

       member
m[10];

       honoured_guest
h[10];
       int i=0,flag=1,j=0,z=0;
       while(flag)
       {     cout<<"-------------------------------------------------"
<<endl;

              cout<<"     ------欢迎进入我们书店------     
"<<endl;

              cout<<"     ----如果你想要退出,请输入886----  
"<<endl;

              cout<<"       ----请输入你的编号----      
"<<endl;

              cout<<"-------------------------------------------------"
<<endl;
              cin>>number;
              if(number>=0&&number<=100)
              {   
                     cout<<"--欢迎您,亲爱的黄金会员--"<<endl;
                     m[i].getid(number);
                     m[i].setpay();
                     m[i].display();
                     i++;
                     cout<<endl<<endl;
              }
              else
if(number>=200&&number<=300)
              {
                     cout<<"--欢迎您,亲爱的钻石会员--"<<endl;
                     h[j].getid(number);
                     h[j].setpay();
                     h[j].display();
                     j++;
                     cout<<endl<<endl;
              }
              else
if(number>=1000&&number<=2000)
              {
                     cout<<"--欢迎您,亲爱的普通会员--"<<endl;
                     b[z].getid(number);
                     b[z].setpay();
                     b[z].display();
                     z++;
                     cout<<endl<<endl;
              }
              else
if(number==886)
              {
                     flag=0;
                     cout<<"--欢迎下次光临--"<<endl;
              }
              else

                     cout<<"Error
munber please register"<<endl;
       }
       return 0;
}


完整代码C++

#include <iostream>
#include <fstream>
#include <map>
#include <string>
#include <vector>
#include <algorithm>
 
using namespace std;
 
// 书本类
class Book {
public:
    string isbn; // 书号
    string name; // 书名
    string author; // 作者
    double price; // 价格
};
 
// 订单类
class Order {
public:
    int id; // 订单号
    string customer_name; // 客户姓名
    map<string, int> books; // 购买的书本及其数量
};
 
// 客户类
class Customer {
public:
    string name; // 客户姓名
    string email; // 客户邮箱
};
 
// 书本录入类
class BookInput {
public:
    void input(Book& book) {
        cout << "请输入书号:";
        cin >> book.isbn;
        cout << "请输入书名:";
        cin >> book.name;
        cout << "请输入作者:";
        cin >> book.author;
        cout << "请输入价格:";
        cin >> book.price;
        cout << "书本录入成功!" << endl;
    }
};
 
// 订单录入类
class OrderInput {
public:
    void input(Order& order, const vector<Book>& books, int next_id) {
        order.id = next_id;
        cout << "请输入客户姓名:";
        cin >> order.customer_name;
        while (true) {
            cout << "请输入书号(按q结束):";
            string isbn;
            cin >> isbn;
            if (isbn == "q") {
                break;
            }
            auto iter = find_if(books.begin(), books.end(), 
                [isbn](const Book& b) { return b.isbn == isbn; });
            if (iter == books.end()) {
                cout << "书号错误,请重新输入!" << endl;
                continue;
            }
            int count;
            cout << "请输入数量:";
            cin >> count;
            order.books[isbn] += count;
            cout << "书本添加成功!" << endl;
        }
        cout << "订单录入成功!订单号为:" << order.id << endl;
    }
};
 
// 订单结算类
class OrderCheckout {
public:
    double checkout(const Order& order, const vector<Book>& books) {
        double total_price = 0;
        cout << "客户姓名:" << order.customer_name << endl;
        cout << "订单明细:" << endl;
        for (auto pair : order.books) {
            string isbn = pair.first;
            int count = pair.second;
            auto iter = find_if(books.begin(), books.end(), 
                [isbn](const Book& b) { return b.isbn == isbn; });
            if (iter != books.end()) {
                cout << "  " << iter->name << " x " << count 
                     << ",价格:" << iter->price * count << endl;
                total_price += iter->price * count;
            }
        }
        cout << "合计:" << total_price << endl;
        return total_price;
    }
};
 
// 客户信息录入类
class CustomerInput {
public:
    void input(Customer& customer) {
        cout << "请输入客户姓名:";
        cin >> customer.name;
        cout << "请输入客户邮箱:";
        cin >> customer.email;
        cout << "客户信息录入成功!" << endl;
    }
};
 
// 文件处理类
class FileManager {
public:
    vector<Book> load_books(const string& filename) {
        vector<Book> books;
        ifstream file(filename);
        if (file.is_open()) {
            while (!file.eof()) {
                Book book;
                file >> book.isbn >> book.name >> book.author >> book.price;
                if (file.fail()) {
                    break;
                }
                books.push_back(book);
            }
            file.close();
            cout << "读取书本信息成功,共读取 " << books.size() << " 本书!" << endl;
        } else {
            cout << "打开 " << filename << " 文件失败!" << endl;
        }
        return books;
    }
 
    void save_orders(const string& filename, const vector<Order>& orders) {
        ofstream file(filename);
        if (file.is_open()) {
            for (auto order : orders) {
                file << order.id << " " << order.customer_name << " ";
                for (auto pair : order.books) {
                    string isbn = pair.first;
                    int count = pair.second;
                    file << "(" << isbn << "," << count << ")";
                }
                file << endl;
            }
            file.close();
            cout << "订单信息保存成功,共保存 " << orders.size() << " 条订单!" << endl;
        } else {
            cout << "打开 " << filename << " 文件失败!" << endl;
        }
    }
};
 
// 主函数
int main() {
    BookInput book_input;
    OrderInput order_input;
    OrderCheckout order_checkout;
    CustomerInput customer_input;
    FileManager file_manager;
 
    vector<Book> books = file_manager.load_books("books.txt");
    vector<Order> orders;
    int next_id = 1;
 
    while (true) {
        cout << "请选择操作:" << endl;
        cout << "1. 录入书本信息" << endl;
        cout << "2. 录入订单信息" << endl;
        cout << "3. 结算订单" << endl;
        cout << "4. 录入客户信息" << endl;
        cout << "5. 保存订单信息" << endl;
        cout << "0. 退出程序" << endl;
 
        int choice;
        cin >> choice;
 
        switch (choice) {
        case 1: { // 录入书本信息
            Book book;
            book_input.input(book);
            books.push_back(book);
            break;
        }
        case 2: { // 录入订单信息
            Order order;
            order_input.input(order, books, next_id);
            orders.push_back(order);
            next_id++;
            break;
        }
        case 3: { // 结算订单
            if (orders.empty()) {
                cout << "没有订单需要结算!" << endl;
            } else {
                cout << "请选择要结算的订单号(输入0返回):" << endl;
                for (auto order : orders) {
                    cout << order.id << "," << order.customer_name << endl;
                }
                int order_id;
                cin >> order_id;
                if (order_id == 0) {
                    break;
                }
                auto iter = find_if(orders.begin(), orders.end(), 
                    [order_id](const Order& o) { return o.id == order_id; });
                if (iter == orders.end()) {
                    cout << "订单号不存在!" << endl;
                } else {
                    double total_price = order_checkout.checkout(*iter, books);
                    cout << "输入实际支付金额:";
                    double paid_price;
                    cin >> paid_price;
                    cout << "找零:" << paid_price - total_price << endl;
                }
            }
            break;
        }
        case 4: { // 录入客户信息
            Customer customer;
            customer_input.input(customer);
            cout << "客户 " << customer.name << " 的邮箱是 " << customer.email << endl;
            break;
        }
        case 5: { // 保存订单信息
            file_manager.save_orders("orders.txt", orders);
            break;
        }
        case 0: // 退出程序
            return 0;
        default:
            cout << "无效选项,请重新选择!" << endl;
        }
    }
 
    return 0;
}

上述程序中,设计了五个类:Book、Order、Customer、BookInput、OrderInput、OrderCheckout、CustomerInput、 FileManager,分别对应书本、订单、客户、书本录入、订单录入、订单结算、客户信息录入、文件管理功能。其中Book、Order、Customer对应数据的实体类,BookInput、OrderInput、OrderCheckout、CustomerInput对应具体功能的输入实现,FileManager对应文件处理功能。

C++ 实现‘

#include<iostream>
#include<string>
using namespace std;
class buyfolk;
class member;
class honoured_guest;
class buyer
{
public:
       buyer()
       {

              name="Null";
              addr="Null";
              number=0;
              expense=0;
              level=0;
       }

void getid(int num)

       {

              number=num;
              if(number>=0&&number<=20)
              {   level=1;}
              else
if(number>=21&&number<=40)
              {     level=2;}
              else
if(number>=41&&number<=60)
              {     level=3;}
              else
if(number>=61&&number<=80)

              {     level=4;}
              else
if(number>=81&&number<=100)
              {     level=5;}
              else
if(number>=200&&number<=300)

              {            }

              else
if(number>=1000&&number<=2000)

              {            }

              else

                     cout<<"Error
munber please register"<<endl;

       }

       void
getbuyname()

       {

              cout<<"请输入你的姓名:"<<endl;
              cin>>name;

       }

       void
getaddress()

       {

              cout<<"请输入你的地址:"<<endl;
              cin>>addr;
       }
       virtual
void setpay()
       {
              getbuyname();
              getaddress();
              cout<<"请输入你的未打折消费: "<<endl;
              cin>>expense;
       }
       virtual
void display()
       {
              cout<<"姓名: "<<name<<endl<<"地址:
"<<addr<<endl<<"编号: "<<number<<endl<<"消费:
"<<expense<<endl;
       }
protected:
       string name;
       string addr;
       int  number;
       int level;
       double  expense;
};
class buyfolk:public buyer
{
public:
       virtual
void display()
       {
              cout<<"--欢迎您,亲爱的普通会员--"<<endl;
              buyer::display();
       }
       virtual
void setpay()
       {
              buyer::setpay();
       }      
}; 
class member:public buyer
{
public:
       member()
       {
       }
       virtual
void setpay()
       {
              buyer::setpay();
              if(level==1)
                     expense=expense*0.95;
              if(level==2)
                     expense*=0.90;
              if(level==3)
                     expense*=0.85;
              if(level==4)
                     expense*=0.80;
              if(level==5)
                     expense*=0.70;
       }

       virtual
void display()

       {

              cout<<"--欢迎您,亲爱的黄金会员--"<<endl;

              buyer::display();

              cout<<"Level:
"<<level<<endl;

       }

private:

};

 

class honoured_guest:public buyer

{

public:

       honoured_guest()
       {
              discount=0;
       }

       virtual
void setpay()
       {
              buyer::setpay();
              cout<<"请输入你的折扣: "<<endl;
              cin>>discount;
              expense*=(1-discount);
       }

       virtual
void display()
       {
              cout<<"--欢迎您,亲爱的钻石会员--"<<endl;
              buyer::display();
              cout<<"折扣:"<<discount<<endl;
       }
private:
       double discount;
}; 
int main()
{
       int number;

       buyfolk
b[10];

       member
m[10];

       honoured_guest
h[10];
       int i=0,flag=1,j=0,z=0;
       while(flag)
       {     cout<<"-------------------------------------------------"
<<endl;

              cout<<"     ------欢迎进入我们书店------     
"<<endl;

              cout<<"     ----如果你想要退出,请输入886----  
"<<endl;

              cout<<"       ----请输入你的编号----      
"<<endl;

              cout<<"-------------------------------------------------"
<<endl;
              cin>>number;
              if(number>=0&&number<=100)
              {   
                     cout<<"--欢迎您,亲爱的黄金会员--"<<endl;
                     m[i].getid(number);
                     m[i].setpay();
                     m[i].display();
                     i++;
                     cout<<endl<<endl;
              }
              else
if(number>=200&&number<=300)
              {
                     cout<<"--欢迎您,亲爱的钻石会员--"<<endl;
                     h[j].getid(number);
                     h[j].setpay();
                     h[j].display();
                     j++;
                     cout<<endl<<endl;
              }
              else
if(number>=1000&&number<=2000)
              {
                     cout<<"--欢迎您,亲爱的普通会员--"<<endl;
                     b[z].getid(number);
                     b[z].setpay();
                     b[z].display();
                     z++;
                     cout<<endl<<endl;
              }
              else
if(number==886)
              {
                     flag=0;
                     cout<<"--欢迎下次光临--"<<endl;
              }
              else

                     cout<<"Error
munber please register"<<endl;
       }
       return 0;
}



可以一起讨论讨论呦

下面是简单的示例代码:

#include <iostream>  
#include <fstream>  
#include <string>  
#include <vector>  
#include <sstream>  
  
using namespace std;  
  
// 定义订单类  
class Order {  
public:  
    Order() {}  
    Order(int p, string n, string u, double c) : price(p), name(n), unit(u), cost(c) {}  
    int get_price() const { return price; }  
    string get_name() const { return name; }  
    string get_unit() const { return unit; }  
    double get_cost() const { return cost; }  
    void set_price(int p) { price = p; }  
    void set_name(string n) { name = n; }  
    void set_unit(string u) { unit = u; }  
    void set_cost(double c) { cost = c; }  
private:  
    int price;    // 价格  
    string name;   // 名称  
    string unit;   // 计量单位  
    double cost;   // 成本  
};  
  
// 定义客户类  
class Customer {  
public:  
    Customer() {}  
    Customer(string n, string e, string a) : name(n), email(e), address(a) {}  
    string get_name() const { return name; }  
    string get_email() const { return email; }  
    string get_address() const { return address; }  
    void set_name(string n) { name = n; }  
    void set_email(string e) { email = e; }  
    void set_address(string a) { address = a; }  
private:  
    string name;   // 姓名  
    string email;   // 电子邮箱  
    string address; // 地址  
};  
  
// 定义书本类  
class Book {  
public:  
    Book() {}  
    Book(string n, string a, int y, double p) : name(n), author(a), year(y), price(p) {}  
    string get_name() const { return name; }  
    string get_author() const { return author; }  
    int get_year() const { return year; }  
    double get_price() const { return price; }  
    void set_name(string n) { name = n; }  
    void set_author(string a) { author = a; }  
    void set_year(int y) { year = y; }  
    void set_price(double p) { price = p; }  
private:  
    string name;   // 名称  
    string author;  // 作者  
    int year;       // 出版年份  
    double price;   // 价格  
};  
  
// 定义购物车类  
class ShoppingCart {  
public:  
    ShoppingCart() {}  
    void add_book(Book b) { books.push_back(b); }  
    void remove_book(Book b);  
    void clear();  
    size_t get_book_count() const { return books.size(); }  
    const Book& get_book(size_t index) const { return books[index]; }  
private:  
    vector<Book> books;   // 购物车中的书本列表  
};  
  
// 定义结账类  
class Checkout {  
public:  
    Checkout() {}  
    void add_customer(Customer c);  
    void add_book_to_cart(Book b);  
    void remove_book_from_cart(Book b);  
    void checkout();  
    size_t get_customer_count() const { return customers.size(); }  
    size_t get_book_count() const { return carts.size(); }  
private:  
    vector<Customer> customers;  // 所有客户列表  
    vector<ShoppingCart> carts;   // 所有购物车列表  
};

基于Newbing的编写,参考:

#include <iostream>
#include <fstream>
#include <vector>
#include <string>


class Customer {
public:
    // 构造函数、析构函数、拷贝构造函数等
    Customer() = default;
    Customer(const std::string& name, const std::string& contact, const std::string& address)
        : name_(name), contact_(contact), address_(address) {}
    Customer(const Customer& other)
        : name_(other.name_), contact_(other.contact_), address_(other.address_) {}
    ~Customer() = default;

    // 添加顾客信息
    void addCustomerInfo(const std::string& name, const std::string& contact, const std::string& address) {
        name_ = name;
        contact_ = contact;
        address_ = address;
    }

    // 修改顾客信息
    void modifyCustomerInfo(const std::string& name, const std::string& contact, const std::string& address) {
        if (!name.empty()) {
            name_ = name;
        }
        if (!contact.empty()) {
            contact_ = contact;
        }
        if (!address.empty()) {
            address_ = address;
        }
    }

    // 查看顾客信息
    void displayCustomerInfo() const {
        std::cout << "姓名:" << name_ << std::endl;
        std::cout << "联系方式:" << contact_ << std::endl;
        std::cout << "地址:" << address_ << std::endl;
    }

public:
    std::string name_;
    std::string contact_;
    std::string address_;
};

class Book {
public:
    // 构造函数、析构函数、拷贝构造函数等
    Book() = default;
    Book(const std::string& bookName, const std::string& author, const std::string& publisher, double price)
        : bookName_(bookName), author_(author), publisher_(publisher), price_(price) {}
    Book(const Book& other)
        : bookName_(other.bookName_), author_(other.author_), publisher_(other.publisher_), price_(other.price_) {}
    ~Book() = default;

    // 添加图书信息
    void addBookInfo(const std::string& bookName, const std::string& author, const std::string& publisher, double price) {
        bookName_ = bookName;
        author_ = author;
        publisher_ = publisher;
        price_ = price;
    }

    // 修改图书信息
    void modifyBookInfo(const std::string& bookName, const std::string& author, const std::string& publisher, double price) {
        if (!bookName.empty()) {
            bookName_ = bookName;
        }
        if (!author.empty()) {
            author_ = author;
        }
        if (!publisher.empty()) {
            publisher_ = publisher;
        }
        if (price > 0) {
            price_ = price;
        }
    }

    // 查看图书信息
    void displayBookInfo() const {
        std::cout << "书名:" << bookName_ << std::endl;
        std::cout << "作者:" << author_ << std::endl;
        std::cout << "出版社:" << publisher_ << std::endl;
        std::cout << "价格:" << price_ << std::endl;
    }


public:
    std::string bookName_;
    std::string author_;
    std::string publisher_;
    double price_ = 0.0;
};

class ShoppingCart {
public:
    // 构造函数、析构函数、拷贝构造函数等
    ShoppingCart() = default;
    ShoppingCart(const std::vector<Book>& selectedBooks)
        : selectedBooks_(selectedBooks) {}
    ShoppingCart(const ShoppingCart& other)
        : selectedBooks_(other.selectedBooks_) {}
    ~ShoppingCart() = default;

    // 添加图书至购物车
    void addBookToCart(const Book& book) {
        selectedBooks_.push_back(book);
    }

    // 从购物车中删除图书
    void removeBookFromCart(const std::string& bookName) {
        for (auto it = selectedBooks_.begin(); it != selectedBooks_.end(); ++it) {
            if (it->bookName_ == bookName) {
                selectedBooks_.erase(it);
                break;
            }
        }
    }

    // 清空购物车
    void clearCart() {
        selectedBooks_.clear();
    }

    // 计算总价
    double calculateTotalPrice() const {
        double totalPrice = 0.0;
        for (const auto& book : selectedBooks_) {
            totalPrice += book.price_;
        }
        return totalPrice;
    }

    // 查看购物车
    void displayShoppingCart() const {
        for (const auto& book : selectedBooks_) {
            std::cout << "书名:" << book.bookName_ << ",价格:" << book.price_ << std::endl;
        }
    }

private:
    std::vector<Book> selectedBooks_;
};

class Order {
public:
    // 构造函数、析构函数、拷贝构造函数等
    Order() = default;
    Order(const Customer& customer, const ShoppingCart& cart)
        : id_(orderId_++), customer_(customer), shoppingCart_(cart) {}
    Order(const Order& other)
        : id_(other.id_), customer_(other.customer_), shoppingCart_(other.shoppingCart_) {}
    ~Order() = default;

    // 生成订单
    void generateOrder(const Customer& customer, const ShoppingCart& cart) {
        customer_ = customer;
        shoppingCart_ = cart;
        orderId_++;
    }

    // 查看订单信息
    void displayOrderInfo() const {
        std::cout << "订单号:" << id_ << std::endl;
        std::cout << "顾客信息:" << std::endl;
        customer_.displayCustomerInfo();
        std::cout << "所选图书列表:" << std::endl;
        shoppingCart_.displayShoppingCart();
        std::cout << "总价:" << shoppingCart_.calculateTotalPrice() << std::endl;
    }

public:
    static int orderId_;
    int id_;
    Customer customer_;
    ShoppingCart shoppingCart_;
};

// 静态成员变量需要在类外进行初始化
int Order::orderId_ = 1000;


class BookStore {
public:
    // 构造函数、析构函数、拷贝构造函数等
    BookStore() = default;
    BookStore(const std::vector<Book>& books)
        : books_(books) {}
    BookStore(const BookStore& other)
        : books_(other.books_) {}
    ~BookStore() = default;

    // 添加图书至图书库存
    void addBookToStore(const Book& book) {
        books_.push_back(book);
    }

    // 从图书库存中删除图书
    void removeBookFromStore(const std::string& bookName) {
        for (auto it = books_.begin(); it != books_.end(); ++it) {
            if (it->bookName_ == bookName) {
                books_.erase(it);
                break;
            }
        }
    }

    // 查看图书库存
    void displayBookStore() const {
        for (const auto& book : books_) {
            std::cout << "书名:" << book.bookName_ << ",价格:" << book.price_ << std::endl;
        }
    }

    // 根据书名查找图书信息
    Book findBook(const std::string& bookName) const {
        for (const auto& book : books_) {
            if (book.bookName_ == bookName) {
                return book;
            }
        }
        std::cerr << "Error: 图书不存在!" << std::endl;
        return Book();
    }

public:
    std::vector<Book> books_;
};


// 从文件中读取顾客信息
void readCustomerInfoFromFile(Customer& customer, const std::string& fileName) {
    std::ifstream infile(fileName);
    if (!infile) {
        std::cerr << "Error: 文件打开失败!" << std::endl;
        return;
    }
    std::string name, contact, address;
    getline(infile, name);
    getline(infile, contact);
    getline(infile, address);
    customer.addCustomerInfo(name, contact, address);
    infile.close();
}

// 从文件中读取图书信息
void readBookInfoFromFile(BookStore& bookStore, const std::string& fileName) {
    std::ifstream infile(fileName);
    if (!infile) {
        std::cerr << "Error: 文件打开失败!" << std::endl;
        return;
    }
    std::string line;
    while (getline(infile, line)) {
        std::string bookName, author, publisher;
        double price = 0.0;
        int pos = line.find(",");
        if (pos != std::string::npos) {
            bookName = line.substr(0, pos);
            int pos2 = line.find(",", pos + 1);
            if (pos2 != std::string::npos) {
                author = line.substr(pos + 1, pos2 - pos - 1);
                int pos3 = line.find(",", pos2 + 1);
                if (pos3 != std::string::npos) {
                    publisher = line.substr(pos2 + 1, pos3 - pos2 - 1);
                    price = atof(line.substr(pos3 + 1).c_str());
                }
            }
        }
        bookStore.addBookToStore(Book(bookName, author, publisher, price));
    }
    infile.close();
}

// 将订单信息写入文件
void writeOrderInfoToFile(const Order& order, const std::string& fileName) {
    std::ofstream outfile(fileName, std::ios::app);
    if (!outfile) {
        std::cerr << "Error: 文件打开失败!" << std::endl;
        return;
    }
    outfile << "==========================" << std::endl;
    outfile << "订单号:" << std::endl;
    order.displayOrderInfo();
    outfile << "顾客信息:" << std::endl;
    order.displayOrderInfo();
    outfile << "所选图书列表:" << std::endl;
    order.displayOrderInfo();
    outfile << "总价:"<< std::endl;
    order.displayOrderInfo();
    outfile << "==========================" << std::endl;
    outfile.close();
}


// 主函数
int main() {
    // 初始化顾客、图书库存、购物车和订单等对象
    Customer customer;
    BookStore bookStore;
    ShoppingCart shoppingCart;
    Order order;

    // 读取文件中的顾客信息和图书信息
    readCustomerInfoFromFile(customer, "customer.txt");
    readBookInfoFromFile(bookStore, "bookinfo.txt");

    // 显示购物菜单
    int choice = 0;
    while (true) {
        std::cout << "请选择操作:1-添加图书至购物车  2-从购物车中删除图书  "
            << "3-清空购物车  4-计算总价  5-查看购物车  6-结账  7-查看图书库存  8-退出" << std::endl;
        std::cin >> choice;
        if (choice == 1) {
            std::string bookName;
            std::cout << "请输入要添加的图书名称:" << std::endl;
            std::cin >> bookName;
            Book book = bookStore.findBook(bookName);
            if (!book.bookName_.empty()) {
                shoppingCart.addBookToCart(book);
                std::cout << "成功添加图书 " << bookName << " 至购物车!" << std::endl;
            }
        }
        else if (choice == 2) {
            std::string bookName;
            std::cout << "请输入要删除的图书名称:" << std::endl;
            std::cin >> bookName;
            shoppingCart.removeBookFromCart(bookName);
            std::cout << "成功从购物车中删除图书 " << bookName << "!" << std::endl;
        }
        else if (choice == 3) {
            shoppingCart.clearCart();
            std::cout << "成功清空购物车!" << std::endl;
        }
        else if (choice == 4) {
            double totalPrice = shoppingCart.calculateTotalPrice();
            std::cout << "购物车总价为:" << totalPrice << std::endl;
        }
        else if (choice == 5) {
            std::cout << "购物车列表如下:" << std::endl;
            shoppingCart.displayShoppingCart();
        }
        else if (choice == 6) {
            if (shoppingCart.calculateTotalPrice() <= 0) {
                std::cerr << "Error: 购物车为空!" << std::endl;
                continue;
            }
            std::string confirm;
            std::cout << "确认结账吗?(Y/N)" << std::endl;
            std::cin >> confirm;
            if (confirm == "Y" || confirm == "y") {
                order.generateOrder(customer, shoppingCart);
                writeOrderInfoToFile(order, "order.txt");
                shoppingCart.clearCart();
                std::cout << "结账成功!" << std::endl;
            }
        }
        else if (choice == 7) {
            std::cout << "图书库存如下:" << std::endl;

            bookStore.displayBookStore();
        }
        else if (choice == 8) {
            break;
        }
        else {
            std::cerr << "Error: 非法操作!" << std::endl;
        }
    }

    return 0;
}


代码写好了,怎么给你,完整版的