c++收支管理和猜单词游戏课程设计报告(完整版)_第1页
c++收支管理和猜单词游戏课程设计报告(完整版)_第2页
c++收支管理和猜单词游戏课程设计报告(完整版)_第3页
c++收支管理和猜单词游戏课程设计报告(完整版)_第4页
c++收支管理和猜单词游戏课程设计报告(完整版)_第5页
已阅读5页,还剩152页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

c++收支管理和猜单词游戏课程设计报告(完整版)(文档可以直接使用,也可根据实际需要修改使用,可编辑欢迎下载)

c++收支管理和猜单词游戏课程设计报告(完整版)(文档可以直接使用,也可根据实际需要修改使用,可编辑欢迎下载)VC++课程设计报告课程:VC++课程设计系别:计算机科学与计算机学院班级:9121068406学号:姓名:选题1名称:猜单词游戏选题1难易级别:B级选题2名称:个人财政支出管理(单向链表)选题2难易级别:A级自报成绩良起止时间:指导教师:日期:2021年12月13日目录课题1目标1.1程序功能简介1.2课程设计要求1.3评定难易级别课题1具体实现2.1程序总体方案2.1.1开发平台2.1.2程序结构或流程图2.2所做改进课题1调试报告课题2目标1.1程序功能简介1.2课程设计要求1.3评定难易级别课题2具体实现2.1程序总体方案2.1.1开发平台2.1.2程序结构或流程图2.2所做改进课题2调试报告总体小结分工介绍一、课题1目标1.1程序功能简介一个猜单词游戏。两人游戏时,由一个玩家给出一个单词,在人与计算机游戏时,由计算机给出一个单词,另一个玩家根据组成单词的字母个数猜出单词,猜的次数可以指定,若猜不中,显示一个上吊人形。1.2课程设计要求(对应后面的改进)(1)将猜单词的函数与相应的数据封装到类中,并改写主程序,使程序简化。(2)根据所猜单词中的字母个数,给出指定几率的提示字母,显示于单词的正确位置。(3)在进入猜单词的过程中,首先显示菜单询问是开始猜单词还是修改设置,默认的修改次数为4,默认显示字符几率为20%。若要修改这个设置,在显示菜单中选择设置选项进行修改。(4)在人人对抗时,一个玩家给出单词时,单词不显示在屏幕上,字符用“*”号显示。(5)猜单词时,输入一个单词,判断函数改为判断输入单词的字符是否与所猜单词一一对应,将猜中的字符显示出来。(6)在人机对抗时,可以选择随机读取单词,也可以选择向单词库输入单词,同时,将单词库中单词的个数显示出来,并根据单词库中单词个数的多少决定随机选取的范围。1.3评定难易级别A级二、课题1具体实现2.1程序总体方案2.1.1开发平台操作系统:Windows7开发工具:VC++6.02.1.2程序结构或流程图(1)主函数的流程图:开始开始定义类的对象定义类的对象调用函数调用函数instruction()调用函数调用函数GetChoice()调用函数subMenu()P调用函数subMenu()Play()选择1调用函数subMenu()调用函数subMenu()Play()选择2选择3选择3输出“输出“再见”结束结束(2)子函数(usergame(inti))的流程图:开始开始第二名玩家输入 第二名玩家输入玩家输入字母玩家输入字母 N调用函数drawman()lchosen(调用函数drawman()lchosen()和test()是否全部猜出结束结束(3)子函数(compgame(inti))的流程图:开始开始从txt中随机选词 从txt中随机选词玩家输入字母玩家输入字母 N调用函数drawman()lchosen(调用函数drawman()lchosen()和test()是否全部猜出结束结束2.2所做改进(根据书上课程设计要求所做改进)2.2.1改进一2.2.1.1改进方案将人人对抗和人机对抗,接收单词输入、显示猜单词结果及判断是否猜中的函数已经相应的数据封装到CGuess类中,使程序简化。2.2.1.2具体实现classCGuess{ stringWord;//欲猜单词 doubleProba;//显示字符的频率 intGuessNum;//可猜次数 intWrongNum;//已猜错次数 stringDisplayWord;//欲显示的单词 stringGuessWord;//玩家二输入的单词 intnLen; charselet; intchoice; intoption;public: intexit; inti; CGuess(); voidInitialSet();//修改设置值 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改进二2.2.2.1改进方案在进入猜单词的过程中,首先显示菜单询问是开始猜单词还是修改设置,默认的修改次数为4,默认显示字符几率为20%。若要修改这个设置,在显示菜单中选择设置选项进行修改。2.2.2.2具体实现voidCGuess::subMenu(){ if(choice==1){ cout<<"***************人人对抗模式****************"<<endl<<endl; cout<<"按1开始猜单词"<<endl<<endl; cout<<"按2修改设置值"<<endl<<endl; cout<<"按3退出"<<endl<<endl; cout<<"*******************************************"<<endl<<endl; } if(choice==2){cout<<"***************人机对抗模式****************"<<endl<<endl; cout<<"按1开始猜单词"<<endl<<endl; cout<<"按2修改设置值"<<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");}//显示菜单询问是开始猜单词还是修改设置CGuess::CGuess(){ Proba=20.0/100; GuessNum=4; WrongNum=0; exit=0; i=0;} voidCGuess::InitialSet(){ cout<<endl; cout<<"****************修改默认设置值*****************"<<endl<<endl; do{ cout<<"可以猜错的次数(4-10):"; cin>>GuessNum; cout<<endl; }while(GuessNum<4||GuessNum>10); cout<<"设置显示字母的概率(0-1):"; cin>>Proba; cout<<endl; system("cls");}2.2.2改进三2.2.3.1改进方案在人人对抗时,一个玩家给出单词时,单词不显示在屏幕上,字符用“*”号显示。2.2.3.2具体实现。 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改进四2.2.4.1改进方案在人机对抗时,可以选择随机读取单词,也可以选择向单词库输入单词,同时,将单词库中单词的个数显示出来,并根据单词库中单词个数的多少决定随机选取的范围。2.2.4.2具体实现 if(choice==2){//进入人机对抗时的4个选项 switch(option){ case1: compgame(i);//开始猜单词 break; case2: InitialSet();//修改设置 break; case3: SaveWordFile();//添加单词至单词库 system("cls"); break; case4: cout<<"返回"<<endl; system("cls"); instruction();//退出 break; default: cerr<<"输入错误,请重新输入"<<endl; } }intCGuess::SaveWordFile(){//添加单词的函数 staticintj=k-1; j++; ofstreamout;//openforreading chara[20]; out.open("words.txt",ios::app);//openforwriting if(!out){ cerr<<"无法打开words.txt文件"<<endl; } cout<<"单词库中的单词个数为:"<<j<<endl; cout<<"请向words.txt中输入单词:"<<endl; cin>>a; out<<a<<endl; out.close(); return1;}调试报告3.1调试一3.1.1问题描述:运行时剩余可猜次数不变3.1.2解决方案:原代码中wrongnum属于局部变量,而test()中的numwrong调用的是CGuess中的变量。将wrongnum的局部变量去掉,全部改为CGuess中的变量。3.2调试二3.2.1问题描述:stringletter在lchosen()中编译不通过3.2.2解决方案:将letter换成字符串数组charletter[20]来接收用户输入,并用strlen()函数获得letter长度。3.3调试三3.3.1问题描述:添加新单词后,原有单词全部消失3.3.2解决方案:调用函数out.open("words.txt",ios::app),用增补方式打开文件3.4调试四3.4.1问题描述:人人对抗时输入欲猜单词的隐藏,将大写改为小写3.4.2解决方案:根据字符的ASCII码约束字母的范围,数值之间的关系改为小写:if((ch>=‘A’)&&(ch<=‘Z’)){ ch=ch+32; str[j++]=ch; cout<<"*";}四、课题2目标4.1程序功能简介个人财政支出管理程序,将个人财务的目标及当前存款,支出保存下来,可以随时更新,查看,比较盈余与目标的差距。4.2课程设计要求1)将收支的数据与相应的函数封装到类中,并改写程序,是程序结构化。2)增加保存每笔收入的记录,并对每笔记录增加日期录入,按日期的顺序保存、查看记录。将所有记录放入一个文件中,每次运行程序时首先打开这个文件,程序完毕时将更新的记录放回文件中。3)完善程序,补充类中数据成员盈余的计算和输出,要求每笔输入和支出都要重新统计当前情况下的盈余数目。4)增加程序监控功能,当输入时间发生错误时,要求重新输入正确的时间,当结余的数目为负数,输出信息,警告已经超支!4.3评定难易级别A级五、课题2具体实现5.1程序总体方案5.1.1开发平台 Windows7 MicrosoftVisualc++6.05.1.2程序结构程序结构:classCFinance{ intnYear,nMonth,nDay;//定义年、月、日 doubledlIncome,dlOutput;//定义收入、支出数目 doubledlBalance;//定义结余情况 charszPurpose[20];//定义用途、目的 doubledlGap;//据目标的差额public://公有成员 CFinance(); CFinance(int,int,int);//根据日期生成结点,查找用 intCompare(CFinance&);//比较日期的大小,大于返回1,小于返回-1,等于返回0 voidShow();//输出记录 voidSetFinance(int,int,int,double,double,char*);//对象赋值 doubleShowPur();//返回目标 voidCalculate(doubledlBal);//计算结点的盈余情况 doubleGetBalance();//返回结点的盈余情况,计算下一结点用 voidModifyData();//修改结点数据记录 voidSetVal(int&,int&,int&,double&,double&,char*);//实现结点数据的输入/输出 boolIsDateEqual(int,int,int);//判断日期是否存在 voidShowWithoutBalance();//输出除收支情况以外的记录 intGetDate(); //取时间,排序用};classCNode{ CFinance*pData;//指向数据类的指针 CNode*pNext;//指向链表的下一个结点的指针public: CNode();//结点构造函数 CNode(CNode&node);//用于拷贝的构造函数 voidInputData(CFinance*pdata);//输入数据 voidShowNode();//输出结点数据 CFinance*GetData();//返回数据 friendclassCList;//定义链表类为友元类};classClist//定义链表类{protected:CNode*phead;//链表头结点指针public: Clist(){phead=0;}//链表类的构造函数 ~Clist(){deletelist();}//链表类的析构函数 voidAddNode(CNode*);//在首部添加结点 voidDeleteNode(CNode*);//删除一个指定的结点 CNode*Lookup(CFinance&);//查找一个指定的结点,返回该结点的指针 voidShowlist();//打印整个链表 voidShowlistdeposit();//打印整个链表的收入情况 voidShowlistwithdraw();//打印整个链表的支出情况 voiddeletelist();//删除整个链表 CNode*GetlistHead(){returnphead;}//返回链表的首结点 CNode*GetlistNextNode(CNode*p);//返回指定的结点的下一个结点 voidInsert(CNode*p);//插入排序 CNode*GetlastNode(CNode*phead);//返回最后一个结点 voidCalculatebalance();//计算链表的赢余情况 voidSavefile();//保存文件 voidOpenFile();//打开文件 voidModify(CNode*);//修改链表的记录 voidCalculatedlGap();//计算整个链表与目标的差额 };Voidmain();5.2所做改进5.2.1改进一5.2.1.1改进方案去掉类CFinance静态变量成员dlPurpose,避免在修改目标时引起对象之间dlPurpose的混乱,而把dlPurpose放到全局中。我们认为dlPurpose应该是一个全程的目标,而并不是说每次收入和支出都有一个目标,而且这样在修改的时候可以方便很多。5.2.1.2具体实现staticdoubledlPurpose=0.0;classCFinance{ intnYear,nMonth,nDay; doubledlIncome,dlOutput; doubledlBalance; charszPurpose[20]; doubledlGap;public: ……};5.2.2改进二5.2.2.1改进方案 用for语句和continue语句替换掉goto语句。5.2.2.2具体实现for(;;) { cout<<"\t************************\n"; cout<<"欢迎使用个人财政管理系统\n"; cout<<"请选择以下功能\n"; cout<<"*1.输入收入记录*\n"; cout<<"*2.输入支出记录*\n"; cout<<"*3.查看收入记录*\n"; cout<<"*4.查看支出记录*\n"; cout<<"*5.查看收支平衡状况*\n"; cout<<"*6.根据日期查找记录*\n"; cout<<"*7.根据日期修改记录*\n"; cout<<"*8.根据日期删除记录*\n";cout<<"*9.输出现阶段财政目标*\n"; cout<<"*0.退出*\n\n"; cout<<"\t*****************************\n"; cout<<"\n"; cout<<"请输入选项的序号:"; 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);//修改结点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);//输入一个日期 pcn=newCNode;//产生新的动态的结点 pcn->InputData(pt); list.Calculatebalance(); list.DeleteNode(pcn);//删除结点list.Savefile(); system("pause");system("cls"); continue;//返回主菜单 } case'9': { system("cls"); cout<<"现阶段财政目标为"<<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改进三5.2.2.1改进方案对于原来没有顺序的账目,本程序可以对其进行按时间升序排序5.2.2.2具体实现voidClist::Insert(CNode*p)//按日期的升序排链表,若后一个始终大于等于前一个则不做改变,仅将指针后移,若前一个大于后一个,则把两者交换{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调试报告大体完成后,发现会存在一些很多零碎的小问题,好在之后都一一解决了,完成了这次课程设计、分工介绍独立完成。八、总体小结这次选的课题是良好组的题目.总体上而说,第一个课题—猜单词游戏相对简单,而第二个课题——收支管理系统相对要难一些。但两个程序的主要创建思路是一样的。主要是根据课程设计的要求查书上的知识点,将之后所学的输入输出流以及模板的知识加入到程序里。在已经提供的程序代码的基础上,经过自己的修改和添加,完成整个程序的正常运行。在遇到不会的问题的时候,会寻求掌握的比较牢固的同学的帮助。在课程设计的过程中,让我认识到应该巩固自己的c++基础知识,将理论和实践学会有机的联系和统一。附录:猜单词源代码:#include<iostream> #include<string> #include<cctype> #include<fstream> //文件流 #include<cstdlib> //使用随机函数用 #include<time.h> //得到更好地随机数用#include<conio.h> usingnamespacestd; classdraw{public: draw();//构造函数 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;//可猜的次数 intWrongNum;//猜错次数 stringDisplayWord; stringGuessWord; intnLen;//单词长度 charselet; intchoice;//主菜单选择 intoption;//子菜单选择public: intexit; inti; CGuess(); voidInitialSet();//修改设置值得函数 intGetChoice(){returnchoice;} voidinstruction(); voidsubMenu(); voidplay(); voidusergame(inti);//人人游戏 voidcompgame(inti);//人机游戏 voiddrawman(intnumguess,intnumwrong,inti);//画上吊人形 voidtest(stringword,charletter[20],int&numwrong,string&temp,inti);//判断输入的字符是否是单词的一部分 intSaveWordFile();//输入单词 voidrnd(string&word);//随机从文件中选取一个单词//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;//主循环结束标识符 i=0;//定义循环变量}intmain()//主函数{ CGuessg; g.instruction(); do//当exit!=1循环 { system("cls");//执行系统命令清屏 switch(g.GetChoice()) { case1: g.subMenu(); g.play();//调用人人对抗函数 break; case2: g.subMenu(); g.play();//调用人机对抗函数 break; case3: cout<<"Goodbye"<<endl;//退出游戏 exit(0); default: cerr<<"Invalid-tryagin!(输入错误,请重新输入=3=)"<<endl;//输入错误,重新输入 } }while(g.exit!=1); system("pause");//执行系统命令:暂停 return0;}/*******************************************************************************************************************************************///出现主菜单的函数voidCGuess::instruction(){ cout<<" -猜单词游戏-"<<endl<<endl; cout<<"规则如下:猜单词游戏主要分成人人游戏模式和人机游戏模式。"<<endl<<endl; cout<<"人人模式下,由一个玩家给出一个单词。人机模式下,游戏由计"<<endl<<endl; cout<<"算机给出一个单词。玩家自己根据组成单词的字母个数和屏幕上"<<endl<<endl; cout<<"已显示出的部分字母猜出单词。猜的次数,游戏系统默认为4次,"<<endl<<endl; cout<<"字母出现概率系统默认为20%,可以在设置里面自行更改."<<endl<<endl; cout<<"若猜不中,则显示一个上吊的人形。"<<endl<<endl; cout<<"**********************************************************"<<endl; system("pause"); system("cls"); cout<<endl; cout<<"*猜单词游戏*"<<endl; cout<<"*****************************************"<<endl; cout<<endl; cout<<"按1进入人人对抗模式"<<endl; cout<<"按2进入人机对抗模式"<<endl; cout<<"按3退出"<<endl; cout<<endl; cout<<"*****************************************"<<endl<<endl; cout<<"请选择:"; cin>>choice;//获得玩家选择 while(!cin)//输入错误判断 { cerr<<"输入错误"<<endl <<"请重新输入:"; Flush(cin); cin>>choice; }//结束判断 system("cls");}//结束主菜单/****************************************子菜单**********************/voidCGuess::subMenu()//子菜单{ if(choice==1) { cout<<"***************人人对抗****************"<<endl<<endl; cout<<"选择1开始猜单词"<<endl<<endl; cout<<"选择2修改设置值"<<endl<<endl; cout<<"选择3退出"<<endl<<endl; cout<<"*******************************************"<<endl<<endl; } if(choice==2) {cout<<"***************人机对抗****************"<<endl<<endl; cout<<"选择1开始猜单词"<<endl<<endl; cout<<"选择2修改设置值"<<endl<<endl; cout<<"选择3向单词库添加单词"<<endl<<endl; cout<<"选择4退出"<<endl<<endl; cout<<"*******************************************"<<endl<<endl; }}//////////////////////////////////////////////////////////////////////////////////////////////////////////voidCGuess::play()//开始玩游戏{ if(choice==1)//人人对抗的菜单 { cout<<"请选择您的操作,按Enter确认:"; 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)//人机对抗的菜单 { cout<<"请选择您的操作,按Enter确认:"; 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()//修改默认参数{ cout<<endl; cout<<"****************修改默认设置值*****************"<<endl<<endl; do{ cout<<"请设置可以猜错的次数(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; //猜单词过程当中的循环结束标志符 intchosencounter=0; //选对的字符个数 intm=0; intn=0; charletter[20];//玩家输入的字符 stringword; //玩家要猜的单词 stringtemp; //玩家看见的不断更新的输出 cout<<"请第二个玩家输入单词:"; 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; do{ wordcheck=0;//当玩家输入的是非法字符时 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;//结束循环标识符 } drawman(GuessNum,WrongNum,m);//根据猜错的次数画小人 if(WrongNum==GuessNum) { cout<<endl<<endl; WrongNum=0; system("pause"); end=2; } if(end==0)//当以上条件不满足,循环未结束 { 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();}/**************************************************************///人机游戏voidCGuess::compgame(inti){// intcheck; intend=0; intn=0; intchosencounter=0; charletter[20]; stringword; stringtemp;// stringletterchosen=""; rnd(word); //调用rnd函数,从单词库提取单词 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)//当以上条件没有满足,即循环未结束 { 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++;//没有该字符,错误数加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));//初始化随机数种子 x=rand()%5;//得到随机值 ins.open("words.txt");//将文件对象与输入文件联系if(ins.fail())//若文件打开失败 { cout<<"无法找到words.txt文件,请将其放入正确的文件夹"<<endl <<"中,并重新运行游戏。确保能访问到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);}收支管理源代码:/*单向链表个人财政支出管理*/#include<iostream.h>#include<fstream.h>#include<conio.h>#include<iomanip.h>#include<string.h>#include<stdlib.h>classClist;classCFinance//数据类{private:intnYear,nMonth,nDay;//年月日doubledlIncome,dlOutput;//收入,支出数目doubledlBalance;//结余charszPurpose[20];//用途,目的staticdoubledlPurpose;//目标doubledlGap;//据目标的差额public: friendclassClist; friendofstream&operator<<(ofstream&,CFinance*); CFinance(){dlIncome=dlOutput=dlBalance=0;}//缺省的构造函数 CFinance(inta,intb,intc,doubled,doublee,charf[],doubleg,doubleh)//带参数的构造函数 { nYear=a,nMonth=b,nDay=c; dlIncome=d,dlOutput=e; strcpy(szPurpose,f); dlBalance=g; dlGap=h; } CFinance(inta,intb,intc,doubled,doublee,charg[])//结构函数 { nYear=a,nMonth=b,nDay=c; dlIncome=d,dlOutput=e; strcpy(szPurpose,g); } CFinance(inta,intb,intc){nYear=a,nMonth=b,nDay=c;}//根据日期生成结点,查找用 intCompare(CFinance&);//比较时间的大小 voidSetFinance(int,int,int,double,double,char*);//对象赋值 voidShowdeposit();//输出收入的时间和目的,用途 voidShowwithdraw();//输出支出的时间和目的,用途 voidShow();//输出类的成员 voidGetPurpose(doublepurs){dlPurpose=purs;}//赋值目标 doubleShowPur(){returndlPurpose;}//返回目标voidcalculatebalance(doubledlBal){dlBalance=dlBal+dlIncome-dlOutput;}//计算结点的赢

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论