程序的修改及完善
这次我修改的程序是与同学交换的的大一下学期时c++课程的期末大作业“网上购书结账系统”,在原本代码就已经运行成功的基础上又对系统的功能进行了完善,在客户登录后,增加了“我的信息”功能,客户可以在其中看到自己的个人信息,包括账号、密码、名字、省、市、享受折扣、积分、余额。
修改后的代码如下:
#include<iostream> #include<string> #include<stdio.h> #include<windows.h> #include<string.h> #include<vector> #include<algorithm> using namespace std; class Address{///地址 public: char province[66];///省 char city[66];///市 }; ///用户 class User{ public: char name[66];//用户名 char account[66]; char password[66]; Address address; }; ///Vip用户 class VipUser:public User{ public: int discount;//折扣 int integral;//积分 double balance;///余额 }; ///正常用户 class NormalUser:public User{ public: int integral;//积分 }; ///书 class Book{ public: char id[66]; char name[66]; double price;///价格 int repertory;///库存 }; ///订单 class Order{ public: char bookId[66];///书id char bookName[66];///书名 char userAccount[66];///账号 char userName[66];///用户名 int cnt;//本数 double price;///价格 Address address; }; class BookBySystem{ public: void run_(){ readDataByFile(); printf("程序加载中"); for (int i = 0; i < 10; i++) { Sleep(100); printf("."); fflush(stdout); } printf("\n"); system("cls"); login(); int cmd; while(true){ if(nowUserIsVip){ cout<<home_menu_vip<<endl; }else{ cout<<home_menu<<endl; } printf("请输入你需要操作的指令序号:");scanf("%d",&cmd); if(cmd == 0){ exit_(); } system("cls"); switch(cmd){ case 1:///购买书 buyBook(); break; case 2:///查看订单 seeOrder(); break; case 3:///充值为vip用户或者账户充值 if(nowUserIsVip){ recharge(); }else{ openVip(); } break; case 4:///我的信息 lookMyInfo(); break; } system("pause"); system("cls"); } } private: vector<VipUser> vipUserList;///vip用户登录 vector<NormalUser> normalUserList;///普通用户列表 vector<Book> bookList;///书列表 vector<Order> orderList;///订单列表 bool nowUserIsVip;///当前用户是否是vip用户 VipUser nowVipUser;///当前登录的用户 NormalUser nowNormalUser;///当前登录的用户 string home_menu = "+=====================================网上购书的结账系统=====================================+\n" "| |\n" "| |\n" "| 1.购买书 |\n" "| 2.查看订单 |\n" "| 3.开通Vip |\n" "| 4.我的信息 |\n" "| 0.退出 |\n" "| |\n" "| |\n" "+============================================================================================+\n\n"; string home_menu_vip = "+=====================================网上购书的结账系统=====================================+\n" "| |\n" "| |\n" "| 1.购买书 |\n" "| 2.查看订单 |\n" "| 3.账户充值 |\n" "| 4.我的信息 |\n" "| 0.退出 |\n" "| |\n" "| |\n" "+============================================================================================+\n\n"; string login_menu = "+=====================================欢迎使用网上购书的结账系统=====================================+\n" "| |\n" "| |\n" "| 1.登录 |\n" "| 2.注册 |\n" "| 0.退出 |\n" "| |\n" "| |\n" "+====================================================================================================+\n\n"; void readDataByFile(){ ///normalUserList FILE *normalUserDB = fopen("normalUserList.txt", "rb"); NormalUser normalUser; while (fread(&normalUser, sizeof(struct NormalUser), 1, normalUserDB) == 1) { normalUserList.push_back(normalUser); } fclose(normalUserDB); ///vipUserList FILE *vipUserDB = fopen("vipUserList.txt", "rb"); VipUser vipUser; while (fread(&vipUser, sizeof(struct VipUser), 1, vipUserDB) == 1) { vipUserList.push_back(vipUser); } fclose(vipUserDB); ///order FILE *orderDB = fopen("orderList.txt", "rb"); Order order; while (fread(&order, sizeof(struct Order), 1, orderDB) == 1) { orderList.push_back(order); } fclose(orderDB); ///book FILE *bookDB = fopen("bookList.txt", "rb"); Book book; while (fread(&book, sizeof(struct Book), 1, bookDB) == 1) { bookList.push_back(book); } fclose(bookDB); } void saveDataToFile(){ ///normalUserList FILE *normalUserDB = fopen("normalUserList.txt","wb"); for (int i = 0; i < normalUserList.size(); i++) { fwrite(&normalUserList[i], sizeof(NormalUser), 1, normalUserDB); } fclose(normalUserDB); ///vipUserList FILE *vipUserDB = fopen("vipUserList.txt","wb"); for (int i = 0; i < vipUserList.size(); i++) { fwrite(&vipUserList[i], sizeof(VipUser), 1, vipUserDB); } fclose(vipUserDB); ///order FILE *orderDB = fopen("orderList.txt","wb"); for (int i = 0; i < orderList.size(); i++) { fwrite(&orderList[i], sizeof(Order), 1, orderDB); } fclose(orderDB); ///book FILE *bookDB = fopen("bookList.txt", "wb"); for (int i = 0; i < bookList.size(); i++) { fwrite(&bookList[i], sizeof(Book), 1, bookDB); } fclose(bookDB); } void exit_(){ if(nowUserIsVip){ for(int i = 0;i < vipUserList.size();i ++){ if(strcmp(nowVipUser.account,vipUserList[i].account) == 0){ vipUserList[i] = nowVipUser; break; } } }else{ for(int i = 0;i < normalUserList.size();i ++){ if(strcmp(nowNormalUser.account,normalUserList[i].account) == 0){ normalUserList[i] = nowNormalUser; } } } printf("1111"); saveDataToFile(); system("cls"); printf("正在退出"); for (int i = 0; i < 10; i++) { Sleep(100); printf("."); fflush(stdout); } system("cls"); printf("已退出!"); exit(1); } bool getUserByAccount(char account[]){ for(int i = 0;i < normalUserList.size();i ++){ if(strcmp(normalUserList[i].account,account) == 0){ nowUserIsVip = false; nowNormalUser = normalUserList[i]; return true; } } for(int i = 0;i < vipUserList.size();i ++){ if(strcmp(vipUserList[i].account,account) == 0){ nowUserIsVip = true; nowVipUser = vipUserList[i]; return true; } } return false; } void login(){ int cmd = -1; User user; while(true){ cout<<login_menu<<endl; printf("请输入你需要操作的指令:");scanf("%d",&cmd); if(cmd == 0){ exit_(); } system("cls"); switch(cmd){ case 1: printf("请输入账号:");scanf("%s",user.account); printf("请输入密码:");scanf("%s",user.password); ///查找用户是否存在 if(getUserByAccount(user.account) && ((nowUserIsVip && strcmp(nowVipUser.password,user.password) == 0) || (!nowUserIsVip && strcmp(nowNormalUser.password,user.password) == 0))){ printf("登录成功!\n"); system("pause"); system("cls"); return ; }else{ printf("登录失败!账号密码错误!\n"); } break; case 2: printf("请输入真实姓名:");scanf("%s",user.name); printf("请输入账号:");scanf("%s",user.account); printf("请输入密码:");scanf("%s",user.password); printf("请输入你所在省:");scanf("%s",user.address.province); printf("请输入你所在市:");scanf("%s",user.address.city); ///查找用户是否存在 if(getUserByAccount(user.account)){ printf("该账号已被占用!\n"); }else{ NormalUser normalUser; strcpy(normalUser.account , user.account); strcpy(normalUser.address.province , user.address.province); strcpy(normalUser.address.city , user.address.city); strcpy(normalUser.password , user.password); strcpy(normalUser.name , user.name); normalUser.integral = 0; normalUserList.push_back(normalUser); printf("注册成功!\n"); } break; } system("pause"); system("cls"); } } void print_allBook(){ printf("%-16s%-16s%-16s%-16s\n","编号","书名","价格","库存"); for(int i = 0;i < bookList.size();i ++){ printf("%-16s%-16s%-16.2lf%-16d\n",bookList[i].id,bookList[i].name,bookList[i].price,bookList[i].repertory); } } void buyBook(){ Book book; printf("\n========================= 书城 ========================\n\n"); print_allBook(); printf("\n\n"); printf("请输入你需要购买书籍的编号:");scanf("%s",book.id); printf("请输入你需要购买多少本:");scanf("%d",&book.repertory); for(int i = 0;i < bookList.size();i ++){ if(strcmp(bookList[i].id,book.id) == 0){ if(bookList[i].repertory >= book.repertory){ Order order; if(nowUserIsVip){ strcpy(order.userName , nowVipUser.name); strcpy(order.userAccount , nowVipUser.account); order.address = nowVipUser.address; nowVipUser.integral += (book.repertory * bookList[i].price); nowVipUser.balance -= (book.repertory * bookList[i].price)*1.0*(nowVipUser.discount*1.0/10); }else{ strcpy(order.userName , nowNormalUser.name); strcpy(order.userAccount , nowNormalUser.account); order.address = nowNormalUser.address; nowNormalUser.integral += (book.repertory * bookList[i].price); } strcpy(order.bookId , bookList[i].id); strcpy(order.bookName , bookList[i].name); order.cnt = book.repertory; if(nowUserIsVip){ order.price = (book.repertory * bookList[i].price)*1.0*(nowVipUser.discount*1.0/10); }else{ order.price = book.repertory * bookList[i].price; } orderList.push_back(order); bookList[i].repertory -= book.repertory; printf("购买成功!"); }else{ printf("库存不足!"); } } } } void seeOrder(){ printf("========================= 订单 =========================\n\n"); printf("%-10s%-10s%-10s%-10s%-10s%-10s%-10s%-10s\n","账号","用户名","图书id","书名","省","市","数量","总价"); for(int i = 0;i < orderList.size();i ++){ if(nowUserIsVip && strcmp(nowVipUser.account,orderList[i].userAccount) == 0){ printf("%-10s%-10s%-10s%-10s%-10s%-10s%-10d%-10.2lf\n",orderList[i].userAccount,orderList[i].userName,orderList[i].bookId,orderList[i].bookName,orderList[i].address.province,orderList[i].address.city,orderList[i].cnt,orderList[i].price); }else if(strcmp(nowNormalUser.account,orderList[i].userAccount) == 0){ printf("%-10s%-10s%-10s%-10s%-10s%-10s%-10d%-10.2lf\n",orderList[i].userAccount,orderList[i].userName,orderList[i].bookId,orderList[i].bookName,orderList[i].address.province,orderList[i].address.city,orderList[i].cnt,orderList[i].price); } } } void recharge(){ printf("========================= 充值 =========================\n\n"); double money; printf("当前账户余额:%.2lf\n\n",nowVipUser.discount); printf("请输入你充值的金额:");scanf("%lf",&money); if(money >= 0){ nowVipUser.balance += money; printf("充值成功!你的余额为%.2lf\n",nowVipUser.balance); }else{ printf("开通失败!请充值正确金额!\n"); } } void openVip(){ double money; printf("========================= 开通Vip =========================\n\n"); printf("开头Vip最少需要充值1000元至vip卡中,卡中金额可以用来买书,可享受9折优惠!\n\n"); printf("请输入你充值的金额:");scanf("%lf",&money); if(money >= 1000){ strcpy(nowVipUser.account , nowNormalUser.account); strcpy(nowVipUser.password , nowNormalUser.password); nowVipUser.address = nowNormalUser.address; nowVipUser.balance = money; nowVipUser.discount = 9; nowVipUser.integral = nowNormalUser.integral; strcpy(nowVipUser.name , nowNormalUser.name); nowUserIsVip = true; vipUserList.push_back(nowVipUser); for(int i = 0;i < normalUserList.size();i ++){ if(strcmp(normalUserList[i].account,nowNormalUser.account) == 0){ for(int j = i;j < normalUserList.size() - 1;j ++){ normalUserList[i] = normalUserList[i + 1]; } normalUserList.pop_back(); break; } } printf("vip开通成功!"); }else{ printf("开通失败!请充值1000元以上!\n"); } } void lookMyInfo(){ printf("========================= 我的信息 =========================\n\n"); if(nowUserIsVip){ printf("%-10s%-10s%-10s%-10s%-10s%-10s%-10s%-10s\n","账号","密码","名字","省","市","享受折扣","积分","余额"); printf("%-10s%-10s%-10s%-10s%-10s%-10d%-10d%-10.2lf\n",nowVipUser.account,nowVipUser.password,nowVipUser.name,nowVipUser.address.province,nowVipUser.address.city,nowVipUser.discount,nowVipUser.integral,nowVipUser.balance); }else{ printf("%-10s%-10s%-10s%-10s%-10s%-10s\n","账号","密码","名字","省","市","积分"); printf("%-10s%-10s%-10s%-10s%-10s%-10d%\n",nowNormalUser.account,nowNormalUser.password,nowNormalUser.name,nowNormalUser.address.province,nowNormalUser.address.city,nowNormalUser.integral); } } }; int main(){ BookBySystem bookBuySystem; bookBuySystem.run_(); return 0; }
增加的内容主要为:
void lookMyInfo(){ printf("========================= 我的信息 =========================\n\n"); if(nowUserIsVip){ printf("%-10s%-10s%-10s%-10s%-10s%-10s%-10s%-10s\n","账号","密码","名字","省","市","享受折扣","积分","余额"); printf("%-10s%-10s%-10s%-10s%-10s%-10d%-10d%-10.2lf\n",nowVipUser.account,nowVipUser.password,nowVipUser.name,nowVipUser.address.province,nowVipUser.address.city,nowVipUser.discount,nowVipUser.integral,nowVipUser.balance); }else{ printf("%-10s%-10s%-10s%-10s%-10s%-10s\n","账号","密码","名字","省","市","积分"); printf("%-10s%-10s%-10s%-10s%-10s%-10d%\n",nowNormalUser.account,nowNormalUser.password,nowNormalUser.name,nowNormalUser.address.province,nowNormalUser.address.city,nowNormalUser.integral); } }
增加后的选项界面为:

“我的信息”界面为:

充值VIP后“我的信息”界面

浙公网安备 33010602011771号