C语言课程设计(单项选择题标准化考试系统)报告

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

重庆理工大学

课程设计课程程序设计基础 C 题目 C 语言综合程序设计院系名称

班级

学生姓名学号

指导教师

评阅教师

时间2011.6

1 问题描述

题目十四:单项选择题标准化考试系统设计功能要求:

(1)、用文件保存试题库。(每个试题包括题干、 4 个备选答案、标准答案)

(2)、试题录入:可随时增加试题到试题库中

(3)、试题抽取:每次从试题库中可以随机抽出N道题(N 由键盘输入)

(4)、答题:用户可实现输入自己的答案

(5)、自动判卷:系统可根据用户答案与标准答案进行评分。

2 系统分析

2.1 题目要求

程序分 4 个函数来实现菜单操作、将题目装入内存、开始答题、题目的录入。

1. 菜单操作:

Main 函数,实现程序的菜单操作。根据用户选择的菜单的不同选项调用不同的函数,实现“开始答题” 、“添加试题” 、“退出系统”等功能。

2. 将试题装入内存:

此函数由“开始答题”函数调用。调用此函数时传递一个整型参数m,函数开辟内存空间将试题文件(“ C:\test.txt ”)中第m道题装入内存中,并返回总题数。如果传递参数m 为-1 ,函数将直接返回试题文件中所储存的总题数,不将任何试题装入内存中。

3. 开始答题:

函数会让用户输入要答的题目数并进行判断,若用户要求的答题数大于总题数程序会要求用户重新输入。程序生成随机数并判断是否合法,如果合法就调用“将试题装入内存”函数,参数为随机数。在屏幕上输出题干和选项并让用户输入答案。判断用户输入答案是否正确。

4. 添加试题:

打开储存试题的文件(“ C:\test.txt ”),开辟内存空间。进行试题信息输入。自动保存文件。

2.2 算法设计

(1)模块一:菜单操作模块该模块实现程序的菜单操作。

实现算法如下○1 在屏幕上输出菜单选项。

○2 接受用户输入。

○3 判断用户输入,跳转到对应函数入口。

(2) 模块二:将题目装入内存模块函数开辟内存空间将试题文件中题目装入内存中。

实现算法如下:

○1遍历文件判断回车符个数(计算题目数) 。

○2 根据提供参数判断是否将当前题目装入内存。

○3开辟内存空间,将题目信息装入内存。

○4 关闭文件返回题目总数。

(3) 模块三:开始答题模块

函数会让用户输入要答的题目数,在屏幕上输出题干和选项并让用户输入答案。

判断用户输入答案是否正确。

实现算法如下:

○1接受用户输入题目数,判断是否合法(大于0、小于总题数) 。

○2置随机数并判断随机数是否合法。

○3 调用将题目装入内存模块题目装入内存。

○4在屏幕上输出题目,接受用户输入答案。

○5判断用户输入的答案是否正确,输出答题结果统计。

(4) 模块四:添加试题模块打开储存试题的文件进行试题信息输入。

实现算法如下:

○1打开文件。

○2 开辟内存空间,接受用户输入题目信息。

○3 判断用户输入是否合法。

○4 写到文件并保存。

2.3 流程图

1. 菜单操作模

块:

2. 将题目装入内存模块:

3. 开始答题模

块:

4. 添加试题模块:

2.4 关键问题

文件读写时文件指针的移位:

{ 当用 fgetc() 函数遍历文件时文件指针是顺序移动的, 当遇到回车符时才会判断出文件

在第几行。而当读取文件信息的时候文件指针的位置应该在行首,这是就要用到 数将文件指针移位。而且还要恢复文件指针的位置,用于继续判断当前是文件的第几行。

3 系统实现

3.1 源代码

#include

#include

#define LEN sizeof(struct test)

struct test

{

char que[81];

char answer1[81];

char answer2[81];

char answer3[81];

char answer4[81];

char ture;

struct test *next;

};

struct test *head;// 全局变量储存第一个结构体的指针

int zts(int m)//

将第 m 道题装入内存,输入 -1 时将返回总题数

{ FILE *fp;

struct test *p1=NULL;

char ch,ch1[5];

int i,n=0,wz,py;

if((fp=fopen("c:\\test.txt","r"))==NULL)// 只读方式打开文件

{

printf(" 文件打开失败请检查 C 盘下的 test.txt 文件。 \n");

exit(0);

}

do

py=1;

ch=fgetc(fp);

fseek() 函

for(i=0;ch!='\n'&&ch!=-1;i++)// 循环判断回车符个数

{

py++;

ch=fgetc(fp);

}

n++; // 储存行数的变量

if(n==m)// 如果当前行数与传入参数相等

{

if(p1==NULL)// 判断是否是第一次开辟内存空间

{

p1=(struct test *)malloc(LEN);

head=p1;

p1->next=NULL;

}

else

{

p1->next=p1;

p1=(struct test *)malloc(LEN);

p1->next=NULL;

}

wz=ftell(fp);// 记录指针当前位置

fseek(fp,(wz-py-1),0);// 调整指针位置到行首

fscanf(fp,"%s%s%s%s%s%s",&p1->que,&p1->answer1,&p1->answer2,&p1->answer3,&p 1->answer4,&ch1);

fseek(fp,wz+1,0);// 调整指针位置到行末

p1->ture=ch1[0];

break;// 将数据装入内存后跳出循环

}

}while(!feof(fp));// 文件结束跳出循环

fclose(fp);

return n;// 返回题目总数n

}

void exe1()

相关文档
最新文档