C 语言实现多功能学生信息管理系统,附代码与详细说明
以下是一个使用 C 语言实现的学生信息管理系统的代码: ```c #include <stdio.h> #include <stdlib.h> #include <string.h> #define MAX_STUDENTS 100 #define COURSES 5 // 定义学生结构体 typedef struct { char id[20]; char name[50]; char gender[10]; int age; float scores[COURSES]; } Student; // 全局变量,存储学生信息 Student students[MAX_STUDENTS]; int studentCount = 0; // 从文件中读取学生信息 void readStudentsFromFile() { FILE *file = fopen("students.txt", "r"); if (file == NULL) { return; } studentCount = 0; while (studentCount < MAX_STUDENTS && fscanf(file, "%s %s %s %d", students[studentCount].id, students[studentCount].name, students[studentCount].gender, &students[studentCount].age) != EOF) { for (int i = 0; i < COURSES; i++) { fscanf(file, "%f", &students[studentCount].scores[i]); } studentCount++; } fclose(file); } // 将学生信息写入文件 void writeStudentsToFile() { FILE *file = fopen("students.txt", "w"); if (file == NULL) { printf("无法打开文件!\n"); return; } for (int i = 0; i < studentCount; i++) { fprintf(file, "%s %s %s %d", students[i].id, students[i].name, students[i].gender, students[i].age); for (int j = 0; j < COURSES; j++) { fprintf(file, " %.2f", students[i].scores[j]); } fprintf(file, "\n"); } fclose(file); } // 输入学生信息 void inputStudent() { if (studentCount >= MAX_STUDENTS) { printf("学生数量已达到上限!\n"); return; } printf("请输入学号:"); scanf("%s", students[studentCount].id); printf("请输入姓名:"); scanf("%s", students[studentCount].name); printf("请输入性别:"); scanf("%s", students[studentCount].gender); printf("请输入年龄:"); scanf("%d", &students[studentCount].age); printf("请输入五门课成绩:"); for (int i = 0; i < COURSES; i++) { scanf("%f", &students[studentCount].scores[i]); } studentCount++; writeStudentsToFile(); } // 输出学生信息 void outputStudents() { for (int i = 0; i < studentCount; i++) { printf("学号:%s,姓名:%s,性别:%s,年龄:%d,成绩:", students[i].id, students[i].name, students[i].gender, students[i].age); for (int j = 0; j < COURSES; j++) { printf("%.2f ", students[i].scores[j]); } printf("\n"); } } // 按学号查询 void queryById() { char id[20]; printf("请输入要查询的学号:"); scanf("%s", id); for (int i = 0; i < studentCount; i++) { if (strcmp(students[i].id, id) == 0) { printf("学号:%s,姓名:%s,性别:%s,年龄:%d,成绩:", students[i].id, students[i].name, students[i].gender, students[i].age); for (int j = 0; j < COURSES; j++) { printf("%.2f ", students[i].scores[j]); } printf("\n"); return; } } printf("未找到该学号的学生!\n"); } // 按姓名查询 void queryByName() { char name[50]; printf("请输入要查询的姓名:"); scanf("%s", name); for (int i = 0; i < studentCount; i++) { if (strcmp(students[i].name, name) == 0) { printf("学号:%s,姓名:%s,性别:%s,年龄:%d,成绩:", students[i].id, students[i].name, students[i].gender, students[i].age); for (int j = 0; j < COURSES; j++) { printf("%.2f ", students[i].scores[j]); } printf("\n"); return; } } printf("未找到该姓名的学生!\n"); } // 修改学生信息 void modifyStudent() { char id[20]; printf("请输入要修改的学生学号:"); scanf("%s", id); for (int i = 0; i < studentCount; i++) { if (strcmp(students[i].id, id) == 0) { printf("请输入新的姓名:"); scanf("%s", students[i].name); printf("请输入新的性别:"); scanf("%s", students[i].gender); printf("请输入新的年龄:"); scanf("%d", &students[i].age); printf("请输入新的五门课成绩:"); for (int j = 0; j < COURSES; j++) { scanf("%f", &students[i].scores[j]); } writeStudentsToFile(); printf("学生信息修改成功!\n"); return; } } printf("未找到该学号的学生!\n"); } // 插入学生信息 void insertStudent() { inputStudent(); } // 删除学生信息 void deleteStudent() { char id[20]; printf("请输入要删除的学生学号:"); scanf("%s", id); for (int i = 0; i < studentCount; i++) { if (strcmp(students[i].id, id) == 0) { for (int j = i; j < studentCount - 1; j++) { students[j] = students[j + 1]; } studentCount--; writeStudentsToFile(); printf("学生信息删除成功!\n"); return; } } printf("未找到该学号的学生!\n"); } // 按姓名排序 void sortStudentsByName() { for (int i = 0; i < studentCount - 1; i++) { for (int j = i + 1; j < studentCount; j++) { if (strcmp(students[i].name, students[j].name) > 0) { Student temp = students[i]; students[i] = students[j]; students[j] = temp; } } } writeStudentsToFile(); printf("学生信息已按姓名排序!\n"); } // 主菜单 void menu() { int choice; do { 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("9. 退出\n"); printf("请输入你的选择:"); scanf("%d", &choice); switch (choice) { case 1: inputStudent(); break; case 2: outputStudents(); break; case 3: queryById(); break; case 4: queryByName(); break; case 5: modifyStudent(); break; case 6: insertStudent(); break; case 7: deleteStudent(); break; case 8: sortStudentsByName(); break; case 9: printf("退出系统!\n"); break; default: printf("无效的选择,请重新输入!\n"); } } while (choice != 9); } int main() { readStudentsFromFile(); menu(); return 0; } ``` 代码说明: 1. 结构体定义:定义了 `Student` 结构体,包含学号、姓名、性别、年龄和五门课成绩。 2. 文件操作:`readStudentsFromFile` 函数从文件中读取学生信息,`writeStudentsToFile` 函数将学生信息写入文件。 3. 功能函数:实现了输入、输出、查询、修改、插入、删除和排序等功能。 4. 主菜单:通过 `menu` 函数提供用户交互界面,用户可以选择不同的功能。 注意事项: - 学生信息存储在 `students.txt` 文件中,程序启动时会自动读取该文件的信息。 - 学生数量上限为 `MAX_STUDENTS`,可根据需要修改。 ######[AI问答 | 2248点数解答 | 2025-12-21 13:44:02]
- Python 实现球类:精准计算半径、表面积与体积,附输入验证与异常处理!(阿里通义 | 261点数解答 | 2024-11-28 21:19:39)346
- 缜密逻辑,全新无名杀“风餐”技能代码精心打造与深度解析 (字节豆包 | 469点数解答 | 2025-04-05 11:37:06)245
- Python 实战:学生信息列表转字典、遍历、深拷贝及数据修改全流程(GPT | 422点数解答 | 2024-10-29 15:43:54)418
- Python实战:学生成绩列表转字典,深拷贝与数据修改操作全解析(字节豆包 | 254点数解答 | 2024-10-29 16:01:39)412
- Java程序模拟教学选课:林老师开课,58 位学生选课男女比例大揭秘( | 2653点数解答 | 2024-04-02 11:00:16)472
- Java程序设计课程:模拟教学管理,统计58位选课学生男女比重( | 363点数解答 | 2024-04-05 18:31:39)475
- R语言实战:用配对样本t检验评估课程强化集训对学生成绩的提升效果(GPT | 630点数解答 | 2024-11-26 22:00:01)323
- 51 单片机:定时器 0 实现 8 个 LED 循环点亮,附代码及优化建议(字节豆包 | 1193点数解答 | 2024-12-27 15:10:29)316
- 用 JS 中 for 循环实现 1 到 100 相加并输出结果到页面的完整代码 ( | 240点数解答 | 2024-05-20 22:11:29)467
- 用 JS 的 while 循环实现 1 到 100 相加并输出到页面的代码揭秘( | 47点数解答 | 2024-05-20 22:16:48)357
- 深度剖析:黑盒、白盒、单元、集成、系统与验收测试的区别与联系 (百度文心 | 424点数解答 | 2023-11-09 18:24:11)301
- Spring Boot 打造 MallShop 购物商城:多角色权限、全业务功能的 Web 应用奇迹 (GPT | 1095点数解答 | 2024-12-09 14:06:47)367