标准化考试系统C语言版.docx

上传人:b****7 文档编号:23536717 上传时间:2023-05-18 格式:DOCX 页数:18 大小:144.34KB
下载 相关 举报
标准化考试系统C语言版.docx_第1页
第1页 / 共18页
标准化考试系统C语言版.docx_第2页
第2页 / 共18页
标准化考试系统C语言版.docx_第3页
第3页 / 共18页
标准化考试系统C语言版.docx_第4页
第4页 / 共18页
标准化考试系统C语言版.docx_第5页
第5页 / 共18页
点击查看更多>>
下载资源
资源描述

标准化考试系统C语言版.docx

《标准化考试系统C语言版.docx》由会员分享,可在线阅读,更多相关《标准化考试系统C语言版.docx(18页珍藏版)》请在冰豆网上搜索。

标准化考试系统C语言版.docx

标准化考试系统C语言版

课程报告

 

课程名称:

程序设计实践

专业班级:

学生姓名:

学号:

任课教师:

唐建国

学期:

2013-2014学年第二学期

 

课程报告任务书

题目

标准化考试系统

主要

内容

开发出一个标准化考试系统,所谓标准化考试系统即仅支持选择题,也是为方便自动批改的功能的实现。

要求实现以下基本功能:

(1)提供给教师添加试题的功能(试题信息用文件保存)--输入

(2)试题库的整体浏览功能

(3)能够随机抽取试题组合成一套试卷

(4)教师实现题目信息的管理,比如删除、修改等

(5)查询功能(题号查询、题目查询)、排序功能(题号排序)

扩展功能:

(1)学生和教师不同身份的注册登录功能

(2)可以对题目进行模糊查询

(3)可以统计题库内试题总数

(4)学生可以进行抽题考试并得出成绩

任务

要求

一、提交材料应包括:

(1)系统源代码

(2)课程报告

二、整个设计过程具体要求

(1)需求分析要求学生对案例系统进行分析,设计出需要完成的功能,完善各个模块的调用关系;

(2)设计过程要求学生进一步明确各模块调用关系,进一步完善模块函数细节(函数名、参数、返回值等)

(3)实现过程要求学生养成良好的编码习惯、完成各个模块并进行测试,最终完成系统整体测试;

(4)总结阶段按照要求完成系统设计和实现报告,并进行总结、答辩。

成绩

评定

报告撰写情况(30分)

系统完成情况(30分)

答辩情况(40分)

总分

内容

20分

规范程度

5分

程序测试

5分

基本功能20分

扩展功能10分

自述情况10分

答辩情况

30分

成绩评定教师:

 

1需求分析

根据程序要求分析,我们认为整个程序应该分为4个大块,其中包括主函数以及其他功能函数:

注册登录模块,学生操作模块,教师操作模块。

各个模块又利用小模块实现小功能划分,教师操作模块由创建题库、插入题目、修改题目、删除题目、显示题目、题目排序、查询题目这7个模块组成,而其中查询题目又包含了题号查询、题目查询和模糊查询3个小模块;注册登录模块由4个函数完成对学生教师不同身份的注册及登录,学生登录后可以选择答题数量组成试卷考试并得到成绩。

通过这些模块的组合连接,就可以实现一个完整的标准化考试系统。

2系统设计

2.1.数据结构设计

voidStudent_login();/*学生登录*/

voidTeacher_login();/*教师登录*/

voiddenglu();/*主菜单*/

voidAddstudent(charid[],charpassword[]);/*将学生账号密码存入文件*/

voidAddteacher(charid[],charpassword[]);/*将教师账号密码存入文件*/

voidTeachermenu();/*教师菜单*/

voidStudentmenu();/*学生菜单*/

voidPrintDoc(structtext*head);/*从文件中读取题库信息并输出*/

voidNameQueDoc(structtext*head);/*按照题目查询信息*/

voidNumberQueDoc(structtext*head);/*按照题号查询信息*/

voidNameVagueDoc(structtext*head);/*按照题目模糊查询信息*/

voidkaoshi(structtext*head,intsum,intk);/*学生考试菜单*/

voidfprint(structtext*head);/*将链表写入文件*/

structtext*CreateDoc();/*创建试题库并通过链表存入文件*/

structtext*load();/*从文件读取题库信息并存入链表*/

structtext*DeleteDoc(structtext*head);/*删除题库题目信息*/

structtext*ReviseDoc(structtext*head);/*修改题库题目信息*/

structtext*InsertDoc(structtext*head,structtext*book);/*插入题目*/

structtext*SortDoc(structtext*head);/*对题库题目进行排序*/

structtext*QueDoc(structtext*head);/*题库查询菜单*/

intcount(structtext*head);/*统计题库中题目总数*/

intyanzheng(structtext*head,intm);/*验证题号是否重复*/

char*Getpasswd(void);/*将注册登录的密码转为星号*/

