C语言:驾驶员理论课程模拟考试与学习系统

Posted 学不完就double

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了C语言:驾驶员理论课程模拟考试与学习系统相关的知识,希望对你有一定的参考价值。

一、课题内容和要求

驾驶员理论课程模拟考试与学习系统是在Dev C++编译环境下以C语言为编程语言编译完成的,为实现驾驶员科目一自主学习,查询知识和进行模拟考试的系统。同时为了方便驾校管理,加入了管理员模块,方便管理员对题库进行修改和编辑,同时,管理员可以为驾校员工添加新的管理员账户,普通用户可在注册后进入系统可进行自主训练,同时能在查看所有习题进行备考和进行错题重做。

课题基本要求:

(1)提供管理员和用户菜单选项,分别进入不同权限界面;

(2)进入管理员界面需要密码验证,管理员界面负责试题库的管理(修改、查询、删除、增加)以及考试成绩的统计等;

(3)进入用户界面需要输入用户 ID,界面菜单选项具有错题、学习和测验等功能;

(4)用文件保存试题库并可随时增加试题到试题库中;

(5)用户可实现输入自己的答案,系统可根据用户答案与标准答案的对比实现判卷并给出成绩。

课题选做要求:

(1)引进错题系统,可以进行错题重做。(已实现)

(2)用户可查看所有题库并进行学习。(已实现)

(3)用户、管理员ID均相对独立,不可重复,减少管理困难。(已实现)

(4)拥有固定路径的资源库,方便后期对题库等内容进行优化和大面积的软件更新。(已实现)

创新功能与特性:

(1)用户每作答一题都会实时判断并给出实时分数,模拟真实考试场景。

(2)管理员可以添加新的管理员。

(3)参考微软等大型公司软件,界面在优化后更清晰整洁,全新的问候与提示语拉近用户距离感,提高用户使用体验。

二、需求分析

(1)提供可操作的主菜单:输出菜单,用于显示以从文件中加载的总客户信息和若干个可选的功能选项。根据客户输入的选项来运行不同的功能,运行不同的函数。

(2)用户主菜单和分菜单:用户主菜单提供注册和登录两个功能,适用于拥有和未拥有账号的用户进行相关操作。用户分菜单是用户主要功能菜单,负责提供用户所需的模拟测试,错题学习,知识学习功能的引导并实现相应跳转。

(3)管理员主菜单,分菜单以及题库菜单:管理员主菜单适用于管理员登录,仅在资源库文本文件 admin.txt 中存储的管理员才可以进行登录。管理员分菜单为管理员提供给相应的功能,包括对成绩进行查看,添加新管理员,以及进入题库系统。题库菜单是题库系统的专用菜单,仅管理员才可以访问,它提供了对题目进行删除,增加,编辑等功能。

三、概要设计

  1. 主要存储结构

typedef struct Admin               //管理员信息存储

       char ID[20];
       char name[20];
       char password[20];
Admin;
Admin admin[N];
typedef struct User                   //用户信息存储
 
       char ID[20];
       char name[20];
       char password[20];
User;
User user[N];
 
typedef struct a               //试题的结构体
         
       char text[M][N];       //存放试题
       char answer[M];       //存放答案
 text_answer;
 
typedef struct userscore          //用户成绩的结构体
               
       int userid;                         //存放用户ID
       char username[20];           //存放用户名
       int score;              //存放用户成绩
       int mistakes[M];
 SCORE;
SCORE scores;
 
typedef struct usermis            //用户成绩的结构体
 
       int userid;                         //存放用户ID
       char username[20];           //存放用户名
       int mistakes[M];               //存放用户错题题号
 MISTAKE;
MISTAKE MIS;
 
2.主要函数概要
//系统菜单部分
voidMainM();              //系统总菜单
//用户菜单部分
voidUserSM();             //用户主菜单(注册和登录)
voidUserM();              //用户菜单(知识学习,测验,错题查看,错题重做)
//管理员菜单部分
voidAdminSM();           //管理员总菜单(登录,添加管理员)
voidAdminM();            //管理员分菜单(题库,成绩管理)
voidExerM();              //题库管理菜单(包含增加,删减,编辑)
//用户函数
int login();                           //用户登录(ID 密码)、
void regist();                         //用户注册
void product_random(int x, int a[]);       //题目随机生成
void test(int pja);                      //考试模块函数
void writescore(SCORE scores);          //分数写入
void writemis(SCORE scores,int n);       //错题写入
int Getmis(FILE *fp1,int a[]);            //错题文件读取
int moveToNextLine(FILE *fp);          //文件内容扫描
void Getmistakes(MISTAKE MIS);       //错题信息获取
void mistest(int n,MISTAKE MIS);       //错题重做模块
void studytest();                       //学习系统
void savefile();                        //用户信息写入
void readfile();                        //用户信息读取
//管理员函数
voidshowscore();                      //分数查看
void addexe();                         //题目增加
voidadminregist();                     //添加管理员
voidadminsavefile();                   //管理员信息写入
voidadminreadfile();                   //管理员信息读取
voidadminlogin();                     //管理员登录

四、源程序代码

//maincontrol.c中的代码
int main()

    MainM();
    return 0;

//user.c中的代码
int number=0;
char passwd[20];
void test(int pja)
 
    int i=0,j=0,k=0;
    int flag,n=0,m;
    text_answer a;
    char ch1,ans;
    char choice2;
    FILE *fp,*fp1;
    int random[560];
    int mis=0,count=1,right=0,score=100;
    if ((fp1=fopen("C:\\\\驾校系统资源库\\\\text.txt","r"))==NULL)
  //判断文件是否打开成功
        printf("嗯...试题库文件打开失败,请尝试联系管理员\\n");
        exit(0);
     else 
        while((ch1=fgetc(fp1))!=EOF) 
                                       //把题目放到数组中
            if(ch1=='\\n') 
                i++;
                j=0;
            
            if(ch1 <= 0 || (ch1 >= '0' && ch1 <= '9') || (ch1 >= 'A' && ch1 <= 'Z') || ch1 == '.')
                //把题目放到数组中,题目里的汉字在计算机存的码值小于0
            
                a.text[i][j++]=ch1;
             else if(ch1>='a'&&ch1<='z')       //把答案存到数组中
                a.answer[k++]=ch1;
        
        fclose(fp1);                         //关闭文件
    
    i=560;
    m=100;
    product_random(i,random);                    //将随机数放到数组中
    do 
        flag=random[n++];                        //随机抽题
        if((flag%5)!=0)。     //判断随机数是否为5的倍数(题目的行号为5的倍数)
            m++;
        else 
