You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

285 lines
7.1 KiB

This file contains ambiguous Unicode characters!

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

#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);
}