C语言单项选择题标准化考试系统
- 格式:doc
- 大小:1.36 MB
- 文档页数:17
课程报告课程名称:程序设计实践专业班级:学生姓名:学号:任课教师:唐建国学期:2013-2014学年第二学期课程报告任务书成绩评定教师:目录目录01 需求分析12 系统设计1.数据结构设计1.功能模块设计1主菜单模块2:教师菜单模块2:学生菜单模块33 系统实现及关键代码3基本功能 3菜单设计 3文件读写 4删除题目信息 5拓展功能 5密码设计 5考试函数 64系统演示7基本功能 7文件读写功能 7插入题目功能 7拓展功能 8密码功能 8考试功能 85总结9系统缺陷与不足9系统可扩展功能96课程心得总结10参考书籍:101 需求分析根据程序要求分析,我们认为整个程序应该分为4个大块,其中包括主函数以及其他功能函数:注册登录模块,学生操作模块,教师操作模块。
各个模块又利用小模块实现小功能划分,教师操作模块由创建题库、插入题目、修改题目、删除题目、显示题目、题目排序、查询题目这7个模块组成,而其中查询题目又包含了题号查询、题目查询和模糊查询3个小模块;注册登录模块由4个函数完成对学生教师不同身份的注册及登录,学生登录后可以选择答题数量组成试卷考试并得到成绩。
通过这些模块的组合连接,就可以实现一个完整的标准化考试系统。
2 系统设计.数据结构设计void Student_login();/*学生登录*/void Teacher_login();/*教师登录*/void denglu();/*主菜单*/void Addstudent(char id[],char password[]);/*将学生账号密码存入文件*/void Addteacher(char id[],char password[]);/*将教师账号密码存入文件*/void Teachermenu();/*教师菜单*/void Studentmenu();/*学生菜单*/void PrintDoc(struct text * head);/*从文件中读取题库信息并输出*/void NameQueDoc(struct text * head);/*按照题目查询信息*/void NumberQueDoc(struct text * head);/*按照题号查询信息*/void NameVagueDoc(struct text * head);/*按照题目模糊查询信息*/void kaoshi(struct text *head,int sum,int k);/*学生考试菜单*/void fprint(struct text *head);/*将链表写入文件*/struct text * CreateDoc();/*创建试题库并通过链表存入文件*/struct text *load();/*从文件读取题库信息并存入链表*/struct text * DeleteDoc(struct text * head);/*删除题库题目信息*/struct text * ReviseDoc(struct text * head);/*修改题库题目信息*/struct text * InsertDoc(struct text * head,struct text * book);/*插入题目*/struct text * SortDoc(struct text * head);/*对题库题目进行排序*/struct text * QueDoc(struct text * head);/*题库查询菜单*/int count(struct text *head);/*统计题库中题目总数*/int yanzheng(struct text *head,int m);/*验证题号是否重复*/char *Getpasswd(void);/*将注册登录的密码转为星号*/struct text{int number;char que[81];char answer1[81];char answer2[81];char answer3[81];char answer4[81];char ture[81];struct text *next;};/*定义text 结构*/主菜单模块:教师菜单模块:学生菜单模块3 系统实现及关键代码基本功能菜单设计void denglu(){int choice,choi;printf("\n");printf(" 〒〒〒〒〒欢迎进入标准化考试系统:〒〒〒〒〒\n");printf(" ★★★★★★★welcome★★★★★★★\n");printf("\t *【1】注册账户*\n");printf("\t *【2】登陆账户*\n");printf("\t *【0】退出系统*\n");printf("\n");printf("请输入你的选择:");scanf("%d",&choice);system("cls");xt","w"))==NULL){printf("Can not open the file!\n");exit(0);}for(p1=head;p1;p1=p1->next){fprintf(fp,"%d %s %s %s %s %s %s\n",p1->number,p1->que,p1->answer1,p1->answer2,p1->answer3,p1->answer4 ,p1->ture);}fclose(fp);}/*------------------------------------------从文件读取题库信息--------------------------*/struct text *load(){FILE *fp;struct text *head,*tail,*p1;head=tail=NULL;if((fp=fopen("G:\\试题库.txt","r"))==NULL){printf("文件输入错误!\n");exit(0);}if(!feof(fp)){while(!feof(fp)){p1=(struct text *)malloc(sizeof(struct text));fscanf(fp,"%d%s%s%s%s%s%s\n",&p1->number,p1->que,p1->answer1,p1->answer2,p1->answer3,&p1->answer4 ,&p1->ture);if(head==NULL)head=p1;elsetail->next=p1;tail=p1;}tail->next=NULL;fclose(fp);return head;}return NULL;}删除题目信息struct text * DeleteDoc(struct text * head){int a;struct text *p1,*p2;printf("请输入要删除题目的题号:");scanf("%d",&a);while(head!=NULL&&head->number==a){p2=head;head=head->next;free(p2);}if(head==NULL){return NULL;}p1=head;p2=head->next;while(p2!=NULL){if(p2->number==a){p1->next=p2->next;free(p2);}elsep1=p2;p2=p1->next;}fprint(head);return head;}拓展功能密码设计char *GetPasswd(void){char c;int i=0;char passwd[6]={NULL};while ((c=getch())!='\r')passwd[i]=c;putchar('*');i++;if (i>=6){break;}}return passwd;}考试函数void kaoshi(struct text *head,int sum,int k)/*随机抽题考试*/{int score=0,a[1000],i,j;char answer[81],answer1[81];srand((unsigned)time(NULL)); /*保证随机出来不重复的数字*/ for(i=0;i<sum;i++){a[i]=rand()%k+1; /*随机产生1~k之间一个整数*/ for(j=0;j<i;j++)if(a[i]==a[j])i--;}for(i=0;i<sum;i++){struct text*p;p=head;while(p!=NULL){if(p->number==a[i])break;p=p->next;}printf("题号:%d\n",p->number);printf("题目:%s\n",p->que);printf("选项A:%s 选项B:%s\n",p->answer1,p->answer2);printf("选项C:%s 选项D:%s\n",p->answer3,p->answer4);strcpy(answer,p->ture);printf("\n");printf("请输入答案:");scanf("%s",answer1);if(strcmp(answer,answer1)==0){printf("\n");score++;}else{printf("答案错误!\n");printf("正确答案为:%s\n",answer);printf("\n");}}printf("您的总成绩为:%d",score);}/*学生通过此函数对随机的试题进行答题并得到自己的成绩*/ 4系统演示基本功能文件读写功能插入题目功能拓展功能密码功能考试功能5总结系统缺陷与不足这个考试系统里面的学生界面功能还待加强,可以给学生更多的组卷方式,例如老师创建题库时可以给题目信息增加一个章节的信息,然后学生可以根据章节来组卷考试。
c语言单项选择题标准化考试系统设计课程设计任务书学院、系:专业:学生姓名: 学号: 设计题目: 单项选择题标准化考试系统设计起迄日期:指导教师:1.设计目的设计单项选择题标准化考试系统。
2 任务概述(1)用文件保存试题库(每个试题包括题干、4个备选答案、标准答案). (2)试题录入:可随时在试题库中增加试题.(3)试题抽取:每次从试题库中可以随机抽出N道题(N由键盘输入). (4)答题:用户可以输入自己的答案.(5)自动判卷:系统可根据用户答案与标准答案的对比实现判卷并给出成绩. 3 模块划分单项选择体标准化考试系统判退添显答卷出加示题系试试统题题到库试题库4主要函数说明及N-S图(1)菜单Menu():用来给用户提供选项;输出菜单界面输入选项输入1 N Y添加Add 输入2 N Y ()函数添加Put输入3 N Y ()函数添加输入4 N Y Ask()函数exit(0)break break break(2)Read()函数:用于打开文件; FILE *fp ,int i=0 breakfp=fopen("单项选择题标准化考试系统设计.txt","r+")Y if(fp==NULL) Nprintf("文件打开失败");return 0;for(i=0;!feof(fp);i++)fprintf(fp,"%s %s %s %s %s %c\n",que[i].topic,que[i].a1,que[i] .a2,que[i].a3,que[i].a4,que[i].real);fclose(fp)return i(3)Save()函数:用于添加试题后保存试题;FILE *fpint i=0if((fp=fopen(“单项选择题标准化考试系统设计.txt”))==Null)Y Nprintf(“文件打开失败~”)i=0;i<n;i++fprintf(fp,”%s %s %s %s %s%c\n,que[i].topic,que[i].a1,que[i].a2,que[i].a3,que[i].a4,que[i] .real”) (4)Put()函数:用于显示试题;int i,nn=Read(que)打印表头i=0;i<n;i++fprintf(fp,”%s %s %s %s%s\n,que[i].topic,que[i].a1,que[i].a2,que[i].a3,que[i].a4”)getch()(5)Add()函数:用于添加试题(5)Adi FILE *fp int i,a,n . sruct question quen=Read(que)printf(“请输入增加试题的数目”)scanf(“%d“,&a);i=0;i<n; i++scanf(”%s %s %s %s%s%c\n,que[i].topic,que[i].a1,que[i].a2,que[i].a3,que[i].a4,que[i].real”)fprintf(fp,”%s %s %s %s%s%c\n,que[i].topic,que[i].a1,que[i].a2,que[i].a3,que[i].a4,que[i].real”)fclose(fp)(5)Ask()函数:用于答题并判卷。
目录目录 (1)单元练习题一 C语言基础知识 (3)一、判断题 (3)二、单项选择题 (4)三、读程序选择题 (7)四、程序填空题 (8)五、编程题..................................... 错误!未定义书签。
单元练习题二 C语言程序结构.. (9)一、判断题 (9)二、单项选择题 (9)三、读程序选择题............................ 错误!未定义书签。
四、程序填空题 (17)五、编程题.................................. 错误!未定义书签。
单元练习题三数组.. (21)一、判断题 (21)二、单项选择题 (22)三、读程序选择题............................... 错误!未定义书签。
四、程序填空题 (28)五、编程题..................................... 错误!未定义书签。
单元练习题四函数.. (33)一、判断题 (33)二、单项选择题 (34)三、读程序选择题 (40)四、程序填空题................................. 错误!未定义书签。
五、编程题..................................... 错误!未定义书签。
单元练习题五预处理................................ 错误!未定义书签。
一、判断题.................................. 错误!未定义书签。
二、单项选择题.............................. 错误!未定义书签。
三、读程序选择题............................... 错误!未定义书签。
四、程序填空题................................. 错误!未定义书签。
《高级语言程序设计》说明书设计题目:单项选择题标准化考试系统一、课程设计的内容题目:单项选择题标准化考试系统(一)功能要求:(1)用文件保存试题库。
(每个试题包括题干、四个备选答案、标准答案)(2)试题录入:可随时增加试题到试题库中(3)试题抽取:每次从试题库中可以随机抽出N道题(N由键盘输入)(4)答题:用户可实现输入自己的答案(5)自动判卷:系统可根据用户答案与标准答案的对比实现判卷并给出成绩。
(二)其它要求:(1)只能使用C/C++语言,源程序要有适当的注释,使程序容易阅读(2)至少采用文本菜单界面(如果能采用图形菜单界面更好)(3)学生可自动增加新功能模块(视情况可另外加分)(4)写出课程设计报告,具体要求见相关说明文档二、课程设计的要求与数据1、进一步掌握和利用C语言进行程设计的能力;2、进一步理解和运用结构化程序设计的思想和方法;3、初步掌握开发一个小型实用系统的基本方法;4、学会调试一个较长程序的基本方法;5、学会利用流程图或N-S图表示算法;6、掌握书写程序设计开发文档的能力。
三、课程设计应完成的工作1、编写完成相应题目的程序;2、编写课程设计报告,课程设计报告的内容应包括以下6个部分:1) 需求分析:包括设计题目、设计要求以及系统功能需求分析;2) 总体设计:包括系统总体设计框架和系统功能模块图;3) 详细设计:包括主要功能模块的算法设计思路以及对应的工作流程图;4) 调试分析过程描述:包括测试数据、测试输出结果,以及对程序调试过程中存在问题的思考(列出主要问题的出错现象、出错原因、解决方法及效果等,适当的包含结果截图);5) 总结:课程设计完成了哪些功能,有没有什么扩展功能?还有哪些地方需要改进?课程设计过程中的学习体会与收获、对本次课程设计的认识以及自己的建议等内容;6) 附录:主要源程序代码,含必要的注释。
3、答辩:在实验室建立程序运行的环境,并在指导教师的监督下,独立解决问题、运行程序和回答教师提出的问题。
标准化考试测试系统1.题目及任务要求 (3)2.系统分析 (3)3.模块分析 (3)4.模块设计 (3)5.运行结果 (6)6.设计总结 (8)7.心得体会 (8)8.源程序 (8)【题目及任务要求】标准化考试测试系统(B)1.用文件保存试题库(每个试题包括题干,4个备选答案和标准答案)2.试题录入:可随时增加试题到试题库中3.试题抽取:每次从试题库中可以随时抽出N道题(N由键盘输入)4.答题:用户可实现输入自己的答案5.自动判卷:系统可根据用户答案与标准答案对比实现判卷并给出成绩【系统分析】该系统由主程序和录入模块、抽取答题模块组成。
其中主程序提供用户进入该系统、选择功能和退出系统;录入模块可以让用户自行录入题目;抽取答题模块可以从试题库中抽取出用户规定的题目数并且供用户答题和自动评卷。
【模块分析】录入模块:用户从主界面选择‚1.录入题目‛后进入录入模块。
在本模块中,用户可以录入题目以及对应该题的答案。
单题录入完成后,该模块提示是否继续录入或返回主界面。
本模块使用指针开启关闭文件,使用do...while循环语句实现反复录入功能。
抽取答题模块:用户从主界面选择‚2.抽取答题‛后进入该模块。
在本模块中,用户可以自行抽取题目并答题,系统自动在打完每道题后给出答案并记录分数,最后公布分数。
本模块使用随机数函数random来随机抽取试题库中的题目;使用指针开启读入试题及答案文件;使用循环结构(for,while和do...while)实现连续答题和功能循环。
【模块设计】抽取答题模块流程图:完整流程图:【运行结果】开始界面:录入功能界面:抽取答题功能界面:退出界面:【设计总结】在设计并且编程的过程中,我遇到了很多难点,有几个已经超出了我的水平范围,在周遭同学和发达的网络帮助下我得以解决它们。
以下是这个标准化考试测试系统编程过程中遇到的难题:1,文件的读入读出因为当时学习的过程中,文件这一块内容比较简单的带过,因此我对文件读取这一方面的掌握并不是十分好。
课程设计任务书 学 专学院、系:生业: 姓 名: 学号: 设 计题 目: 单项选择题标准化考试系统设计起 迄日 期: 指 导教 师:1.设计目的设计单项选择题标准化考试系统。
2任务概述(1)用文件保存试题库(每个试题包括题干、4个备选答案、标准答案)(2)试题录入:可随时在试题库中增加试题.(3)试题抽取:每次从试题库中可以随机抽出N道题(N由键盘输入)(4)答题:用户可以输入自己的答案.(5)自动判卷:系统可根据用户答案与标准答案的对比实现判卷并给出成绩3模块划分单项选择体标准化考试系统Y NFILE *fp ,int i=0FILE *fp ,int i=0fp=fopen("单项选择题标准化考试系统设计.txt","r+")Y - if(fp==NULL) "~~~—_ --------------Nprintf(" 文件打开失败");return 0;for(i=0;!feof(fp);i++)fprintf(fp,"%s %s %s %s %s %c\n",que[i].topic,que[i].a1,que[i].a2,que[i].a3,que[i].a4,que[i].real);fclose(fp)return i (3) Save()函数:用于添加试题后保存试题;i=0 ;i<n; i++sea nf(” %s %s %s %s %%c\n,que[i].topic,que[i].a1,que[i].a2,que[i].a3,que[i].a4,que[i].real ”)(5)Ask()函数:用于答题并判卷。
----------------------------fclose(fp)5.程序运行数据及其结果6课程设计心得通过这次实训,感觉到自己还是差很多的,自己学到的还是远远不够的,练习的太 少了,好多知识点都记得不牢,还需要大量的练习。
目录1.课程设计目的 (1)2.课程设计题目描述和要求 (1)2.1课程题目 (1)2.2课程要求 (1)3.课程设计报告内容 (1)3.1算法描述 (1)3.2 源程序 (2)4.课程设计总结: (6)5.参考书目 (7)1 课程设计目的练习自己的动手能力,在学习理论的同时增强自己的编程能力,使理论与实践相结合,在学习书本的同时扩展自己的课外知识.2 课程设计题目描述和要求2.1课程题目单项选择题标准化考试系统2.2课程要求(一)功能要求:(1)用文件保存试题库。
(每个试题包括题干、4个备选答案、标准答案)(2)试题录入:可随时增加试题到试题库中(3)试题抽取:每次从试题库中可以随机抽出N道题(N由键盘输入)(4)答题:用户可实现输入自己的答案(5)自动判卷:系统可根据用户答案与标准答案的对比实现判卷并给出成绩。
(二)其它要求:(1)只能使用C/C++语言,源程序要有适当的注释,使程序容易阅读(2)至少采用文本菜单界面(如果能采用图形菜单界面更好)(3)学生可自动增加新功能模块(视情况可另外加分)(4)写出课程设计报告,具体要求见相关说明文档.3 课程设计报告内容3.1算法描述定义题目数组,选向数组,输入题目的及选向并给定正确答案。
输入所要答的题目数,然后进行答题。
输入的答案与标准答案进行比较,如果一致,则正确,否则错误。
最后根据题目数及答对题目数进行输出得分。
3.2 源程序#include <iostream>#include <fstream>#include "dos.h"using namespace std;struct question {char ask[200];/*选择题题目*/char answer[4][80];/*选择题选项*/int right;/*正确答案*/struct question *next;};//函数声明int MenuChoice(void); //选择菜单struct question *charu_timu(struct question *fst, const struct question *ad); //向列表中插入试题函数struct question *da_an_weizhi(struct question *seek, long len, long max); //确定一个读取答案的位置的函数void GetQuestion(struct question *src); //获取问题,选项,以及正确答案函数void bao_cun(const struct question *ed, FILE *saf); //将列表中的试题保存在文件中的函数struct question *LoadFile(struct question *td, FILE *laf); //从文件中读取题目,将题目添加到列表中的函数int GetAnswer(void); //输入选择题的答案void huida_Question(const struct question *que, int n); //回答问题函数main(){struct question *start = NULL, temp;long choice, line = 0, c;FILE *fp = fopen("wangkun.dat", "a+");while ((choice = MenuChoice()) != 3)if (choice == 1){GetQuestion(&temp);start = charu_timu(start, &temp);++line;/*统计列表的长度*/system("cls");}else if (choice == 2){c =8;while (c > 6 || c > line) {cout<<"请输入要回答的问题数量: ";cin>>c;}huida_Question(start, line);}return 0;}/*da_an_weizhi函数确定一个读取答案的位置,len代表要读取的答案数,max 代表列表的长度*/struct question *da_an_weizhi(struct question *seek, long len, long max) {int i;while (i--)seek = seek->next;//找到指定的位置return seek;}//向列表中插入试题struct question *charu_timu(struct question *fst, const struct question *ad){struct question *newPtr = (struct question *)malloc(sizeof(struct question));if (newPtr == NULL)exit(0);*newPtr = *ad;newPtr->next = fst;return newPtr;}/*获取问题,选项,以及正确答案*/void GetQuestion(struct question *src){int i = 0;cout<<"请输入选择题题目:"<<endl;cin>>src->ask;while (i < 4) {cout<<"请输入选项"<<char(i + 'A')<<"的答案:"<<endl;cin>>src->answer[i++];}src->right = GetAnswer();}/*从文件中读取题目,将题目添加到列表中*/struct question *LoadFile(struct question *td, FILE *laf){struct question temp;while (fread(&temp, 1, sizeof(struct question), laf))td = charu_timu(td, &temp);return td;}/*将列表中的试题保存在文件中*/void bao_cun(const struct question *ed, FILE *saf){fclose(saf);if ((saf = fopen("wankun.dat", "w")) == NULL)//以写的方式重新打开文件 return ;while (ed) {fwrite(ed, 1, sizeof(struct question), saf);ed = ed->next;}}//得到选择题的答案(不保证是正确的答案)int GetAnswer(void){char c=0 ;//必须进行初始化,避免出现偶然性的错误fflush(stdin);while (c < 'A' || c > 'D') //确保输入的答案是A, B, C, D中的一个{cout<<"请输入正确的答案: "<<endl;cin>> c;}return c;}//回答问题,并统计答对题目数,显示得分void huida_Question(const struct question *que, int n){int i = 0, t = n;char result[1001], *p = result;for (i = 0; n--; que = que->next) {cout<<que->ask<<endl;cout<<que->answer[0]<<endl;cout<<que->answer[1]<<endl;cout<<que->answer[2]<<endl;cout<<que->answer[3]<<endl;if ((*p = que->right) == (*(p + 1) = GetAnswer()))++i;}*p = '\0';cout<<"标准答案"<<" 您的答案 "<<endl;for (p = result; *p != '\0'; )cout<<*p<<" "<<*(p+1)<<endl;cout<<"您回答了"<<t<<"道题, 答对"<<i<<"道题目, 得分:"<< (float)i / t * 100.00<<endl;}//选择菜单int MenuChoice(void){int value;cout<<" **********************************"<<endl;cout<<" * *"<<endl;cout<<" * 1 :添加选择题 *"<<endl;cout<<" * 2 :回答选择题 *"<<endl;cout<<" * 3 :退出 *"<<endl;cout<<" * *"<<endl;cout<<" **********************************"<<endl;cin>>value;return value;}4 课程设计总结:经过编写程序,检验了我们的编程的水平,从这次编程中,我发现我才学到了一点点的知识,有好多的东西都不够熟练,还需要好好的努力学习,在编写这个程序时,出现了好多的问题,经过别人的帮助和自己的认真的调试才完成,这个程序还有好多的不足,还不够美观。
课程报告课程名称:程序设计实践专业班级:学生姓名:学号:任课教师:唐建国学期:2013-2014学年第二学期成绩评定教师:目录目录 01 需求分析 (1)2 系统设计 (1)2.1.数据结构设计 (1)2.2.功能模块设计 (2)2.2.1:主菜单模块 (2)2.2.2:教师菜单模块 (3)2.2.3:学生菜单模块 (4)3 系统实现及关键代码 (4)3.1基本功能 (4)3.1.1菜单设计 (4)3.1.2文件读写 (6)3.1.3删除题目信息 (7)3.2拓展功能 (8)3.2.1密码设计 (8)3.2.2考试函数 (9)4系统演示 (10)4.1基本功能 (10)4.1.1文件读写功能 (10)4.1.2插入题目功能 (10)4.2拓展功能 (11)4.2.1密码功能 (11)4.2.2考试功能 (12)5总结 (12)5.1系统缺陷与不足 (12)5.2系统可扩展功能 (12)6课程心得总结 (13)参考书籍: (14)1 需求分析根据程序要求分析,我们认为整个程序应该分为4个大块,其中包括主函数以及其他功能函数:注册登录模块,学生操作模块,教师操作模块。
各个模块又利用小模块实现小功能划分,教师操作模块由创建题库、插入题目、修改题目、删除题目、显示题目、题目排序、查询题目这7个模块组成,而其中查询题目又包含了题号查询、题目查询和模糊查询3个小模块;注册登录模块由4个函数完成对学生教师不同身份的注册及登录,学生登录后可以选择答题数量组成试卷考试并得到成绩。
通过这些模块的组合连接,就可以实现一个完整的标准化考试系统。
2 系统设计2.1.数据结构设计void Student_login();/*学生登录*/void Teacher_login();/*教师登录*/void denglu();/*主菜单*/void Addstudent(char id[],char password[]);/*将学生账号密码存入文件*/void Addteacher(char id[],char password[]);/*将教师账号密码存入文件*/void Teachermenu();/*教师菜单*/void Studentmenu();/*学生菜单*/void PrintDoc(struct text * head);/*从文件中读取题库信息并输出*/void NameQueDoc(struct text * head);/*按照题目查询信息*/void NumberQueDoc(struct text * head);/*按照题号查询信息*/void NameVagueDoc(struct text * head);/*按照题目模糊查询信息*/void kaoshi(struct text *head,int sum,int k);/*学生考试菜单*/void fprint(struct text *head);/*将链表写入文件*/struct text * CreateDoc();/*创建试题库并通过链表存入文件*/struct text *load();/*从文件读取题库信息并存入链表*/struct text * DeleteDoc(struct text * head);/*删除题库题目信息*/struct text * ReviseDoc(struct text * head);/*修改题库题目信息*/struct text * InsertDoc(struct text * head,struct text * book);/*插入题目*/struct text * SortDoc(struct text * head);/*对题库题目进行排序*/struct text * QueDoc(struct text * head);/*题库查询菜单*/int count(struct text *head);/*统计题库中题目总数*/int yanzheng(struct text *head,int m);/*验证题号是否重复*/ char *Getpasswd(void);/*将注册登录的密码转为星号*/ struct text{int number;char que[81];char answer1[81];char answer2[81];char answer3[81];char answer4[81];char ture[81];struct text *next;};/*定义text 结构*/2.2.功能模块设计2.2.1:主菜单模块2.2.2:教师菜单模块2.2.3:学生菜单模块3 系统实现及关键代码3.1基本功能3.1.1菜单设计void denglu(){char id[81],password1[81]={NULL},password2[81]={NULL};int choice,choi;printf("\n");printf(" 〒〒〒〒〒欢迎进入标准化考试系统:〒〒〒〒〒\n");printf(" ★★★★★★★welcome★★★★★★★\n");printf("\t *【1】注册账户*\n");printf("\t *【2】登陆账户*\n");printf("\t *【0】退出系统*\n");printf("\n");printf("请输入你的选择:");scanf("%d",&choice);system("cls");//清屏switch(choice){case 1:printf("\n");printf(" 〒〒〒〒欢迎进入标准化考试系统注册账户界面:〒〒〒〒\n");printf(" ★★★★★★★★★welcome★★★★★★★★★\n");printf(" 1-----学生注册2-----教师注册\n");printf(" 3-----返回上一级0-----退出系统\n");printf("\n");printf("请选择注册模式:");scanf("%d",&choi);system("cls");//清屏switch(choi){case 1:printf("\n");printf(" 〒〒〒〒欢迎进入标准化考试系统学生注册界面:〒〒〒〒\n");printf(" ★★★★★★★★★welcome★★★★★★★★★\n");printf("请输入学生:");scanf("%s",&id);printf("请输入密码,密码长度最大为6:");strcpy(password1,GetPasswd());printf("\n请再次输入密码:");strcpy(password2,GetPasswd());if(strcmp(password1,password2)==0)Addstudent(id,password1);elseprintf("\n两次密码不一致,返回主菜单!\n");denglu();case 2:printf("\n");printf(" 〒〒〒〒欢迎进入标准化考试系统教师注册界面:〒〒〒〒\n");printf(" ★★★★★★★★★welcome★★★★★★★★★\n");printf("请输入教师:");scanf("%s",&id);printf("请输入密码,密码长度最大为6:");strcpy(password1,GetPasswd());printf("\n请再次输入密码:");strcpy(password2,GetPasswd());if(strcmp(password1,password2)==0)Addteacher(id,password1);elseprintf("\n两次密码不一致,返回主菜单!\n");denglu();case 3:denglu();case 0:printf("系统即将关闭!\n");exit(0);default :printf("无效选项!\n");denglu();}case 2:printf("\n");printf(" 〒〒〒〒欢迎进入标准化考试系统注册账户界面:〒〒〒〒\n");printf(" ★★★★★★★★★welcome★★★★★★★★★\n");printf(" 1-----学生登录2-----教师登录\n");printf(" 3-----返回上一级0-----退出系统\n");printf("\n");printf("请选择登录模式:");scanf("%d",&choi);system("cls");//清屏switch(choi){case 1:Student_login();case 2:Teacher_login();case 3:denglu();case 0:printf("系统即将关闭!\n");exit(0);default :printf("无效选项\n");denglu();}case 0:printf("系统即将关闭!\n");exit(0);default :printf("无效选项!\n");denglu();}}3.1.2文件读写/*-----------------------------------------------将链表写入文件--------------------------------------*/ void fprint(struct text *head){FILE *fp;struct text *p1;if((fp=fopen("G:\\试题库.txt","w"))==NULL){printf("Can not open the file!\n");exit(0);}for(p1=head;p1;p1=p1->next){fprintf(fp,"%d %s %s %s %s %s %s\n",p1->number,p1->que,p1->answer1,p1->answer2,p 1->answer3,p1->answer4,p1->ture);}fclose(fp);}/*------------------------------------------从文件读取题库信息--------------------------*/struct text *load(){FILE *fp;struct text *head,*tail,*p1;head=tail=NULL;if((fp=fopen("G:\\试题库.txt","r"))==NULL){printf("文件输入错误!\n");exit(0);}if(!feof(fp)){while(!feof(fp)){p1=(struct text *)malloc(sizeof(struct text));fscanf(fp,"%d%s%s%s%s%s%s\n",&p1->number,p1->que,p1->answer1,p1->answer2,p1->answer3,&p1->answer4,&p1->ture);if(head==NULL)head=p1;elsetail->next=p1;tail=p1;}tail->next=NULL;fclose(fp);return head;}elsereturn NULL;}3.1.3删除题目信息struct text * DeleteDoc(struct text * head){struct text *p1,*p2;printf("请输入要删除题目的题号:");scanf("%d",&a);while(head!=NULL&&head->number==a) {p2=head;head=head->next;free(p2);}if(head==NULL){return NULL;}p1=head;p2=head->next;while(p2!=NULL){if(p2->number==a){p1->next=p2->next;free(p2);}elsep1=p2;p2=p1->next;}fprint(head);return head;}3.2拓展功能3.2.1密码设计char *GetPasswd(void){char c;int i=0;char passwd[6]={NULL};while ((c=getch())!='\r'){passwd[i]=c;putchar('*');i++;if (i>=6)break;}}return passwd;}3.2.2考试函数void kaoshi(struct text *head,int sum,int k)/*随机抽题考试*/{int score=0,a[1000],i,j;char answer[81],answer1[81];srand((unsigned)time(NULL)); /*保证随机出来不重复的数字*/ for(i=0;i<sum;i++){a[i]=rand()%k+1; /*随机产生1~k之间一个整数*/for(j=0;j<i;j++)if(a[i]==a[j])i--;}for(i=0;i<sum;i++){struct text*p;p=head;while(p!=NULL){if(p->number==a[i])break;p=p->next;}printf("题号:%d\n",p->number);printf("题目:%s\n",p->que);printf("选项A:%s 选项B:%s\n",p->answer1,p->answer2);printf("选项C:%s 选项D:%s\n",p->answer3,p->answer4);strcpy(answer,p->ture);printf("\n");printf("请输入答案:");scanf("%s",answer1);if(strcmp(answer,answer1)==0){printf("回答正确!\n");printf("\n");score++;}{printf("答案错误!\n");printf("正确答案为:%s\n",answer);printf("\n");}}printf("您的总成绩为:%d",score);}/*学生通过此函数对随机的试题进行答题并得到自己的成绩*/ 4系统演示4.1基本功能4.1.1文件读写功能4.1.2插入题目功能4.2拓展功能4.2.1密码功能4.2.2考试功能5总结5.1系统缺陷与不足这个考试系统里面的学生界面功能还待加强,可以给学生更多的组卷方式,例如老师创建题库时可以给题目信息增加一个章节的信息,然后学生可以根据章节来组卷考试。
c 单项选择题标准化考试系统在当今社会,随着教育水平的不断提高,考试已经成为人们学习和评价能力的重要方式。
而单项选择题作为考试中常见的一种形式,对于考生来说具有一定的挑战性。
因此,建立一个标准化的单项选择题考试系统显得尤为重要。
首先,一个标准化的单项选择题考试系统应当具备科学性和客观性。
考题的设计应该严格遵循教学大纲和教学要求,确保考试内容符合教学大纲的要求和教学内容的实际情况。
同时,考题应当客观公正,避免主观性和片面性,确保考试结果的客观性和公正性。
其次,考试系统应当注重题目的多样性和灵活性。
题目应当涵盖教学内容的各个方面,既要考查学生对基础知识的掌握程度,也要考查学生对知识的灵活运用能力。
同时,考试系统应当灵活运用不同类型的题目,如单选题、多选题、判断题等,以满足不同学生的学习需求。
另外,一个标准化的单项选择题考试系统还应当具备合理性和公平性。
考试系统应当合理确定考试的难易程度,确保考试结果的真实性和可比性。
同时,考试系统应当公平对待每一位考生,避免题目的偏颇性和不公正性,确保每一位考生都能在公平的环境下进行考试。
最后,考试系统还应当具备及时性和有效性。
考试系统应当及时更新考题,确保考试内容与时俱进,适应教学内容的变化和发展。
同时,考试系统应当有效评价学生的学习成果,为学生提供及时的反馈和指导,帮助学生更好地提高学习能力。
综上所述,建立一个标准化的单项选择题考试系统对于提高教学质量、促进学生学习具有重要意义。
只有建立科学、客观、多样、合理、公平、及时、有效的考试系统,才能更好地推动教育教学工作的发展,促进学生全面发展。
希望我们可以共同努力,建立一个更加完善的单项选择题标准化考试系统。
青岛理工大学《C语言程序设计》题目C语言单项选择题标准化考试系统指导教师:姓名:学号:班级:专业:地点:时间:2013-7-1 至2013-7-5一、内容【设计内容】试设计一单项选择题标准化考试系统,实现试题的录入、抽取、用户的答题、系统的自动判卷等功能。
【设计要求】1、用文件保存试题库。
(每个试题包括题干、4个备选答案、标准答案)2、试题录入:可随时增加试题到试题库中3、试题抽取:每次从试题库中可以随机抽出N道题(N由键盘输入)4、答题:用户可实现输入自己的答案5、自动判卷:系统可根据用户答案与标准答案的对比实现判卷并给出成绩。
二、上机环境操作系统:windows.XP开发工具:VC6.0三、函数调用关系图图1 函数调用关系图四、各函数功能说明1.main() 主函数2.Menu() 菜单函数3.void Answer(int n,TEST * sp) 答题函数4.void Output(TEST* ,int i) 输出第n道题题目5.int TorF(TEST *sp,char m) 判卷函数6.void Input(TEST *) 题目录入函数7.void ReadfromFile(TEST* sp) 从文件中读取题目信息8.TEST * createLinkedList(TEST*sp) 创建链表9.TEST* InsertNode(TEST *head, TEST*s) 插入题目函数10.void WritetoFile(TEST* head) 保存到文件五、流程图图 2 系统总流程图图 3 Answer()函数流程图图 4 Ooutput()函数流程图图 5 TorF()函数流程图图 6 Input()函数流程图图7 ReadfromFile()函数流程图图 8 createLinkedList()函数流程图开始p ,q i=0输入n(q!=NULL&&n!=i+1)?p ,q 指针都指向下一节点i++q=NULL?输出“Not found!”将保存信息的s,插入p ,q 之间;返回头指针结束图 9 InsertNode()函数流程图真假真假六、程序运行效果图1.初始界面2.随机抽题3.答题并判卷4.插入试题5.保存到文件七、总结通过这短短5天的时间,学到了许多东西,尤其是对链表及文件的使用。
在这之前对于链表和文件的使用还不是特别明白,现在已经可以较为熟练的应用它们。
对结构体数组的使用也更加清晰了。
在做单项选择题标准化考试系统时,碰到的第一个问题就是如何从文件里读取数据,为了解决这个问题,我细心的研究了老师给的课件,以及之前写过的学生成绩管理系统V6.0,最终解决了这个问题。
碰到的第二个问题是,如何让编译器随机抽取的题目不重复,通过认真思考算法,最终得出了一个较为合理的算法。
第三个问题是,链表的使用,在做“插入试题”这一块的函数时,经常出现编译错误的提示,仔细阅读编译器提供的错误信息,并对程序进行修改,最后也成功解决了这一个问题。
这份程序在文件的读取和保存以及链表的使用方面参考了老师给的课件,并进行修改。
但是,我的程序在图形处理上基本是没有,所以界面不是特别美观。
通过网络资源,学会了清屏,system(“cls”);通过这次的课程设计,让我进一步的了解到C语言在我们日常生活中的重要性,体会到编一个对人们现实生活有用处的程序的快乐,更进一步的激发了我学习这门语言的兴趣.经过这次的训练,我相信自己以后会用更多的时间来把这门语言学好,掌握好这门必修的基础语言。
最后,在此对我的C语言老师——陈老师,表示感谢。
感谢她平时认真地帮我调试程序,并耐心地解答疑点。
在她的辅导下我从对C语言没有丝毫概念的程度到现在已经可以成功地写出一些比较像样的程序,是她开启了我的编程人生。
八、参考文献[1] 邱建华.C语言程序设计教程.东软电子出版社,2009[2] 谭浩强.C程序设计(第三版).清华大学出版社,2005[3] 邱建华.C语言程序设计随堂实训及上机指导.东北大学出版社,2007九、程序清单/*单项选择题标准化考试系统设计*/#include<stdio.h>#include<stdlib.h>#include<malloc.h>#include<time.h>#include<string.h>#define M 30typedef struct test{char problem[300];char option1[100];char option2[100];char option3[100];char option4[100];char key;struct test *next;}TEST;Menu(); //菜单函数void Answer(int n,TEST * sp); //答题函数void Output(TEST* ,int i); //输出第n道题题目int TorF(TEST *sp,char m); //判卷函数void Input(TEST *); //录入题目void ReadfromFile(TEST* sp); //从文件中读取题目信息TEST * createLinkedList(TEST*sp); //创建链表TEST* InsertNode(TEST *head, TEST*s); //插入函数void WritetoFile(TEST* head); //保存到文件int main(void){TEST test[M];TEST s;TEST * head;int item,n;while(1){Menu();scanf("%d",&item);ReadfromFile(&test);switch(item){case 1:printf("请输入答题数:");scanf(" %d",&n);Answer(n,&test);break;case 2: system("cls");Input(&s);head=createLinkedList(&test);head=InsertNode(head,&s);break;case 3:system("cls");WritetoFile(head);break;case 4:exit(0);break;default:printf("输入有误!请重新输入。
\n");}}}//菜单函数Menu(){printf("\n\t****************单项选择题标准化考试系统*********************\n");printf("\t* 1.答题并判卷*\n");printf("\t* 2.插入试题*\n");printf("\t* 3.保存到文件*\n");printf("\t* 4.退出程序*\n");printf("\t*************************************************************\n");printf("\t\t请输入选项:");}//答题函数void Answer(int n,TEST* sp){int i,j,score=0,num[M];char m;srand(time(NULL));num[0]=rand()%(M-1)+0;for(i=0;i<n;i++){loop:srand(time(NULL)); //产生真随机数num[i]=rand()%(M-1)+0;for(j=i;j>=0;j--) //保证不出现重复的题目{if(num[j]==num[j-1]) //若抽中的题重复则重新抽题{goto loop;}}Output(&sp[num[i]],i+1); //输出抽中的题目printf("请输入答案:");scanf(" %c",&m);score+=TorF(&sp[num[i]],m); //判段用户输入的答案与标准答案是否一致}printf("\n你的总成绩为:%d\n",score); //输出总成绩}void Output(TEST *sp,int i) //输出第n道题题目函数{printf("(%d) ",i);printf(" %s\n",sp->problem);printf(" A %s \n",sp->option1);printf(" B %s \n",sp->option2);printf(" C %s \n",sp->option3);printf(" D %s \n",sp->option4);}int TorF(TEST *sp,char m) //判卷函数{if(sp->key==m) //若用户输入的答案与标准答案一致,返回1 {printf("Right!\n");return 1;}else{printf("Wrong!\n"); //若用户输入的答案与标准答案不一致,返回0return 0;}}void Input(TEST *sp) //试题录入函数{printf("请输入要插入的试题信息:\n");printf("请输入题干:\n");scanf(" %s",sp->problem);printf("请输入选项A:");scanf("%s",sp->option1);printf("请输入选项B:");scanf("%s",sp->option2);printf("请输入选项C:");scanf("%s",sp->option3);printf("请输入选项D:");scanf("%s",sp->option4);printf("请输入答案:");scanf(" %c",&sp->key);}void ReadfromFile(TEST* sp) //文件读取函数{FILE * fp;int i;if((fp=fopen("test.txt","r")) == NULL ) //文件打开失败{printf("Failure to open test.txt!\n");exit(0);}for(i=0;!feof(fp); i++) //文件打开成功{fscanf(fp," %s", sp[i].problem); //将读出的数据保存在sp变量里fscanf(fp,"%s", sp[i].option1);fscanf(fp,"%s", sp[i].option2);fscanf(fp,"%s", sp[i].option3);fscanf(fp,"%s", sp[i].option4);fscanf(fp," %c", &sp[i].key);}fclose(fp); //关闭文件}TEST * createLinkedList(TEST*sp) //创建链表{int i;TEST*head=NULL,*q=NULL,*p=NULL; //定义三个变量for(i=0;i<M;i++){p= (TEST*)malloc(sizeof(TEST)); //申请内存p=&sp[i];p->next=NULL;if(i==0){head=p; //链表的表头}else{q->next=p;}q=p;}return head;}TEST* InsertNode(TEST *head, TEST*s) //插入函数{int n,i;TEST*p,*q;p=head;q=p->next;printf("请输入要在哪个节点后插入题目信息:");scanf(" %d", &n);for(i=0;q!=NULL && n!=i+1;i++) //遍历{p = p->next;q = q->next;}if(q == NULL){printf("Not found!\n");}Else //插入数据{p->next = s;s->next = q;}return head;}void WritetoFile(TEST*head) //保存到文件{FILE * fp;TEST *q;if((fp = fopen("student.txt","w")) == NULL ) //文件打开失败{printf("Failure to open file!\n");exit(0);}for(q=head;q!=NULL;q=q->next) //用链表的方式将数据保存到文件{fprintf(fp," %s\n", q->problem);fprintf(fp,"%s\n",q->option1);fprintf(fp,"%s\n",q->option2);fprintf(fp,"%s\n",q->option3);fprintf(fp,"%s\n",q->option4);fprintf(fp," %c\n",q->key);}fclose(fp); //关闭文件}。