c语言简易考试系统

完整代码放最后

此考试系统具备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;
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值