设计报告 考试管理系统.docx

上传人:b****6 文档编号:7269694 上传时间:2023-05-11 格式:DOCX 页数:19 大小:103.94KB
下载 相关 举报
设计报告 考试管理系统.docx_第1页
第1页 / 共19页
设计报告 考试管理系统.docx_第2页
第2页 / 共19页
设计报告 考试管理系统.docx_第3页
第3页 / 共19页
设计报告 考试管理系统.docx_第4页
第4页 / 共19页
设计报告 考试管理系统.docx_第5页
第5页 / 共19页
设计报告 考试管理系统.docx_第6页
第6页 / 共19页
设计报告 考试管理系统.docx_第7页
第7页 / 共19页
设计报告 考试管理系统.docx_第8页
第8页 / 共19页
设计报告 考试管理系统.docx_第9页
第9页 / 共19页
设计报告 考试管理系统.docx_第10页
第10页 / 共19页
设计报告 考试管理系统.docx_第11页
第11页 / 共19页
设计报告 考试管理系统.docx_第12页
第12页 / 共19页
设计报告 考试管理系统.docx_第13页
第13页 / 共19页
设计报告 考试管理系统.docx_第14页
第14页 / 共19页
设计报告 考试管理系统.docx_第15页
第15页 / 共19页
设计报告 考试管理系统.docx_第16页
第16页 / 共19页
设计报告 考试管理系统.docx_第17页
第17页 / 共19页
设计报告 考试管理系统.docx_第18页
第18页 / 共19页
设计报告 考试管理系统.docx_第19页
第19页 / 共19页
亲,该文档总共19页,全部预览完了,如果喜欢就下载吧!
下载资源
资源描述

设计报告 考试管理系统.docx

《设计报告 考试管理系统.docx》由会员分享,可在线阅读,更多相关《设计报告 考试管理系统.docx(19页珍藏版)》请在冰点文库上搜索。

设计报告 考试管理系统.docx

设计报告考试管理系统

程序设计报告

(2011/2012学年第1学期)

 

题目:

考试管理系统

 

专业高分子材料与工程

组长姓名于鑫

组长学号B10060220

成员姓名学号王淑娟B10060203

龙玲B10060204

指导教师朱旻如

指导单位计算机学院软件教学中心

日期2011年9月14日

 

1、分析及结构设计

1、程序需要完成的功能:

(1)实现考生信息的管理:

考生信息包括考生姓名和学号,用文件存储信息,并可对信息进行增、删、改。

(2)考试过程管理:

a):

设置考试题数:

可以设置默认值,并允许修改

b):

抽取试题:

在考生考试过程中,可以从试题库中随机抽取规定数量的试题并显示,且要保证题目不能重复

(3)模拟考试过程:

首先输入学号,已经参加过考试的给出提示,不允许再考。

考生答题完成后立刻给出成绩,排序后存储到成绩文件中。

同时要记录考生参加考试的时间(年,月,日)。

(4)试题库管理:

以文件形式存储试题,可增加试题到试题库中。

每个试题包括题干、4个备选答案以及标准答案

(5)成绩查询:

输入考生姓名进行成绩的查询,当考生出现同名时,输入学号查询,以及查看考生的成绩排名。

2、可能遇到的问题:

(1)当分模块进行程序的设计时,要考虑各模块间的衔接问题,避免语句的重复及语法错误

(2)数据结构的选择:

存储考生信息及试题时,可以用结构体数组存储从文件中读取考生信息及试题

(3)题库的管理:

保持题目的唯一性和随机性

(4)考生重名时情况的处理办法

2、开发设计

1、程序结构:

程序包括以下模块

main()函数:

主函数,用于控制菜单函数和各个子子函数

menu()函数:

菜单函数,用于控制各个功能模块

test()函数:

考试过程,考生进入考试系统后,根据界面提示依次完成读取试题duqushiti()函数和考生答题kaoshi()函数两个过程

manage()函数:

考生信息的管理,根据界面提示实现对考生信息的增加,删除和修改,其中包括regist()函数、deleter()函数、modify()函数

search2()函数:

