文档库 最新最全的文档下载
当前位置:文档库 › 数据结构课程设计报告书 单项选择题标准化考试系统

数据结构课程设计报告书 单项选择题标准化考试系统

数据结构课程设计报告书 单项选择题标准化考试系统
数据结构课程设计报告书 单项选择题标准化考试系统

《数据结构与算法I》课程设计报告

课设题目:单项选择题标准化考试系统

学生姓名:

学号:

同组同学:

完成日期:

成绩:

目录

一、设计流程 (1)

二、需求分析 (1)

三、总体设计 (2)

四、详细设计 (3)

五、系统测试 (14)

六、总结 (19)

七、参考文献 (19)

一本次课程设计的流程

(1)需求分析

(2)试题的录入

(3)试题的抽取

(4)试题的删除

(5)答题

(6)自动判卷

(7)系统测试

(8)退出系统

二需求分析

1. 课程设计名称及内容

设计一单项选择题标准化考试系统,实现考试的标准化管理。

2.设计方案提示

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

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

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

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

(5) 自动判卷:系统可根据用户答案与标准答案的对比实现判卷并给出成绩。

1.总的叙述

1、用来保存试题库,可以用到”Struct TestNode Testquestions”结构体数组,将试题一一对应

的保留下来,放在相应的文件里;

2、试题的录入,可以定义一个” Status InsertNode(int &N)”函数将试题录入;

3、试题的抽取,可以定义一个” void printNode(TestNode p,int n)”的函数,用到”Rand”

函数进行随机抽取;

4、答题方面,,则定义一个” void answer(int sum)”函数用于答题者的输入答案;

5、自动判卷,则可以定义一个” Status Match(TestNode p,char m)”函数,用来对比答题

者答案

和正确答案,给出判断正确与否;

6、存储方面每次插入和删除操作都能自动存储试题至文档。

7、用一个main函数将上述各个函数功能块连接起来,实现”单项选择题标准化考试系统”的各个方面的功能,完成设计

1.模块流程

(1)答题功能模块

(2)显示功能结构

(4)结构体

程序中主要用到了结构体数组,定义类型,如typedef int Status等,用结构体数组可以使得程序比较简便,易于读懂,免去频繁的赋值,而用定义类型,可以使得程

序具有移植性。

2.功能模块

(1)试题的录入模块

Status InsertNode(int &n){

// printf("%d",n);

int i=0,j;

FILE *fp;

if((fp=fopen("exam.txt","wb+"))==NULL){

printf("Cannot open file.");

getchar();

exit(1);

}

// printf("%d",n);

while(!feof(fp)){

fread(&Testquestions[i],sizeof(TestNode),1,fp);

i++;

}

// printf("%d",n);

// printf("%d",n);

printf("请输入题目:");

gets(Testquestions[n].subject);

gets(Testquestions[n].subject);

printf("请输入选项A:");

gets(Testquestions[n].option1);

printf("请输入选项B:");

gets(Testquestions[n].option2);

printf("请输入选项C:");

gets(Testquestions[n].option3);

printf("请输入选项D:");

gets(Testquestions[n].option4);

printf("请输入答案:");

scanf("%c",&Testquestions[n].result);

getchar();

// printf("%d",n);

n++;

// printf("%d",n);

for(j=0;j

fwrite(&Testquestions[j],sizeof(TestNode),1,fp); }

fclose(fp);

system("cls");

return TRUE;

}

(2)试题的输出模块

void printNode(TestNode p,int n){

//int i=0;

printf("(%d) ",n);

printf("%s\n",p.subject);

printf(" A %s ",p.option1);

printf(" B %s ",p.option2);

printf(" C %s ",p.option3);

printf(" D %s ",p.option4);

计算机与科学技术专业}

Status Match(TestNode p,char m){

if(m==p.result) return TRUE;

else return ERROR;

}

(3)答题判卷模块

void answer(int sum){

int a,Num,s[100];

float score=0;

char r;

for(int i=0;i

key:Num=rand()%sum;

for(a=0;a

if(s[a]==Num)

goto key;

s[i]=Num;

}

for(int i=0;i

printNode(Testquestions[s[i]],s[i]+1);

printf("\n请输入答案:");

scanf("%c",&r);

getchar();

if( Match(Testquestions[s[i]],r))

{

printf("\n答案正确!\a\n");

score++;

}

else printf("\n答案错误!\a\n");

}

printf("\n你的总成绩为:%f\n",score/sum*100); }

(4)试题的删除模块

Status DeleteTitle(int *n){

int i=0,k,temp;

FILE *fp;

if((fp=fopen("exam.txt","wb+"))==NULL){

printf("Cannot open file.");

getchar();

exit(1);

}

while(!feof(fp))

{ fread(&Testquestions[i],sizeof(TestNode),1,fp);

i++;

}

//n=i-1;

printf("请输入所要删除的题目的题号:\n");

scanf("%d",&k);

getchar();

for(;k<=*n;k++){

// Testquestions[i]=Testquestions[i+1];

Testquestions[k-1]=Testquestions[k];

}

// Testquestions[*n]=Testquestions[0];

temp=*n;

*n=temp-1;

for(int j=0;j<*n;j++){

fwrite(&Testquestions[j],sizeof(TestNode),1,fp);

}

fclose(fp);

system("cls");

return TRUE;

}

(5)界面主函数模块

int main(void){

char flag='N';

int i, sum, choice;

int N=0, *p;

p=&N;

FILE *fp;

if((fp=fopen("exam.txt","rb+"))==NULL){

printf("Cannot open file!");

getchar();

exit(1);

}

while(!feof(fp)){

fread(&Testquestions[i],sizeof(TestNode),1,fp);

i++;

}

N=i-1;

fclose(fp);

while(flag=='N'||flag=='n'){

printf("\t\t\t单项选择题标准化考试系统\n ");

printf("\n");

printf(" \t\t\t 题库数量:%d\n",N);

printf(" \t\t\t1 进行答题并判卷\n"); //answer()

printf(" \t\t\t2 显示整张试卷内容\n");//printNode() printf(" \t\t\t3 插入试题\n");//InsertNode)()

printf(" \t\t\t4 删除试题\n");//DeleteTitle()

printf(" \t\t\t5 退出系统\n");

printf(" \t\t\t 请选择:");

scanf("%d",&choice);

switch(choice) {

case 1:system("cls"); //answer

printf("请输入你想要的答题数目:");

scanf("%d",&sum);

getchar();

while(sum>N||sum<=0) {

printf("请输入你想要的答题数目");

scanf("%d",&sum);

}

answer(sum);

break;

case 2:system("cls"); //printNode

for(i=1;i<=N;i++) {

printNode(Testquestions[i-1],i);

printf("\n");

}

break;

case 3:system("cls"); //InsertNode

InsertNode(N);

break;

case 4:system("cls"); //DeleteTitle

DeleteTitle(p);

printf("删除成功!\n");

break;

case 5:printf("你将退出系统(Y/N)?"); //exit scanf("%c",&flag);

getchar();

if(flag=='Y'||flag=='y')

return TRUE;

system("cls");

break;

default:printf("请输入正确选择!\n");

}

}

return 0;

}

五系统测试1.运行系统,进入界面

2.开始插入试题

进行插入试题连续插入两道题

显示整张试卷内容

3.进行答题

进行答题

4.退出系统

退出系统

5.检查文件

相关文档