【C语言小游戏】答题系统

偶然翻到了自己大一时候写的一些代码,代码冗余,但还是想保存下来,以作纪念。

1.运行效果

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

2.运行环境

源码(Dev5.4.0版本下可直接(.cpp文件)运行 gcc 4.7.2)

注意:由于部分代码为C11标准,后缀名应改为cpp运行
在这里插入图片描述
编译器下载链接:https://pan.baidu.com/s/1Hywq6hxzxMzX1-22ig2HdA
提取码:kd65
下载后解压即可使用
在这里插入图片描述

3.完整代码

在这里插入图片描述

3.1题目.txt

我国在各种交通运输工具站台增加体温测量设备,对进出站乘客进行体温检测,其中应对高于多少摄氏度的乘客进行暂时隔离。(  )
A.37.0℃      B.37.3℃        C.37.8℃         D.38.5℃
B
下列哪项措施不是我国疫情中交通运输工具运营前的准备措施。(  )
A.做好物资保障  B.强化人员培训  C.做好乘客信息登记 D.对乘客进行限流
D
在疫情期间乘坐交通运输工具时应如何安排乘客就坐。 (  )
A.隔位分散就坐    B.隔行分散就坐    C.隔列分散就坐    D. 正常就坐
A
我国应对几类客运班线客车和客运包车宜配备手持体温检测仪及消毒剂。(  )
A.一类以上      B.二类以上       C.三类以上      D.四类
C
列车应在什么时候对车厢进行清洁消毒。(  )
A.列车运行途中 B.列车每次载客前 C.列车每次载客后 D.列车每日载客后
B
运营者不需要采集乘客的(  )信息。
A.身份证类型  B.身份证号码  C.联系方式  D.紧急联系人 
D 
为了加强空气流通,航空器在地面运行的过程中,应使用(  )系统的气源进行通气。
A.PNEU         B. BAR          C.APU         D.ACAU
C
在疫情期间民航供应什么样的餐食。  (  )
A.不提供餐食      B.仅提供饮品     C.提供简化餐食     D.提供正常餐食
C
为了防控疫情,民航乘务员可携带(  )以便于消毒。
A.酒精   B.含醇类消毒湿巾    C.湿巾    D.消毒剂 
B
(  )在运行过程中发现发热旅客会禁止人员流动?
A.铁路    B.轨道交通    C.民航    D.水路客运
C

3.2Answer_System.cpp

#include<bits/stdc++.h>
using namespace std;

//Question
typedef struct data
{
    char question[200];
    char choice[150];
    char answer[6];
}Data,*pData;

/*全局变量区域*/
Data arr[10];//题目列表
Data random[5];//随机题目表
int  situation[5];//保存每次做题的情况
char in_answer[5][8];//保存每次做题的输入
char use_time[20];//做题所用时间
char name[20],sex[5],cno[10],sch[20];//姓名,性别,学号,学校
int age;//年龄
int scores;//分数
int flag,flag1;//标记
long sum_time;//做题所用时间


/*函数声明*/
void file_read();//文件读取
void login();//登录系统
void login_map();//登录后的信息展示
void changestr(char *);//对字符串进行处理
void random_question();//随机出题
void answer_fun();//进入答题
int menu_select();//菜单
int menu_select1();//子菜单
void choice();//用于选择功能
long gettime_long();//获取当前时间,单位 秒
void gettime_str(char *);//获取当前时间并保存到字符串


long gettime_long()//获取当前时间 long型
{
    /*获取当前时间*/
    long now_time;
    time_t ti;
    struct tm * lti;
    time (&ti);//获取Unix时间戳。
    lti = localtime (&ti);//转为时间结构。
    now_time=lti->tm_hour*3600+lti->tm_min*60+lti->tm_sec;//单位为秒
    return now_time;
}

void gettime_str(char *s)//获取当前时间并保存到字符串
{
    time_t t;
    struct tm * lt;
    time (&t);//获取Unix时间戳。
    lt = localtime (&t);//转为时间结构。
    sprintf(s,"%02d:%02d:%02d",lt->tm_hour,lt->tm_min,lt->tm_sec);
}

