软件开发与创新第一次作业
(1)代码来源
本系统是来自我室友的大一下半学期C++课程期末设计的图书购买系统大作业,该系统的主要功能为购买三种类型的书,可以选择书本和购买的数量,最终输出购买的书本、书本的数量以及最终需要支付的价格,但是原程序功能较少,只能进行购买书籍后计算价格,因此,我在原代码的基础上增加了一些功能进行完善。
(2)代码原始功能
原作者先是建立了book类来管理书本的书名和价格,book的派生类kind来管理具体不同类别的书本
主界面,选择购买的书的类型
输入1、2、3进行书本分类的跳转、显示出该类下具体有哪些书本以及书本的价格
输入相应编号后完成购买
最后输入4完成结账进行付款,同时将购买的书本保存在购买清单.dat文件中。
(3)程序创新修改
在购买书本的时候,如果需要同时购买多本书需要一本一本地进行购买,输入多次,步骤繁琐,因此我将代码进行优化,选择购买书本后跳出需要购买基本,用户在使用时直接输入一次即可完成多本书的购买。修改后代码如下

cout<<"购买语文书"<<endl; cout<<"请输入您要购买的数量"<<endl; cin>>p; c.price=c.price+20*p; cout<<"购买语文书"<<p<<"本"<<endl;
修改前: 修改后:
增加了用户注册会员、登录会员、会员买书折扣的功能
在菜单中增加注册登录功能,原有类下建立新的成员、用户密码正确后或者七折优惠
将注册时用户输入的账号密码保存在用户.dat文件中
增加代码如下

if(n==5) {ofstream fout("用户.dat",ios::out); cout<<"请输入用户名"<<endl; cin>>user; cout<<"请输入用户密码"<<endl; cin>>password; fout<<user<<endl; fout<<password<<endl; cout<<"注册完成"<<endl; e.kind1();continue; } if(n==6) {cout<<"登录会员"<<endl; cout<<"请输入用户名"<<endl; cin>>user1; cout<<"请输入用户密码"<<endl; cin>>password1; if(user!=user1&&password!=password1) {cout<<"用户名或密码错误,请重新输入"<<endl;continue; } else { cout<<"登陆成功,获得七折优惠"<<endl; zhekou=0.7; e.kind1();continue; } }
初始化float zhekou=1;
未登录会员则不打折
会员登录成功后最终计算价格时会乘以0.7,即zhekou=0.7;cout<<"您需要支付"<<zhekou*(c.price+d.price+e.price)<<"元"<<endl;
(4)改进后的代码

