华南理工大学C++程序设计课程设计报告_第1页
华南理工大学C++程序设计课程设计报告_第2页
华南理工大学C++程序设计课程设计报告_第3页
华南理工大学C++程序设计课程设计报告_第4页
华南理工大学C++程序设计课程设计报告_第5页
已阅读5页,还剩9页未读 继续免费阅读

下载本文档

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

文档简介

孝自理N次学SouthChinaUniversityofTechnologyDODDDOD《C++□□□□□□□□□学院 数学学院 专业数学与应用数学(统计方向)学生姓名 学生学号 指导教师 课程编号 课程学分 学分 起始日期年月日 教师评语教师签名: 日日期 成绩评定备注基于记录的应用程序设计一、选题背景本课题应解决的主要问题:编写一个应用程序实现程序化教学应达到的技术要求:该程序可以完成以下功能:向学生提问题;从学生处获得答案;根据学生的答案继续选择下一个问题。本设计的指导思想:在程序中表示教学课程所需的信息;在设计阶段,设计一个合适的数据结构;将数据文件使用的外部表示转换为程序内部表示;编写程序对内部数据库进行操作。二、方案论证概要设计设计原理(理念):在老师所给的参考数据结构设计及函数原型设计的基础上,略加修饰,填充函数原型的内部结构,使得函数具备所需要的功能,最终能使程序实现程序化教学。例如:这个函数将问题的文本读入问题数据结构,这必须由调用才可分配。这个问题文本结束的标志是 ,即“ ”的标记。这个函数将问题答案的文本读入答案数据结构。这个函数用于提出问题。这个函数根据问题序号显示问题题目内容。这个函数用于查找与输入答案匹配的内容。三、过程论述(详细设计)数据结构设计类型名 ,这个结构提供空间给每个问题可能的答案定义 为结构体类型,其中包括一个字符串变量 和一个整型变量而 用于储存一个问题的一个答案, 用于储存下一个问题的题号。的储存示意图的储存示意图类型名 ,这个结构提供空间给问题和相应的答案定义为结构体类型,其中包括字符串数组、属于类型的数组、整形变量和,而用于储存一个问题的文本,用于储存一个问题的每一个答案,用于储存一个问题相应答案的个数,用于储存每个问题所占行数的行号。的储存示意图 的储存示意图的储存示意图共个类型名: ,这个结构提供空间给文件主题和问题定义 为结构体类型,其中包括字符串变量 和属于 类型的数组 ,而 用于储存题目文本, 用于储存问题和相应的答案。的储存示意图的储存示意图…•一 有 个类型为answerT的结构体Se有N个类型为取…•一个类型为answerT的结构体有的结构体外部数据文件的格式说明程序设计复习复习输入请选择:或 类型?判断题请输入:可以有小数部分。对错)对错答错了!判断题请输入浮点数有小数部分,整数没有。可以取负值。对错)对错答错了你必须再复习一下课本。要重新测试吗?是否)是否函数设计说明:说明:如左图所示,首行为文本题目(尽量控制在一

行内且不能出现空格,否则会出现问题),其

次是问题的布局,每一个问题的首行为问题的

序号1、、……,接着换行写入问题的主

要内容,问题完毕后,换行,以“”为标

志,划分问题内容文本与程序执行文本,写入

每一个正确答案之后以“”分隔(注意:此处

的冒号是英文的冒号而非中文的冒号),写入

下一题的题号,再换行。直至将每一个问题文

本写入后,增添最后一个问题,且对于最后一

个问题“”以上的内容要提示操作者是否

重新测试,“”以下的内容为:是

否在输完文本后,最后要空留一行,即按一下回

