在devc++用C语言写一个单项选择题标准化考试系统实现试题的修改添加删除抽取并且自动评分显示用户分数用户名以及答题时间
以下是一个简单的单项选择题标准化考试系统的示例代码,实现试题的修改、添加、删除、抽取以及自动评分,并显示用户分数、用户名以及答题时间。
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <time.h>
// 定义最大试题数量
#define MAX_QUESTIONS 100
// 定义试题结构体
typedef struct {
char question[100]; // 试题内容
char options[4][50]; // 选项
int answer; // 正确答案的选项序号
} Question;
// 定义用户结构体
typedef struct {
char name[50]; // 用户名
int score; // 分数
time_t timestamp; // 答题时间
} User;
// 全局变量
Question questions[MAX_QUESTIONS]; // 试题数组
int numQuestions = 0; // 当前试题数量
// 函数声明
void addQuestion();
void modifyQuestion();
void deleteQuestion();
Question extractQuestion();
void displayScore(User user);
int main() {
int choice;
User user;
strcpy(user.name, "John"); // 设置用户名
do {
printf("======= 单项选择题标准化考试系统 =======\n");
printf("1. 添加试题\n");
printf("2. 修改试题\n");
printf("3. 删除试题\n");
printf("4. 抽取试题\n");
printf("5. 开始考试\n");
printf("6. 退出\n");
printf("请输入您的选择:");
scanf("%d", &choice);
switch (choice) {
case 1:
addQuestion();
break;
case 2:
modifyQuestion();
break;
case 3:
deleteQuestion();
break;
case 4:
extractQuestion();
break;
case 5:
// 开始考试
user.score = 0;
user.timestamp = time(NULL);
// 在此处编写考试逻辑
printf("考试结束!\n");
displayScore(user);
break;
case 6:
printf("感谢使用!\n");
break;
default:
printf("无效的选择!\n");
break;
}
printf("\n");
} while (choice != 6);
return 0;
}
void addQuestion() {
if (numQuestions == MAX_QUESTIONS) {
printf("试题数量已达上限,无法添加更多试题!\n");
return;
}
Question newQuestion;
getchar(); // 清除输入缓冲区中的换行符
printf("请输入试题内容:");
fgets(newQuestion.question, sizeof(newQuestion.question), stdin);
newQuestion.question[strlen(newQuestion.question) - 1] = '\0'; // 去除末尾的换行符
printf("请输入选项A:");
fgets(newQuestion.options[0], sizeof(newQuestion.options[0]), stdin);
newQuestion.options[0][strlen(newQuestion.options[0]) - 1] = '\0';
printf("请输入选项B:");
fgets(newQuestion.options[1], sizeof(newQuestion.options[1]), stdin);
newQuestion.options[1][strlen(newQuestion.options[1]) - 1] = '\0';
printf("请输入选项C:");
fgets(newQuestion.options[2], sizeof(newQuestion.options[2]), stdin);
newQuestion.options[2][strlen(newQuestion.options[2]) - 1] = '\0';
printf("请输入选项D:");
fgets(newQuestion.options[3], sizeof(newQuestion.options[3]), stdin);
newQuestion.options[3][strlen(newQuestion.options[3]) - 1] = '\0';
printf("请输入正确答案的选项序号(1-4):");
scanf("%d", &newQuestion.answer);
questions[numQuestions++] = newQuestion;
printf("试题添加成功!\n");
}
void modifyQuestion() {
if (numQuestions == 0) {
printf("当前没有试题可供修改!\n");
return;
}
int idx;
printf("请输入要修改的试题序号(1-%d):", numQuestions);
scanf("%d", &idx);
if (idx < 1 || idx > numQuestions) {
printf("无效的试题序号!\n");
return;
}
Question modifiedQuestion;
getchar(); // 清除输入缓冲区中的换行符
printf("请输入试题内容:");
fgets(modifiedQuestion.question, sizeof(modifiedQuestion.question), stdin);
modifiedQuestion.question[strlen(modifiedQuestion.question) - 1] = '\0';
printf("请输入选项A:");
fgets(modifiedQuestion.options[0], sizeof(modifiedQuestion.options[0]), stdin);
modifiedQuestion.options[0][strlen(modifiedQuestion.options[0]) - 1] = '\0';
printf("请输入选项B:");
fgets(modifiedQuestion.options[1], sizeof(modifiedQuestion.options[1]), stdin);
modifiedQuestion.options[1][strlen(modifiedQuestion.options[1]) - 1] = '\0';
printf("请输入选项C:");
fgets(modifiedQuestion.options[2], sizeof(modifiedQuestion.options[2]), stdin);
modifiedQuestion.options[2][strlen(modifiedQuestion.options[2]) - 1] = '\0';
printf("请输入选项D:");
fgets(modifiedQuestion.options[3], sizeof(modifiedQuestion.options[3]), stdin);
modifiedQuestion.options[3][strlen(modifiedQuestion.options[3]) - 1] = '\0';
printf("请输入正确答案的选项序号(1-4):");
scanf("%d", &modifiedQuestion.answer);
questions[idx - 1] = modifiedQuestion;
printf("试题修改成功!\n");
}
void deleteQuestion() {
if (numQuestions == 0) {
printf("当前没有试题可供删除!\n");
return;
}
int idx;
printf("请输入要删除的试题序号(1-%d):", numQuestions);
scanf("%d", &idx);
if (idx < 1 || idx > numQuestions) {
printf("无效的试题序号!\n");
return;
}
for (int i = idx - 1; i < numQuestions - 1; i++) {
questions[i] = questions[i + 1];
}
numQuestions--;
printf("试题删除成功!\n");
}
Question extractQuestion() {
if (numQuestions == 0) {
printf("当前没有试题可供抽取!\n");
return;
}
srand(time(NULL)); // 根据当前时间种子设置随机数生成器
int idx = rand() % numQuestions; // 生成一个随机的试题序号
Question extractedQuestion = questions[idx];
// 抽取成功后从试题数组中删除该试题
for (int i = idx; i < numQuestions - 1; i++) {
questions[i] = questions[i + 1];
}
numQuestions--;
printf("抽取的试题内容为:\n");
printf("题目:%s\n", extractedQuestion.question);
printf("选项A:%s\n", extractedQuestion.options[0]);
printf("选项B:%s\n", extractedQuestion.options[1]);
printf("选项C:%s\n", extractedQuestion.options[2]);
printf("选项D:%s\n", extractedQuestion.options[3]);
return extractedQuestion;
}
void displayScore(User user) {
printf("用户:%s\n", user.name);
printf("分数:%d\n", user.score);
printf("答题时间:%s\n", ctime(&user.timestamp));
}
请注意,这只是一个简单的示例代码,仅供参考。实际的实现可能需要更多的功能和细节,例如保存试题到文件中、加载试题等。还需要根据具体需求进行适当的修改和完善
原文地址: https://www.cveoy.top/t/topic/hPR4 著作权归作者所有。请勿转载和采集!