#include <stdio.h>\n#include <stdlib.h>\n#include <string.h>\n#include <time.h>\n\n#define MAX_QUESTIONS 100\n#define MAX_QUESTION_LENGTH 100\n#define MAX_CHOICES 4\n#define MAX_USERNAME_LENGTH 20\n\ntypedef struct {\n char question[MAX_QUESTION_LENGTH];\n char choices[MAX_CHOICES][MAX_QUESTION_LENGTH];\n int correctChoice;\n} Question;\n\ntypedef struct {\n char username[MAX_USERNAME_LENGTH];\n int score;\n time_t startTime;\n time_t endTime;\n} User;\n\nvoid addQuestion(Question *questions, int *numQuestions) {\n if (*numQuestions >= MAX_QUESTIONS) {\n printf("题库已满,无法继续添加题目。\n");\n return;\n }\n \n printf("请输入题目:");\n fgets(questions[*numQuestions].question, MAX_QUESTION_LENGTH, stdin);\n questions[*numQuestions].question[strlen(questions[*numQuestions].question) - 1] = '\0'; // 移除换行符\n \n for (int i = 0; i < MAX_CHOICES; i++) {\n printf("请输入选项%d:", i + 1);\n fgets(questions[*numQuestions].choices[i], MAX_QUESTION_LENGTH, stdin);\n questions[*numQuestions].choices[i][strlen(questions[*numQuestions].choices[i]) - 1] = '\0'; // 移除换行符\n }\n \n printf("请输入正确选项编号:");\n scanf("%d", &questions[*numQuestions].correctChoice);\n \n getchar(); // 读取多余的换行符\n \n (*numQuestions)++;\n \n printf("题目添加成功。\n");\n}\n\nvoid deleteQuestion(Question *questions, int *numQuestions) {\n if (*numQuestions <= 0) {\n printf("题库为空,无法删除题目。\n");\n return;\n }\n \n int questionIndex;\n printf("请输入要删除的题目编号(1 - %d):", *numQuestions);\n scanf("%d", &questionIndex);\n \n if (questionIndex < 1 || questionIndex > *numQuestions) {\n printf("题目编号无效。\n");\n return;\n }\n \n for (int i = questionIndex - 1; i < *numQuestions - 1; i++) {\n questions[i] = questions[i + 1];\n }\n \n (*numQuestions)--;\n \n printf("题目删除成功。\n");\n}\n\nvoid modifyQuestion(Question *questions, int numQuestions) {\n if (numQuestions <= 0) {\n printf("题库为空,无法修改题目。\n");\n return;\n }\n \n int questionIndex;\n printf("请输入要修改的题目编号(1 - %d):", numQuestions);\n scanf("%d", &questionIndex);\n \n if (questionIndex < 1 || questionIndex > numQuestions) {\n printf("题目编号无效。\n");\n return;\n }\n \n printf("请输入修改后的题目:");\n getchar(); // 读取多余的换行符\n fgets(questions[questionIndex - 1].question, MAX_QUESTION_LENGTH, stdin);\n questions[questionIndex - 1].question[strlen(questions[questionIndex - 1].question) - 1] = '\0'; // 移除换行符\n \n for (int i = 0; i < MAX_CHOICES; i++) {\n printf("请输入修改后的选项%d:", i + 1);\n fgets(questions[questionIndex - 1].choices[i], MAX_QUESTION_LENGTH, stdin);\n questions[questionIndex - 1].choices[i][strlen(questions[questionIndex - 1].choices[i]) - 1] = '\0'; // 移除换行符\n }\n \n printf("请输入修改后的正确选项编号:");\n scanf("%d", &questions[questionIndex - 1].correctChoice);\n \n printf("题目修改成功。\n");\n}\n\nvoid extractQuestions(Question *questions, int numQuestions, int numExtractedQuestions) {\n if (numExtractedQuestions > numQuestions) {\n printf("题库题目数量不足。\n");\n return;\n }\n \n srand(time(NULL));\n \n printf("抽取的题目如下:\n");\n \n int extractedIndices[MAX_QUESTIONS];\n \n for (int i = 0; i < numExtractedQuestions; i++) {\n int randomIndex;\n do {\n randomIndex = rand() % numQuestions;\n } while (extractedIndices[randomIndex]);\n \n extractedIndices[randomIndex] = 1;\n \n printf("题目%d:%s\n", i + 1, questions[randomIndex].question);\n for (int j = 0; j < MAX_CHOICES; j++) {\n printf("%d. %s\n", j + 1, questions[randomIndex].choices[j]);\n }\n printf("\n");\n }\n}\n\nint calculateScore(Question *questions, int numQuestions) {\n int score = 0;\n \n for (int i = 0; i < numQuestions; i++) {\n int choice;\n printf("请输入第%d题的答案编号:", i + 1);\n scanf("%d", &choice);\n \n if (choice == questions[i].correctChoice) {\n score++;\n }\n }\n \n return score;\n}\n\nvoid displayResult(User user, int score) {\n printf("\n");\n printf("用户名:%s\n", user.username);\n printf("分数:%d/%d\n", score, MAX_QUESTIONS);\n printf("答题时间:%ld秒\n", user.endTime - user.startTime);\n}\n\nint main() {\n Question questions[MAX_QUESTIONS];\n int numQuestions = 0;\n User user;\n \n int choice;\n \n do {\n printf("------ 单项选择题标准化考试系统 ------ ");\n printf("1. 添加题目\n");\n printf("2. 删除题目\n");\n printf("3. 修改题目\n");\n printf("4. 抽取题目并答题\n");\n printf("5. 退出\n");\n printf("请输入选项:");\n scanf("%d", &choice);\n \n switch (choice) {\n case 1:\n addQuestion(questions, &numQuestions);\n break;\n case 2:\n deleteQuestion(questions, &numQuestions);\n break;\n case 3:\n modifyQuestion(questions, numQuestions);\n break;\n case 4: {\n int numExtractedQuestions;\n printf("请输入抽取的题目数量:");\n scanf("%d", &numExtractedQuestions);\n \n user.startTime = time(NULL);\n \n extractQuestions(questions, numQuestions, numExtractedQuestions);\n \n int score = calculateScore(questions, numExtractedQuestions);\n \n user.endTime = time(NULL);\n \n printf("答题完成。\n");\n \n displayResult(user, score);\n \n break;\n }\n case 5:\n printf("感谢使用!\n");\n break;\n default:\n printf("无效的选项。\n");\n break;\n }\n \n printf("\n");\n } while (choice != 5);\n \n return 0;\n

C语言单项选择题考试系统 - Dev-C++ 实现 - 添加、删除、修改、抽取、评分

原文地址: https://www.cveoy.top/t/topic/py1a 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录