时雨h 2022-12-09 12:13 采纳率: 100%
浏览 35
已结题

C语言成绩管理系统出现运行后界面是空的

问题遇到的现象和发生背景

img

遇到的现象和发生背景 运行后界面是空的
#include <stdio.h>
#include <stdlib.h>
#include <stdlib.h>
#include <string.h>

struct Student {  //每个学生对应一个结构体
    char ID[20];//学号
    char Name[10];//姓名
    float Mark1;//语文成绩
    float Mark2;//数学成绩             //四个变量
    float Mark3;//英语成绩
    float Average1;//平均成绩
    float Average2;//语文平均成绩
    float Average3;//数学平均成绩
    float Average4;//英语平均成绩
} students[1000];
int num = 0; //计数器

void Copy(struct Student *arr, int i, int j) {
    strcpy(arr[i].ID, arr[j].ID);        //strcpy()函数的简介:
    strcpy(arr[i].Name, arr[j].Name);
    arr[i].Mark1 = arr[j].Mark1;
    arr[i].Mark2 = arr[j].Mark2;
    arr[i].Mark3 = arr[j].Mark3;
    arr[i].Average1 = arr[j].Average1;
    arr[i].Average2 = arr[j].Average2;
    arr[i].Average3 = arr[j].Average3;
    arr[i].Average4 = arr[j].Average4;
}

int Student_SearchByName(char name[]) {
    //通过姓名来检索学生
    int i;
    for (i = 0; i < num; i++) {
        if (strcmp(students[i].Name, name) == 0) { //通过strcmp函数来对比学生姓名,找到返回在数组的位置
            return i;
        }
    }
    return -1;    //未找到返回 -1
}

int Student_SearchByIndex(char id[]) { //通过学号来检索学生信息
    int i;
    for (i = 0; i < num; i++) {
        if (strcmp(students[i].ID, id) == 0) { //通过strcmp函数来对比学生id,找到返回位置
            return i;
        }
    }
    return -1;   //未找到返回 -1
}

void Student_DisplaySingle(int index) { //输出表头
    printf("%10s%10s%8s%8s%10s%10s%10s%10s\n", "学号", "姓名", "语文", "数学", "英语",
           "平均成绩""语文科目平均成绩""数学科目平均成绩""英语科目平均成绩");
    printf("-------------------------------------------------------------\n");
    printf("%10s%10s%8.2f%8.2f%8.2f%8.2f%10.2f%10.2f\n", students[index].ID, students[index].Name,
           students[index].Mark1, students[index].Mark2, students[index].Mark3, students[index].Average1, students[index].Average2,
           students[index].Average3, students[index].Average4);
}

void inputt() { //利用循环录入学生信息
    while (1) {
        printf("请输入学号:");
        scanf("%s", &students[num].ID);
        getchar();
        printf("请输入姓名:");
        scanf("%s", &students[num].Name);
        getchar();
        printf("请输入语文成绩:");
        scanf("%f", &students[num].Mark1);
        getchar();
        printf("请输入数学成绩:");
        scanf("%f", &students[num].Mark2);
        getchar();
        printf("请输入英语成绩:");
        scanf("%f", &students[num].Mark3);
        getchar();
        students[num].Average1 = (students[num].Mark1 + students[num].Mark2 + students[num].Mark3) / 3;
        if (Student_SearchByIndex(students[num].ID) == -1) {
            num++;  //移向下一个位置
        } else {
            printf("学号重复,输入数据无效 !!!\n");
        }

        printf("是否继续?(y/n)");
        if (getchar() == 'n') {
            break;
        }
    }
}

void display() { //打印已录入的学生信息
    int a;
    printf("%10s%10s%8s%8s%8s%8s%10s%10s\n", "学号", "姓名", "语文", "数学", "英语", "平均成绩");
    printf("-------------------------------------------------------------\n");
    for (a = 0; a < num; a++) {
        printf("%10s%10s%8.2f%8.2f%8.2f%8.2f%10.2f%10.2f\n", students[a].ID, students[a].Name,
               students[a].Mark1, students[a].Mark2, students[a].Mark3, students[a].Average1);
    }
}

void search() { //查询学生信息
    while (1) {
        char name[20];
        int index;
        printf("请输入要查询的学生的姓名:");
        scanf("%s", &name);
        getchar();
        index = Student_SearchByName(name); //调用搜查name函数,根据其返回值确定位置
        if (index == -1) {
            printf("学生不存在!\n");
        } else {
            printf("你要查询的学生信息为:\n");
            Student_DisplaySingle(index);
        }
        printf("是否继续?(y/n)");
        if (getchar() == 'n') {
            break;
        }
    }
}