车键函数原型:函数功能:这个函数将问题的文本读入问题数据结构,记录问题文本所占用的行数。这个问题文本结束的标志是 ,即“ ”的标记。函数算法描述:先定义为字符串变量,再从文件中读取一行数据储存于字符串变量中,如若不等于结束标志“ ”且不是空行,则使问题文本行数增加,最后可得问题文本所占用的总行数。函数原型:函数功能:这个函数将问题答案的文本及其相应的题号读入答案数据结构。函数算法描述:在分界符“ ”后,用 数组分别将各个答案储存起来,再以答案后的“:”为标志,用数组将其后的题号存储起来。函数原型函数功能:这个函数根据问题序号显示问题题目内容函数算法描述:通过循环,将每一个问题的文本一行行地输出。函数原型:函数功能:这个函数用于查找并返回与答案匹配的相应的题号。函数算法描述:从主调函数中,传入参数、结构体 的地址和题号,通过循环,倘若输入的答案与所给答案相同,则返回相应答案的下一题题号,倘若不相同,则返回原题号U函数原型:函数功能:这个函数用于提出问题,这必须由调用才可分配,无返回值。函数算法描述:通过循环,调用 函数输出问题,再由测试者从函数中输入答案,再调用 函数返回下一题题号赋值于 如果 的值为下一题号,则再次执行循环,如果 的值为,则跳出循环。四、结果分析测试方法:先输入文件名(文件名后需添加“ a),再按回车键则如图显示:S3 F:\CYuYan\bin\wwtemp.exe -π输入文件名:(⅞□f3.dat)f3.dat λ心理测试:一分钟测出你最真实的一面你旧时的恋人电话给你,你接不接7搜狗拼音输入法半:再按题目指示输入答案:E3 F:\CYuYan\bin\wwtemp.exe输入文件名:(⅛f3.dat)f3.dat

心理测试:一分钟测出你最真实的一面你旧时的恋人电话给你,你接不接?输入:接不接请选择:

