《2024电气工程11级C课程设计任务书.docx》由会员分享,可在线阅读,更多相关《2024电气工程11级C课程设计任务书.docx(22页珍藏版)》请在课桌文档上搜索。
1、课程设计任务书课程名称C语言程序设计课题名称猜数字嬉戏专业电气工程班级电气工程1104学号202401010403姓名何生指导老师黄晓宇丁敬忠谭小兰湖南工程学院课程设计任务书课程名称C语言程序设计课题猜数字嬉戏专业班级电气工程项目1104学生姓名何宇学号202401010403指导老师黄晓宇_丁敬忠谭小兰审批任务书下达日期2024年6月18日任务完成日期2024年6月24日一、设计内容与设计要求1.设计内容:课题三:猜数字嬉戏一、问题描述:该嬉戏可以由程序随机产生或由用户输入四个。到9之间的数字,且不重复。玩嬉戏者通过嬉戏提示输入八次来匹配上面所输入的数字。A表示位置正确且数字正确,B表示数字
2、正确而位置不正确。二、功能要求:1、本嬉戏显示这样的菜单:(1)随机产生数据(2) 用户输入数据(3) 退出嬉戏2、嬉戏胜利与否都能返回主菜单三、算法提示:1、数据结构:数组2、用简洁的程序设计方法四、测试数据:键盘输入数据。测试数据:五、其它:对该系统有爱好的同学可以在实现系统基本功能后,完善系统的其它功能,如:破记录功能,若你所匹配的次数小于纪录保持者,则为破纪录。2.设计要求:驾驭结构化程序设计的主体思想,以自顶向下逐步求精的方法编制程序解决一些实际的问题,为将来编写软件积累一些典型的案例处理阅历。(1)按学号依次选课题号,并在规定的时间内独自完成相关课题的C源程序编写、调整和运行。源程
3、序及编译生成各文件均保存;(2)按本任务书的要求,编写课程设计报告(Word文档格式)。并用A4的复印纸打印并装订;在2024年6月24日之前,请各班学习委员收齐课程设计报告交黄晓宇老师附:课程设计报告内容要求如下:一、封面二、课程设计任务书三、课程设计主文档内容如下:1、课程设计题目2、课程设计目的3、课程设计主要任务4、设计环境5、总体设计方案的选定(主控模块和各子模块的设计方法及框图)6、源程序清单7、收获及体会参考资料四、报告内容要求用宋体五号字,主标题用黑三号、一级标题用黑四号字,二级标题用宋体小四号字加粗,要求用A4纸张打印出来。课程设计说明书装订依次:封面、任务书、正文、附件(A
4、4大小的图纸及程序清单)。二进度支配第18周,具体支配如下:星期时间班级内容地点第18周星期-下午任务布置C-209第18周星期二8:00-12:001103/04第一次上机机房第18周星期二2:30-6:201105第一次上机机房第18周星期三8:00-12:001105其次次上机机房第18周星期三2:30-6:201103/04其次次上机机房第18周星期四8:00-12:001103/04第三次上机与答辩机房第18周星期四2:30-6:201105第三次上机与答辩机房湖南工程学院计算机与通信学院具体设计1、系统的总体框图2、相关的数据类型:ttincludettincludettinclu
5、dettincludevoidrand2();intrandl();voidinput1();voidcomparel();inti,j,k,c,d,b4;chara24;将数字定义为整型3、函数间的调用关系图如下:4、流程图5测试和结果1、调试分析;输入的嬉戏玩家人数太多时,屏幕显示不能限制为一页一页显示,所以为了便利起见,不要输入太多记录,十七左右为最佳。刚起先执行输入函数,按数字依次输入,输完后执行显示功能,数字、字母的位置显示不对,试着在其中增加一些语句,希望能把所需结果按正常依次显示,但短暂没有胜利,最后在老师的帮助下,所需结果能按正常依次输出了。在前面对猜数字嬉戏进行需求分析的过程
6、中,已经初步明确了系统的主要功能模块和用户需求,下面将在总体设计的过程中,给出猜数字嬉戏的模块结构、流程描述以及界面布局,并使得系统的总体设计符合软件工程中总体设计的基本原则。开发与设计的总体思想猜数字嬉戏是一种大众消遣嬉戏,开发与设计的重点在于嬉戏供玩家进行猜数字嬉戏的原始数字的产生和用户每次进行猜数字操作之后的嬉戏提示,这两方面的规则设计往往确定了软件运行的正确性和质量。同时,要谨记调试失败的缘由,以免下次犯同类错误。2、运用说明:1)、打开程序:2)、进入选择页面:(1)选择1为查看记录(2)选择2为新嬉戏(3)选择O为退出3)、进行嬉戏4)、退出源程序#includeincludett
7、include#includei11ta5,b5,nl,n2,113,i,j;/*a,b,只用了从4的四个下标.*/*nl计算位置数字相同的数字个数*/*n2计算数字相同但位置不相同的数字个数*/*n3计算所猜次数*/charch;StartProgramO(ReadReCOrd();/*调用读取破记者函数*/nl=0;n3=0;getnumber();/*调用随机产生4个数的函数*/for(j=i-l;j=l;j)Printf(%d,aj);getchar();printf(z,nnnnnzz);/*循环猜数*/while(nl4n310)+n3;nl=O;112=O;/*提示用户输入四个要
8、猜的4位整数*/for(i=l;i=4;i+)(printf(,11inputtheNO.%dnumber:,i);scanf(%d”,&bi);)for(i=l;i=4;i+)if(ai=bi)/*位置数字都对的*/nl+;continue;)for(j=l;j=10)printf(zzYoublewit,theansweris%d,%d,%d,al,a2,a3,a4);else(printf(zzConfigrafulastions!Youfinishitby%dtimesnzz,n3);ResetRecord(n3);)printf(Xpressanykeytocontinue.n,z)
9、;fflush(stdin);getch();)getnumber()*随机产生四个数的函数*/(randomize();/*产生随机数的初始化函数*/for(i=l;i=l;j)if(ai=aj)gotoloop2;)SifndefPLAYERdefinePLAYER#includettincludeincludettdefineSIZE5typedefstructcharname20;*fieldofname*/intscore;/*fieldofscore*/player;ttendif#*SortByName按嬉戏成果排序*/ttincludevoidSortByName()(inti
10、,j,k;playerTempS;/*定义进行操作时的临时结构体变量*/players5;/*SlZE在SCOre.h头文件中定义的常量,值为5*/intrecNumber=O;charDataFiIe10=vrecordz,;FILE*fp=NULL;clrscr();/*以读的方式打开文件,如文件不存在,提示错误*/fp=fopen(DataFile,*rbzz);if(fP=NULL)(printf(,z110penfile%sfial!Endwithanykey.nv,DataFile);perror(z,0penfilefail);fflush(stdin);getch();retu
11、rn;)*将文件中要排序的信息存入结构体数组*/while(fread(&srecNumber,sizeof(player),1,fp)!=(int)NULL)(recNumber;fclose(fp);*假如文件中有记录,则将各记录按嬉戏成果值排序*/if(recNumberl)(for(i=0;irecNumber-l;i+)(k=i;for(j=i+l;j0)k=j;)if(k!=i)strcpy(TempS.name,sk.name);TempS.score=sk.score;strcpy(sk.name,si.name);sk.score=si.score;strcpy(si.nam
12、e,TempS.name);si.Score=TempS.score;)*将排序好的记录写入文件*/fp=fopen(DataFile,zwb+,z);if(fp=NULL)(printf(zz110pnfile%sfial!Endwithanykey.nzDataFile);perror(zzOpenfilefail);fflush(stdin);getch();return;)for(i=0;irecNumber;i+)(if(fwrite(&si,sizeof(player),1,fp)!=1)(printf(zz11writefile%sfail!Endwithanykey.nzDat
13、aFile);perror(*writefilefail);fflush(stdin);getch();return;)fclose(fp);)*显示排序后的文件*/printf(*theplayer,sscoreasfolow:nzz);fp=fopen(DataFile,zzrb,z);if(fp=NULL)(printf(v110p11file%sfial!Endwithanykey.nzz,DataFile);perror(zzOpenfilefail);fflush(stdin);getch();return;)printf(zznNamettscorenzz);while(frea
14、d(&TempS,sizeof(player),1,fp)!=(int)NULL)Printf(%stt%dn”,TempS.name,TempS.score);)fclose(fp);Printf(pressanykeytocontinue.zz);fflush(stdin);getch();)#include*显示帮助信息*/PrintHelpO(clrscr();Printf(n);printf+nzz)Printf(+youhava10opportunitiestoguessnum+n)Printf(+everytimethesystemwillhintyou:+n)Printf(+c
15、orrectvalueandcorrectpositioncount+n)printf(,z+correctvaluebutincorrectnesspositioncount+nzz)Printf(+nzz)Printf(+aboutthescorelist+n)Printf(+thescorelistisstorethefiveplayer,sscoreontop+n)printf+nzz)fflush(stdin);getch();)*SOrtByNanIe按嬉戏成果排序*/ttincludevoidSortByScore()(inti,j,k;playerTempS;/*定义进行操作时
16、的临时结构体变量*/players5;/*SIZE在SCOre.h头文件中定义的常量,值为5*/intrecNumber=O;charDataFiIe10=vrecordz,;FILE*fp=NULL;clrscr();/*以读的方式打开文件,如文件不存在,提示错误*/fp=fopen(DataFile,rb);if(fP=NULL)(printf(zz110penfile%sfial!Endwithanykey.n,z,DataFile);perror(zz0penfilefail);fflush(stdin);getch();return;/*将文件中要排序的信息存入结构体数组*/whil
17、e(fread(&srecNumber,sizeof(player),1,fp)!=(int)NULL)(recNumber+;)fclose(fp);*假如文件中有记录,则将各记录按嬉戏成果值排序*/if(recNumberl)(for(i=0;irecNumber-1;i+)(k=i;for(j=i+l;jsj.score)k=j;)if(k!=i)(strcpy(TempS.name,sk.name);TempS.score=sk.score;strcpy(sk.name,si.name);sk.score=si.score;strcpy(si.name,TempS.name);si.S
18、core=TempS.score;)*将排序好的记录写入文件*/fp=fopen(DataFile,zzwb+zz);if(fP=NULL)(printf(zz110penfile%sfial!Endwithanykey.nzz,DataFile);perror(zzOpenfilefail);fflush(stdin);getch();return;)for(i=0;irecNumber;i+)(if(fwrite(si,sizeof(player),1,fp)!=1)(printf(zznwritefile%sfail!Endwithanykey.nz,DataFile);Perror(w
19、ritefilefail);fflush(stdin);getch();return;)fclose(fp);)*显示排序后的文件*/printf(,ztheplayer,sscoreasflow:nz,);fp=fopen(DataFile,vrb,z);if(fp=NULL)(printf(zz110pnfile%sfial!Endwithanykey.nz,DataFile);perror(zz0penfilefail);fflush(stdin);getch();return;)printf(zz11Namettscorenz,);while(fread(TempS,sizeof(pl
20、ayer),1,fp)!=(int)NULL)(printf(,z%stt%dnzz,TempS.name,TempS.score);)fclose(fp);Printf(pressanykeytocontinue.zz);fflush(stdin);getch();)#includeResetRecorcKintn)*n所用次数*/(inti,j;intrecnum=O;intmaxscore=0;playerr5;FILE*fp=NULL;playerPro;playerTempS;fp=fopen(record”,rb);if(fp=NULL)(printf(zz110penfilefa
21、il!Endwithanykeyn);perror(zzOpenfilefail);fflush(stdin);getch();exit(O);/*将文件中的记录读入数组中.*/whiIe(fread(rrecnum,sizeof(player),1,fp)!=(int)NULL)&(recnum5)(recnum+;)fclose(fp);*假如记录成员没有5个,则顺次入数组中添加记录*/if(recnum4)(Printf(Whatisyourname?);*让玩家输入姓名*/scanf(zz%sv,rrecnum.name);rrecnum.score=n;recnum+;/*假如记录成
22、员已经有5个,则找出猜数字次数最多的记录,即最差玩家*/*假如当前记录比此记录快,则替换*/else(for(i=0;imaxscore)*maxscor初始值为0*/(maxscore=ri.score;J=i;)/*假如当前人的记录比最慢记录快,或相等则替换,使玩家入榜,最差玩家落榜*/if(n=rj.score)printf(,Whatisyourname?);*让玩家输入姓名*/scanf(zz%szz,rj.name);rj.score=n;)fp=fopcn(record”,wb);/*以写的方式打开排行榜文件*/if(fP=NULL)(Printf(Openfilefail!en
23、dwithanykey.n);perror(zz0penfilefail);fflush(stdin);getch();exit(0);)*循环把更新过的排行状况写入排行榜*/for(i=0;isizeof(player),1,fp)!=1)(printf(vnWritefilefail!Endwithanykey.n);perror(z,Writefilefail);getch();exit(0);)fclose(fp);*显示更新排行过的排行榜*/fp=fopcn(record,rb);if(fp=NULL)(printf(zz0penfilefail!endwithanykey.n);p
24、error(zz0penfilefail);fflush(stdin);getch();exit(0);)printf(zztherecordis:n);printf(zz11Nametscoren);while(fread(&TempS,sizeof(player),1,fp)!=(int)NULL)(Printf(n%st%dn”,TempS.name,TempS.score);fclose(fp);)#includeClearSort()(playerTempS;/*定义进行操作时的临时结构体变量,用于存放系统默认记录*/charDataFile10=zzrecordzz;/*存放排行榜
25、文件名*/FILE*fp=NULL;StrCPy(TenIPS.name,“player);/*初始化系统默认记录的玩家姓名*/TempS.score=10;/*初始化系统默认记录的玩家成果*/fp=fopen(DataFile,zwb);/*打开排行榜文伯*/if(fP=NULL)/*打开不胜利给出错误提示*/(printf(zz110pnthescoresortfilefail!endwithanykey!n,DataFile);perror(z,Openfilefail!”);fflush(stdin);getch();exit(0);)/*将系统默认记录以履盖的方式写入排行榜*/if(
26、fwrite(&TempS,sizeof(player),1,fp)!=1)(printf(zz11Writefile%sfail!Endwithanykey!nzz,DataFile);perror(zritefilefail!”);fflush(stdin);getch();exit(0);)fclose(fp);printf(zz11Thesortfileiscleared!nz,);fflush(stdin);getch();)ttincludevoidmain()(intchoice=l;while(l)clrscr();printf(z#=#n)printfCUWelcometoG
27、uessNumProgram#n)printf(*#=#n,z)printfCU1.tostartgame#n)printf(/z#2.tobrowsethesortbyscor#n)printfCU3.tobrowsethesortbyname#n)printfCU4.toviewthehelp#n)printfCU5.toclearthesort#n)printf(/z#0.Exit#n)printf(/z#=#n)printf(,zPleaseinputyouchoicehere:);scanf(%d”,choice);switch(choice)(case 1:StartProgram
28、O;break;case 2:SortByScore();break;case 3:SortByName();break;case 4:PrintHelpO;break;case 5:ClearSort();break;case0:exit(O);break;default:printf(zzselecterror!nPressanykeytoCoUntinUe);fflush(stdin);getch();break;)ttinclude“stdio.hReadRecord()(FILE*fp;playerTempS;playerMin;Min.score=11;*打开记录保持文,假如不能以
29、读方式打,说明记录不存在,则他建记录,写入文件*/if(fp=fopen(record”,rb)=NULL)(SetRecordO;/*调用初始化记录函数*/fp=fopen(record,rb);/*循环读取文件,取得最少猜中次数的记录*/while(fread(&TempS,sizeof(player),1,fp)!=(int)NULL)(if(TempS.scoreMin.score)*Min.score初始值为11*/(strcpy(Min.name,TempS.name);Min.score=TempS.score;)fclose(fp);Printf(therecorekeeper
30、is%s,guessedoutin%dtimesnzz,Min.name,Min.score);)SetRecordOplayerPro;FILE*fp;*给初始记录赋值*/strcpy(Pro.name,“player);Pro.score=10;*初始化文件,即创建文件,写入第一条记录*/if(fp=fopen(record”,wb)=NULL)(printf(zzfileopenerrornzz);return;)if(fwrite(&Pro,sizeof(player),1,fp)!=1)(printf(zzfilewriteerrornzz);)fclose(fp);)6总结经过一周的C语言课程设计,我不但实践了课本的学问,还制作了自己的小程序,更重要的是自己对C语言有了更深化的了解。在实践中,深刻体会到只有经过调试程序,我们才能驾驭正确的语法学问及把解决问题的方法用程序语言来表达。在设计程序的过程中不仅使我驾驭了C语言程序设计基本技能,同时也增长了翻阅有关文献的实力,加强了实践实力及自学实力,培育了分析问题和解决问题的实力。计算机与通信学院课程设计评分表课程名称:C语言程序设计项目分数设计方案的合理性与创建性设计与调试结果设计说明书的质量答辩陈述与回答问题状况课程设计周表现状况综合成果