单项选择题标准化考试系统设计

单项选择题标准化考试系统设计

这个程序是我大一上学期的期末课程设计,在网上查了许多的资料,用了5天左右的时间和同学一起完成的。因为我们才刚入门c语言,所以程序可能有点拙劣,但还是希望能帮助各位同学。

//所用的IDE是VC++6.0
//所录入的题目是思政课的选择题

功能要求

(1)用文件保存试题库。(每个试题包括题干、4个备选答案、标准答案)
(2)试题录入:可随时增加试题到试题库中
(3)试题抽取:每次从试题库中可以随机抽出N道题(N由键盘输入)
(4)答题:用户可实现输入自己的答案
(5)自动判卷:系统可根据用户答案与标准答案的对比实现判卷并给出成绩。

代码设计

1.结构组与函数

typedef struct
{
   
	char question[200],A[100],B[100],C[100],D[100];
	char key;
}Question;//结构组,结构类型Question

void Menu();//主菜单
void Remenu();//返回菜单或退出
void Answer();//抽取答题
void Add();//试题录入
void Deleteq();//试题删除
void Readfile();//读取所有题目
void Putques1();//输出问题1(不输出答案)
void Putques2();//输出问题2(输出答案)
int Total();//计算总题目数量

抽取题目首先需要读取题目。我们的设计思路是建立一个结构数组用来存储题目信息,其中包括题目,ABCD四个选项以及答案,结构如下:

typedef struct
{
	char question[200],A[100],B[100],C[100],D[100];
	char key;
}Question;//结构组,结构类型Question

起初我们准备直接建立一个固定的结构数组Question qs[100]用来在内存中存储题目,但发现这样有许多弊病。
①容易造成内存空间的浪费
②读取时容易造成越界(“烫烫烫烫烫烫……”)
③存在题目上限,不方便后续添加题目
于是我们决定利用malloc()进行动态分配内存,生成动态结构数组。但是进行动态分配内存需要实现知道题目数量。于是我们做了int Total()函数来预读一遍题目数量,然后将题目总数返回给total,利用total来生成动态结构数组。这样就解决了上面三个问题,但是伴随而来的问题是题目读取时间变长了。

2.菜单的实现与返回

//主菜单函数:主要用于用户使用时功能的选择,包括了Answer(),Add(),Deleteq(),exit(0)函数
void Menu()
{
   
	int n;//记录序列号
	system("cls");//清屏
	printf("************************************************************************************************************************\n");
	printf("*                                             单项选择题标准化考试系统 V2.4                                            *\n");
	printf("*                                                                                                                      *\n");
	printf("*                                                      ①抽取答题                                                      *\n");
	printf("*                                                                                                                      *\n");
	printf("*                                                      ②试题录入                                                      *\n");
	printf("*                                                                                                                      *\n");
	printf("*                                                      ③试题删除                                                      *\n");
	printf("*                                                                                                                      *\n");
	printf("*                                                      ④  退出                                                        *\n");
    printf("************************************************************************************************************************\n");//美化菜单

	do
	{
   
		printf(" ┉┉┉┉┉┉┉┉┉┉┉┉┉┉┉┉┉┉\n");
		printf(" 请输入正确的序列号:\n");
        printf(" ┉┉┉┉┉┉┉┉┉┉┉┉┉┉┉┉┉┉\n");
		scanf("%d",&n);
		printf("\n");
	}while(n<1||n>4);//若输入序列号不正确,返回循环体,重新输入,否则跳出循环

	switch(n)//通过switch-case对序列号对应的要求实现
	{
   
	case 1:
		Answer();//抽取答题
		break;
	case 2:
		Add();//试题录入
		break;
	case 3:
		Deleteq();//试题删除
		break;
	case 4:
		exit(0);//退出
		break;
	default:
		printf("错误\n");//default语句在此其实并无实际用处
	}
}

在这里插入图片描述
主菜单界面签约整洁并且输入序号外的数字无效

3.用文件保存试题库与试题录入

  • 111
    点赞
  • 434
    收藏
    觉得还不错? 一键收藏
  • 32
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值