随机选题考试系统
#include<stdio.h>#include<stdlib.h>
#include<time.h>
#include<string.h>
#define N 50
int n=0; //实际参考人数
struct Info //定义最大参考人数的结构数组
{
int count; //用于答对题数计数器
int overall; //总分
char num[6+1]; //存储ID号
char name[20]; //存储姓名
}Information[20];
struct problem //定义题目结构数组
{
int Id; //题目编号
char subject[200]; //题目
char select[200]; //题目选项
char right; //正确答案
}pro[N]={ //结构变量初始化
{1,"找出下列数字的规律,选择填空() 1 4 13 40 () 364.",
"A.53 B.81 C.121 D.243",'C'},
{2,"Where () you come from ?","A.are B.is C.have D.has",'A'},
{3,"若池塘中的荷花每天长满的与前天的一样多,当第十天时已长满了半个池塘, 请问长满整个池塘需要多久?","A.20 B.21 C.10 D.11",'D'},
{4,"请问\"林字多一半\"是什么字?","A.森 B.林 C.木 D.梦",'D'},
{5,"中国历史上第一个女皇帝是()?","A. 孝庄 B.武则天 C.慈禧 D.杨贵妃",'B'},
{6,"已知A的ASCII码为65,则ASCII码为70的字符是:.","A. C B. D C. F D. G",'C'},
{7,"()发现了万有引力.","A.贝尔 B.牛顿 C.史蒂芬森 D.霍金",'B'},
{8,"已知M比P 高,O比p高,比N低,下列判断正确的是:.","A.M>O B.O>N C.N>M D.N>P",'D'},
{9,"小民第一天上学,和班里的每一位同学握一次手,一共握了30次,请问小民班有多少人?",
"A.30 B.31 C.60 D.61",'B'},
{10,"一只猴子某天摘了n个桃子,当天(第一天)吃了一半零一个,以后每天吃掉所剩桃的一半零一个 到第5天时猴子发现只剩下一个桃了,请问n 的值是?","A.94 B.46 C.22 D.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,"“耳顺”代指什么年纪?","A.四十岁 B.五十岁 C.六十岁 D.七十岁",'C'},
{22,"“阿凡提”在新疆维吾尔族语里是什么意思?","A.善良的人 B.机智的人 C.有学问的人 D.朋友多的人",'B'},
{23,"1秒等于:","A.60微秒 B.100微秒 C.120微秒 D.1000微秒",'D'},
{24,"“海上升明月,天涯共此时”是谁的诗句?","A.王勃 B.张九龄 C.白居易 D.李白",'B'},
{25,"书画作品中的“四君子”是指哪四种植物?","A.梅、兰、竹、菊 B.梅、松、竹、兰 C.梅、荷、兰、菊 D.4、兰、荷、菊",'A'},
{26,"《义勇军进行曲》是哪部电影的主题歌?","A.《塞上风云》 B.《十字街头》 C.《风云儿女》 D.《大路》",'C'},
{27,"诺贝尔奖最后设立的奖项是:","A.和平奖 B.经济学奖 C.化学奖 D.文学奖",'B'},
{28,"人的舌头的哪个部位对苦味最敏感?","A.舌尖 B.舌两侧 C.舌根 D.舌中间",'C'},
{29,"我国信用卡透支期限最长为:","A.6天 B.16天 C.60天 D.90天",'C'},
{30,"海豚为什么要追随轮船呢?","A.寻求安全保障 B.可以获取食物 C.借助外力游动 D.与人类嬉戏",'C'},
{31,"我国法律所称的老人是指年龄大于:","A.55岁的公民 B.60岁的公民 C.65岁的公民 D.70岁的公民",'A'},
{32,"我们常吃的辣椒属于什么类蔬菜?","A.叶菜类 B.茄果类 C.瓜菜类 D.水生菜类",'B'},
{33,"世界上面积最大的宫殿是:","A.克里姆林宫 B.爱丽舍宫 C.故宫 D.白宫",'C'},
{34,"下列矿物质中,属于人体微量元素的有:","A.钙 B.钠 C.钾 D.铁",'C'},
{35,"我国55个少数民族中,人口最多的是什么族?","A.满族 B.苗族 C.黎族 D.壮族",'D'},
{36,"漫画起源于哪个国家?","A.日本 B.法国 C.英国 D.中国",'D'},
{37,"举办“戛纳电影节”的戛纳是:","A.法国城市 B.意大利城市 C.英国城市 D.摩纳哥城市",'A'},
{38,"经常食用哪种食物容易引起铅中毒?","A.土豆 B.竹笋 C.松花蛋 D.酸菜鱼",'C'},
{39,"有奖销售的最高奖金额不得超过:","A.1000元 B.2000元 C.5000元 D.10000元",'C'},
{40,"全国助残日是每年五月的:","A.第1个周日 B.第2个周日 C.第3个周日 D.第4个周日",'C'},
{41,"偃旗息鼓“偃”的意思是:","A.摘下 B.收起 C.停止 D.放倒",'D'},
{42,"“跬步千里”中“跬步”指:","A.半步 B.一小步 C.一步 D.大一步",'A'},
{43,"成语“沐雨栉风”源于哪个故事?","A.苏武牧羊 B.大禹治水 C.赤壁之战 D.安史之乱",'B'},
{44,"“入木三分”这个典故原意用来形容:","A.雕刻技术高 B.文章深刻 C.书法笔力强劲 D.射箭本领高",'C'},
{45,"任何一支足球队在比赛中的人数少于几名时,该场比赛应为无效?","A.5 B.6 C.7 D.8",'B'},
{46,"世界杯足球赛始于哪一年?","A.1906年 B.1918年 C.1930年 D.1942年",'C'},
{47,"西方著名作曲家中被称为“交响乐之父”的是:","A.海顿 B.莫扎特 C.贝多芬 D.舒伯特",'A'},
{48,"古时“文章”一词可指什么?","A.彩色的条纹图案 B.泛指文字 C.寺庙里的经文 D.歌谱",'A'},
{49,"一般被誉为“艺术之母”的是:","A.绘画 B.戏剧 C.雕塑 D.舞蹈",'D'},
{50,"《水浒传》的第三回“鲁提辖拳打镇关西”,第二拳打在郑屠的:","A.鼻子上 B.眼睛上 C.太阳穴上 D.胸口上",'B'},
};
void shouye(); //首页
void yejiao(); //页脚
void Interface(); //界面
void into(); //登录
void theme(); //选题
void sum(); //总分
void displays(); //显示所有参考人员信息
void IntoExam(); //进入考试
void sort(); //对结果排序
void select(); //查询成绩
void ExamInformation(); //显示考试的最后信息
void exit();
void main() //主函数
{
char ch='y'; //控制循环
int xz;
shouye();
do
{
system("cls"); //清屏
system("color 1f"); //颜色
system("date /t"); //日期
system("time/t"); //时间
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|| ☆5、显示考试信息 ||\n");
printf("\t\t|| ☆6、退出 ||\n");
printf("\t\t〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓\n\n");
printf("请选择:\n");
yejiao();
fflush(stdin);
scanf("%d",&xz);
fflush(stdin);
switch(xz)
{
case 1 :IntoExam();break;
case 2 :displays();break;
case 3 :sort();break;
case 4 :select();break;
case 5 :ExamInformation();break;
case 6 :exit();
default :printf("输入错误!\n");
}
if(xz==6)
{
exit();
break;
}
system("cls");
printf("是否返回主菜单?(y/n)\n");
fflush(stdin);
yejiao();
scanf("%c",&ch);
getchar();
system("cls");
fflush(stdin);
}while(ch=='y');
}
void shouye()
{
printf("\n\n\t \n\n");
system("color 1f");
printf("\t¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤\n");
printf("\t¤ ¤\n");
printf("\t¤ 欢 迎 使 用 随 机 选 题 考 试 系 统 ¤\n");
printf("\t¤ ¤\n");
printf("\t¤ ¤\n");
printf("\t¤ ¤\n");
printf("\t¤ ¤\n");
printf("\t¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤\n\n");
printf("按ENTER键进入下一界面...---->");
getchar();
}
void IntoExam() //进入考试
{
system("cls");
system("color 1f");
system("date/t");
system("time/t");
char ch='y',enter;
fflush(stdin);
do
{
Interface(); //界面
printf(" 按ENTER键进入登录系统...-->");
fflush(stdin);
scanf("%c",&enter);
into(); //登录
printf(" 按ENTER键进入电脑随机选题系统...-->");
fflush(stdin);
scanf("%c",&enter);
theme(); //选题
sum(); //算得分
fflush(stdin);
printf("是否继续另一人的考试?(y/n)\n\n\n");
yejiao();
fflush(stdin);
scanf("%c",&ch);
fflush(stdin);
n++; //实际参考人数+1
}while(ch=='y');
}
void Interface() //界面
{
system("cls");
system("date/t");
system("time/t");
system("color 1f");
printf("\n\n\n жжжжжжжжжжжжжжжжжжжжжжжжжжж\n");
printf(" ж * * * * * * * * ж\n");
printf(" ж * * * * ж\n");
printf(" ж * 欢迎进入考题系统 * ж\n");
printf(" ж * * ж\n");
printf(" ж * * ж\n");
printf(" ж * * ж\n");
printf(" ж * * ж\n");
printf(" ж * ж\n");
printf(" жжжжжжжжжжжжжжжжжжжжжжжжжжж\n\n\n");
yejiao();
}
void into() //登录
{
system("cls");
system("color 1f");
system("date/t");
system("time/t");
int j;
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<n;j++)
{
if(strcmp(Information[n].num,Information[j].num)==0) //判断ID号是否有相同的
break;
}
if(j<n)
{
printf("\n该ID号已使用,请核对后重新输入.\n");
}
else
{
break;
}
}
}while(j<n);
printf("\n");
do
{
printf("请输入你的姓名:");
fflush(stdin);
scanf("%s",Information[n].name);
for(j=0;j<n;j++)
{
if(strcmp(Information[n].name,Information[j].name)==0) //判断是否有相同的姓名
{
break;
}
}
if(j<n)
{
printf("该考生已参加过一次,不能再次参加考试.\n");
printf("请核对后重新输入.\n");
}
else
break;
}while(j<n);//控制条件(如果有相同的姓名,则重新输入)
yejiao();
}
void theme() //选题
{
system("cls");
system("color 1f");
system("date/t ");
system("time/t");
int j,i,k,m=0,a[10]; //k是随机数,m是用于计算产生不同随机数的个数,a数组用于存储产生的题号
char answer; //你的选择
printf("题目已选出,请依次答题(答对一题得十分,答错或不答得零分)\n");
printf("****注意:本次一共生成10道题,每题10分,满分100分***\n\n");
do
{
printf(" ******随机产生第%d道题目******\n",m+1);
srand((unsigned)time(NULL)); //保证每次运行产生不同的随机序列
k=(rand()%100+2)/2;
for(j=0;j<m;j++)
{
if(k==a[j]) //若产生的随机数有相同的,则跳出
break;
}
if(j>=m)
{
a[m]=k; //若产生的随机数不相同,则将该数存储在a数组中
for(i=0;i<N;i++)
{
if(a[m]==pro[i].Id) //查找与该随机数相同的题号
{
printf("\n%d%s\n%s\n ",pro[i].Id,pro[i].subject,pro[i].select);//打印出题目及选项
printf("请输入你的答案\n");
fflush(stdin);
scanf("%c",&answer);
if(answer==pro[i].right)
{
Information[n].count++; //若你的答案与正确答案相同,则你的答对题数+1
printf(" @@@@@@@@@@\n");
printf(" *** *** r i g h t *** *** \n" );
printf(" @@@@@@@@@@\n\n");
getchar();
}
else
{
printf(" XXXXXXXXX\n");
printf(" *** *** w r o n g *** *** \n");
printf(" XXXXXXXXX\n\n");
getchar();
}
break; //如果找到与该随机数相同的题号,就跳出
}
else
continue;//否则就继续查找
}
m++; //产生的不同的随机数+1
}
}while(m<10); //控制产生10个不同的随机数
yejiao();
}
void sum() //总分
{
system("cls");
system("color 1f");
system("date/t");
system("time/t");
Information[n].overall=Information[n].count*10; //算得分
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);
}
yejiao();
getchar();
system("cls");
}
void displays() //显示所有参考人员的信息
{
int j;
system("cls");
system("color 1f");
system("date/t");
system("time/t");
printf("\t所有参考人员的信息如下:\n");
printf("\t\t§☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆§\n");
printf("\t\t§\t姓名\t考号\t得分\t§\n");
for(j=0;j<n;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");
yejiao();
getchar();
}
void sort() //根据成绩排序
{
int i,j;
system("cls");
system("color 1f");
system("date/t");
system("time/t");
struct Info Informations; //用于交换的中间量
//以下是冒泡排序算法
for(i=0;i<n;i++)
{
for(j=0;j<n-i-1;j++)
{
if(Information[j+1].overall>Information[j].overall)
{
Informations=Information[j+1];
Information[j+1]=Information[j];
Information[j]=Informations;
}
}
}
printf("对成绩排序后的结果如下:\n"); //打印排序后的结果(由大到小)
printf("\t§☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆§\n");
printf("\t§\t姓名\t考号 \t得分\t§\n");
for(j=0;j<n;j++)
{
printf("\t§\t%s",Information[j].name);
printf("\t");
printf("%s ",Information[j].num);
printf("\t");
printf("%d\t§\n",Information[j].overall);
fflush(stdin);
}
printf("\t§☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆§\n");
yejiao();
getchar();
}
void select() //查询
{
system("cls");
system("color 1f");
system("date/t");
system("time/t");
int j;
char nums[6+1]; //考号
char xingming[20]; //姓名
int xz;
char ch='y'; //控制循环是否继续
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);
yejiao();
scanf("%d",&xz);
getchar();
system("cls");
fflush(stdin);
switch(xz) //选择功能后,实现功能
{
case 1 : //根据ID号进行查找算法
{
do
{
printf("\n请输入你的ID号:(限一个六位数字)");
scanf("%s",nums);
nums[7]='\0';
if(strlen(nums)==6) //判断ID号是否为六位数
{
for(j=0;j<n;j++) //查找ID号相同的考生
{
if(strcmp(Information[j].num,nums)==0)
break;
}
break;
}
else
{
printf("输入错误,请重新输入.\n");
}
}while(strlen(nums)==6);
if(j<n) //如果找到了,则输出
{
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;
case 2 : //根据姓名进行查找算法
{
printf("请输入你的姓名:\n");
fflush(stdin);
scanf("%s",xingming);
fflush(stdin);
for(j=0;j<n;j++) //查找姓名相同的考生
{
if(strcmp(xingming,Information[j].name)==0)
break;
}
if(j<n)
{
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);
yejiao();
scanf("%c",&ch);
fflush(stdin);
system("cls");
}while(ch=='y');
}
void ExamInformation() //显示考试信息
{
system("cls");
system("color 1f");
system("date/t");
system("time/t");
int i;
float excellence=0; // 用于统计优秀人数
float pass=0; //用于统计及格人数
float all=0; //用于计算本次考试的总分
float average; //用于计算本次考试的平均成绩
float exces,passes;
for(i=0;i<n;i++)
{
if(Information[i].overall>=90)
excellence++; //统计优秀人数
else
continue;
}
for(i=0;i<n;i++)
{
if(Information[i].overall>=60)
pass++; // 统计及格人数
else
continue;
}
for(i=0;i<n;i++)
{
all+=Information[i].overall; //用累加的方法求本次考试的总分
}
exces=excellence/n; //求优秀率
passes=pass/n; //求及格率
average=all/n; //求本次考试的平均分
printf("\t*********************************************\n");
printf("\n\t\t本次考试的详细信息如下:\n\n");
printf("\t\t参考人数(人):%d\n",n);
printf("\t\t优秀人数(人):%.0f,优秀率:%.2f /100 \n",excellence,exces*100);
printf("\t\t及格人数(人):%.0f,及格率:%.2f /100 \n",pass,passes*100);
printf("\t\t本次考试平均分是%.2f分。\n",average);
printf("\t*********************************************\n\n");
yejiao();
getchar();
}
void yejiao() //相当于页脚
{
printf("\n\n\t\t ¤ ¤\n\n");
printf("\t\t**Ψ**Ψ**Ψ**Ψ**Ψ**Ψ**Ψ**Ψ**Ψ**Ψ**Ψ**Ψ**Ψ**Ψ**Ψ**\n\n");
}
void exit() //退出
{
system("cls");
system("date/t");
system("time/t");
printf("\n\n\t \n\n");
printf(" \t 欢迎再次使用!\n");
printf("\n \t Bye-Bye\n\n\n");
yejiao();
}