设计一个小型的学生管理系统,用C语言能够实现对信息的输入、输出、插入、删除、修改、查找和排序等基本功能,要求使用文件作为信息的外部存储形式,生成代码
时间: 2023-07-10 21:10:44 浏览: 43
好的,根据您的需求,我为您设计了一个小型的学生管理系统,使用C语言实现对信息的输入、输出、插入、删除、修改、查找和排序等基本功能,并使用文件作为信息的外部存储形式。以下是程序的代码实现:
```c
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define MAX_STUDENT 100
typedef struct {
int id;
char name[20];
int age;
char gender[10];
} Student;
typedef struct {
Student students[MAX_STUDENT];
int count;
} StudentManagementSystem;
void load_students(StudentManagementSystem *sms) {
FILE *fp = fopen("students.dat", "rb");
if (fp != NULL) {
fread(&(sms->count), sizeof(int), 1, fp);
fread(sms->students, sizeof(Student), sms->count, fp);
fclose(fp);
}
}
void save_students(StudentManagementSystem *sms) {
FILE *fp = fopen("students.dat", "wb");
if (fp != NULL) {
fwrite(&(sms->count), sizeof(int), 1, fp);
fwrite(sms->students, sizeof(Student), sms->count, fp);
fclose(fp);
}
}
void add_student(StudentManagementSystem *sms) {
int id, age;
char name[20], gender[10];
printf("Enter student ID: ");
scanf("%d", &id);
printf("Enter student name: ");
scanf("%s", name);
printf("Enter student age: ");
scanf("%d", &age);
printf("Enter student gender: ");
scanf("%s", gender);
sms->students[sms->count].id = id;
strcpy(sms->students[sms->count].name, name);
sms->students[sms->count].age = age;
strcpy(sms->students[sms->count].gender, gender);
sms->count++;
printf("Add student successfully!\n");
save_students(sms);
}
void delete_student(StudentManagementSystem *sms) {
int id, i, j;
printf("Enter student ID: ");
scanf("%d", &id);
for (i = 0; i < sms->count; i++) {
if (sms->students[i].id == id) {
for (j = i + 1; j < sms->count; j++) {
sms->students[j - 1] = sms->students[j];
}
sms->count--;
printf("Delete student successfully!\n");
save_students(sms);
return;
}
}
printf("Delete student failed, student not found!\n");
}
void update_student(StudentManagementSystem *sms) {
int id, i;
printf("Enter student ID: ");
scanf("%d", &id);
for (i = 0; i < sms->count; i++) {
if (sms->students[i].id == id) {
printf("Enter student name: ");
scanf("%s", sms->students[i].name);
printf("Enter student age: ");
scanf("%d", &(sms->students[i].age));
printf("Enter student gender: ");
scanf("%s", sms->students[i].gender);
printf("Update student successfully!\n");
save_students(sms);
return;
}
}
printf("Update student failed, student not found!\n");
}
void search_student(StudentManagementSystem *sms) {
int id, i;
printf("Enter student ID: ");
scanf("%d", &id);
for (i = 0; i < sms->count; i++) {
if (sms->students[i].id == id) {
printf("ID: %d, Name: %s, Age: %d, Gender: %s\n", sms->students[i].id, sms->students[i].name, sms->students[i].age, sms->students[i].gender);
return;
}
}
printf("Search student failed, student not found!\n");
}
void sort_students(StudentManagementSystem *sms) {
int i, j;
char key[10];
printf("Enter sort key(id/name/age/gender): ");
scanf("%s", key);
if (strcmp(key, "id") == 0) {
for (i = 0; i < sms->count - 1; i++) {
for (j = i + 1; j < sms->count; j++) {
if (sms->students[i].id > sms->students[j].id) {
Student temp = sms->students[i];
sms->students[i] = sms->students[j];
sms->students[j] = temp;
}
}
}
printf("Sort students by ID successfully!\n");
save_students(sms);
} else if (strcmp(key, "name") == 0) {
for (i = 0; i < sms->count - 1; i++) {
for (j = i + 1; j < sms->count; j++) {
if (strcmp(sms->students[i].name, sms->students[j].name) > 0) {
Student temp = sms->students[i];
sms->students[i] = sms->students[j];
sms->students[j] = temp;
}
}
}
printf("Sort students by name successfully!\n");
save_students(sms);
} else if (strcmp(key, "age") == 0) {
for (i = 0; i < sms->count - 1; i++) {
for (j = i + 1; j < sms->count; j++) {
if (sms->students[i].age > sms->students[j].age) {
Student temp = sms->students[i];
sms->students[i] = sms->students[j];
sms->students[j] = temp;
}
}
}
printf("Sort students by age successfully!\n");
save_students(sms);
} else if (strcmp(key, "gender") == 0) {
for (i = 0; i < sms->count - 1; i++) {
for (j = i + 1; j < sms->count; j++) {
if (strcmp(sms->students[i].gender, sms->students[j].gender) > 0) {
Student temp = sms->students[i];
sms->students[i] = sms->students[j];
sms->students[j] = temp;
}
}
}
printf("Sort students by gender successfully!\n");
save_students(sms);
} else {
printf("Sort students failed, invalid key!\n");
}
}
void print_students(StudentManagementSystem *sms) {
int i;
printf("ID\tName\tAge\tGender\n");
for (i = 0; i < sms->count; i++) {
printf("%d\t%s\t%d\t%s\n", sms->students[i].id, sms->students[i].name, sms->students[i].age, sms->students[i].gender);
}
}
int main() {
StudentManagementSystem sms;
sms.count = 0;
load_students(&sms);
int choice;
while (1) {
printf("==============================\n");
printf("1. Add Student\n");
printf("2. Delete Student\n");
printf("3. Update Student\n");
printf("4. Search Student\n");
printf("5. Sort Students\n");
printf("6. Print Students\n");
printf("0. Exit\n");
printf("==============================\n");
printf("Enter your choice: ");
scanf("%d", &choice);
switch (choice) {
case 1:
add_student(&sms);
break;
case 2:
delete_student(&sms);
break;
case 3:
update_student(&sms);
break;
case 4:
search_student(&sms);
break;
case 5:
sort_students(&sms);
break;
case 6:
print_students(&sms);
break;
case 0:
return 0;
default:
printf("Invalid choice, please try again!\n");
break;
}
}
}
```
该程序使用了两个结构体,分别为 `Student` 和 `StudentManagementSystem`。`Student` 结构体表示学生信息,包括学生 ID、姓名、年龄和性别。`StudentManagementSystem` 结构体表示学生信息管理系统,包括对学生信息的输入、输出、插入、删除、修改、查找和排序等基本功能,以及使用文件作为信息的外部存储形式。
在程序运行过程中,用户可以根据菜单选择对学生信息进行操作。例如,用户可以选择添加学生信息、删除学生信息、修改学生信息、查找学生信息、排序学生信息或打印学生信息。在用户进行操作后,程序会自动将学生信息保存到文件中,以便下次运行程序时读取。