structtext{

intnumber;

charque[81];

charanswer1[81];

charanswer2[81];

charanswer3[81];

charanswer4[81];

charture[81];

structtext*next;

};/*定义text结构*/

2.2.功能模块设计

2.2.1:

主菜单模块

 

2.2.2:

教师菜单模块

退出系统

查询题库题目

题库题目排序

显示题库题目

删除题库题目

修改题库题目

插入题库题目

创建试题库

教师操作界面

2.2.3:

学生菜单模块

学生操作界面

开始考试

退出系统

3系统实现及关键代码

3.1基本功能

3.1.1菜单设计

voiddenglu()

{

charid[81],password1[81]={NULL},password2[81]={NULL};

intchoice,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)

{

case1:

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)

{

case1:

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);

else

printf("\n两次密码不一致,返回主菜单!

\n");

denglu();

case2:

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);

else

printf("\n两次密码不一致,返回主菜单!

\n");

denglu();

case3:

denglu();

case0:

printf("系统即将关闭!

\n");

exit(0);

default:

printf("无效选项!

\n");

denglu();

}

case2:

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)

{

case1:

Student_login();

case2:

Teacher_login();

case3:

denglu();

case0:

printf("系统即将关闭!

\n");

exit(0);

default:

printf("无效选项\n");

denglu();

}

case0:

printf("系统即将关闭!

\n");

exit(0);

default:

printf("无效选项!

\n");

denglu();

}

}

3.1.2文件读写

/*-----------------------------------------------将链表写入文件--------------------------------------*/

voidfprint(structtext*head)

{

FILE*fp;

structtext*p1;

if((fp=fopen("G:

\\试题库.txt","w"))==NULL){

printf("Cannotopenthefile!

\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);

}

/*------------------------------------------从文件读取题库信息--------------------------*/

structtext*load()

{

FILE*fp;

structtext*head,*tail,*p1;

head=tail=NULL;

if((fp=fopen("G:

\\试题库.txt","r"))==NULL){

printf("文件输入错误!

\n");

exit(0);

}

if(!

feof(fp)){

while(!

feof(fp)){

p1=(structtext*)malloc(sizeof(structtext));

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;

else

tail->next=p1;

tail=p1;

}

tail->next=NULL;

fclose(fp);

returnhead;

}

else

returnNULL;

}

3.1.3删除题目信息

structtext*DeleteDoc(structtext*head)

{

inta;

structtext*p1,*p2;

printf("请输入要删除题目的题号:

");

scanf("%d",&a);

while(head!

=NULL&&head->number==a)

{

p2=head;

head=head->next;

free(p2);

}

if(head==NULL)

{

returnNULL;

}

p1=head;

p2=head->next;

while(p2!

=NULL)

{

if(p2->number==a)

{

p1->next=p2->next;

free(p2);

}

else

p1=p2;

p2=p1->next;

}

fprint(head);

returnhead;

}

3.2拓展功能

3.2.1密码设计

char*GetPasswd(void)

{

charc;

inti=0;

charpasswd[6]={NULL};

while((c=getch())!

='\r')

{

passwd[i]=c;

putchar('*');

i++;

if(i>=6)

{

break;

}

}

returnpasswd;

}

3.2.2考试函数

voidkaoshi(structtext*head,intsum,intk)/*随机抽题考试*/

{

intscore=0,a[1000],i,j;

charanswer[81],answer1[81];

srand((unsigned)time(NULL));/*保证随机出来不重复的数字*/

for(i=0;i

{

a[i]=rand()%k+1;/*随机产生1~k之间一个整数*/

for(j=0;j

if(a[i]==a[j])

i--;

}

for(i=0;i

{

structtext*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系统缺陷与不足

这个考试系统里面的学生界面功能还待加强,可以给学生更多的组卷方式,例如老师创建题库时可以给题目信息增加一个章节的信息,然后学生可以根据章节来组卷考试。

5.2系统可扩展功能

(1)修改密码功能;

(2)按章节组卷功能;

 

6课程心得总结

在编写学生考试函数时,使用的srand()和rand()函数未能随机产生不重复的数字,后来决定使用数组储存随机产生的数字,再通过for循环对每次产生的随机数和之前产生的进行比较,不同就存进数组,相同则继续循环,直至产生需要的随机数个数。

我学习C语言差不多一年了,其中学习过程中或多或少有些遗漏的知识点没有领悟透彻,通过这次做大程序的机会,得以将过去一年中学习的知识点再次连贯起来,有了一次比较综合的再学习,这次的大程序也还有一些功能因为所学知识的原因未能实现。

通过这次的大程序,也使我认识到自己的优点与不足,这将会激励我以后努力学习,争取更上一层楼。

参考书籍:

[1]谭浩强,C语言程序设计,第2版.北京:

高等教育出版社2014.

[2]StephenCPrata,PrimerPlus,第5版.北京:

人民邮电出版社2014.

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 成人教育 > 专升本

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1