完整代码放最后
此考试系统具备6个功能:
1.录入题目
2.删除题目
3.查看卷面信息
4.考试登录并答卷
5.成绩统计
6.管理身份信息验证
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
struct sj {//题目结构
char tm[200];//题干(包含选项)
char answer[20];//答案
int fz;//分值
};
struct text{//卷面结构
struct sj dx[50];//单选题部分
struct sj pd[50];//判断题部分
int n1;//单选数目数
int n2;//判断数目数
};
struct dj {//答卷结构体
int num;// 学号
char name[20];//姓名
char dt[20];//答题
int score;//得分
}stu[40];
/*void menu()//菜单页面
int rzfs()//认证身份
void add_sj(struct text *k)//录入题目
void delete_sj(struct text *k)//删除题目
void printf_sj(struct text *k)//打印试卷
void ksdj(int x,struct text *k)//考生答卷
void cjtj(int x)//成绩统计
int main()//主函数 */
int rzfs()//认证身份
{
int password=654321; //管理员密码
int j;
printf("请输入管理员密码以进行下一步操作!\n");
scanf("%d",&j);
if(j==password){
printf("验证成功!\n");
return 1;
}else{
printf("验证失败!无权访问!\n");
return 0;
}
}
void cjtj(int x)//成绩统计
{
int i,sum=0,m,n;
int max=0;
int min=stu[i].score;
for(i=0;i<x;i++)
{
sum=sum+stu[i].score;
if(stu[i].score>=max){
max=stu[i].score;
m=i;
}
if(stu[i].score<min){
min=stu[i].score;
n=i;
}
}
printf("-------------[本次考试整体情况]----------------\n");
printf(" 本次共%d人参加考试,%d人总共得分:%d\n",x,x,sum);
printf(" 最高分:%s考生----(%d分)\n",stu[m].name,max);
printf(" 最低分:%s考生----(%d分)\n",stu[n].name,min);
printf(" 平均分:%d \n",sum/x);
printf("-----------------------------------------------\n");
}
void ksdj(int x,struct text *k)//考生答卷
{
printf("请考生输入学号:\n");
scanf("%d", &stu[x].num);
printf("请考生输入姓名:\n");
scanf("%s",stu[x].name);
printf("请%s考生开始作答\n",stu[x].name);
stu[x].score=0;
system("pause");
system("cls");
printf("--------------------【考试过程中请考生遵守考场纪律!】--------------------------\n");
int i,mf=0;
for(i=0;i<k->n1;i++)
{
printf(" 单选题:");
printf("%d. %s (%d分)\n请作答:\n",i+1,k->dx[i].tm,k->dx[i].fz);
printf(" ");
scanf("%s",stu[x].dt);
mf=mf+k->dx[i].fz;
if(strcmp(stu[x].dt,k->dx[i].answer)==0)
{
stu[x].score=k->dx[i].fz+stu[x].score;
}
}
for(i=0;i<k->n2;i++)
{
printf(" 判断题:");
printf("%d. %s (%d分)\n请作答:\n",i+1,k->pd[i].tm,k->pd[i].fz);
printf(" ");
scanf("%s",stu[x].dt);
mf=mf+k->pd[i].fz;
if(strcmp(k->pd[i].answer,stu[x].dt)==0)
{
stu[x].score=k->pd[i].fz+stu[x].score;
}
}
printf("\n");
printf("----------------------【考试结束!请考生领取成绩单】----------------------------\n");
if(stu[x].score==mf){
printf("----------=ヾ(@^▽^@)ノ 恭喜你获得优异的成绩!继续保持!----------------------- \n");
}else if(stu[x].score==0){
printf("--------- ┗( T﹏T )┛很遗憾,你本次考试表现较差,下次加油!---------------------\n");
}
printf("-------------------------[%s考生,你的总分为%d!]-------------------------------\n",stu[x].name,stu[x].score);
printf("--------------------------------------------------------------------------------");
}
void menu()//菜单页面
{
printf("-----------------------------------------[欢迎进入考试系统]----------------------------------------------\n");
printf("\t\t\t\t\t1.录入试卷信息\n");
printf("\t\t\t\t\t2.删除试卷信息\n");
printf("\t\t\t\t\t3.查看试卷信息\n");
printf("\t\t\t\t\t4.考生登录后开始答卷\n");
printf("\t\t\t\t\t5.查看考试总体情况\n");
printf("---------------------------------------------------------------------------------------------------------\n");
}
void add_sj(struct text *k)//录入题目
{
printf("【选择录入题型】\n[1.单选题]\n[2.判断题]\n");
int b;
scanf("%d",&b);
switch(b)
{
case 1:
printf("请输入题目与选项!(不要用空格隔开!)\n");
scanf("%s",k->dx[k->n1].tm);
printf("请输入对应的答案与分值!(请用空格隔开)!\n");
scanf("%s %d",k->dx[k->n1].answer,&k->dx[k->n1].fz);
k->n1++;
printf("是否继续录入?(1.继续 0.停止录入)");
int f;
scanf("%d",&f);
if(f==1){
system("pause");
system("cls");
add_sj(k);
}
break;
case 2:
printf("请输入题目!(不要用空格隔开)\n");
scanf("%s",k->pd[k->n2].tm);
printf("请输入对应的答案与分值\n");
scanf("%s %d",k->pd[k->n2].answer,&k->pd[k->n2].fz);
k->n2++;
printf("是否继续录入?(1.继续 0.停止录入)");
int e;
scanf("%d",&e);
if(e==1){
system("pause");
system("cls");
add_sj(k);
}
break;
}
}
void delete_sj(struct text *k)//删除题目
{
int c,d,e;
printf("[1.删除指定题目]\n[2.删除整个题型]\n");
scanf("%d",&c);
switch(c)
{
case 1:
printf("请输入该题目类型:[1.单选题][2.判断题]\n");
scanf("%d",&d);
if(d==1) {
printf("请输入该题目的序号\n");
int f;
scanf("%d",&f);
for(int i=0;i<k->n1;i++)
{
if(f==i+1)
{
for(e=f-1;e<k->n1;e++)
{
strcpy(k->dx[e].tm,k->dx[e+1].tm);
strcpy(k->dx[e].answer,k->dx[e+1].answer);
printf("删除成功!");
}
k->n1--;
}
}
}else if(d==2){
printf("请输入该题目的序号");
int f;
scanf("%d",&f);
for(int i=0;i<k->n1;i++)
{
if(f==i+1)
{
for(e=f-1;e<k->n2;e++)
{
strcpy(k->pd[e].tm,k->pd[e+1].tm);
strcpy(k->pd[e].answer,k->pd[e+1].answer);
printf("删除成功!");
}
k->n2--;
}
}
}
break;
case 2:
printf("[请输入您想删除的题型]\n[1.单选题]\n[2.判断题]\n");
int t;
scanf("%d",&t);
if(t==1){
k->n1=0;
printf("删除成功!");
}else if(t==2)
{
k->n2=0;
printf("删除成功!");
}else{
printf("无此选项!") ;
}
break;
}
}
void printf_sj(struct text *k)//打印试卷
{
int i;
for(i=0;i<k->n1;i++)
{
printf("单选题:");
printf("%d. %s (%d分)\n答案:%s",i+1,k->dx[i].tm,k->dx[i].fz,k->dx[i].answer);
printf("\n");
}
for(i=0;i<k->n2;i++)
{
printf("判断题:");
printf("%d. %s (%d分)\n答案:%s",i+1,k->pd[i].tm,k->pd[i].fz,k->pd[i].answer);
printf("\n");
}
}
int main()//主函数
{
struct text k;//k为卷面,存放题目
k.n1=0,k.n2=0;//初始化题目数为0
int x=0;//总题目数
while (1) {
menu();
printf("hi,palase scanf the number\n");
//second(&k);
int a,v;
scanf("%d", &a);
switch(a){
case 1:printf("--------------[1.录入试卷信息]-----------------\n");
v=rzfs();
if(v==0){ break; }
add_sj(&k);
break;
case 2:printf("--------------[2.删除试卷信息]-----------------\n");
v=rzfs();
if(v==0){ break; }
printf("【请输入你想进行的操作】\n");
delete_sj(&k);
break;
case 3:printf("--------------[3.查看试卷信息]-----------------\n");
v=rzfs();
if(v==0){ break; }
printf_sj(&k);
break;
case 4:printf("-------------[4.考生登录后开始答卷]------------\n");
ksdj(x,&k);
x++;
break;
case 5:printf("--------------[5.查看考试总体情况]-------------\n");
cjtj(x);
break;
default:printf("---------------[输入错误,无此选项]------------\n");
break;
}
system("pause");
system("cls");
}
system("pause");
return 0;
}