//文件读取
void file_read()
{
    FILE *fp;
    fp=fopen("题目.txt","r");//以只读方式打开文件
    if(fp==NULL){
        cout<<"文件打开失败!\n";
        exit(-1);
    }
    for(int i=0;i<10;i++)
    {
        //文件读入
        fgets(arr[i].question,190,fp);
        fgets(arr[i].choice,150,fp);
        fgets(arr[i].answer,5,fp);
    }
    fclose(fp);
}

void changestr(char *s)
{
     for(int i=0;s[i]!='\0';i++){
          if(s[i]>='A'&&s[i]<='D'||s[i]>='a'&&s[i]<='d'){
                s[0]=s[i];
                break;
        }
    }
        switch (s[0])//兼容大小写
        {
            case 'a':
                s[0]='A';break;
            case 'b':
                s[0]='B';break;
            case 'c':
                s[0]='C';break;
            case 'd':
                s[0]='D';break;
        }
    s[1]='\0';
}

int judge_repeat(int *a,int x)//判断出题是否重复
{
    for(int i=0;i<5;i++)
        if(a[i]==x)return 1;
    return 0;
}
//随机出题
void random_question()
{
    int x;
    int a[5];
    memset(a,-1,sizeof(a));//将数组内元素初始化为-1
    srand((unsigned)time(NULL));//时间做随机数种子
    file_read();
    for(int i=0;i<5;i++){
       x=rand()%10;
       //防止产生重复的随机题目
       while(judge_repeat(a,x))x=rand()%10;
       a[i]=x;
       random[i]=arr[x];
    }
}

//做题功能
void answer_fun()
{
    char input[6];
    char now_time[20];
    long startime,endtime,nowtime;//开始做题时间和结束时时间
    scores=0;
    random_question();
    startime=gettime_long();//开始时间
    cout<<"\t\t\t请在5分钟内完成题目"<<endl;
    for(int i=0;i<5;i++){
        /*显示当前做题所用时间*/
        nowtime=gettime_long()-startime;//所用时间
        sprintf(now_time,"%02d:%02d:%02d",nowtime/3600,(nowtime%3600)/60,nowtime%60);
        if(i!=0)cout<<"\t\t\t你已用时:"<<now_time<<endl;
        /*开始做题*/
        cout<<"\t\t\t第"<<i+1<<"题"<<endl;
        cout<<"\t\t\t";
        cout<<random[i].question;
        cout<<"\t\t\t";
        cout<<random[i].choice;
        cout<<"\t\t\t请输入你的选择:";
        cin>>input;
        //去除多余的符号同时兼容大小写
        changestr(random[i].answer);
        changestr(input);
        strcpy(in_answer[i],input);//存储每次做题答案
        if(!strcmp(input,random[i].answer)){
                situation[i]=1;
                scores+=20;
        }
        else{
              situation[i]=0;
        }
    }
    flag1=1;//答完题后则标记
    endtime=gettime_long();//单位为秒
    //存储本次做题耗时
    long use=endtime-startime;
    //对齐存储时间格式
    sum_time=use;
    sprintf(use_time,"%02d:%02d:%02d",use/3600,(use%3600)/60,use%60);
}

void find_scores()
{
    char ex_time[20];
    long ex;
    //显示你的做题所用时间
    cout<<"\t\t\t做题所用时间:"<<use_time<<endl;
    //如果用时超出
    if(sum_time>300){
          ex=sum_time-300;
          sprintf(ex_time,"%02d:%02d:%02d",ex/3600,(ex%3600)/60,ex%60);
          cout<<"\t\t\t超出时长:"<<ex_time<<endl;
    }
    //改卷并显示正确答案
    for(int i=0;i<5;i++){
        cout<<"\t\t\t";
        cout<<"第"<<i+1<<"题"<<endl;
        cout<<"\t\t\t";
        cout<<random[i].question;
        cout<<"\t\t\t";
        cout<<random[i].choice<<endl;
        if(situation[i]==1){
             cout<<"\t\t\t( √ )"<<endl;
             cout<<"\t\t\t你的答案:"<<in_answer[i]<<endl;
        }
        else if(situation[i]==0){
            cout<<"\t\t\t( × )"<<endl;
            cout<<"\t\t\t你的答案:"<<in_answer[i]<<endl;
        }
            cout<<"\t\t\t";
            cout<<"正确答案:"<<random[i].answer<<"\n"<<endl;
    }
    //不及格(0-40分),及格(60分),良好(80分)和优秀(100分)
    int k=scores/10;
    cout<<"\t\t\t你的得分为:"<<scores<<endl;
    switch(k)
    {
        case 0:
        case 2:
        case 4:
            cout<<"\t\t\t";
            cout<<"很遗憾!你没有及格!别气馁,下次加油哦!"<<endl;
            break;
        case 6:
            cout<<"\t\t\t";
            cout<<"恭喜你!及格了!但还要继续努力哦!"<<endl;
            break;
        case 8:
            cout<<"\t\t\t";
            cout<<"你取得的良好的成绩!继续向满分冲刺吧!"<<endl;
            break;
        case 10:
            cout<<"\t\t\t";
            cout<<"你实在太优秀了!"<<endl;
            break;
    }
}


