Saber丶Lance 发表于 2018-3-25 12:41:07

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

#include<iostream>
#define MAXSIZE 10
#define Subject 5
using namespace std;
//定义学生类型
typedef struct student
{
        char name;
        int grade;
} Student;
//定义顺序表
typedef struct
{
        Student data;
        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=x;
        L->last++;
        return 1;
}
//显示学生信息
int Print_Student(SeqList *L)
{
        for(int j=0;j<=L->last;j++)
        {
                cout<<L->data.name;
                for(int i=0;i<Subject;i++)
                {
                        cout<<L->data.grade;
                }
                cout<<endl;
        }
}
//统计各科平均成绩
int Average_achievement(SeqList *L)
{
        int sum=0;
        int aver;
        for(int i=0;i<Subject;i++)
        {
                for(int j=0;j<=L->last;j++)
                        sum += L->data.grade;
                aver=sum/(L->last+1);
                sum=0;
        }
        for(int i=0;i<Subject;i++)
                cout<<aver;
        cout<<endl;
        return 1;       
}
//统计每个学生的总分
int Sum_achievement(SeqList *L)
{
        int sum=0;
        int sumach;
        for(int i=0;i<=L->last;i++)
        {
                for(int j=0;j<Subject;j++)
                        sum += L->data.grade;
                sumach=sum;
        }
        for(int i=0;i<=L->last;i++)
                cout<<sumach;
        cout<<endl;
}
//录入学生
int Input(SeqList *)
{
        int grade;
        char name;
        //输入待录入学生的信息
        cout<<"请输入学生姓名:";
        scanf("%s",name);
        cout<<endl;
        cout<<"请输入学生的各科成绩:";
        for(int i=0;i<Subject;i++)
                cin>>grade;
        Student *pc=(Student *)malloc(sizeof(Student));
        for(int i=0;i<Subject;i++)
                pc->grade=grade;       
        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;
                }
        }
       
}
录入学生信息没有问题,但是查询功能没有任何显示,第三个功能会导致程序崩溃,第四个功能也是没有任何结果,我个人猜测可能是录入进顺序表是发生错误导致数据没有录入进去。

丶忘却的年少o 发表于 2018-3-25 12:41:08

传参的问题,的确是录入的时候,包括后面操作这个结构体指针的时候
传参,若要改变该参数本身的存储,就需要传入该参数的地址,现在这个参数是指针,那传进去的就是该指针结构体的地址,函数里用的就是该结构体指针的指针(二级指针),使用的时候用 (*L)->XXX 这样的方式。
你自己修改一下,如果还有问题请追问
页: [1]
查看完整版本: 设计一个学生成绩管理系统,每个学生包括5门成绩。实现10个学生信息录入,显示,统...