《数据结构与算法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<n;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<sum;i++){key:Num=rand()%sum;for(a=0;a<i;a++)if(s[a]==Num)goto key;s[i]=Num;}for(int i=0;i<sum;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"); //answerprintf("请输入你想要的答题数目:");scanf("%d",&sum);getchar();while(sum>N||sum<=0) {printf("请输入你想要的答题数目");scanf("%d",&sum);}answer(sum);break;case 2:system("cls"); //printNodefor(i=1;i<=N;i++) {printNode(Testquestions[i-1],i);printf("\n");}break;case 3:system("cls"); //InsertNodeInsertNode(N);break;case 4:system("cls"); //DeleteTitleDeleteTitle(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.检查文件六总结通过这次课程设计,增加了我学习软件技术的兴趣,让我对于程序设计的流程更加了解,对程序本身的结构印象深刻。