You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
|
|
8 months ago | |
|---|---|---|
| README.md | 8 months ago | |
README.md
Simple-Information-Management-System
#include "student.h" #include <stdio.h> #include <string.h> // 用于清空输入缓冲区
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");
}
}
}