初次编辑时间: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;
}