Reanswer:
            printf("%d.",count);
            puts(a.text[flag+0]);
            printf("\\n");                        //输出题目和选项
            puts(a.text[flag+1]);
            printf("\\n");
            puts(a.text[flag+2]);
            printf("                                               E.退出考试");
            printf("\\n");
            puts(a.text[flag+3]);
            printf("\\n");
            puts(a.text[flag+4]);
            printf("\\n");
            printf("你选择:");
            scanf("%c",&ans);
            if (ans!='A'&&ans!='B'&&ans!='C'&&ans!='D'&&ans!='E') 
                                                     //判断输入的选项
                printf("你的选择无效,请重新作答\\n");
                system("pause");
                system("cls");
                fflush(stdin);
                goto Reanswer;
            
            if (a.answer[flag/5]==ans+32)                  //判断答案
                printf("\\n选择正确\\n\\n");
                right++;
             else if(ans=='E') 
Rechoose:
                system("cls");
                fflush(stdin);
                printf("是否确认退出考试?\\n\\n");
                printf("A.是              B.否\\n\\n");
                scanf("%c",&choice2);
                if (choice2!='A'&&choice2!='B') 
                                                     //判断输入的选项
                    printf("你的选择无效,我们无法进行相应操作,请重新选择\\n");
                    system("pause");
                    system("cls");
                    fflush(stdin);
                
                goto Rechoose;
                if(choice2=='A') 
                    system("cls");
                    fflush(stdin);
                    break;
                
                if(choice2=='B') 
                system("cls");
                    fflush(stdin);
                goto  Reanswer;
             else 
                printf("\\n你的选择错误,正确答案为");
                printf("%c\\n\\n",a.answer[flag/5]-32);
                scores.mistakes[mis++]=flag/5;        //将错题行数放入数组
            
            score=100-mis;
            printf("剩余%d道题目         当前分数%d分\\n\\n",100-count,score);
//输出剩余题目和当前分数
            count++;
            system("pause");
            system("cls");
            fflush(stdin);
        
     while(--m);
    printf("你的考试已结束,您的总分为%d分\\n",right);
    scores.score=right;
    scores.userid=((int)user[pja].ID[0]-48)*10000+((int)user[pja].ID[1]-48)*1000+((int)user[pja].ID[2]-48)*100+((int)user[pja].ID[3]-48)*10+((int)user[pja].ID[4]-48);
    strcpy(scores.username,user[pja].name);
    writescore(scores);
    writemis(scores,mis);
    system("pause");
    printf("你的错题已经记录,你可以进入错题系统查看\\n");
    printf("即将为你返回菜单界面\\n");
    system("pause");
    system("cls");
    fflush(stdin);
    UserM();


void product_random(int x, int a[]) 
                                                      //产生随机数并放进数组
    srand(time(0));
    int i, j, temp;
    for(i = 0; i < x; i++) 
        temp = rand() % x;
        for(j = 0; j < i; j++) 
            if(temp == *(a + j)) 
                i--;
                break;
             else
                *(a + i) = temp;
        
    


void writescore(SCORE scores) 
    FILE *fp;
    if((fp=fopen("C:\\\\驾校系统资源库\\\\userscore.txt","a+"))==NULL) 
                                                    //判断文件是否打开成功
        printf("很抱歉,打开成绩记录文件失败,请尝试创建相关文件以继续使用\\n");
        exit(0);
    
    fprintf(fp,"%d|%s@%d",                           //将用户信息和成绩写入文本文件
            scores.userid,
            scores.username,
            scores.score);
    fputc('\\n',fp);
    fclose(fp);


void writemis(SCORE scores,int n) 
    FILE *fp;
    int i=0,j;
    if((fp=fopen("C:\\\\驾校系统资源库\\\\mistakes.txt","a+"))==NULL) 

        printf("很抱歉,打开错题记录文件失败,请尝试创建相关文件以继续使用\\n");
        exit(0);
    

    fprintf(fp,"%d|%s@",                        //将用户信息和错题题号写入文本文件
            scores.userid,
            scores.username);
    for(i=0; i<n; i++)  
        fprintf(fp,"%d,",scores.mistakes[i]);
    
    fputc('\\n',fp);
    fclose(fp);

void studytest()

    int i=0,j=0,k=0;
    int flag=0,n=0,m;
    text_answer a;
    char ch1,ans;
    char choice2;
    FILE *fp,*fp1;
    int random[M];
    int mis=0,count=1,right=0,score=100;
    
    if ((fp1=fopen("C:\\\\驾校系统资源库\\\\text.txt","r"))==NULL) 
 
        printf("嗯...试题库文件打开失败,请尝试联系管理员");
        exit(0);

     else 
        while((ch1=fgetc(fp1))!=EOF)             //把题目放到数组中
            if(ch1=='\\n') 
                i++;
                j=0;
            
            if(ch1 <= 0 || (ch1 >= '0' && ch1 <= '9') || (ch1 >= 'A' && ch1 <= 'Z') || ch1 == '.')
                //把题目放到数组中,题目里的汉字在计算机存的码值小于0
            
                a.text[i][j++]=ch1;


             else if(ch1>='a'&&ch1<='z')           //把答案存到数组中
                a.answer[k++]=ch1;
        
        fclose(fp1);
    
while(1)


Reanswer:
            printf("%d.",count);
            puts(a.text[flag+0]);
            printf("\\n");                                     //输出题目和选项
            puts(a.text[flag+1]);
            printf("\\n");
            puts(a.text[flag+2]);
            printf("                                               E.退出学习");
            printf("\\n");
            puts(a.text[flag+3]);
            printf("\\n");
            puts(a.text[flag+4]);
            printf("\\n");
            printf("答案为:");
            printf("%c\\n\\n",a.answer[flag/5]-32);
            printf("A.上一题                     B.下一题\\n\\n");
            scanf("%c",&ans);
            if (ans!='A'&&ans!='B'&&ans!='E')
                                                          //判断输入的选项
                printf("你的选择无效,请重新选择。\\n");
                system("pause"); 
                system("cls");
                fflush(stdin);
                goto Reanswer;
            
            if (ans=='A')  
                if(flag==0)
                printf("注意,这已经是第一题\\n");
                system("pause");
                system("cls");
                fflush(stdin);
                goto Reanswer;
                else
                flag-=5;
                system("cls");
                fflush(stdin);
                count--;
                continue;
                

            else if(ans=='B')
            if(flag==(k-1)*5)
            printf("注意,已经是最后一题\\n");
            system("pause");
            system("cls");
                fflush(stdin);
            goto Reanswer;
            
            else
            flag+=5;
            count++;
            system("cls");
            fflush(stdin);
            continue;
            
            
             else if(ans=='E') 
Rechoose:
                system("cls");
                fflush(stdin);
                printf("是否确认退出学习?\\n\\n");
                printf("A.是              B.否\\n\\n");
                scanf("%c",&choice2);
                if (choice2!='A'&&choice2!='B') 
                    printf("你的选择无效,请重新选择\\n");
                    system("pause");
                    system("cls");
                    fflush(stdin);
                
                goto Rechoose;
                if(choice2=='A') 
                    system("cls");
                    fflush(stdin);
                    printf("知识学习已结束。\\n");
                    system("pause");
                    system("cls"); 
                    UserM();
                    break;
                
                if(choice2=='B') 
                     system("cls");
                    fflush(stdin);
                goto  Reanswer;
                
             else 
                printf("\\n选择错误,正确答案为");
                printf("%c\\n\\n",a.answer[flag/5]-32);
                
            
            flag+=5;
    
    

