|
|
#include<stdio.h>
|
|
|
#include<stdlib.h>
|
|
|
|
|
|
|
|
|
typedef struct student{
|
|
|
char name[25];
|
|
|
int num;
|
|
|
int t;
|
|
|
int f;
|
|
|
float total;
|
|
|
}STU;
|
|
|
typedef struct textpaper{
|
|
|
char title[1000];
|
|
|
char a[100];
|
|
|
char b[100];
|
|
|
char c[100];
|
|
|
char d[100];
|
|
|
char answer;
|
|
|
}Paper;
|
|
|
void Openfile();//打开文件
|
|
|
float pinfen(char,char);//评分
|
|
|
void chengji(); //按照成绩梯度输出成绩
|
|
|
void design();//出题系统
|
|
|
void check();//查看题库
|
|
|
void del();//删除题目
|
|
|
void alter();//修改题目
|
|
|
int a=0,d=0,t=0;//a表示人数 t初始化题目个数 <-全局变量
|
|
|
struct student stu[100];
|
|
|
Paper problem[1000];
|
|
|
int main(){
|
|
|
char ch,ch1,key;//key表示学生输入的答案
|
|
|
float sum=0,count=0;
|
|
|
int b,c;
|
|
|
Openfile();//打开题库
|
|
|
printf("================================================================================\n\n");
|
|
|
printf("================================================================================\n\n");
|
|
|
printf("*************************欢迎使用考试系统*******************************\n\n");
|
|
|
printf("--------------------------------------------------------------------------------\n\n");
|
|
|
printf("********************************************************************************\n\n");
|
|
|
printf("================================================================================\n\n");
|
|
|
printf("请按任意键进入考试系统系统:\n");
|
|
|
getchar();
|
|
|
system("cls");
|
|
|
printf("是否进入考试: y/n y为是;n为不是\n");
|
|
|
scanf("%c",&ch1);
|
|
|
getchar();
|
|
|
if(ch1=='y'||ch1=='Y'){
|
|
|
printf("--------------------------先录入学生信息-----------------------------\n");
|
|
|
printf("--------------------是否选择录入多人 Y/N --------\n");
|
|
|
printf("--------------------请输入-------\n");
|
|
|
scanf("%c",&ch);
|
|
|
getchar();
|
|
|
|
|
|
if(ch=='y'||ch=='Y'){
|
|
|
printf("请输入您需要录入的人数\n");
|
|
|
scanf("%d",&a);
|
|
|
for(int i=0;i<a;i++){
|
|
|
printf("请输入第%d位学生的信息\n",i+1);
|
|
|
scanf("%s %d",stu[i].name,&stu[i].num);
|
|
|
getchar();
|
|
|
}
|
|
|
system("cls");
|
|
|
}
|
|
|
else{
|
|
|
a=1;
|
|
|
printf("单名考生请输入考生信息:\n");
|
|
|
scanf("%s %d",stu[0].name,&stu[0].num);//
|
|
|
getchar();
|
|
|
system("cls");
|
|
|
}
|
|
|
printf("准备进入考试了!!你准备好了吗!!\n");
|
|
|
printf("请输入Y进入考试 \n");
|
|
|
scanf("%c",&ch);
|
|
|
getchar();
|
|
|
|
|
|
if(ch=='y'||ch=='Y'){
|
|
|
printf("请注意,所有答案均需要填大写。否则,系统将认为您的答案错误!\n");
|
|
|
printf("本次考试一共有%d道题\n",t);
|
|
|
printf("请考生耐心作答,争取优异成绩!\n");
|
|
|
}
|
|
|
for(int j=0;j<a;j++){
|
|
|
sum=0;
|
|
|
for(int i=0;i<t;i++){
|
|
|
printf("第%d题\n",i+1);
|
|
|
printf("题目:\n");
|
|
|
printf("%s\n",problem[i].title);
|
|
|
printf("A:%s\n",problem[i].a);
|
|
|
printf("B:%s\n",problem[i].b);
|
|
|
printf("C:%s\n",problem[i].c);
|
|
|
printf("D:%s\n",problem[i].d);
|
|
|
printf("请输入您的答案:");
|
|
|
key=getchar();
|
|
|
getchar();
|
|
|
count=pinfen(key,problem[i].answer);//在答题的过程中评定分数
|
|
|
sum+=count;
|
|
|
system("cls");//清屏
|
|
|
}
|
|
|
stu[j].total=sum;
|
|
|
printf("名字:%s\n",stu[j].name);
|
|
|
printf("总分:%.2f\n",stu[j].total);
|
|
|
|
|
|
}
|
|
|
chengji();//输出学生成绩
|
|
|
}
|
|
|
else{
|
|
|
while(1){//
|
|
|
system("cls");
|
|
|
printf(" *************************菜单****************************\n");
|
|
|
printf(" * 1. 我要出题 2. 查看题库 *\n");
|
|
|
printf(" * 3. 删除题目 4. 修改题目 *\n");
|
|
|
printf(" *********************************************************\n");
|
|
|
z: printf("请输入你要选择的功能:\n");
|
|
|
scanf("%d",&c);
|
|
|
getchar();
|
|
|
switch(c){
|
|
|
case 1:
|
|
|
design();//出题系统
|
|
|
|
|
|
break;
|
|
|
case 2:
|
|
|
check();//查看题库
|
|
|
|
|
|
break;
|
|
|
case 3:
|
|
|
del();//删除题目
|
|
|
break;
|
|
|
case 4:
|
|
|
alter();//修改题目
|
|
|
break;
|
|
|
default:
|
|
|
printf("您输入的序号有误,请重新输入:(\n");
|
|
|
goto z; //拓展了goto语句的使用 头文件stdio
|
|
|
}
|
|
|
}
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
return 0;
|
|
|
}
|
|
|
void Openfile(){ //打开文件
|
|
|
int i=0;
|
|
|
FILE *fp1;
|
|
|
fp1= fopen("考试题库data2.txt","ab+");//以追加的形式打开文本文件(若不存在,则新建;反之,在原文件后追加)并且在文件尾部追加数据之后,可以由位置函数设置开始读的起始位置
|
|
|
if(fp1==NULL){
|
|
|
printf("很抱歉无法打开数据文件:( \n");
|
|
|
}
|
|
|
while(!feof(fp1)){//feof 表示文件是否结束
|
|
|
if( fread(&problem[t],sizeof(Paper),1,fp1)==1){//fread 读取数据
|
|
|
t++;//读取题目的题数
|
|
|
}
|
|
|
|
|
|
}
|
|
|
fclose(fp1);//很重要的,不能漏掉
|
|
|
}
|
|
|
void design(){//出题系统
|
|
|
printf("请输入题目:\n");
|
|
|
gets(problem[t].title);
|
|
|
printf("请输入A选项:\n");
|
|
|
gets(problem[t].a);
|
|
|
printf("请输入B选项:\n");
|
|
|
gets(problem[t].b);
|
|
|
printf("请输入C选项:\n");
|
|
|
gets(problem[t].c);
|
|
|
printf("请输入D选项:\n");
|
|
|
gets(problem[t].d);
|
|
|
printf("请输入正确选项:\n");
|
|
|
problem[t].answer=getchar();
|
|
|
t++;
|
|
|
}
|
|
|
void check(){//查看题库
|
|
|
int i;
|
|
|
printf("本题库共有%d道题目\n",t);
|
|
|
for(i=0;i<t;i++){
|
|
|
printf("第%d题:\n",i+1);
|
|
|
printf("题目:\n");
|
|
|
printf("%s\n", problem[i].title);
|
|
|
printf(" A:%s\n", problem[i].a);
|
|
|
printf(" B:%s\n", problem[i].b);
|
|
|
printf(" C:%s\n", problem[i].c);
|
|
|
printf(" D:%s\n", problem[i].d);
|
|
|
printf("正确答案为:%c\n", problem[i].answer);
|
|
|
}
|
|
|
putchar('\n');
|
|
|
system("pause");
|
|
|
}
|
|
|
void del(){//删除题目
|
|
|
int i;
|
|
|
char chi;
|
|
|
printf("请输入您要删除的题目的标号:\n");
|
|
|
scanf("%d",&i);
|
|
|
getchar();
|
|
|
i=i-1;
|
|
|
printf("您要删除的题目内容如下:\n");
|
|
|
printf("第%d题\n",i+1);
|
|
|
printf("题目:\n");
|
|
|
printf("%s\n", problem[i].title);
|
|
|
printf(" A:%s\n", problem[i].a);
|
|
|
printf(" B:%s\n", problem[i].b);
|
|
|
printf(" C:%s\n", problem[i].c);
|
|
|
printf(" D:%s\n", problem[i].d);
|
|
|
printf("正确答案为:%c\n", problem[i].answer);
|
|
|
printf("\n您确定删除该题目吗? Y/N\n");
|
|
|
chi = getchar();
|
|
|
getchar();
|
|
|
if(chi=='N'||chi=='n'){
|
|
|
printf("即将返回上一级:(\n");
|
|
|
system("pause");
|
|
|
return;
|
|
|
}
|
|
|
for(;i<t;i++){
|
|
|
problem[i]=problem[i+1];
|
|
|
}
|
|
|
t--;
|
|
|
printf("删除成功,所有题目编号已经更新 :)\n\n");
|
|
|
system("pause");
|
|
|
}
|
|
|
void alter(){//修改题目
|
|
|
int i;
|
|
|
char chi;
|
|
|
printf("\n请输入你要修改的题目的编号: ");
|
|
|
scanf("%d", &i);
|
|
|
i = i - 1;
|
|
|
getchar();
|
|
|
printf("\n您要修改的题目内容如下: \n");
|
|
|
printf("\nNo.%d\n", i + 1);
|
|
|
printf("Title:\n");
|
|
|
printf("%s\n", problem[i].title);
|
|
|
printf(" A:%s\n", problem[i].a);
|
|
|
printf(" B:%s\n", problem[i].b);
|
|
|
printf(" C:%s\n", problem[i].c);
|
|
|
printf(" D:%s\n", problem[i].d);
|
|
|
printf("正确答案为:%c\n", problem[i].answer);
|
|
|
printf("\n您确定修改该题目吗? Y/N\n");
|
|
|
chi = getchar();
|
|
|
getchar();
|
|
|
if(chi == 'N' || chi == 'n')
|
|
|
{
|
|
|
printf("即将返回到菜单页面 :)\n\n");
|
|
|
system("pause");
|
|
|
return;
|
|
|
}
|
|
|
printf("请输入题目:\n");
|
|
|
gets(problem[i].title);
|
|
|
printf("请输入A选项:\n");
|
|
|
gets(problem[i].a);
|
|
|
printf("请输入B选项:\n");
|
|
|
gets(problem[i].b);
|
|
|
printf("请输入C选项:\n");
|
|
|
gets(problem[i].c);
|
|
|
printf("请输入D选项:\n");
|
|
|
gets(problem[i].d);
|
|
|
printf("请输入正确选项:\n");
|
|
|
problem[i].answer = getchar();
|
|
|
printf("修改成功,即将返回上一级 :)\n\n");
|
|
|
system("pause");
|
|
|
}
|
|
|
float pinfen(char key,char ch){
|
|
|
if(key==ch){
|
|
|
return 10.0;
|
|
|
}
|
|
|
else
|
|
|
return 0.0;
|
|
|
}
|
|
|
void chengji(){//冒泡排序法
|
|
|
STU temp;
|
|
|
float sum=0;
|
|
|
printf("*姓名 学号 成绩\n");
|
|
|
for(int i=0;i<a;i++){
|
|
|
for(int j=i+1;j<a;j++){
|
|
|
if(stu[i].total<stu[j].total){
|
|
|
temp=stu[j];
|
|
|
stu[j]=stu[i];
|
|
|
stu[i]=temp;
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
for(int i=0;i<a;i++){
|
|
|
printf("%s %03d %.2f \n ",stu[i].name,stu[i].num,stu[i].total);
|
|
|
sum+=stu[i].total;
|
|
|
}
|
|
|
printf("****平均分为%.2f\n",sum/a);
|
|
|
}
|