用c语言生成一个学生管理系统有保存功能
时间: 2024-03-17 15:45:27 浏览: 20
好的,以下是一个带有保存功能的学生管理系统的代码示例,使用C语言编写。这个学生管理系统可以添加、删除、修改并显示学生的信息,并且可以将学生信息保存到文件中,下次启动程序时可以读取文件中的学生信息。
```c
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
struct student {
char name[50];
int age;
int grade;
};
void add_student(struct student students[], int *num_students) {
printf("Enter student name: ");
scanf("%s", students[*num_students].name);
printf("Enter student age: ");
scanf("%d", &students[*num_students].age);
printf("Enter student grade: ");
scanf("%d", &students[*num_students].grade);
(*num_students)++;
}
void delete_student(struct student students[], int *num_students) {
char name[50];
printf("Enter student name to delete: ");
scanf("%s", name);
for (int i = 0; i < *num_students; i++) {
if (strcmp(students[i].name, name) == 0) {
for (int j = i; j < *num_students - 1; j++) {
students[j] = students[j + 1];
}
(*num_students)--;
printf("Student deleted successfully.\n");
return;
}
}
printf("Student not found.\n");
}
void edit_student(struct student students[], int num_students) {
char name[50];
printf("Enter student name to edit: ");
scanf("%s", name);
for (int i = 0; i < num_students; i++) {
if (strcmp(students[i].name, name) == 0) {
printf("Enter student age: ");
scanf("%d", &students[i].age);
printf("Enter student grade: ");
scanf("%d", &students[i].grade);
printf("Student edited successfully.\n");
return;
}
}
printf("Student not found.\n");
}
void display_students(struct student students[], int num_students) {
printf("Name\tAge\tGrade\n");
for (int i = 0; i < num_students; i++) {
printf("%s\t%d\t%d\n", students[i].name, students[i].age, students[i].grade);
}
}
void save_students(struct student students[], int num_students) {
FILE *file = fopen("students.dat", "wb");
fwrite(&num_students, sizeof(int), 1, file);
fwrite(students, sizeof(struct student), num_students, file);
fclose(file);
printf("Students saved.\n");
}
void load_students(struct student students[], int *num_students) {
FILE *file = fopen("students.dat", "rb");
if (file == NULL) {
printf("No saved students.\n");
return;
}
fread(num_students, sizeof(int), 1, file);
fread(students, sizeof(struct student), *num_students, file);
fclose(file);
printf("Students loaded.\n");
}
int main() {
struct student students[50];
int num_students = 0;
int choice;
load_students(students, &num_students);
while (1) {
printf("\n1. Add student\n");
printf("2. Delete student\n");
printf("3. Edit student\n");
printf("4. Display students\n");
printf("5. Save students\n");
printf("6. Exit\n");
printf("Enter your choice: ");
scanf("%d", &choice);
switch (choice) {
case 1:
add_student(students, &num_students);
break;
case 2:
delete_student(students, &num_students);
break;
case 3:
edit_student(students, num_students);
break;
case 4:
display_students(students, num_students);
break;
case 5:
save_students(students, num_students);
break;
case 6:
save_students(students, num_students);
return 0;
default:
printf("Invalid choice.\n");
}
}
}
```
这个学生管理系统增加了两个新的函数:`save_students` 和 `load_students`。`save_students` 函数将学生信息保存到一个二进制文件中,包括学生数量和每个学生的姓名、年龄和成绩。`load_students` 函数从文件中读取学生信息,如果文件不存在则提示没有保存的学生信息。
在主函数中,每次启动程序时先调用 `load_students` 函数读取保存的学生信息,然后在用户选择保存学生信息时调用 `save_students` 函数将学生信息保存到文件中,最后在用户选择退出程序时也调用 `save_students` 函数保存学生信息。这样可以确保即使程序意外终止,之前输入的学生信息也不会丢失。