标准化考试系统C语言版Word文档下载推荐.docx
《标准化考试系统C语言版Word文档下载推荐.docx》由会员分享,可在线阅读,更多相关《标准化考试系统C语言版Word文档下载推荐.docx(15页珍藏版)》请在冰豆网上搜索。
要求
一、提交材料应包括:
(1)系统源代码
(2)课程报告
二、整个设计过程具体要求
(1)需求分析要求学生对案例系统进行分析,设计出需要完成的功能,完善各个模块的调用关系;
(2)设计过程要求学生进一步明确各模块调用关系,进一步完善模块函数细节(函数名、参数、返回值等)
(3)实现过程要求学生养成良好的编码习惯、完成各个模块并进行测试,最终完成系统整体测试;
(4)总结阶段按照要求完成系统设计和实现报告,并进行总结、答辩。
成绩
评定
报告撰写情况(30分)
系统完成情况(30分)
答辩情况(40分)
总分
20分
规范程度
5分
程序测试
基本功能20分
扩展功能10分
自述情况10分
答辩情况
30分
成绩评定教师:
1需求分析
根据程序要求分析,我们认为整个程序应该分为4个大块,其中包括主函数以及其他功能函数:
注册登录模块,学生操作模块,教师操作模块。
各个模块又利用小模块实现小功能划分,教师操作模块由创建题库、插入题目、修改题目、删除题目、显示题目、题目排序、查询题目这7个模块组成,而其中查询题目又包含了题号查询、题目查询和模糊查询3个小模块;
注册登录模块由4个函数完成对学生教师不同身份的注册及登录,学生登录后可以选择答题数量组成试卷考试并得到成绩。
通过这些模块的组合连接,就可以实现一个完整的标准化考试系统。
2系统设计
.数据结构设计
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结构*/
.功能模块设计
主菜单模块
:
教师菜单模块
学生菜单模块
3系统实现及关键代码
基本功能
菜单设计
voiddenglu()
{
charid[81],password1[81]={NULL},password2[81]={NULL};
intchoice,choi;
printf("
\n"
);
〒〒〒〒〒欢迎进入标准化考试系统:
〒〒〒〒〒\n"
★★★★★★★welcome★★★★★★★\n"
\t*【1】注册账户*\n"
\t*【2】登陆账户*\n"
\t*【0】退出系统*\n"
请输入你的选择:
"
scanf("
%d"
&
choice);
system("
cls"
xt"
"
w"
))==NULL){
Cannotopenthefile!
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"
printf("
文件输入错误!
exit(0);
if(!
feof(fp)){
while(!
p1=(structtext*)malloc(sizeof(structtext));
fscanf(fp,"
%d%s%s%s%s%s%s\n"
p1->
answer3,&
answer4,&
if(head==NULL)
head=p1;
else
tail->
next=p1;
tail=p1;
}
tail->
next=NULL;
returnhead;
else
returnNULL;
删除题目信息
structtext*DeleteDoc(structtext*head)
inta;
structtext*p1,*p2;
请输入要删除题目的题号:
a);
while(head!
=NULL&
&
head->
number==a)
{
p2=head;
head=head->
next;
free(p2);
if(head==NULL)
p1=head;
p2=head->
while(p2!
=NULL)
if(p2->
{
p1->
next=p2->
free(p2);
p1=p2;
p2=p1->
fprint(head);
拓展功能
密码设计
char*GetPasswd(void)
charc;
inti=0;
charpasswd[6]={NULL};
while((c=getch())!
='
\r'
)
passwd[i]=c;
putchar('
*'
i++;
if(i>
=6)
break;
returnpasswd;
考试函数
voidkaoshi(structtext*head,intsum,intk)/*随机抽题考试*/
intscore=0,a[1000],i,j;
charanswer[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--;
structtext*p;
p=head;
while(p!
=NULL){
if(p->
number==a[i])
break;
p=p->
题号:
%d\n"
p->
number);
题目:
%s\n"
que);
选项A:
%s选项B:
answer1,p->
answer2);
选项C:
%s选项D:
answer3,p->
answer4);
strcpy(answer,p->
请输入答案:
scanf("
%s"
answer1);
if(strcmp(answer,answer1)==0)
printf("
回答正确!
score++;
else
答案错误!
正确答案为:
answer);
您的总成绩为:
score);
}/*学生通过此函数对随机的试题进行答题并得到自己的成绩*/
4系统演示
文件读写功能
插入题目功能
密码功能
考试功能
5总结
系统缺陷与不足
这个考试系统里面的学生界面功能还待加强,可以给学生更多的组卷方式,例如老师创建题库时可以给题目信息增加一个章节的信息,然后学生可以根据章节来组卷考试。
系统可扩展功能
(1)修改密码功能;
(2)按章节组卷功能;
6课程心得总结
在编写学生考试函数时,使用的srand()和rand()函数未能随机产生不重复的数字,后来决定使用数组储存随机产生的数字,再通过for循环对每次产生的随机数和之前产生的进行比较,不同就存进数组,相同则继续循环,直至产生需要的随机数个数。
我学习C语言差不多一年了,其中学习过程中或多或少有些遗漏的知识点没有领悟透彻,通过这次做大程序的机会,得以将过去一年中学习的知识点再次连贯起来,有了一次比较综合的再学习,这次的大程序也还有一些功能因为所学知识的原因未能实现。
通过这次的大程序,也使我认识到自己的优点与不足,这将会激励我以后努力学习,争取更上一层楼。
参考书籍:
[1]谭浩强,C语言程序设计,第2版.北京:
高等教育出版社2014.
[2]StephenCPrata,PrimerPlus,第5版.北京:
人民邮电出版社2014.