c++收支管理和猜單詞游戲課程設(shè)計(jì)報(bào)告(完整版)_第1頁
c++收支管理和猜單詞游戲課程設(shè)計(jì)報(bào)告(完整版)_第2頁
c++收支管理和猜單詞游戲課程設(shè)計(jì)報(bào)告(完整版)_第3頁
c++收支管理和猜單詞游戲課程設(shè)計(jì)報(bào)告(完整版)_第4頁
c++收支管理和猜單詞游戲課程設(shè)計(jì)報(bào)告(完整版)_第5頁
已閱讀5頁,還剩152頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡介

c++收支管理和猜單詞游戲課程設(shè)計(jì)報(bào)告(完整版)(文檔可以直接使用,也可根據(jù)實(shí)際需要修改使用,可編輯歡迎下載)

c++收支管理和猜單詞游戲課程設(shè)計(jì)報(bào)告(完整版)(文檔可以直接使用,也可根據(jù)實(shí)際需要修改使用,可編輯歡迎下載)VC++課程設(shè)計(jì)報(bào)告課程:VC++課程設(shè)計(jì)系別:計(jì)算機(jī)科學(xué)與計(jì)算機(jī)學(xué)院班級:9121068406學(xué)號:姓名:選題1名稱:猜單詞游戲選題1難易級別:B級選題2名稱:個(gè)人財(cái)政支出管理(單向鏈表)選題2難易級別:A級自報(bào)成績良起止時(shí)間:指導(dǎo)教師:日期:2021年12月13日目錄課題1目標(biāo)1.1程序功能簡介1.2課程設(shè)計(jì)要求1.3評定難易級別課題1具體實(shí)現(xiàn)2.1程序總體方案2.1.1開發(fā)平臺2.1.2程序結(jié)構(gòu)或流程圖2.2所做改進(jìn)課題1調(diào)試報(bào)告課題2目標(biāo)1.1程序功能簡介1.2課程設(shè)計(jì)要求1.3評定難易級別課題2具體實(shí)現(xiàn)2.1程序總體方案2.1.1開發(fā)平臺2.1.2程序結(jié)構(gòu)或流程圖2.2所做改進(jìn)課題2調(diào)試報(bào)告總體小結(jié)分工介紹一、課題1目標(biāo)1.1程序功能簡介一個(gè)猜單詞游戲。兩人游戲時(shí),由一個(gè)玩家給出一個(gè)單詞,在人與計(jì)算機(jī)游戲時(shí),由計(jì)算機(jī)給出一個(gè)單詞,另一個(gè)玩家根據(jù)組成單詞的字母個(gè)數(shù)猜出單詞,猜的次數(shù)可以指定,若猜不中,顯示一個(gè)上吊人形。1.2課程設(shè)計(jì)要求(對應(yīng)后面的改進(jìn))(1)將猜單詞的函數(shù)與相應(yīng)的數(shù)據(jù)封裝到類中,并改寫主程序,使程序簡化。(2)根據(jù)所猜單詞中的字母個(gè)數(shù),給出指定幾率的提示字母,顯示于單詞的正確位置。(3)在進(jìn)入猜單詞的過程中,首先顯示菜單詢問是開始猜單詞還是修改設(shè)置,默認(rèn)的修改次數(shù)為4,默認(rèn)顯示字符幾率為20%。若要修改這個(gè)設(shè)置,在顯示菜單中選擇設(shè)置選項(xiàng)進(jìn)行修改。(4)在人人對抗時(shí),一個(gè)玩家給出單詞時(shí),單詞不顯示在屏幕上,字符用“*”號顯示。(5)猜單詞時(shí),輸入一個(gè)單詞,判斷函數(shù)改為判斷輸入單詞的字符是否與所猜單詞一一對應(yīng),將猜中的字符顯示出來。(6)在人機(jī)對抗時(shí),可以選擇隨機(jī)讀取單詞,也可以選擇向單詞庫輸入單詞,同時(shí),將單詞庫中單詞的個(gè)數(shù)顯示出來,并根據(jù)單詞庫中單詞個(gè)數(shù)的多少決定隨機(jī)選取的范圍。1.3評定難易級別A級二、課題1具體實(shí)現(xiàn)2.1程序總體方案2.1.1開發(fā)平臺操作系統(tǒng):Windows7開發(fā)工具:VC++6.02.1.2程序結(jié)構(gòu)或流程圖(1)主函數(shù)的流程圖:開始開始定義類的對象定義類的對象調(diào)用函數(shù)調(diào)用函數(shù)instruction()調(diào)用函數(shù)調(diào)用函數(shù)GetChoice()調(diào)用函數(shù)subMenu()P調(diào)用函數(shù)subMenu()Play()選擇1調(diào)用函數(shù)subMenu()調(diào)用函數(shù)subMenu()Play()選擇2選擇3選擇3輸出“輸出“再見”結(jié)束結(jié)束(2)子函數(shù)(usergame(inti))的流程圖:開始開始第二名玩家輸入 第二名玩家輸入玩家輸入字母玩家輸入字母 N調(diào)用函數(shù)drawman()lchosen(調(diào)用函數(shù)drawman()lchosen()和test()是否全部猜出結(jié)束結(jié)束(3)子函數(shù)(compgame(inti))的流程圖:開始開始從txt中隨機(jī)選詞 從txt中隨機(jī)選詞玩家輸入字母玩家輸入字母 N調(diào)用函數(shù)drawman()lchosen(調(diào)用函數(shù)drawman()lchosen()和test()是否全部猜出結(jié)束結(jié)束2.2所做改進(jìn)(根據(jù)書上課程設(shè)計(jì)要求所做改進(jìn))2.2.1改進(jìn)一2.2.1.1改進(jìn)方案將人人對抗和人機(jī)對抗,接收單詞輸入、顯示猜單詞結(jié)果及判斷是否猜中的函數(shù)已經(jīng)相應(yīng)的數(shù)據(jù)封裝到CGuess類中,使程序簡化。2.2.1.2具體實(shí)現(xiàn)classCGuess{ stringWord;//欲猜單詞 doubleProba;//顯示字符的頻率 intGuessNum;//可猜次數(shù) intWrongNum;//已猜錯次數(shù) stringDisplayWord;//欲顯示的單詞 stringGuessWord;//玩家二輸入的單詞 intnLen; charselet; intchoice; intoption;public: intexit; inti; CGuess(); voidInitialSet();//修改設(shè)置值 intGetChoice(){returnchoice;} voidinstruction(); voidsubMenu();//選取哪一種模式 voidplay(); voidusergame(inti); voidcompgame(inti); voiddrawman(intnumguess,intnumwrong,inti); voidlchosen(charletter,string&letterchosen,int&check,int&chosencounter,inti); voidtest(stringword,charletter,int&numwrong,string&temp,inti); intSaveWordFile();//向單詞庫添加新單詞 voidrnd(string&word,inti);};2.2.2改進(jìn)二2.2.2.1改進(jìn)方案在進(jìn)入猜單詞的過程中,首先顯示菜單詢問是開始猜單詞還是修改設(shè)置,默認(rèn)的修改次數(shù)為4,默認(rèn)顯示字符幾率為20%。若要修改這個(gè)設(shè)置,在顯示菜單中選擇設(shè)置選項(xiàng)進(jìn)行修改。2.2.2.2具體實(shí)現(xiàn)voidCGuess::subMenu(){ if(choice==1){ cout<<"***************人人對抗模式****************"<<endl<<endl; cout<<"按1開始猜單詞"<<endl<<endl; cout<<"按2修改設(shè)置值"<<endl<<endl; cout<<"按3退出"<<endl<<endl; cout<<"*******************************************"<<endl<<endl; } if(choice==2){cout<<"***************人機(jī)對抗模式****************"<<endl<<endl; cout<<"按1開始猜單詞"<<endl<<endl; cout<<"按2修改設(shè)置值"<<endl<<endl; cout<<"按3向單詞庫添加單詞"<<endl<<endl; cout<<"按4退出"<<endl<<endl; cout<<"*******************************************"<<endl<<endl; } cout<<"請選擇下一步操作:"; cin>>option; while(!cin){ cerr<<"輸入錯誤,請重新輸入:"; Flush(cin); cin>>option; } system("cls");}//顯示菜單詢問是開始猜單詞還是修改設(shè)置CGuess::CGuess(){ Proba=20.0/100; GuessNum=4; WrongNum=0; exit=0; i=0;} voidCGuess::InitialSet(){ cout<<endl; cout<<"****************修改默認(rèn)設(shè)置值*****************"<<endl<<endl; do{ cout<<"可以猜錯的次數(shù)(4-10):"; cin>>GuessNum; cout<<endl; }while(GuessNum<4||GuessNum>10); cout<<"設(shè)置顯示字母的概率(0-1):"; cin>>Proba; cout<<endl; system("cls");}2.2.2改進(jìn)三2.2.3.1改進(jìn)方案在人人對抗時(shí),一個(gè)玩家給出單詞時(shí),單詞不顯示在屏幕上,字符用“*”號顯示。2.2.3.2具體實(shí)現(xiàn)。 charstr[20]; charch; intj=0; cout.flush(); ch=getch(); while(ch!='\n') { if((ch>='a')&&(ch<='z')){ str[j++]=ch; cout<<"*"; } elseif((ch>='A')&&(ch<='Z')){ ch=ch+32; str[j++]=ch; cout<<"*"; } elseif(ch='\n') break; else { cout<<endl<<"輸入錯誤,請重新輸入"; } cout.flush(); ch=getch(); } str[j]=0; word=str;2.2.2改進(jìn)四2.2.4.1改進(jìn)方案在人機(jī)對抗時(shí),可以選擇隨機(jī)讀取單詞,也可以選擇向單詞庫輸入單詞,同時(shí),將單詞庫中單詞的個(gè)數(shù)顯示出來,并根據(jù)單詞庫中單詞個(gè)數(shù)的多少決定隨機(jī)選取的范圍。2.2.4.2具體實(shí)現(xiàn) if(choice==2){//進(jìn)入人機(jī)對抗時(shí)的4個(gè)選項(xiàng) switch(option){ case1: compgame(i);//開始猜單詞 break; case2: InitialSet();//修改設(shè)置 break; case3: SaveWordFile();//添加單詞至單詞庫 system("cls"); break; case4: cout<<"返回"<<endl; system("cls"); instruction();//退出 break; default: cerr<<"輸入錯誤,請重新輸入"<<endl; } }intCGuess::SaveWordFile(){//添加單詞的函數(shù) staticintj=k-1; j++; ofstreamout;//openforreading chara[20]; out.open("words.txt",ios::app);//openforwriting if(!out){ cerr<<"無法打開words.txt文件"<<endl; } cout<<"單詞庫中的單詞個(gè)數(shù)為:"<<j<<endl; cout<<"請向words.txt中輸入單詞:"<<endl; cin>>a; out<<a<<endl; out.close(); return1;}調(diào)試報(bào)告3.1調(diào)試一3.1.1問題描述:運(yùn)行時(shí)剩余可猜次數(shù)不變3.1.2解決方案:原代碼中wrongnum屬于局部變量,而test()中的numwrong調(diào)用的是CGuess中的變量。將wrongnum的局部變量去掉,全部改為CGuess中的變量。3.2調(diào)試二3.2.1問題描述:stringletter在lchosen()中編譯不通過3.2.2解決方案:將letter換成字符串?dāng)?shù)組charletter[20]來接收用戶輸入,并用strlen()函數(shù)獲得letter長度。3.3調(diào)試三3.3.1問題描述:添加新單詞后,原有單詞全部消失3.3.2解決方案:調(diào)用函數(shù)out.open("words.txt",ios::app),用增補(bǔ)方式打開文件3.4調(diào)試四3.4.1問題描述:人人對抗時(shí)輸入欲猜單詞的隱藏,將大寫改為小寫3.4.2解決方案:根據(jù)字符的ASCII碼約束字母的范圍,數(shù)值之間的關(guān)系改為小寫:if((ch>=‘A’)&&(ch<=‘Z’)){ ch=ch+32; str[j++]=ch; cout<<"*";}四、課題2目標(biāo)4.1程序功能簡介個(gè)人財(cái)政支出管理程序,將個(gè)人財(cái)務(wù)的目標(biāo)及當(dāng)前存款,支出保存下來,可以隨時(shí)更新,查看,比較盈余與目標(biāo)的差距。4.2課程設(shè)計(jì)要求1)將收支的數(shù)據(jù)與相應(yīng)的函數(shù)封裝到類中,并改寫程序,是程序結(jié)構(gòu)化。2)增加保存每筆收入的記錄,并對每筆記錄增加日期錄入,按日期的順序保存、查看記錄。將所有記錄放入一個(gè)文件中,每次運(yùn)行程序時(shí)首先打開這個(gè)文件,程序完畢時(shí)將更新的記錄放回文件中。3)完善程序,補(bǔ)充類中數(shù)據(jù)成員盈余的計(jì)算和輸出,要求每筆輸入和支出都要重新統(tǒng)計(jì)當(dāng)前情況下的盈余數(shù)目。4)增加程序監(jiān)控功能,當(dāng)輸入時(shí)間發(fā)生錯誤時(shí),要求重新輸入正確的時(shí)間,當(dāng)結(jié)余的數(shù)目為負(fù)數(shù),輸出信息,警告已經(jīng)超支!4.3評定難易級別A級五、課題2具體實(shí)現(xiàn)5.1程序總體方案5.1.1開發(fā)平臺 Windows7 MicrosoftVisualc++6.05.1.2程序結(jié)構(gòu)程序結(jié)構(gòu):classCFinance{ intnYear,nMonth,nDay;//定義年、月、日 doubledlIncome,dlOutput;//定義收入、支出數(shù)目 doubledlBalance;//定義結(jié)余情況 charszPurpose[20];//定義用途、目的 doubledlGap;//據(jù)目標(biāo)的差額public://公有成員 CFinance(); CFinance(int,int,int);//根據(jù)日期生成結(jié)點(diǎn),查找用 intCompare(CFinance&);//比較日期的大小,大于返回1,小于返回-1,等于返回0 voidShow();//輸出記錄 voidSetFinance(int,int,int,double,double,char*);//對象賦值 doubleShowPur();//返回目標(biāo) voidCalculate(doubledlBal);//計(jì)算結(jié)點(diǎn)的盈余情況 doubleGetBalance();//返回結(jié)點(diǎn)的盈余情況,計(jì)算下一結(jié)點(diǎn)用 voidModifyData();//修改結(jié)點(diǎn)數(shù)據(jù)記錄 voidSetVal(int&,int&,int&,double&,double&,char*);//實(shí)現(xiàn)結(jié)點(diǎn)數(shù)據(jù)的輸入/輸出 boolIsDateEqual(int,int,int);//判斷日期是否存在 voidShowWithoutBalance();//輸出除收支情況以外的記錄 intGetDate(); //取時(shí)間,排序用};classCNode{ CFinance*pData;//指向數(shù)據(jù)類的指針 CNode*pNext;//指向鏈表的下一個(gè)結(jié)點(diǎn)的指針public: CNode();//結(jié)點(diǎn)構(gòu)造函數(shù) CNode(CNode&node);//用于拷貝的構(gòu)造函數(shù) voidInputData(CFinance*pdata);//輸入數(shù)據(jù) voidShowNode();//輸出結(jié)點(diǎn)數(shù)據(jù) CFinance*GetData();//返回?cái)?shù)據(jù) friendclassCList;//定義鏈表類為友元類};classClist//定義鏈表類{protected:CNode*phead;//鏈表頭結(jié)點(diǎn)指針public: Clist(){phead=0;}//鏈表類的構(gòu)造函數(shù) ~Clist(){deletelist();}//鏈表類的析構(gòu)函數(shù) voidAddNode(CNode*);//在首部添加結(jié)點(diǎn) voidDeleteNode(CNode*);//刪除一個(gè)指定的結(jié)點(diǎn) CNode*Lookup(CFinance&);//查找一個(gè)指定的結(jié)點(diǎn),返回該結(jié)點(diǎn)的指針 voidShowlist();//打印整個(gè)鏈表 voidShowlistdeposit();//打印整個(gè)鏈表的收入情況 voidShowlistwithdraw();//打印整個(gè)鏈表的支出情況 voiddeletelist();//刪除整個(gè)鏈表 CNode*GetlistHead(){returnphead;}//返回鏈表的首結(jié)點(diǎn) CNode*GetlistNextNode(CNode*p);//返回指定的結(jié)點(diǎn)的下一個(gè)結(jié)點(diǎn) voidInsert(CNode*p);//插入排序 CNode*GetlastNode(CNode*phead);//返回最后一個(gè)結(jié)點(diǎn) voidCalculatebalance();//計(jì)算鏈表的贏余情況 voidSavefile();//保存文件 voidOpenFile();//打開文件 voidModify(CNode*);//修改鏈表的記錄 voidCalculatedlGap();//計(jì)算整個(gè)鏈表與目標(biāo)的差額 };Voidmain();5.2所做改進(jìn)5.2.1改進(jìn)一5.2.1.1改進(jìn)方案去掉類CFinance靜態(tài)變量成員dlPurpose,避免在修改目標(biāo)時(shí)引起對象之間dlPurpose的混亂,而把dlPurpose放到全局中。我們認(rèn)為dlPurpose應(yīng)該是一個(gè)全程的目標(biāo),而并不是說每次收入和支出都有一個(gè)目標(biāo),而且這樣在修改的時(shí)候可以方便很多。5.2.1.2具體實(shí)現(xiàn)staticdoubledlPurpose=0.0;classCFinance{ intnYear,nMonth,nDay; doubledlIncome,dlOutput; doubledlBalance; charszPurpose[20]; doubledlGap;public: ……};5.2.2改進(jìn)二5.2.2.1改進(jìn)方案 用for語句和continue語句替換掉goto語句。5.2.2.2具體實(shí)現(xiàn)for(;;) { cout<<"\t************************\n"; cout<<"歡迎使用個(gè)人財(cái)政管理系統(tǒng)\n"; cout<<"請選擇以下功能\n"; cout<<"*1.輸入收入記錄*\n"; cout<<"*2.輸入支出記錄*\n"; cout<<"*3.查看收入記錄*\n"; cout<<"*4.查看支出記錄*\n"; cout<<"*5.查看收支平衡狀況*\n"; cout<<"*6.根據(jù)日期查找記錄*\n"; cout<<"*7.根據(jù)日期修改記錄*\n"; cout<<"*8.根據(jù)日期刪除記錄*\n";cout<<"*9.輸出現(xiàn)階段財(cái)政目標(biāo)*\n"; cout<<"*0.退出*\n\n"; cout<<"\t*****************************\n"; cout<<"\n"; cout<<"請輸入選項(xiàng)的序號:"; cin>>select; switch(select) { case'1': { system("cls"); p=newCFinance(); Deposit(p); pn=newCNode; pn->InputData(p); list.Insert(pn);list.CalculatedlGap();p->calculatedlgap(); list.Calculatebalance(); list.Savefile(); continue;//返回主菜單 } case'2': { system("cls"); p=newCFinance();Withdraw(p); pn=newCNode; pn->InputData(p); list.Insert(pn); list.CalculatedlGap();p->calculatedlgap(); list.Calculatebalance(); list.Savefile(); continue;//返回主菜單 } case'3': { system("cls"); list.Showlistdeposit(); system("pause"); system("cls"); continue;//返回主菜單 } case'4': { system("cls"); list.Showlistwithdraw(); system("pause"); system("cls"); continue;//返回主菜單 } case'5': { system("cls"); list.CalculatedlGap(); list.Showlist(); list.Calculatebalance(); system("pause");system("cls"); continue;//返回主菜單 } case'6': { system("cls"); inta,b,c; CNode*pp; cout<<"輸入你要尋找的日期"<<endl; cin>>a>>b>>c; CFinancet(a,b,c); pp=list.Lookup(t); if(pp) { pp->ShowNode(); } else { cout<<"沒有記錄"<<endl; } system("pause");system("cls"); continue;//返回主菜單 } case'7': { system("cls"); inta,b,c; cout<<"請輸入你要修改記錄的日期"; cin>>a>>b>>c; CFinance*pcf; pcf=newCFinance(a,b,c); CNode*pcn; pcn=newCNode; pcn->InputData(pcf); list.Modify(pcn);//修改結(jié)點(diǎn)list.CalculatedlGap();pcf->calculatedlgap(); list.Calculatebalance();list.Savefile(); system("pause");system("cls"); continue;//返回主菜單 } case'8': { system("cls"); inta,b,c; cout<<"請輸入要刪除的日期:"; cin>>a>>b>>c; CNode*pcn; CFinance*pt; pt=newCFinance(a,b,c);//輸入一個(gè)日期 pcn=newCNode;//產(chǎn)生新的動態(tài)的結(jié)點(diǎn) pcn->InputData(pt); list.Calculatebalance(); list.DeleteNode(pcn);//刪除結(jié)點(diǎn)list.Savefile(); system("pause");system("cls"); continue;//返回主菜單 } case'9': { system("cls"); cout<<"現(xiàn)階段財(cái)政目標(biāo)為"<<A.ShowPur()<<endl; system("pause");system("cls"); continue; } case'0': { list.Calculatebalance(); list.CalculatedlGap(); list.Savefile(); exit(0); }default: { cout<<"輸入有誤,請重新輸入:\n\n"; continue;//返回主菜單 } } }5.2.3改進(jìn)三5.2.2.1改進(jìn)方案對于原來沒有順序的賬目,本程序可以對其進(jìn)行按時(shí)間升序排序5.2.2.2具體實(shí)現(xiàn)voidClist::Insert(CNode*p)//按日期的升序排鏈表,若后一個(gè)始終大于等于前一個(gè)則不做改變,僅將指針后移,若前一個(gè)大于后一個(gè),則把兩者交換{CNode*p1;CNode*p2;if(phead==0){phead=p;p->pnext=0;else{if((p->pData)->Compare(*(phead->pData))<0){p->pnext=phead;phead=p;}else{p2=p1=phead;while((p2->pnext)&&(p->pData->Compare(*(p2->pData)))>=0){p1=p2; p2=p2->pnext; } if((p->pData->Compare(*(p2->pData)))>0) { p2->pnext=p; p->pnext=0; } else { p->pnext=p2; p1->pnext=p; }}}}六、課題2調(diào)試報(bào)告大體完成后,發(fā)現(xiàn)會存在一些很多零碎的小問題,好在之后都一一解決了,完成了這次課程設(shè)計(jì)、分工介紹獨(dú)立完成。八、總體小結(jié)這次選的課題是良好組的題目.總體上而說,第一個(gè)課題—猜單詞游戲相對簡單,而第二個(gè)課題——收支管理系統(tǒng)相對要難一些。但兩個(gè)程序的主要創(chuàng)建思路是一樣的。主要是根據(jù)課程設(shè)計(jì)的要求查書上的知識點(diǎn),將之后所學(xué)的輸入輸出流以及模板的知識加入到程序里。在已經(jīng)提供的程序代碼的基礎(chǔ)上,經(jīng)過自己的修改和添加,完成整個(gè)程序的正常運(yùn)行。在遇到不會的問題的時(shí)候,會尋求掌握的比較牢固的同學(xué)的幫助。在課程設(shè)計(jì)的過程中,讓我認(rèn)識到應(yīng)該鞏固自己的c++基礎(chǔ)知識,將理論和實(shí)踐學(xué)會有機(jī)的聯(lián)系和統(tǒng)一。附錄:猜單詞源代碼:#include<iostream> #include<string> #include<cctype> #include<fstream> //文件流 #include<cstdlib> //使用隨機(jī)函數(shù)用 #include<time.h> //得到更好地隨機(jī)數(shù)用#include<conio.h> usingnamespacestd; classdraw{public: draw();//構(gòu)造函數(shù) voidrope();//繩子 voidhead(); // 頭 voidneck(); // 頸 voidleftarm(); // 左上肢 voidrightarm();// 右上肢 voidwaisttop();// 腰 voidleftleg(); // 左腿 voidrightleg();// 右腿};draw::draw(){}voiddraw::rope()//繩子{ cout<<"|";}voiddraw::head()//頭{ cout<<"O";}voiddraw::neck()//頸{ cout<<"|";}voiddraw::leftarm()//左上肢{ cout<<"/";}voiddraw::rightarm(){ cout<<"\\";}//右上肢voiddraw::waisttop(){ cout<<"{}";}//腰voiddraw::leftleg(){ cout<<"/";}//左腿voiddraw::rightleg()//右腿{ cout<<"\\";} classCGuess{ stringWord;//所要猜的單詞 doubleProba; intGuessNum;//可猜的次數(shù) intWrongNum;//猜錯次數(shù) stringDisplayWord; stringGuessWord; intnLen;//單詞長度 charselet; intchoice;//主菜單選擇 intoption;//子菜單選擇public: intexit; inti; CGuess(); voidInitialSet();//修改設(shè)置值得函數(shù) intGetChoice(){returnchoice;} voidinstruction(); voidsubMenu(); voidplay(); voidusergame(inti);//人人游戲 voidcompgame(inti);//人機(jī)游戲 voiddrawman(intnumguess,intnumwrong,inti);//畫上吊人形 voidtest(stringword,charletter[20],int&numwrong,string&temp,inti);//判斷輸入的字符是否是單詞的一部分 intSaveWordFile();//輸入單詞 voidrnd(string&word);//隨機(jī)從文件中選取一個(gè)單詞//voidlchosen(charletter[20],string&letterchosen,int&check,int&chosencounter,inti); };inlineistream&Flush(istream&stream);//清理輸入流CGuess::CGuess(){ Proba=20.0/100; GuessNum=4; WrongNum=0; exit=0;//主循環(huán)結(jié)束標(biāo)識符 i=0;//定義循環(huán)變量}intmain()//主函數(shù){ CGuessg; g.instruction(); do//當(dāng)exit!=1循環(huán) { system("cls");//執(zhí)行系統(tǒng)命令清屏 switch(g.GetChoice()) { case1: g.subMenu(); g.play();//調(diào)用人人對抗函數(shù) break; case2: g.subMenu(); g.play();//調(diào)用人機(jī)對抗函數(shù) break; case3: cout<<"Goodbye"<<endl;//退出游戲 exit(0); default: cerr<<"Invalid-tryagin!(輸入錯誤,請重新輸入=3=)"<<endl;//輸入錯誤,重新輸入 } }while(g.exit!=1); system("pause");//執(zhí)行系統(tǒng)命令:暫停 return0;}/*******************************************************************************************************************************************///出現(xiàn)主菜單的函數(shù)voidCGuess::instruction(){ cout<<" -猜單詞游戲-"<<endl<<endl; cout<<"規(guī)則如下:猜單詞游戲主要分成人人游戲模式和人機(jī)游戲模式。"<<endl<<endl; cout<<"人人模式下,由一個(gè)玩家給出一個(gè)單詞。人機(jī)模式下,游戲由計(jì)"<<endl<<endl; cout<<"算機(jī)給出一個(gè)單詞。玩家自己根據(jù)組成單詞的字母個(gè)數(shù)和屏幕上"<<endl<<endl; cout<<"已顯示出的部分字母猜出單詞。猜的次數(shù),游戲系統(tǒng)默認(rèn)為4次,"<<endl<<endl; cout<<"字母出現(xiàn)概率系統(tǒng)默認(rèn)為20%,可以在設(shè)置里面自行更改."<<endl<<endl; cout<<"若猜不中,則顯示一個(gè)上吊的人形。"<<endl<<endl; cout<<"**********************************************************"<<endl; system("pause"); system("cls"); cout<<endl; cout<<"*猜單詞游戲*"<<endl; cout<<"*****************************************"<<endl; cout<<endl; cout<<"按1進(jìn)入人人對抗模式"<<endl; cout<<"按2進(jìn)入人機(jī)對抗模式"<<endl; cout<<"按3退出"<<endl; cout<<endl; cout<<"*****************************************"<<endl<<endl; cout<<"請選擇:"; cin>>choice;//獲得玩家選擇 while(!cin)//輸入錯誤判斷 { cerr<<"輸入錯誤"<<endl <<"請重新輸入:"; Flush(cin); cin>>choice; }//結(jié)束判斷 system("cls");}//結(jié)束主菜單/****************************************子菜單**********************/voidCGuess::subMenu()//子菜單{ if(choice==1) { cout<<"***************人人對抗****************"<<endl<<endl; cout<<"選擇1開始猜單詞"<<endl<<endl; cout<<"選擇2修改設(shè)置值"<<endl<<endl; cout<<"選擇3退出"<<endl<<endl; cout<<"*******************************************"<<endl<<endl; } if(choice==2) {cout<<"***************人機(jī)對抗****************"<<endl<<endl; cout<<"選擇1開始猜單詞"<<endl<<endl; cout<<"選擇2修改設(shè)置值"<<endl<<endl; cout<<"選擇3向單詞庫添加單詞"<<endl<<endl; cout<<"選擇4退出"<<endl<<endl; cout<<"*******************************************"<<endl<<endl; }}//////////////////////////////////////////////////////////////////////////////////////////////////////////voidCGuess::play()//開始玩游戲{ if(choice==1)//人人對抗的菜單 { cout<<"請選擇您的操作,按Enter確認(rèn):"; cin>>option; while(!cin) { cerr<<"輸入錯誤,請重新輸入:"; Flush(cin); cin>>option; } system("cls"); switch(option) { case1: usergame(i); break; case2: InitialSet(); break; case3: cout<<"返回"<<endl; system("cls"); instruction(); break; default: cerr<<"您的輸入錯誤,請您重新輸入"<<endl; } } if(choice==2)//人機(jī)對抗的菜單 { cout<<"請選擇您的操作,按Enter確認(rèn):"; cin>>option; while(!cin) { cerr<<"輸入錯誤,請重新輸入:"; Flush(cin); cin>>option; } system("cls"); switch(option) { case1: compgame(i); break; case2: InitialSet(); break; case3: SaveWordFile(); system("pause"); system("cls"); break; case4: cout<<"返回"<<endl; system("cls"); instruction(); break; default: cerr<<"輸入錯誤,請重新輸入"<<endl; } }}voidCGuess::InitialSet()//修改默認(rèn)參數(shù){ cout<<endl; cout<<"****************修改默認(rèn)設(shè)置值*****************"<<endl<<endl; do{ cout<<"請?jiān)O(shè)置可以猜錯的次數(shù)(4-10):"; cin>>GuessNum; cout<<endl; } while(GuessNum<4||GuessNum>10); cout<<"你希望顯示字母的概率(0-1):"; cin>>Proba; cout<<endl; while(!Proba) { cerr<<"抱歉,輸入超出范圍,請重新輸入:"<<endl; Flush(cin); cin>>Proba; } system("cls");}intCGuess::SaveWordFile()//文件輸入{ ofstreamoutfile; chara[20]; outfile.open("words.txt",ios::app); if(!outfile) { cerr<<"無法打開文件"<<endl; } cout<<"請向文檔中輸入單詞:"<<endl; cin>>a; outfile<<a<<endl; cout<<"錄入成功!"<<endl; staticintj; outfile.close(); j++; return1;}#defineN10voidCGuess::usergame(inti)//人人游戲{ intwordcheck; intend=0; //猜單詞過程當(dāng)中的循環(huán)結(jié)束標(biāo)志符 intchosencounter=0; //選對的字符個(gè)數(shù) intm=0; intn=0; charletter[20];//玩家輸入的字符 stringword; //玩家要猜的單詞 stringtemp; //玩家看見的不斷更新的輸出 cout<<"請第二個(gè)玩家輸入單詞:"; charstr[20]; charch; intj=0; cout.flush(); ch=getch(); while(ch!='\n') { if((ch>='a')&&(ch<='z'))//鍵入單詞,統(tǒng)一是小寫模式,并以*代替 { str[j++]=ch; cout<<"*"; } elseif((ch>='A')&&(ch<='Z')) { ch=ch+32; str[j++]=ch; cout<<"*"; } elseif(ch='\n') break; else { cout<<endl<<"輸入錯誤,請重新輸入"; } cout.flush(); ch=getch(); } str[j]=0; word=str; do{ wordcheck=0;//當(dāng)玩家輸入的是非法字符時(shí) for(inti=0;i<word.length();i++) { if(!isalpha(word.at(i))) { wordcheck=1; } } if(wordcheck==1) { cout<<"輸入錯誤,請重新輸入單詞:"; cin>>word; } } while(wordcheck==1); temp=word; // 將單詞付給輸出的單詞變量 for(m=word.length()*Proba;m<word.length();m++) { temp.replace(m,1,1,'*'); } system("cls"); do{ if(word==temp)//單詞猜對了 { cout<<endl<<endl; cout<<"猜對了,單詞為:["<<word<<"]"<<endl<<endl; WrongNum=0; system("pause"); end=1;//結(jié)束循環(huán)標(biāo)識符 } drawman(GuessNum,WrongNum,m);//根據(jù)猜錯的次數(shù)畫小人 if(WrongNum==GuessNum) { cout<<endl<<endl; WrongNum=0; system("pause"); end=2; } if(end==0)//當(dāng)以上條件不滿足,循環(huán)未結(jié)束 { cout<<endl<<endl<<endl; // cout<<"猜過的字母:"<<letterchosen<<endl<<endl; // cout<<endl<<endl<<endl; cout<<"你還能猜"<<GuessNum-WrongNum<<"次"<<endl<<endl; cout<<""<<temp<<endl<<endl; cout<<"請輸入單詞:"; cin>>letter; //lchosen(letter,letterchosen,check,chosencounter,i);//判斷輸入字符是否是之前輸入過的字符 if(n==0) { test(word,letter,WrongNum,temp,i);//判斷是否是其組成的字符 } else{;} system("cls"); } system("cls"); }while(end!=1&&end!=2); if(end==2) { cout<<"正確的單詞是:["<<word<<"]"<<endl<<endl; WrongNum=0; system("cls"); } if(end==1) { cout<<""; } system("cls"); subMenu();}/**************************************************************///人機(jī)游戲voidCGuess::compgame(inti){// intcheck; intend=0; intn=0; intchosencounter=0; charletter[20]; stringword; stringtemp;// stringletterchosen=""; rnd(word); //調(diào)用rnd函數(shù),從單詞庫提取單詞 temp=word; for(i=word.length()*Proba;i<word.length();i++)//用*代替字母 { temp.replace(i,1,1,'*'); } system("cls"); do{ if(word==temp) { cout<<endl<<endl; cout<<"猜對了,單詞為:["<<word<<"]"<<endl<<endl; WrongNum=0; system("pause"); end=1; } drawman(GuessNum,WrongNum,i); if(WrongNum==GuessNum){ cout<<endl<<endl;WrongNum=0; system("pause"); end=2; } if(end==0)//當(dāng)以上條件沒有滿足,即循環(huán)未結(jié)束 { cout<<endl<<endl<<endl; //cout<<"猜過的字母:"<<letterchosen<<endl<<endl; // cout<<endl<<endl<<endl; cout<<"你還能猜"<<GuessNum-WrongNum<<"次"<<endl<<endl; cout<<""<<temp<<endl<<endl; cout<<"請輸入單詞:"; cin>>letter; // lchosen(letter,letterchosen,check,chosencounter,i); if(n==0){ test(word,letter,WrongNum,temp,i);//如果不是判斷是否是組成的字符 } else{;} system("cls"); } system("cls"); }while(end!=1&&end!=2); if(end==2){ cout<<"正確的單詞是:["<<word<<"]"<<endl<<endl; system("pause"); } if(end==1){ cout<<""; } system("cls");subMenu();}/*voidCGuess::lchosen(charletter[20],string&letterchosen,int&check,int&chosencounter,inti){ check=0; for(intj=0;j<strlen(letter);j++){ for(i=0;i<letterchosen.length();i++) { if(letter[j]==letterchosen.at(i)){check=1;} } if(check==0) { letterchosen.replace(chosencounter,1,1,letter[j]); chosencounter++; } }}*/voidCGuess::test(stringword,charletter[20],int&numwrong,string&temp,inti)//判斷輸入的字符是否為組成單詞的字符{ for(i=0;i<word.length();i++) { if(letter[i]==word.at(i))//若單詞中有該字符 { temp.replace(i,1,1,letter[i]); } } numwrong++;//沒有該字符,錯誤數(shù)加1}voidCGuess::drawman(intnumguess,intnumwrong,inti){ drawd; //類的對象 for(i=0;i<=numwrong;i++) { if(numguess==4) { switch(i) { case1:d.rope(); cout<<endl; d.head(); cout<<endl; d.neck(); break; case2: cout<<endl; d.leftarm(); d.rightarm(); break; case3:cout<<endl;d.waisttop(); break; case4:cout<<endl; d.leftleg(); d.rightleg(); cout<<endl<<endl<<"你輸了!"<<endl; break; } } elseif(numguess==5) { switch(i) { case1: d.rope(); break; case2: cout<<endl; d.head(); cout<<endl; d.neck(); break; case3: cout<<endl; d.leftarm();d.rightarm(); break; case4: cout<<endl; d.waisttop(); break; case5: cout<<endl; d.leftleg(); d.rightleg(); cout<<endl<<endl<<"你輸了!"<<endl; break; } } elseif(numguess==6) { switch(i) { case1: d.rope(); break; case2:cout<<endl; d.head(); cout<<endl; d.neck(); break; case3: cout<<endl; d.leftarm(); d.rightarm(); break; case4: cout<<endl; d.waisttop(); break; case5: cout<<endl; d.leftleg(); break; case6: d.rightleg(); cout<<endl<<"你輸了!"<<endl; break; } } elseif(numguess==7) { switch(i) { case1: d.rope(); break; case2: cout<<endl; d.head(); cout<<endl; d.neck(); break; case3: cout<<endl; d.leftarm(); break; case4: d.rightarm(); break; case5: cout<<endl; d.waisttop(); break; case6: cout<<endl; d.leftleg(); break; case7: d.rightleg(); cout<<endl<<"你輸了!"<<endl; break; } } elseif(numguess==8) { switch(i) { case1: d.rope(); break; case2: cout<<endl; d.head(); break; case3: cout<<endl; d.neck(); break; case4: cout<<endl; d.leftarm(); break; case5: d.rightarm();break; case6: cout<<endl; d.waisttop(); break; case7: cout<<endl; d.leftleg(); break; case8: d.rightleg(); cout<<endl<<"你輸了!"<<endl; break; } } elseif(numguess==9) { switch(i) { case1: d.rope(); break; case2: cout<<endl; d.head(); break; case3: cout<<endl; d.neck(); break; case4: cout<<endl; d.leftarm(); break; case5: d.rightarm(); break; case6: cout<<endl;d.waisttop(); break; case7:break; case8: cout<<endl; d.leftleg(); break; case9: d.rightleg();cout<<endl<<"你輸了!"<<endl; break; } } elseif(numguess==10) { switch(i) { case1: d.rope(); break; case2: cout<<endl; d.head(); break; case3: cout<<endl; d.neck(); break; case4: cout<<endl; d.leftarm(); break; case5: d.rightarm(); break; case6: cout<<endl; d.waisttop(); break; case7: break; case8: cout<<endl; d.leftleg(); break; case9:d.rightleg(); cout<<"Onelastchance.Whatdoyouwantonyourtombstone?"; break; case10: cout<<endl<<"你輸了!"<<endl; break; } } } }voidCGuess::rnd(string&word){ intx; ifstreamins;//定義輸入文件對象 srand(time(NULL));//初始化隨機(jī)數(shù)種子 x=rand()%5;//得到隨機(jī)值 ins.open("words.txt");//將文件對象與輸入文件聯(lián)系if(ins.fail())//若文件打開失敗 { cout<<"無法找到words.txt文件,請將其放入正確的文件夾"<<endl <<"中,并重新運(yùn)行游戲。確保能訪問到words.txt文件"<<endl; system("pause"); main(); } else{ for(i=0;i<(x+1);i++) { getline(ins,word);//獲得單詞 } } ins.close();}//清理輸入流inlineistream&Flush(istream&stream){ stream.clear(); intchars_to_skip=stream.rdbuf()->in_avail(); returnstream.ignore(chars_to_skip);}收支管理源代碼:/*單向鏈表個(gè)人財(cái)政支出管理*/#include<iostream.h>#include<fstream.h>#include<conio.h>#include<iomanip.h>#include<string.h>#include<stdlib.h>classClist;classCFinance//數(shù)據(jù)類{private:intnYear,nMonth,nDay;//年月日doubledlIncome,dlOutput;//收入,支出數(shù)目doubledlBalance;//結(jié)余charszPurpose[20];//用途,目的staticdoubledlPurpose;//目標(biāo)doubledlGap;//據(jù)目標(biāo)的差額public: friendclassClist; friendofstream&operator<<(ofstream&,CFinance*); CFinance(){dlIncome=dlOutput=dlBalance=0;}//缺省的構(gòu)造函數(shù) CFinance(inta,intb,intc,doubled,doublee,charf[],doubleg,doubleh)//帶參數(shù)的構(gòu)造函數(shù) { nYear=a,nMonth=b,nDay=c; dlIncome=d,dlOutput=e; strcpy(szPurpose,f); dlBalance=g; dlGap=h; } CFinance(inta,intb,intc,doubled,doublee,charg[])//結(jié)構(gòu)函數(shù) { nYear=a,nMonth=b,nDay=c; dlIncome=d,dlOutput=e; strcpy(szPurpose,g); } CFinance(inta,intb,intc){nYear=a,nMonth=b,nDay=c;}//根據(jù)日期生成結(jié)點(diǎn),查找用 intCompare(CFinance&);//比較時(shí)間的大小 voidSetFinance(int,int,int,double,double,char*);//對象賦值 voidShowdeposit();//輸出收入的時(shí)間和目的,用途 voidShowwithdraw();//輸出支出的時(shí)間和目的,用途 voidShow();//輸出類的成員 voidGetPurpose(doublepurs){dlPurpose=purs;}//賦值目標(biāo) doubleShowPur(){returndlPurpose;}//返回目標(biāo)voidcalculatebalance(doubledlBal){dlBalance=dlBal+dlIncome-dlOutput;}//計(jì)算結(jié)點(diǎn)的贏

溫馨提示

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

評論

0/150

提交評論