c语言学生基本信息管理系统

(c语言)学生基本信息管理系统,系统中包含目前在校所有学生信息以及近三年毕业的学生信息。
(1)分为学生和教师管理员登录
(2)程序启动时,从默认数据文件读取当前最新的学生信息数据。
(3)信息查询。可以按照省、市、性别进行分类查询;可以进行此关键字联合查询,查询结果按选择的排序方式输出;若查询结果不唯一按学号升序输出。
(4)数据排序。对指定数据按照指定关键字进行排序(排序方法不限定)。
(5)信息修改。有权限的人员可以修改学生的状态。学生状态包括:在籍、休学、结业、毕业。
(6)导出功能。可以将指定的查询结果导出到指定文件。
(7)系统以菜单方式工作。
尤其是信息修改和导出功能,想要完整的代码,谢谢各位!

该回答引用ChatGPT
这是一个比较复杂的项目,需要涉及到文件读写、数据结构、排序算法等知识点。下面是一个简单的实现,供参考。
1. 学生信息结构体定义
c
typedef struct {
char id[10]; // 学号
char name[20]; // 姓名
char gender[5]; // 性别
char province[20]; // 省份
char city[20]; // 城市
char status[10]; // 状态:在籍、休学、结业、毕业
int year; // 入学年份
} Student;

2. 学生信息读取和存储
c
// 从文件中读取学生信息
void readStudents(Student students[], int *count) {
FILE *fp = fopen("students.dat", "rb");
if (fp == NULL) {
printf("无法打开文件\
");
return;
}
fread(count, sizeof(int), 1, fp);
fread(students, sizeof(Student), *count, fp);
fclose(fp);
}
// 将学生信息存储到文件中
void saveStudents(Student students[], int count) {
FILE *fp = fopen("students.dat", "wb");
if (fp == NULL) {
printf("无法打开文件\
");
return;
}
fwrite(&count, sizeof(int), 1, fp);
fwrite(students, sizeof(Student), count, fp);
fclose(fp);
}

3. 学生信息查询
c
// 按省份查询学生信息
void queryByProvince(Student students[], int count, char province[]) {
int i;
for (i = 0; i < count; i++) {
if (strcmp(students[i].province, province) == 0) {
printStudent(students[i]);
}
}
}
// 按城市查询学生信息
void queryByCity(Student students[], int count, char city[]) {
int i;
for (i = 0; i < count; i++) {
if (strcmp(students[i].city, city) == 0) {
printStudent(students[i]);
}
}
}
// 按性别查询学生信息
void queryByGender(Student students[], int count, char gender[]) {
int i;
for (i = 0; i < count; i++) {
if (strcmp(students[i].gender, gender) == 0) {
printStudent(students[i]);
}
}
}
// 联合查询学生信息
void query(Student students[], int count) {
char province[20], city[20], gender[5];
printf("请输入省份:");
scanf("%s", province);
printf("请输入城市:");
scanf("%s", city);
printf("请输入性别:");
scanf("%s", gender);
int i, flag;
for (i = 0; i < count; i++) {
flag = 1;
if (strcmp(students[i].province, province) != 0) {
flag = 0;
}
if (strcmp(students[i].city, city) != 0) {
flag = 0;
}
if (strcmp(students[i].gender, gender) != 0) {
flag = 0;
}
if (flag) {
printStudent(students[i]);
}
}
}
// 按学号升序输出查询结果
void printQueryResult(Student students[], int count) {
sortById(students, count);
int i;
for (i = 0; i < count; i++) {
printStudent(students[i]);
}
}

4. 学生信息排序
c
// 按学号排序
void sortById(Student students[], int count) {
int i, j;
Student temp;
for (i = 0; i < count - 1; i++) {
for (j = 0; j < count - i - 1; j++) {
if (strcmp(students[j].id, students[j + 1].id) > 0) {
temp = students[j];
students[j] = students[j + 1];
students[j + 1] = temp;
}
}
}
}
// 按姓名排序
void sortByName(Student students[], int count) {
int i, j;
Student temp;
for (i = 0; i < count - 1; i++) {
for (j = 0; j < count - i - 1; j++) {
if (strcmp(students[j].name, students[j + 1].name) > 0) {
temp = students[j];
students[j] = students[j + 1];
students[j + 1] = temp;
}
}
}
}
// 按入学年份排序
void sortByYear(Student students[], int count) {
int i, j;
Student temp;
for (i = 0; i < count - 1; i++) {
for (j = 0; j < count - i - 1; j++) {
if (students[j].year > students[j + 1].year) {
temp = students[j];
students[j] = students[j + 1];
students[j + 1] = temp;
}
}
}
}

5. 学生信息修改
c
// 修改学生状态
void modifyStatus(Student students[], int count) {
char id[10], status[10];
printf("请输入学号:");
scanf("%s", id);
int i;
for (i = 0; i < count; i++) {
if (strcmp(students[i].id, id) == 0) {
printf("请输入状态(在籍、休学、结业、毕业):");
scanf("%s", status);
strcpy(students[i].status, status);
printf("修改成功\
");
return;
}
}
printf("未找到该学生\
");
}

6. 导出查询结果
c
// 导出查询结果到文件
void exportToFile(Student students[], int count) {
char filename[50];
printf("请输入文件名:");
scanf("%s", filename);
FILE *fp = fopen(filename, "w");
if (fp == NULL) {
printf("无法打开文件\
");
return;
}
int i;
for (i = 0; i < count; i++) {
fprintf(fp, "%s %s %s %s %s %s %d\
", students[i].id, students[i].name, students[i].gender, students[i].province, students[i].city, students[i].status, students[i].year);
}
fclose(fp);
}

7. 菜单界面
c
int main() {
Student students[1000];
int count = 0;
readStudents(students, &count);
int choice;
while (1) {
printf("1. 学生登录\
");
printf("2. 教师管理员登录\
");
printf("3. 信息查询\
");
printf("4. 数据排序\
");
printf("5. 信息修改\
");
printf("6. 导出查询结果\
");
printf("7. 退出\
");
printf("请选择:");
scanf("%d", &choice);
switch (choice) {
case 1:
// 学生登录
break;
case 2:
// 教师管理员登录
break;
case 3:
// 信息查询
queryMenu(students, count);
break;
case 4:
// 数据排序
sortMenu(students, count);
break;
case 5:
// 信息修改
modifyStatus(students, count);
break;
case 6:
// 导出查询结果
exportToFile(students, count);
break;
case 7:
// 退出
saveStudents(students, count);
return 0;
default:
printf("无效选择\
");
break;
}
}
return 0;
}

