狂野的小黄花 发表于 2019-12-13 09:33:30

学生成绩管理系统读取功能有问题大佬们帮忙看看

保存功能可以运行使用,但读取时候只能读取出学号和姓名,没法读取出成绩
#include <stdio.h>
#include <stdlib.h>
#include <windows.h>
#define MAX_COUNT 100

typedef struct
{
        char num;//学号
        char name;//姓名
        float score_yuwen;//语文成绩
        float score_shuxue;//数学成绩
        float score_yingyu;//英语成绩
        float score_wuli;//物理成绩
        float score_huaxue;//化学成绩
} Student;

Student stu;
int total=0;

void clear_enter()
{ //清理回车
        char mistake;
        gets(mistake);
}

void return_menu()
{
        printf("按回车键返回主菜单...\n");
        clear_enter();
}

void add_Student()
{ //录入学生信息
    int i;
        printf("请输入学生成绩信息:\n");
        printf("学号姓名语文数学英语物理化学\n");
        scanf("%s%s%f%f%f%f%f",stu.num,stu.name,&stu.score_yuwen,&stu.score_shuxue,&stu.score_yingyu,&stu.score_wuli,&stu.score_huaxue);
        clear_enter();
        printf("学生成绩信息录入中...\n");
        sleep(1);
        printf("学生成绩信息已录入\n");
    total++;
}

void show_student()
{ //展示查看学生信息
        int i;
        printf("学号姓名语文数学英语物理化学\n");
        for(i=0; i<total; i++)
        {
                printf("%s%s%.f%.f%.f%.f%.f\n",stu.num,stu.name,stu.score_yuwen,stu.score_shuxue,stu.score_yingyu,stu.score_wuli,stu.score_huaxue);
        }
}

void search_name() { //根据姓名查找学生成绩信息
        int i;
        char name;
        system("cls");
        printf("请输入要查询的学生的姓名:");
        scanf("%s",&name);
        for(i=0; i<total; i++)
        {
                if(strcmp(name,stu.name)==0)
                {
                        printf("学号;%s\n",stu.num);
                        printf("姓名;%s\n",stu.name);
                        printf("语文;%.f\n",stu.score_yuwen);
                        printf("数学;%.f\n",stu.score_shuxue);
                        printf("物理;%.f\n",stu.score_wuli);
                        printf("化学;%.f\n",stu.score_huaxue);
                } else
                        printf("学生姓名不存在...\n");
                clear_enter();
        }
}

void search_num()
{ //根据学号查找学生成绩信息
        char num;
        int j;
        system("cls");
        printf("请输入要查询的学生的学号:");
        scanf("%s",&num);
        for(j=0; j<total; j++)
        {
                if(strcmp(num,stu.num)==0)
                {
                        printf("学号;%s\n",stu.num);
                        printf("姓名;%s\n",stu.name);
                        printf("语文;%.f\n",stu.score_yuwen);
                        printf("数学;%.f\n",stu.score_shuxue);
                        printf("英语:%.f\n",stu.score_yingyu);
                        printf("物理;%.f\n",stu.score_wuli);
                        printf("化学;%.f\n",stu.score_huaxue);
                }
                else
                {
                        printf("学生学号不存在:\n");
                }
        }
        clear_enter();
}

void search_student()
{
        int i;
        system("cls");
        printf("1按姓名查找:\n");
        printf("2按学号查找: \n");
        scanf("%d",&i);
        switch(i)
        {
                case 1: {
                        search_name();
                        break;
                }
                case 2: {
                        search_num();
                        break;
                }
        }
}

void change_student()
{
        int i;
        printf("输入要修改信息的学生学号:\n");
        char num;
        scanf("%s",&num);
        for(i=0; i<total; i++)
                if(strcmp(num,stu.num)==0) {
                        while(i<total) {
                                stu=stu;
                                i++;
                        }
                        total-=1;
                }
        printf("请输入新的学生成绩信息:\n");
        printf("学号姓名语文数学英语物理化学\n");
        scanf("%s%s%f%f%f%f%f",stu.num,stu.name,&stu.score_yuwen,&stu.score_shuxue,&stu.score_yingyu,&stu.score_wuli,&stu.score_huaxue);
        clear_enter();
        printf("学生成绩信息修改中...\n");
        sleep(1);
        printf("修改成功\n");
        total++;

}

