From f6dcf5c67f0999e97e0c8e45cb20955a88c4b9e8 Mon Sep 17 00:00:00 2001 From: LHY20 <3364451258@qq.com> Date: Fri, 18 Jul 2025 22:43:40 +0800 Subject: [PATCH] =?UTF-8?q?=E6=9B=B4=E6=96=B0=E9=A1=B9=E7=9B=AE=E6=96=87?= =?UTF-8?q?=E6=A1=A3=E5=92=8C=E9=85=8D=E7=BD=AE=E6=96=87=E4=BB=B6=20-=20?= =?UTF-8?q?=E8=AF=A6=E7=BB=86=E5=8C=96config.h=E6=B3=A8=E9=87=8A=EF=BC=8C?= =?UTF-8?q?=E6=9B=B4=E6=96=B0README.md=E9=A1=B9=E7=9B=AE=E7=BB=93=E6=9E=84?= =?UTF-8?q?=E5=92=8C=E6=95=B0=E6=8D=AE=E7=BB=93=E6=9E=84=E8=AF=B4=E6=98=8E?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .vscode/launch.json | 4 +- MD/README.md | 121 +++++++++++++++++++++++++++------------ config.h | 136 ++++++++++++++++++++++++-------------------- 3 files changed, 163 insertions(+), 98 deletions(-) diff --git a/.vscode/launch.json b/.vscode/launch.json index 92c9925..6e40006 100644 --- a/.vscode/launch.json +++ b/.vscode/launch.json @@ -8,8 +8,8 @@ "args": [], "stopAtEntry": false, "externalConsole": true, - "cwd": "d:/Code/Stu_scores_system", - "program": "d:/Code/Stu_scores_system/build/Debug/outDebug", + "cwd": "d:/Code/doing_exercises/Stu_scores_system", + "program": "d:/Code/doing_exercises/Stu_scores_system/build/Debug/outDebug", "MIMode": "gdb", "miDebuggerPath": "gdb", "setupCommands": [ diff --git a/MD/README.md b/MD/README.md index 2725641..e5e99b9 100644 --- a/MD/README.md +++ b/MD/README.md @@ -80,7 +80,7 @@ cd Stu_scores_system 2. **使用GCC编译** ```bash -gcc -o student_system.exe main.c stu_data.c student_crud.c student_search.c user_manage.c main_menu.c student_io.c core_handlers.c statistical_analysis.c io_utils.c validation.c string_utils.c file_utils.c math_utils.c system_utils.c globals.c +gcc -o student_system.exe main.c student_crud.c student_search.c student_sort.c user_manage.c main_menu.c student_io.c core_handlers.c statistical_analysis.c io_utils.c validation.c string_utils.c file_utils.c math_utils.c system_utils.c globals.c ``` 3. **使用Makefile编译(v3.0.0优化版)** @@ -148,36 +148,40 @@ teacher:password:0 ``` Stu_scores_system/ (v3.0.0 统一类型管理结构) -├── 📁 data/ # 数据文件目录 -│ ├── students.csv # 学生数据(CSV格式) -│ └── users.txt # 用户数据 -├── 📁 backup/ # 备份目录 -├── 📁 MD/ # 文档目录 -│ ├── README.md # 项目说明 -│ └── CSV_FORMAT.md # CSV格式说明 -├── 📁 TXT/ # 文本文档目录 -│ ├── 系统说明文档.txt # 系统详细说明 -│ └── 代码统计报告.txt # 代码统计分析 -├── 📄 main.c # 主程序入口 -├── 📄 types.h # 统一数据类型定义(v3.0.0新增) -├── 📄 config.h # 系统配置 -├── 📄 globals.c/h # 全局变量 -├── 📄 stu_data.c/h # 学生数据管理 -├── 📄 student_crud.c/h # 学生CRUD操作 -├── 📄 student_search.c/h # 学生搜索功能 -├── 📄 student_io.c/h # 学生IO操作 -├── 📄 statistical_analysis.c/h # 统计分析 -├── 📄 user_manage.c/h # 用户管理 -├── 📄 main_menu.c/h # 菜单系统 -├── 📄 core_handlers.c/h # 核心处理器 -├── 📄 io_utils.c/h # IO工具库 -├── 📄 validation.c/h # 验证工具库 -├── 📄 string_utils.c/h # 字符串工具库 -├── 📄 file_utils.c/h # 文件工具库 -├── 📄 math_utils.c/h # 数学工具库 -├── 📄 system_utils.c/h # 系统工具库 -├── 📄 Makefile # 编译配置(v2.2优化版) -└── 📄 要求.txt # 需求文档 +├── 📁 .idea/ # IntelliJ IDEA配置目录 +├── 📁 .vscode/ # VS Code配置目录 +├── 📁 data/ # 数据文件目录 +│ ├── students.csv # 学生数据(CSV格式) +│ └── users.txt # 用户数据 +├── 📁 backup/ # 备份目录 +├── 📁 build/ # 编译输出目录 +├── 📁 MD/ # 文档目录 +│ ├── README.md # 项目说明 +│ └── CSV_FORMAT.md # CSV格式说明 +├── 📁 TXT/ # 文本文档目录 +│ ├── 系统说明文档.txt # 系统详细说明 +│ ├── 代码统计报告.txt # 代码统计分析 +│ └── 要求.txt # 需求文档 +├── 📄 main.c # 主程序入口 +├── 📄 types.h # 统一数据类型定义(v3.0.0新增) +├── 📄 config.h # 系统配置 +├── 📄 globals.c/h # 全局变量管理 +├── 📄 student_crud.c/h # 学生CRUD操作 +├── 📄 student_search.c/h # 学生搜索功能 +├── 📄 student_sort.c/h # 学生排序功能 +├── 📄 student_io.c/h # 学生IO操作 +├── 📄 statistical_analysis.c/h # 统计分析功能 +├── 📄 user_manage.c/h # 用户管理 +├── 📄 main_menu.c/h # 菜单系统 +├── 📄 core_handlers.c/h # 核心处理器 +├── 📄 io_utils.c/h # IO工具库 +├── 📄 validation.c/h # 数据验证工具库 +├── 📄 string_utils.c/h # 字符串工具库 +├── 📄 file_utils.c/h # 文件操作工具库 +├── 📄 math_utils.c/h # 数学计算工具库 +├── 📄 system_utils.c/h # 系统工具库 +├── 📄 Makefile # 编译配置(v3.0.0优化版) +└── 📄 student_system.exe # 编译生成的可执行文件 ``` ## 🛠️ 开发指南 @@ -196,21 +200,68 @@ Stu_scores_system/ (v3.0.0 统一类型管理结构) 4. 更新配置文件(如需要) 5. 编写测试用例 -### 数据结构 +### 核心数据结构 + +#### 学生信息结构体 ```c typedef struct { char studentID[MAX_ID_LENGTH]; // 学号 char name[MAX_NAME_LENGTH]; // 姓名 int age; // 年龄 - char gender; // 性别 - char courses[MAX_COURSES][MAX_COURSE_NAME_LENGTH]; // 课程 - float scores[MAX_COURSES]; // 成绩 + char gender; // 性别 ('M'/'F') + char courses[MAX_COURSES][MAX_COURSE_NAME_LENGTH]; // 课程名称 + float scores[MAX_COURSES]; // 各科成绩 int courseCount; // 课程数量 float totalScore; // 总分 float averageScore; // 平均分 } Student; ``` +#### 用户信息结构体 +```c +typedef struct { + char username[MAX_USERNAME_LENGTH]; // 用户名 + char password[MAX_PASSWORD_LENGTH]; // 密码 + bool isAdmin; // 是否为管理员 +} User; +``` + +#### 统计分析结构体 +```c +// 课程统计信息 +typedef struct { + int studentCount; // 学生人数 + float maxScore; // 最高分 + float minScore; // 最低分 + float totalScore; // 总分 + float averageScore; // 平均分 + float passRate; // 及格率 +} CourseStats; + +// 分数分布统计 +typedef struct { + int excellent; // 优秀(90-100分) + int good; // 良好(80-89分) + int medium; // 中等(70-79分) + int pass; // 及格(60-69分) + int fail; // 不及格(0-59分) +} ScoreDistribution; + +// 总体统计信息 +typedef struct { + int totalStudents; // 学生总数 + int maleCount; // 男生人数 + int femaleCount; // 女生人数 + float averageAge; // 平均年龄 + float highestAverage; // 最高平均分 + float lowestAverage; // 最低平均分 + float overallAverageScore; // 总体平均分 + float standardDeviation; // 标准差 + int totalCourses; // 课程总数 + float averageCoursesPerStudent; // 人均课程数 +} OverallStats; +``` + ## 🔧 配置说明 ### 系统参数(config.h) diff --git a/config.h b/config.h index 73ceb0e..4ffe410 100644 --- a/config.h +++ b/config.h @@ -8,92 +8,106 @@ #define CONFIG_H // 系统配置参数 -#define MAX_STUDENTS 1000 // 最大学生数量 -#define MAX_COURSES 10 // 每个学生最多课程数 -#define MAX_USERS 50 // 最大用户数量 -#define MAX_LOGIN_ATTEMPTS 3 // 最大登录尝试次数 +// 定义系统中各种实体的数量限制,确保内存使用可控 +#define MAX_STUDENTS 1000 // 最大学生数量 - 系统可以存储的学生记录上限 +#define MAX_COURSES 10 // 每个学生最多课程数 - 限制单个学生可选修的课程数量 +#define MAX_USERS 50 // 最大用户数量 - 系统支持的用户账户上限 +#define MAX_LOGIN_ATTEMPTS 3 // 最大登录尝试次数 - 防止暴力破解,超过次数将锁定账户 // 字符串长度限制 -#define MAX_ID_LENGTH 20 // 学号最大长度 -#define MAX_NAME_LENGTH 50 // 姓名最大长度 -#define MAX_COURSE_NAME_LENGTH 50 // 课程名称最大长度 -#define MAX_USERNAME_LENGTH 30 // 用户名最大长度 -#define MAX_PASSWORD_LENGTH 30 // 密码最大长度 +// 定义各种字符串字段的最大长度,防止缓冲区溢出并优化内存分配 +#define MAX_ID_LENGTH 20 // 学号最大长度 - 包含终止符,实际可用19个字符 +#define MAX_NAME_LENGTH 50 // 姓名最大长度 - 支持中文姓名,包含终止符 +#define MAX_COURSE_NAME_LENGTH 50 // 课程名称最大长度 - 支持完整的课程名称描述 +#define MAX_USERNAME_LENGTH 30 // 用户名最大长度 - 登录系统使用的用户名 +#define MAX_PASSWORD_LENGTH 30 // 密码最大长度 - 用户密码的字符数限制 // 分数相关配置 -#define MIN_SCORE 0.0 // 最低分数 -#define MAX_SCORE 100.0 // 最高分数 -#define PASS_SCORE 60.0 // 及格分数 -#define EXCELLENT_SCORE 90.0 // 优秀分数 +// 定义成绩评价体系的分数范围和等级标准 +#define MIN_SCORE 0.0 // 最低分数 - 成绩的下限值 +#define MAX_SCORE 100.0 // 最高分数 - 成绩的上限值,采用百分制 +#define PASS_SCORE 60.0 // 及格分数 - 判断学生是否通过课程的分数线 +#define EXCELLENT_SCORE 90.0 // 优秀分数 - 判断学生成绩是否优秀的分数线 // 年龄相关配置 -#define MIN_AGE 10 // 最小年龄 -#define MAX_AGE 100 // 最大年龄 +// 定义学生年龄的合理范围,用于数据验证 +#define MIN_AGE 10 // 最小年龄 - 考虑到最年轻的学生可能年龄 +#define MAX_AGE 100 // 最大年龄 - 考虑到继续教育等特殊情况的年龄上限 // 文件路径配置 -#define STUDENTS_FILE "data/students.csv" // 学生数据文件 -#define USERS_FILE "data/users.txt" // 用户数据文件 -#define BACKUP_DIR "backup/" // 备份目录 +// 定义系统使用的数据文件和目录路径 +#define STUDENTS_FILE "data/students.csv" // 学生数据文件 - 存储所有学生信息的CSV格式文件 +#define USERS_FILE "data/users.txt" // 用户数据文件 - 存储系统用户账户信息 +#define BACKUP_DIR "backup/" // 备份目录 - 数据备份文件的存储位置 // 菜单选项定义 -#define MENU_EXIT 0 -#define MENU_BASIC_FUNCTIONS 1 -#define MENU_STATISTICS 2 -#define MENU_ADMIN 3 +// 主菜单的选项编号,用于用户界面导航 +#define MENU_EXIT 0 // 退出系统 +#define MENU_BASIC_FUNCTIONS 1 // 基本功能菜单 - 学生信息的增删改查 +#define MENU_STATISTICS 2 // 统计分析菜单 - 成绩统计和数据分析 +#define MENU_ADMIN 3 // 管理功能菜单 - 用户管理和系统设置 // 基本功能菜单选项 -#define BASIC_BACK 0 -#define BASIC_ADD_STUDENT 1 -#define BASIC_DELETE_STUDENT 2 -#define BASIC_MODIFY_STUDENT 3 -#define BASIC_SEARCH_BY_ID 4 -#define BASIC_SEARCH_BY_NAME 5 -#define BASIC_DISPLAY_ALL 6 -#define BASIC_SORT_STUDENTS 7 +// 学生信息管理的具体操作选项 +#define BASIC_BACK 0 // 返回主菜单 +#define BASIC_ADD_STUDENT 1 // 添加学生信息 +#define BASIC_DELETE_STUDENT 2 // 删除学生记录 +#define BASIC_MODIFY_STUDENT 3 // 修改学生信息 +#define BASIC_SEARCH_BY_ID 4 // 按学号查找学生 +#define BASIC_SEARCH_BY_NAME 5 // 按姓名查找学生 +#define BASIC_DISPLAY_ALL 6 // 显示所有学生信息 +#define BASIC_SORT_STUDENTS 7 // 学生信息排序功能 // 统计功能菜单选项 -#define STATS_BACK 0 -#define STATS_COURSE_ANALYSIS 1 -#define STATS_SCORE_DISTRIBUTION 2 -#define STATS_SCORE_RANGES 3 -#define STATS_OVERALL_ANALYSIS 4 +// 成绩统计和数据分析的功能选项 +#define STATS_BACK 0 // 返回主菜单 +#define STATS_COURSE_ANALYSIS 1 // 课程成绩分析 - 分析各门课程的成绩情况 +#define STATS_SCORE_DISTRIBUTION 2 // 成绩分布统计 - 显示成绩的分布情况 +#define STATS_SCORE_RANGES 3 // 成绩区间统计 - 按分数段统计学生人数 +#define STATS_OVERALL_ANALYSIS 4 // 综合分析 - 整体成绩趋势和统计信息 // 管理功能菜单选项 -#define ADMIN_BACK 0 -#define ADMIN_ADD_USER 1 -#define ADMIN_DELETE_USER 2 -#define ADMIN_MODIFY_PASSWORD 3 -#define ADMIN_VIEW_USERS 4 +// 系统管理员专用的用户管理功能 +#define ADMIN_BACK 0 // 返回主菜单 +#define ADMIN_ADD_USER 1 // 添加新用户账户 +#define ADMIN_DELETE_USER 2 // 删除用户账户 +#define ADMIN_MODIFY_PASSWORD 3 // 修改用户密码 +#define ADMIN_VIEW_USERS 4 // 查看所有用户信息 // 排序选项 -#define SORT_BY_ID 1 -#define SORT_BY_NAME 2 -#define SORT_BY_TOTAL_SCORE 3 -#define SORT_BY_AVERAGE_SCORE 4 +// 定义学生信息的排序依据 +#define SORT_BY_ID 1 // 按学号排序 +#define SORT_BY_NAME 2 // 按姓名排序 +#define SORT_BY_TOTAL_SCORE 3 // 按总分排序 +#define SORT_BY_AVERAGE_SCORE 4 // 按平均分排序 // 排序顺序 -#define SORT_ASCENDING 1 -#define SORT_DESCENDING 2 +// 定义排序的方向 +#define SORT_ASCENDING 1 // 升序排列 - 从小到大 +#define SORT_DESCENDING 2 // 降序排列 - 从大到小 // 性别定义 -#define GENDER_MALE 'M' -#define GENDER_FEMALE 'F' +// 使用字符常量表示学生性别,便于数据存储和处理 +#define GENDER_MALE 'M' // 男性标识 +#define GENDER_FEMALE 'F' // 女性标识 // 颜色代码(用于美化输出) -#define COLOR_RESET "\033[0m" -#define COLOR_RED "\033[31m" -#define COLOR_GREEN "\033[32m" -#define COLOR_YELLOW "\033[33m" -#define COLOR_BLUE "\033[34m" -#define COLOR_MAGENTA "\033[35m" -#define COLOR_CYAN "\033[36m" -#define COLOR_WHITE "\033[37m" +// ANSI转义序列,用于在终端中显示彩色文本,提升用户体验 +#define COLOR_RESET "\033[0m" // 重置颜色 - 恢复默认颜色 +#define COLOR_RED "\033[31m" // 红色 - 通常用于错误信息 +#define COLOR_GREEN "\033[32m" // 绿色 - 通常用于成功信息 +#define COLOR_YELLOW "\033[33m" // 黄色 - 通常用于警告信息 +#define COLOR_BLUE "\033[34m" // 蓝色 - 通常用于信息提示 +#define COLOR_MAGENTA "\033[35m" // 洋红色 - 用于特殊标记 +#define COLOR_CYAN "\033[36m" // 青色 - 用于标题或重要信息 +#define COLOR_WHITE "\033[37m" // 白色 - 用于普通文本 // 系统消息 -#define MSG_SUCCESS "操作成功!" -#define MSG_FAILURE "操作失败!" -#define MSG_NOT_FOUND "未找到相关记录!" -#define MSG_INVALID_INPUT "输入无效,请重新输入!" -#define MSG_FILE_ERROR "文件操作错误!" +// 预定义的系统提示信息,保证消息的一致性和易于维护 +#define MSG_SUCCESS "操作成功!" // 操作成功时的提示信息 +#define MSG_FAILURE "操作失败!" // 操作失败时的通用错误信息 +#define MSG_NOT_FOUND "未找到相关记录!" // 查询无结果时的提示信息 +#define MSG_INVALID_INPUT "输入无效,请重新输入!" // 用户输入格式错误时的提示 +#define MSG_FILE_ERROR "文件操作错误!" // 文件读写操作失败时的错误信息 #endif // CONFIG_H \ No newline at end of file