# Simple-Information-Management-System #include "student.h" #include #include // 用于清空输入缓冲区 int main() { SqList L = {0}; // 初始化空表 printf("简易学生信息管理系统 - 姓名:你的姓名\n"); while (1) { printf("\n菜单:\n"); printf("1. 输入学生信息\n"); printf("2. 显示所有学生信息\n"); printf("3. 插入学生信息\n"); printf("4. 删除学生信息\n"); printf("5. 统计学生个数\n"); printf("6. 按姓名排序\n"); printf("7. 按学号排序\n"); printf("8. 按学号查找\n"); printf("0. 退出系统\n"); printf("请选择功能:"); int choice; if (scanf("%d", &choice) != 1) { // 输入非数字处理 printf("输入错误!请输入数字选项\n"); while (getchar() != '\n'); // 清空输入缓冲区 continue; } switch (choice) { case 1: { // 功能1:输入学生信息 int n; printf("请输入学生个数(不超过%d):", 100 - L.length); if (scanf("%d", &n) != 1) { printf("输入错误!请输入有效数字\n"); while (getchar() != '\n'); break; } if (n <= 0) { printf("人数必须为正整数!\n"); break; } InputStudents(&L, n); // 调用输入函数 break; } case 2: { // 功能2:显示所有学生信息 if (L.length == 0) { printf("当前没有学生信息!\n"); break; } PrintStudents(L); // 调用显示函数 break; } case 3: { // 功能3:插入学生信息 int pos; Student s; // 输入位置 printf("请输入插入位置(1~%d):", L.length + 1); if (scanf("%d", &pos) != 1) { printf("位置输入错误!\n"); while (getchar() != '\n'); break; } if (pos < 1 || pos > L.length + 1) { printf("位置非法!有效范围:1~%d\n", L.length + 1); break; } // 输入学生信息 printf("请输入要插入的学生信息(学号 姓名 成绩):"); if (scanf("%d %s %f", &s.sid, s.name, &s.score) != 3) { printf("信息格式错误!\n"); while (getchar() != '\n'); break; } // 执行插入 if (InsertStudent(&L, pos, s)) { printf("插入成功!\n"); } else { printf("插入失败!顺序表已满或位置非法\n"); } break; } case 4: { // 功能4:删除指定位置学生 int pos; printf("请输入删除位置(1~%d):", L.length); if (scanf("%d", &pos) != 1) { printf("位置输入错误!\n"); while (getchar() != '\n'); break; } if (pos < 1 || pos > L.length) { printf("位置非法!有效范围:1~%d\n", L.length); break; } if (DeleteStudent(&L, pos)) { printf("删除成功!\n"); } else { printf("删除失败!\n"); } break; } case 5: { // 功能5:统计学生个数 int count = GetStudentCount(L); printf("当前学生人数:%d\n", count); break; } case 6: { // 功能6:按姓名排序(直接插入排序) if (L.length <= 1) { printf("无需排序(学生数≤1)\n"); break; } InsertSortByName(&L); printf("按姓名排序完成!\n"); break; } case 7: { // 功能7:按学号排序(快速排序) if (L.length <= 1) { printf("无需排序(学生数≤1)\n"); break; } QuickSortBySid(&L); printf("按学号排序完成!\n"); break; } case 8: { // 功能8:按学号查找(折半查找) if (L.length == 0) { printf("无学生信息!\n"); break; } // 查找前必须先按学号排序(折半查找要求有序) QuickSortBySid(&L); // 先排序确保有序 int target_sid; printf("请输入要查找的学号:"); if (scanf("%d", &target_sid) != 1) { printf("学号输入错误!\n"); while (getchar() != '\n'); break; } Student *s = BinarySearch(L, target_sid); if (s != NULL) { printf("查找成功!姓名:%s,成绩:%.1f\n", s->name, s->score); } else { printf("未找到该学号的学生!\n"); } break; } case 0: { // 退出系统 printf("系统已退出,再见!\n"); return 0; } default: printf("无效选项!请重新输入\n"); } } }