void regist() 

    int i,t;
    int reg= 1;
    char key[20]; 
    char account[20];
    char password[20];
    printf("      ************************* 现在,让我们开始注册你的账户 *************************\\n\\n");
    printf("      只需要几步简单的操作,你就可以开始使用我们的系统了!请按如下引导操作。\\n");
    printf("      请注意:你注册的ID必须为5位数字\\n");
a:  printf("      请输入ID:");
    scanf("%s", account);
    if (strspn(account, "0123456789") != strlen(account))
    
    printf("      ★你输入的ID无效,请重新输入\\n\\a");
        goto a; 
    
    if(strlen(account)!=5)
    
    printf("      ★你输入的ID长度不合规,请重新输入:\\n\\a");
        goto a;
      
    for (i = 0; i < number; i++) 
    
        if (strcmp(user[i].ID, account) == 0)
        
        printf("      ★这个账号已链接到其他账户,请重新输入\\n\\a");    
            goto a;
        
    
    printf("      请设置你的密码,请注意,您的密码仅限6位:  \\n");
b:    printf("      请输入密码:");
    scanf("%s", password);
        if(strlen(password)!=6)
    
        printf("      ★你输入的密码长度不合规,请重新输入:\\n\\a");
        goto b;
      
     do
    
        printf("      请再次输入您的密码:  ");
        scanf("%s", &key);
        if(strcmp(key,password) == 0) 
            t = 0;
        else 
        
            t = 1;
            printf("       两次输入的密码不一致,请重新输入 :) \\n");
        
    while(t == 1);
    
    if (reg) 
    
        strcpy(user[number].ID, account);
        strcpy(user[number].password, password);
        printf("      请输入你的用户名: ");
        scanf("%s",user[number].name);
        number++;
        printf("      搞定!\\n");
        printf("      你的账户已激活,现在可以开始使用你的系统了。\\n") ;
        system("pause");
        system("cls");
        fflush(stdin);
    
    UserSM();

int login() 

    int log = 0;
    int i;
    char account[20];
    char password[20];
    printf("\\n       ************************* 如果你拥有我们的账户,请登录 *************************\\n\\n");
   c: printf("       请输入账号:");
    scanf("%s", account); 
      printf("       请输入密码:");
    scanf("%s", password);
    for (i = 0; i < number; i++) 
    
        if (strcmp(user[i].ID, account) == 0 && strcmp(user[i].password, password) == 0) 
        
        printf("       登录成功,即将进入系统\\n");    
            log = 1;
            system("pause");
            system("cls");
            fflush(stdin);
            UserM(); 
            return i;
        
    
    if(log==0)
    
        printf("       你的用户名或者密码输入错误,请重新输入\\n\\a");
    goto c;
    
   return 0;


void savefile() 

    int i = 0;
    FILE *file;
    fopen("C:\\\\驾校系统资源库\\\\user.txt", "w");
    for (i = 0; i < number; i++) 
    
        fprintf(file, "%s %s %s\\n", user[i].ID, user[i].password, user[i].name);
    
    fclose(file);

void readfile() 

    int i = 0;
    FILE *file = fopen("C:\\\\驾校系统资源库\\\\user.txt", "r");
    if (file) 
    
        while (1) 
        
            if (feof(file)) break;
            i = number;
            fscanf(file, "%s %s %s\\n", user[i].ID, user[i].password, user[i].name);
            number++;
        
        fclose(file);
    


void Getmistakes(MISTAKE MIS) 
    FILE *fp1;
    char ch1,ch2,ch,id1,id2,id3,id4,id5;
    int i=0,j,k,m,n,id,account;
    int misid[1000]= 0;
    int mistext[N];
    if ((fp1=fopen("C:\\\\驾校系统资源库\\\\mistakes.txt","r+"))==NULL)  //判断文件是否打开成功
        printf("很抱歉,打开错题记录文件失败,请尝试创建相关文件以继续使用\\n\\a");
        exit(0);

    
    while(ch != EOF) .                                        //获取错题文件中的用户ID
        ch = fgetc(fp1);

        if (!i) 
            id1 = ch;
            id2 = fgetc(fp1);
            id3 = fgetc(fp1);
            id4 = fgetc(fp1);
            id5 = fgetc(fp1);
            id=((int)id1-48)*10000+((int)id2-48)*1000+((int)id3-48)*100+((int)id4-48)*10+(int)id5-48;
//注意转换
            misid[i++]=id;                                            //存放用户ID
        
        if(ch=='\\n') 
            id1 =fgetc(fp1) ;
            id2 = fgetc(fp1);
            id3 = fgetc(fp1);
            id4 = fgetc(fp1);
            id5 = fgetc(fp1);
            id=((int)id1-48)*10000+((int)id2-48)*1000+((int)id3-48)*100+((int)id4-48)*10+(int)id5-48;
//注意转换
            misid[i++]=id;                                            //存放用户ID
        

    
    printf("请输入用户ID\\n");
    scanf("%d",&account);
    system("cls");
                fflush(stdin);
    MIS.userid=account;
    for(j=0; j<i; j++) 
        if(misid[j]==account) 
            break;
        
    
    rewind(fp1);                                                //使光标返回文件头
    for(k=0; k<j; k++)
        moveToNextLine(fp1);                                    //使光标向下移动一行
    n=Getmis(fp1,mistext);
    for(m=0; m<n; m++) 
        MIS.mistakes[m]=mistext[m];
    
    mistest(n,MIS);

    fclose(fp1);                                                //关闭文件


int moveToNextLine(FILE *fp) 
    int c;

    if(fp == NULL) return -1;
    while(1) 
        c = fgetc(fp);
        if(c == EOF) return EOF;
        if(c == '\\n') break;
    

    return 0;



int Getmis(FILE *fp1,int a[]) 
    char ch1,ch2,ch3,ch5,ch='a',id1,id2,id3,id4,id5;
    int i=0,j,k,id,account,ch4;


    while(ch1!= '\\n') 
        ch = fgetc(fp1);
        while(ch=='@') 

            ch1= fgetc(fp1);
            if(ch1=='\\n')
                break;

            ch2=fgetc(fp1);
            if(ch2!=',') 
                ch3=fgetc(fp1);
                if(ch3!=',') 
                    ch4=((int)ch1-48)*100+((int)ch2-48)*10+(int)ch3-48;
                    a[i++]=ch4;
                    ch4=fgetc(fp1);
                    continue;
                 else 
                    ch4=((int)ch1-48)*10+(int)ch2-48;
                    a[i++]=ch4;
                    continue;
                

             else 
                ch4=(int)ch1-48;
                a[i++]=ch4;
                continue;
            
        
    
    return i;


