C++雜志訂閱管理系統--精選文檔_第1頁
C++雜志訂閱管理系統--精選文檔_第2頁
已閱讀5頁,還剩9頁未讀 繼續免費閱讀

下載本文檔

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

文檔簡介

1、#include<iostream> /數據流輸入輸出#include<string>/字符串操作#include<fstream>/文件輸入輸出#include<time.h>/時間庫函數#include<iomanip>/輸入輸出格式符using namespace std;/命名空間int year,month;/*888888888888888888888888888888888888888888888888888888888888888888888888888*/class Order_inforstring name; /

2、用戶姓名string sex; /用戶性別string addr; /用戶地址string tel; /用戶號碼string mage; /雜志單位float price; /雜志單價int num; /訂閱數目int y,m; /訂閱限期int g;public:Order_infor* head; /信息類頭指針Order_infor* next; /信息類next域 void input(); /錄入函數 void input(ifstream & infile); /讀取函數 void output(); /輸出函數 void output(ofstream & out

3、file); /寫入函數float getprice();int getnum();int getyear(); /獲取期限時間函數int getmonth();string getname();void order(); /錄入信息void mend(); /修改信息void del_select();void del1(); /刪除信息void del2();void found();Order_infor*find(string n); bool find(int y,int m);void statistic();void show(); /顯示信息bool comp(int y,in

4、t m); /判斷當前訂閱狀況函數 void save(); /保存信息 void begin(); /初始信息 void clear(); /清除函數 void setg(int k) g=k; /設置系統修改標志int getg() return g; /返回系統修改標志d;/*888888888888888888888888888888888888888888888888888888888888888888888888888*/float Order_infor:getprice()return price;int Order_infor:getnum()return num;int O

5、rder_infor:getyear()return y;int Order_infor:getmonth()return m;string Order_infor:getname()return name;/*888888888888888888888888888888888888888888888888888888888888888888888888*/class Menu public:void about(); /關于 void mainmenu(); /主菜單函數bool land(); /管理員登陸;/*888888888888888888888888888888888888888

6、888888888888888888888888888888888*/void Menu:about()cout<<""<<endl <<"t1."<<endl <<"t2."<<endl <<"t3."<<endl <<"t4."<<endl; cout<<""<<endl;/*888888888888888888888888888

7、88888888888888888888888888888888888888888888888*/bool Menu:land()Menu b; /定義菜單類對象 b.about(); /輸出系統說明string s; int i=0; /計數變量cout<<"請輸入管理員密碼:"<<endl; /輸出提示信息while(1)cin>>s;if(s="123456") /輸入正確return true; /返回正確else /輸錯了 cout<<"輸入密碼錯誤,請重新輸入:" /輸出提示

8、信息 i+; /計數變量自加 if(i>=3) /連輸三次錯誤 break; /跳出循環cout<<"輸入錯誤三次!系統自動退出!"<<endl; /提示將退出登錄system("pause"); /顯示暫停return false; /返回錯誤/*888888888888888888888888888888888888888888888888888888888888888888888888888*/void Menu:mainmenu() system("cls");string s; cout<

9、<"*"<<endl; cout<<" 歡迎使用雜志訂閱管理軟件 "<<endl; cout<<"*"<<endl; cout<<"tt0.退出程序 4.瀏覽訂閱用戶"<<endl;cout<<"tt1.增加新訂戶 5.查找用戶信息"<<endl;cout<<"tt2.刪除用戶 6.修改用戶信息"<<endl;cout<<&qu

10、ot;tt3.統計本期雜志訂戶數 7.保存信息 "<<endl;cout<<"請輸入功能按鈕:"cin>>s;switch(s0)case'1':d.order();break;case'2':d.del_select();break;case'3':d.statistic();break;case'4':d.show();break;case'5':d.found();break;case'6':d.mend();break;cas

