用c语言编译一个学生管理系统学生信息包括(名字学号成绩)实现录入(学生信息用文件保存),查询,排序,删除,修改
时间: 2023-06-12 21:06:13 浏览: 182
好的,下面是一个简单的学生管理系统的实现,包括录入、查询、排序、删除和修改功能。该程序使用文件来保存学生信息,每个学生信息包括姓名、学号和成绩。以下是代码:
```c
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define MAX_STUDENT 100
// 学生信息结构体
typedef struct {
char name[20];
int id;
double score;
} Student;
// 学生信息数组
Student students[MAX_STUDENT];
int num_students = 0;
// 保存学生信息到文件
void save_students() {
FILE *fp = fopen("students.dat", "wb");
fwrite(&num_students, sizeof(int), 1, fp);
fwrite(students, sizeof(Student), num_students, fp);
fclose(fp);
}
// 从文件中读取学生信息
void load_students() {
FILE *fp = fopen("students.dat", "rb");
if (fp == NULL) {
return;
}
fread(&num_students, sizeof(int), 1, fp);
fread(students, sizeof(Student), num_students, fp);
fclose(fp);
}
// 录入学生信息
void add_student() {
if (num_students >= MAX_STUDENT) {
printf("已达到最大学生数,无法添加!\n");
return;
}
Student student;
printf("请输入学生姓名:");
scanf("%s", student.name);
printf("请输入学生学号:");
scanf("%d", &student.id);
printf("请输入学生成绩:");
scanf("%lf", &student.score);
students[num_students++] = student;
save_students();
printf("学生信息已保存!\n");
}
// 查询学生信息
void find_student() {
int id;
printf("请输入要查询的学生学号:");
scanf("%d", &id);
for (int i = 0; i < num_students; i++) {
if (students[i].id == id) {
printf("姓名:%s 学号:%d 成绩:%.2f\n", students[i].name, students[i].id, students[i].score);
return;
}
}
printf("未找到学号为 %d 的学生!\n", id);
}
// 按照成绩排序
void sort_students() {
for (int i = 0; i < num_students - 1; i++) {
for (int j = i + 1; j < num_students; j++) {
if (students[i].score < students[j].score) {
Student temp = students[i];
students[i] = students[j];
students[j] = temp;
}
}
}
save_students();
printf("学生信息已排序!\n");
}
// 删除学生信息
void delete_student() {
int id;
printf("请输入要删除的学生学号:");
scanf("%d", &id);
for (int i = 0; i < num_students; i++) {
if (students[i].id == id) {
for (int j = i; j < num_students - 1; j++) {
students[j] = students[j + 1];
}
num_students--;
save_students();
printf("学生信息已删除!\n");
return;
}
}
printf("未找到学号为 %d 的学生!\n", id);
}
// 修改学生信息
void modify_student() {
int id;
printf("请输入要修改的学生学号:");
scanf("%d", &id);
for (int i = 0; i < num_students; i++) {
if (students[i].id == id) {
printf("请输入新的学生姓名:");
scanf("%s", students[i].name);
printf("请输入新的学生学号:");
scanf("%d", &students[i].id);
printf("请输入新的学生成绩:");
scanf("%lf", &students[i].score);
save_students();
printf("学生信息已修改!\n");
return;
}
}
printf("未找到学号为 %d 的学生!\n", id);
}
// 显示菜单
void show_menu() {
printf("===========================================\n");
printf("学生管理系统\n");
printf("1. 录入学生信息\n");
printf("2. 查询学生信息\n");
printf("3. 按照成绩排序\n");
printf("4. 删除学生信息\n");
printf("5. 修改学生信息\n");
printf("0. 退出程序\n");
printf("===========================================\n");
}
int main() {
load_students();
while (1) {
show_menu();
int choice;
printf("请输入选项:");
scanf("%d", &choice);
switch (choice) {
case 0:
printf("程序已退出!\n");
return 0;
case 1:
add_student();
break;
case 2:
find_student();
break;
case 3:
sort_students();
break;
case 4:
delete_student();
break;
case 5:
modify_student();
break;
default:
printf("无效选项,请重新输入!\n");
break;
}
}
}
```
在上面的代码中,我们使用了一个学生信息结构体来保存每个学生的姓名、学号和成绩。使用文件来保存学生信息,包括从文件中读取学生信息和将学生信息保存到文件中。实现了录入、查询、排序、删除和修改功能。用户可以通过输入菜单中的选项来执行相应的操作。
注意,这只是一个简单的实现,还有很多可以优化的地方。例如,可以添加输入校验,防止用户输入非法的数据。
阅读全文