多项选择题标准化考试系统设计\n设计一个多项选择题标准化考试系统,该系统要求能自动组卷和评分。教师可以添加题库,题库包括题干、四个备选答案和正确答案。完成自动组卷。学生选择试卷并进行答题,答题结束后自动给出成绩。教师可查看学生成绩。主要功能包括:\n一级菜单:按教师、学生两个角色登录\n教师二级菜单:\n(1)试题录入:增加试题到试题库中。\n(2)用文件保存试题库。(每个试题包括题干、4个备选答案、标准答案)。\n(3)显示学生成绩列表\n学生二级菜单:\n(1)试题抽取:每次从试题库中可以随机抽出N道题(N由键盘输入)。\n(2)答题:用户可实现输入自己的答案。\n(3)自动判卷:系统可根据用户答案与标准答案的对比实现判卷并给出成绩。
5条回答 默认 最新
关注 #include <
stdio.h>
#include <
stdlib.h>
#include <
string.h>
// 结构体定义typedef struct {char question[100];
char choices[4][50];
int answer;
} Question;
// 函数声明void addQuestion(Question *questionBank, int *numQuestions);
void saveQuestionBank(Question *questionBank, int numQuestions);
void extractQuestions(Question *questionBank, int numQuestions, int numExtracted);
void answerQuestions(Question *questionBank, int numExtracted);
int main() {int role;
Question questionBank[100];
int numQuestions = 0;
printf("
Enter role (1 for teacher, 2 for student):"
);
scanf("
%d"
, &
role);
if (role == 1) {addQuestion(questionBank, &
numQuestions);
saveQuestionBank(questionBank, numQuestions);
} else if (role == 2) {int numExtracted;
printf("
Enter number of questions to extract:"
);
scanf("
%d"
, &
numExtracted);
extractQuestions(questionBank, numQuestions, numExtracted);
answerQuestions(questionBank, numExtracted);
} else {printf("
Invalid role selected"
);
}return 0;
}
// 添加试题到试题库void addQuestion(Question *questionBank, int *numQuestions) {printf("
Enter question:"
);
getchar();
fgets(questionBank[*numQuestions].question, sizeof(questionBank[*numQuestions].question), stdin);
printf("
Enter choices A, B, C, D:"
);
for (int i = 0;
i <
4;
i++) {fgets(questionBank[*numQuestions].choices[i], sizeof(questionBank[*numQuestions].choices[i]), stdin);
}printf("
Enter correct answer (1 for A, 2 for B, 3 for C, 4 for D):"
);
scanf("
%d"
, &
questionBank[*numQuestions].answer);
(*numQuestions)++;
}
// 保存试题库到文件void saveQuestionBank(Question *questionBank, int numQuestions) {FILE *file = fopen("
question_bank.txt"
, "
w"
);
for (int i = 0;
i <
numQuestions;
i++) {fprintf(file, "
%s"
, questionBank[i].question);
for (int j = 0;
j <
4;
j++) {fprintf(file, "
%s"
, questionBank[i].choices[j]);
}fprintf(file, "
%d"
, questionBank[i].answer);
}fclose(file);
}
// 随机抽取试题void extractQuestions(Question *questionBank, int numQuestions, int numExtracted) {for (int i = 0;
i <
numExtracted;
i++) {int randomIndex = rand() % numQuestions;
printf("
%s "
, questionBank[randomIndex].question);
for (int j = 0;
j <
4;
j++) {printf("
%c. %s"
, 'A' + j, questionBank[randomIndex].choices[j]);
}}}
// 答题并判卷void answerQuestions(Question *questionBank, int numExtracted) {int score = 0;
for (int i = 0;
i <
numExtracted;
i++) {int userAnswer;
printf("
Enter your answer for question %d:"
, i+1);
scanf("
%d"
, &
userAnswer);
if (userAnswer == questionBank[i].answer) {score++;
}}printf("
Your score is %d/%d "
, score, numExtracted);
}
有问题你别着急,评论留言都可以,看到马上就回复,尽量及时补充齐解决 无用评论 打赏 举报
悬赏问题
- ¥30 comfyui openpose报错
- ¥20 Wpf Datarid单元格闪烁效果的实现
- ¥15 图像分割、图像边缘提取
- ¥15 sqlserver执行存储过程报错
- ¥100 nuxt、uniapp、ruoyi-vue 相关发布问题
- ¥15 浮窗和全屏应用同时存在,全屏应用输入法无法弹出
- ¥100 matlab2009 32位一直初始化
- ¥15 Expected type 'str | PathLike[str]…… bytes' instead
- ¥15 三极管电路求解,已知电阻电压和三级关放大倍数
- ¥15 ADS时域 连续相位观察方法