void mistest(int n,MISTAKE MIS) 
    int i=0,j=0,k=0,count2=0;
    int flag,m;
    text_answer a;
    char ch1,ans;
    char choice2;
    FILE *fp,*fp1;
    int random[M];
    int mis=0,count=1,right=0,score=100;
    if ((fp1=fopen("C:\\\\驾校系统资源库\\\\text.txt","r"))==NULL)  
        printf("嗯...试题库文件打开失败,请尝试联系管理员");
        exit(0);
     else 
        while((ch1=fgetc(fp1))!=EOF)  
            if(ch1=='\\n') 
                i++;
                j=0;
            
            if(ch1 <= 0 || (ch1 >= '0' && ch1 <= '9') || (ch1 >= 'A' && ch1 <= 'Z') || ch1 == '.')
                //把题目放到数组中,题目里的汉字在计算机存的码值小于0
            
                a.text[i][j++]=ch1;
             else if(ch1>='a'&&ch1<='z') 
                a.answer[k++]=ch1;
        
        fclose(fp1);
    
    do 
        flag=MIS.mistakes[count2++];//随机抽题
        if((flag%1)!=0).                   //判断随机数是否为5的倍数(题目的行号为5的倍数)
            n++;
        else 
Reanswer:
            printf("%d.",count);
            puts(a.text[flag*5+0]);
            printf("\\n");
            puts(a.text[flag*5+1]);
            printf("\\n");
            puts(a.text[flag*5+2]);
            printf("                                               E.退出错题");
            printf("\\n");
            puts(a.text[flag*5+3]);
            printf("\\n");
            puts(a.text[flag*5+4]);
            printf("\\n");
            printf("你选择:");
            scanf("%c",&ans);
            if (ans!='A'&&ans!='B'&&ans!='C'&&ans!='D'&&ans!='E')  
                printf("无效选择!请重新作答!\\n");
                system("pause");
                system("cls");
                fflush(stdin);
                goto Reanswer;
            
            if (a.answer[flag]==ans+32)                          //判断答案
                printf("\\n选择正确\\n\\n");
                right++;

             else if(ans=='E') 
Rechoose:
                system("cls");
                fflush(stdin);
                printf("是否确认退出错题?\\n\\n");
                printf("A.是              B.否\\n\\n");
                scanf("%c",&choice2);
                if (choice2!='A'&&choice2!='B')  //判断输入的选项
                    printf("无效选择!请重新选择!\\n");
                    system("pause");
                    system("cls");
                    fflush(stdin);

                    goto Rechoose;
                
                if(choice2=='A') 
                    system("cls");
                    fflush(stdin);
                    break;
                
                if(choice2=='B') 
                    system("cls");
                    fflush(stdin);
                    goto  Reanswer;
                
             else 
                printf("\\n选择错误,正确答案为");
                printf("%c\\n\\n",a.answer[flag/5]-32);

            
            score=100-mis;
            count++;
            system("pause");
            system("cls");
            fflush(stdin);
        
     while(--n);
    printf("错题重做已结束,请继续学习,即将返回主界面。");
    system("pause");
    system("cls");
    fflush(stdin);
    UserM();

//admin.c中的代码
int num=0;
void showscore()

    FILE *fp;
    char ch;
    fp=fopen("C:\\\\驾校系统资源库\\\\userscore.txt", "r");
    if (fp==0)
        
        printf("抱歉,打开成绩记录文件失败,请尝试创建相关文件以继续使用");
        exit(1);
    
    printf("你的组织内的用户成绩如下:\\n");
    printf("提示:‘@’后是你组织成员的考试分数:\\n"); 
    printf("\\n"); 
    while ((ch=fgetc(fp))!=EOF)
        
        putchar(ch);
    
putchar('\\n');
fclose(fp);
system("pause");
system("cls");
fflush(stdin);
AdminM();


void addexe()。                                               //添加习题
 
    FILE *fp1;
    char topic[N];
    char choice1[N];
    char choice2[N];
    char choice3[N];
    char choice4[N];
    char answer;
    int a;
    if ((fp1=fopen("C:\\\\驾校系统资源库\\\\text.txt","a+"))==NULL)  /*判断文件是否打开成功*/
        printf("嗯...试题库文件打开失败,请尝试联系管理员\\n");
        exit(0);
    
do
    printf("请输入题目:\\n\\n");
    gets(topic);printf("\\n"); 
    fprintf(fp1,"%s",topic);
    fputc('\\n',fp1);
    fflush(stdin);
    printf("请输入选项A:\\n\\n");
    gets(choice1);printf("\\n"); 
    fprintf(fp1,"A、%s",choice1);
    fputc('\\n',fp1);
    fflush(stdin);
    printf("请输入选项B:\\n\\n");
    gets(choice2);printf("\\n"); 
    fprintf(fp1,"B、%s",choice2);
    fputc('\\n',fp1);
    fflush(stdin);
    printf("请输入选项C:\\n\\n");
    gets(choice3);printf("\\n"); 
    fprintf(fp1,"C、%s",choice3);
    fputc('\\n',fp1);
    printf("请输入选项D:\\n\\n");
    gets(choice4);printf("\\n"); 
    fflush(stdin);
    fprintf(fp1,"D、%s",choice4);
fflush(stdin);
printf("请输入答案:\\n\\n");
answer=getchar();printf("\\n"); 
fprintf(fp1,"%c",answer);
    fputc('\\n',fp1);
fflush(stdin);

printf("题目已成功添加!你是否需要继续添加题目?\\n");
printf("1 是   2 否\\n");

do
    scanf("%d",&a);
 while(a!=1&&a!=2);
if(a==1)

    
    system("cls");
    fflush(stdin);
    continue;


if(a==2)
system("cls");
fflush(stdin);
printf("试题添加已结束。 \\n") ;
break;

while(1);
fclose(fp1);
ExerM();


void adminregist() 

    int i,t;
    char key[20]; 
    int reg= 1;
    char account[20];
    char password[20];
    printf("       ************************* 现在,让我们开始添加管理员到你的组织 *************************\\n");
    printf("       只需要几步简单的操作,就可以成功添加新的管理员请按如下引导操作。\\n");
    printf("       请注意:你注册的ID必须为5位数字\\n");
a:  printf("       请输入你想要添加的管理员ID:");
    scanf("%s", account);
    if (strspn(account, "0123456789") != strlen(account))
    
        printf("       ★你输入的ID无效,请重新输入\\n");
        goto a; 
    
    if(strlen(account)!=5)
    
        printf("       ★你输入的ID长度不合规,请重新输入:\\n");
        goto a;
      
    for (i = 0; i < num; i++) 
    
        if (strcmp(admin[i].ID, account) == 0)
        
            printf("此管理员用户已存在,请尝试添加其他用户\\n");    
            goto a;
        
    
    printf("       请输入您的密码,请注意,您的密码仅限6位:  \\n");