接喜就睡怎样的床7输入:单人床微大床请选择:搜狗拼音输入法半:如果输错答案,程序会把题目重新显示并要求再次输入:当全部题目完成后,程序会问是否重新测试,若输入是,则返回第题重新测试:若输入否,则结束程序:BF:\CYuYan\bin\wwtemp.exe□伤心的时候喜欢怎样?从一个人呆着E.我人倾诉输入:A/B请选择:BE选项一一假面关键词:亲切你温柔舒缓的气质让人觉得亲切得像认识已久的老朋友,但是,事实上,你是个易接近却难了解的大,你并不喜漱把你自己的人生轻易吐露他人.亲切对你来说很多时候更像是一种心态和礼貌。换句话来说,你往往对陌生人才会施展出你的亲和力,就像是躲在床上装成祖母的老狼,只有你的至交好友才会了解你的古怪和疯狂。是否要重新测试?(是/否)输入:是∕⅛请选择:否谢谢参与,再会!Pressarŋrkeytocontinue搜狗拼音输入法半:调试过程总结:编译时遇到的主要典型错误:编程时循环范围掌握不当,导致达不到原有目的,甚至陷入死循环。解决方案:重新思考,适当控制循环范围,使循环能够顺利跳出。连接时遇到的主要典型错误:文件名输入错误,少输入了“ ”。解决方案:补充" ”即可。编译和连接都成功,但结果不对时,主要典型错误:当在某个问题里输入了与所供选答案都不同时,程序会直接跳出循环,结束程序,而不是重新问问题。解决方案:修改循环中的某个函数的返回值,使得输入错误答案不结束程序,而是再次询问同一问题。五、课程设计总结本程序设计基本上能够按要求实现程序化教学,但尚存在不足,如题目不能超过一行,否则编程就会出现错误,为了改进这个缺点,设置多个 l、……分别储存多行题目,利用循环,一旦遇到空行则跳出循环。通过本次程序设计,学会了如何让程序与外界文件结合,并加深了对一些程序常识的理解。参考文献谭浩强《程序设计(第版)》清华大学出版社周蔼如林伟健《程序设计基础》电子工业出版社附录/*这个程序执行一个简单的程序化教学过程。*/#include<iostream>#include<fstream>#include<string>usingnamespacestd;/*MaXQueStionS -问题的最大个数MaXLineSPerQueStion-每一个问题占有的最多行数MaXAnSWerSPerQueStion-每一个问题答案的最多个数EndMarker -问题文本的字符串标记结尾*/#defineMaxQuestions100#defineMaxLinesPerQuestion100#defineMaxAnswersPerQuestion10#defineEndMarker" "/**类型名:answerT*这个结构提供空间给每个问题可能的答案* *ans是为答案提供空间的字符串变量*nextq是下一问题的编号*/structanswerT{stringans;intnextq;};/**类型名:questionT*这个结构提供空间给问题* *qtext用于储存每一个问题*answers用于储存每个问题的每一个可能的答案*nAnswers为每一个答案的字节序号*linenumber为每一个问题的行序号*/structquestionT{stringqtext[MaxLinesPerQuestion+1];answerTanswers[MaXAnSWerSPerQueStion];intnAnswers;intlinenumber;};/**类型名:CourSeDB*这个结构提供空间给文件主题和问题* *title是用于储存题目的字符串变量*questions是储存问题的questionT型数组*/structCourseDB{stringtitle;questionTquestions[MaxQuestions+1];};courseDBcourse;/*函数名:ReadQuestionText用法:ReadQueStionTeXt(infile,question); *这个函数将问题的文本读入问题数据结构,记录问题文本所占用的行数。这个问题文本结束的标志是EndMarker,即“---—”的标记。*/voidReadQueStionTeXt(ifstream&infile,questionT*q){stringch;q->linenumber=0;while(1){getline(infile,ch); 〃从文件中读取一行数据储存于字符串变量Chif(ch==EndMarker)break;if(ch!="")q->qtext[++(q->linenumber)]=ch;};}/*函数名:ReadAnswers用法:ReadAnSWerS(ifstream&infile,questionT*q) 这个函数将问题答案的文本读入答案数据结构,这必须由调用才可分配。*/voidReadAnSWerS(ifstream&infile,questionT*q){q->nAnswers=0;While⑴{Charch;inti=0;charpp[51];memset((void*)pp,0,50); 〃初始化pp[]把pp[]前50个字节设置成字符0infile.get(ch);if(ch=='\n')break;pp[i]=ch;i++;while(1){infile.get(ch);if(ch==':')break;pp[i]=ch;i++;}q->answers[++(q->nAnswers)].ans=pp; //将char数组转化成stringinfile>>q->answers[q->nAnswers].nextq;infile.get(ch); 〃消除掉上一次输出之后的换行符}}intmain(){chars1[20];intnum=1;voidASkQueStion(intnum); 〃声明ASkQueStion函数,用于提问问题8a<<"输入文件名:(如f3.dat)”;cin>>s1;ifstreaminfile(s1,ios::in);if(!infile){cout<<”文件打开失败"<<endl;exit(1);}getline(infile,CourSe.title); 〃输入文件内容主题cout<<course.title<<endl;While(!infile.eof()){intnumber;infile>>number;ReadQueStionTeXt(infile,&(CourSe.questions[number]));//输入文件问题ReadAnSWerS(infile,&(CourSe.questions[number]));//输入文件问题的答案}cout<<endl;ASkQueStion(num);〃开始问问题cout<<"谢谢参与,再会!"<<endl;infile.CloSe();return0;}/*函数名:AskQuestion用法:ASkQueStion(intnum) 这个函数用于提出问题,这必须由调用才可分配,无返回值。*/voidASkQueStion(intnum){voidWriteQueStionTeXt(questionT*q); 〃声明WriteQuestionText函数intFindWriteAnSWer(Stringans,questionT*q,intnum);〃声明FindWriteAnswer函数stringans;while(1){WriteQueStionTeXt(&(CourSe.questions[num]));〃输出问题cin>>ans; 〃输入答案num=FindWriteAnswer(ans,&(CourSe.questions[num]),num);〃查找答案并返回下一题题号cout<<endl;if(num==-1)break;}}/*函数名:WriteQueStionTeXt用法:WriteQueStionTeXt(questionT*q) 这个函数根据问题序号显示问题题目内容*/voidWriteQuestionText(questionT*q){for(inti=1;i<=q->linenumber;i++){cout<<q->q

温馨提示

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

评论

0/150

提交评论