c语言编写的考试系统里固定的5道题如何改成不固定

源码码头 论文问答 1
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#include<time.h>
struct que{
char a[100];
char b[100];
char c[100];
char d[100];
char q[100];
char answer[2];
}q[100];
void add()//增加题目
{ FILE *fp=fopen("file08.txt","a+");
que f;
printf("请输入题目\n");
scanf("%s",f.q);
printf("请输入A选项\n");
scanf("%s",f.a);
printf("请输入B选项\n");
scanf("%s",f.b);
printf("请输入C选项\n");
scanf("%s",f.c);
printf("请输入D选项\n");
scanf("%s",f.d);
printf("请输入正确答案\n");
scanf("%s",f.answer);
fprintf(fp,"%s %s %s %s %s %s\n",f.q,f.a,f.b,f.c,f.d,f.answer);
fclose(fp);
}
void exam()
{
que ex[5];
int n=0;
FILE *fp=fopen("file08.txt","a+");
char arr[100];
while ((fgets (arr, 100, fp)) != NULL){
int len=strlen(arr);
int m=0,p=0;
for(int i=0;i<len-1;i++){
if(arr[i]==' '||arr[i]=='\n'){
m++;
p=0;
continue;
}
n++;
}
for(int i=0;i<5;){
srand((unsigned)time(NULL));
int s=rand()%n;
ex[i]=q[s];
int flag=0;
for(int j=0;j<i;j++){
if(!strcmp(ex[i].q,ex[j].q)){
flag=1;
break;
}
}
if(flag)
continue;
i++;
}
int sum=0;
char c[10];
if(n<5)
printf("题目不足5题\n");
else{
for(int i=0;i<n;i++){
printf("%s( )\nA %s B %s C %s D %s\n",ex[i].q,ex[i].a,ex[i].b,ex[i].c,ex[i].d);
printf("你的答案是");
scanf("%s",c);
if(c[0]==ex[i].answer[0])
sum+=20;
}
printf("你的得分是:%d分\n",sum);
}
}
int main()
{
char userName[30];
char passWord[30];
char userName1[30];
char passWord1[30];
system("color FD");
printf("\n\n\n\n\n\n");printf("================================================================\n"); printf("===========================考试系统=============================\n");
printf("================================================================\n");
system("cls");
printf("================================================================\n");
printf("===========================用户注册=============================\n");
printf("================================================================\n");
printf("\n\n\n");
printf("欢迎使用本系统!首先请您先完成用户注册:)\n"); printf("用户名:");
scanf("%s", userName);
printf("密码:");
scanf("%s",passWord);
printf("注册成功,您可以登录本系统!");
system("cls");
while(1){ printf("欢迎使用本系统!请您完成登录操作:)\n"); printf("用户名:"); scanf("%s",userName1); printf("密码:"); scanf("%s", passWord1); getchar(); if (strcmp(userName, userName1) == 0 && strcmp(passWord, passWord1) == 0) { printf("欢迎使用本系统!\n"); break; } else { printf("您输入的账户名和密码不正确,请重新输入!\n"); system("cls"); } } int num; printf("----------欢迎使用客观题考试系统-------------\n"); printf("---输入1增加试题,输入2进行考试,其他键退出---\n"); while(~scanf("%d",&num)){ if(num==1) add(); else if(num==2) exam(); else{ break; } printf("输入1增加试题,输入2进行考试,其他键退出\n"); } return 0;}

回复

共2条回复 我来回复
  • 源码客栈
    这个人很懒,什么都没有留下~
    评论

    (1)读取文件的地方错误了,也不能放在while循环中 (2)如果要获取更多的题目,que ex[5];这里就不要限定死5个题目了。 代码有很多错误。不一一说了,下面把代码贴给你,实现的功能是:从文件中读取题目所有题目(题目数用n记录) 在exam()函数中,提示一共有多少题目,让你输入需要出几道题(用m记录需要的题目数),然后在for循环中,随机生成0到n-1的随机数,从所有的n个题目中,随机抽取m个进行考试。考试分数那里每改,你自己调整一下就可以了。代码如下:

    #include<stdio.h>
    #include<stdlib.h>
    #include<string.h>
    #include<time.h>
    //最多题目数
    #define MAXN 100
    struct que
    { 
        char a[100]; 
        char b[100]; 
        char c[100]; 
        char d[100]; 
        char q[100]; 
        char answer[2];
    }q[100];
    void add()//增加题目
    { 
        FILE *fp=fopen("file08.txt","a+"); 
        que f; 
        printf("请输入题目\n"); 
        scanf("%s",f.q); 
        printf("请输入A选项\n"); 
        scanf("%s",f.a);
        printf("请输入B选项\n"); 
        scanf("%s",f.b); 
        printf("请输入C选项\n"); 
        scanf("%s",f.c); 
        printf("请输入D选项\n"); 
        scanf("%s",f.d); 
        printf("请输入正确答案\n"); 
        scanf("%s",f.answer); 
        fprintf(fp,"%s %s %s %s %s %s\n",f.q,f.a,f.b,f.c,f.d,f.answer); 
        fclose(fp);
    }
    void exam()
    {
        que ex[MAXN]; 
        int n=0; 
        FILE *fp=fopen("file08.txt","a+"); 
        char arr[100];
        while (!feof(fp))
        { 
            fscanf(fp,"%s %s %s %s %s %s\n",ex[n].q,ex[n].a,ex[n].b,ex[n].c,ex[n].d,ex[n].answer);
            if(ex[n].q[0]=='\0' || ex[n].q[0]=='\n' ) //避免读取空行
                continue;
            else
                n++;
        }
        int sum=0; 
        char c[10]; 
        if(n<5) 
            printf("题目不足5题\n"); 
        else
        {
            printf("当前共有%d道题,请输入你需要的题目数:",n);
            int m;
            scanf("%d",&m);
            getchar();
            for(int i=0;i<m;i++)
            { 
                int index = rand()%n;//生成0-n的随机数
                printf("%s( )\nA %s B %s C %s D %s\n",ex[index].q,ex[index].a,ex[index].b,ex[index].c,ex[index].d);
                printf("你的答案是"); 
                scanf("%s",c);  getchar();//接收回车符
                if(c[0]==ex[index].answer[0]) 
                    sum+=20;  //这里的分数根据题目数调整
            } 
            printf("你的得分是:%d分\n",sum); 
        }
    }
    int main()
    { 
        char userName[30]; 
        char passWord[30]; 
        char userName1[30]; 
        char passWord1[30]; 
        srand((unsigned)time(NULL));//随机种子放在main函数中即可
        system("color FD");
        printf("\n\n\n\n\n\n");
        printf("================================================================\n");
        printf("===========================考试系统=============================\n"); 
        printf("================================================================\n"); 
        system("cls"); 
        printf("================================================================\n"); 
        printf("===========================用户注册=============================\n"); 
        printf("================================================================\n"); 
        printf("\n\n\n"); 
        printf("欢迎使用本系统!首先请您先完成用户注册:)\n"); 
        printf("用户名:"); 
        scanf("%s", userName);  getchar();//接收回车
        printf("密码:"); 
        scanf("%s",passWord); getchar();//接收回车
        printf("注册成功,您可以登录本系统!"); 
        system("cls");
        while(1)
        { 
            printf("欢迎使用本系统!请您完成登录操作:)\n");
            printf("用户名:"); 
            scanf("%s",userName1); 
            printf("密码:");
            scanf("%s", passWord1); 
            getchar();
            if (strcmp(userName, userName1) == 0 && strcmp(passWord, passWord1) == 0) 
            { 
                printf("欢迎使用本系统!\n"); 
                break; 
            } 
            else 
            { 
                printf("您输入的账户名和密码不正确,请重新输入!\n"); 
                system("cls"); 
            } 
        } 
        int num; 
        printf("----------欢迎使用客观题考试系统-------------\n");
        printf("---输入1增加试题,输入2进行考试,其他键退出---\n"); 
        while(scanf("%d",&num))
        { 
            if(num==1) 
                add(); 
            else if(num==2)
                exam(); 
            else
            { 
                break; 
            } 
            printf("输入1增加试题,输入2进行考试,其他键退出\n"); 
        } 
        return 0;
    }
    
    0条评论
  • 毕设小屋
    这个人很懒,什么都没有留下~
    评论
    #define N 10
    

    定义一个常量。

    #include<stdio.h>
    #include<stdlib.h>
    #include<string.h>
    #include<time.h>
    #define N 10
    struct que{
    char a[100];
    char b[100];
    char c[100];
    char d[100];
    char q[100];
    char answer[2];
    }q[100];
    void add()//增加题目
    { FILE *fp=fopen("file08.txt","a+");
    que f;
    printf("请输入题目\n");
    scanf("%s",f.q);
    printf("请输入A选项\n");
    scanf("%s",f.a);
    printf("请输入B选项\n");
    scanf("%s",f.b);
    printf("请输入C选项\n");
    scanf("%s",f.c);
    printf("请输入D选项\n");
    scanf("%s",f.d);
    printf("请输入正确答案\n");
    scanf("%s",f.answer);
    fprintf(fp,"%s %s %s %s %s %s\n",f.q,f.a,f.b,f.c,f.d,f.answer);
    fclose(fp);
    }
    void exam()
    {
    que ex[N];
    int n=0;
    FILE *fp=fopen("file08.txt","a+");
    char arr[100];
    while ((fgets (arr, 100, fp)) != NULL){
    int len=strlen(arr);
    int m=0,p=0;
    for(int i=0;i<len-1;i++){
    if(arr[i]==' '||arr[i]=='\n'){
    m++;
    p=0;
    continue;
    }
    n++;
    }
    for(int i=0;i<N;){
    srand((unsigned)time(NULL));
    int s=rand()%n;
    ex[i]=q[s];
    int flag=0;
    for(int j=0;j<i;j++){
    if(!strcmp(ex[i].q,ex[j].q)){
    flag=1;
    break;
    }
    }
    if(flag)
    continue;
    i++;
    }
    int sum=0;
    char c[10];
    if(n<5)
    printf("题目不足5题\n");
    else{
    for(int i=0;i<n;i++){
    printf("%s( )\nA %s B %s C %s D %s\n",ex[i].q,ex[i].a,ex[i].b,ex[i].c,ex[i].d);
    printf("你的答案是");
    scanf("%s",c);
    if(c[0]==ex[i].answer[0])
    sum+=20;
    }
    printf("你的得分是:%d分\n",sum);
    }
    }
    int main()
    {
    char userName[30];
    char passWord[30];
    char userName1[30];
    char passWord1[30];
    system("color FD");
    printf("\n\n\n\n\n\n");printf("================================================================\n"); printf("===========================考试系统=============================\n");
    printf("================================================================\n");
    system("cls");
    printf("================================================================\n");
    printf("===========================用户注册=============================\n");
    printf("================================================================\n");
    printf("\n\n\n");
    printf("欢迎使用本系统!首先请您先完成用户注册:)\n"); printf("用户名:");
    scanf("%s", userName);
    printf("密码:");
    scanf("%s",passWord);
    printf("注册成功,您可以登录本系统!");
    system("cls");
    while(1){ printf("欢迎使用本系统!请您完成登录操作:)\n"); printf("用户名:"); scanf("%s",userName1); printf("密码:"); scanf("%s", passWord1); getchar(); if (strcmp(userName, userName1) == 0 && strcmp(passWord, passWord1) == 0) { printf("欢迎使用本系统!\n"); break; } else { printf("您输入的账户名和密码不正确,请重新输入!\n"); system("cls"); } } int num; printf("----------欢迎使用客观题考试系统-------------\n"); printf("---输入1增加试题,输入2进行考试,其他键退出---\n"); while(~scanf("%d",&num)){ if(num==1) add(); else if(num==2) exam(); else{ break; } printf("输入1增加试题,输入2进行考试,其他键退出\n"); } return 0;}
    
    0条评论

发表回复

登录后才能评论