#include <iostream> #include<string> #include<fstream> using namespace std; ofstream fout("购买清单.dat",ios::out); static int p=0; static int q=0; static int r=0; static int ii=0; static int jj=0; static int kk=0; static int k=0; static int j=0; static int i=0; string user; string user1; string password; string password1; float zhekou=1; class book {public: int price=0; void book1() {cout<<"欢迎光临"<<endl;} string getname() {return name; } int getprice() {return price; } private: string name; }; class kind:public book { public: void kind1() {cout<<"你想要的书的类型"<<endl; cout<<"1、辅导类"<<endl; cout<<"2、小说类"<<endl; cout<<"3、历史类"<<endl; cout<<"4、结账"<<endl; cout<<"5、注册会员"<<endl; cout<<"6、登录"<<endl; cout<<"0、退出"<<endl; } }; class fudaoshu:public kind {public: void fudaoshu1() {cout<<"选择你想要的书"<<endl; cout<<"1、语文书 20元"<<endl; cout<<"2、数学书 17元"<<endl; cout<<"3、英语书 25元"<<endl; cout<<"0、退出"<<endl; } }; class novel:public kind {public: void novel1() {cout<<"选择你想要的书"<<endl; cout<<"1、巴黎圣母院 40元"<<endl; cout<<"2、雾都孤儿 30元"<<endl; cout<<"3、红楼梦 60元"<<endl; } }; class history:public kind {public: void history1() {cout<<"选择你想要的书"<<endl; cout<<"1、全球通史 70元"<<endl; cout<<"2、中国近代史 30元"<<endl; cout<<"3、史记 60元"<<endl; } }; int main(int argc, char** argv) { kind b; b.book1(); b.kind1(); fudaoshu c; novel d; history e; int n,j; for(int ijk=0;;) { cin>>n; if(n<0||n>6) { cout<<"输入错误,请重新输入"<<endl; //输入错误 continue; } if(n==1) //fu dao shu { c.fudaoshu1(); for(int ikj=0;;) { int a1;cin>>a1; if(a1<0||a1>3) { cout<<"输入错误,请重新输入"<<endl; //输入错误 continue; } if(a1==1) {cout<<"购买语文书"<<endl; cout<<"请输入您要购买的数量"<<endl; cin>>p; c.price=c.price+20*p; cout<<"购买语文书"<<p<<"本"<<endl; } if(a1==2) {cout<<"购买数学书"<<endl; cout<<"请输入您要购买的数量"<<endl; cin>>q; c.price=c.price+17*q; cout<<"购买数学书"<<q<<"本"<<endl; } if(a1==3) {cout<<"购买英语书"<<endl; cout<<"请输入您要购买的数量"<<endl; cin>>r; c.price=c.price+25*r; cout<<"购买英语书"<<r<<"本"<<endl; } if(a1==0) {cout<<"退出成功"<<endl;c.kind1();break;} } } // if(n==3) //fu dao shu { e.history1(); for(int iiiii=0;;) { int a1;cin>>a1; if(a1<0||a1>3) { cout<<"输入错误,请重新输入"<<endl; //输入错误 continue; } if(a1==1) {e.price=e.price+70;cout<<"全球通史购买成功"<<++ii<<"本"<<endl;} if(a1==2) {e.price=e.price+30;cout<<"中国近代史购买成功"<<++jj<<"本"<<endl;} if(a1==3) {e.price=e.price+60;cout<<"史记购买成功"<<++kk<<"本"<<endl;} if(a1==0) {cout<<"退出成功"<<endl;e.kind1();break;} } } // if(n==2) //fu dao shu { d.novel1(); for(int iii=0;;) { int a1;cin>>a1; if(a1<0||a1>3) { cout<<"输入错误,请重新输入"<<endl; //输入错误 continue; } if(a1==1) {d.price=d.price+40;cout<<"巴黎圣母院购买成功"<<++i<<"本"<<endl;} if(a1==2) {d.price=d.price+30;cout<<"雾都孤儿购买成功"<<++j<<"本"<<endl;} if(a1==3) {d.price=d.price+60;cout<<"红楼梦购买成功"<<++k<<"本"<<endl;} if(a1==0) {cout<<"退出成功"<<endl;d.kind1();break;} } } if(n==4) {cout<<"您需要支付"<<zhekou*(c.price+d.price+e.price)<<"元"<<endl; cout<<"欢迎下次光临"<<endl;break; } if(n==5) {ofstream fout("用户.dat",ios::out); cout<<"请输入用户名"<<endl; cin>>user; cout<<"请输入用户密码"<<endl; cin>>password; fout<<user<<endl; fout<<password<<endl; cout<<"注册完成"<<endl; e.kind1();continue; } if(n==6) {cout<<"登录会员"<<endl; cout<<"请输入用户名"<<endl; cin>>user1; cout<<"请输入用户密码"<<endl; cin>>password1; if(user!=user1&&password!=password1) {cout<<"用户名或密码错误,请重新输入"<<endl;continue; } else { cout<<"登陆成功,获得七折优惠"<<endl; zhekou=0.7; e.kind1();continue; } } } if(p!=0) {fout<<"您购买的语文书数量为"<<p<<"本"<<endl;} if(q!=0) {fout<<"您购买的数学书数量为"<<q<<"本"<<endl;} if(r!=0) {fout<<"您购买的英语书数量为"<<r<<"本"<<endl;} if(ii!=0) {fout<<"您购买的全球通史数量为"<<ii<<"本"<<endl;} if(jj!=0) {fout<<"您购买的中国近代史数量为"<<jj<<"本"<<endl;} if(kk!=0) {fout<<"您购买的史记数量为"<<kk<<"本"<<endl;} if(i!=0) {fout<<"您购买的雾都孤儿数量为"<<i<<"本"<<endl;} if(j!=0) {fout<<"您购买的红楼梦数量为"<<j<<"本"<<endl;} if(k!=0) {fout<<"您购买的三国演义数量为"<<k<<"本"<<endl;} fout.close(); return 0; }
(5)作业总结
(1)在对已有代码进行二次修改更新之前要对该代码有充分了解,全面地了解代码中使用的结构体、类的成员,构造函数、变量具体作用,具体功能等等才能更好地完成改进。
(2)修改代码的时候,最后在一些关键语句后面加上注释,方便自己或者他人以后阅读修改代码时能够更加快速地理解这段代码的含义,减少工作量。
(3)把自己置身于使用者的地位去思考用户究竟会做什么,怎么做,要什么,才能写出用户满意的程序,例如本程序,用户在购买图书的时候,肯定是希望有优惠,因此设置好优惠以及优惠力度满足用户需求十分重要。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· AI技术革命,工作效率10个最佳AI工具