《《C++程序设计》课程设计--基于记录的应用程序设计.docx》由会员分享,可在线阅读,更多相关《《C++程序设计》课程设计--基于记录的应用程序设计.docx(14页珍藏版)》请在优知文库上搜索。
1、课程设计报告书C+程序设计课程设计学院数学学院专业数学与应用数学(统计方向)基于记录的应用程序设计一、选题背景本课题应解决的主要问题:编写一个应用程序实现程序化教学应达到的技术要求:该程序可以完成以下功能:向学生提问题;从学生处获得答案;根据学生的答案继续选择下一个问题。本设计的指导思想:在程序中表示教学课程所需的信息;在设计阶段,设计一个合适的数据结构;将数据文件使用的外部表示转换为程序内部表示;编写程序对内部数据库进行操作。二、方案论证(概要设计)设计原理(理念):在老师所给的参考数据结构设计及函数原型设计的基础上,略加修饰,填充函数原型的内部结构,使得函数具备所需要的功能,最终能使程序实
2、现程序化教学。例如:voidReadQuestionText(ifstrearn&infile,question?*q)这个函数将问题的文本读入问题数据结构,这必须由调用才可分配。这个问题文本结束的标志是EndMarker,即“”的标记。voidReadAnswers(ifstreaminfile,question1*q)这个函数将问题答案的文本读入答案数据结构。voidAskQuestion(intnum)这个函数用于提出问题。voidWriteQuestionText(question1*q)这个函数根据问题序号显示问题题目内容。voidFindWriteAnswer(stringans,
3、question?*q)这个函数用于查找与输入答案匹配的内容。三、过程论述(详细设计)1 .数据结构设计*类型名:answerT,这个结构提供空间给每个问题可能的答案structanswer?stringans;intnextq;;定义answer1为结构体类型,其中包括一个字符串变量ans和一个整型变量nextq,而ans用于储存一个问题的一个答案,nextq用于储存下一个问题的题号。ans的储存示意图nextq的储存示意图*类型名:questions这个结构提供空间给问题和相应的答案structquestion!stringqtextMaxLinesPerQuestion+1;answer
4、!answersMaxAnswersPerQuestion;intnAnswers;intlinenumber;定义questionT为结构体类型,其中包括字符串数组qtext、属于answerT类型的数组answers、整形变量IIAnSwerS和IinenUmber,而qtext用于储存一个问题的文本,answers用于储存一个问题的每一个答案,nAnswers用于储存一个问题相应答案的个数,IirlenUnlber用于储存每个问题所占行数的行号。qtext L n的储存示思图answers m的储存示意图结共构3共m个类型为T类型的answerT的结构体nAnswers的储存示意图1.i
5、nenumber的储存示意图*类型名:CoUrSeDB,这个结构提供空间给文件主题和问题structCourseDBstringtitle;question?questionsMaxQuestions+1;);定义courseDB为结构体类型,其中包括字符串变量title和属于question1类型的数组questons,而title用于储存题目文本,questions用于储存问题和相应的答案。courseDB的储存示意图questionsN的储存示意图有MaxAnswersPerQuestiOn个类型为answerT的结构体有N个类型为queB.onT的结构体2.外部数据文件的格式说明c+程
6、序设计复习1复习int或bool类型?输入:int/bool请选择:int:2bool:102判断题:int可以有小数部分。请输入:(对/错)说明:如左图所示,首行为文本题目(尽量控制在一行内且不能出现空格,否则会出现问题),其次是问题的布局,每一个问题的首行为问题的序号1、2、3、,接着换行写入问题的主要内容,问题完毕后,换行,以“”为标3.函数设计说明:* 函数原型:voidReadQuestionText(infile,question);函数功能:这个函数将问题的文本读入问题数据结构,记录问题文本所占用的行数。这个问题文本结束的标志是EndMarker,即“”的标记。函数算法描述:先定
7、义Ch为字符串变量,再从文件中读取一行数据储存于字符串变量Ch中,如若Ch不等于结束标志“”且不是空行,则使问题文本行数增加1,最后可得问题文本所占用的总行数。* 函数原型:VOidWriteQuestionText(question1*q)函数功能:这个函数根据问题序号显示问题题目内容函数算法描述:通过循环,将每一个问题的文本一行行地输出。* 函数原型:intFindWriteAnswer(stringans,question?*q,intnum)函数功能:这个函数用于查找并返回与答案匹配的相应的题号。函数算法描述:从主调函数中,传入参数ans、结构体questionT的地址和题号num,通
8、过循环,倘若输入的答案与所给答案相同,则返回相应答案的下一题题号,倘若不相同,则返回原题号num。* 函数原型:voidAskQuestion(intnum)函数功能:这个函数用于提出问题,这必须由调用才可分配,无返回值。函数算法描述:通过循环,调用WriteQUeStiOnTeXt函数输出问题,再由测试者从函数中输入答案,再调用FindWriteAnswer函数返回下一题题号赋值于num,如果num的值为下一题号,则再次执行循环,如果num的值为-L则跳出循环。四、结果分析1.测试方法:先输入文件名(文件名后需添加“.dat”),再按回车键则如图显示:S3F:CYuYanbinwwtemp.
9、exe-EH输入文件名:Jf3.dat)f3.data,泗隔试:一分钟测出你IIjl实的一面你IB时的恋人电话给你,你接不接??物拼营愉入法半:再按题目指示输入答案:S3F:CYuYanbinwwtemp.exe植入文件名:)f3.dat)f3.dat-C分别储存多行题目,利用循环,一旦遇到空行则跳出循环。通过本次程序设计,学会了如何让程序与外界文件结合,并加深了对一些程序常识的理解。参考文献1谭浩强.C+程序设计(第2版)清华大学出版社2周蔼如林伟健.C+程序设计基础电子工业出版社附录/ 类型名:questionT*这个结构提供空间给问题*qtext用于储存每一个问题answers用于储存每
10、个问题的每一个可能的答案*nAnswers为每一个答案的字节序号这个程序执行一个简单的程序化教学过程。*/#include#include#includeusingnamespacestd;* MaxQuestions-问题的最大个数* MaxLinesPerQuestion-每一个问题占有的最多行数* MaxAnswersPerQuestion-每一个问题答案的最多个数* EndMarker-问题文本的字符串标记结尾*/# defineMaxQuestions100# defineMaxLinesPerQuestion100# defineMaxAnswersPerQuestion10#defineEndMarker,* 类型名:answerT* 这个结构提供空间给每个问题可能的答案* ans是为答案提供空间的字符串变量* nextq是下一问题的编号* /structanswerT(stringans;intnextq;*linenumber为每一个问题的行序号*/structquestionT