b:    printf("请输入密码:");
    scanf("%s", password);
        if(strlen(password)!=6)
    
        printf("       ★你输入的密码长度不合规,请重新输入:\\n");
        goto b;
      
     do
    
        printf("       请再次输入您的密码:  ");
        scanf("%s", &key);
        if(strcmp(key,password) == 0) 
            t = 0;
        else 
        
            t = 1;
            printf("       两次输入的密码不一致,请重新输入 :) \\n");
        
    while(t == 1);
    if (reg) 
    
        strcpy(admin[num].ID, account);
        strcpy(admin[num].password, password);
        printf("       请输入你的用户名: ");
        scanf("%s",admin[num].name);
        num++;
        printf("       搞定!\\n"); 
        printf("       管理员添加成功,现在可以开始管理系统了\\n");
        system("pause");
        system("cls");
        fflush(stdin);
    
    AdminM(); 

void adminsavefile() 

    int i = 0;
    FILE *file = fopen("C:\\\\驾校系统资源库\\\\admin.txt", "w");
    for (i = 0; i < num; i++) 
    
        fprintf(file, "%s %s %s\\n", admin[i].ID, admin[i].password, admin[i].name);
    
    fclose(file);

void adminreadfile() 

    int i = 0;
    FILE *file = fopen("C:\\\\驾校系统资源库\\\\admin.txt", "r");
    if (file) 
    
        while (1) 
        
            if (feof(file)) break;
            i = num;
            fscanf(file, "%s %s %s\\n", admin[i].ID, admin[i].password, admin[i].name);
            num++;
        
        fclose(file);
    

void adminlogin() 

    int log = 0;
    int i;
    char account[20];
    char password[20];
    printf("\\n       ************************* 如果你拥有管理员账户,请登录 *************************\\n");
   c: printf("       请输入账号:");
    scanf("%s", account); 
      printf("       请输入密码:");
    scanf("%s", password);
    for (i = 0; i < num; i++) 
    
        if (strcmp(admin[i].ID, account) == 0 && strcmp(admin[i].password, password) == 0) 
        
        printf("       登录成功,即将进入系统\\n");    
            log = 1;
            system("pause");
            system("cls");
            fflush(stdin);
            AdminM();
            
        
    
    if(log==0)
    
        printf("      你的用户名或者密码输入错误,请重新输入\\n");
    goto c;
    

//menu.c中的代码
int cyn;
//总菜单
void MainM()

    int n;
    printf("************ 欢迎使用 驾考通·驾驶员科目一模拟系统 ****************\\n");
    printf("*                                                                 *\\n");
    printf("*       1 管理员点这里            2 普通用户点这里                *\\n");
    printf("*                                                                 *\\n");
    printf("*                     0 退出程序                                  *\\n");
    printf("*                                                                 *\\n");
    printf("*******************************************************************\\n");
    
    do 
        scanf("%d",&n);
     while (n!=1&&n!=2&&n!=0);//读取用户输入的值,并进行相应跳转
    switch (n)
    
        case 1:
            printf("正在进入管理员系统,请稍候...\\n");
            system("CLS");
            AdminSM();  
            break;
        case 2:
            printf("正在进入用户系统,请稍候...\\n");
            system("CLS");
            UserSM();
            break;
        case 0:
            printf("程序已退出!\\n\\a");
            break;
    


//用户部分

//用户主菜单
void UserSM()

    int a;
    printf("*************************  欢迎! *********************************\\n");
    printf("*                                                                 *\\n");
    printf("*       1 我已经拥有账号(登录)     2 没有账号?(注册一个!)   *\\n");
    printf("*                                                                 *\\n");
    printf("*                          0 返回                                 *\\n");
    printf("*                                                                 *\\n");
    printf("*******************************************************************\\n");
    
    do 
        scanf("%d",&a);
     while (a!=1&&a!=2&&a!=0);
    
    switch (a)
    
        case 1:
            system("cls");
            fflush(stdin);
            readfile();
            cyn=login();//登录系统(已完成) 
            break;
        case 2:
            system("cls");
            fflush(stdin);
            readfile();
            regist();
            savefile();//注册系统(已完成) 
            break;
        case 0:
            system("cls");
            fflush(stdin);
            MainM();//返回主菜单(已完成)
            
    


//用户分菜单
void UserM()

    int a;
    printf("**********************   祝你学习愉快   ************************\\n");
    printf("*                                                              *\\n");
    printf("*                  1 知识学习     2 模拟测试                   *\\n");
    printf("*                  3 错题重做                                  *\\n");
    printf("*                                                              *\\n");
    printf("*                          0 退出登录                          *\\n");
    printf("*                                                              *\\n");
    printf("****************************************************************\\n");
    
    do 
        scanf("%d",&a);
     while (a!=1&&a!=2&&a!=0&&a!=3&&a!=4);
    
    switch (a)
    
        case 1:
            system("cls");
            fflush(stdin);
            studytest(); //学习系统(已完成) 
            break;
        case 2:
            system("cls");
            fflush(stdin);
            test(cyn);//测验系统(已完成)
            break;
        case 3:
            system("cls");
            fflush(stdin);
            Getmistakes(MIS);//错题重做 
            break;
        case 0:
            system("cls");
            fflush(stdin);
            UserSM();//返回用户主菜单(已完成) 
            break;
            
    


//管理员部分

//管理员主菜单
void AdminSM()

    int a;
    printf("*************************  欢迎! ****************************\\n");
    printf("*                                                            *\\n");
    printf("*                       1 管理员登录                         *\\n");
    printf("*                                                            *\\n");
    printf("*                       0 返回上一级                         *\\n");
    printf("*                                                            *\\n");
    printf("**************************************************************\\n");
    
    do 
        scanf("%d",&a);
     while (a!=1&&a!=0);
    
    switch (a)
    
        case 1:
            system("cls");
            fflush(stdin);
            adminreadfile();//管理员登录(已完成) 
            adminlogin(); 
            break;
        case 0:
            system("cls");
            fflush(stdin);
            MainM();//返回总菜单 (已完成) 
            break;
            
    


//管理员分菜单
void AdminM()

    int a;
    printf("********************  驾考通·后台管理系统   ********************\\n");
    printf("*                                                               *\\n");
    printf("*              1 题库管理            2 成绩查看                 *\\n");
    printf("*                       3 添加管理员                            *\\n");
    printf("*                       0 退出登录                              *\\n");
    printf("*                                                               *\\n");
    printf("*****************************************************************\\n");
    
    do 
        scanf("%d",&a);
     while (a!=1&&a!=2&&a!=0&&a!=3);
    
    switch (a)
    
        case 1:
            printf("请稍等,我们正在进入题库...");
            printf("\\n");
            printf("\\n");
            printf("\\n");
            system("cls");
            ExerM() ;//进入题库菜单(已完成) 
            break;
        case 2:
            system("cls");
            fflush(stdin);
            showscore(); //成绩查看(已完成) 
            break;
        case 3:
            system("cls");
            fflush(stdin);
            adminreadfile();
            adminregist();
            adminsavefile();//添加管理员(已完成) 
        case 0:
            system("cls");
            fflush(stdin);
            AdminSM();//返回管理员主菜单 
            break;
            
    


