| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1666 人关注过本帖
标题:编写了一个学生成绩管理系统,但总是报错,求各路大佬指教
取消只看楼主 加入收藏
德华
Rank: 1
等 级:新手上路
帖 子:7
专家分:0
注 册:2019-5-10
结帖率:100%
收藏
已结贴  问题点数:20 回复次数:2 
编写了一个学生成绩管理系统,但总是报错,求各路大佬指教
之前全部定义为int的时候代码可以运行,但老师要求用double,改了之后就一直报错,还有一个用学生姓名排序的代码不会,望各位大佬指点

//添加头文件
#include <stdio.h>
#include <string.h>
#include <stdlib.h>//标准裤头文件

//先做一个宏定义,定义十个学生的信息
#define STUDENT_COUNT 10
void InPut_Student_Inf(double n);
void OutPut_Student_Inf(double n);
int Find_Accord_Num(int n);
double Find_Accord_Name(double n);
void Rank_Accord_Num(int n);
//void Rank_Accord_Name(int n);
void Rank_Accord_Sum(double n);
int Change_Student_Inf(int n);
int Delete_Student_Inf(int n);
//全局数组变量,用于存储学生信息
char names[STUDENT_COUNT][50];
double matchs[STUDENT_COUNT];
double english[STUDENT_COUNT];
double computer[STUDENT_COUNT];
double sum[STUDENT_COUNT];
int num[STUDENT_COUNT];
//以下变量用于学生信息数组排序,作为临时数组
int temp_num[STUDENT_COUNT];
char temp_names[STUDENT_COUNT][50];
double temp_matchs[STUDENT_COUNT];
double temp_english[STUDENT_COUNT];
double temp_computer[STUDENT_COUNT];
double temp_sum[STUDENT_COUNT];
//sort数组存储排好序的学号或姓名下标
double sort[STUDENT_COUNT];



double i, j;//设置全局变量

//写main函数
double main(void)
{
    int choice, n;//定义用户输入的菜单项

    //显示菜单,直到用户输入0为止
    while(1)
    {
        printf("*********************\n");
        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("[0]退出程序\n");
        printf("请输入您的选择(0-9):\n");
        //接受用户的输入
        scanf("%d",&choice);
        printf("**************************************\n");
        
        switch(choice)
    {
    case 1:
    //函数功能:输入学生信息
        printf("请输入录入学生数(最大值为10):\n");
        scanf("%d", &n);
        InPut_Student_Inf (n);
        break;

    case 2:
    OutPut_Student_Inf(n);//输出学生信息
    break;

    case 3:
        Find_Accord_Num(n); //按照学号查找某个学生信息
    break;

    case 4:
        Find_Accord_Name(n); //按照姓名查找某个学生信息
        break;

    case 5:
        Rank_Accord_Num(n);//按照学号对学生排序
        break;

    case 6:
        //Rank_Accord_Name(n);//按照姓名对学生排序
        break;

    case 7:
        Rank_Accord_Sum (n);//按照总成绩对学生排序
        break;

    case 8:
        Change_Student_Inf(n);//修改学生信息
        break;

    case 9:
        Delete_Student_Inf(n);//删除学生信息
        break;
    case 0:
        //退出程序
        printf("程序结束,谢谢使用!\n");
        exit(0);

    default :
        printf("您+输入的菜单项有误,请重新输入!\n");
}
        

}
        return 0;
    }
