#include
#include
#include
#include
#include
#definenull'\0'
intshoudsave=0;
structstudent
{
charclas[20];
charname[20];
charclassnum[20];
floatbasis;
floatmajor;
floatelective;
floathumanity;
floatlaboratory;
floatsum;
floataverage;
};
typedefstructnode
{
structstudentdata;
structnode*next;
}Node,*Link;
voidmenu1()
{
printf("\n学生学分管理系统\n");
printf("********************************************************************************");
printf("说明:本系统旨在帮助师生方便,快捷地统计,管理学分。您可以进行输入,修改,查看,排序等操作,界面清爽,操作简单,欢迎您的使用。\n");
printf("********************************************************************************");
}//menu1
voidmenu2()
{
printf("菜单\n");
printf("\t\t0:退出本次登入\t\t\t5:清除屏幕内容\n");
printf("\t\t1:输入学生信息\t\t\t6:修改学生学分\n");
printf("\t\t2:删除学生信息\t\t\t7:显示学生学分\n");
printf("\t\t3:查询学生学分\t\t\t8:统计学生信息\n");
printf("\t\t4:排序学生学分\t\t\t9:保存学生学分\n");
}//menu2
voidmenu3()
{
printf("\n\t\tA:基础学分\t\t\tB:专业学分\n");
printf("\t\tC:选修学分\t\t\tD:人文学分\n");
printf("\t\tE:实验学分\t\t\tF:学分总和\n");
printf("\t\tG:平均学分\t\t\t\n");
printf("\n请选则您要排序的课程代码:");
}//menu3
voidmenu4()
{
printf("================================================================================");
}//menu4
voidtitle()
{
printf("班级\t学号\t姓名\t基础\t专业\t选修\t人文\t试验\t总分\t平均\n");
}//title
voiddata(Node*p,charfind[])
{
if(strcmp(p->data.name,find)==0)
printf("%s\t%s\t%s\t%3.1f\t%3.1f\t%3.1f\t%3.1f\t%3.1f\t%3.1f\t%3.1f\n",p->data.clas,p->data.classnum,p->data.name,p->data.basis,p->data.major,p->data.elective,p->data.humanity,p->data.laboratory,p->data.sum,p->data.average);
}//data
voiddata1(Node*p)
{
printf("%s\t%s\t%s\t%3.1f\t%3.1f\t%3.1f\t%3.1f\t%3.1f\t%3.1f\t%3.1f\n",p->data.clas,p->data.classnum,p->data.name,p->data.basis,p->data.major,p->data.elective,p->data.humanity,p->data.laboratory,p->data.sum,p->data.average);
}//data1
voiddata2(Node*p,charfind[])
{
if(strcmp(p->data.clas,find)==0)
printf("%s\t%s\t%s\t%3.1f\t%3.1f\t%3.1f\t%3.1f\t%3.1f\t%3.1f\t%3.1f\n",p->data.clas,p->data.classnum,p->data.name,p->data.basis,p->data.major,p->data.elective,p->data.humanity,p->data.laboratory,p->data.sum,p->data.average);
}//data2
Node*Locate(Linkl,charfind[],charmatch[])
{
Node*r;
if(strcmp(match,"classnum")==0)
{
r=l->next;
while(r!=NULL)
{
if(strcmp(r->data.classnum,find)==0)
returnr;
r=r->next;
}//while
}//if
elseif(strcmp(match,"name")==0)
{
r=l->next;
while(r!=NULL)
{
if(strcmp(r->data.name,find)==0)
returnr;
r=r->next;
}//while
}//elseif
elseif(strcmp(match,"clas")==0)
{
r=l->next;
while(r!=NULL)
{
if(strcmp(r->data.clas,find)==0)
returnr;
r=r->next;
}//while
}//elseif
return0;
}//Locate
voidinput(Linkl)
{
charclas[10];
Node*r,*p;
r=l;
while(r->next!=NULL)
r=r->next;
while(l)
{
printf("\n友情提示:输入'#'返回上一菜单\n");
printf("\n输入学生的班级号:");
scanf("%s",clas);
if(strcmp(clas,"#")==0)
break;
p=(Node*)malloc(sizeof(Node));
strcpy(p->data.clas,clas);
printf("输入学生的学号:");
scanf("%s",&p->data.classnum);
getchar();
printf("输入学生的姓名:");
scanf("%s",&p->data.name);
getchar();
printf("输入学生的基础分:");
scanf("%3.1f",&p->data.basis);
getchar();
printf("输入学生的专业分:");
scanf("%3.1f",&p->data.major);
getchar();
printf("输入学生的选修分:");
scanf("%3.1f",&p->data.elective);
getchar();
printf("输入学生的人文分:");
scanf("%3.1f",&p->data.humanity);
getchar();
printf("输入学生的实验分:");
scanf("%3.1f",&p->data.laboratory);
getchar();
p->data.sum=p->data.basis+p->data.major+p->data.elective+p->data.humanity+p->data.laboratory;
p->data.average=p->data.sum/5;
p->next=NULL;
r->next=p;
r=p;
}//while
}//input
voiddelet(Linkl)
{
charfind[10];
Node*p,*r;
if(!l->next)
{printf("\n\a对不起,无信息可删除!");
printf("\n");
return;
}//if
printf("\n请输入要删除学生的学号:");
scanf("%s",find);
p=Locate(l,find,"classnum");
if(p)
{r=l;
while(r->next!=p)
r=r->next;
r->next=p->next;
free(p);
printf("\n\a系统提示:信息删除成功!\n");
shoudsave=1;
}//if
else
{printf("\n\a对不起,无信息可删除!");
printf("\n");
}//else
}//delet
voidsearch(Linkl)
{
chartemp;
charfind[10];
Node*p;
if(!l->next)
{
printf("\n\a对不起,无信息可查询!");
printf("\n");
return;
}//if
printf("\n\t\t1:按学号查询\t2:按姓名查询\t3:按班级查询\n");
printf("\n请输入您要查询的方式:");
scanf("%s",&temp);
if(temp!='1'&&temp!='2'&&temp!='3')
printf("\n\a\a系统提示:您输入错误!\n");
elseif(temp=='1')
{
printf("\n请输入要查询的学号:");
scanf("%s",find);
p=Locate(l,find,"classnum");
}//elseif
elseif(temp=='2')
{
printf("\n请输入要查询的姓名:");
scanf("%s",find);
p=Locate(l,find,"name");
}//elseif
elseif(temp=='3')
{
printf("\n请输入您要查询的班级:");
scanf("%s",find);
p=Locate(l,find,"clas");
}//elseif
if(p)
{
printf("\n==============>查询结果<==============\n");
menu4();
title();
if(temp=='1')
data1(p);
elseif(temp=='2')
while(p)
{
data(p,find);
p=p->next;
}//while
elseif(temp=='3')
while(p)
{
data2(p,find);
p=p->next;
}//while
menu4();
}//if
else
{
printf("\n\a对不起,无信息可查询!");
printf("\n");
}//else
}//search
LinksortH(Linkl,charch)
{
Node*p,*q,*wei,*s,*p1;
wei=NULL;
chartemp;
temp=ch;
if(!l->next)
{
printf("\n\a对不起,无信息可排序!");
printf("\n");
return0;
}//if
while(l->next!=wei)
{
p=l;
q=p->next;
while(q->next!=wei)
{
if(temp=='A')
{
if(p->next->data.basis
{
s=q->next;
p->next=q->next;
q->next=q->next->next;
p->next->next=q;
q=s;
}//if
}//if
elseif(temp=='B')
{
if(p->next->data.major
{
s=q->next;
p->next=q->next;
q->next=q->next->next;
p->next->next=q;
q=s;
}//if
}//elseif
elseif(temp=='C')
{
if(p->next->data.elective
{
s=q->next;
p->next=q->next;
q->next=q->next->next;
p->next->next=q;
q=s;
}//if
}//elseif
elseif(temp=='D')
{
if(p->next->data.humanity
{
s=q->next;
p->next=q->next;
q->next=q->next->next;
p->next->next=q;
q=s;
}//if
}//elseif
elseif(temp=='E')
{
if(p->next->data.laboratory
{
s=q->next;
p->next=q->next;
q->next=q->next->next;
p->next->next=q;
q=s;
}//if
}//elseif
elseif(temp=='F')
{if(p->next->data.sum
{
s=q->next;
p->next=q->next;
q->next=q->next->next;
p->next->next=q;
q=s;
}//if
}//elseif
elseif(temp=='G')
{
if(p->next->data.average
{
s=q->next;
p->next=q->next;
q->next=q->next->next;
p->next->next=q;
q=s;
}//if
}//elseif
p=p->next;
q=q->next;
}//while
wei=q;
}//while
p1=l->next;
printf("\n==============>排序结果<==============\n");
menu4();
if(temp=='A')
{printf("\t\t\t班级\t学号\t姓名\t基础学分\n");
while(p1)
{
printf("\n\t\t\t%s\t%s\t%s\t%3.1f",p1->data.clas,p1->data.classnum,p1->data.name,p1->data.basis);
p1=p1->next;
}//while
}//if
if(temp=='B')
{
printf("\t\t\t班级\t学号\t姓名\t专业学分\n");
while(p1)
{
printf("\n\t\t\t%s\t%s\t%s\t%3.1f",p1->data.clas,p1->data.classnum,p1->data.name,p1->data.major);
p1=p1->next;
}//while
}//if
if(temp=='C')
{
printf("\t\t\t班级\t学号\t姓名\t选修学分\n");
while(p1)
{
printf("\n\t\t\t%s\t%s\t%s\t%3.1f",p1->data.clas,p1->data.classnum,p1->data.name,p1->data.elective);
p1=p1->next;
}//while
}//if
if(temp=='D')
{
printf("\t\t\t班级\t学号\t姓名\t人文学分\n");
while(p1)
{
printf("\n\t\t\t%s\t%s\t%s\t%3.1f",p1->data.clas,p1->data.classnum,p1->data.name,p1->data.humanity);
p1=p1->next;
}//while
}//if
if(temp=='E')
{
printf("\t\t\t班级\t学号\t姓名\t实验学分\n");
while(p1)
{
printf("\n\t\t\t%s\t%s\t%s\t%3.1f",p1->data.clas,p1->data.classnum,p1->data.name,p1->data.laboratory);
p1=p1->next;
}//while
}//if
if(temp=='F')
{
printf("\t\t\t班级\t学号\t姓名\t学分总和\n");
while(p1)
{
printf("\n\t\t\t%s\t%s\t%s\t%3.1f",p1->data.clas,p1->data.classnum,p1->data.name,p1->data.sum);
p1=p1->next;
}//while
}//if
if(temp=='G')
{
printf("\t\t\t班级\t学号\t姓名\t平均学分\n");
while(p1)
{
printf("\n\t\t\t%s\t%s\t%s\t%3.1f",p1->data.clas,p1->data.classnum,p1->data.name,p1->data.average);
p1=p1->next;
}//while
}//if
printf("\n");
menu4();
printf("\n");
returnl;
}//sortH
voidsort(Linkl)
{
menu3();
chartemp;
scanf("%s",&temp);
switch(temp)
{
case'A':sortH(l,'A');break;
case'B':sortH(l,'B');break;
case'C':sortH(l,'C');break;
case'D':sortH(l,'D');break;
case'E':sortH(l,'E');break;
case'F':sortH(l,'F');break;
case'G':sortH(l,'G');break;
default:printf("\n\a\a系统提示:您输入错误!\n");getchar();break;
}//switch
}//sort
voidmodify(Linkl)
{
chartemp;
charfind[10];
Node*p;
if(!l->next)
{
printf("\n\a\a对不起,无信息可修改!");
printf("\n");
return;
}//if
printf("\n\t\t1:按学号修改\t2:按姓名修改\n");
printf("\n请输入您要修改的方式:");
scanf("%s",&temp);
if(temp!='1'&&temp!='2')
{
printf("\n\a\a系统提示:您输入错误!\n");
return;
}//if
elseif(temp=='1')
{
printf("请输入要修改的学号:");
scanf("%s",find);
p=Locate(l,find,"classnum");
}//elseif
没有空间了邮箱给我发你邮箱去