C++模擬網上購書的結賬功能程序設計源碼_第1頁
C++模擬網上購書的結賬功能程序設計源碼_第2頁
C++模擬網上購書的結賬功能程序設計源碼_第3頁
C++模擬網上購書的結賬功能程序設計源碼_第4頁
C++模擬網上購書的結賬功能程序設計源碼_第5頁
已閱讀5頁,還剩30頁未讀 繼續免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

1、 成績: 課 程 設 計設計課程名稱: 面向對象程序設計C+ 題 目: 模擬網上購書的結賬功能 學 號: 學 生 姓 名 : 專 業 班 級: 指 導 教 師: 設計時間: 年 月 日 年 月 日模擬網上購書的結帳功能一、 課程設計目的本課程設計是計算機專業重要的實踐性環節之一,是在學習完面向對象程序設計語言(C+)課程后進行的一次全面的綜合練習。本課程設計的目的和任務:1. 鞏固和加深學生對C+語言課程的基本知識的理解和掌握2. 掌握C+語言編程和程序調試的基本技能3. 利用C+語言進行面向對象的軟件設計方法4. 掌握書寫程序設計說明文檔的能力5. 提高運用C+語言解決實際問題的能力二、 需

2、求分析用C+語言完成一個模擬網上購書結賬功能,數據保存在文件中。C+語言全面兼容C語言,它比C語言更加安全、可讀性更好、代碼結構更合理。所以C+是的該程序開發更加容易。模擬網上購書結賬功能可以方便賣書人員更加快速地獲取并充分了解自己銷售書籍的訂單信息,十分有用。模擬網上購書系統需要實現的功能:(1)發票信息錄入;(2)發票信息刪除;(3)根據發票號查詢發票信息;(4)根據買家ID查詢發票信息;(5)顯示所有發票信息。 三、 總體設計1. 模擬網上購書系統功能總體設計如下:模擬網上購書系統顯示所有發票信息根據買家ID查詢發票信息根據發票號查詢發票信息發票信息刪除發票信息錄入圖3.1 功能模塊圖2

3、. 數據存儲在文件中 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(st

4、ring 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);/構造函

5、數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

6、,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

7、: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;

8、/發票號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中讀取數據放入數組中

9、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對象

10、數組中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;/支付總金額;五、 系統實現與系統調

11、試1、登入模擬網上購書系統,看到歡迎界面,用戶可根據主界面提示的操作,輸入1-5任一編號,選擇所需操作。 2、發票信息錄入,先輸入買家ID,再輸入所需的書籍編號和數量(可輸入多本書籍編號和數量,輸入書籍編號為0時停止錄入),錄入完成可選擇再錄入信息或返回上級目錄或退出。3、輸入發票號,選擇刪除訂單。若存在訂單號,則顯示刪除成功;若不存在顯示數據庫中沒有此訂單,完成該操作可選擇再刪除信息或返回上級目錄或退出。4、根據發票號查找發票信息,用戶輸入發票號,若存在該發票號則顯示發票信息,若不存在顯示不存在該訂單。操作完成后可選擇繼續查詢發票信息或返回上級目錄,或退出。5、根據買家ID查找發票信息,用戶

12、輸入買家ID,若存在顯示該買家的所有發票信息;6、若不存在顯示該賣家沒有。操作完成后可選擇繼續查詢發票信息或返回上級目錄,或退出。7、打印所有發票信息,操作結束后可選擇返回上級目錄或退出系統。六、 軟件使用說明1、 登入模擬網上購書系統,看到歡迎界面,用戶可根據主界面提示的操作,輸入1-5任一編號(輸入0,退出),選擇所需操作。2、 輸入1,可進行發票信息錄入錄入。先輸入買家ID,再輸入所需的書籍編號和數量(可輸入多本書籍編號和數量,輸入書籍編號為0時停止錄入),錄入完成可輸入1選擇再錄入信息,輸入2返回上級目錄,輸入0退出。3、 輸入2,可進行發票號信息刪除。輸入發票號,若存在訂單號,則顯示

13、刪除成功;若不存在顯示數據庫中沒有此訂單,完成該操作可輸入1選擇再刪除發票信息,輸入2返回上級目錄,輸入0退出。4、 輸入3,可進行根據發票號查找發票信息。輸入發票號,若存在該發票號則顯示發票信息,若不存在顯示不存在該訂單。操作完成后可輸入1選擇根據發票號查找發票信息,輸入2選擇根據買家ID查找發票信息,輸入3返回上級目錄,輸入0退出。5、 輸入4,可進行根據買家ID查找發票信息。輸入買家ID,若存在顯示買家所有發票信息,若不存在買家沒有訂單。操作完成后可輸入1選擇根據發票號查找發票信息,輸入2選擇根據買家ID查找發票信息,輸入3返回上級目錄,輸入0退出。七、 課程設計心得與體會這次實訓讓我對

14、本學期所學的C+進行有了更深一步的了解,并可以使用C+初步完成一個簡單的系統。訓練了我綜合運用所學習的各項知識,完成此系統的操作。實訓過程中,我遇到了很多問題,例如C+中string和int類型之間的轉換,如何返回int數組等問題,但通過上網搜索或詢問老師同學以后都得到了解決,也掌握了這些方法。在設計網上模擬購書系統的過程中,我使用的是文件存儲數據,所以在調用的時候要考慮很多循環和關聯,這鍛煉了我的思維模式。這些都讓我獲益匪淺。在這個過程中,我進一步鞏固了所學習的知識,同時了解到自己還有很多沒學到的知識,學無止境,在以后的日子中,我一定的更加嚴格要求自己,積極進取,奮發向上,不斷努力發展自己。

15、這次的系統設計讓我學會了綜合運用C+所學的知識,對我今后對使用C+語言編程開發有著重要的作用。附錄1.Book.h#pragma once#include<iostream>#include<string>using namespace std;class Bookpublic:Book();Book(string bi, string bn, string au, string pu, double pr);/構造函數void display();/顯示函數private:string bookID;/編號string bookName;/書名string autho

16、r;/作者string publish;/出版社double price;/價格;2. Book.cpp#include "Book.h"#include <iostream>#include <iomanip>#include <fstream>#include <string>using namespace std;Book:Book()bookID=""bookName=""author=""publish=""price=0;Book:Bo

17、ok(string bi, string bn, string au, string pu, double pr)bookID=bi;bookName=bn;author=au;publish=pu;price=pr;void Book:display()cout<<"書號:"<<bookID<<"t"cout<<"書名:"<<bookName<<"t"cout<<"作者:"<<author<&

18、lt;"t"cout<<"出版社:"<<publish<<"t"cout<<"價格:"<<price<<"t"3.Buyer.h#pragma once#include<string>using namespace std;/購書者類class Buyerpublic:Buyer();Buyer(string id,string na,string ad);/構造函數virtual void display();

19、/顯示函數(虛函數)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;voi

20、d 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 <iostream>#include <iomanip>#incl

21、ude <fstream>#include <string>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.

22、close();return n;void Buyer:display()cout<<"買家信息:"cout<<"ID:"<<buyerID<<"t"cout<<"姓名:"<<name<<"t"cout<<"地址:"<<address<<"n"void People:display()Buyer:display();cout<<

23、;"該買家是普通人,無折扣率。"<<"n"void Member:display()Buyer:display();cout<<"該買家是會員,折扣率為 "<<discount_member*10<<"折!n"void Vip:display()Buyer:display();cout<<"該買家是貴賓,折扣率為 "<<discount_vip*10<<"折!n"5. Buyer.cpp#in

24、clude "Buyer.h"#include <iostream>#include <iomanip>#include <fstream>#include <string>using namespace std;Buyer:Buyer()buyerID=""name=""address=""Buyer:Buyer(string id,string na,string ad)name=na;buyerID=id;address=ad;int getLine()ifst

25、ream in("Buyer.txt");string line;int n=0;while(getline(in,line)n+;in.close();return n;void Buyer:display()cout<<"買家信息:"cout<<"ID:"<<buyerID<<"t"cout<<"姓名:"<<name<<"t"cout<<"地址:"<&

26、lt;address<<"n"void People:display()Buyer:display();cout<<"該買家是普通人,無折扣率。"<<"n"void Member:display()Buyer:display();cout<<"該買家是會員,折扣率為 "<<discount_member*10<<"折!n"void Vip:display()Buyer:display();cout<<"

27、該買家是貴賓,折扣率為 "<<discount_vip*10<<"折!n"6. Orde.h#pragma once#include<iostream>using 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);/判斷Orde

28、r.txt中是否存在該訂單號,若存在返回該訂單的行號,不存在返回-1void addOrder(int receiptID,string buyerID);/添加訂單信息void deleteOrder(int receiptID);/刪除訂單信息private:int receiptID;/發票編號string buyerID;/會員編號;7. Orde.cpp#include "Order.h"#include <iostream>#include <iomanip>#include <fstream>#include <str

29、ing>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(Orde

30、r o)ifstream infile("Order.txt",ios:in|ios:binary);if(!infile)cerr<<" open error"<<endl;exit(1);int n=getLine();for(int i=0;i<n;i+) /只讀取存放在數組中 但不對其進行相關操作string re,bu;infile>>re>>bu;int re2=atoi(re.c_str();oi.receiptID=re2;oi.buyerID=bu;infile.close();/判

31、斷Order.txt中是否存在該訂單號,若存在返回該訂單的行號,不存在返回-1int Order:Judge(int receiptID)Order order50;readOrder(order);/調用Read()函數,獲取數據,以便等下進行相關數據的判斷int n=getLine();for(int i=0; i<n; i+)if(receiptID = orderi.receiptID)return i;/如果存在,返回其下標break;return -1;/否則,返回-1/添加訂單void Order:addOrder(int re,string bu)ofstream out

32、file("Order.txt",ios:app);if(!outfile) cerr<<" open error"<<endl; exit(1); outfile<<re<<"t"outfile<<bu<<"n"outfile.close();/刪除訂單void Order:deleteOrder(int receiptID)Order order50;readOrder(order);/定義一個l來接收Judge()的返回值,等下用來判斷該

33、num是否存在int l = Judge(receiptID);/如果l不等于-1, 表示要刪除的訂單信息存在if(l!=-1)int n=getLine();ofstream outfile("Order.txt");if(!outfile)cerr<<" open error"<<endl; exit(1); for(int i=0; i<n; i+)/把下標不等于l(即除了要刪的訂單信息外)其余的數據重新寫入磁盤保存if(i != l)outfile<<orderi.receiptID<<&qu

34、ot;t"outfile<<orderi.buyerID<<endl;outfile.close();8. receipt.h#pragma once#include <iostream>#include <string>using namespace std;/行號類,存放一個int數組class returnLspublic:int l50;/發票類class Receiptpublic:Receipt();Receipt(int re,string bo,int nu);/構造函數int getBookLine();/獲取Book

35、.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);/從Ord

36、er.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(

37、);/更具買家ID查找發票void print();/打印發票private:int receiptID;/發票編號string bookID;/圖書編號int num;/購書數量double pay;/支付總金額;9. Receipt.cpp#include "Receipt.h"#include <iostream>#include <iomanip>#include <fstream>#include <string>#include "Book.h"#include "Buyer.h&qu

38、ot;#include "Order.h"using 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)

39、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 error"<<endl;exit(1);for(int i=0; i<5; i+)infile>>bookIDi&g

40、t;>bookNamei>>authori>>publishi>>pricei;/只讀取存放在數組中 但不對其進行相關操作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, st

41、ring name, string address,string type)ifstream infile("Buyer.txt",ios:in|ios:binary);if(!infile)cerr<<" open error"<<endl;exit(1);for(int i=0; i<5; i+)infile>>buyerIDi>>namei>>addressi>>typei;/只讀取存放在數組中 但不對其進行相關操作infile.close();/從Order.txt中,

42、讀取數據,放入數組中void Receipt:readOrder(string receiptId,string buyerIDs)ifstream infile("Order.txt",ios:in|ios:binary);if(!infile)cerr<<" open error"<<endl;exit(1);Order o;int n=o.getLine();for(int i=0;i<n;i+) /只讀取存放在數組中 但不對其進行相關操作infile>>receiptIdi>>buyerIDs

43、i;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(!

44、infile)cerr<<" open error"<<endl;exit(1);int n=getReceiptLine();for(int i=0;i<n;i+) /只讀取存放在數組中 但不對其進行相關操作string re,bu,bo,nu;infile>>re>>bo>>nu;int re2=atoi(re.c_str();receipti.receiptID=re2;receipti.bookID=bo;int nu2=atoi(nu.c_str();receipti.num=nu2;infile.

45、close();/判斷Receipt中是否存在用戶要求的發票編號,如果存在,返回行號數組類returnLs Receipt:Judge(int receiptid)Receipt receiptMAX;returnLs ls;readReceipt(receipt);/調用Read()函數,獲取數據,以便等下進行相關數據的判斷int j=0;for(int i=0; i<10; i+)int ri=receipti.receiptID;if(receiptid = ri)ls.lj=i;j+;return ls;/如果存在,返回其下標數組的類/添加發票void Receipt:addRe

46、ceipt()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<<

47、;" open error"<<endl; exit(1); /獲取買家IDcout<<"請輸入買家ID:"cin>>buyerID;/將買家ID和訂單編號寫入Order.txt中Order order;order.addOrder(receiptID,buyerID);/將訂單編號和書籍編號及數量存入Receipt.txt中cout<<"請輸入購買書籍編號及數量,當書籍編號為0時,停止錄入"<<endl;while(bookID!="0")int i=0

48、;cin>>bookID;/當用戶輸入0時跳出循環,停止錄入if(bookID="0") break;cin>>num;outfile<<receiptID<<"t"outfile<<bookID<<"t"outfile<<num<<endl;/關閉文件outfile.close();cout<<"添加發票成功!"<<endl;/刪除發票void Receipt:deleteReceipt()/從

49、Receipt.txt中讀取數據放入Receipt對象數組中Receipt receiptMAX;readReceipt(receipt);cout<<"請輸入你要刪除的訂單的發票編號:"cin>>receiptID;/刪除Order.txt中用戶輸入訂單號的那行數據Order o;o.deleteOrder(receiptID);/獲取用戶所需訂單號在Receipt.txt所在的行returnLs ls = Judge(receiptID);if(ls.l0>=0)int n=getReceiptLine();ofstream outfile

50、("Receipt.txt");if(!outfile)cerr<<" open error"<<endl; exit(1); int j=0;for(int i=0; i<n; i+)/把下標不等于ls中的訂單信息(即除了要刪的訂單信息外)其余的數據重新寫入磁盤保存if(i != ls.lj)outfile<<receipti.receiptID<<"t"outfile<<receipti.bookID<<"t"outfile<&

51、lt;receipti.num<<endl;elsej+;outfile.close();cout<<"刪除成功!"<<endl;elsecout<<"該數據庫沒有此訂單!"<<endl;/根據訂單號查找發票void Receipt:selectReceiptByRI()/讀取Receipt.txt中的內容Receipt receiptMAX;readReceipt(receipt);/讀取Book.txt中的內容string bookIDMAX, bookNameMAX, authorMAX,

52、 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);cout<<"請輸入所需查找發票的編號:"int ri=0;cin

53、>>ri;double discount=1;int x=0;Order o;int n=o.getLine();/循環Order.txt中的內容,匹配查找訂單號與循環內容中的訂單號相同,從而獲得對應訂單的買家IDfor(int i=0;i<n;i+)int rei=atoi(receiptIdi.c_str();if(ri=rei)x+;cout<<endl<<"發票編號:"<<ri<<endl;/循環Buyer.txt中的內容,匹配查找訂單號的買家ID與循環體中的買家ID相同,輸出買家信息int n1=getBuyerLine();for(int k=0;k<n1;k+)if(buyerIDsi=buyerIDk)/判斷買家身份,獲取折扣if(typek="0")People p(buyerIDk,namek,addressk);p.display();else if(typek="1")Member m(buyerIDk,namek,addressk,0

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經權益所有人同意不得將文件中的內容挪作商業或盈利用途。
  • 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
  • 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

最新文檔

評論

0/150

提交評論