开发工具:
文件大小: 789kb
下载次数: 0
上传时间: 2012-09-24
详细说明:一.问题描述:编写一个应用程序实现程序化教学,程序必须完成以 下功能:
向学生提问题;
从学生处获得答案;
根据学生的答案继续选择下一个问题。
二.在该应用程序的概要设计中,从以下几个方面进行考虑:
如何在你的程序中表示程序化教学课程所需的信息?在设计阶段,需要开发一个合适的数据结构,它可以是记录和数组的结合。
课程的数据文件的格式是怎样的?(数据文件由所教授课程的老师编辑操作而非程序员)
如何将数据文件使用的外部表示转换为内部表示?
如何编写程序对数据库进行操作?
三.问题的框架:
程序运行的基本操作步骤如下:
提出当前的问题:一个问题可以有一行或多行文本组成,这些文本可以用字符串表示;
从学生处获取答案:答案也可以由字符串表示。
查看为该问题准备的一系列答案:如果学生的答案在上述答案中列出,则参考数据结构来选择新的问题。如果学生的答案与提供的答案不符,则告知学生结果并提供另一次机会回答问题。
四.数据的表示
为使该应用程序拥有较好的可移植性,关于某门课程的所有信息必须存入一个数据文件中,而不是直接将它们写入程序。程序的任务是读取数据文件,在内部数据结构中存储信息并处理该结构。设计数据结构的过程包括两个步骤:
首先,需要设计一个供程序使用的内部结构。内部数据结构由自定义结构体类型定义组成,其中结合了数组和记录,因而可以反映真实世界中信息的组成方式。
其次,需要设计能够反映数据文件中信息如何存储的外部结构。
这两个步骤是紧密关联的,主要是因为他们表示同样的信息。但是这两种结构是为了不同目的而设计的,内部结构应便于程序员使用,而外部结构需要为课程设计者服务,不会在程序操作方面遇到太多困难。
(一) 设计内部表示
先设计一个包含了必需信息的数据结构,用自顶向下的方法从最高层的结构开始设计,再逐渐增加细节并完善。数据库的设计中有一个重要概念—封装:将相关的信息结合起来放入结构中,并作为整体处理。对于一个大型数据库来说封装的过程是有层次的,且必须在每一个层次上考虑细节。在最高层,需要将整个数据库作为一个变量考虑,它包含了所需的全部信息。如下图所示,将数据库表示为指向某结构的指针,该结构的内容留待后面考虑。当你需要将整个数据库传递给函数时,你只需传递变量db即可,这是一个易于操作的指针,利用它可以访问其他数据,只有当函数需要对数据库中个别成员进行操作时,才需要查看结构中的细节。
课程数据库由标题和问题组成
问题由文本组成,其中包括多行文件以及一系列可能的答案,这两个结构都可由数组表示,问题的文本是字符串的数组,每一个字符串包含了一行的内容。而答案存储在一个结构较为复杂的数组中
通常情况下,需要提供一个机制来追踪数组的有效大小,通常比所分配的空间小一些。记录有效大小可以利用下面两种方式:
可以在数组的最后一个只后面增加一个标记值;
可以将元素的个数存入一个整型变量,并将其作为记录的一部分。
每个问题的答案通常由下面的内容组成:标准答案以及相应的下一个问题。标准答案为一个字符串,而下一个问题可以有存放了问题编号的变量表示。相应的结构如下图
ans nextQ
参考数据结构设计及函数原型设计如下:
#define MaxQuestions 100
#define MaxLinesPerQuestion 100
#define MaxAnswersPerQuestion 10
#define EndMarker "-----"
//数据结构
struct answerT
{string ans;
int nextq;
};
struct questionT
{string qtext[MaxLinesPerQuestion+1];
answerT answers[MaxAnswersPerQuestion];
int nAnswers;
};
struct courseDB
{string title;
questionT *questions[MaxQuestions+1];
};
//函数声明
courseDB * ReadDataBase();
bool ReadOneQuestion(fstream &infile;, courseDB *course);
void ReadQuestionText(fstream &infile;,questionT *q);
void ReadAnswers(fstream &infile;, questionT *q);
void ProcessCourse(courseDB *course);
void AskQuestion(questionT *q);
int FindAnswer(s
(系统自动生成,下载前可以参看下载内容)
下载文件列表
相关说明
- 本站资源为会员上传分享交流与学习,如有侵犯您的权益,请联系我们删除.
- 本站是交换下载平台,提供交流渠道,下载内容来自于网络,除下载问题外,其它问题请自行百度。
- 本站已设置防盗链,请勿用迅雷、QQ旋风等多线程下载软件下载资源,下载后用WinRAR最新版进行解压.
- 如果您发现内容无法下载,请稍后再次尝试;或者到消费记录里找到下载记录反馈给我们.
- 下载后发现下载的内容跟说明不相乎,请到消费记录里找到下载记录反馈给我们,经确认后退回积分.
- 如下载前有疑问,可以通过点击"提供者"的名字,查看对方的联系方式,联系对方咨询.