11、e'7':d.save();break;default:return;/*888888888888888888888888888888888888888888888888888888888888888888888888888*/void Order_infor:input()cout<<"請輸入姓名: " while(1)cin>>name; /輸入姓名if (cin.fail() /判斷輸入的數據類型是否有錯cout <<"n姓名輸入錯誤,請重新輸入:"cin.clear(); /清除錯誤狀態cin.

12、get(); /重輸else break; /輸入正確則跳出循環cout<<"請輸入性別: " while(1)cin>>sex; /輸入性別if (cin.fail() /判斷輸入的數據類型是否有錯cout <<"n性別輸入錯誤,請重新輸入:"cin.clear(); /清除錯誤狀態cin.get(); /重輸else break; /輸入正確則跳出循環cout<<"請輸入地址: " /設置地址while(1)cin>>addr; /輸入地址if (cin.fail() /

13、判斷輸入的數據類型是否有錯cout <<"n地址輸入錯誤,請重新輸入:"cin.clear(); /清除錯誤狀態cin.get(); /重輸else break; /輸入正確則跳出循環cout<<"請輸入電話號碼: " /設置電話號碼while(1)cin>>tel; /輸入電話號碼if (cin.fail() /判斷輸入的數據類型是否有錯cout <<"n號碼輸入錯誤,請重新輸入:"cin.clear(); /清除錯誤狀態cin.get(); /重輸else break; /輸入正確則

14、跳出循環cout<<"請輸入雜志單位: " /設置雜志單位while(1)cin>>mage; /輸入雜志單位if (cin.fail() /判斷輸入的數據類型是否有錯cout <<"n雜志單位輸入錯誤,請重新輸入:"cin.clear(); /清除錯誤狀態cin.get(); /重輸else break; /輸入正確則跳出循環cout<<"請輸入單價: " /設置單價while(1)cin>>price; /輸入單價if (cin.fail() /判斷輸入的數據類型是否有錯

15、cout <<"n單價輸入錯誤,請重新輸入:"cin.clear(); /清除錯誤狀態cin.get(); /重輸else break; /輸入正確則跳出循環cout<<"請輸入訂閱數: " /設置訂閱數while(1)cin>>num; /輸入訂閱數if (cin.fail() /判斷輸入的數據類型是否有錯cout <<"n訂閱數輸入錯誤,請重新輸入:"cin.clear(); /清除錯誤狀態cin.get(); /重輸else break; /輸入正確則跳出循環cout<<

16、;"請輸入訂閱限期(年 月): " /設置期限while(1)cin>>y>>m; /輸入期限if (cin.fail() /判斷輸入的數據類型是否有錯cout <<"n訂閱限期輸入錯誤,請重新輸入:"cin.clear(); /清除錯誤狀態cin.get(); /重輸else break; /輸入正確則跳出循環/*888888888888888888888888888888888888888888888888888888888888888888888888888*/void Order_infor:input(ifs

17、tream & infile) /帶參錄入函數向鏈表輸入 infile>>name>>sex>>addr>>tel>>mage>>price>>num>>y>>m; /輸入至鏈表 /*888888888888888888888888888888888888888888888888888888888888888888888888888*/void Order_infor:output() /信息輸出函數向顯示屏輸出cout<<setw(8)<<name<

18、;<setw(4)<<sex<<setw(10)<<addr<<setw(13)<<tel<<setw(10)<<mage<<setw(6)<<price<<setw(4)<<num<<setw(2)<<y<<"/"<<m<<endl; /*8888888888888888888888888888888888888888888888888888888888888888888888

19、88888*/void Order_infor:output(ofstream & outfile) /向文件輸出信息 outfile<<setw(10)<<name /setw()設置輸出寬度 <<setw(10)<<sex <<setw(10)<<addr <<setw(12)<<tel <<setw(10)<<mage <<setw(10)<<price <<setw(10)<<num <<setw(1

20、0)<<y <<setw(10)<<m <<endl;/*888888888888888888888888888888888888888888888888888888888888888888888888888*/bool Order_infor:comp(int y,int m) /判斷是否超期if(year>y|(year=y&&month>m)/先比較年,若一樣則比較月return true; /比較當前時間與限期,獲得訂閱的當前狀況,返回表示訂閱超期elsereturn false; /返回表示訂閱未超期/*88

21、8888888888888888888888888888888888888888888888888888888888888888888888888*/void Order_infor:order() /向鏈表尾部錄入訂閱信息 system("cls"); /清屏 Order_infor *p1,*p2=NULL; /定義對象指針p1=head; /將頭指針賦給p1int n=1; /定義循環控制變量while(p1->next) /當頭結點后有數據時執行循環,頭結點為空也不會執行循環p1=p1->next; /使p能夠指向未存放數據的內存,錄入信息會存放在所有信

22、息之后while(n) /此循環執行在鏈表尾部插入錄入的信息 /通過循環不斷開辟新空間錄入新的數據p2=new Order_infor; /開辟存儲空間,返回地址給p2p2->input(); /調用錄入函數,為p2所指結點數據賦值p1->next=p2; /p1的next指向新開辟空間,連接了p1和p2p2->next=NULL; /p2的next變為空指針p1=p1->next; /p1指向新開辟的空間,p1緊隨p2之后 Order_infor:setg(1); /標記為修改cout<<"ttt按1繼續,按0返回: " /控制變量控制

23、循環cin>>n; /輸入n/*888888888888888888888888888888888888888888888888888888888888888888888888888*/void Order_infor:show()system("cls"); /清屏cout.setf(ios:left);cout<<"訂閱基本信息如下:"<<endl /顯示所有訂閱信息<<setw(8)<<"姓名"<<setw(8)<<"性別"&

24、lt;<setw(8)<<"地址"<<setw(13)<<"電話"<<setw(8)<<"單位"<<setw(8)<<"單價"<<setw(8)<<"定閱數"<<setw(8)<<"期限"<<endl;Order_infor *p; /定義訂閱信息類對象指針p=head; /指向鏈表頭部,啟用鏈表信息while(p->ne

25、xt) /只要下一結點不為空則執行循環 /此循環功能在于輸出所有訂閱信息p=p->next; /P指向下一節點 cout<<setw(8)<<p->name<<setw(8)<<p->sex<<setw(8)<<p->addr<<setw(13)<<p->tel<<setw(8)<<p->mage<<setw(8)<<p->price<<setw(8)<<p->num<<

26、;setw(4)<<p->y<<"/"<<p->m<<endl; /調用next所指對象的輸出信息函數,頭結點未存放數據只是初始化了next/*888888888888888888888888888888888888888888888888888888888888888888888888888*/void Order_infor:found() system("cls"); /清屏string n; /定義輔助變量cout<<"輸入姓名: " /輸出提示信息cin

27、>>n; /輸入選擇if(!find(n) /調用find函數查找cout<<"tt找不到你要查找的內容!"<<endl; /找不到的話輸出相應提示信息return; /函數調用結束/*888888888888888888888888888888888888888888888888888888888888888888888888888*/Order_infor* Order_infor:find(string n)system("cls"); /清屏Order_infor *p; /定義輔助指針p=head; /指向鏈

28、表頭結點while(p->next) /當鏈表未至尾部時執行循環if( (p->next)->getname()=n ) /班次匹配上則輸出所查到的訂閱信息cout.setf(ios:left);cout<<"訂閱基本信息如下:"<<endl /輸出信息 << "姓名 性別 地址 電話 單位 單價 定閱數 期限"<<endl; (p->next)->output(); /調用輸出函數return p; /表示找到,返回的是目標結點的前一結點p=p->next; /指向下一

29、節點return NULL;/*888888888888888888888888888888888888888888888888888888888888888888888888888*/void Order_infor:mend() /修改函數 system("cls"); /清屏Order_infor *p; /定義信息類指針變量string n;cout<<"ttt輸入姓名方便查找: " /輸出提示信息cin>>n;p=find(n); /調用查找函數if(!p) /判斷是否找到cout<<"tt找不到你

30、要修改的內容!請利用程序查詢功能確認!"<<endl; /輸出提示信息return; /函數調用結束(p->next)->input(); /調用錄入函數對目標結點數據再錄入 Order_infor:setg(1);/*888888888888888888888888888888888888888888888888888888888888888888888888888*/void Order_infor:del_select()cout<<"請選擇刪除選項:"<<endl;cout<<"1.刪除

31、過期用戶;2.刪除指定用戶"<<endl;int c;cin>>c;switch(c)case 1:d.del2();break;case 2:d.del1();break;default:cout<<"輸入錯誤!"/*888888888888888888888888888888888888888888888888888888888888888888888888888*/void Order_infor:del1() /刪除車輛信息函數 system("cls"); /清屏Order_infor *p1,*p

32、2,*p3; /定義兩對象指針用于鏈表操作string n; cout<<"ttt輸入姓名: " /輸出提示信息cin>>n;p1=find(n); /調用查找函數if(!p1) /判斷函數返回值是否為NULL cout<<"tt找不到你要刪除的內容!"<<endl; /輸出沒找到的提示return; /函數調用結束cout<<"nttt確定刪除(y/n)?" /顯示將要刪除數據信息供用戶核對char a;cin>>a; /輸入指示if(a='y'

33、|a='Y') /因為頭結點為空僅有next域所以只要考慮被刪結點是中間結點和尾結點情況if(p1->next)->next=NULL) /目標結點為尾結點時 p2=p1->next; /p2指向目標結點p1->next=NULL; /p1連接目標結點的next域重新賦值為空指針delete p2; /釋放目標空間else /目標結點為中間節點時p2=p1->next; /p2指向目標結點p3=(p1->next)->next; /p3指向目標結點下一結點 p1->next=p3; /連接目標結點前后結點delete p2; /釋

34、放目標結點Order_infor:setg(1); /標記為修改/*888888888888888888888888888888888888888888888888888888888888888888888888888*/void Order_infor:del2() system("cls"); /清屏Order_infor *p1,*p2,*p3; /定義兩對象指針用于鏈表操作int n;char c; p1=head;while(p1->next)n=p(p1->next)->y,(p1->next)->m);if(n) system(&

35、quot;cls");cout<<"訂閱基本信息如下:"<<endl /輸出信息 << "姓名 性別 地址 電話 單位 單價 定閱數 期限"<<endl;(p1->next)->output(); cout<<"是否刪除(y/n)" cin>>c;if(c='y'|c='Y') /因為頭結點為空僅有next域所以只要考慮被刪結點是中間結點和尾結點情況 if(p1->next)->next=NULL)

36、 /目標結點為尾結點時 p2=p1->next; /p2指向目標結點 p1->next=NULL; /p1連接目標結點的next域重新賦值為空指針 delete p2; /釋放目標空間return; else /目標結點為中間節點時 p2=p1->next; /p2指向目標結點 p3=(p1->next)->next; /p3指向目標結點下一結點 p1->next=p3; /連接目標結點前后結點 delete p2; /釋放目標結點 Order_infor:setg(1); /標記為修改 p1=p1->next;/*888888888888888888

37、888888888888888888888888888888888888888888888888888888888*/void Order_infor:statistic()Order_infor *p;int n=0;int sum=0; p=head;cout<<"本期訂閱信息"<<endl;cout<<"用戶名 訂閱數 單價 全額"<<endl;while(p->next)cout<<(p->next)->getname()<<"t"<<

溫馨提示

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

評論

0/150

提交評論