年级学习成绩管理系统-GSSM

初次编辑时间:2010-04-13

1.相关说明

#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#define NAME_LENGTH 21
#define COURSE_NUMBER 5
#define BASE_INFORMATION_NUMBER 5
#define OK 1
#define ERROR 0
#define OVERFLOW -1
#define STATUS int
const char Cor_Name[COURSE_NUMBER][NAME_LENGTH]={"数学","英语","数字电路","数据结构","信号与系统"}; //常量数组,用于存储课程名称
const char Base_Information[BASE_INFORMATION_NUMBER][NAME_LENGTH]={"学号","姓名","性别","籍贯","电话号码"};//常量数组,存储学生基本信息项目
typedef struct Student
{   //定义学生节点 ,及其指针数据类型
    int Flag;   //标志学生的成绩是否已经录入,为 1 是表示已录入,为 0 时表示尚未录入
    char Stu_Inf[BASE_INFORMATION_NUMBER][NAME_LENGTH];  //存放学生的基本信息
    float Cor_Scr[COURSE_NUMBER];    //存放学生的各科成绩
    struct Student *Next;            //指针类型,指向下一个学生
}Stu,*StuPtr;
typedef struct Class
{   //定义班级节点 ,及其指针数据类型
    char Cla_Name[NAME_LENGTH];      //存放班名
    StuPtr StuHead,StuLast;          //定义学生节点指针类型指针,分别指向该班级第一个和最后一个同学
    int NumStu;                      //记录本班学生总数
    struct Class *Next;              //指针类型, 指向系一个班级
}Cla,*ClaPtr;
typedef struct GradeStudentScoreManagement
{   //定义年级学生成绩管理系统
    ClaPtr ClaHead,ClaLast;          //定义班级节点指针类型指针,分别指向该系统第一个和最后一个班级
    int NumCla;                      //记录本系统,班级总数
}GSSM,*GssmPtr;

