部分效果图:
![](https://img-blog.csdnimg.cn/20191225220529462.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FxXzM1MDY4NjU5,size_16,color_FFFFFF,t_70)
![](https://img-blog.csdnimg.cn/20191225220547949.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FxXzM1MDY4NjU5,size_16,color_FFFFFF,t_70)
![](https://img-blog.csdnimg.cn/20191225220533978.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FxXzM1MDY4NjU5,size_16,color_FFFFFF,t_70)
配置文件如下:
![](https://img-blog.csdnimg.cn/20200718134004929.png)
加入新题库时,需要新建一个空文件,并把题目添加到新文件中,并把新文件名填入配置文件中。
实现代码:
/*******************************************************************?
*
* File Name: do-test
* Sketch out: A simple multiple-choice system
*
* Date created: 2019/12/18
* Author: YWR
*
******************************************************************/
#include <stdio.h>
#include <conio.h>
#include <malloc.h>
#include <string.h>
#include <stdlib.h>
#include <ctype.h>
#include <windows.h>
#define MAX_TOPIC 1024
#define MAX_OPTION 512
#define MAX_ITEM 50
#define CONFIG_FILE ".\\config.ini"
// Bring white
#define FINEWHITE \
FOREGROUND_RED | FOREGROUND_GREEN | FOREGROUND_BLUE
// Bring red
#define AZARIN \
FOREGROUND_INTENSITY | FOREGROUND_RED
typedef struct _Config {
char *test_file[MAX_PATH]; // test-file list
char *wrong_file[MAX_PATH]; // wrong-file list
int test_file_num; // test-file total
int wrong_file_num; // wrong-file total
int item_num; // file subject total
} Config, *PConfig;
typedef struct _Item {
int serial_num; // serial_num
char topic[MAX_TOPIC]; // topic
char option[4][MAX_OPTION]; // options
char answer[2]; // answer
} Item, *PItem;
static Item subject[MAX_ITEM];
static Config config;
void trim_config(char *s);
bool read_config();
void level_one_menu();
void level_two_menu();
void get_setting();
char *get_test_mark();
int read_test(const char *pfile);
int get_corrent(int min, int max);
bool file_is_null(FILE *tmp);
void clean_test();
int get_int();
bool add_subject(const char *pfile);
void free_file_name();
void set_cmd_color();
/** read_test: read file items
* If return -1: can't found file
* If return 0: read file is error
* If return 1: read file is ok
*/
int read_test(const char *pfile)
{
// Opened test-file
FILE *in = NULL;
in = fopen(pfile, "r+b");
if (!in)
{
fprintf(stderr, "无法找到 %s.\n",
pfile);
return -1;
}
// If file is null
if (file_is_null(in))
{
fprintf(stderr, "%s 是空的.\n",
pfile);
// Clean struct
config.item_num = 0;
clean_test();
// Closed file
fclose(in);
return false;
}
int count = 0;
// Read sub