华南理工大学C++程序设计课程设计报告.docx
- 文档编号:2314436
- 上传时间:2022-10-28
- 格式:DOCX
- 页数:17
- 大小:221.24KB
华南理工大学C++程序设计课程设计报告.docx
《华南理工大学C++程序设计课程设计报告.docx》由会员分享,可在线阅读,更多相关《华南理工大学C++程序设计课程设计报告.docx(17页珍藏版)》请在冰豆网上搜索。
华南理工大学C++程序设计课程设计报告
课程设计报告书
《C++程序设计》课程设计
学院数学学院
专业数学与应用数学(统计方向)
学生姓名xxx
学生学号xxxxxxxxxx
指导教师xxx
课程编号
课程学分2学分
起始日期2015年7月16日
教
师
评
语
教师签名:
日期:
成
绩
评
定
备
注
基于记录的应用程序设计
一、选题背景
本课题应解决的主要问题:
编写一个应用程序实现程序化教学
应达到的技术要求:
该程序可以完成以下功能:
向学生提问题;从学生处获得答案;根据学生的答案继续选择下一个问题。
本设计的指导思想:
在程序中表示教学课程所需的信息;在设计阶段,设计一个合适的数据结构;将数据文件使用的外部表示转换为程序内部表示;编写程序对内部数据库进行操作。
二、方案论证(概要设计)
设计原理(理念):
在老师所给的参考数据结构设计及函数原型设计的基础上,略加修饰,填充函数原型的内部结构,使得函数具备所需要的功能,最终能使程序实现程序化教学。
例如:
voidReadQuestionText(ifstream&infile,questionT*q)这个函数将问题的文本读入问题数据结构,这必须由调用才可分配。
这个问题文本结束的标志是EndMarker,即“-----”的标记。
voidReadAnswers(ifstream&infile,questionT*q)这个函数将问题答案的文本读入答案数据结构。
voidAskQuestion(intnum)这个函数用于提出问题。
voidWriteQuestionText(questionT*q)这个函数根据问题序号显示问题题目内容。
voidFindWriteAnswer(stringans,questionT*q)这个函数用于查找与输入答案匹配的内容。
三、过程论述(详细设计)
1.数据结构设计
*类型名:
answerT,这个结构提供空间给每个问题可能的答案
structanswerT
{
stringans;
intnextq;
};
定义answerT为结构体类型,其中包括一个字符串变量ans和一个整型变量nextq,而ans用于储存一个问题的一个答案,nextq用于储存下一个问题的题号。
nextq的储存示意图
……
ans的储存示意图
*类型名:
questionT,这个结构提供空间给问题和相应的答案
structquestionT
{stringqtext[MaxLinesPerQuestion+1];
answerTanswers[MaxAnswersPerQuestion];
intnAnswers;
intlinenumber;
};
定义questionT为结构体类型,其中包括字符串数组qtext[]、属于answerT类型的数组answers[]、整形变量nAnswers和linenumber,而qtext[]用于储存一个问题的文本,answers[]用于储存一个问题的每一个答案,nAnswers用于储存一个问题相应答案的个数,linenumber用于储存每个问题所占行数的行号。
……
……
…
……
共n个
qtext[n]的储存示意图
answers[m]的储存示意图
……
……
……
nAnswers的储存示意图
Linenumber的储存示意图
*类型名:
courseDB,这个结构提供空间给文件主题和问题
structcourseDB
{stringtitle;
questionTquestions[MaxQuestions+1];
};
定义courseDB为结构体类型,其中包括字符串变量title和属于questionT类型的数组questons,而title用于储存题目文本,questions[]用于储存问题和相应的答案。
………
courseDB的储存示意图
questions[N]的储存示意图
……
……
……
……
有MaxAnswersPerQuestion个类型为answerT的结构体
有N个类型为questionT的结构体
……
……
有MaxAnswersPerQuestion个类型为answerT的结构体
……
……
……
2.外部数据文件的格式说明
3.函数设计说明:
*函数原型:
voidReadQuestionText(infile,question);
函数功能:
这个函数将问题的文本读入问题数据结构,记录问题文本所占用的行数。
这个问题文本结束的标志是EndMarker,即“-----”的标记。
函数算法描述:
先定义ch为字符串变量,再从文件中读取一行数据储存于字符串变量ch中,如若ch不等于结束标志“-----”且不是空行,则使问题文本行数增加1,最后可得问题文本所占用的总行数。
*函数原型:
voidReadAnswers(ifstream&infile,questionT*q)
函数功能:
这个函数将问题答案的文本及其相应的题号读入答案数据结构。
函数算法描述:
在分界符“-----”后,用q->answers[++(q->nAnswers)].ans数组分别将各个答案储存起来,再以答案后的“:
”为标志,用q->answers[q->nAnswers].nextq数组将其后的题号存储起来。
*函数原型:
voidWriteQuestionText(questionT*q)
函数功能:
这个函数根据问题序号显示问题题目内容
函数算法描述:
通过循环,将每一个问题的文本一行行地输出。
*函数原型:
intFindWriteAnswer(stringans,questionT*q,intnum)
函数功能:
这个函数用于查找并返回与答案匹配的相应的题号。
函数算法描述:
从主调函数中,传入参数ans、结构体questionT的地址和题号num,通过循环,倘若输入的答案与所给答案相同,则返回相应答案的下一题题号,倘若不相同,则返回原题号num。
*函数原型:
voidAskQuestion(intnum)
函数功能:
这个函数用于提出问题,这必须由调用才可分配,无返回值。
函数算法描述:
通过循环,调用WriteQuestionText函数输出问题,再由测试者从函数中输入答案,再调用FindWriteAnswer函数返回下一题题号赋值于num,如果num的值为下一题号,则再次执行循环,如果num的值为-1,则跳出循环。
四、结果分析
1.测试方法:
先输入文件名(文件名后需添加“.dat”),再按回车键则如图显示:
再按题目指示输入答案:
如果输错答案,程序会把题目重新显示并要求再次输入:
当全部题目完成后,程序会问是否重新测试,若输入是,则返回第一题重新测试:
若输入否,则结束程序:
2.调试过程总结:
*编译时遇到的主要典型错误:
编程时循环范围掌握不当,导致达不到原有目的,甚至陷入死循环。
解决方案:
重新思考,适当控制循环范围,使循环能够顺利跳出。
*连接时遇到的主要典型错误:
文件名输入错误,少输入了“.dat”。
解决方案:
补充“.dat”即可。
*编译和连接都成功,但结果不对时,主要典型错误:
当在某个问题里输入了与所供选答案都不同时,程序会直接跳出循环,结束程序,而不是重新问问题。
解决方案:
修改循环中的某个函数的返回值,使得输入错误答案不结束程序,而是再次询问同一问题。
5、课程设计总结
本程序设计基本上能够按要求实现程序化教学,但尚存在不足,如题目不能超过一行,否则编程就会出现错误,为了改进这个缺点,设置多个title1、title2、……分别储存多行题目,利用循环,一旦遇到空行则跳出循环。
通过本次程序设计,学会了如何让程序与外界文件结合,并加深了对一些程序常识的理解。
参考文献
[1]谭浩强.《C++程序设计(第2版)》清华大学出版社
[2]周蔼如林伟健.《C++程序设计基础》电子工业出版社
附录
/*这个程序执行一个简单的程序化教学过程。
*/
#include
#include
#include
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];
};
co
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 华南理工大学 C+ 程序设计 课程设计 报告