//题库管理菜单
void ExerM()

    int a;
    printf("*********************  驾考通·题库管理系统  ********************\\n");
    printf("*                                                               *\\n");
    printf("*                  1 增加试题     2 删除编辑试题                *\\n");
    printf("*                  3 返回上页                                   *\\n");
    printf("*                                                               *\\n");
    printf("*                        0 退出登录                             *\\n");
    printf("*                                                               *\\n");
    printf("*****************************************************************\\n");
    
    do 
        scanf("%d",&a);
     while (a!=1&&a!=2&&a!=0&&a!=3&&a!=4);
    switch (a)
    
        case 1://增加试题(已完成) 
            system("cls");
            fflush(stdin);
            addexe();   
            break;
        case 2://删除编辑试题(已完成) 
            system("cls");
            fflush(stdin);
            printf("题目编辑涉及错题系统变更\\n"); 
            printf("请前往文件夹:桌面-驾校系统资源库-text.txt对该文本文件进行修改\\n") ;
            system("pause");
            system("cls");
            fflush(stdin);
            ExerM(); 
            break;
        case 3:
            system("cls");
            fflush(stdin);
            AdminM();//返回管理员分菜单(已完成) 
            break;
        case 0:
            system("cls");
            fflush(stdin);
            AdminSM();//返回管理员主菜单(已完成) 
            break;
    

科目三考试

科目三,又称道路安全驾驶考试,是机动车驾驶证考核的一部分,是机动车驾驶人考试中道路驾驶技能和安全文明驾驶常识考试科目的简称。不同的准驾车型道路驾驶技能考试内容不同。
科目三的内容一般包括:上车准备、灯光模拟考试、起步直线行驶、加减挡位操作、变更车道、靠边停车、直行通过路口、路口左转弯、路口右转弯、通过人行横道线、通过学校区域、通过公共汽车站、会车超车掉头、夜间行驶。安全文明驾驶常识考试内容包括:安全文明驾驶操作要求、恶劣气象和复杂道路条件下的安全驾驶知识、爆胎等紧急情况下的临危处置方法以及发生交通事故后的处置知识等。
 
中文名
科目三
外文名
道路安全驾驶考试
其它名称
道路安全驾驶考试
考试内容
道路驾驶技能和安全文明驾驶常识
考试类型
资格证考试
满分分数
100分
合格分数
90分
所    属
机动车驾驶资格证
专业术语
机动车驾驶人道路考试
法律依据
公安部令第139号

具体内容

编辑
道路驾驶技能
科目三道路驾驶技能考试内容包括:大型客车、牵引车、城市公交车、中型客车、大型货车、小型汽车、小型自动挡汽车、低速载货汽车和残疾人专用小型自动挡载客汽车考试上车准备、起步、直线行驶、加减挡位操作、变更车道、靠边停车、直行通过路口、路口左转弯、路口右转弯、通过人行横道线、通过学校区域、通过公共汽车站、会车、超车、掉头、夜间行驶;其他准驾车型的考试内容,由省级公安机关交通管理部门确定。
大型客车、中型客车考试里程不少于20公里,其中白天考试里程不少于10公里,夜间考试里程不少于5公里。牵引车、城市公交车、大型货车考试里程不少于10公里,其中白天考试里程不少于5公里,夜间考试里程不少于3公里。小型汽车、小型自动挡汽车、低速载货汽车、残疾人专用小型自动挡载客汽车考试里程不少于3公里,并抽取不少于20%进行夜间考试;不进行夜间考试的,应当进行模拟夜间灯光使用考试。 [1] 
对大型客车、牵引车、城市公交车、中型客车、大型货车,省级公安机关交通管理部门应当根据实际增加山区、隧道、陡坡等复杂道路驾驶考试内容。对其他汽车准驾车型,省级公安机关交通管理部门可以根据实际增加考试内容。
安全文明驾驶常识
科目三安全文明驾驶常识考试内容包括:安全文明驾驶操作要求、恶劣气象和复杂道路条件下的安全驾驶知识、爆胎等紧急情况下的临危处置方法以及发生交通事故后的处置知识等。

教学辅助

编辑

教学软件

学员可通过驾考宝典手机端、电脑端的模拟考试软件,学习交通法规。 [2] 

教学书籍

中华人民共和国交通运输部编写的《安全驾驶从这里开始》。可由驾校统一
技术分享图片
购置发放驾驶学习资料,也可由驾校学员自费购置学习资料。

考试项目

编辑
一、考试路线
以山东省德州市科目三道路驾驶技能考试路线为例,考试路线分为A线和B线两个线路。请见下图: 
技术分享图片德州科目三道路驾驶技能考试路线图-A线
技术分享图片德州科目三道路驾驶技能考试路线图-B线
二、考试要求
1.上车准备
考生须按安全员指示,靠近车身,(自左前车门向后)绕车一周,确认安全后打开车门上车。上车后听到语音提示“请学员做好考试准备,并进行指纹验证”,首先调整座椅至合适自己的位置,调整内、外后视镜,系好安全带。然后进行指纹验证。指纹仪位于方向盘左侧空调出风口下方。
2.夜间行驶:
指纹验证成功后,白天考试学员在起步前,考生听到语音提示“下面开始模拟夜间灯光使用,请按照语音提示进行操作”后,考生应开始灯光操作夜间行驶灯光模拟考试将从以下项目中随机抽取三项进行考试。
主要包括:
  • 你将要在路口处转弯,请使用正确灯光(使用近光灯)
  • 你正在低能见度道路上行驶,请使用正确灯光(开启远光灯)
  • 你将要通过急弯,请使用正确灯光(交替使用远近光灯不少于2次)
  • 你将要通过坡路,请使用正确灯光(交替使用远近光灯不少于2次)
  • 你将要通过拱桥,请使用正确灯光(交替使用远近光灯不少于2次)
  • 你将要通过人行横道,请使用正确灯光 ( 交替使用远近光灯不少于2次)
  • 你将要通过没有交通信号灯控制的路口,请使用正确灯光(交替使用远近光灯不少于2次)
  • 你将要超车,请使用正确灯光(先开启左转向灯,然后交替使用远近光灯不少于2次,再开启右转向灯)
  • 你将要与其它车辆会车,请使用正确灯光(开启近光灯)
  • 灯光模拟完毕后,考生需将灯光关闭,再进行下一项考试