//1.函数功能:输入学生信息
void InPut_Student_Inf(double n)
{
   
    printf("现在开始输入学生信息\n");
     for (i = 0; i<n; ++i)
    {
        printf("\n请输入第%d个学生的信息:\n", i + 1);
        printf("\n学号:");
        scanf("%d", &num[i]);
        printf("\n姓名:");
        scanf("%s", names[i]);
        printf("\n数学成绩:");
        scanf("%f", &matchs[i]);
        printf("\n英语成绩:");
        scanf("%f", &english[i]);
        printf("\n计算机成绩:");
        scanf("%f", &computer[i]);
        //计算总成绩
        sum[i] = matchs[i] + english[i] + computer[i];
    }
}
//2.输出学生成绩
void OutPut_Student_Inf(double n)
{

    printf("\n学号\t姓名\t数学成绩\t英语成绩\t计算机成绩\t总成绩\n");
    printf("----------------------------------------------------------\n");

    for (i = 0; i<n; ++i)
    {
        printf("%d\t%s\t%f\t\t%f\t\t%f\t\t%f\n", num[i], names[i], matchs[i], english[i], computer[i], sum[i]);
    }
    printf("-------------------------------------------------------\n");
}
//3.按照学号查找某个学生信息
int Find_Accord_Num(int n)
{
    int nums;
    double result;
    printf("请输入待查找的学生学号:");
    scanf("%d",&nums);
    result= -1;
    for (i = 0; i<n; ++i)
    {
        if (nums == num[i])
        {
            result = i;

            break;
        }

    }

    //最后判断q值
    if (result == -1)
    {
        printf("没有该学生信息!\n");
        return 0;
    }
    else
    {
        //先打印表头
        printf("\n学号\t\t姓名\t\t数学成绩\t英语成绩\t计算机成绩\t总成绩\n");
        //再打印数据

       printf("%d\t%s\t%f\t\t%f\t\t%f\t\t%f\n", num[i], names[i], matchs[i], english[i], computer[i], sum[i]);
        printf("打印出查找结果!\n");
    }
    return 1;
}
//4.按照姓名查找某个学生的信息
double Find_Accord_Name(double n)
{
    char name[200];
    double result;
    printf("请输入待查找的学生姓名:");
    scanf("%s", name);
    result = -1;
    for (i = 0; i<n; ++i)
    {
        if (strcmp(name, names[i]) == 0)
        {
            result = i;
            break;
        }
    }
    if (result == -1)
    {//未找到结果
        printf("没有该学生信息!\n");
        return 0;
    }
    else//找到结果
    {
        printf("\n学号\t姓名\t数学成绩\t英语成绩\t计算机成绩\t总成绩\n");
        printf("%d\t%s\t%f\t\t%f\t\t%f\t\t%f\n", num[i], names[i], matchs[i], english[i], computer[i], sum[i]);
        printf("已完成查找!\n");
    }


    return 1;
}
//5.按照学号对学生排序
void Rank_Accord_Num(int n)
{
    int min,max;
    for(i=0; i<n; ++i)  //复制临时数组
    {
        temp_num[i] = num[i];
    }

    max = 0;        //查找学号最大值,将其下标存至sort数组的最后一个值中
    for(j=1; j<n; j++)
    {
        if(temp_num[max]<temp_num[j])
            max = j;
    }
    sort[n-1] = max;    //sort数组的最后一个数
    for(i=0; i<n-1; ++i)
    {
        min = i;        //查找学号最小值
        for(j=0; j<n; ++j)
        {
            if(temp_num[min]>temp_num[j])
                min = j;
        }
        //sort数组记录排序的学生信息的下标
        sort[i] = min;
        temp_num[min] = temp_num[max];      //利用临时数组将查找过的学生信息的学号设为最大值,排除查找干扰        
    }
    for(i=0; i<n; ++i)  //再复制一次临时数组
    {
        temp_num[i] = num[i];
        strcpy(temp_names[i],names[i]);
        temp_matchs[i] = matchs[i];
        temp_english[i] = english[i];
        temp_computer[i] = computer[i];
        temp_sum[i] = sum[i];
    }

    for(i=0; i<n; i++)  //按照下标对原数组进行修改
    {
        num[i] = temp_num[sort[i]];
        strcpy(names[i],temp_names[sort[i]]);
        matchs[i] = temp_matchs[sort[i]];
        english[i] = temp_english[sort[i]];
        computer[i] = temp_computer[sort[i]];
        sum[i] = temp_sum[sort[i]];
    }
    printf("排序完毕,请按菜单键2查看排序结果!\n");
    return 1;
}
//6.按照姓名对学生排序