void InputStuBaseInf(GSSM &gssm,StuPtr &pstu)
{
//gssm系统已建立,输入学生pstu的基本信息成绩,并以pstu返回
}
void InputAllStuCourseScore(GSSM &gssm)
{
//gssm系统已建立,为该该系统中所有同学录入成绩
}
STATUS ResetSomeStuSomeCourseScore(GSSM &gssm,char *StuNum,char *ResCorName)
{
//gssm已存在,更改某个同学(学号为StuNum)某门课程(ResCorName)的成绩
}
STATUS InitGSSM(GSSM &gssm)
{
//初始化gssm(年级学生成绩管理系统)
//gssm.ClaHead=NULL;
//gssm.ClaLast=NULL;
//gssm.NumCla=0;
}
STATUS CreateGSSM(GSSM &gssm)
{
//gssm已存在,但gssm为空,将班级及各班学生加入gssm
}
STATUS EnStudent(GSSM &gssm,ClaPtr &pcla)
{
//gssm已存在,向一个班级(pcla)中添加一个学生,并登记其基本信息  ,尾插法添加学生,且无头结点
}
STATUS DeStudent(GSSM &gssm,char *&DeStuNum)
{
 //gssm已存在,修改学号为ResetStuNum的学生的基本信息,若该学生不存在,则返回ERROR
}
STATUS ResetStudentBaseInformation(GSSM &gssm,char *&ResetStuNum)
{
//gssm已存在,删除学号为DeStuNum的学生,并以DeStuNum返回该学生的学号,若该学生不存在,则返回ERROR
}
STATUS EnClass(GSSM &gssm)
{
//gssm已存在,添加一个班级并添加本班所有学生并登记每个学生的基本信息
//尾插法添加班级,且无头节点
}
STATUS DeClass(GSSM &gssm,char *&DeClaName)
{
//gssm已存在,删除班名为DeClaName的班级 ,并以DeClaName返回班名,若该班级不存在返回ERROR
}
STATUS SearchClass(GSSM &gssm,ClaPtr &pcla,ClaPtr &qcla,char *PSch_Cla_Name)
{
//gssm已存在,查找学号为PSch_Stu_Num 的同学,并以pcla返回其所在班级,以pstu返回其指针,
//以qstu返回其前一位同学的指针(qstu可能为NULL),若该同学不存在,返回ERROR。
}
STATUS SearchStudent(GSSM &gssm,ClaPtr &pcla,StuPtr &pstu,StuPtr &qstu,char *PSch_Stu_Num)
{
//gssm已存在,查找一个班级,若查找成功以pcla返回其指针,以qcla返回该在班级之前的班级的指针(qcla可能为NULL),否则返回 ERROR
}
STATUS DisplaySomeStuInf(GSSM gssm,char *StuNum)
{
//gssm已存在,显示学号为StuNum的学生的基本信息
}
STATUS DisplaySomeClaInf(GSSM gssm,char *ClaName)
{
//gssm已存在,显示班名为ClaName的班级所有学生的基本信息
}
STATUS DisplayAllStuInf(GSSM gssm)
{
//gssm已存在,显示本系统所有学生的基本信息和全部成绩信息
}
STATUS ClassManagement(GSSM &gssm)
{
//gssm已存在,班级管理模块函数,其自定义变量Section取不同值时实现不同功能(1: 向系统中录入班级\n2: 从系统中删除班级\n0: 退出班级管理模块 )
}
STATUS StudentManagement(GSSM &gssm)
{
//gssm已存在,学生管理模块函数,其自定义变量Section取不同值时实现不同功能(1: 向系统中录入学生\n2: 从系统中删除学生\n
//                          3: 修改学生的基本信息\n0: 退出学生管理模块)
}
STATUS ScoreManagement(GSSM &gssm)
{
//gssm已存在,成绩管理模块函数,其自定义变量Section取不同值时实现不同功能(1: 登记各班所有同学各科成绩\n2: 更改某个同学的某门课程的成绩\n
//                   0: 退出成绩管理模块)
}
STATUS SearchScan(GSSM gssm)
{
//gssm已存在,查询、浏览模块函数,其自定义变量Section取不同值时实现不同功能,(1: 查询某个同学的基本信息和各科成绩\n
//                                         2: 查询某班全部同学的基本信息和成绩\n
//                3: 查询所有同学的基本信息和各科成绩\n0: 退出查询、浏览模块\n)
}
                        
STATUS DestroyGSSM(GSSM &gssm)
{
//gssm已存在,销毁gssm,释放动态申请空间
}