抽取到夜间考试的学员应按照夜间考试实际路况进行驾驶。
当听到语音提示“请起步”后,踩离合器,将档位挂入一档,打左转向灯(大于3秒),同时(左扭头)观察左后视镜,确认安全后,鸣笛,放驻车制动器,平稳起步,拨正转向灯。在坡路起步时禁止后溜。
4.路口右转弯
当听到语音提示“前方路口右转弯”后,开右转向灯(大于3秒)后,按导向箭头车道右转至行车道。
当听到语音提示“前方请掉头”后,考生应打左转向灯(大于3秒),通过(左)后视镜观察左后方交通情况,确认安全后,方可降低车速,换入低档,驶入掉头区域。驶入掉头区域时应左右观察路况,确认安全后驶入新车道正常行驶并关闭左转向灯。
6.直行通过路口
当听到语音提示“前方通过路口”后,考生应减速慢行(刹车),观察道路交通情况,按照信号灯指示行驶,通过路口时,车速应低于30km/h。路口内禁止停车。
7.路口左转弯
当听到语音提示“前方路口左转弯”后,开左转向灯(大于3秒)后,按导向箭头车道左转至行车道。
8.通过公交车站
当听到语音提示“通过公交车站”,考生应减速慢行(刹车)或在进入该区域前车速低于30km/h,左右(扭头)观察,注意避让公交车辆及行人,确认安全后方可通过。
9.加减挡操作
当听到语音提示“请完成加减档动作”后,考生应该将档位调整至2档,从2档依次升至5档,在5档位时时速需超过40km/h,再将档位依次降至2档。
当听到语音提示“前方会车”后,考生须注意前方来车,靠行车道右侧行驶至会车项目结束。注意避让其他车辆,不能压非机动车道线。
当听到语音提示“请完成超车动作”后,考生应打左转向灯(大于3秒),同时通过(左)后视镜观察左后方交通情况,确认安全后方可向左转动方向盘,驶入左侧车道进行超车。超过被超车辆,确认与被超车辆保持安全距离后,打右转向灯(大于3秒),同时通过(右)后视镜观察右后方,确认安全后驶入原车道正常行驶。当不具备超车条件时,可等待条件允许时,完成超车动作,禁止右侧超车。
当听到语音提示“请保持直线行驶”后,考生应目视前方,双手控制好方向盘,保持车辆直线行驶。严禁骑压道路分界线。
13.变更车道
当听到语音提示“请变更车道”后,考生应打(左)转向灯(大于3秒),同时(左扭头)通过(左)后视镜观察后方交通情况,确认安全后,向(左)转动方向盘变更车道。当不具备变更条件时,考生应减速慢行,等待条件允许后进行变更车道。严禁连续变更两条车道。
14.通过人行横道
当听到语音提示“前方通过人行横道”后,考生应减速慢行(刹车)或在进入该区域前车速低于30km/h。若有行人通过,请把车辆停在安全线外等候,在行人通过人行横道后方可通过。
15.通过学校区域
当听到语音提示“前方通过学校”后,考生应减速慢行(刹车),或在进入该区域前车速低于30km/h,左右(扭头)观察,注意避让学生,确认安全后方可通过。
当听到语音提示“请靠边停车”后,考生打右转向灯(大于3秒),同时通过(右)后视镜观察右后方交通情况,确认安全后,将车辆(右侧)平行停放在小于路沿石(或者道路边缘实线)30厘米以内处,但不能压到路沿石(或者道路边缘实线),停稳车辆,拉起驻车制动器,摘空档。
听到语音提示“考试合格,请下车”或“考试未通过,请下车”后,观察左后方交通情况,确认安全后,打开车门下车,考试完毕。
如果第一次考试不合格,语音提示“考试不合格,重新开始考试”,请不要下车,按照语音提示继续考试即可。

考试评分

编辑

评分标准

代码
[2]  扣分项目
扣分值
不合格情形
1
不按规定使用安全带或者戴安全头盔
100
2
遮挡、关闭车内音视频监控设备
100
3
不按考试员指令驾驶
100
4
不能正确使用灯光、雨刮器等车辆常用操纵件
100
5
起步时车辆后溜距离大于750px
100
6
驾驶汽车双手同时离开转向盘
100
7
单手控制转向盘时,不能有效、平稳控制行驶方向
100
8
车辆行驶方向控制不准确,方向晃动,车辆偏离正确行驶方向
100
9
不能根据交通情况合理选择行驶车道、速度
100
10
使用挡位与车速长时间不匹配,造成车辆发动机转速过高或过低
100
11
车辆在行驶中低头看挡或连续2次挂挡不进
100
12
行驶中空挡滑行
100
13
视线离开行驶方向超过2s
100
14
违反交通安全法律、法规,影响交通安全
100
15
不按交通信号灯、标志、标线或者民警指挥信号行驶
100
16
不按规定速度行驶
100
17
车辆行驶中骑轧车道中心实线或者车道边缘实线
100
18
长时间骑轧车道分界线行驶
100
19
争道抢行,妨碍其他车辆正常行驶
100
20
行驶中不能保持安全距离和安全车速
100
21
连续变更两条或两条以上车道
100
22
通过积水路面遇行人、非机动车时,有不减速等不文明驾驶行为
100
23
遇行人通过人行横道不停车让行,不主动避让优先通行的车辆、行人、非机动车
100
24
将车辆停在人行横道、网状线内等禁止停车区域
100
25
行驶中身体任何部位伸出窗外
100
26
制动、加速踏板使用错误
100
27
对可能出现危险的情形未采取减速、鸣喇叭等安全措施
100
28
因观察、判断或者操作不当出现危险情况
100
29
驾驶摩托车时手离开转向把
100
30
二轮摩托车在行驶中左右摇摆或者脚触地
100
31
摩托车制动时不同时使用前、后制动器
100
32
考生未按照预约考试时间参加考试
100
扣10分情形
1
驾驶姿势不正确
10
2
起步时车辆后溜,但后溜距离小于750px
10
3
操纵转向盘手法不合理
10
4
起步或行驶中挂错挡,不能及时纠正
10
5
起步、转向、变更车道、超车、停车前不使用或错误使用转向灯
10
6
起步、转向、变更车道、超车、停车前,开转向灯少于3s即转向
10
7
转弯时,转、回方向过早、过晚,或者转向角度过大、过小
10
8
换挡时发生齿轮撞击
10
9
遇情况时不会合理使用离合器半联动控制车速
10
10
因操作不当造成发动机熄火一次
10
11
不能根据交通情况合理使用喇叭
10
12
制动不平顺
10
13
遇后车发出超车信号,不按规定让行
10
代码
扣分项目
扣分值
上车准备
1
不绕车一周检查车辆外观及周围环境
100
2
打开车门前不观察后方交通情况
100
起步
1
制动气压不足起步
100
2
车门未完全关闭起步
100
3
起步前,未观察内、外后视镜,未侧头观察后方交通情况
100
4
启动发动机时,变速器操纵杆未置于空挡(驻车挡)
100
5
不松驻车制动器起步,未及时纠正
100
6
不松驻车制动器起步,但能及时纠正
10
7
发动机启动后,不及时松开启动开关
10
8
道路交通情况复杂时起步不能合理使用喇叭
5
9
起步时车辆发生闯动
5
10
起步时,加速踏板控制不当,致使发动机转速过高
5
11
启动发动机前,不检查调整驾驶座椅、后视镜、检查仪表
5
直线行驶
1
方向控制不稳,不能保持车辆直线运行
100
2
遇前车制动时不及时采取减速措施
100
3
不适时通过内、外后视镜观察后方交通情况
10
4
未及时发现路面障碍物或发现路面障碍物未及时采取减速措施
10
加减挡位操作
1
未按指令平稳加、减挡
100
2
车辆运行速度和挡位不匹配
10
变更车道
1
变更车道前,未通过内、外后视镜观察后方道路交通情况
100
2
变更车道时,判断车辆安全距离不合理,妨碍其他车辆正常行驶
100
靠边停车
1
停车前,不通过内、外后视镜观察后方和右侧交通情况
100
2
考试员发出靠边停车指令后,未能在规定的距离内停车
100
3
停车后,车身超过道路右侧边缘线或者人行道边缘
100
4
停车后,在车内开门前不侧头观察侧后方和左侧交通情况
100
5
下车后不关闭车门
100
6
停车后,车身距离道路右侧边缘线或者人行道边缘大于30cm
10
7
停车后,未拉紧驻车制动器
10
8
拉紧驻车制动器前放松行车制动踏板
10
9
下车前不将发动机熄火
5
直行通过路口
1
不按规定减速或停车瞭望
100
2
不观察左、右方交通情况,转弯通过路口时,不观察侧前方交通情况
100
3
遇有路口交通阻塞时进入路口,将车辆停在路口内等候
100
路口左转弯
1
不按规定减速或停车瞭望
100
2
不观察左、右方交通情况,转弯通过路口时,未观察侧前方交通情况
100
3
遇有路口交通阻塞时进入路口,将车辆停在路口内等候
100
4
左转通过路口时,未靠路口中心点左侧转弯
10
路口右转弯
1
不按规定减速或停车瞭望
100
2
未观察左、右方交通情况,转弯通过路口时,未观察侧前方交通情况
100
3
遇有路口交通阻塞时进入路口,将车辆停在路口内等候
100
通过人行横道线
1
不按规定减速慢行
100
2
不观察左、右方交通情况
100
3
未停车礼让行人
100
通过学校区域
1
不按规定减速慢行
100
2
不观察左、右方交通情况
100
3
未停车礼让行人
100
通过公共汽车站
1
不按规定减速慢行
100
2
不观察左、右方交通情况
100
3
未停车礼让行人
100
会车
1
在没有中心隔离设施或者中心线的道路上会车时,不减速靠右行驶,或未与其他车辆、行人、非机动车保持安全距离
100
2
会车困难时不让行
100
3
横向安全间距判断差,紧急转向避让对方来车
100
超车
1
超车前不通过内、外后视镜观察后方和左侧交通情况
100
2
超车时机选择不合理,影响其他车辆正常行驶
100
3
超车时,未侧头观察被超越车辆动态
100
4
超车时未与被超越车辆保持安全距离
100
5
超车后急转向驶回原车道,妨碍被超车辆正常行驶
100
6
在没有中心线或同方向只有一条行车道的道路上从右侧超车
100
7
当后车发出超车信号时,具备让车条件不减速靠右让行
10
掉头
1
不能正确观察交通情况选择掉头时机
100
2
掉头地点选择不当
100
3
掉头前未发出掉头信号
100
4
掉头时,妨碍正常行驶的其他车辆和行人通行
10
夜间行驶
1
不能正确开启灯光
100
2
同方向近距离跟车行驶时,使用远光灯
100
3
通过急弯、坡路、拱桥、人行横道或者没有交通信号灯控制的路口时,不交替使用远近光灯示意
100
4
会车时不按规定使用近光灯
100
5
通过路口时使用远光灯
100
6
超车时未交替使用远近光灯提醒被超越车辆
100
7
在有路灯、照明良好的道路上行驶时,使用远光灯
100
8
在路边临时停车不关闭前照灯或不开启示廓灯
100
9
进入无照明、照明不良的道路行驶时不使用远光灯
5

