鱼C论坛

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

[已解决]设计一个学生成绩管理系统,每个学生包括5门成绩。实现10个学生信息录入,显示,统...

[复制链接]
发表于 2018-3-25 12:41:07 | 显示全部楼层 |阅读模式
10鱼币
#include<iostream>
#define MAXSIZE 10
#define Subject 5
using namespace std;
//定义学生类型 
typedef struct student
{
        char name[4];
        int grade[Subject];
} Student;
//定义顺序表 
typedef struct
{
        Student data[MAXSIZE];
        int last;
}SeqList;
//初始化顺序表 
SeqList *Init_Student()
{
        SeqList *pc=(SeqList *)malloc(sizeof(SeqList));
        pc->last=-1;
        return pc;
}
//录入学生信息
int Input_Student(SeqList *L,Student x)
{
        L->data[L->last+1]=x;
        L->last++; 
        return 1;
} 
//显示学生信息
int Print_Student(SeqList *L)
{
        for(int j=0;j<=L->last;j++)
        {
                cout<<L->data[j].name;
                for(int i=0;i<Subject;i++)
                {
                        cout<<L->data[j].grade[i];
                }
                cout<<endl;
        }
} 
//统计各科平均成绩 
int Average_achievement(SeqList *L)
{
        int sum=0;
        int aver[Subject];
        for(int i=0;i<Subject;i++)
        {
                for(int j=0;j<=L->last;j++)
                        sum += L->data[j].grade[i];
                aver[i]=sum/(L->last+1);
                sum=0;
        }
        for(int i=0;i<Subject;i++)
                cout<<aver[i];
        cout<<endl;
        return 1;        
}
//统计每个学生的总分
int Sum_achievement(SeqList *L)
{
        int sum=0;
        int sumach[MAXSIZE];
        for(int i=0;i<=L->last;i++)
        {
                for(int j=0;j<Subject;j++)
                        sum += L->data[i].grade[j];
                sumach[i]=sum;
        }
        for(int i=0;i<=L->last;i++)
                cout<<sumach[i];
        cout<<endl;
} 
//录入学生
int Input(SeqList *)
{
        int grade[Subject];
        char name[4];
        //输入待录入学生的信息 
        cout<<"请输入学生姓名:";
        scanf("%s",name);
        cout<<endl;
        cout<<"请输入学生的各科成绩:";
        for(int i=0;i<Subject;i++)
                cin>>grade[i];
        Student *pc=(Student *)malloc(sizeof(Student));
        for(int i=0;i<Subject;i++)
                pc->grade[i]=grade[i];        
        strcpy(pc->name,name);//这一步可能没有录入进顺序表中,才导致查询功能没有任何结果        
} 
void printChoice()
{
        printf("请选择功能:\n");
        printf("\t1.录入学生信息\n");
        printf("\t2.打印学生信息\n");
        printf("\t3.统计各科平均成绩\n");
        printf("\t4.统计每个学生的总分\n"); 
        printf("\t请选择:");
}
int main()
{
        SeqList *L=Init_Student();
        int choice;
        while(1)
        {
                printChoice();                
                int choice=-1;
                cin>>choice;
                switch(choice)
                {
                        case 1:
                                Input(L);
                                break;
                        case 2:
                                Print_Student(L);
                                break;
                        case 3:
                                Average_achievement(L);
                                break;
                        case 4:
                                Sum_achievement(L);
                                break;
                }
        }
        
}
录入学生信息没有问题,但是查询功能没有任何显示,第三个功能会导致程序崩溃,第四个功能也是没有任何结果,我个人猜测可能是录入进顺序表是发生错误导致数据没有录入进去。
最佳答案
2018-3-25 12:41:08
传参的问题,的确是录入的时候,包括后面操作这个结构体指针的时候
传参,若要改变该参数本身的存储,就需要传入该参数的地址,现在这个参数是指针,那传进去的就是该指针结构体的地址,函数里用的就是该结构体指针的指针(二级指针),使用的时候用 (*L)->XXX 这样的方式。
你自己修改一下,如果还有问题请追问

最佳答案

查看完整内容

传参的问题,的确是录入的时候,包括后面操作这个结构体指针的时候 传参,若要改变该参数本身的存储,就需要传入该参数的地址,现在这个参数是指针,那传进去的就是该指针结构体的地址,函数里用的就是该结构体指针的指针(二级指针),使用的时候用 (*L)->XXX 这样的方式。 你自己修改一下,如果还有问题请追问
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2018-3-25 12:41:08 | 显示全部楼层    本楼为最佳答案   
传参的问题,的确是录入的时候,包括后面操作这个结构体指针的时候
传参,若要改变该参数本身的存储,就需要传入该参数的地址,现在这个参数是指针,那传进去的就是该指针结构体的地址,函数里用的就是该结构体指针的指针(二级指针),使用的时候用 (*L)->XXX 这样的方式。
你自己修改一下,如果还有问题请追问
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-10-1 17:25

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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