void login()
{
   // 学校,学号 和姓名
    flag=1;
    cout<<"\t\t\t请输入你的姓名:";
    cin>>name;
    cout<<"\t\t\t请输入你的性别:";
    cin>>sex;
    cout<<"\t\t\t请输入你的年龄:";
    cin>>age;
    cout<<"\t\t\t请输入你的学校:";
    cin>>sch;
}

void login_map()
{
        /*printf用于对齐输出*/
        printf("\t\t\t***************当前用户信息******************\n");
		printf("\t\t\t*               姓名:%-8s               *\n",name);
		printf("\t\t\t*               性别:%-8s               *\n",sex);
        printf("\t\t\t*               年龄:%-4d                   *\n",age);
        printf("\t\t\t*               学校:%-16s       *\n",sch);
		printf("\t\t\t*********************************************\n");
}

int menu_select()
{
	int c;
	do
	{
		system("cls");
		cout<<"\t\t\t"<<"*******************考试系统******************"<<endl;
		cout<<"\t\t\t"<<"*                1.登录系统                 *"<<endl;
		cout<<"\t\t\t"<<"*                2.进入考试                 *"<<endl;
        cout<<"\t\t\t"<<"*                3.退出                     *"<<endl;
        cout<<"\t\t\t"<<"*        注:请输入序号选择所需功能         *"<<endl;
		cout<<"\t\t\t"<<"*********************************************"<<endl;
		cout<<"\t\t\t请输入您要选择的操作对应的序号:";
		cin>>c;
	}while(c<1||c>3);
	return(c);
}

int menu_select1()
{
	int c1;
	do
	{
		system("cls");
		cout<<"\t\t\t"<<"*****************进入考试系统****************"<<endl;
		cout<<"\t\t\t"<<"*                 1.开始答题                *"<<endl;
		cout<<"\t\t\t"<<"*                 2.成绩查询                *"<<endl;
        cout<<"\t\t\t"<<"*                 3.返回上一级菜单          *"<<endl;
        cout<<"\t\t\t"<<"*                 4.直接退出程序            *"<<endl;
        cout<<"\t\t\t"<<"*        注:请输入序号选择所需功能         *"<<endl;
		cout<<"\t\t\t"<<"*********************************************"<<endl;
		cout<<"\t\t\t请输入您要选择的操作对应的序号:";
		cin>>c1;
	}while(c1<1||c1>4);
	return(c1);
}



void choice()
{
    int c,c1;
    while((c=menu_select())!=3){
        switch(c)
        {
            case 1:
                login();
                cout<<"\t\t\t";
                system("pause");
                break;
            case 2:
                if(!flag)
                    cout<<"\t\t\t请先登录系统!\n"<<endl;
                else{
                    system("cls");
                    //子菜单
                    while((c1=menu_select1())!=3)
                    {
                        login_map();
                        switch(c1)
                        {
                            case 1:
                                 answer_fun();
                                 cout<<"\t\t\t";
                                 system("pause");
                                 break;
                            case 2:
                                 if(!flag1)
                                    cout<<"\t\t\t请先开始答题,再查询成绩!"<<endl;
                                 else
                                    find_scores();
                                 cout<<"\t\t\t";
                                 system("pause");
                                 break;
                            case 4:
                                system("cls");
                                return ;
                        }
                    }
                }
                cout<<"\t\t\t";
                system("pause");
                break;

        }
    }
}

int main()
{
    system("mode con cols=200 lines=100");//设置窗口大小,方便显示
    choice();
    return 0;
}

  • 6
    点赞
  • 51
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值