标准化考试系统——C语言版
标准化考试系统C语言版

课程报告课程名称:程序设计实践专业班级:学生姓名:学号:任课教师:唐建国学期: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)第一章C语言基础知识 (2)一、判断题(正确的填A,错误的填B) (2)二、单项选择题 (3)三、程序填空题 (7)第二章C语言程序结构 (8)一、判断题(正确的填A,错误的填B) (8)二、单项选择题 (9)三、程序填空题 (16)第三章数组(正确的填A,错误的填B) (21)一、判断题 (21)二、单项选择题 (22)三、程序填空题 (28)第四章函数 (33)一、判断题(正确的填A,错误的填B) (33)二、单项选择题 (34)三、程序填空题 (40)第五章指针 (45)一、判断题(正确的填A,错误的填B) (45)二、单项选择题 (46)三、程序填空题 (54)第六章预编译、结构体与共用体 (58)一、判断题(正确的填A,错误的填B) (58)二、单项选择题 (60)三、程序填空题 (68)第七章文件 (73)一、判断题(正确的填A,错误的填B) (73)二、单项选择题 (74)三、程序填空题 (77)第一章C语言基础知识(C语言概述、算法、数据类型运算符表达式、位运算)一、判断题(正确的填A,错误的填B)R1.在C语言中,逗号运算符的优先级最低。
(A)2.在C语言可执行程序的开始执行点是程序中第一个函数。
(B)3.“5ch”是合法的变量名。
(B)R4.C语言程序书写格式自由,一行内可以写几个语句,一个语句可以分写在多行上。
(A)5.当输入数据时,必须指明变量的地址,如scanf("%f",&f) (A)N6.表达式i++与++i在任何场合功能完全相同。
(B)7.在赋值表达式中,赋值号左边的变量和右边的表达式之值的数据类型可以不相同。
(A)R8.C语言程序中,语句以逗号结尾。
( B )9.在C 程序中,APH 和aph 代表不同的变量。
( A )10. a-=7等价于a=a-7。
( A )N11. printf函数中用到格式符%5s ,其中数字5表示输出的字符串占用5列。
实用标准化考试系统C语言版

