C语言实现-学生成绩管理系统

时间:2025-03-07 09:18:32
#include <> #include <> // 定义结构体存储学生信息 struct student { char name[50]; int id; float score; }; // 定义函数声明 void add_student(struct student students[], int *num_students); void delete_student(struct student students[], int *num_students); void update_student(struct student students[], int num_students); void search_student(struct student students[], int num_students); int login(); int main() { struct student students[50]; // 存储最多50个学生信息 int num_students = 0; // 当前学生数量 // 登录验证 if (!login()) { printf("登录失败!\n"); return 1; } int choice; do { // 显示菜单并读取用户输入 printf("\n请选择操作:\n"); printf("1. 添加学生\n"); printf("2. 删除学生\n"); printf("3. 修改学生信息\n"); printf("4. 查找学生\n"); printf("5. 退出\n"); scanf("%d", &choice); switch (choice) { case 1: add_student(students, &num_students); // 调用添加学生函数 break; case 2: delete_student(students, &num_students); // 调用删除学生函数 break; case 3: update_student(students, num_students); // 调用修改学生信息函数 break; case 4: search_student(students, num_students); // 调用查找学生函数 break; case 5: printf("谢谢使用!\n"); break; default: printf("无效输入,请重新输入。\n"); } } while (choice != 5); return 0; } // 添加学生信息 void add_student(struct student students[], int *num_students) { if (*num_students == 50) { // 学生数量已达上限 printf("学生数量已满,无法继续添加。\n"); return; } struct student new_student; printf("请输入学生姓名:\n"); scanf("%s", new_student.name); printf("请输入学生ID:\n"); scanf("%d", &new_student.id); printf("请输入学生成绩:\n"); scanf("%f", &new_student.score); students[*num_students] = new_student; // 将新学生信息存储到数组中 (*num_students)++; // 学生数量加1 printf("添加成功!\n"); } // 删除学生信息 void delete_student(struct student students[], int *num_students) { if (*num_students == 0) { // 没有学生信息可供删除 printf("当前没有学生信息可供删除。\n"); return; } int id_to_delete; printf("请输入要删除的学生ID:\n"); scanf("%d", &id_to_delete); int i; for (i = 0; i < *num_students; i++) { if (students[i].id == id_to_delete) { break; } } if (i == *num_students) { // 没有找到对应ID的学生信息 printf("未找到ID为%d的学生信息。\n", id_to_delete); return; } // 将最后一个学生信息覆盖要删除的学生信息,实现删除操作 students[i] = students[(*num_students)-1]; (*num_students)--; printf("删除成功!\n"); } // 修改学生信息 void update_student(struct student students[], int num_students) { if (num_students == 0) { // 没有学生信息可供修改 printf("当前没有学生信息可供修改。\n"); return; } int id_to_update; printf("请输入要修改的学生ID:\n"); scanf("%d", &id_to_update); int i; for (i = 0; i < num_students; i++) { if (students[i].id == id_to_update) { // 找到对应ID的学生信息,读取新的学生姓名、学生成绩并更新 printf("请输入学生姓名:\n"); scanf("%s", students[i].name); printf("请输入学生成绩:\n"); scanf("%f", &students[i].score); printf("修改成功!\n"); return; } } // 没有找到对应ID的学生信息 printf("未找到ID为%d的学生信息。\n", id_to_update); } // 查找学生信息 void search_student(struct student students[], int num_students) { if (num_students == 0) { // 没有学生信息可供查找 printf("当前没有学生信息可供查找。\n"); return; } int choice; do { // 显示子菜单并读取用户输入 printf("\n请选择查找方式:\n"); printf("1. 根据姓名查找\n"); printf("2. 根据ID查找\n"); printf("3. 返回上一级菜单\n"); scanf("%d", &choice); switch (choice) { case 1: { char name_to_search[50]; printf("请输入要查找的学生姓名:\n"); scanf("%s", name_to_search); int found = 0; for (int i = 0; i < num_students; i++) { if (strcmp(students[i].name, name_to_search) == 0) { printf("姓名:%s ID:%d 成绩:%.2f\n", students[i].name, students[i].id, students[i].score); found = 1; } } if (!found) { printf("未找到姓名为%s的学生信息。\n", name_to_search); } break; } case 2: { int id_to_search; printf("请输入要查找的学生ID:\n"); scanf("%d", &id_to_search); int found = 0; for (int i = 0; i < num_students; i++) { if (students[i].id == id_to_search) { printf("姓名:%s ID:%d 成绩:%.2f\n", students[i].name, students[i].id, students[i].score); found = 1; break; } } if (!found) { printf("未找到ID为%d的学生信息。\n", id_to_search); } break; } case 3: break; default: printf("无效输入,请重新输入。\n"); } } while (choice != 3); } // 登录验证(简化版,仅用于演示) int login() { char username[50]; char password[50]; printf("请输入用户名:\n"); scanf("%s", username); printf("请输入密码:\n"); scanf("%s", password); // 简单判断用户名密码是否正确 if (strcmp(username, "admin") == 0 && strcmp(password, "123456") == 0) { return 1; } else { return 0; } }