C语言考试系统程序设计报告.docx
- 文档编号:10847499
- 上传时间:2023-02-23
- 格式:DOCX
- 页数:26
- 大小:374.02KB
C语言考试系统程序设计报告.docx
《C语言考试系统程序设计报告.docx》由会员分享,可在线阅读,更多相关《C语言考试系统程序设计报告.docx(26页珍藏版)》请在冰豆网上搜索。
C语言考试系统程序设计报告
《程序设计基础》
课程设计报告
考试系统
指导教师:
任姚鹏
班级:
计科系1204班
学生姓名:
丁晓荟加雪梅姚乐
201210042220121004272012100434
张进吕亚斌
20121004402012100426
完成日期:
2013.11.26
运城学院计算机科学与技术系
目录
一、系统分析-2-
二、系统设计-2-
三、流程图-3-
四、系统实现-5-
五、运行结果-15-
六、总结-20-
一、系统分析
该考试系统主要针对单选题与填空题进行随机出题与答题。
首先要在程序设计中录入备选的选择题与填空题,然后设计随机选题,在原本录入的试题库中随机选取20道题组成一份试题,让学生做答。
1、主要数据输入(数据以文件形式存储)
试题类型主要有填空题和选择题,每道题目包括题目所在章节、题目难度系数、分值和标准答案。
(难度系数分为难、中等、容易三个等级)
2、主要功能
1)根据用户输入的选择标准,从题库中选择20道选择题和10道填空题;
2)进行在线测试,并在用户完成作答后给出答题分数;
3)可以进行用户成绩的查询;
4)列出用户的答题情况。
二、系统设计
1、菜单操作:
Main函数,实现程序的菜单操作。
根据用户选择的菜单的不同选项调用不同的函数,实现“登录进入考题系统”、“显示所有参考人员信息”、“查询成绩”、“显示考试信息”、“退出”等功能。
2、主要结构体设计
structInfo//定义最大参考人数的结构数组
{
intcount;//用于答对题数计数器
intoverall;//总分
charnum[6+1];//存储ID号
charname[20];//存储姓名
}Information[20];
structproblem//定义题目结构数组
{
intId;//题目编号
charsubject[200];//题目
charselect[200];//题目选项
charright[100];//正确答案
}pro[N]={//结构变量初始化
3、主要功能分析
1)学生进入考试系统
a、输入准考证号(准考证号为六位数)。
b、输入学生姓名。
2)开始答题:
函数会根据程序设计随机挑选相应题目,程序也会生成随机数并判断是否合法。
题目选出后,屏幕上出现题干让用户输入答案。
判断用户输入答案是否正确。
实现算法如下:
a、接受用户输入题目数,判断是否合法(大于0、小于总题数);
b、置随机数并判断随机数是否合法;
c、调用将题目装入内存模块题目装入内存;
d、在屏幕上输出题目,接受用户输入答案;
e、判断用户输入的答案是否正确,输出答题结果统计;
f、学生作答完题后,系统随即计算出答对题的数目及分数。
三、流程图
1)总体流程
2)具体流程
四、系统实现
#include
#include
#include
#include
#defineN40
intn=0;//实际参考人数
#definerandom(x,y)(rand()%(y-x+1)+x)
structInfo//定义最大参考人数的结构数组
{
intcount;//用于答对题数计数器
intoverall;//总分
charnum[6+1];//存储ID号
charname[20];//存储姓名
}Information[20];
structproblem//定义题目结构数组
{
intId;//题目编号
charsubject[200];//题目
charselect[200];//题目选项
charright[100];//正确答案
}pro[N]={//结构变量初始化
{1,"找出下列数字的规律,选择填空()141340()364.",
"A.53B.81C.121D.243",'C'},
{2,"Where()youcomefrom?
","A.areB.isC.haveD.has",'A'},
{3,"若池塘中的荷花每天长满的与前天的一样多,当第十天时已长满了半个池塘,请问长满整个池塘需要多久?
","A.20B.21C.10D.11",'D'},
{4,"请问林字多一半是什么字?
","A.森B.林C.木D.梦",'D'},
{5,"中国历史上第一个女皇帝是()?
","A.孝庄B.武则天C.慈禧D.杨贵妃",'B'},
{6,"已知A的ASCII码为65,则ASCII码为70的字符是:
.","A.CB.DC.FD.G",'C'},
{7,"()发现了万有引力.","A.贝尔B.牛顿C.史蒂芬森D.霍金",'B'},
{8,"已知M比P高,O比p高,比N低,下列判断正确的是:
.","A.M>OB.O>NC.N>MD.N>P",'D'},
{9,"小民第一天上学,和班里的每一位同学握一次手,一共握了30次,请问小民班有多少人?
",
"A.30B.31C.60D.61",'B'},
{10,"一只猴子某天摘了n个桃子,当天(第一天)吃了一半零一个,以后每天吃掉所剩桃的一半零一个到第5天时猴子发现只剩下一个桃了,请问n的值是?
","A.94B.46C.22D.10",'B'},
{11,"在下面各世界顶级的奖项中,为计算机科学与技术领域作出杰出贡献的科学家设立的奖项是?
","A.沃尔夫奖B.诺贝尔奖C.菲尔兹奖D.图灵奖",'D'},
{12,"哈雷慧星多少年出现一次?
","A.75年B.76年C.77年D.78年",'B'},
{13,"初唐四杰中有:
","A.王绩B.王勃C.王维D.王之焕",'B'},
{14,"电话的发明者是:
","A.爱迪生B.贝尔C.贝尔德D.诺贝尔",'B'},
{15,"世界环境日是:
","A.3月5日B.4月5日C.5月5日D.6月5日",'D'},
{16,"敖包相会中的敖包是:
","A.小土山B.蒙古包C石堆D.河流",'C'},
{17,"诗句每逢佳节倍思亲中的佳节原意是指:
","A.元宵节B.重阳节C.中秋节D.端午节",'B'},
{18,"汉字单共有几种读音:
","A.1种B.2种C.3种D.4种",'C'},
{19,"被称为画圣的是:
","A.顾恺之B.吴道子C.郑板桥D.齐白石",'B'},
{20,"著名雕塑作品《思想者》出于谁之手:
","A.米开朗基罗B.罗丹C.米隆D.达芬奇",'B'},
{21,"耳顺代指什么年纪?
","","六十岁"},
{22,"阿凡提在新疆维吾尔族语里是什么意思?
","","机智的人"},
{23,"1秒等于:
","","1000微秒"},
{24,"海上升明月,天涯共此时是谁的诗句?
","","张九龄"},
{25,"书画作品中的四君子是指哪四种植物?
","","梅、兰、竹、菊"},
{26,"《义勇军进行曲》是哪部电影的主题歌?
","","风云儿女"},
{27,"诺贝尔奖最后设立的奖项是:
","","经济学奖"},
{28,"人的舌头的哪个部位对苦味最敏感?
","","舌根"},
{29,"我国信用卡透支期限最长为:
","","60天"},
{30,"海豚为什么要追随轮船呢?
","","借助外力游动"},
{31,"漫画起源于哪个国家?
","A.日本B.法国C.英国D.中国",'D'},
{32,"跬步千里中跬步指:
","A.半步B.一小步C.一步D.大一步",'A'},
{33,"成语沐雨栉风源于哪个故事?
","A.苏武牧羊B.大禹治水C.赤壁之战D.安史之乱",'B'},
{34,"入木三分这个典故原意用来形容:
","A.雕刻技术高B.文章深刻C.书法笔力强劲D.射箭本领高",'C'},
{35,"任何一支足球队在比赛中的人数少于几名时,该场比赛应为无效?
","A.5B.6C.7D.8",'B'},
{36,"世界杯足球赛始于哪一年?
","A.1906年B.1918年C.1930年D.1942年",'C'},
{37,"西方著名作曲家中被称为交响乐之父的是:
","A.海顿B.莫扎特C.贝多芬D.舒伯特",'A'},
{38,"古时文章一词可指什么?
","A.彩色的条纹图案B.泛指文字C.寺庙里的经文D.歌谱",'A'},
{39,"一般被誉为艺术之母的是:
","A.绘画B.戏剧C.雕塑D.舞蹈",'D'},
{40,"《水浒传》的第三回鲁提辖拳打镇关西,第二拳打在郑屠的:
","A.鼻子上B.眼睛上C.太阳穴上D.胸口上",'B'},
};
voidIntoExam();//进入考试
voidinto();//登录
voidtheme();//选题
voidsum();//总分
voiddisplays();//显示所有参考人员信息
voidselect();//查询成绩
voidExamInformation();//显示考试的最后信息
voidexitsystem();
voidmain()//主函数
{//控制循环
inth;
do
{
system("cls");//清屏
printf("\n\n\t\t〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓\n");
printf("\t\t||☆1、登录进入考题系统||\n");
printf("\t\t||☆2、显示所有参考人员信息||\n");
printf("\t\t||☆3、查询成绩||\n");
printf("\t\t||☆4、显示考试信息||\n");
printf("\t\t||☆0、退出||\n");
printf("\t\t〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓\n\n");
printf("请选择:
\n");
fflush(stdin);
scanf("%d",&h);
fflush(stdin);
switch(h)
{
case1:
IntoExam();break;
case2:
displays();break;
case3:
select();break;
case4:
ExamInformation();break;
case0:
exitsystem();break;
default:
printf("输入错误!
\n");
}
}while(h!
=0);
}
voidIntoExam()//进入考试
{
charch='y';
charenter;system("cls");
fflush(stdin);
do
{
into();//登录
printf("按ENTER键进入电脑随机选题系统...-->");
fflush(stdin);
scanf("%c",&enter);
theme();//选题
sum();//算得分
fflush(stdin);
printf("是否继续另一人的考试?
(y/n)\n\n\n");
fflush(stdin);
scanf("%c",&ch);
fflush(stdin);
n++;//实际参考人数+1
}while(ch=='y');
}
voidinto()//登录
{
intj;system("cls");
do
{
printf("\n请输入你的ID号:
(限一个六位数字)");
scanf("%s",Information[n].num);
Information[n].num[7]='\0';
if(strlen(Information[n].num)!
=6)//判断ID号是否为六位
{
printf("\n输入错误,请重新输入!
\n");
}
else
{
for(j=0;j { if(strcmp(Information[n].num,Information[j].num)==0)//判断ID号是否有相同的 break; } if(j { printf("\n该ID号已使用,请核对后重新输入.\n"); } else { break; } } }while(j printf("\n"); do { printf("请输入你的姓名: "); fflush(stdin); scanf("%s",Information[n].name); for(j=0;j { if(strcmp(Information[n].name,Information[j].name)==0)//判断是否有相同的姓名 { break; } } if(j { printf("该考生已参加过一次,不能再次参加考试.\n"); printf("请核对后重新输入.\n"); } else break; }while(j } voidtheme()//选题 { intr[30]={0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0}; intj,i,k,m=0,a[30],t[100],n=0,w=0;//k是随机数,m是用于计算产生不同随机数的个数,a数组用于存储产生的题号 charanswer[100];system("cls");//你的选择 printf("题目已选出,请依次答题(答对一题得五分,答错或不答得零分)\n"); printf("****注意: 本次一共生成30道题,每题5分,满分150分***\n\n"); for(i=0;i<30;i++) { srand((int)time(0));k=random(1,40); for(j=0;j r[i]=k; } getchar(); for(i=0;i<30;i++) {printf("\n******随机产生第%d道题目******\n",i+1); k=r[i]; for(j=0;j if(k==pro[j].Id)//查找与该随机数相同的题号 { printf("\n%d%s\n%s\n",pro[i].Id,pro[i].subject,pro[i].select);//打印出题目及选项 printf("请输入你的答案\n"); fflush(stdin); scanf("%s",&answer); if(strcmp(answer,pro[i].right)==0) { Information[n].count++;//若你的答案与正确答案相同,则你的答对题数+1 printf("@@@@@@@@@@\n"); printf("******right******\n"); printf("@@@@@@@@@@\n\n"); getchar(); } else { printf("XXXXXXXXX\n"); printf("******wrong******\n"); printf("XXXXXXXXX\n\n"); getchar(); } } } } voidsum()//总分 { system("cls"); Information[n].overall=Information[n].count*5;//算得分 if(Information[n].overall>=60) { printf("\n\t~~~~~~~~~~ "); printf("\n\t★★★★★恭喜你,你通过了考试! ★★★★★\n"); printf("\t~~~~~~~~~~ \n"); printf("\t****************************************\n\n"); printf("\t#####您的得分是%d分#####\n\n",Information[n].overall); } else { printf("\n\t~~~~~~~~~~ "); printf("\n\t☆☆☆☆☆革命尚未成功,同志仍需努力! ☆☆☆☆☆\n"); printf("\t~~~~~~~~~~ \n"); printf("\t****************************************\n\n"); printf("\t####您的得分是%d分####\n",Information[n].overall); } getchar(); system("cls"); } voiddisplays()//显示所有参考人员的信息 { intj; system("cls"); printf("\t所有参考人员的信息如下: \n"); printf("\t\t§☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆§\n"); printf("\t\t§\t姓名\t考号\t得分\t§\n"); for(j=0;j { printf("\t\t§\t%s",Information[j].name); printf("\t"); printf("%s",Information[j].num); printf("\t"); printf("%d\t§\n",Information[j].overall); } printf("\t\t§☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆§\n"); getchar(); } voidselect()//查询 { intj; charnums[6+1];//考号 charxingming[20];//姓名 intxz; charch='y';system("cls");//控制循环是否继续 do { printf("请输入你的某一信息: \n"); printf("\n\n\t\t★★★★★★★★★★★★★★★★★\n"); printf("\t\t★ △1、考号 ★\n"); printf("\t\t★ △2、姓名★\n"); printf("\t\t★★★★★★★★★★★★★★★★★\n\n"); printf("请选择: \n\n\n"); fflush(stdin); scanf("%d",&xz); getchar(); system("cls"); fflush(stdin); switch(xz)//选择功能后,实现功能 { case1: //根据ID号进行查找算法 { do { printf("\n请输入你的ID号: (限一个六位数字)"); scanf("%s",nums); nums[7]='\0'; if(strlen(nums)==6)//判断ID号是否为六位数 { for(j=0;j { if(strcmp(Information[j].num,nums)==0) break; } break; } else { printf("输入错误,请重新输入.\n"); } }while(strlen(nums)==6); if(j { printf("查询的结果如下: \n"); printf("\t\t§☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆§\n"); printf("\t\t§\t姓名\t考号\t得分\t§\n"); printf("\t\t§\t%s",Information[j].name); printf("\t"); printf("%s",Information[j].num); printf("\t"); printf("%d\t§\n",Information[j].overall); printf("\t\t§☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆§\n"); } else printf("没有找到该ID号! "); } break; case2: //根据姓名进行查找算法 { printf("请输入你的姓名: \n"); fflush(stdin); scanf("%s",xingming); fflush(stdin); for(j=0;j { if(strcmp(xingming,Information[j].name)==0) break; } if(j { printf("\t查询的结果如下: \n"); printf("\t§☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆§\n"); printf("\t§\t姓名\t考号\t得分\t§\n"); printf("\t§\t%s",Information[j].name); printf("\t"); printf("%s",Information[j].num); printf("\t"); printf("%d\t§\n",Information[j].overall); printf("\t§☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆§\n"); } else printf("没有找到该姓名! "); } break; default: printf("请在1与2之间选择! \n"); } printf("\n是否继续查询? (y/n)\n"); fflush(stdin); scanf("%c",&ch); fflush(stdin); system("cls"); }while(ch=='y'); } voidExamInformation()//显示考试信息 { inti; floatexcellence=0;//用于统计优秀人数 floatpass=0;/
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 语言 考试 系统 程序设计 报告