用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;
}
代码写好了,怎么给你,完整版的