//7.按照总成绩对学生排序
void Rank_Accord_Sum(double n)
{
    double min,max;
    for(i=0; i<n; ++i)  //复制临时数组
    {
        temp_sum[i] = sum[i];
    }

    max = 0;        //查找总成绩最大值,将其下标存至sort数组的最后一个值中
    for(j=1; j<n; j++)
    {
        if(temp_sum[max]<temp_sum[j])
            max = j;
    }
    sort[n-1] = max;    //sort数组的最后一个数
    for(i=0; i<n-1; ++i)
    {
        min = i;        //查找总成绩最小值
        for(j=0; j<n; ++j)
        {
            if(temp_sum[min]>temp_sum[j])
                min = j;
        }
        //sort数组记录排序的学生信息的下标
        sort[i] = min;
        temp_sum[min] = temp_sum[max];      //利用临时数组将查找过的学生信息的总成绩设为最大值,排除查找干扰      
    }
    for(i=0; i<n; ++i)  //再复制一次临时数组
    {
        temp_num[i] = num[i];
        strcpy(temp_names[i],names[i]);
        temp_matchs[i] = matchs[i];
        temp_english[i] = english[i];
        temp_computer[i] = computer[i];
        temp_sum[i] = sum[i];
    }

    for(i=0; i<n; i++)  //按照下标对原数组进行修改
    {
        num[i] = temp_num[sort[i]];
        strcpy(names[i],temp_names[sort[i]]);
        matchs[i] = temp_matchs[sort[i]];
        english[i] = temp_english[sort[i]];
        computer[i] = temp_computer[sort[i]];
        sum[i] = temp_sum[sort[i]];
    }
    printf("排序完毕,请按菜单键2查看排序结果!\n");
    return 1;
}
//8.修改学生信息
int Change_Student_Inf(int n)
{
    int nums;
    double result;
    printf("请输入待修改的学生学号:");
    scanf("%d",&nums);
    result= -1;
    for (i = 0; i<n; ++i)
    {
        if (nums == num[i])
        {
            result = i;
            break;
        }
    }

    //最后判断q值
    if (result == -1)
    {
        printf("没有该学生信息!\n");
        return 0;
    }
    else    //修改信息值
    {
        printf("请重新输入该学生信息:\n");
        printf("学号:\n");
        scanf("%d",&num[result]);
        printf("姓名:\n");
        scanf("%s",names[result]);
        printf("数学成绩:\n");
        scanf("%f",&matchs[result]);
        printf("英语成绩:\n");
        scanf("%f",&english[result]);
        printf("计算机成绩:\n");
        scanf("%f",&computer[result]);
        sum[result] = matchs[result] + english[result] + computer[result];
    }
    return 1;
}

//9.删除学生信息
int Delete_Student_Inf(int n)
{
    int nums;
    double result;
    printf("请输入待删除的学生学号:");
    scanf("%d",&nums);
    result= -1;
    for (i = 0; i<n; ++i)
    {
        if (nums == num[i])
        {
            result = i;
            break;
        }
    }
    //最后判断q值
    if (result == -1)
    {
        printf("没有该学生信息!\n");
        return 0;
    }
    else    //删除当前学生信息即为将数组从result的位置依次前挪一个位置
    {
        for(i=result; i<n-1; ++i)   //最后在main函数中,要将n的值减1
        {
            num[i] = num[i+1];
            strcpy(names[i],names[i+1]);
            matchs[i] = matchs[i+1];
            english[i] = english[i+1];
            computer[i] = computer[i+1];
            sum[i] = sum[i+1];
        }

    }
    return 1;
}
搜索更多相关主题的帖子: 学生 double 学生信息 printf result 
2019-05-13 14:05
德华
Rank: 1
等 级:新手上路
帖 子:7
专家分:0
注 册:2019-5-10
收藏
得分:0 
多谢大佬
2019-05-15 21:01
德华
Rank: 1
等 级:新手上路
帖 子:7
专家分:0
注 册:2019-5-10
收藏
得分:0 
#ifdef _STU_SYS_DEBUG
#define DGB_SCORE(a,b,c) a,b,c,a+b+c
    g_students[0] = { 5, "Epic Clak", DGB_SCORE(60.5,60,20) };
    g_students[1] = { 8, "Tom Buddy", DGB_SCORE(70,60,30) };
    g_students[2] = { 2, "Carry Ensn", DGB_SCORE(60,80.5,60) };
    g_students[3] = { 6, "Amber Shrik", DGB_SCORE(60,60,30.5) };
    g_students[4] = { 1, "Zed Tedd", DGB_SCORE(60.5,90.5,60.5) };
    g_students[5] = { 9, "Omini Succk", DGB_SCORE(60,70.5,70) };
    g_students[6] = { 7, "Uplay Tesee", DGB_SCORE(60.5,10.5,60) };
    g_students[7] = { 4, "Stream Geak", DGB_SCORE(30,60.5,40) };
    g_stu_idx = 8;
#endif /* _STU_SYS_DEBUG */

#define QCKIDX(idx) (&g_students[idx])

int g_stu_idx = 0;
student_t g_students[STUDENT_COUNT];
大佬能解释一下这三个地方是什么意思吗
2019-05-16 20:17
快速回复:编写了一个学生成绩管理系统,但总是报错,求各路大佬指教
数据加载中...
 
   



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

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