课程报告课程名称:程序设计实践专业班级:学生姓名:学号:任课教师:唐建国学期:2013-2014学年第二学期成绩评定教师:目录目录 (1)1 需求分析 (2)2 系统设计 (2)2.1.数据结构设计 (2)2.2.功能模块设计 (3)2.2.1:主菜单模块 (3)2.2.2:教师菜单模块 (4)2.2.3:学生菜单模块 (4)3 系统实现及关键代码 (5)3.1基本功能 (5)3.1.1菜单设计 (5)3.1.2文件读写 (7)3.1.3删除题目信息 (8)3.2拓展功能 (9)3.2.1密码设计 (9)3.2.2考试函数 (9)4系统演示 (10)4.1基本功能 (10)4.1.1文件读写功能 (10)4.1.2插入题目功能 (11)4.2拓展功能 (11)4.2.1密码功能 (11)4.2.2考试功能 (12)5总结 (13)5.1系统缺陷与不足 (13)5.2系统可扩展功能 (13)6课程心得总结 (14)参考书籍: (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,p1->answer3,p1->a nswer4,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->a nswer4,&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){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;}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++;}else{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语言单项选择题标准化考试系统设计课程设计任务书学院、系:专业:学生姓名: 学号: 设计题目: 单项选择题标准化考试系统设计起迄日期:指导教师: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()函数:用于答题并判卷。
c语言标准化考试系统课程设计解读

课程报告课程名称:标准化考试系统专业班级:学生姓名:学号:任课教师:学期:课程报告任务书成绩评定教师:1 需求分析设计一个标准化考试系统,让学生和老师都能登录。
老师可以输入试题、修改试题,学生可以答题、查分,实现不同功能。
2 概要设计int main()Int jiao_deng(struct jiaoshi su) /*教师登录验证*/void jiao_xin(struct jiaoshi su) /*将教师的用户信息存入文件*/ void jiao_xin(struct jiaoshi su) /*将教师的用户信息存入文件*/ void jiao_xun(struct tiku tm) /*教师验证通过后,可对题目进行修改*/ void jiao_zeng(struct tiku tm) /*在原有文件基础上,进行新增题目*/ Voidxiu_gai(struct tiku tm,int n) /*修改函数*/int xue_deng(struct xuesheng sb) /*学生登录验证*/void xue_xin(struct xuesheng sb) /*将学生的用户信息存入文件*/3 详细设计#include<stdio.h> #include<stdlib.h> #include<string.h> int count=0;struct jiaoshi{ //教师用户信息结构体 char username[20]; //用户名 char password[12]; //用户密码 }su;struct xuesheng{ //学生用户信息结构体 char username1[20]; //用户名 char password1[12]; //用户密码}sb;struct tiku{ //题库结构体 int nb; //题号 char tigan[100]; //题目内容 char option1[80]; //选项 char option2[80]; char option3[80]; char option4[80];char daan[10]; //答案 }tm;struct chaxun{ int num;char name[20];int chengji;}ch;void jiao_xin(struct jiaoshi su);void xue_xin(struct xuesheng su);void jiao_cha(struct tiku tm);void jiao_zeng(struct tiku tm);void xue_kaoshi(struct tiku tm);void xue_cha(struct chaxun ch,int chengji);void xue_chax(struct chaxun ch);void xue_hao(struct chaxun ch);void xing_ming(struct chaxun ch);void cheng_ji(struct chaxun ch);int xue_deng(struct xuesheng sb);int jiao_deng(struct jiaoshi su);void jiao_xun(struct tiku tm);void cha_tihao(struct tiku tm);void xiu_gai(struct tiku tm,int n);int main(){int choice,choice1,choice2;printf("\t\t\t欢迎进入标准化考试系统\n");printf("\t\t\t选择1:以学生身份登录\n");printf("\t\t\t选择2:以教师身份登录\n");printf("\t\t提示:如果你是第一次使用该系统,请先注册你的基本信息!\n");while(1){printf("\t\t\t请输入你的选择项:");scanf("%d",&choice);getchar();if(choice==1||choice==2)break;elseprintf("\t\t\t对不起,输入有误,请重新输入!\n");}if(choice==1)while(1){{printf("\n");printf("~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ~~~~~~~~~~~~~~~~~~~~~\n");printf("\t\t\t选择1:注册!\n");printf("\t\t\t选择2:开始考试!\n");printf("\t\t\t选择3:成绩查询!\n");printf("\t\t\t选择0:退出\n");printf("\n");printf("\t\t\t请输入你的选择:");scanf("%d",&choice1);switch(choice1){case 1: xue_xin(sb); break; //调用文件,录入用户信息case 2: xue_kaoshi(tm); break; //调用函数,开始考试case 3: xue_chax(ch); break; //调用文件,查询信息case 0: return;}}}if(choice==2)while(1){{printf("\n");printf("~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ~~~~~~~~~~~~~~~~~~~~~\n");printf("\t\t\t选择1:注册!\n");printf("\t\t\t选择2:查看题库中的题目\n");printf("\t\t\t选择3:向题库中增加题目\n");printf("\t\t\t选择4:对题库题目进行修改\n");printf("\t\t\t选择0:退出\n");printf("\t\t\t请输入你的选择:");scanf("%d",&choice2);switch(choice2){case 1:jiao_xin(su); break; //调用文件,录入用户信case 2:jiao_cha(tm); break; //调用文件开始录入题目case 3:jiao_zeng(tm); break; //调用文件,增加题目case 4:jiao_xun(tm); break; //调用文件,对题库进行修改case 0: return;}}}}void jiao_xin(struct jiaoshi su) /*将教师的用户信息存入文件*/{FILE *fp;int i;if((fp=fopen("g:\\标准化考试.txt","a"))==NULL){printf("文件打开有误!\n");exit(0);}for(i=1;i<=1;i++){printf("请输入第%d个用户的姓名和密码:",i);scanf("%s%s",ername,su.password);fprintf(fp,"%s %s\n",ername,su.password);}if(fclose(fp)){printf("无法关闭此文件!\n");exit(0);}}void xue_xin(struct xuesheng sb) /*将学生的用户信息存入文件*/{FILE *fp;int i;if((fp=fopen("g:\\标准化考试.txt","a"))==NULL){printf("文件打开有误!\n");exit(0);}for(i=1;i<=1;i++){printf("请输入第%d个用户的姓名和密码:",i);scanf("%s%s",ername1,sb.password1);fprintf(fp,"%s %s\n",ername1,sb.password1);}if(fclose(fp)){printf("无法关闭此文件!\n");exit(0);}}void jiao_cha(struct tiku tm) /*查看题库中的题目*/{FILE *fp;while(1){if(jiao_deng(su)==0){printf("\t\t对不起,用户名或密码错误!请重新输入!\n");}else{printf("\t\t*登录成功,现在可以查看试题了!*\n");break;}}if((fp=fopen("g:\\标准化考试.txt","r"))==NULL){printf("文件打开有误!\n");exit(0);}while(!feof(fp)){printf("\n");fscanf(fp,"%d %s %s %s %s %s %s",&tm.nb,tm.tigan,tm.option1,tm.opti on2,tm.option3,tm.option4,tm.daan);printf("%d%s\n",tm.nb,tm.tigan);printf("%s\n",tm.option1);printf("%s\n",tm.option2);printf("%s\n",tm.option3);printf("%s\n",tm.option4);printf("\n");printf("\t\t\t答案:%s\n",tm.daan);}if(fclose(fp)){printf("无法关闭此文件!\n");exit(0);}}void jiao_zeng(struct tiku tm) /*在原有文件基础上,进行新增题目*/{FILE *fp;int i;int n;while(1){if(jiao_deng(su)==0){printf("\t\t对不起,用户名或密码错误!请重新输入!\n");}else{printf("\t\t*登录成功,欢迎使用*\n");break;}}printf("请输入本次要添加的题目个数n:");scanf("%d",&n);if((fp=fopen("g:\\标准化考试.txt","a"))==NULL){printf("文件打开有误!\n");exit(0);}for(i=1;i<=n;i++){printf("请输入题号:");scanf("%d",&tm.nb );printf("请输入第%d个题目的题干:\n",tm.nb);scanf("%s",tm.tigan );printf("请输入答案:\n");printf("A:");scanf("%s",tm.option1 );printf("B:");scanf("%s",tm.option2 );printf("C:");scanf("%s",tm.option3 );printf("D:");scanf("%s",tm.option4 );printf("请输入第%d个题目的答案:",tm.nb);scanf("%s",tm.daan );fprintf(fp,"%d %s %s %s %s %s %s\n",tm.nb,tm.tigan,tm.option1,tm.op tion2,tm.option3,tm.option4,tm.daan);}if(fclose(fp)){printf("无法关闭此文件!\n");exit(0);}}void xue_kaoshi(struct tiku tm) /*读出文件,学生开始答题,并将成绩存入文件*/{FILE *fp;int i;int j,k;char s[10];int chengji=0;while(1){if(xue_deng(sb)==0){printf("\t\t对不起,用户名或密码错误!请重新输入!\n");}else{printf("\t恭喜你登陆成功,现在可以开始考试了!\n");break;}}if((fp=fopen("g:\\标准化考试.txt","r"))==NULL){printf("文件打开有误!\n");exit(0);}printf("\t\t##共有三种难度系数1-2-3##");printf("请选择难度系数:");scanf("%d",&j);if(j==1){k=10;}if(j==2){k=20;}if(j==3){k=30;}for(i=1;i<=k;i=i+j){printf("\n");fscanf(fp,"%d %s %s %s %s %s %s",&tm.nb,tm.tigan,tm.option1,tm.opti on2,tm.option3,tm.option4,tm.daan);printf("%d%s\n",tm.nb,tm.tigan);printf("%s\n",tm.option1);printf("%s\n",tm.option2);printf("%s\n",tm.option3);printf("%s\n",tm.option4);printf("\n");//printf("%s\n",tm.daan);printf("请输入你的选项:");scanf("%s",s);if(strcmp(tm.daan,s)==0)chengji=chengji+10;}printf("你的成绩是:%d\n",chengji);printf("\t\t为方便你以后查询成绩,请再次输入你的信息:\n");xue_cha(ch,chengji);if(fclose(fp)){printf("无法关闭此文件!\n");exit(0);}}void xue_cha(struct chaxun ch,int chengji) /*考试结束,将成绩录入文件*/{FILE *fp;int i;if((fp=fopen("g:\\标准化考试.txt","a"))==NULL){printf("文件打开有误!\n");exit(0);}/*printf("请输入你的学号和姓名:");scanf("%d %s ",&ch.num,);printf("请输入你本次考试的成绩:");*/printf("请输入你本次考试的成绩:");while(1){scanf("%d",&i);if(i==chengji)printf("请输入你的学号和姓名和成绩:");scanf("%d %s ",&ch.num,,&ch.chengji );fprintf(fp,"%d %s %d\n",ch.num,,chengji);break;}else{printf("\t\t对不起,你输入的成绩与本次考试成绩有误,请重新输入!");}}//fprintf(fp,"%d %s\n",ch.num,);if(fclose(fp)){printf("无法关闭此文件!\n");exit(0);}}void xue_chax(struct chaxun ch) /*成绩查询函数1.按学号2.按姓名3.按成绩*/{int choice;printf("\t\t\t选择1,按学号查询成绩\n");printf("\t\t\t选择2,按姓名查询成绩\n");printf("\t\t\t选择3,按成绩信息\n");printf("请输入你的选择:");scanf("%d",&choice);switch(choice){case 1:xue_hao(ch); break;case 2:xing_ming(ch); break;case 3:cheng_ji(ch); break;}}void xue_hao(struct chaxun ch) /*按学号查询成绩*/{FILE *fp;//int i;int num;int flag=0;if((fp=fopen("g:\\标准化考试.txt","r"))==NULL){printf("文件打开有误!\n");exit(0);}printf("请输入你的学号:");scanf("%d",&num);while(!feof(fp)){fscanf(fp,"%d%s%d",&ch.num,,&ch.chengji);if(num==ch.num){printf("学号:%d\t姓名:%s\t成绩:%d\n",ch.num,,ch.chengji);flag=1;break;}}if(flag==0){printf("对不起,没有找到,请检查你的输入是否正确!");}if(fclose(fp)){printf("无法关闭此文件!\n");exit(0);}}void xing_ming(struct chaxun ch) /*按姓名查询成绩*/{FILE *fp;char name[20];int flag=0;if((fp=fopen("g:\\标准化考试.txt","r"))==NULL){printf("文件打开有误!\n");exit(0);}printf("请输入你的姓名:");scanf("%s",name);while(!feof(fp))fscanf(fp,"%d%s%d",&ch.num,,&ch.chengji);if(strcmp(name,)==0){printf("学号:%d\t姓名:%s\t成绩:%d\n",ch.num,,ch.chengji);flag=1;break;}}if(flag==0){printf("对不起,没有找到,请检查你的输入是否正确!");}if(fclose(fp)){printf("无法关闭此文件!\n");exit(0);}}void cheng_ji(struct chaxun ch) /*按成绩查询信息*/{FILE *fp;int chengji;int flag=0;if((fp=fopen("g:\\标准化考试.txt","r"))==NULL){printf("文件打开有误!\n");exit(0);}printf("请输入你的成绩:");scanf("%d",&chengji);while(!feof(fp)){fscanf(fp,"%d%s%d",&ch.num,,&ch.chengji);if(chengji==ch.chengji){printf("学号:%d\t姓名:%s\t成绩:%d\n",ch.num,,ch.chengji);flag=1;}if(flag==0){printf("对不起,没有找到,请检查你的输入是否正确!");}if(fclose(fp)){printf("无法关闭此文件!\n");exit(0);}}int xue_deng(struct xuesheng sb) /*学生登录验证*/{FILE *fp;int flag=0;char name[20];char password[12];printf("\n");printf("\t\t>>>>>请先登录该系统<<<<<\n\n");printf("\t\t>>>>>请输入你的登录名和密码:");scanf("%s%s",name,password);if((fp=fopen("g:\\标准化考试.txt","r"))==NULL){printf("文件打开有误!\n");exit(0);}while(!feof(fp)){fscanf(fp,"%s%s",ername1,sb.password1);if(strcmp(name,ername1)==0&&strcmp(password,sb.password1)==0) {flag=1;break;}}if(fclose(fp)){printf("无法关闭此文件!\n");exit(0);}return flag;}int jiao_deng(struct jiaoshi su) /*教师登录验证*/{FILE *fp;int flag=0;char name[20];char password[12];printf("\n");printf("\t\t>>>>>请先登录该系统<<<<<\n\n");printf("\t\t>>>>>请输入你的登录名和密码:");scanf("%s%s",name,password);if((fp=fopen("g:\\标准化考试.txt","r"))==NULL){printf("文件打开有误!\n");exit(0);}while(!feof(fp)){fscanf(fp,"%s%s",ername,su.password);if(strcmp(name,ername)==0&&strcmp(password,su.password)==0) {flag=1;break;}}if(fclose(fp)){printf("无法关闭此文件!\n");exit(0);}return flag;}void jiao_xun(struct tiku tm) /*教师验证通过后,可对题目进行修改*/{int choice;while(1){if(jiao_deng(su)==0){printf("\t\t对不起,用户名或密码错误!请重新输入!\n");}else{printf("\t\t*登录成功,欢迎使用*\n");break;}}while(1){printf("\n");printf("~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ~~~~~~~~~~~~~~~~~~~~~\n");printf("\t\t请选择按何种方式进行修改!\n");printf("\t\t选择1:按题号查找,并修改!\n");printf("\t\t选择2:输入部分题目内容查找并进行修改!\n");printf("\n");printf("\t\t\t请输入你的选择:");scanf("%d",&choice);switch(choice){case 1: cha_tihao(tm); break; //按题号查找,并修改case 2: return; //输入部分题目内容查找并进行修改!}}}void cha_tihao(struct tiku tm) /*先查询出题目,然后调用函数进行修改*/{int n;FILE *fp;int flag=0;printf("请输入你要修改的题目的题号:");scanf("%d",&n);if((fp=fopen("g:\\标准化考试.txt","r"))==NULL){printf("文件打开有误!\n");exit(0);}while(!feof(fp)){printf("\n");fscanf(fp,"%d %s %s %s %s %s %s",&tm.nb,tm.tigan,tm.option1,tm.option2,tm.option3,tm.option4,tm.daan);if(n==tm.nb){printf("%d%s\n",tm.nb,tm.tigan);printf("%s\n",tm.option1);printf("%s\n",tm.option2);printf("%s\n",tm.option3);printf("%s\n",tm.option4);printf("\t\t\t答案:%s\n",tm.daan);printf("\n");printf("%d",ftell(fp));flag=1;break;}}if(flag==0){printf("对不起,没有找到,请检查你的输入是否正确!");}if(flag==1)xiu_gai(tm,n);if(fclose(fp)){printf("无法关闭此文件!\n");exit(0);}}void xiu_gai(struct tiku tm,int n) /*修改函数*/{FILE *fp;int i;if((fp=fopen("g:\\标准化考试.txt","a"))==NULL){printf("文件打开有误!\n");exit(0);}for(i=1;i<=1;i++){printf("请输入改后题目的题号:");scanf("%d",&tm.nb );printf("请输入改后题目的题干:\n");scanf("%s",tm.tigan );printf("A:\n");scanf("%s",tm.option1 );printf("B:\n");scanf("%s",tm.option2 );printf("C:\n");scanf("%s",tm.option3 );printf("D:\n");scanf("%s",tm.option4 );printf("请输入改后第题的答案:");scanf("%s",tm.daan );fprintf(fp,"%d %s %s %s %s %s %s\n",tm.nb,tm.tigan,tm.option1,tm.op tion2,tm.option3,tm.option4,tm.daan);}if(fclose(fp)){printf("无法关闭此文件!\n");exit(0);}}4 调试分析登录时,解决账号密码错误问题,修改试题后存入的问题。
单项选择题考试标准化系统Word版

天津城市建设学院课程设计任务书2010—2011学年第1学期电子与信息工程系专业班级课程设计名称:数据结构课程设计设计题目:单项选择题考试标准化系完成期限:自 2012 年 1 月 2 日至 2012 年 1 月 6 日共 1 周一、设计目的熟悉各种数据结构和运算,会使用数据结构的基本操作解决一些实际问题。
二、设计要求(1)重视课程设计环节,用严谨、科学和踏实的工作态度对待课程设计的每一项任务;(2)按照课程设计的题目要求,独立地完成各项任务,严禁抄袭;凡发现抄袭,抄袭者与被抄袭者皆以零分计入本课程设计成绩。
凡发现实验报告或源程序雷同,涉及的全部人员皆以零分计入本课程设计成绩;(3)学生在接受设计任务后,首先要按设计任务书的要求编写设计进程表;(4)认真编写课程设计报告。
三、设计内容单项选择题考试标准化系统设计一单项选择题标准化考试系统,实现考试的标准化管理。
实现试题录入。
试题抽取,答题和叛卷功能。
四、参考文献1.王红梅.数据结构.清华大学出版社2.王红梅.数据结构学习辅导与实验指导.清华大学出版社3.严蔚敏,吴伟民.数据结构(C语言版).清华大学出版社目录一需求分析 (3)该设计是设计一个单项选择题考试标准化系统,使用动态链表设计这个程,它的功能主要有: (3)二、概要设计 (3)1程序设计组成框图 (3)2程序流程框图 (4)三、详细设计 (5)算法的设计 (5)四、调试分析 (6)五、核心源程序清单和执行结果 (6)1源程序 (6)2执行结果 (12)六心得体会 (14)七参考文献 (14)一需求分析该设计是设计一个单项选择题考试标准化系统,使用动态链表设计这个程,它的功能主要有:(1)用文件保存试题库。
(每个试题包括题干、4个备选答案、标准答案)(2)试题录入:可随时增加试题到试题库中(3)试题抽取:每次从试题库中可以随机抽出N道题(N由键盘输入)(4)答题:用户可实现输入自己的答案(5)自动判卷:系统可根据用户答案与标准答案的对比实现判卷并给出成绩二、概要设计1程序设计组成框图2.程序流程框图三、详细设计算法的设计主函数的实现:int main(){ char x;while(1){system("cls"); //清屏cout<<"+---------------------------------------------------------------------+"<<endl;cout<<" | 1.查看试题库 2.录入新的试题|"<<endl;cout<<"+---------------------------------------------------------------------+"<<endl;cout<<" | 3.清空试题库 4.随机抽取试题|"<<endl;cout<<"+---------------------------------------------------------------------+"<<endl;cout<<" | 5.做练习题 6.自动判卷|"<<endl;cout<<"+---------------------------------------------------------------------+"<<endl;cout<<" | 7.删除题目0.退出系统|"<<endl;cout<<"+---------------------------------------------------------------------+"<<endl;cout<<endl;cout<<" 请输入操作代码:";cin>>x;switch(x){case '1':read();system("pause");break;case '2':creat();write();break;case '3':clear();break;case '4':get();break;case '5':answer();break;case '6':mark();break;case '7':delet();break;default :cout<<"代码错误,请重输:"<<endl;system("pause");break;}}return 0;}一些重要的方法:void write() //录入文件void read() //从文件读取数据void get() //随机抽取试题void answer() //答题void mark() //评分四、调试分析每次进行抽取试题时就会出现错误,没法运行,后来发现只有先录入试题才能正常操作其他功能。
c语言程序设计考试系统

【摘要】:C语言是Combined Language(组合语言)的中英混合简称。
是一种计算机程序设计语言。
它既具有高级语言的特点,又具有汇编语言的特点。
它可以作为工作系统设计语言,编写系统应用程序,也可以作为应用程序设计语言,编写不依赖计算机硬件的应用程序。
因此,它的应用范围广泛,不仅仅是在软件开发上,而且各类科研都需要用到C语言,具体应用比如单片机以及嵌入式系统开发。
C语言考试系统采用Microsoft Visual C++和Microsoft SQL Server 2000相结合,很好的实现了登录验证功能。
登录身份有管理员和学生。
管理员是对整个考试系统的环境设置,其中包括对各个题型的题量设置、定义考试说明、考场要求和对学生的管理等。
学生登录实现了让有考试权限的学生进入考试环境。
在这个环境下,系统完全实现了随机抽题。
C语言考试系统实现了嵌入turboc2.0编译器进行程序的编辑;采用了S数据库访问技术进行数据库的操作;完成了学生考试、管理员管理的功能。
C语言考试系统提高网络教学质量的同时大大拓展了考试的灵活性,阅卷效率,以及保证了考试的公平性、答案的安全性。
【关键词】:C语言考试系统数据库编译器文件操作目录引言 (3)第一章C语言程序概述 (4)1.1 C语言的演变及特点 (4)1.1.1 C语言的发展过程 (4)1.1.2 C语言版本 (4)1.1.3 C语言的特点 (5)1.1.4 C语言与其他语言的差别 (5)1.2 C语言的程序结构 (6)1.2.1 C源程序的结构特点 (6)1.2.2 C语言程序结构组成 (7)第二章C语言考试系统 (8)2.1 C语言考试系统发展背景 (8)2.2 C语言考试系统的组成 (8)2.2.1 Microsoft Visual C++ (8)2.2.2 SQL SERVER 2000(结构化查询语言SQL) (10)2.2.3 Turboc2.0编译器 (12)第三章学生成绩管理模块系统 (14)3.1 学生成绩管理系统的重要性 (14)3.2 学生成绩管理系统设计 (14)3.2.1 系统需求 (14)3.2.2 总体设计 (14)3.2.3 功能结构设计 (15)3.2.4 学生成绩管理系统运行过程 (16)第四章C语言考试系统发展前景展望 (25)4.1 C语言考试系统与其他语言系统的对比 (25)4.2 C语言考试系统能够解决的一些问题 (25)4.3 发展C语言考试系统的目的与意义 (26)总结 (27)参考文献 (28)引言C语言是1972年由美国的Dennis Ritchie设计的,并首次在UNIX操作系统的DEC PDP-11计算机上使用。
C语言课程设计报告---单项选择题标准化考试系统

《C语言程序设计》课程设计题目:单项选择题标准化考试系统专业:计算机科学与技术班级:计科1001目录《C语言程序设计》课程设计 (1)1. 程序分析与设计 (3)2.流程图 (3)3. 源程序清单 (3)4.调试过程 (4)参考文献 (5)附录 (5)单项选择题标准化考试系统1. 程序分析与设计系统给用户提供一个简单的人机界面,使用户可以根据提示输入操作项,调用相关的函数实现对应的功能,主要功能描述如下:①用文件保存试题库:每个试题包括题干、4个备选答案、标准答案,本模块的功能是将单链表中的信息存储到文本文件中,系统将提示用户输入文本文件名,确认后单链表中的信息存储到文本文件中;②试题抽取:从磁盘读取文本文件,可以随机的从中选取N个题目并显示出来给用户进行测验,每次从试题库中可以随机抽出N道题(N由键盘输入);③自动判卷:用户答完所选的题目后,系统可根据用答题户答案与标准答案的对比实现判卷并给出成绩;④试题录入:用户可以随时增加试题到试题库中,根据提示输入题目的主干、四个基本选项和一个标准答案;⑤退出:退出系统;⑥系统主控平台:显示该系统可以进行的操作选项,允许用户进行其想要进行的操作,包括添加试题信息、随机抽取试题、保存到文件和退出系统等;总体设计:1)添加试题(add()函数)首先建立单链表,调用input_exam()函数输入试题的基本信息,将用户输入试题的基本信息储存到单链表中,提示用户是否继续输入,用户输入“Y”或“y”,则调用add()函数实现继续添加试题的操作;用户输入“”或“”,则返回主菜单界面。
2)随机抽取试题(ran_choice()函数)首先用typedef定义试题的结构体类型的全局变量ran及rans,从键盘输入,将该数及单链表的头指针传给ran_choice()函数,调用rand()随机数产生函数及srand(seed)设置一个独特的随机数种子,运用for()循环产生N个随机数,根据指针运算从单链表中取出N个试题的信息并显示出来。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
课程报告课程名称:程序设计实践专业班级:计算机类1304班****:**学号: ****************:***学期:2013-2014学年第二学期课程报告任务书成绩评定教师:1 需求分析该系统包括以下功能:1.进行随机答题并判卷2.显示试题所有内容3.插入试题4.添加试题5.自主选题并判卷6.修改试题7.删除试题8.退出系统2 概要设计2.1整体框架图图2-1-12.2 函数功能图2.2.1 随机答题并判卷功能图图2-2-12.2.2 修改试题功能图N图2-2-22.2.3 删除试题功能图图2-2-3 2.3 自定义函数3 详细设计3.1 添加试题将想要输入的是试题,从键盘输入,题库中总的题数作为结构数组的下标,存入一道题就将结构数组的下标向后移动一位,最后将存入最后一道题的下标返回,作为题库中的总题数。
Status AddNode(int &N) //添加试题内容{printf("如果不添加了试题了,在题目输入“*”结束!\n");while(1){printf("请输入所要插入题题目、题干和选项:\n");printf("请输入题目:");gets(Testquestions[N].subject);if(strcmp(Testquestions[N].subject,"*")==0)break;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();N++; //N表示结构体数组长度,通过加&号使其值能返回}return TRUE;}3.2 修改试题先从键盘中输入想要修改第几道试题,当题标输入m时,找到结构数组m-1对应的元素就是要修改的试题,再将修改的试题进行保存,从而实现对试题的修改功能。
Status Change(int &N){int m,i;printf("请输入您要修改第几题?\n");scanf("%d",&m);getchar(); //吸收空格字符for(i=0;i<N;i++){if(i==(m-1)){printf("请输入新的题目:");gets(Testquestions[m-1].subject);printf("请输入新的选项A:");gets(Testquestions[m-1].option1);printf("请输入新的选项B:");gets(Testquestions[m-1].option2);printf("请输入新的选项C:");gets(Testquestions[m-1].option3);printf("请输入新的选项D:");gets(Testquestions[m-1].option4);printf("请输入新的答案:");scanf("%c",&Testquestions[m-1].result);getchar();break;}}if(m>N)printf("修改试题失败!\n");elseprintf("修改试题成功!\n");return TRUE;}3.3 删除试题先从键盘中输入想要修改第几道试题,当题标输入n时,找到结构数组n-1对应的元素就是要删除的试题,在用一个for循环,将n到N-1个元素向前移动,从而实现对试题的删除功能。
Status DeleteNode(int &N) //删除数组中的第n道题{int n;printf("输入你想是删除第几道试题:\n");scanf("%d",&n);if(n>N){printf("删除不成功\n");return ERROR;}while(n<=N){Testquestions[n-1]=Testquestions[n];n++;}N=N-1;printf("删除成功\n");return TRUE;}3.4 随机选题并判题学生进入考试系统,输入形成试卷的题数,系统将会自动抽取试题,在进行作答之后,立刻能看到学生是否做对本道试题,如果作对,将会显示“答案正确”,否者会显示“答案错误”并且会显示正确答案。
void answer(int sum,int N) //随机进行答题{int i,score=0,Num;char r;for(i=1;i<=sum;i++){Num= rand()%N; //随机函数,以随机选定何题进行解答 printNode(Testquestions[Num],i);printf("\n");printf("\n请输入第(%d)答案:",i);scanf("%c",&r);getchar();if(Match(Testquestions[Num],r)) //调用函数Match判断所输入的答案与标准答案是否相同{ printf("\n答案正确!\n");score++;}else {printf("\n答案错误!\n");printf("正确答案为:%c\n",Testquestions[Num].result);}}printf("\n你的总成绩为:%d\n",score);}3.5 自主选题并判题通过函数中传递题库的总数和要形成试卷的总题数,输入将要选择的试题,将输入的试题在结构数组中找到,可以进行作答,当输入的答案不与标准答案匹配时,答卷系统将会自动报错,并且输出正确的答案,如果输入正确将会显示“答案正确”,在最后答卷系统将会输出总的成绩。
void Otheranswer(int N,int s){int i,score=0,k;char m;for(i=1;i<=s;i++){printf("输入要选择第几题?\n");scanf("%d",&k);while(k<=0||k>N){printf("输入的题号在题库中不存在!\n");printf("\n请重新输入正确的题号:");scanf("%d",&k);}printNode(Testquestions[k-1],i);printf("\n请输入(%d)答案:",i);getchar();scanf("%c",&m);getchar();if(m==Testquestions[k-1].result){printf("答案正确!\n");score++;}else{printf("正确答案为:%c\n",Testquestions[k-1].result);}}printf("总分为:%d\n",score);}3.6登陆考试系统函数屏幕上会显示教师和学生两种端口,如果过选择学生端口将会进入登陆和注册两个选项,已经注册过的就可以直接登陆了,反之则进行注册。
进入学生答题系统后可以选择随机答题或者自主选题进行作答两种方式。
登陆教师窗口后,可以直接查看试题、删除试题、修改试题、添加试题的功能。
void Denglu(){FILE *fp1;int a,c,num,flag=1;int i=0;char Mima[20]="\0",b[20];printf("\t\t\t1 进入登录\n");printf("\n\t\t\t2 进入注册\n");scanf("%d",&c);while(flag){if(c<1||c>2){printf("\n请输入正确的选项!\n");scanf("%d",&c);flag=1;}elseflag=0;}if(c==2){Zhuce();}else{if((fp1=fopen("student.txt","rb"))==NULL){printf("打开文件失败!");exit(0);}printf("请输入学号:");scanf("%d",&num);printf("请输入密码");while((c=getch())!='\r'){Mima[i]=c;i++;if(c!='\b')printf("*");elseprintf("\b\b");}rewind(fp1);while(!feof(fp1)){fscanf(fp1,"%d",&a);fscanf(fp1,"%s",&b);if(a==num&&strcmp(b,Mima)==0)break;while(a!=num||strcmp(b,Mima)!=0){i=0;printf("\n错误,重新输入:\n");printf("请输入学号:");scanf("%d",&num);printf("请输入密码");while((c=getch())!='\r'){Mima[i]=c;i++;if(c!='\b')printf("*");elseprintf("\b\b");}rewind(fp1);while(!feof(fp1)){fscanf(fp1,"%d",&a);fscanf(fp1,"%s",&b);if(a==num&&strcmp(b,Mima)==0)break;}}printf("\t\t欢迎登陆单选题标准化考试系统!\n");system("pause");getchar();if(fclose(fp1)){printf("关闭文件失败!\n");exit(0);}}}*源代码#include <stdio.h>#include <stdlib.h>#include<string.h>#include<conio.h>#define TRUE 1#define ERROR 0#define MAX 30typedef int Status;typedef struct{char option1[30],option2[30],option3[30],option4[30],subject[150];char result;int q;}TestNode;TestNode Testquestions[MAX];Status SaveNode(int &N) //把结构体数组保存到文件"cheng"中,如成功保存返回TRUE,否则返回ERROR{ int i;FILE *fp;return ERROR;for(i=0;i<N;i++)fwrite(&Testquestions[i],sizeof(TestNode),1,fp);fclose(fp);return TRUE;}Status ReadNode(int &N) //从文件读出结构体数组的内容,如成功读取返回TRUE,否则返回ERROR{ FILE *fp;int i=0;if((fp=fopen("cheng","rb"))==NULL)return ERROR;while(!feof(fp)) // 用feof检测文件是否结束,如果结束,返回正确{ fread(&Testquestions[i],sizeof(TestNode),1,fp);i++;}N=i-1;return TRUE;}void Zhuce(){void Denglu();int i,m;i=0;char n[20]="\0",c;if((fp1=fopen("student.txt","ab"))==NULL) {printf("打开文件失败!\n");exit(0);}printf("请注册学号:");scanf("%d",&m);fprintf(fp1,"%d ",m);printf("请设置密码(20字符以内):");while((c=getch())!='\r'){n[i]=c;i++;if(c!='\b')printf("*");elseprintf("\b\b");}fprintf(fp1,"%s\n",n);if(fclose(fp1)){printf("关闭文件失败!\n");exit(0);printf("\n");printf("\t\t\t注册完成!\n");Denglu();}void Denglu(){FILE *fp1;int a,c,num,flag=1;int i=0;char Mima[20]="\0",b[20];printf("\t\t\t1 进入登录\n");printf("\n\t\t\t2 进入注册\n");scanf("%d",&c);while(flag){if(c<1||c>2){printf("\n请输入正确的选项!\n");scanf("%d",&c);flag=1;}elseflag=0;}if(c==2){printf("请注册:\n");Zhuce();}elseif((fp1=fopen("student.txt","rb"))==NULL){printf("打开文件失败!");exit(0);}printf("请输入学号:");scanf("%d",&num);printf("请输入密码");while((c=getch())!='\r'){Mima[i]=c;i++;if(c!='\b')printf("*");elseprintf("\b\b");}rewind(fp1);while(!feof(fp1)){fscanf(fp1,"%d",&a);fscanf(fp1,"%s",&b);if(a==num&&strcmp(b,Mima)==0)break;}while(a!=num||strcmp(b,Mima)!=0)i=0;printf("\n错误,重新输入:\n");printf("请输入学号:");scanf("%d",&num);printf("请输入密码");while((c=getch())!='\r'){Mima[i]=c;i++;if(c!='\b')printf("*");elseprintf("\b\b");}rewind(fp1);while(!feof(fp1)){fscanf(fp1,"%d",&a);fscanf(fp1,"%s",&b);if(a==num&&strcmp(b,Mima)==0)break;}}printf("\t\t欢迎登陆单选题标准化考试系统!\n"); system("pause");getchar();printf("\n");if(fclose(fp1))printf("关闭文件失败!\n");exit(0);}}}Status AddNode(int &N) //添加试题内容{printf("如果不添加了试题了,在题目输入“*”结束!\n");while(1){printf("请输入所要插入题题目、题干和选项:\n");printf("请输入题目:");gets(Testquestions[N].subject);if(strcmp(Testquestions[N].subject,"*")==0)break;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);printf("请输入试题难度:");scanf("%d",&Testquestions[N].q);getchar();N++; //N表示结构体数组长度,通过加&号使其值能返回}return TRUE;}void printNode(TestNode p,int n) //输出第n道题题目{printf("(%d) ",n);printf("%s\n",p.subject);printf(" A %s ",p.option1);printf(" B %s \n",p.option2);printf(" C %s ",p.option3);printf(" D %s ",p.option4);printf(" 试题难度为:%d\n",p.q);}Status Change(int &m){int i;printNode(Testquestions[m-1],m);printf("\n");printf("修改题目请按 1\n");printf("修改选项A请按 2\n");printf("修改选项B请按 3\n");printf("修改选项C请按 4\n");printf("修改选项D请按 5\n");printf("修改标准答案请按 6\n");printf("修改试题难度请按 7\n");scanf("%d",&i);getchar(); //吸收空格字符switch(i){case 1: printf("\n请输入新的题目:");gets(Testquestions[m-1].subject);break;case 2:printf("请输入新的选项A:");gets(Testquestions[m-1].option1);break;case 3: printf("请输入新的选项B:");gets(Testquestions[m-1].option2);break;case 4:printf("请输入新的选项C:");gets(Testquestions[m-1].option3);break;case 5:printf("请输入新的选项D:");gets(Testquestions[m-1].option4);break;case 6:printf("请输入新的答案:");scanf("%c",&Testquestions[m-1].result);break;case 7:printf("请输入新的试题难度:");scanf("%d",&Testquestions[m-1].q);break;default:printf("请输入正确的修改选项\n");break; }return TRUE;}Status InsertNode(int &N){int i,j,P;printf("输入要插入到第几题?\n");scanf("%d",&i);getchar();N=N+1;for(j=N-1;j>=(i-1);j--){Testquestions[j]=Testquestions[j-1];}printf("请输入题目:");gets(Testquestions[i-1].subject);printf("请输入选项A:");gets(Testquestions[i-1].option1);printf("请输入选项B:");gets(Testquestions[i-1].option2);printf("请输入选项C:");gets(Testquestions[i-1].option3);printf("请输入选项D:");gets(Testquestions[i-1].option4);printf("请输入答案:");scanf("%c",&Testquestions[i-1].result);printf("请输入试题难度:");scanf("%d",&Testquestions[i-1].q);getchar();return TRUE;}Status DeleteNode(int &N) //删除数组中的第n道题{int n;printf("输入你想是删除第几道试题:\n");scanf("%d",&n);if(n>N){printf("删除不成功\n");return ERROR;}while(n<=N){Testquestions[n-1]=Testquestions[n];n++;}N=N-1;printf("删除成功\n");return TRUE;}Status Match(TestNode p,char m) //判断m是否为p题目的答案,若是返回TRUE,否则返回ERROR{if(m==p.result)return TRUE;elsereturn ERROR;}void answer(int sum,int N) //随机进行答题{int i,score=0,Num;char r;for(i=1;i<=sum;i++){Num= rand()%N; //随机函数,以随机选定何题进行解答 printNode(Testquestions[Num],i);printf("\n");printf("\n请输入第(%d)答案:",i);scanf("%c",&r);getchar();if(Match(Testquestions[Num],r)) //调用函数Match判断所输入的答案与标准答案是否相同{ printf("\n答案正确!\n");score++;}else {printf("\n答案错误!\n");printf("正确答案为:%c\n",Testquestions[Num].result);}}printf("\n你的总成绩为:%d\n",score);}void Otheranswer(int N,int s){int i,score=0,k,j,y;char m;for(i=1;i<=s;i++){printf("输入试题难度\n");scanf("%d",&k);while(k<0||k>2){printf("题库中没有该难度的试题!\n");printf("\n请重新输入试题难度:");scanf("%d",&k);}for(j=0;j<N;j++){if(y==j)continue;if(Testquestions[j].q==k){printNode(Testquestions[j],i);printf("\n请输入(%d)答案:",i);getchar();scanf("%c",&m);getchar();if(Match(Testquestions[j],m)){printf("答案正确!\n");score++;}else{printf("答案错误!\n");printf("正确答案为:%c\n",Testquestions[j].result);}break;}y=j;}}printf("总分为:%d\n",score);}void main(){char flag;int N=0,i,sum,m,s,score=0,chose,Chose=3;ReadNode(N);while(Chose<1||Chose>2){printf("\t\t\t请选择自己的类型\n");printf("\t\t\t1 学生端口\n");printf("\t\t\t2 教师端口\n");scanf("%d",&Chose);}system("cls");switch(Chose){case 1:Denglu();system("cls");while(1){printf("\t\t\t单项选择题标准化考试系统进行答题\n ");printf("\t\t\t1 进行随机答题并判卷\n");printf("\t\t\t2 自主选题并判卷\n");printf("\t\t\t3 退出系统\n");scanf("%d",&chose);getchar();switch(chose){case 1:system("cls");ReadNode(N);printf("请输入试题的总题数:");scanf("%d",&sum);getchar();if(N==0){printf("对不起,题库中没有试题!\n");printf("按任意键回到菜单!\n");getchar();}elseanswer(sum,N);getchar();break;case 2:system("cls");ReadNode(N);printf("请输入试卷的总题数:");scanf("%d",&s);Otheranswer(N,s);getchar();break;case 3:printf("你将退出系统(Y or N)?");scanf("%c",&flag);getchar();if(flag=='Y'||flag=='y') exit(0);system("cls");break;default:printf("请输入正确选择!\n");}}case 2:printf("\t\t\t欢迎进入教师题库管理\n");while(1){printf("\t\t\t单项选择题标准化考试系统\n "); printf("\n");printf(" \t\t\t1 显示所有试题内容\n");printf(" \t\t\t2 添加试题\n");printf(" \t\t\t3 修改试题\n");printf(" \t\t\t4 删除试题\n");printf(" \t\t\t5 插入试题\n");printf(" \t\t\t6 退出系统\n");scanf("%d",&chose);getchar();switch(chose){case 1:system("cls");ReadNode(N);if(N==0){printf("题库中没有试题!\n");printf("按任意键回到菜单!\n");getchar();}for(i=1;i<=N;i++){ printNode(Testquestions[i-1],i);printf("\n");}break;case 2:system("cls");ReadNode(N);AddNode(N);if(SaveNode(N))printf("试题添加成功!\n");elseprintf("试题添加失败!\n");break;case 3:system("cls");printf("请输入您要修改第几题?\n");scanf("%d",&m);ReadNode(m);Change(m);if( SaveNode(m))printf("修改成功\n");elseprintf("修改失败");break;case 4:system("cls");ReadNode(N);DeleteNode(N);SaveNode(N);break;case 5:system("cls");ReadNode(N);InsertNode(N);if(SaveNode(N))printf("插入试题成功\n");elseprintf("插入试题失败\n");break;case 6:printf("你将退出系统(Y or N)?");scanf("%c",&flag);getchar();if(flag=='Y'||flag=='y') exit(0);system("cls");break;default:printf("请输入正确选择!\n");}}}}4 调试分析在添加函数InsertNode中,在添加试题的过程中,不知道怎么在一个循环中不断添加试题,最后通过在c语言书中,看到用一个‘*’作为结束标志来结束试题的添加,用一个while 循环实现了添加功能。