2201_75469478 2023-03-28 21:17 采纳率: 0%
浏览 255
已结题

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

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

  • 写回答

11条回答 默认 最新

  • 小逸2023 2023-03-28 22:09
    关注
    该回答引用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;
    }
    }
    }

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

报告相同问题?

问题事件

  • 已结题 (查看结题原因) 4月4日
  • 修改了问题 4月3日
  • 修改了问题 3月28日
  • 赞助了问题酬金15元 3月28日
  • 展开全部

悬赏问题

  • ¥50 易语言把MYSQL数据库中的数据添加至组合框
  • ¥20 求数据集和代码#有偿答复
  • ¥15 关于下拉菜单选项关联的问题
  • ¥20 java-OJ-健康体检
  • ¥15 rs485的上拉下拉,不会对a-b<-200mv有影响吗,就是接受时,对判断逻辑0有影响吗
  • ¥15 使用phpstudy在云服务器上搭建个人网站
  • ¥15 应该如何判断含间隙的曲柄摇杆机构,轴与轴承是否发生了碰撞?
  • ¥15 vue3+express部署到nginx
  • ¥20 搭建pt1000三线制高精度测温电路
  • ¥15 使用Jdk8自带的算法,和Jdk11自带的加密结果会一样吗,不一样的话有什么解决方案,Jdk不能升级的情况