查找考生信息及考试成绩通过search()函数实现

2、主要数据结构说明

定义学生结构体数组和试题结构体数组

(a)学生结构体数组

structstudent

{

charname[20];//考生姓名,字符长度不超过20

charnum[30];//考生学号,字符长度不超过30

floatscore;//考生成绩

intflag;//参加考试的标志1已经参加0未参加

}stu[N];

(b)试题结构体数组

structshiti

{

charshiti[100];//题目,字符长度不超过100

charAns[20];//答案,字符长度不超过20

intflag;//题目被选作标记,以免重复,以保证其唯一性和随机性

}T[N];

定义两个结构体数组可以将每一组数据作为一个整体,在函数中以便整体调用它们

3、核心功能的实现

主函数实现整个程序的运行

intmain()

{

intchoice=1;

menu();

printf("chooseoneoperationyouwanttodo:

\n");

scanf("%d",choice);

switch(choice)

{

case1:

test();break;//学生考试

case2:

manage();break;//信息管理

case3:

search2();break;//信息查询

case0:

printf("退出");system("pause");exit

(1);//退出

default:

printf("输入错误!

");

}

return0;

}

通过函数的调用,实现考试过程的管理,模拟考试,考生信息管理(包括信息的查询和信息的修改与删除),试题库管理,成绩查询。

五、源代码

#include

#include

#include

#include

#defineN100

 

structstudent

{

charname[20];

charnum[30];

floatscore;

intflag;//参加考试的标志1已经参加0未参加

}stu[N];

structshiti

{

charshiti[100];

charAns[20];

intflag;

}T[N];

inti,j,k;

intlen;//学生人数

inttknum=10;//题库题目数

inttinum=10;//考试试题数

floatfen=10;//每题分数

charstr;

 

voidmenu()

{

printf("*******1.进入考试*******\n");

printf("*******2.信息管理*******\n");

printf("*******3.信息查询*******\n");

printf("*******0.退出系统*******\n");

}

voidmenuTest()

{

printf("*******1.学生注册*******\n");

printf("*******2.读取试题*******\n");

printf("*******3.开始考试*******\n");

printf("*******0.返回菜单*******\n");

}

voidmenuBase()

{

printf("*******1.删除记录*******\n");

printf("*******2.修改记录*******\n");

printf("*******0.返回菜单*******\n");

}

voidmenuScore()

{

printf("*******1.按成绩查询********\n");

printf("*******2.按姓名查询*******\n");

printf("*******0.返回主菜单*******\n");

}

voidduqushiti()//读取

{

charstr1,str2,str3;

FILE*fp;

if(!

(fp=fopen("Question.txt","r")))

{

printf("filecannotbeopended");

exit

(1);

}

i=0;

k=0;

while(!

feof(fp))

{

str=fgetc(fp);//读取一个字符

if(str=='K')//可能是答案来了

{

str1=fgetc(fp);

str2=fgetc(fp);

str3=fgetc(fp);

if(str1=='E'&&str2=='Y'&&str3==':

')

{

j=0;

str=fgetc(fp);

while(str!

='\n'&&!

feof(fp))

{

T[i].Ans[j++]=str;

str=fgetc(fp);

}

T[i].Ans[j]='\0';

T[i].shiti[k++]='\0';

tknum++;//题库题目数加1

i++;

k=0;//准备读入下一个题

}

else//不是答案

{

T[i].shiti[k++]=str;

T[i].shiti[k++]=str1;

T[i].shiti[k++]=str2;

T[i].shiti[k++]=str3;

}

}

else//不是答案

T[i].shiti[k++]=str;

}

}

 

voidbaocun()

{

FILE*fp;

if(!

(fp=fopen("xinxi.txt","w")))//打开文件

{

printf("filecannotbeopended");

exit

(1);

}

fwrite(&stu,sizeof(structstudent),N,fp);//写入文件

fclose(fp);//关闭文件

}

 

voidduquxinxi()//读取信息

{

FILE*fp;

if(!

(fp=fopen("xinxi.txt","r")))//打开文件

{

printf("filecannotbeopended");

fopen("E:

\\xinxi.txt","w");//创建文件

getchar();

return;

}

fread(&stu,sizeof(structstudent),N,fp);//读取文件

for(len=i=0;i

if(strlen(stu[i].name)!

=0)

len++;//学生人数累加

fclose(fp);//关闭文件

}

 

voidsearch()//查询信息

{

charname[20],num[30];

intn=0;

system("cls");

printf("请输入姓名查询成绩:

");

scanf("%s",name);

for(i=0;i

if(name==stu[i].name)

{

n++;//同名人数累加

j=i;//记住该同学角标

}

if(n==0)

{

printf("没有对应的信息记录");

getchar();

return;

}

if(n==1)

{

if(stu[j].flag==0)

{

printf("您还没有参加考试,无信息");

getchar();

return;

}

}

if(n>1)//有重名

{

printf("有重名,请输入考号查询您的成绩:

");

scanf("%s",num);

for(i=0;i

if(name==stu[i].name&&num==stu[i].num)

{

j=i;//记住该同学角标

break;

}

if(stu[j].flag==0)

{

printf("对不起!

你尚未参加考试,没有成绩,回车返回。

");

getchar();

return;

}

printf("*******考生姓名:

%s\n",stu[j].name);

printf("*******考生考号:

%s\n",stu[j].num);

printf("*******成绩:

%.2f\n",stu[j].score);

getchar();

}

}

intcheck(charnum[])//检查学号是否重复

{

for(j=0;j

{

if(num==stu[j].num&&j!

=i)

return1;//有重复返回1

}

}

 

voidregist()

{

system("cls");//清屏

i=len;

printf("pleaseprintyourname:

");

scanf("%s",stu[i].name);

printf("andyourid:

");

scanf("%s",stu[i].num);

while(check(stu[i].num)==1)

{

printf("hasdoubleidpleaseprintyouridagain:

");

scanf("%s",stu[i].num);

}

len++;//学生人数加1

baocun();

getchar();

}

 

voidkaoshi()//开始考试

{

intcount=0;

charans[10],num[10];

srand((unsigned)time(NULL));//设置随机种子

system("cls");//清屏

for(i=0;i<3;i++)

T[i].flag=0;//初始化所有的题都未被使用

printf("请输入学号:

");

scanf("%s",num);

for(i=0;i

if(num==stu[i].num)

break;//存在结束循环

if(i==len)

{

printf("对不起!

您的学号尚未注册,不能考试");

getchar();

return;

}

if(stu[i].flag==1)

{

printf("对不起!

你已经参加过考试,不能再次参加。

");

getchar();

return;

}

for(j=0;count

{

if(j==tknum-1)

j=0;//到最后一道题了,回到第一道

if(T[j].flag==0&&rand()%(tknum-count)==0)//题目未被使用,随机决定是否选用该题,几率为1/(tknum-count)。

{

T[j].flag=1;//标记已被使用

count++;//已做题加1

printf("%d、%s\n",count,T[j].shiti);

printf("请输入你的选择(大写):

");

scanf("%s",ans);

if(ans==T[j].Ans)

{

printf("√\n");

stu[i].score+=fen;//得分累加

}

else

printf("×,正确答案:

%s\n",T[j].Ans);

}

}

stu[i].flag=1;//标记已经完成考试

printf("考试结束,你的最后得分是%.2f\n",stu[i].score);

getchar();

baocun();

}

voiddisplay()//显示所有考生信息

{

printf("姓名考号参考标记\n");

for(i=0;i

printf("%-10s%-13s%d\n",stu[i].name,stu[i].num,stu[i].flag);

}

 

voidmodify()//学生信息修改

{

charnum[10];

system("cls");//清屏

display();//显示所有考生信息

printf("请输入要修改学生的学号:

");

scanf("%s",num);

for(i=0;i

if(num==stu[i].num)

break;//存在结束循环

if(i==len)

{

printf("对不起!

没有你要修改的学生的信息");

getchar();

return;

}

printf("请输入新的姓名:

");

scanf("%s",stu[i].name);

printf("请输入新的学号:

");

scanf("%s",stu[i].num);

while(check(stu[i].num)==1)

{

printf("学号重复,请重新输入学号:

");

scanf("%s",stu[i].num);

}

baocun();

display();//显示所有考生信息

printf("修改成功");

getchar();

}

 

voiddeleter()//学生信息删除

{

structstudentt;

charnum[10];

system("cls");//清屏

display();//显示所有考生信息

printf("请输入要删除学生的学号:

");

scanf("%s",num);

for(i=0;i

if(num==stu[i].num)

break;//存在结束循环

if(i==len)

{

printf("对不起!

没有你要删除的学生的信息,回车返回。

");

getchar();

return;

}

stu[i].name[0]='\0';

stu[i].num[0]='\0';//删除

t=stu[i];

stu[i]=stu[len-1];

stu[len-1]=t;//和最后一条信息交换位置

len--;//人数减一

baocun();

printf("删除成功!

");

getchar();

}

 

voidtest()

{

intchoice=1;

do

{

menuTest();

printf("chooseoneoperationyouwanttodo:

\n");

scanf("%d",&choice);

switch(choice)

{

case1:

regist();

baocun();

break;

case2:

duqushiti();break;

case3:

kaoshi();break;

case0:

break;

}

}while(choice);

}

 

voidmanage()

{intchoice=1;

do

{

menuBase();

printf("chooseoneoperationyouwanttodo:

\n");

scanf("%d",&choice);

switch(choice)

{

case1:

deleter();

break;

case2:

modify();

break;

case0:

break;

}

}while(choice);

}

 

voidsearch2()

{intchoice=1;

do

{menuScore();

printf("chooseoneoperationyouwanttodo:

\n");

scanf("%d",&choice);

switch(choice)

{

case1:

search();

break;

case0:

break;

}

}

while(choice);

}

intmain()

{

intchoice=1;

menu();

printf("chooseoneoperationyouwanttodo:

\n");

scanf("%d",&choice);

switch(choice)

{

case1:

test();break;//学生考试

case2:

manage();break;//信息管理

case3:

search();break;//信息查询

case0:

printf("退出");system("pause");exit

(1);//退出

default:

printf("输入错误!

");

}

return0;

}

3、测试分析

A、主界面的显示:

通过选择1-0来确定要做哪个操作

B、若选1,则出现如下界面

若接着按1,学生注册出现的界面如下,按照提示步骤操作:

C.若按3,完成考生信息的查询,如果没有考生考试信息,出现界面如下:

 

4、总结

1、这这次程序设计过程中,我们学到了很多解决问题的办法。

首先拿到题目时,应该先考虑总体的框架,再考虑如何去解决。

可是我们只学了一个学期的C,要做这么大一个程序是有挑战的。

首先我们想到了再忘上查资料,课下我们有到图书馆找资料,可是悲剧的是没有找到,所以我们试着分模块写程序。

最后,小程序写好了,也过关了,可是要和在一起却是一个很大的问题了,单把一个小程序抽出来和成一个大程序,总是要好多的错。

这就需要我们有耐心的去修改,并在解决问题的过程中学习如何去运用书本上学到的知识

2、心得和体会:

在设计程序时,我们发现了平时很多没有注意到的问题,例如:

返回值函数和不返回值函数两者在主函数的调用中是不同的等等……虽然我们的程序不是很完美,而且里面还存在着很多的错误,但这确实花费了我们小组成员两周的心思,我们不断地查找这方面的资料,不断地更改程序,就算这个凝聚了我们汗水的程序最终以失败告终,我们依然会说,我们努力过了。

在今后的学习当中,我们会更加努力,不让老师失望,也不让我们自己失望。

5、参考文献

实用软件工程.郑人杰等.北京:

清华大学出版社.2003年

C程序设计教程.谭浩强.北京:

清华大学出版社.2007年

C语言大学实用教程.苏小红等.北京:

电子工业出版社,2007年

从问题到程序-程序设计及C语言引论.裘宗燕编著.北京:

机械工业出版社,2005

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

当前位置:首页 > 医药卫生 > 基础医学

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2