void sort() { //根据平均分排序
    int i, j; //struct students tmp;
    for (i = 0; i < num; i++) {
        students[i].Average1 = (students[i].Mark1 + students[i].Mark2 + students[i].Mark3) / 3;
    }
    for (i = 0; i < num; i++) {
        for (j = 1; j < num - i; j++) {
            if (students[j - 1].Average1 < students[j].Average1) {

                Copy(students, num, j - 1);
                Copy(students, j - 1, j);
                Copy(students, j, num);
                //tmp=students[j-1];
                //students[j-1]=students[j];
                //students[j]=tmp;      //冒泡排序
            }
        }
    }
    int a;
    printf("%10s%10s%8s%8s%8s%10s\n", "学号", "姓名", "语文", "数学", "英语", "平均成绩");
    printf("-------------------------------------------------------------\n");
    for (a = 0; a < num; a++) {
        printf("%10s%10s%8.2f%8.2f%8.2f%8.2f%10.2f%10.2f\n", students[a].ID, students[a].Name,
               students[a].Mark1, students[a].Mark2, students[a].Mark3, students[a].Average1);
    }
}

void SearchLow() { //搜索不及格的并输出
    int a;
    printf("           语文不及格的有%10s%10s%8s\n", "学号", "姓名", "语文");
    for (a = 0; a < num; a++) {
        if (students[a].Mark1 < 60)
            printf("%10s%10s%8.2f\n", students[a].Name, students[a].ID, students[a].Mark1); //从头搜索到尾,若小于60就输出
    }

    printf("           数学不及格的有%10s%10s%8s\n", "学号", "姓名", "数学");
    for (a = 0; a < num; a++) {
        if (students[a].Mark2 < 60)
            printf("%10s%10s%8.2f\n", students[a].Name, students[a].ID, students[a].Mark2);
    }

    printf("           英语不及格的有%10s%10s%8s\n", "学号", "姓名", "英语");
    for (a = 0; a < num; a++) {
        if (students[a].Mark3 < 60)
            printf("%10s%10s%8.2f\n", students[a].Name, students[a].ID, students[a].Mark3);
    }

    printf("           计算机不及格的有%10s%10s%8s\n", "学号", "姓名", "计算机");
    system("pause");        //这个好像没作用
}

void Save() {
    FILE *fp = fopen("temp.txt", "w+");
    fprintf(fp, "%d\n", num);
    for (int i = 0 ; i < num ; i++) {
        fprintf(fp, "%s %s %f %f %f %f %f %f\n", students[i].ID, students[i].Name, students[i].Mark1, students[i].Mark2,
                students[i].Mark3, students[i].Average1);
    }
    fclose(fp);
}

void Load() {
    FILE *fp = fopen("temp.txt", "r");
    fscanf(fp, "%d", &num);
    for (int i = 0 ; i < num ; i++) {
        fscanf(fp, "%s %s %f %f %f %f %f %f\n", students[i].ID, students[i].Name, &students[i].Mark1, &students[i].Mark2,
               &students[i].Mark3, &students[i].Average1);
    }
    fclose(fp);
}

int main() {
    int i;
    while (1) {
        Load();
        printf("\t\t\t\t\t-------- 学生成绩管理系统-------\n\n\n\n");     //菜单
        printf("\t\t\t\t\t1. 增加学生记录\n\n");
        printf("\t\t\t\t\t2. 修改学生记录\n\n");
        printf("\t\t\t\t\t3. 删除学生记录\n\n");
        printf("\t\t\t\t\t4. 插入学生记录\n\n");
        printf("\t\t\t\t\t5. 显示所有记录\n\n");
        printf("\t\t\t\t\t6. 查询学生记录\n\n");
        printf("\t\t\t\t\t7. 按平均成绩排序\n\n");
        printf("\t\t\t\t\t8. 输出各科目不及格学生\n\n");
        printf("\t\t\t\t\t9. 输出各科目最高分\n\n");
        printf("\t\t\t\t\t0. 退出\n\n\n");
        printf("请选择(0-9):");
        scanf("%d", &i);
        switch (i) {
            case 1:
                inputt();
                break;
            case 2:
                display();
                break;
            case 3:
                search();
                break;
            case 4:
                sort();
                break;
            case 5:
                SearchLow();
                break;
            case 0:
                exit(0);
            default:
                ;
        }
        Save();
    }
    return 0;
}









  • 写回答

2条回答 默认 最新

  • 龙套(路人) 2022-12-09 15:34
    关注

    仅供参考,望采纳~
    出现段错误
    交换一下,fscanf和fprintf

    img

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(1条)

报告相同问题?

问题事件

  • 系统已结题 12月17日
  • 已采纳回答 12月9日
  • 创建了问题 12月9日

悬赏问题

  • ¥100 set_link_state
  • ¥15 虚幻5 UE美术毛发渲染
  • ¥15 CVRP 图论 物流运输优化
  • ¥15 Tableau online 嵌入ppt失败
  • ¥100 支付宝网页转账系统不识别账号
  • ¥15 基于单片机的靶位控制系统
  • ¥15 真我手机蓝牙传输进度消息被关闭了,怎么打开?(关键词-消息通知)
  • ¥15 装 pytorch 的时候出了好多问题,遇到这种情况怎么处理?
  • ¥20 IOS游览器某宝手机网页版自动立即购买JavaScript脚本
  • ¥15 手机接入宽带网线,如何释放宽带全部速度