合格标准

科目三道路驾驶技能和安全文明驾驶常识考试满分分别为100分,成绩分别达到90分的为合格。 [2] 

科目三考试难点

编辑
1、速度与挡位不匹配
关于高挡低速和高速低挡的错误,在考试行车过程中你需要注意一下。在你换挡位之前,一定要把速度加到或降到与挡位相匹配的速度上,然后再切换挡位!行驶过程中,记得每隔八秒瞄一眼速度表,这样可以防止这种错误的发生。
2、直线行驶方向跑偏
在驾驶过程中许多学员因为担心行驶轨迹不是直线而故意放慢车速,这种行为是不可取的。这样反而会增加车辆的行驶轨迹发生偏移的可能性,所以应该保持合理速度匀速行驶。
虽然在直线行驶过程中不能大幅度地转动方向盘,但是如果遇到考试前未能对车辆及时调整到位或者车辆行驶后才发觉行驶轨迹仍然有偏移直线的现象,可以小幅度地转动方向盘,一般控制在5度左右。这样,行驶较长距离后可以使车辆轨迹慢慢趋向直线,然后再将方向盘回正即可。
3、靠边停车超过30cm
科目三考试中,明确要求靠边停车距离不能超过30cm,但是这样的距离让学员很难把握,很多学员停车距离路边太远。
不管是科目二、还是科目三,学员们还有两个地方容易造成考试失误,一个就是紧张、一个就是粗心大意,一定要注意考试的细节,如果因为忘系安全带、开转向灯而挂掉,真是太憋屈了。 [3] 

注意事项

编辑
1. 考生指纹验证无法通过后,请下车对指纹进行重新采集后方可重新排队进行考试。
2.考试过程中如果考生分数低于合格分数,系统会自动提示考生进行靠边停车,靠边停车动作完成后系统会提示进行下一次考试。
3.考生按要求完成所有必考项目且行驶距离大于3公里后,系统将自动提示靠边停车。学员听到靠边停车语音后,请在考试路线上自行选择清晰路沿石(或道路边缘实线)处,确认安全后完成靠边停车动作。靠边停车完成后,系统将语音播报考试结果。
4、绕车一周观察车辆外观和周边环境时,为保证雷达信号检测的准确性,请保持人身与车身距离在1米范围内。
5、根据公安部对驾驶人考试规定的要求,每个学员1次预约有两次考试机会,第一次考试不及格可当场补考一次.学员第一次考试时需要参加绕车一周和夜间灯光模拟,第一次考试不及格第二次补考时,学员可不进行绕车一周和灯光模拟,准备完成后直接开始第二次考试. 第一次考试不及格停放车辆区域的考试科目将在绕路线一周后开始考试 考试起点可以在考试路段的任意位置,最终学员需要考满16项考试项目后方可结束考试上传考试成绩.(注意:参加白天考试的学员需要进行夜间灯光模拟,参加夜间考试的学员将不再进行本项目的评判)。
6、如有多人同时跟车准备考试的情况,一个学员考试结束后,下一个学员需要依照标准流程下车从上车准备,绕车一周以及夜间灯光模拟等开始考试。

以上是关于C语言:驾驶员理论课程模拟考试与学习系统的主要内容,如果未能解决你的问题,请参考以下文章

最后一战,C语言稳住!!

基于php011驾照驾驶理论考试模拟系统

井冈山大学2020年专升本《C语言程序设计》《数据结构》考试大纲

虎奔教育计算机二级C语言软件破解版下载

c语言学生成绩管理系统课程设计

宜春学院2020年专升本《C语言程序设计》考试大纲