void del_student()
{ //根据学号删除学生成绩信息
        int i;
        printf("输入要删除信息的学生学号:\n");
        char num;
        scanf("%s",&num);
        for(i=0; i<total; i++)
                if(strcmp(num,stu.num)==0) {
                        while(i<total) {
                                stu=stu;
                                i++;
                        }
                        total-=1;
                }
        clear_enter();
        printf("学生成绩正在删除\n");
        sleep(1);
        printf("学生成绩已删除\n");
}

void num_sort()
{ //按学生学号进行排序
        int i,j;
        Student stu_temp;
        for(i=0; i<total; i++)
        {
                for(j=0; j<total-1-i; j++)
                {
                        if(stu.num>stu.num)
                        {
                                stu_temp=stu;
                                stu=stu;
                                stu=stu_temp;
                        }
                }
        }
        printf("排序后的结果:\n");
        printf("学号姓名语文数学英语物理化学\n");
        for(i=0; i<total; i++)
        {
        printf("%s%s%.f%.f%.f%.f%.f\n",stu.num,stu.name,stu.score_yuwen,stu.score_shuxue,stu.score_yingyu,stu.score_wuli,stu.score_huaxue);
        }
}

void save_student()
{
    system("cls");
    int i,n;
    FILE *fp;
    if ((fp = fopen("chengji.txt", "wb")) == NULL)
    {
      printf("无法打开学生信息文件!\n");
      exit(1);
    }
    printf("\n正在保存...\n");
    fprintf(fp, "%d",total);
    fprintf(fp, "\r\n");
    for (i = 0; i <total; i++)
    {
      fprintf(fp, "%s %s %.f %.f %.f %.f %.f",stu.num,stu.name,stu.score_yuwen,stu.score_shuxue,stu.score_yingyu,stu.score_wuli,stu.score_huaxue);
      fprintf(fp, "\r\n");
    }
    fclose(fp);
    Sleep(1);
    system("cls");
    printf("*****保存成功*****\n");
}

void load_student()
{
    int i;
    FILE *fp;
    system("cls");
    if ((fp = fopen("chengji.txt", "rb")) ==NULL)
    {
      printf("无法打开学生信息文件!\n");
      exit(1);
    }
    fscanf(fp, "%d", &total);
    for (i = 0; i <total; i++)
    {
      fscanf(fp, "%s %s %.1f %.1f %.1f %.1f %.1f", stu.num,stu.name,stu.score_yuwen,stu.score_shuxue,stu.score_yingyu,stu.score_wuli,stu.score_huaxue);
    }
        fclose(fp);
    system("cls");
    printf("成功加载学生信息到内存中!\n");
    return;
}

void menu()
{
        system("color b9");
        printf("-------------学生成绩管理系统-------------\n");
        printf("            1.增加学生成绩信息            \n");
        printf("            2.查看学生成绩信息            \n");
        printf("            3.修改学生成绩信息            \n");
        printf("            4.删除学生成绩信息       \n");
        printf("            5.查找学生成绩信息            \n");
        printf("            6.对学生信息进行排序            \n");
        printf("            7.保存学生信息为文件            \n");
        printf("            8.从文件中读取学生信息            \n");
        printf("            9.退出系统            \n");
        printf("                                  \n");
        printf("请输入您的选择并按回车");
        return;
}

int main()
{
        char tmp;
        while(1) {
                system("cls");
                menu();
                int sel;
                scanf("%d",&sel);
                gets(tmp);
                switch(sel) {
                        case 1:
                        {
                                add_Student();
                                break;
                        }
                        case 2:
                        {
                                show_student();
                                break;
                        }
                        case 3:
                        {
                                change_student();
                                break;
                        }
                        case 4:
                        {
                                del_student();
                                break;
                        }
                        case 5:
                        {
                                search_student();
                                break;
                        }
                        case 6:
                        {
                                num_sort();
                                break;
                        }
                        case 7:
                        {
                                save_student();
                                break;
                        }
                        case 8:
                        {
                                load_student();
                                break;
                        }
                        case 9:
                        {
                                printf("退出系统");
                                exit(0);
                        }
                }
                printf("按任意键回车继续...\n");
                gets(tmp);
        }
        return 0;
}

superbe 发表于 2019-12-13 09:33:31

load_student()函数中fscanf不对,改成:
fscanf(fp, "%s %s %f %f %f %f %f", stu.num, stu.name, &stu.score_yuwen, &stu.score_shuxue, &stu.score_yingyu, &stu.score_wuli, &stu.score_huaxue);

%f输入时不能指定精度,另外忘加地址符了。
页: [1]
查看完整版本: 学生成绩管理系统读取功能有问题大佬们帮忙看看