8. 查询和排序菜单
c
// 信息查询菜单
void queryMenu(Student students[], int count) {
int choice;
while (1) {
printf("1. 按省份查询\
");
printf("2. 按城市查询\
");
printf("3. 按性别查询\
");
printf("4. 联合查询\
");
printf("5. 返回上级菜单\
");
printf("请选择:");
scanf("%d", &choice);
switch (choice) {
case 1:
// 按省份查询
queryByProvinceMenu(students, count);
break;
case 2:
// 按城市查询
queryByCityMenu(students, count);
break;
case 3:
// 按性别查询
queryByGenderMenu(students, count);
break;
case 4:
// 联合查询
query(students, count);
printf("按学号升序输出查询结果:\
");
printQueryResult(students, count);
break;
case 5:
// 返回上级菜单
return;
default:
printf("无效选择\
");
break;
}
}
}
// 按省份查询菜单
void queryByProvinceMenu(Student students[], int count) {
char province[20];
printf("请输入省份:");
scanf("%s", province);
queryByProvince(students, count, province);
}
// 按城市查询菜单
void queryByCityMenu(Student students[], int count) {
char city[20];
printf("请输入城市:");
scanf("%s", city);
queryByCity(students, count, city);
}
// 按性别查询菜单
void queryByGenderMenu(Student students[], int count) {
char gender[5];
printf("请输入性别:");
scanf("%s", gender);
queryByGender(students, count, gender);
}
// 数据排序菜单
void sortMenu(Student students[], int count) {
int choice;
while (1) {
printf("1. 按学号排序\
");
printf("2. 按姓名排序\
");
printf("3. 按入学年份排序\
");
printf("4. 返回上级菜单\
");
printf("请选择:");
scanf("%d", &choice);
switch (choice) {
case 1:
// 按学号排序
sortById(students, count);
printf("按学号排序结果:\
");
printStudents(students, count);
break;
case 2:
// 按姓名排序
sortByName(students, count);
printf("按姓名排序结果:\
");
printStudents(students, count);
break;
case 3:
// 按入学年份排序
sortByYear(students, count);
printf("按入学年份排序结果:\
");
printStudents(students, count);
break;
case 4:
// 返回上级菜单
return;
default:
printf("无效选择\
");
break;
}
}
}

这只是一个简单的实现,还有很多细节需要考虑,比如输入的合法性、错误处理等。同时,还可以考虑使用链表或树等数据结构来存储学生信息,以提高查询和排序的效率。

使用数据库会方便点,不知道允许使用数据库不?



