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.8 KiB

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