鱼C论坛

 找回密码
 立即注册
查看: 1318|回复: 1

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

[复制链接]
发表于 2019-12-13 09:33:30 | 显示全部楼层 |阅读模式
25鱼币
保存功能可以运行使用,但读取时候只能读取出学号和姓名,没法读取出成绩
#include <stdio.h>
#include <stdlib.h>
#include <windows.h>
#define MAX_COUNT 100

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

Student stu[MAX_COUNT];
int total=0;

void clear_enter() 
{ //清理回车
        char mistake[20];
        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[total].num,stu[total].name,&stu[total].score_yuwen,&stu[total].score_shuxue,&stu[total].score_yingyu,&stu[total].score_wuli,&stu[total].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[i].num,stu[i].name,stu[i].score_yuwen,stu[i].score_shuxue,stu[i].score_yingyu,stu[i].score_wuli,stu[i].score_huaxue);
        }
}

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

void search_num() 
{ //根据学号查找学生成绩信息
        char num[20];
        int j;
        system("cls");
        printf("请输入要查询的学生的学号:");
        scanf("%s",&num);
        for(j=0; j<total; j++) 
        {
                if(strcmp(num,stu[j].num)==0) 
                {
                        printf("学号;%s\n",stu[j].num);
                        printf("姓名;%s\n",stu[j].name);
                        printf("语文;%.f\n",stu[j].score_yuwen);
                        printf("数学;%.f\n",stu[j].score_shuxue);
                        printf("英语:%.f\n",stu[j].score_yingyu);
                        printf("物理;%.f\n",stu[j].score_wuli);
                        printf("化学;%.f\n",stu[j].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[20];
        scanf("%s",&num);
        for(i=0; i<total; i++)
                if(strcmp(num,stu[i].num)==0) {
                        while(i<total) {
                                stu[i]=stu[i+1];
                                i++;
                        }
                        total-=1;
                }
        printf("请输入新的学生成绩信息:\n");
        printf("学号  姓名  语文  数学  英语  物理  化学\n");
        scanf("%s%s%f%f%f%f%f",stu[total].num,stu[total].name,&stu[total].score_yuwen,&stu[total].score_shuxue,&stu[total].score_yingyu,&stu[total].score_wuli,&stu[total].score_huaxue);
        clear_enter();
        printf("学生成绩信息修改中...\n");
        sleep(1);
        printf("修改成功\n");
        total++;

}

void del_student() 
{ //根据学号删除学生成绩信息
        int i;
        printf("输入要删除信息的学生学号:\n");
        char num[20];
        scanf("%s",&num);
        for(i=0; i<total; i++)
                if(strcmp(num,stu[i].num)==0) {
                        while(i<total) {
                                stu[i]=stu[i+1];
                                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[j].num>stu[j+1].num) 
                        {
                                stu_temp=stu[j];
                                stu[j]=stu[j+1];
                                stu[j+1]=stu_temp;
                        }
                }
        }
        printf("排序后的结果:\n");
        printf("学号  姓名  语文  数学  英语  物理  化学\n");
        for(i=0; i<total; i++) 
        {
        printf("%s  %s  %.f  %.f  %.f  %.f  %.f\n",stu[i].num,stu[i].name,stu[i].score_yuwen,stu[i].score_shuxue,stu[i].score_yingyu,stu[i].score_wuli,stu[i].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[i].num,stu[i].name,stu[i].score_yuwen,stu[i].score_shuxue,stu[i].score_yingyu,stu[i].score_wuli,stu[i].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[i].num,stu[i].name,stu[i].score_yuwen,stu[i].score_shuxue,stu[i].score_yingyu,stu[i].score_wuli,stu[i].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("请输入您的选择[1-9]并按回车");
        return;
}

int main() 
{
        char tmp[20];
        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;
}
最佳答案
2019-12-13 09:33:31
load_student()函数中fscanf不对,改成:
fscanf(fp, "%s %s %f %f %f %f %f", stu[i].num, stu[i].name, &stu[i].score_yuwen, &stu[i].score_shuxue, &stu[i].score_yingyu, &stu[i].score_wuli, &stu[i].score_huaxue);

%f输入时不能指定精度,另外忘加地址符了。

最佳答案

查看完整内容

load_student()函数中fscanf不对,改成: %f输入时不能指定精度,另外忘加地址符了。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2019-12-13 09:33:31 | 显示全部楼层    本楼为最佳答案   
load_student()函数中fscanf不对,改成:
fscanf(fp, "%s %s %f %f %f %f %f", stu[i].num, stu[i].name, &stu[i].score_yuwen, &stu[i].score_shuxue, &stu[i].score_yingyu, &stu[i].score_wuli, &stu[i].score_huaxue);

%f输入时不能指定精度,另外忘加地址符了。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-10-5 03:30

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表