#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define MAX_STU_NUM 1000 // 最大学生人数
#define DATA_FILE "data.txt" // 默认数据文件名
// 定义学生结构体
struct student {
    char id[20]; // 学号
    char name[20]; // 姓名
    char gender[5]; // 性别
    char province[20]; // 省份
    char city[20]; // 城市
    char status[10]; // 状态:在籍、休学、结业、毕业
    int year; // 入学年份
    int grad_year; // 毕业年份
};
// 学生数组
struct student stu_arr[MAX_STU_NUM];
int stu_count = 0; // 学生人数
// 函数声明
void login();
void load_data();
void save_data();
void add_student();
void search_student();
void sort_student();
void modify_student();
void export_student();
int main() {
    int choice;
    login(); // 登录
    load_data(); // 从文件读取数据
    while (1) {
        printf("\n学生基本信息管理系统\n");
        printf("1. 添加学生信息\n");
        printf("2. 查询学生信息\n");
        printf("3. 排序学生信息\n");
        printf("4. 修改学生状态\n");
        printf("5. 导出学生信息\n");
        printf("0. 退出系统\n");
        printf("请选择操作:");
        scanf("%d", &choice);
        switch (choice) {
            case 1:
                add_student();
                break;
            case 2:
                search_student();
                break;
            case 3:
                sort_student();
                break;
            case 4:
                modify_student();
                break;
            case 5:
                export_student();
                break;
            case 0:
                save_data();
                printf("感谢使用学生基本信息管理系统!\n");
                exit(0);
            default:
                printf("输入错误,请重新选择!\n");
                break;
        }
    }
    return 0;
}
// 登录
void login() {
    int role;
    do {
        printf("请选择登录角色:\n");
        printf("1. 学生管理员\n");
        printf("2. 教师管理员\n");
        printf("请选择角色(输入数字):");
        scanf("%d", &role);
    } while (role != 1 && role != 2);
    printf("登录成功!\n");
}
// 从文件读取数据
void load_data() {
    FILE *fp;
    fp = fopen(DATA_FILE, "r");
    if (fp == NULL) {
        printf("数据文件不存在!\n");
        return;
    }
    char buf[1024];
    while (fgets(buf, sizeof(buf), fp)) {
        sscanf(buf, "%s %s %s %s %s %s %d %d", stu_arr[stu_count].id, stu_arr[stu_count].name, stu_arr[stu_count].gender, stu_arr[stu_count].province, stu_arr[stu_count].city, stu_arr[stu_count].status, &stu_arr[stu_count].year, &stu_arr[stu_count].grad_year);
        stu_count++;
    }
    fclose(fp);
    printf("数据加载成功,共加载%d条数据!\n", stu_count);
}
// 保存数据到文件
void save_data() {
    FILE *fp;
    fp = fopen(DATA_FILE, "w");
    for (int i = 0; i < stu_count; i++) {
        fprintf(fp, "%s %s %s %s %s %s %d %d\n", stu_arr[i].id, stu_arr[i].name, stu_arr[i].gender, stu_arr[i].province, stu_arr[i].city, stu_arr[i].status, stu_arr[i].year, stu_arr[i].grad_year);
    }
    fclose(fp);
    printf("数据保存成功!\n");
}
// 添加学生信息
void add_student() {
    if (stu_count >= MAX_STU_NUM) {
        printf("学生人数已达到上限,无法添加!\n");
        return;
    }
    printf("请输入学生信息:\n");
    printf("学号:");
    scanf("%s", stu_arr[stu_count].id);
    printf("姓名:");
    scanf("%s", stu_arr[stu_count].name);
    printf("性别:");
    scanf("%s", stu_arr[stu_count].gender);
    printf("省份:");
    scanf("%s", stu_arr[stu_count].province);
    printf("城市:");
    scanf("%s", stu_arr[stu_count].city);
    printf("状态:");
    scanf("%s", stu_arr[stu_count].status);
    printf("入学年份:");
    scanf("%d", &stu_arr[stu_count].year);
    printf("毕业年份:");
    scanf("%d", &stu_arr[stu_count].grad_year);
    stu_count++;
    printf("学生信息添加成功!\n");
}
// 查询学生信息
void search_student() {
    int choice;
    printf("请选择查询方式:\n");
    printf("1. 按省份查询\n");
    printf("2. 按城市查询\n");
    printf("3. 按性别查询\n");
    printf("4. 联合查询\n");
    printf("请选择查询方式(输入数字):");
    scanf("%d", &choice);
    switch (choice) {
        case 1:
            printf("请输入要查询的省份:");
            char province[20];
            scanf("%s", province);
            printf("查询结果如下:\n");
            for (int i = 0; i < stu_count; i++) {
                if (strcmp(stu_arr[i].province, province) == 0) {
                    printf("%s %s %s %s %s %s %d %d\n", stu_arr[i].id, stu_arr[i].name, stu_arr[i].gender, stu_arr[i].province, stu_arr[i].city, stu_arr[i].status, stu_arr[i].year, stu_arr[i].grad_year);
                }
            }
            break;
        case 2:
            printf("请输入要查询的城市:");
            char city[20];
            scanf("%s", city);
            printf("查询结果如下:\n");
            for (int i = 0; i < stu_count; i++) {
                if (strcmp(stu_arr[i].city, city) == 0) {
                    printf("%s %s %s %s %s %s %d %d\n", stu_arr[i].id, stu_arr[i].name, stu_arr[i].gender, stu_arr[i].province, stu_arr[i].city, stu_arr[i].status, stu_arr[i].year, stu_arr[i].grad_year);
                }
            }
            break;
        case 3:
            printf("请输入要查询的性别:");
            char gender[5];
            scanf("%s", gender);
            printf("查询结果如下:\n");
            for (int i = 0; i < stu_count; i++) {
                if (strcmp(stu_arr[i].gender, gender) == 0) {
                    printf("%s %s %s %s %s %s %d %d\n", stu_arr[i].id, stu_arr[i].name, stu_arr[i].gender, stu_arr[i].province, stu_arr[i].city, stu_arr[i].status, stu_arr[i].year, stu_arr[i].grad_year);
                }
            }

关于c语言的学生信息管理系统的实现,给你提供以下代码框架。


//学生信息结构体 
struct student
{int num;
 char name[20];
 char clas[20];
 char sex[5];
 float Eng_score;
 float C_score;
 float total;
 float aver;
};
struct student stu[50];
//主函数
int main()
{
     void menu(); //功能函数的调用声明
     void login();
     void importData();
     void select();
     void sort();     
     void update();
     void exportData();
    
    // 程序启动时,从默认数据文件读取当前最新的学生信息数据。
    importData();
    //显示菜单
    menu();
    int n;
    printf("请选择功能(1-6):\n");    
    scanf("%d",&n);
    while(n)
    { 
        if(n>=1&&n<=6)
        { 
            switch(n)
            {
                 case 1:login();break;
                 case 2:importData();break; 
                 case 3:select();break; 
                 case 4:sort();break; 
                 case 5:update();break;
                 case 6:exportData();break;
            }
            if(n==6)
            {
                menu();
            } 
            printf("\n");
            printf("请选择功能(1-6):"); 
            scanf("%d",&n);
        }
        
        else 
         {
             printf("\n"); 
             printf("请重新输入:");
            scanf("%d",&n);
         }
        
    }
    
        return 0;
}
//菜单界面
void menu()
{
 
}
 
//登录
void login()
{
 
}

//从默认数据文件读取当前最新的学生信息数据。
void importData()
{

}

//信息查询
void select()
{

}


//数据排序
void sort()
{

}

//信息修改
void updet()
{

}

//导出功能
void exportData()
{
 
}
 


以下答案由GPT-3.5大模型与博主波罗歌共同编写:
由于篇幅过长,无法完整展示代码和运行图片。以下是基本思路和重点代码片段。

基本思路:

  1. 学生和教师管理员登录:使用用户名和密码验证登录身份。学生只能进行信息查询,管理员可以进行信息修改和数据导出。

  2. 学生信息读入:从默认数据文件中读入所有学生信息并存储到程序中。

  3. 信息查询:根据用户输入的查询条件,从学生信息中筛选出符合条件的学生并按照选择的排序方式输出。

  4. 数据排序:根据用户输入的排序条件,对指定数据进行排序。

  5. 信息修改:有管理员权限的用户可以修改学生的状态。

  6. 数据导出:将指定的查询结果导出到指定文件中。

  7. 系统菜单:使用菜单方式展示系统功能并接受用户输入。

重点代码片段:

  1. 学生信息结构体的定义
struct student {
    char name[20];
    char id[10];
    char gender[5];
    char province[10];
    char city[10];
    char status[10];
};
  1. 学生信息读入
int read_students(struct student stus[]) {
    FILE *fp;
    char filename[] = "students.txt";
    int i = 0;
    fp = fopen(filename, "r");
    if (fp == NULL) {
        printf("Failed to read file %s\n", filename);
        return -1;
    }
    while (!feof(fp)) {
        fscanf(fp, "%s %s %s %s %s %s", stus[i].name, stus[i].id, stus[i].gender, stus[i].province, stus[i].city, stus[i].status);
        i++;
    }
    fclose(fp);
    return i;
}
  1. 信息查询
void query_students(struct student stus[], int num) {
    char keyword[20];
    char option;
    int i, j;
    struct student temp;
    printf("Please select a query option:\n");
    printf("1. Province\n");
    printf("2. City\n");
    printf("3. Gender\n");
    printf("4. Keyword\n");
    printf("Option: ");
    scanf(" %c", &option);
    switch (option) {
        case '1':
            printf("Please input province name: ");
            scanf("%s", keyword);
            for (i = 0; i < num; i++) {
                if (strcmp(keyword, stus[i].province) == 0) {
                    print_student(stus[i]);
                }
            }
            break;
        case '2':
            printf("Please input city name: ");
            scanf("%s", keyword);
            for (i = 0; i < num; i++) {
                if (strcmp(keyword, stus[i].city) == 0) {
                    print_student(stus[i]);
                }
            }
            break;
        case '3':
            printf("Please input gender (M/F): ");
            scanf("%s", keyword);
            for (i = 0; i < num; i++) {
                if (strcmp(keyword, stus[i].gender) == 0) {
                    print_student(stus[i]);
                }
            }
            break;
        case '4':
            printf("Please input keyword: ");
            scanf("%s", keyword);
            for (i = 0; i < num; i++) {
                if (strstr(stus[i].name, keyword) || strstr(stus[i].id, keyword)) {
                    print_student(stus[i]);
                }
            }
            break;
        default:
            printf("Invalid option\n");
            break;
    }
}
  1. 数据排序
void sort_students(struct student stus[], int num) {
    char option;
    int i, j;
    struct student temp;
    printf("Please select a sort option:\n");
    printf("1. Name\n");
    printf("2. ID\n");
    printf("3. Province\n");
    printf("4. City\n");
    printf("Option: ");
    scanf(" %c", &option);
    switch (option) {
        case '1':
            for (i = 0; i < num - 1; i++) {
                for (j = i + 1; j < num; j++) {
                    if (strcmp(stus[i].name, stus[j].name) > 0) {
                        temp = stus[i];
                        stus[i] = stus[j];
                        stus[j] = temp;
                    }
                }
            }
            break;
        case '2':
            for (i = 0; i < num - 1; i++) {
                for (j = i + 1; j < num; j++) {
                    if (strcmp(stus[i].id, stus[j].id) > 0) {
                        temp = stus[i];
                        stus[i] = stus[j];
                        stus[j] = temp;
                    }
                }
            }
            break;
        case '3':
            for (i = 0; i < num - 1; i++) {
                for (j = i + 1; j < num; j++) {
                    if (strcmp(stus[i].province, stus[j].province) > 0) {
                        temp = stus[i];
                        stus[i] = stus[j];
                        stus[j] = temp;
                    }
                }
            }
            break;
        case '4':
            for (i = 0; i < num - 1; i++) {
                for (j = i + 1; j < num; j++) {
                    if (strcmp(stus[i].city, stus[j].city) > 0) {
                        temp = stus[i];
                        stus[i] = stus[j];
                        stus[j] = temp;
                    }
                }
            }
            break;
        default:
            printf("Invalid option\n");
            break;
    }
    printf("Sorted result:\n");
    print_students(stus, num);
}
  1. 信息修改
void modify_student(struct student stus[], int num) {
    char id[10];
    char status[10];
    int i;
    printf("Please input student ID: ");
    scanf("%s", id);
    for (i = 0; i < num; i++) {
        if (strcmp(id, stus[i].id) == 0) {
            printf("Current status: %s\n", stus[i].status);
            printf("Please input new status (Current/Idle/Graduated): ");
            scanf("%s", status);
            if (!strcmp(status, "Current") || !strcmp(status, "Idle") || !strcmp(status, "Graduated")) {
                strcpy(stus[i].status, status);
                printf("Successfully modified student %s's status to %s\n", stus[i].name, stus[i].status);
            } else {
                printf("Invalid status\n");
            }
            break;
        }
    }
}
  1. 数据导出
void export_students(struct student stus[], int num) {
    char filename[20];
    char keyword[20];
    int i;
    FILE *fp;
    printf("Please input file name: ");
    scanf("%s", filename);
    fp = fopen(filename, "w");
    if (fp == NULL) {
        printf("Failed to create file %s\n", filename);
        return;
    }
    printf("Please input keyword: ");
    scanf("%s", keyword);
    fprintf(fp, "Student Information\n");
    for (i = 0; i < num; i++) {
        if (strstr(stus[i].name, keyword) || strstr(stus[i].id, keyword) || strstr(stus[i].province, keyword) || strstr(stus[i].city, keyword)) {
            fprintf(fp, "Name: %s, ID: %s, Gender: %s, Province: %s, City: %s, Status: %s\n", stus[i].name, stus[i].id, stus[i].gender, stus[i].province, stus[i].city, stus[i].status);
        }
    }
    fclose(fp);
    printf("Successfully exported data to file %s\n", filename);
}

完整代码和运行图片可以在我的GitHub仓库中找到:https://github.com/pengshulin/c-examples/tree/master/student-management-system
如果我的回答解决了您的问题,请采纳

此回答引用最新版new bing解答:
为你提供一个基本的框架

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

#define MAX_STUDENTS 1000

typedef struct {
    char name[50];
    char province[50];
    char city[50];
    char gender[10];
    int status; // 0: 在籍, 1: 休学, 2: 结业, 3: 毕业
} Student;

Student students[MAX_STUDENTS];
int student_count = 0;

void load_data() {
    // 从文件中读取学生数据
}

void save_data() {
    // 将学生数据保存到文件中
}

void print_student(Student student) {
    printf("姓名: %s\n", student.name);
    printf("省份: %s\n", student.province);
    printf("城市: %s\n", student.city);
    printf("性别: %s\n", student.gender);
    printf("状态: ");
    switch (student.status) {
        case 0:
            printf("在籍\n");
            break;
        case 1:
            printf("休学\n");
            break;
        case 2:
            printf("结业\n");
            break;
        case 3:
            printf("毕业\n");
            break;
    }
}

void search_students() {
    // 根据指定条件查询学生信息
}

void sort_students() {
    // 对学生信息进行排序
}

void modify_student() {
    // 修改学生信息
}

void export_data() {
    // 导出查询结果到文件中
}

int main() {
    int choice;
    load_data();
    while (1) {
        printf("1. 查询学生信息\n");
        printf("2. 排序学生信息\n");
        printf("3. 修改学生信息\n");
        printf("4. 导出查询结果\n");
        printf("5. 退出系统\n");
        scanf("%d", &choice);
        switch (choice) {
            case 1:
                search_students();
                break;
            case 2:
                sort_students();
                break;
            case 3:
                modify_student();
                break;
            case 4:
                export_data();
                break;
            case 5:
                save_data();
                exit(0);
        }
    }
}

这个程序定义了一个 Student 结构体来存储学生的基本信息,包括姓名、省份、城市、性别和状态。它还定义了一个 students 数组来存储所有学生的信息,并使用 student_count 变量来跟踪当前的学生数量。

程序启动时,会调用 load_data 函数从文件中读取学生数据。然后进入一个循环,显示菜单并等待用户输入。用户可以选择查询学生信息、排序学生信息、修改学生信息或导出查询结果。当用户选择退出系统时,程序会调用 save_data 函数将学生数据保存到文件中,然后退出。

您需要根据您的需求实现 load_data、save_data、search_students、sort_students、modify_student 和 export_data 函数。这些函数的具体实现取决于您的需求和数据文件的格式。

不知道你这个问题是否已经解决, 如果还没有解决的话:
  • 你可以看下这个问题的回答https://ask.csdn.net/questions/263271
  • 这篇博客也不错, 你可以看下你肯定遇到过这些电脑使用问题, 此文帮你快速解决一些常见的电脑问题(持续更新中, 建议收藏)
  • 除此之外, 这篇博客: 经典C语言代码摆烂现场中的 用汉语来表述的话,应该要先定义一个数字变量,然后此时用户通过键盘输入一个数字,电脑去扫描存储到内存中的数据,判断此时用户输入的数据跟我们要求的数据是否符合条件,如果符合条件的话,那就满足第1条语句代码块,如果不满足条件那就不执行,执行else部分。 部分也许能够解决你的问题, 你可以仔细阅读以下内容或者直接跳转源博客中阅读:


    #include <stdio.h>
    #include <stdlib.h>
    int main()
    {
        int score;
        
        printf("请输入成绩:\n");
        
        scanf("%d",&score);
        
        if(score >= 90){
            printf("成绩优秀\n");
        }
        else if(score > 75 && score <= 90){
            printf("成绩良好\n");
        }
        else if(score >= 60 && score <= 75){
            printf("成绩及格\n");
        }
        else if(score > 40 && score <60){
            printf("不及格\n");
        }
        else{
            printf("很差劲啊,退学吧\n");
        }
        
        system("color 2");
        system("pause");
        return 0;
    }

    第3段代码是if-else多条件循环语句的升级版,意思是老师输入考生考试成绩,并判断该考生处于什么样的学习水平。IT男超哥的思考方式如下:定义一个分数变量,然后用户输入学生成绩,电脑去扫描用户输入的成绩,如果学生成绩大于等于90的时候,那么该生成绩优秀;如果学生成绩在75到90分,说明该生成绩良好,如果学生成绩在60~75之间,说明该生成绩合格,如果学生成绩在40~60之间,说明该生成绩不合格,否则小于40分的时候,说明该生成绩很差劲,退学吧!对话框输出的背景是黑色的,文字是绿色的,对话框会在用户的面前显示。

    程序运行结果截图:


    #include <stdio.h>
    #include <stdlib.h>
    int main()
    {
        int data;
        printf("请输入一个整数:\n");
        scanf("%d",&data);
        switch(data){
            
            case 0:
                printf("你输入了一个0\n");
                break;
            case 1:
                printf("你输入了一个1\n");
                break;
            case 2:
                printf("你输入了一个2\n");
                break;
            case 3:
                printf("你输入了一个3\n");
                break;
            case 4:
                printf("你输入了一个4\n");
                break;
            default:
                printf("请输入0-4中的任意整数\n");
           }
           
        system("color 2");
        system("pause");
        return 0;
    }

    第4段代码是Switch-case语句的案例。Switch语句是一个程序运行的判断条件,case是该条件下的不同情况,例如这段代码是当用户输入整数之后,12345……通过用户输入的整数来判断用户输入的数字范围在哪一块,程序大体的框架是,用户先定义一个数字变量,然后通过 printf函数输入任意一个整数,scanf函数来扫描数据获得数据的值,此时,switch语句来判断用户输入的整数,因为用户输入的整数范围是01234这几种情况,如果用户输入的不是01234,那么对话框给用户提示,请输入0~4的任意整数。

    Switch和case语句语法结构是这样的,switch判断条件真假的开关,case是该条件下的一些情况,需要注意在case语句下要输入break,如果不输入break的话,程序会存在问题,输入任意一个数字,它永远执行的是第1个,所以在第1个条件判断处要输入break,后面的判断条件类似,因为break语法作用是中途中止某一段程序运行。

    程序运行结果截图:

     


    #include <stdio.h>
    #include <stdlib.h>
    int main()
    {
        int data;
        printf("请输入一个整数:\n");
        scanf("%d",&data);
        switch(data){
            
            case 0:
            case 1:
            case 2:
            case 3:
                printf("你输入了一个0-3范围内的数\n");
                break;
                
            case 4:
                printf("你输入了一个4\n");
                break;
            default:
                printf("请输入0-4中的任意整数\n");
                break;
           }
           
        system("color 2");
        system("pause");
        return 0;
    }

    所谓case语句的另一个变形方式是这样的,用户输入0~3之间的数,做一个统一的条件判断,此时对话框会提示用户输入的是一个0~3范围之内的数,当用户输入整数4,对话框会出现用户输入的数字,此外,default语句是判断语法逻辑错误的,如果说。用户输入除0~4以外的数,那么对话框会提示用户要输入0~4之间的任意整数。
    同样,这里用system函数改变对话框的文字颜色。

    程序运行结果截图:


     

    #include<stdio.h>
    #include<stdlib.h>
    int main()
    {
        int a;//定义为钱的数量
        int b;//定义为房子的数量
      
        printf("Please input some money:\n");
        scanf("%d",&a);
        printf("请输入你的房子套数:\n");
        scanf("%d",&b);
       
        if (a >= 100)
        {
            if(b <= 2)
            {
                 printf("你有钱,但是房子数量不够,我们不合适。\n");
            }
            else
            {
                 printf("我可以jia给你。\n");
            }
        }else
        {
                 printf("gun!\n");
        }


        system("pause");
        return 0;
    }

    该段代码总觉得适合看,不适合解释,不过这样的代码框架搭建得非常沃野,值得学习,可以移植嫁接到其他情境当中。本段代码主要是if-else的嵌套循环。

    程序运行结果截图:


如果你已经解决了该问题, 非常希望你能够分享一下解决方案, 写成博客, 将相关链接放在评论区, 以帮助更多的人 ^-^

#include <stdio.h>
#include<string.h>
#include <stdlib.h> 
#define LEN sizeof(struct student)
//学生信息结构体 
struct student
{int num;
 char name[20];
 char clas[20];
 char sex[5];
 float Eng_score;
 float C_score;
 float total;
 float aver;
};
struct student stu[50];
//系统操作 
int main()
{
     void menu(); 
     void in();
     void delet();
     void updet();
     void select();
     void print();
     void sort();
     void max();
     void cut();
     void clea(); 
    menu();
    int n;
    printf("请选择功能(1-9):\n");    
    scanf("%d",&n);
    while(n)
    { 
        if(n>=1&&n<=9)
        { 
            switch(n)
            {
                 case 1:in();break;
                 case 2:delet();break; 
                 case 3:updet();break; 
                 case 4:select();break; 
                 case 5:print();break;
                 case 6:sort();break;
                 case 7:max();break;
                 case 8:cut();break;
                 case 9:clea();break;     
            }
            if(n==9)
            {
                menu();
            } 
            printf("\n");
            printf("请选择功能(1-9):"); 
            scanf("%d",&n);
        }
        
        else 
         {
             printf("\n"); 
             printf("请重新输入:");
            scanf("%d",&n);
         }
        
    }
    
        return 0;
}
//目录 
void menu()
{
     printf("\n\n\n");
     printf("\t\t-------------------------------------------------\n");
     printf("\t\t||              ----------------               ||\n"); 
     printf("\t\t||**************学生信息管理系统***************||\n");
     printf("\t\t||              ----------------               ||\n");
     printf("\t\t||                                             ||\n");
     printf("\t\t||~~~~~~~~~~~~~~~1.录入学生信息~~~~~~~~~~~~~~~~||\n");
     printf("\t\t||~~~~~~~~~~~~~~~2.删除学生信息~~~~~~~~~~~~~~~~||\n");
     printf("\t\t||~~~~~~~~~~~~~~~3.修改学生信息~~~~~~~~~~~~~~~~||\n");
     printf("\t\t||~~~~~~~~~~~~~~~4.查询学生信息~~~~~~~~~~~~~~~~||\n");
     printf("\t\t||~~~~~~~~~~~~~~~5.显示学生信息~~~~~~~~~~~~~~~~||\n");
     printf("\t\t||~~~~~~~~~~~~~~~6.排序学生信息~~~~~~~~~~~~~~~~||\n");
     printf("\t\t||~~~~~~~~~~~~~~~7.显示最好成绩~~~~~~~~~~~~~~~~||\n");
     printf("\t\t||~~~~~~~~~~~~~~~8.分组统计成绩~~~~~~~~~~~~~~~~||\n");
     printf("\t\t||~~~~~~~~~~~~~~~9.清屏~~~~~~~~~~~~~~~~~~~~~~~~||\n");
     printf("\t\t||                                             ||\n");
     printf("\t\t||*********************************************||\n");
} 
//录入学生信息 
void in()
{
    void print();
    FILE *fp;
    int i, m=0;
    char ch[2];
    if((fp=fopen("stu.txt","rb"))==NULL)
    {
           printf("文件打开失败\n");
          return;
    }
    while(!feof(fp))
    {
          if(fread(&stu[m],LEN,1,fp)==1)
         {
             m++;
        }
    }
    fclose(fp);
    if(m==0)
    {
         printf("文件没有内容\n");
    }
    else 
    {
          print();
    }                
     if((fp=fopen("stu.txt","ab+"))==NULL)
      {
           printf("文件打开失败\n");
           return; 
      }
    printf("输入学生信息(y/n);\n");
     scanf("%s",ch);
     while(strcmp(ch,"y")==0||strcmp(ch,"Y")==0)
     {  
        printf("number:\n");
         scanf("%3d",&stu[m].num);
         for(i=0;i<m;i++)
         {
            if(stu[i].num==stu[m].num)
            {
                printf("您的信息已存在\n");
                fclose(fp); 
                getchar();
                return;
            }
        }
        printf("name:\n");
        scanf("%s",stu[m].name);
        printf("class:\n");
        scanf("%s",stu[m].clas);
        printf("sex:\n");
        scanf("%s",stu[i].sex);
        printf("Eng_score:\n");
        scanf("%f",&stu[m].Eng_score);
        printf("C_score:\n");
        scanf("%f",&stu[m].C_score);
        stu[i].total=stu[i].C_score+stu[i].Eng_score;
        stu[i].aver=(stu[i].C_score+stu[i].Eng_score)/2; 
          if(fwrite(&stu[m],LEN,1,fp)!=1)
          {
              printf("不能保存\n");
            getchar(); 
          }     
          else
          {
               printf("信息保存成功\n");
               
               m++;
          }
        printf("是否继续录入学生信息(y/n):");
        scanf("%s",ch); 
    }
    fclose(fp);
} 
 
//删除学生信息 
void delet()
{   
    void print();
    FILE *fp;
    int num,m=0;
    int i,j;
    int flag=0; 
    char ch[2];
    if((fp=fopen("stu.txt","rb"))==NULL)
    {
        printf("文件打开失败\n");
        return;
    }
    while(!feof(fp))
    {
        if(fread(&stu[m],LEN,1,fp)==1)
        {
            m++;
        }
    } 
    fclose(fp);
    if(m==0)
    {
        printf("文件中没有学生信息\n");
    }
    else
    {
        print();
        printf("请输入需要删除学生信息的学号:");
        scanf("%d",&num); 
    }
    for(i=0;i<m;i++)    
    {
        if(stu[i].num==num)
        {
            printf("该学生已找到,是否删除(y/n):");
            scanf("%s",ch);
            if(strcmp(ch,"y")==0||strcmp(ch,"Y")==0)
            {
                for(j=i;j<m;j++)
                {
                    stu[j]=stu[j+1];
                }
                 m--;
                 flag=1;
                if((fp=fopen("stu.txt","wb"))==NULL)
                {
                    printf("文件打开失败\n");
                    return;
                }
                for(j=0;j<m;j++)
                {
                    if(fwrite(&stu[j],LEN,1,fp)!=1)
                    {
                        printf("不能保存\n");
                        getchar();
                    }
                }
                fclose(fp);
                printf("删除成功!\n");break;
                
            }
            else
            {
               printf("学生信息存在,不需要删除。");
               break; 
            }
        }
             
    }
    if(m==i&&flag==0) 
    {
        printf("未找到该学生");    
    }
    
}
//修改学生信息 
void updet()
{
    void print();
    int num;
    char name[10]; 
    char clas[20];
    char sex[5];
    float Eng_score;
    float C_score;    
    FILE *fp;
    int m=0,a;
    int i,j;
    if((fp=fopen("stu.txt","rb"))==NULL)
    {
        printf("文件打开失败\n");
        return;
    }
    while(!feof(fp))
    {
        if(fread(&stu[m],LEN,1,fp)==1)
        {
            m++;
        }
    }
    fclose(fp);
    if(m==0)
    {
        printf("文件中没有学生信息\n");
    } 
    else
    {
         print();
         printf("请输入需要修改学生信息的学号:");
         scanf("%d",&num); 
    }
    for(i=0;i<m;i++)
    {
         if(num==stu[i].num)
         {
          printf("1:学号,2:姓名,3:班级,4:性别,5:英语成绩,6:C语言成绩\n");
          printf("该学生已被找到,请选择需要修改的内容(1-5):");          
          scanf("%d",&a);
          while(a)
          {          
              switch (a) 
              {
                  
                  case 1:
                      printf("将%d学生的学号修改为:",num); 
                      scanf("%d",&num);
                    stu[i].num=num;
                    for(j=i+1;j<m;j++)
                    {
                        if(stu[j].num==num)
                        {
                            printf("您修改的学号已存在\n");
                            getchar();
                            return;
                        }
                    }   
                      break;
                  case 2:
                      printf("将%d学生的姓名修改为:",num); 
                      scanf("%s",name);
                      strcpy(stu[i].name,name);
                      break;    
                  case 3:
                      printf("将%d学生的班级修改为:",num); 
                      scanf("%s",clas);
                      strcpy(stu[i].clas,clas);
                      break;
                  case 4:
                      printf("将%d学生的性别修改为:",num); 
                      scanf("%s",sex);
                    strcpy(stu[i].sex,sex);   
                      break;
                case 5:
                      printf("将%d学生的英语成绩修改为:",num); 
                      scanf("%f",&Eng_score);
                      stu[i].Eng_score=Eng_score;
                      stu[i].total=stu[i].C_score+stu[i].Eng_score;
                    stu[i].aver=(stu[i].C_score+stu[i].Eng_score)/2;
                      break;
                case 6:
                      printf("将%d学生的C语言成绩修改为:",num);
                    scanf("%f",&C_score);
                    stu[i].C_score=C_score;
                    stu[i].total=stu[i].C_score+stu[i].Eng_score;
                    stu[i].aver=(stu[i].C_score+stu[i].Eng_score)/2;   
                      break;                      
                  default:
                      printf("选择错误,请重新选择需要修改的内容:");
                    scanf("%d",&a);   
                      break;
                }
              
              printf("请选择需要修改的内容(如果已修改完成请按0):");
              scanf("%d",&a);
            }
            if((fp=fopen("stu.txt","wb"))==NULL)
                {
                    printf("文件打开失败\n");
                    return;
                }
                for(j=0;j<m;j++)
                {
                    if(fwrite(&stu[j],LEN,1,fp)!=1)
                    {
                        printf("不能保存\n");
                        getchar();
                    }
                }
                fclose(fp);
                printf("修改成功!\n");
                break;         
        }
    }
    if(m==i)
    {
        printf("未找到该学生\n"); 
    }
}
//查询学生信息 
void select()
{
    int num,m=0;
    int i;
    FILE *fp;
    if((fp=fopen("stu.txt","rb"))==NULL)
    {
        printf("文件打开失败\n");
        return;
    }
    while(!feof(fp))
    {
        if(fread(&stu[m],LEN,1,fp)==1)
        {
          m++;
        }
     } 
    fclose(fp);
    if(m==0)
    {
        printf("文件没有内容\n");
        return;
    }     
    printf("请输入学生学号进行查询:");
    scanf("%d",&num);
    for(i=0;i<m;i++)
    {
        if(num==stu[i].num)
        {
            printf("\n");
            printf("该学生信息已被查到;\n");
            printf("学号\t姓名\t班级\t性别\t英语成绩\tC语言成绩\t总成绩\t平均成绩\n");
            printf("%3d\t%s\t%s\t%s\t%.2f\t\t%.2f\t\t%.2f\t %.2f\n",stu[i].num,stu[i].name,stu[i].clas,stu[i].sex,stu[i].Eng_score,stu[i].C_score,stu[i].total,stu[i].aver); 
            break; 
        }        
    }
    if(m==i)
    {
        printf("该学生信息不存在\n");
        return;
    }  
}
//显示学生信息 
void print()
{ 
  int i,m=0;
  FILE *fp;
  if((fp=fopen("stu.txt","rb"))==NULL)
  {
   printf("文件打开失败\n");
   return; 
  }
    while(!feof(fp))
 {
  if(fread(&stu[m],LEN,1,fp)==1)
      {
         m++;
     }
  }
  fclose(fp);
  if(m==0)
  {
      printf("文件中没有内容\n");
  }
   printf("学号\t姓名\t班级\t性别\t英语成绩\tC语言成绩\t总成绩\t平均成绩\n");  
   for(i=0;i<m;i++)
   {
     printf("%3d\t%s\t%s\t%s\t%.2f\t\t%.2f\t\t%.2f\t %.2f\n",stu[i].num,stu[i].name,stu[i].clas,stu[i].sex,stu[i].Eng_score,stu[i].C_score,stu[i].total,stu[i].aver);
    }
}
//排序 
void sort()
{
      int i,j,m=0;
      int ch;
      FILE *fp;
      struct student  temp;
      if((fp=fopen("stu.txt","rb"))==NULL)
      {
       printf("文件打开失败\n");
       return; 
      }
     while(!feof(fp))
     {
       if(fread(&stu[m],LEN,1,fp)==1)
          {
             m++;
         }
      }
      fclose(fp);
      if(m==0)
      {
          printf("文件中没有内容\n");
      }
        printf("1:学号升序,2:英语成绩升序,3:C语言升序,4:总成绩升序,5:平均成绩升序\n"); 
       printf("请选择显示形式:");
       scanf("%d",&ch);
       switch (ch) 
       {
           case 1:
               for(i=0;i<m;i++)
               {
               for(j=i+1;j<m;j++)
               {
                   if(stu[i].num>stu[j].num)
                   { 
                     temp=stu[i];
                     stu[i]=stu[j];
                     stu[j]=temp;                     
                    } 
               }       
            }
               break;
           case 2:
               for(i=0;i<m;i++)
            {
               for(j=i+1;j<m;j++)
               {
                       if(stu[i].Eng_score>stu[j].Eng_score)
                      { 
                           temp=stu[i];
                           stu[i]=stu[j];
                           stu[j]=temp;                     
                       } 
                   }       
            }
    
               break;
           case 3:
            for(i=0;i<m;i++)
            {
                   for(j=i+1;j<m;j++)
                   {
                       if(stu[i].C_score>stu[j].C_score)
                       { 
                           temp=stu[i];
                           stu[i]=stu[j];
                           stu[j]=temp;                     
                       } 
                   }       
            }
                   
            break;
        case 4:
            for(i=0;i<m;i++)
            {
                   for(j=i+1;j<m;j++)
                   {
                       if(stu[i].total>stu[j].total)
                       { 
                           temp=stu[i];
                           stu[i]=stu[j];
                           stu[j]=temp;                     
                       } 
                   }       
            }
                   
            break;    
        case 5:
            for(i=0;i<m;i++)
            {
                   for(j=i+1;j<m;j++)
                   {
                       if(stu[i].aver>stu[j].aver)
                       { 
                           temp=stu[i];
                           stu[i]=stu[j];
                           stu[j]=temp;                     
                       } 
                   }       
            }
                   
            break;
       }
   printf("学号\t姓名\t班级\t性别\t英语成绩\tC语言成绩\t总成绩\t平均成绩\n");  
   for(i=0;i<m;i++)
   {
     printf("%3d\t%s\t%s\t%s\t%.2f\t\t%.2f\t\t%.2f\t %.2f\n",stu[i].num,stu[i].name,stu[i].clas,stu[i].sex,stu[i].Eng_score,stu[i].C_score,stu[i].total,stu[i].aver);
    }
        
}
//最大值 
void max()
{
    int i,j=0;
    FILE *fp;
    int m=0;
    if((fp=fopen("stu.txt","rb"))==NULL)
          {
           printf("文件打开失败\n");
           return; 
          }
         while(!feof(fp))
         {
           if(fread(&stu[m],LEN,1,fp)==1)
              {
                 m++;
             }
          }
          fclose(fp);
          if(m==0)
          {
              printf("文件中没有内容\n");
          }
    for(i=0;i<m;i++)
    {
        if(stu[i].total>stu[j].total)
        j=i;
    }
    printf("总成绩成绩最高的同学是:\n");
    printf("学号\t姓名\t班级\t性别\t英语成绩\tC语言成绩\t总成绩\t平均成绩\n");
    printf("%3d\t%s\t%s\t%s\t%.2f\t\t%.2f\t\t%.2f\t %.2f\n",stu[j].num,stu[j].name,stu[j].clas,stu[j].sex,stu[j].Eng_score,stu[j].C_score,stu[j].total,stu[j].aver);
  
}
//分组统计
void cut()
{
    int i,j;
    float n;
    FILE *fp;
    int m=0;
    if((fp=fopen("stu.txt","rb"))==NULL)
          {
           printf("文件打开失败\n");
           return; 
          }
         while(!feof(fp))
         {
           if(fread(&stu[m],LEN,1,fp)==1)
              {
                 m++;
             }
          }
          fclose(fp);
          if(m==0)
          {
              printf("文件中没有内容\n");
          }
    printf("请输入按总成绩分组的值:");
    scanf("%f",&n);
    printf("总成绩大于%.2f的同学有:\n",n);
    printf("学号\t姓名\t班级\t性别\t英语成绩\tC语言成绩\t总成绩\t平均成绩\n"); 
    for(i=0;i<m;i++)
    {
        if(stu[i].total>=n)
        printf("%3d\t%s\t%s\t%s\t%.2f\t\t%.2f\t\t%.2f\t %.2f\n",stu[i].num,stu[i].name,stu[i].clas,stu[i].sex,stu[i].Eng_score,stu[i].C_score,stu[i].total,stu[i].aver);
    }
    printf("总成绩小于%.2f的同学有:\n",n);
    printf("学号\t姓名\t班级\t性别\t英语成绩\tC语言成绩\t总成绩\t平均成绩\n");
    for(j=0;j<m;j++)
    {
        if(stu[j].total<n)
        printf("%3d\t%s\t%s\t%s\t%.2f\t\t%.2f\t\t%.2f\t %.2f\n",stu[j].num,stu[j].name,stu[j].clas,stu[j].sex,stu[j].Eng_score,stu[j].C_score,stu[j].total,stu[j].aver);
    }
 } 
 //清屏
 void clea()
 {
     system("cls");
 } 

https://blog.csdn.net/qq_63099085/article/details/126002741

可以参考这个:https://blog.csdn.net/LM0624/article/details/127326278?ops_request_misc=&request_id=&biz_id=102&utm_term=c%E8%AF%AD%E8%A8%80%E5%AD%A6%E7%94%9F%E5%9F%BA%E6%9C%AC%E4%BF%A1%E6%81%AF%E7%AE%A1%E7%90%86%E7%B3%BB%E7%BB%9F&utm_medium=distribute.pc_search_result.none-task-blog-2~all~sobaiduweb~default-0-127326278.142^v80^pc_new_rank,201^v4^add_ask,239^v2^insert_chatgpt&spm=1018.2226.3001.4449

这是一个比较完整的学生信息管理系统,需要使用文件读写、查询、排序、修改和导出等多种功能,下面是一些基本实现思路:

定义数据结构和数据文件格式:需要定义一个结构体来存储学生信息,同时需要确定数据文件的格式和存储方式(如文本文件或二进制文件等)。

实现文件读写功能:在程序启动时需要读取默认的数据文件,并将数据存储到内存中;在修改和导出功能中也需要进行文件的读写操作。

实现查询功能:可以定义多个查询条件,如省、市、性别等,然后将查询结果按照指定方式排序输出。需要注意的是,如果查询结果不唯一,需要按照学号升序输出。

实现排序功能:可以根据指定的关键字对学生信息进行排序,排序方法不限定。

实现信息修改功能:需要对学生状态进行修改,只有有权限的人员才能进行修改操作。

实现导出功能:可以将指定的查询结果导出到指定文件,导出格式可以和数据文件格式相同或不同。

实现菜单功能:系统以菜单方式工作,需要实现菜单的显示和选择功能,用户可以通过菜单选择需要的操作。

总体上,需要将以上功能模块化,并进行适当的封装,以便实现和维护。此外,还需要注意数据文件的备份和恢复,以及系统的安全性和可靠性
// 定义一个结构体来存储学生信息
struct student {
char name[20];
char id[10];
char province[20];
char city[20];
char gender;
int age;
enum {enrollment, suspension, graduation} status;
};

// 定义一个结构体来存储用户信息
struct user {
char username[20];
char password[20];
};

// 定义一个枚举类型来表示排序关键字
enum sort_key {id, name, province, city, gender, age, status};

// 读取数据文件中的学生信息
struct student students[1000];
int num_students = 0;
read_data_file(students, &num_students);

// 登录功能
struct user users[100];
int num_users = 0;
read_users_file(users, &num_users);
int user_index = login(users, num_users);

// 查询功能
struct student query_results[100];
int num_query_results = 0;
query(students, num_students, &query_results, &num_query_results, province, city, gender);
sort(query_results, num_query_results, sort_key);
print_results(query_results, num_query_results);

// 修改功能
if (user_index == teacher) {
change_status(students, num_students, id, status);
}

// 导出功能
export_results(query_results, num_query_results, filename);