已阅读5页,还剩30页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
成绩: 课 程 设 计设计课程名称: 面向对象程序设计C+ 题 目: 模拟网上购书的结账功能 学 号: 学 生 姓 名 : 专 业 班 级: 指 导 教 师: 设计时间: 年 月 日 年 月 日模拟网上购书的结帐功能一、 课程设计目的本课程设计是计算机专业重要的实践性环节之一,是在学习完面向对象程序设计语言(C+)课程后进行的一次全面的综合练习。本课程设计的目的和任务:1. 巩固和加深学生对C+语言课程的基本知识的理解和掌握2. 掌握C+语言编程和程序调试的基本技能3. 利用C+语言进行面向对象的软件设计方法4. 掌握书写程序设计说明文档的能力5. 提高运用C+语言解决实际问题的能力二、 需求分析用C+语言完成一个模拟网上购书结账功能,数据保存在文件中。C+语言全面兼容C语言,它比C语言更加安全、可读性更好、代码结构更合理。所以C+是的该程序开发更加容易。模拟网上购书结账功能可以方便卖书人员更加快速地获取并充分了解自己销售书籍的订单信息,十分有用。模拟网上购书系统需要实现的功能:(1)发票信息录入;(2)发票信息删除;(3)根据发票号查询发票信息;(4)根据买家ID查询发票信息;(5)显示所有发票信息。 三、 总体设计1. 模拟网上购书系统功能总体设计如下:模拟网上购书系统显示所有发票信息根据买家ID查询发票信息根据发票号查询发票信息发票信息删除发票信息录入图3.1 功能模块图2. 数据存储在文件中 1)Book.txt:存储书籍信息,包括书籍编号、书名、作者、出版社、单价; 2)Buyer.txt:存储购书者信息,包括买家ID、姓名、地址、身份(0代表普通人,1代表会员,2代表贵宾); 3)Orde.txt:存储订单信息,包括订单号、买家ID; 4)Receipt.txt:存储发票信息,包括订单号、书籍编号、数量;3.开发软件:Visual Studio 20104.操作系统:windows 7四、 各功能设计1、在类Book中主要定义了,书籍的编号、书名、作者、出版社、和价格。还定义了书籍信息的显示函数class Bookpublic:Book();Book(string bi, string bn, string au, string pu, double pr);/构造函数void display();/显示函数private:string bookID;/编号string bookName;/书名string author;/作者string publish;/出版社double price;/价格;2、在Buyer.h中主要定义了Buyer这个基类,并对它进行派生,共3个派生类:People、Member和Vipclass Buyerpublic:Buyer();Buyer(string id,string na,string ad);/构造函数virtual void display();/显示函数(虚函数)protected:string buyerID; /买家IDstring name; /姓名string address;/地址;/普通人类class People:public Buyerpublic:People(string id,string na,string ad):Buyer(id,na,ad)void display();/会员类class Member:public Buyerpublic:Member(string id,string na,string ad,double dc):Buyer(id,na,ad)discount_member=dc;void display();private:double discount_member;/折扣率;/贵宾类class Vip:public Buyerpublic:Vip(string id,string na,string ad,double dc):Buyer(id,na,ad)discount_vip=dc;void display();private:double discount_vip;/折扣率; 3、在Order中主要定义了订单的发票号和买家ID两个属性。还定义了添加订单信息、删除订单信息等函数。class Orderpublic:Order();Order(int re,string bu);/构造函数int getLine();/获取Order.txt中的行数void readOrder(Order o);/从Order.txt中读取数据放入Receipt对象数组中int Judge(int receiptID);/判断Order.txt中是否存在该订单号,若存在返回该订单的行号,不存在返回-1void addOrder(int receiptID,string buyerID);/添加订单信息void deleteOrder(int receiptID);/删除订单信息private:int receiptID;/发票号string buyerID;/买家ID;4、在Receipt中主要定义了发票的订单号、书籍编号、数量、总价等属性。还定义了添加删除发票信息、查找发票、显示发票等函数。class Receiptpublic:Receipt();Receipt(int re,string bo,int nu);/构造函数int getBookLine();/获取Book.txt中的行数void readBook(string bookID, string bookName, string author, string publish, string price);/从Book.txt中读取数据放入数组中int getBuyerLine();/获取Buyer.txt的行数void readBuyer(string buyerID, string name, string address,string type);/从Buyer.txt中读取数据放入数组中void readOrder(string receiptID,string buyerIDs);/从Order.txt中,读取数据,放入数组中int getReceiptLine();/获取Receipt.txt的行数void readReceipt(Receipt receipt);/从Receipt.txt中读取数据放入Receipt对象数组中returnLs Judge(int receiptID);/判断Receipt.txt中是否存在用户要求的发票编号,如果存在,返回行号数组类void addReceipt();/添加发票void deleteReceipt();/删除发票void selectReceiptByRI();/根据订单号查找发票void selectReceiptByBI();/更具买家ID查找发票void print();/打印发票private:int receiptID;/发票编号string bookID;/图书编号int num;/购书数量double pay;/支付总金额;五、 系统实现与系统调试1、登入模拟网上购书系统,看到欢迎界面,用户可根据主界面提示的操作,输入1-5任一编号,选择所需操作。 2、发票信息录入,先输入买家ID,再输入所需的书籍编号和数量(可输入多本书籍编号和数量,输入书籍编号为0时停止录入),录入完成可选择再录入信息或返回上级目录或退出。3、输入发票号,选择删除订单。若存在订单号,则显示删除成功;若不存在显示数据库中没有此订单,完成该操作可选择再删除信息或返回上级目录或退出。4、根据发票号查找发票信息,用户输入发票号,若存在该发票号则显示发票信息,若不存在显示不存在该订单。操作完成后可选择继续查询发票信息或返回上级目录,或退出。5、根据买家ID查找发票信息,用户输入买家ID,若存在显示该买家的所有发票信息;6、若不存在显示该卖家没有。操作完成后可选择继续查询发票信息或返回上级目录,或退出。7、打印所有发票信息,操作结束后可选择返回上级目录或退出系统。六、 软件使用说明1、 登入模拟网上购书系统,看到欢迎界面,用户可根据主界面提示的操作,输入1-5任一编号(输入0,退出),选择所需操作。2、 输入1,可进行发票信息录入录入。先输入买家ID,再输入所需的书籍编号和数量(可输入多本书籍编号和数量,输入书籍编号为0时停止录入),录入完成可输入1选择再录入信息,输入2返回上级目录,输入0退出。3、 输入2,可进行发票号信息删除。输入发票号,若存在订单号,则显示删除成功;若不存在显示数据库中没有此订单,完成该操作可输入1选择再删除发票信息,输入2返回上级目录,输入0退出。4、 输入3,可进行根据发票号查找发票信息。输入发票号,若存在该发票号则显示发票信息,若不存在显示不存在该订单。操作完成后可输入1选择根据发票号查找发票信息,输入2选择根据买家ID查找发票信息,输入3返回上级目录,输入0退出。5、 输入4,可进行根据买家ID查找发票信息。输入买家ID,若存在显示买家所有发票信息,若不存在买家没有订单。操作完成后可输入1选择根据发票号查找发票信息,输入2选择根据买家ID查找发票信息,输入3返回上级目录,输入0退出。七、 课程设计心得与体会这次实训让我对本学期所学的C+进行有了更深一步的了解,并可以使用C+初步完成一个简单的系统。训练了我综合运用所学习的各项知识,完成此系统的操作。实训过程中,我遇到了很多问题,例如C+中string和int类型之间的转换,如何返回int数组等问题,但通过上网搜索或询问老师同学以后都得到了解决,也掌握了这些方法。在设计网上模拟购书系统的过程中,我使用的是文件存储数据,所以在调用的时候要考虑很多循环和关联,这锻炼了我的思维模式。这些都让我获益匪浅。在这个过程中,我进一步巩固了所学习的知识,同时了解到自己还有很多没学到的知识,学无止境,在以后的日子中,我一定的更加严格要求自己,积极进取,奋发向上,不断努力发展自己。这次的系统设计让我学会了综合运用C+所学的知识,对我今后对使用C+语言编程开发有着重要的作用。附录1.Book.h#pragma once#include#includeusing namespace std;class Bookpublic:Book();Book(string bi, string bn, string au, string pu, double pr);/构造函数void display();/显示函数private:string bookID;/编号string bookName;/书名string author;/作者string publish;/出版社double price;/价格;2. Book.cpp#include Book.h#include #include #include #include using namespace std;Book:Book()bookID=;bookName=;author=;publish=;price=0;Book:Book(string bi, string bn, string au, string pu, double pr)bookID=bi;bookName=bn;author=au;publish=pu;price=pr;void Book:display()cout书号:bookIDt;cout书名:bookNamet;cout作者:authort;cout出版社:publisht;cout价格:pricet;3.Buyer.h#pragma once#includeusing namespace std;/购书者类class Buyerpublic:Buyer();Buyer(string id,string na,string ad);/构造函数virtual void display();/显示函数(虚函数)protected:string buyerID;/买家IDstring name;/姓名string address;/地址;/普通人类class People:public Buyerpublic:People(string id,string na,string ad):Buyer(id,na,ad)void display();/会员类class Member:public Buyerpublic:Member(string id,string na,string ad,double dc):Buyer(id,na,ad)discount_member=dc;void display();private:double discount_member;/折扣率;/贵宾类class Vip:public Buyerpublic:Vip(string id,string na,string ad,double dc):Buyer(id,na,ad)discount_vip=dc;void display();private:double discount_vip;/折扣率; 4. Buyer.cpp#include Buyer.h#include #include #include #include using namespace std;Buyer:Buyer()buyerID=;name=;address=;Buyer:Buyer(string id,string na,string ad)name=na;buyerID=id;address=ad;int getLine()ifstream in(Buyer.txt);string line;int n=0;while(getline(in,line)n+;in.close();return n;void Buyer:display()cout买家信息:;coutID:buyerIDt;cout姓名:namet;cout地址:addressn;void People:display()Buyer:display();cout该买家是普通人,无折扣率。n;void Member:display()Buyer:display();cout该买家是会员,折扣率为 discount_member*10折!n;void Vip:display()Buyer:display();cout该买家是贵宾,折扣率为 discount_vip*10折!n;5. Buyer.cpp#include Buyer.h#include #include #include #include using namespace std;Buyer:Buyer()buyerID=;name=;address=;Buyer:Buyer(string id,string na,string ad)name=na;buyerID=id;address=ad;int getLine()ifstream in(Buyer.txt);string line;int n=0;while(getline(in,line)n+;in.close();return n;void Buyer:display()cout买家信息:;coutID:buyerIDt;cout姓名:namet;cout地址:addressn;void People:display()Buyer:display();cout该买家是普通人,无折扣率。n;void Member:display()Buyer:display();cout该买家是会员,折扣率为 discount_member*10折!n;void Vip:display()Buyer:display();cout该买家是贵宾,折扣率为 discount_vip*10折!n;6. Orde.h#pragma once#includeusing namespace std;class Orderpublic:Order();Order(int re,string bu);/构造函数int getLine();/获取Order.txt中的行数void readOrder(Order o);/从Order.txt中读取数据放入Receipt对象数组中int Judge(int receiptID);/判断Order.txt中是否存在该订单号,若存在返回该订单的行号,不存在返回-1void addOrder(int receiptID,string buyerID);/添加订单信息void deleteOrder(int receiptID);/删除订单信息private:int receiptID;/发票编号string buyerID;/会员编号;7. Orde.cpp#include Order.h#include #include #include #include Order:Order()receiptID=0;buyerID=;/构造函数Order:Order(int re,string bu)re=receiptID;bu=buyerID;/获取Order.txt中的行数int Order:getLine()ifstream in(Order.txt);string line;int n=0;while(getline(in,line)n+;in.close();return n;/从Order.txt中读取数据放入Receipt对象数组中void Order:readOrder(Order o)ifstream infile(Order.txt,ios:in|ios:binary);if(!infile)cerr open errorendl;exit(1);int n=getLine();for(int i=0;irebu;int re2=atoi(re.c_str();oi.receiptID=re2;oi.buyerID=bu;infile.close();/判断Order.txt中是否存在该订单号,若存在返回该订单的行号,不存在返回-1int Order:Judge(int receiptID)Order order50;readOrder(order);/调用Read()函数,获取数据,以便等下进行相关数据的判断int n=getLine();for(int i=0; in; i+)if(receiptID = orderi.receiptID)return i;/如果存在,返回其下标break;return -1;/否则,返回-1/添加订单void Order:addOrder(int re,string bu)ofstream outfile(Order.txt,ios:app);if(!outfile) cerr open errorendl; exit(1); outfileret;outfilebun;outfile.close();/删除订单void Order:deleteOrder(int receiptID)Order order50;readOrder(order);/定义一个l来接收Judge()的返回值,等下用来判断该num是否存在int l = Judge(receiptID);/如果l不等于-1, 表示要删除的订单信息存在if(l!=-1)int n=getLine();ofstream outfile(Order.txt);if(!outfile)cerr open errorendl; exit(1); for(int i=0; in; i+)/把下标不等于l(即除了要删的订单信息外)其余的数据重新写入磁盘保存if(i != l)outfileorderi.receiptIDt;outfileorderi.buyerIDendl;outfile.close();8. receipt.h#pragma once#include #include using namespace std;/行号类,存放一个int数组class returnLspublic:int l50;/发票类class Receiptpublic:Receipt();Receipt(int re,string bo,int nu);/构造函数int getBookLine();/获取Book.txt中的行数void readBook(string bookID, string bookName, string author, string publish, string price);/从Book.txt中读取数据放入数组中int getBuyerLine();/获取Buyer.txt的行数void readBuyer(string buyerID, string name, string address,string type);/从Buyer.txt中读取数据放入数组中void readOrder(string receiptID,string buyerIDs);/从Order.txt中,读取数据,放入数组中int getReceiptLine();/获取Receipt.txt的行数void readReceipt(Receipt receipt);/从Receipt.txt中读取数据放入Receipt对象数组中returnLs Judge(int receiptID);/判断Receipt.txt中是否存在用户要求的发票编号,如果存在,返回行号数组类void addReceipt();/添加发票void deleteReceipt();/删除发票void selectReceiptByRI();/根据订单号查找发票void selectReceiptByBI();/更具买家ID查找发票void print();/打印发票private:int receiptID;/发票编号string bookID;/图书编号int num;/购书数量double pay;/支付总金额;9. Receipt.cpp#include Receipt.h#include #include #include #include #include Book.h#include Buyer.h#include Order.husing namespace std;const int MAX = 50;Receipt:Receipt()receiptID=0;pay=0;/支付总金额/构造函数Receipt:Receipt(int re,string bo,int nu)receiptID=re;bookID=bo;num=nu;/获取Book.txt的行数intReceipt:getBookLine()ifstream in(Book.txt);string line;int n=0;while(getline(in,line)n+;in.close();return n;/从Book.txt中读取数据放入数组中void Receipt:readBook(string bookID, string bookName, string author, string publish, string price)ifstream infile(Book.txt,ios:in);if(!infile)cerr open errorendl;exit(1);for(int i=0; ibookIDibookNameiauthoripublishipricei;/只读取存放在数组中 但不对其进行相关操作infile.close();/获取Buyer.txt的行数int Receipt:getBuyerLine()ifstream in(Buyer.txt);string line;int n=0;while(getline(in,line)n+;in.close();return n;/从Buyer.txt中读取数据放入数组中void Receipt:readBuyer(string buyerID, string name, string address,string type)ifstream infile(Buyer.txt,ios:in|ios:binary);if(!infile)cerr open errorendl;exit(1);for(int i=0; ibuyerIDinameiaddressitypei;/只读取存放在数组中 但不对其进行相关操作infile.close();/从Order.txt中,读取数据,放入数组中void Receipt:readOrder(string receiptId,string buyerIDs)ifstream infile(Order.txt,ios:in|ios:binary);if(!infile)cerr open errorendl;exit(1);Order o;int n=o.getLine();for(int i=0;ireceiptIdibuyerIDsi;infile.close();/获取Receipt.txt的行数int Receipt:getReceiptLine()ifstream in(Receipt.txt);string line;int n=0;while(getline(in,line)n+;in.close();return n;/从Receipt.txt中读取数据放入Receipt对象数组中void Receipt:readReceipt(Receipt receipt)ifstream infile(Receipt.txt,ios:in|ios:binary);if(!infile)cerr open errorendl;exit(1);int n=getReceiptLine();for(int i=0;irebonu;int re2=atoi(re.c_str();receipti.receiptID=re2;receipti.bookID=bo;int nu2=atoi(nu.c_str();receipti.num=nu2;infile.close();/判断Receipt中是否存在用户要求的发票编号,如果存在,返回行号数组类returnLs Receipt:Judge(int receiptid)Receipt receiptMAX;returnLs ls;readReceipt(receipt);/调用Read()函数,获取数据,以便等下进行相关数据的判断int j=0;for(int i=0; i10; i+)int ri=receipti.receiptID;if(receiptid = ri)ls.lj=i;j+;return ls;/如果存在,返回其下标数组的类/添加发票void Receipt:addReceipt()string buyerID;string bookID;int num=0;/从Receipt.txt中读取数据放入Receipt对象数组中Receipt receiptMAX;readReceipt(receipt);int l=getReceiptLine();/获取行数receiptID=receiptl-1.receiptID;/将发票号的初值赋为Receipt.txt中最后一行的receiptID的值receiptID+;ofstream outfile(Receipt.txt,ios:app);if(!outfile) cerr open errorendl; exit(1); /获取买家IDcoutbuyerID;/将买家ID和订单编号写入Order.txt中Order order;order.addOrder(receiptID,buyerID);/将订单编号和书籍编号及数量存入Receipt.txt中cout请输入购买书籍编号及数量,当书籍编号为0时,停止录入bookID;/当用户输入0时跳出循环,停止录入if(bookID=0) break;cinnum;outfilereceiptIDt;outfilebookIDt;outfilenumendl;/关闭文件outfile.close();cout添加发票成功!endl;/删除发票void Receipt:deleteReceipt()/从Receipt.txt中读取数据放入Receipt对象数组中Receipt receiptMAX;readReceipt(receipt);coutreceiptID;/删除Order.txt中用户输入订单号的那行数据Order o;o.deleteOrder(receiptID);/获取用户所需订单号在Receipt.txt所在的行returnLs ls = Judge(receiptID);if(ls.l0=0)int n=getReceiptLine();ofstream outfile(Receipt.txt);if(!outfile)cerr open errorendl; exit(1); int j=0;for(int i=0; in; i+)/把下标不等于ls中的订单信息(即除了要删的订单信息外)其余的数据重新写入磁盘保存if(i != ls.lj)outfilereceipti.receiptIDt;outfilereceipti.bookIDt;outfilereceipti.numendl;elsej+;outfile.close();cout删除成功!endl;elsecout该数据库没有此订单!endl;/根据订单号查找发票void Receipt:selectReceiptByRI()/读取Receipt.txt中的内容Receipt receiptMAX;readReceipt(receipt);/读取Book.txt中的内容string bookIDMAX, bookNameMAX, authorMAX, publishMAX, priceMAX;readBook(bookID, bookName, author, publish, price);/读取Buyer.txt中的内容string buyerIDMAX, nameMAX, addressMAX,typeMAX;readBuyer(buyerID,name,address,type);/读取Order.txt中的内容string receiptIdMAX,buyerIDsMAX;readOrder(receiptId,buyerIDs);coutri;double discount=1;int x=0;Order o;int n=o.getLine();/循环Order.txt中的内容,匹配查找订单号与循环内容中的订单号相同,从而获得对应订单的买家IDfor(int i=0;in;i+)int rei=atoi(rec
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 《传感器与检测技术》练习题集
- 【初中物理】光的折射单元测试(培优卷)2024-2025学年苏科版物理八年级上册
- 2023年标准员之基础知识练习题(二)及答案
- 唐山-PEP-2024年11版小学三年级英语第1单元真题
- 2024年07版小学5年级上册英语第二单元期末试卷
- 收纳箱生产企业的账务处理-记账实操
- 中建信息化管理手册
- 强化研究-团结协作-共创佳绩
- 经济数学 课件 ch01 函数、极限及其应用
- 2024年高考语文二轮复习:语言的表达效果类新题型(练习)(解析版)
- 大学生职业规划-教师职业规划书范文
- 三国演义第三回读后感100字 三国演义第三回读后感1000字以上(三篇)
- 双阳区巡游出租汽车驾驶员从业资格考试区域科目考试题库
- 口腔修复学名解及案例分析题
- 制糖工艺基础知识及煮糖技术(上课)
- 企业法人委托书模板
- FZ/T 64078-2019熔喷法非织造布
- 高三英语一轮复习读后续写导学案
- 如何看懂体检报告
- 《民航英语口语》课程标准
- 2023年陕西投资集团有限公司校园招聘笔试题库及答案解析
评论
0/150
提交评论