注释:(“GSSM” is short for “GradeStudentScoreManagement”,即“年级学生成绩管理”系统)
1.本程序中各种名称(如:学号、姓名、课程名称等)均以字符串形式存储,并假设其最大长度不超过20(#define NAME_LENGTH 21)。
  并且在输出时假设个名称长度不超过10(如输出时以%-10s格式输出
2.本程序中假设学生的基本信息项目只有5项(#define COURSE_NUMBER 5),
  并用常量数组存储各项目的名称(const char Base_Information[BASE_INFORMATION_NUMBER][NAME_LENGTH]={"学号","姓名","性别","籍贯","电话号码"};
3.本程序中假设学生所学课程只有5门(#define BASE_INFORMATION_NUMBER 5),
  并用常量数组存储各项目的名称(const char Base_Information[BASE_INFORMATION_NUMBER][NAME_LENGTH]={"学号","姓名","性别","籍贯","电话号码"};
4.本程序中定义了三个结构体类型(Stu、Cla、GSSM)和两个对应的指针数据类型(StuPtr、ClaPtr),其具体形式及内部各成员变量如上面定义所述。
5.为了减少不必要的重复书写某段类似程序,定义了20个自定义函数,各函数功能如上所述。
6.在显示学生的信息时考虑美观因素,显示函数中做了一些“冗余”的处理。

2.代码

2.1:自定义头文件:GSSM.h:

#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#define NAME_LENGTH 20
#define COURSE_NUMBER 5
#define BASE_INFORMATION_NUMBER 5
#define OK 1
#define ERROR 0
#define OVERFLOW -1
#define STATUS int
const char Cor_Name[COURSE_NUMBER][NAME_LENGTH]={"数学","英语","数字电路","数据结构","信号与系统"}; //常量数组,用于存储课程名称
const char Base_Information[BASE_INFORMATION_NUMBER][NAME_LENGTH]={"学号","姓名","性别","籍贯","电话号码"};//常量数组,存储学生基本信息项目
typedef struct Student
{   //定义学生节点 ,及其指针数据类型
    int Flag;   //标志学生的成绩是否已经录入,为 1 是表示已录入,为 0 时表示尚未录入
    char Stu_Inf[BASE_INFORMATION_NUMBER][NAME_LENGTH];  //存放学生的基本信息
    float Cor_Scr[COURSE_NUMBER];    //存放学生的各科成绩
    struct Student *Next;            //指针类型,指向下一个学生
}Stu,*StuPtr;
typedef struct Class
{   //定义班级节点 ,及其指针数据类型
    char Cla_Name[NAME_LENGTH];      //存放班名
    StuPtr StuHead,StuLast;          //定义学生节点指针类型指针,分别指向该班级第一个和最后一个同学
    int NumStu;                      //记录本班学生总数
    struct Class *Next;              //指针类型, 指向系一个班级
}Cla,*ClaPtr;
typedef struct GradeStudentScoreManagement
{   //定义年级学生成绩管理系统
    ClaPtr ClaHead,ClaLast;          //定义班级节点指针类型指针,分别指向该系统第一个和最后一个班级
    int NumCla;                      //记录本系统,班级总数
}GSSM,*GssmPtr;

void InputStuBaseInf(GSSM &gssm,StuPtr &pstu);
void InputAllStuCourseScore(GSSM &gssm);
STATUS ResetSomeStuSomeCourseScore(GSSM &gssm,char *StuNum,char *ResCorName);
STATUS InitGSSM(GSSM &gssm);
STATUS CreateGSSM(GSSM &gssm);
STATUS EnStudent(GSSM &gssm,ClaPtr &pcla);
STATUS DeStudent(GSSM &gssm,char *&DeStuNum);
STATUS ResetStudentBaseInformation(GSSM &gssm,char *&ResetStuNum);
STATUS EnClass(GSSM &gssm);
STATUS DeClass(GSSM &gssm,char *&DeClaName);
STATUS SearchClass(GSSM &gssm,ClaPtr &pcla,ClaPtr &qcla,char *PSch_Cla_Name);
STATUS SearchStudent(GSSM &gssm,ClaPtr &pcla,StuPtr &pstu,StuPtr &qstu,char *PSch_Stu_Num);
STATUS DisplaySomeStuInf(GSSM gssm,char *StuNum);
STATUS DisplaySomeClaInf(GSSM gssm,char *ClaName);
STATUS DisplayAllStuInf(GSSM gssm);
STATUS ClassManagement(GSSM &gssm);
STATUS StudentManagement(GSSM &gssm);
STATUS ScoreManagement(GSSM &gssm);
STATUS SearchScan(GSSM gssm);
STATUS DestroyGSSM(GSSM &gssm);

void InputStuBaseInf(GSSM &gssm,StuPtr &pstu)
{ //输入学生pstu的基本信息成绩
    int i;
    printf("请输入学生的基本信息:\n");
    for(i=0;i<BASE_INFORMATION_NUMBER;i++)
    {
        printf("%s:",Base_Information[i]);
        scanf("%s",pstu->Stu_Inf[i]);
    }
}
void InputAllStuCourseScore(GSSM &gssm)
{   //为该该系统中所有同学录入成绩
    int i=0,j,k;
    ClaPtr pcla=gssm.ClaHead;
    StuPtr pstu;
    if(gssm.NumCla==0){printf("该系统目前尚且为空!\n");return ;}
    if(i<gssm.NumCla)printf("情输入各学生的各科成绩\n");
    while(i<gssm.NumCla)
    {
        j=0;pstu=pcla->StuHead;
        printf("%s\n",pcla->Cla_Name);
        while(j<pcla->NumStu)
        {
            printf("%-10s:   %-10s\n",Base_Information[0],pstu->Stu_Inf[0]);
            for(k=0;k<COURSE_NUMBER;k++)
            {
                printf("%s:",Cor_Name[k]);
                scanf("%f",&pstu->Cor_Scr[k]);
            }
            j++;pstu->Flag=1; pstu=pstu->Next;
        }
        i++;pcla=pcla->Next;
    }
    printf("所有同学的成绩均已成功录入!\n");
    return;
}
STATUS ResetSomeStuSomeCourseScore(GSSM &gssm,char *StuNum,char *ResCorName)
{   //更改某个同学某门课程的成绩
    int i;
    StuPtr pstu=NULL,qstu=NULL;
    ClaPtr pcla=NULL;
    if(gssm.NumCla==0){printf("该系统目前尚且为空!\n");return ERROR;}
    printf("请输入所要更改的学生的学号:");
    scanf("%s",StuNum);
    if(!SearchStudent(gssm,pcla,pstu,qstu,StuNum))
    {
        printf("本管理系统尚未录入学号为 %s 的同学!\n",StuNum);
        return ERROR;
    }
    printf("请输入所要更改的课程的名称:");
    scanf("%s",ResCorName);
    for(i=0;i<COURSE_NUMBER;i++)
    {
        if(strcmp(Cor_Name[i],ResCorName)==0)
        {
            scanf("%f",&pstu->Cor_Scr[i]);
            return OK;
        }
    }
    printf("课程 %s 不存在\n",ResCorName);
    return ERROR;
}
STATUS InitGSSM(GSSM &gssm)
{   //初始化年级学生成绩管理系统
    gssm.ClaHead=NULL;
    gssm.ClaLast=NULL;
    gssm.NumCla=0;
    return OK;
}
STATUS CreateGSSM(GSSM &gssm)
{   //gssm已存在,但gssm为空,将班级及各班学生加入gssm
    int i=0,n;
    ClaPtr pcla=NULL;
    printf("请输入要加入GSSM系统的班级的总数:");
    scanf("%d",&n);
    while(i<n)
    {
        if(!EnClass(gssm)){DestroyGSSM(gssm);return ERROR;}
        i++;
    }
}
STATUS EnStudent(GSSM &gssm,ClaPtr &pcla)
{   //向一个班级中添加一个学生并登记其基本信息  ,尾插法添加学生,且无头结点
    StuPtr pstu=NULL;
    if(!(pstu=(StuPtr)malloc(sizeof(Stu))))return ERROR;
    InputStuBaseInf(gssm,pstu);
    pstu->Next=NULL; pstu->Flag=0;
    if(!pcla->NumStu)pcla->StuHead=pcla->StuLast=pstu;
    else{pcla->StuLast->Next=pstu;pcla->StuLast=pstu;}
    ++pcla->NumStu;
    return OK;
}
STATUS ResetStudentBaseInformation(GSSM &gssm,char *ResetStuNum)
{   //修改学号为ResetStuNum的学生的基本信息,若该学生不存在,则返回ERROR
    ClaPtr pcla=NULL;
    StuPtr pstu=NULL,qstu=NULL;
    printf("请输入要修改的学生的学号:");
    scanf("%s",ResetStuNum);
    if(!SearchStudent(gssm,pcla,pstu,qstu,ResetStuNum))
    {
        printf("本管理系统尚未录入学号为 %s 的同学!\n",ResetStuNum);
        strcpy(ResetStuNum,"\0");
        return ERROR;
    }
    InputStuBaseInf(gssm,pstu);
    return OK;
}
STATUS DeStudent(GSSM &gssm,char *DeStuNum)
{   //删除学号为DeStuNum的学生,并以DeStuNum返回该学生的学号,若该学生不存在,则返回ERROR
    ClaPtr pcla=NULL;
    StuPtr pstu=NULL,qstu=NULL;
    if(gssm.NumCla==0){printf("该系统目前尚且为空!\n");return ERROR;}
    printf("请输入所要删除的学生的学号:");
    scanf("%s",DeStuNum);
    if(!SearchStudent(gssm,pcla,pstu,qstu,DeStuNum))
    {
        printf("本管理系统尚未录入学号为 %s 的同学!\n",DeStuNum);
        strcpy(DeStuNum,"\0");
        return ERROR;
    }
    if(!qstu)pcla->StuHead=pstu->Next;
    else qstu->Next=pstu->Next;
    if(pstu==pcla->StuLast)pcla->StuLast=qstu;
    free(pstu);
    --pcla->NumStu;
    return OK;
}

STATUS EnClass(GSSM &gssm)
{   //添加一个班级并添加本班所有学生并登记每个学生的基本信息
    //尾插法添加班级,且无头节点
    int i=0,n;
    StuPtr pstu=NULL;
    ClaPtr pcla=NULL;
    if(!(pcla=(ClaPtr)malloc(sizeof(Cla)))){printf("添加班级失败\n");return ERROR;}
    pcla->StuHead=pcla->StuLast=NULL,pcla->NumStu=0;pcla->Next=NULL;
    if(!gssm.NumCla)gssm.ClaHead=gssm.ClaLast=pcla;
    else {gssm.ClaLast->Next=pcla; gssm.ClaLast=pcla;}
    ++gssm.NumCla;
    printf("请输入要添加的班级的班名:");
    scanf("%s",pcla->Cla_Name);
    printf("请输入本班的学生人数:");
    scanf("%d",&n);
    while(i<n)    //尾插法添加学生,且无头结点
    {
        if(!EnStudent(gssm,pcla))
        {
            printf("添加学生失败\n");
            return ERROR;
        }
        i++;
    }
    return OK;
}
STATUS DeClass(GSSM &gssm,char *DeClaName)
{   //删除班名为DeClaName的班级 ,并以DeClaName返回班名,若该班级不存在返回ERROR
    StuPtr pstu=NULL;
    ClaPtr pcla=NULL,qcla=NULL;
    if(gssm.NumCla==0){printf("该系统目前尚且为空!\n");return ERROR;}
    printf("请输入要删除的班级的班名:");
    scanf("%s",DeClaName);
    if(!SearchClass(gssm,pcla,qcla,DeClaName))
    {
        printf("本管理系统尚未录入班名为 %s 的班级!\n",DeClaName);
        strcpy(DeClaName,"\0");
        return ERROR;
    }
    --gssm.NumCla;
    if(!qcla)gssm.ClaHead=pcla->Next;
    else qcla->Next=pcla->Next;
    if(pcla==gssm.ClaLast)gssm.ClaLast=qcla;
    if(!pcla->NumStu){free(pcla);return OK;}
    while(pcla->NumStu--)
    {
        pstu=pcla->StuHead;
        pcla->StuHead=pcla->StuHead->Next;
        free(pstu);
    }
    free(pcla);
    return OK;
}
STATUS SearchStudent(GSSM &gssm,ClaPtr &pcla,StuPtr &pstu,StuPtr &qstu,char *PSch_Stu_Num)
{   //查找学号为PSch_Stu_Num 的同学,并以pcla返回其所在班级,以pstu返回其指针,
    //以qstu返回其前一位同学的指针,若该同学不存在,返回ERROR。
    int i=0,j;
    pcla=gssm.ClaHead;
    while(i<gssm.NumCla)
    {
        j=0;qstu=NULL;pstu=pcla->StuHead;
        while(j<pcla->NumStu)
        {
            if(strcmp(pstu->Stu_Inf[0],PSch_Stu_Num)==0)return OK;
            qstu=pstu;
            pstu=pstu->Next;
            j++;
        }
        pcla=pcla->Next;
        i++;
    }
    pcla=NULL;pstu=NULL;qstu=NULL;
    return ERROR;
}
STATUS SearchClass(GSSM &gssm,ClaPtr &pcla,ClaPtr &qcla,char *PSch_Cla_Name)
{//查找一个班级,若查找成功以pcla返回其指针,以qcla返回该班级上一个班级的指针否则返回 ERROR
    int i=0;
    if(gssm.NumCla==0){printf("该系统目前尚且为空!\n");return ERROR;}
    qcla=NULL;pcla=gssm.ClaHead;
    while(i<gssm.NumCla)
    {
        if(strcmp(pcla->Cla_Name,PSch_Cla_Name)==0)return OK;
        qcla=pcla;
        pcla=pcla->Next;
        i++;
    }
    pcla=NULL;
    return ERROR;
}

STATUS DisplaySomeStuInf(GSSM gssm,char *StuNum)
{   //显示学号为StuNum的学生的基本信息
    int k;
    StuPtr pstu=NULL,qstu=NULL;
    ClaPtr pcla=NULL;
    if(gssm.NumCla==0){printf("该系统目前尚且为空!\n");return ERROR;}
    printf("请输入所要查询的学生的学号:");
    scanf("%s",StuNum);
    if(!SearchStudent(gssm,pcla,pstu,qstu,StuNum))
    {
        printf("本管理系统尚未录入学号为 %s 的同学!\n",StuNum);
        return ERROR;
    }
    printf("基本信息:");
    for(k=0;k<BASE_INFORMATION_NUMBER;k++)printf("%-10s",Base_Information[k]);
    printf("\n         ");
    for(k=0;k<BASE_INFORMATION_NUMBER;k++)printf("%-10s",pstu->Stu_Inf[k]);
    printf("\n课程名称:");
    for(k=0;k<COURSE_NUMBER;k++)printf("%-10s",Cor_Name[k]);
    printf("\n各科成绩:");
    if(pstu->Flag)
        for(k=0;k<COURSE_NUMBER;k++)printf("%-10.2f",pstu->Cor_Scr[k]);
    else printf("该同学成绩尚未录入!");
    printf("\n");
    return OK;
}
STATUS DisplaySomeClaInf(GSSM gssm,char *ClaName)
{   //显示班名为ClaName的班级所有学生的基本信息
    int i=0,k;
    StuPtr pstu=NULL;
    ClaPtr pcla=NULL,qcla=NULL;
    if(gssm.NumCla==0){printf("该系统目前尚且为空!\n");return ERROR;}
    printf("请输入所要查询的班级的班名:");
    scanf("%s",ClaName);
    if(!SearchClass(gssm,pcla,qcla,ClaName))
    {
        printf("本管理系统尚未录入班名为 %s 的班级!\n",ClaName);
        return ERROR;
    }
    pstu=pcla->StuHead;
    if(pcla->NumStu==0){printf("该班级还没有录入学生!");return OK;}
    while(i<pcla->NumStu)
    {   printf("学生%4d:\n基本信息:",i+1);
        for(k=0;k<BASE_INFORMATION_NUMBER;k++)printf("%-10s",Base_Information[k]);
        printf("\n         ");
        for(k=0;k<BASE_INFORMATION_NUMBER;k++)printf("%-10s",pstu->Stu_Inf[k]);
        printf("\n课程名称:");
        for(k=0;k<COURSE_NUMBER;k++)printf("%-10s",Cor_Name[k]);
        printf("\n各科成绩:");
        if(pstu->Flag)
            for(k=0;k<COURSE_NUMBER;k++)printf("%-10.2f",pstu->Cor_Scr[k]);
        else printf("该同学成绩尚未录入");
        printf("\n");
        pstu=pstu->Next;
        i++;
    }
    return OK;
}
STATUS DisplayAllStuInf(GSSM gssm)
{   //显示本系统所有学生的基本信息和全部成绩信息
    int i=0,j,k;
    ClaPtr pcla=gssm.ClaHead;
    StuPtr pstu;
    if(gssm.NumCla==0){printf("该系统目前尚且为空!\n");return ERROR;}
    while(i<gssm.NumCla)
    {
        j=0;pstu=pcla->StuHead;
        printf("班级 %4d:\n     班级名称: %s\n     ",++i,pcla->Cla_Name);
        if(pcla->NumStu==0){printf("该班级还没有录入学生!");pcla=pcla->Next;continue;}
        while(j<pcla->NumStu)
        {
            printf("学生%4d:\n     基本信息:",++j);
            for(k=0;k<BASE_INFORMATION_NUMBER;k++)printf("%-10s",Base_Information[k]);
            printf("\n              ");
            for(k=0;k<BASE_INFORMATION_NUMBER;k++)printf("%-10s",pstu->Stu_Inf[k]);
            printf("\n     课程名称:");
            for(k=0;k<COURSE_NUMBER;k++)printf("%-10s",Cor_Name[k]);
            printf("\n     各科成绩:");
            if(pstu->Flag)
                for(k=0;k<COURSE_NUMBER;k++)printf("%  6.2f  ",pstu->Cor_Scr[k]);
            else printf("该同学成绩尚未录入!");
            pstu=pstu->Next;
            printf("\n     ");
        }
        printf("\n\n");
        pcla=pcla->Next;
    }
    return OK;
}
STATUS ClassManagement(GSSM &gssm)
{   //班级管理
    int Section;
    char ClassName[NAME_LENGTH];
    printf("欢迎进入班级管理模块!\n");
    printf("请输入一个数字(1,2,0):\n");
    printf("1: 向系统中录入班级\n2: 从系统中删除班级\n0: 退出班级管理模块\n");
    scanf("%d",&Section);
    do
    {
        switch(Section)
        {
            case 1: if(EnClass(gssm))printf("该班级成功录入本系统!");
                    printf("请输入一个数字(1,2,0):");break;
            case 2: if(DeClass(gssm,ClassName))printf("该班级已被成功删除\n");
                    printf("请输入一个数字(1,2,0):");break;
            case 0: printf("你即将退出班级管理 模块……\n你已经返回GSSM!\n");return OK;
            default:printf("输入错误!请重新输入合法数字:");
        }
        scanf("%d",&Section);
    }while(Section);
    printf("你即将退出班级管理 模块……\n你已经返回GSSM!\n");
    return OK;
}
STATUS StudentManagement(GSSM &gssm)
{   //学生管理
    int Section;
    char StudentNumber[NAME_LENGTH];
    char ClassName[NAME_LENGTH];
    ClaPtr pcla=NULL,qcla=NULL;
    printf("欢迎进入学生管理模块!\n");
    printf("请输入一个数字(1,2,3,0):\n");
    printf("1: 向系统中录入学生\n2: 从系统中删除学生\n3: 修改学生的基本信息\n0: 退出学生管理模块\n");
    scanf("%d",&Section);
    do
    {
        switch(Section)
        {
            case 1: printf("请输入该同学所在班级的班名:");scanf("%s",ClassName);
                    if(!SearchClass(gssm,pcla,qcla,ClassName))
                    {
                        printf("本管理系统尚未录入班名为 %s 的班级!\n",ClassName);
                        printf("请先确认输入班名是否正确!\n");
                        printf("请再次输入合法数字:");
                        break;
                    }
                    if(EnStudent(gssm,pcla))printf("该学生已被成功录入本系统!\n");
                    printf("请输入一个数字(1,2,3,0):");break;
            case 2: if(DeStudent(gssm,StudentNumber))printf("该同学已被成功删除!\n");
                    printf("请输入一个数字(1,2,3,0):");break;
            case 3: if(ResetStudentBaseInformation(gssm,StudentNumber))printf("该学生的基本信息修改成功!\n");
                    printf("请输入一个数字(1,2,3,0):");break;
            case 0: printf("你即将退出学生管理 模块……\n你已经返回GSSM!\n");return OK;
            default:printf("输入错误!请重新输入合法数字:");
        }
        scanf("%d",&Section);
    }while(Section);
    printf("你即将退出学生管理 模块……\n你已经返回GSSM!\n");
    return OK;
}
STATUS ScoreManagement(GSSM &gssm)
{   //成绩管理
    int Section,i,j;
    char StudentNumber[NAME_LENGTH];
    char ResetCourseName[NAME_LENGTH];
    printf("欢迎进入成绩管理模块!\n");
    printf("%请输入一个数字(1,2,0):\n");
    printf("1: 登记各班所有同学各科成绩\n2: 更改某个同学的某门课程的成绩\n0: 退出成绩管理模块\n");
    scanf("%d",&Section);
    do
    {
        switch(Section)
        {
            case 1: InputAllStuCourseScore(gssm);
                    printf("%请输入一个数字(1,2,0):");break;
            case 2: ResetSomeStuSomeCourseScore(gssm,StudentNumber,ResetCourseName);
                    printf("%请输入一个数字(1,2,0):");break;
            case 0: printf("你即将退出成绩管理 模块……\n你已经返回GSSM!\n");return OK;
            default:printf("输入错误!请重新输入合法数字:");
        }
        scanf("%d",&Section);
    }while(Section);
    printf("你即将退出成绩管理 模块……\n你已经返回GSSM!\n");
    return OK;
}
STATUS SearchScan(GSSM gssm)
{   //查询、浏览学生信息
    int Section;
    char StudentNumber[NAME_LENGTH];
    char ClassName[NAME_LENGTH];
    printf("欢迎进入查询、浏览模块!\n");
    printf("请输入一个数字(1,2,3,0):\n");
    printf("1: 查询某个同学的基本信息和各科成绩\n2: 查询某班全部同学的基本信息和成绩\n");
    printf("3: 查询所有同学的基本信息和各科成绩\n0: 退出查询、浏览模块\n");
    scanf("%d",&Section);
    do
    {
        switch(Section)
        {
            case 1: DisplaySomeStuInf(gssm,StudentNumber);
                    printf("请输入一个数字(1,2,3,0):");break;
            case 2: DisplaySomeClaInf(gssm,ClassName);
                    printf("请输入一个数字(1,2,3,0):");break;
            case 3: DisplayAllStuInf(gssm);
                    printf("请输入一个数字(1,2,3,0):");break;
            case 0: printf("你即将退出查询浏览模块……\n你已经返回GSSM!\n");return OK;
            default:printf("输入错误!请重新输入:");
        }
        scanf("%d",&Section);
    }while(Section);
    printf("你即将退出查询浏览模块……\n你已经返回GSSM!\n");
    return OK;
}
STATUS DestroyGSSM(GSSM &gssm)
{   //销毁gssm
    int i=0,j;
    ClaPtr pcla=gssm.ClaHead;
    StuPtr pstu;
    if(gssm.NumCla==0){printf("该系统已经为空!\n");return OK;}
    while(i<gssm.NumCla)
    {
        j=0;pstu=pcla->StuHead;
        while(j<pcla->NumStu)
        {
            pcla->StuHead=pstu->Next;
            free(pstu);
            j++;
        }
        gssm.ClaHead=pcla->Next;
        free(pcla);
        i++;
    }
    return OK;
}

2.2主函数:GSSM.cpp

#include"GSSM.h"
int main()
{
    int Section=0;
    GSSM gssm;
    printf("首先创建年级学生成绩管理系统!\n");
    InitGSSM(gssm);
    CreateGSSM(gssm);
    printf("欢迎进入年级学生成绩管理系统\n");
    printf("请输入一个数字n(1,2,3,4, 0):\n");
    printf("1: 班级管理\n2: 学生管理\n3: 成绩管理\n4: 查询浏览\n0: 退出本系统\n");
        scanf("%d",&Section);
    do{
        switch(Section)
        {
            case 0: DestroyGSSM(gssm);
                    printf("你即将退出GSSM(年级学生成绩管理系统)……\n");return 0;
            case 1: ClassManagement(gssm);printf("请输入一个数字n(1,2,3,4, 0):\n");break;
            case 2: StudentManagement(gssm);printf("请输入一个数字n(1,2,3,4, 0):\n");break;
            case 3: ScoreManagement(gssm);printf("请输入一个数字n(1,2,3,4, 0):\n");break;
            case 4: SearchScan(gssm);printf("请输入一个数字n(1,2,3,4, 0):\n");break;
            default:printf("输入错误!请输入合法数字:\n");
        }
        scanf("%d",&Section);
    }while(Section);
    DestroyGSSM(gssm);
    printf("你即将退出GSSM(年级学生成绩管理系统)……\n");
    return 0;
}

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值