| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1371 人关注过本帖
标题:C语言学生成绩管理系统,出现一些问题,求教各位大佬
取消只看楼主 加入收藏
TRH
Rank: 1
等 级:新手上路
帖 子:9
专家分:0
注 册:2017-12-23
结帖率:100%
收藏
 问题点数:0 回复次数:0 
C语言学生成绩管理系统,出现一些问题,求教各位大佬
本人不变太会C语言,还在学习当中,用C语言写了一个学生成绩管理系统:输入三个学生信息,实现查询学生成绩、学生数据排序、班级成绩分析(各科平均成绩、最高分、最低分、及格率)、修改学生记录、删除学生记录、输出全班学生信息的功能。

遇到的问题:学生数据排序模块有错误,删除学生记录模块有缺陷(理论上能删除,但输出的时候有缺陷),希望大佬能帮我指导指导,感激不尽!

(有些地方看起来有点乱,但在VS2017上编译是整齐的

图片附件: 游客没有浏览图片的权限,请 登录注册

图片附件: 游客没有浏览图片的权限,请 登录注册

程序代码:
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
struct student
{
    char Name[20], ID[20];
    int Class;
    float Math, English, Computer;
}
stu[1000];
void Menu()
{
    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======================================================\n");
}
void Input()//1.添加学生记录
{
    printf("\t\t请按顺序输入学生姓名,学号,班级,学科成绩,不同项之间用空格间隔开:\n");
    printf("\t\t姓名 学号 班级 数学成绩 英语成绩 计算机成绩\n");
    for(int i=0;i<3;i++)
    {
        printf("\t\t");
        scanf("%s%s%d%f%f%f", &stu[i].Name, &stu[i].ID, &stu[i].Class, &stu[i].Math, &stu[i].English, &stu[i].Computer);
    }
        printf("\t\t提示:成绩存入完毕!\n\n");
}
void Find()//2.查询学生成绩
{
    int a, i;
    float sum, ave;
    printf("\t\t======================================================\n");
    printf("\t\t||            ※欢迎进入学生信息查询系统※          ||\n");
    printf("\t\t||                1.按学生的姓名查找                ||\n");
    printf("\t\t||                2.按学生学号查找                  ||\n");
    printf("\t\t======================================================\n");
    printf("\t\t>>>请选择1--2:");
    scanf("%d", &a);
    switch (a)
    {
    case 1://1.按学生的姓名查找
    {
        char Name[20];
        printf("\t\t>>>请输入要查找的学生的姓名:");
        scanf("%s", Name);
        printf("\t\t>>>以下是%s同学的信息:\n\n",Name);
        for ( i = 0;  i< 3; i++)
        {
            if (strcmp(Name, stu[i].Name) == 0)
            {
                sum = stu[i].Math + stu[i].English + stu[i].Computer;
                ave = (stu[i].Math + stu[i].English + stu[i].Computer) / 3;
                printf("\t\t姓名\t学号\t班级\t数学成绩\t英语成绩\t计算机成绩\t平均成绩\t总成绩\n");
                printf("\t\t%s\t%s\t %d\t %.2f\t\t  %.2f\t\t %.2f\t\t%.2f\t\t%.2f\n\n", stu[i].Name, stu[i].ID, stu[i].Class, stu[i].Math, stu[i].English, stu[i].Computer, ave, sum);
            }

        }
                
    }
    break;
    case 2://2.按学生学号查找
    {
        char Num[20];
        printf("\t\t>>>请输入要查找的学生的学号:");
        scanf("%s", Num);
        printf("\t\t>>>以下是%s号同学的信息:\n\n",Num);
        for ( i = 0; i < 3; i++)
        {
            if (0 == strcmp(Num, stu[i].ID))
            {
                sum = stu[i].Math + stu[i].English + stu[i].Computer;
                ave = (stu[i].Math + stu[i].English + stu[i].Computer) / 3;
                printf("\t\t姓名\t学号\t班级\t数学成绩\t英语成绩\t计算机成绩\t平均成绩\t总成绩\n");
                printf("\t\t%s\t%s\t %d\t %.2f\t\t  %.2f\t\t %.2f\t\t%.2f\t\t%.2f\n\n", stu[i].Name, stu[i].ID, stu[i].Class, stu[i].Math, stu[i].English, stu[i].Computer, ave,sum);
            }
            
        }
    }
    break;
    }
}
void Order()//3.学生数据排序
{
    int a;
    printf("\t\t======================================================\n");
    printf("\t\t||            ※欢迎进入学生成绩排序系统※          ||\n");
    printf("\t\t||                1.按学生平均成绩排序              ||\n");
    printf("\t\t||                2.按学生计算机成绩排序            ||\n");
    printf("\t\t======================================================\n");
    printf("\t\t>>>请选择1--2:");
    scanf("%d", &a);
    printf("\t\t>>>排序如下:\n\n");
    printf("\t\t姓名\t学号\t班级\t数学成绩\t英语成绩\t计算机成绩\t平均成绩\t总成绩\n");
    switch (a)
    {
    case 1://1.按学生平均成绩排序 
    {
        int m, n;
        struct student tmp;
        for (m = 0; m < 3; m++)
        {
            for (n = 1; n < 3-m; n++)
            {
                if ((stu[n-1].Math+stu[n-1].English+stu[n-1].Computer)/3 > (stu[n].Math+stu[n].English+stu[n].Computer)/3)
                {
                    tmp = stu[n - 1];
                    stu[n - 1] = stu[n];
                    stu[n] = tmp;
                }
                printf("\t\t%s\t%s\t%d\t  %.2f\t\t  %.2f\t\t%.2f\t\t%.2f\t\t%.2f\n", stu[n].Name, stu[n].ID, stu[n].Class, stu[n].Math, stu[n].English, stu[n].Computer, (stu[n].Math + stu[n].English + stu[n].Computer) / 3, stu[n].Math + stu[n].English + stu[n].Computer);
            }
        }
        
    }break;
    case 2://2.按学生计算机成绩排序
    {
        int m, n;
        struct student tmp;
        for (m = 0; m < 3; m++)
        {
            for (n = 1; n < 3 - m; n++)
            {
                if (stu[n - 1].Computer > stu[n].Computer)
                {
                    tmp = stu[n - 1];
                    stu[n - 1] = stu[n];
                    stu[n] = tmp;
                }
                printf("\t\t%s\t%s\t%d\t  %.2f\t\t  %.2f\t\t%.2f\t\t%.2f\t\t%.2f\n", stu[n].Name, stu[n].ID, stu[n].Class, stu[n].Math, stu[n].English, stu[n].Computer, (stu[n].Math + stu[n].English + stu[n].Computer) / 3, stu[n].Math + stu[n].English + stu[n].Computer);
            }
        }
    }
    break;
    }
}
void Analyze()//4.班级成绩分析
{
    float M_sum=0, M_ave, M_max=0, M_min, M_passrate;
    float E_sum=0, E_ave, E_max=0, E_min, E_passrate;
    float C_sum=0, C_ave, C_max=0, C_min, C_passrate;
    float  M_people = 0, E_people = 0, C_people = 0;
    M_min = stu[0].Math;
    E_min = stu[0].English;
    C_min = stu[0].Computer;
    for ( int i = 0; i < 3; i++)
    {
        M_sum += stu[i].Math;
        E_sum += stu[i].English;
        C_sum += stu[i].Computer;
        if (stu[i].Math > M_max)
            M_max = stu[i].Math;
        if (stu[i].English > E_max)
            E_max = stu[i].English;
        if (stu[i].Computer > C_max)
            C_max = stu[i].Computer;
        if (stu[i].Math < M_min)
            M_min = stu[i].Math;
        if (stu[i].English < E_min)
            E_min = stu[i].English;
        if (stu[i].Computer < C_min)
            C_min = stu[i].Computer;
        if (stu[i].Math >= 60)
            M_people++;
        M_passrate = M_people / 3*100;
        if (stu[i].English >= 60)
            E_people++;
        E_passrate = E_people / 3 * 100;
        if (stu[i].Computer >= 60)
            C_people++;
        C_passrate = C_people / 3 * 100;
    }
    M_ave = M_sum / 3;
    E_ave = E_sum / 3;
    C_ave = C_sum / 3;
    printf("\t\t>>>以下是班级成绩分析表:\n\n");
    printf("\t\t=============================================================\n");
    printf("\t\t||                    ★班级成绩分析★                     ||\n");
    printf("\t\t||                                                         ||\n");
    printf("\t\t||  数学平均成绩    数学最高分    数学最低分    数学及格率 ||\n");
    printf("\t\t||      %.2f          %.2f         %.2f        %.2f%%   ||\n", M_ave, M_max, M_min, M_passrate);
    printf("\t\t||                                                         ||\n");
    printf("\t\t||  英语平均成绩    英语最高分    英语最低分    英语及格率 ||\n");
    printf("\t\t||      %.2f          %.2f         %.2f        %.2f%%   ||\n", E_ave, E_max, E_min, E_passrate);
    printf("\t\t||                                                         ||\n");
    printf("\t\t|| 计算机平均成绩  计算机最高分  计算机最低分  计算机及格率||\n");
    printf("\t\t||      %.2f         %.2f         %.2f        %.2f%%   ||\n", C_ave, C_max, C_min, C_passrate);
    printf("\t\t=============================================================\n\n");
}
void Modify()//5.修改学生记录
{
    char id[20];
    printf("\t\t>>>请输入要修改的学生的学号:");
    scanf("%s", &id);
    for (int i=0;i<3;i++)
        if (strcmp(stu[i].ID, id) == 0) 
        {    
            printf("\t\t>>>已查找到学号为%s的学生,请输入新的信息,不同项之间用空格间隔开:\n",id);
            printf("\t\t姓名 学号 班级 数学成绩 英语成绩 计算机成绩\n");
            printf("\t");
            scanf("%s%s%d%f%f%f", &stu[i].Name, &stu[i].ID, &stu[i].Class, &stu[i].Math, &stu[i].English, &stu[i].Computer);
            printf("\t\t>>>提示:学号为%s的学生信息已更新!\n\n", id);
        }
}
void Delete()//6.删除学生记录
{
    int i;
    char id[20];
    printf("\t\t>>>请输入要删除学生的学号:");
    scanf("%s", &id);
    for (i = 0; i<3; i++)
        if (strcmp(id, stu[i].ID) == 0)
        {
                stu[i] = stu[i + 1];
                i++;
        }
    printf("\t\t>>>提示:%s号学生信息已成功删除!\n\n", id);
}
void Output()//7.输出全班学生信息
{
    float sum, ave;
    printf("\t\t姓名\t学号\t班级\t数学成绩\t英语成绩\t计算机成绩\t平均成绩\t总成绩\n");
    for (int i = 0; i < 3; i++)
    {
        sum = stu[i].Math + stu[i].English + stu[i].Computer;
        ave = (stu[i].Math + stu[i].English + stu[i].Computer) / 3;
        printf("\t\t%s\t%s\t %d\t %.2f\t\t  %.2f\t\t %.2f\t\t%.2f\t\t%.2f\n\n", stu[i].Name, stu[i].ID, stu[i].Class, stu[i].Math, stu[i].English, stu[i].Computer, ave, sum);
    }
}
int main()
{
    int selection;
    while (true)
    {
        Menu();
        printf("\t\t>>>请选择1--8:");
        scanf("%d", &selection);
        printf("\n");
        switch (selection)
        {
        case 1:  Input();     break;
        case 2:  Find();      break;
        case 3:  Order();     break;
        case 4:  Analyze();   break;
        case 5:  Modify();    break;
        case 6:  Delete();    break;
        case 7:  Output();    break;
        case 8:
            printf("\n\t\t>>>您已成功退出学生成绩管理系统,感谢使用!\n\n");
            exit(0);
            break;
        default:
            printf("\n\t\t>>>输入有误,请重新输入!\n\n");
        }
    }
    return 0;
}



[此贴子已经被作者于2018-5-30 17:53编辑过]

搜索更多相关主题的帖子: 学生 成绩 stu printf || 
2018-05-30 17:50
快速回复:C语言学生成绩管理系统,出现一些问题,求教各位大佬
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.031630 second(s), 10 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved