学生成绩管理系统源代码.docx
《学生成绩管理系统源代码.docx》由会员分享,可在线阅读,更多相关《学生成绩管理系统源代码.docx(18页珍藏版)》请在冰豆网上搜索。
学生成绩管理系统源代码
#include
#include
#include
#include
#include
#include
#include
#include
#definePRINT1textcolor(12);cprintf("\r请按任意键返回主菜单\n\r");textcolor(10);getch();clrscr();break;
intshoudsave=0;
structstudent/*学生信息结构体定义*/
{
charnum[10],name[20],cla[4];
intscore1,score2,score3,total,ave;
};
typedefstructnode
{
structstudentdata;
structnode*next;
}Node,*L;
voidprint1()
{
cprintf("\r================================================================================");
}
voidprint2()
{
cprintf("\n\r1.输入学生成绩信息在这里你可以按照提示输入学生的班级,学号,姓名及各科成绩.\n");
cprintf("\n\r2.注销学生成绩信息在这里你可以按照学号或姓名将某名学生的信息从本系统中删除.\n");
cprintf("\n\r3.查询学生成绩信息在这里你可以按照学号或姓名查询某一名学生的信息.\n");
cprintf("\n\r4.修改学生成绩信息在这里你可以按照提示修改某一名学生的学号,姓名及各科成绩.");
cprintf("\n\r5.学生成绩信息排序在这里你可以看到所有学生的各科成绩.\n");
cprintf("\n\r6.学生成绩信息统计在这里本系统将为你显示所有科目的最高分及最低分所得学生.\n");
cprintf("\n\r7.显示学生成绩信息在这里你可以看到系统中所有学生的信息.\n");
cprintf("\n\r8.保存学生成绩信息在这里你可以将学生你信息保存到内存中.\n");
cprintf("\n\r9.帮助学生成绩信息在这里你可以获得帮助信息.\n");
cprintf("\n\r0.退出系统在这里选择是否保存后,你可以安全的退出本系统.\n\n\r");
}
voidmenu()
{
cprintf("\n\r\xc9\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcb\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xbb");
cprintf("\r\xba学生信息导入\xba学生信息处理\xba");
cprintf("\r\xba____________________________________\xba__________________________________________\xba");
cprintf("\r\xba1-->输入学生成绩信息\xba6-->学生成绩信息统计\xba");
cprintf("\r\xba2-->注销学生成绩信息\xba7-->显示学生成绩信息\xba");
cprintf("\r\xba3-->查询学生成绩信息\xba8-->保存学生成绩信息\xba");
cprintf("\r\xba4-->修改学生成绩信息\xba9-->帮助学生成绩信息\xba");
cprintf("\r\xba5-->学生成绩信息排序\xba0-->退出系统\xba");
cprintf("\r\xc8\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xca\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xbc");
}
voidwrong()
{
cprintf("\n\r输入错误!
请验证后重新输入.\n");
}
voidnotfind()
{
cprintf("\n\r该学生信息不存在!
请验证后重新输入.\n");
}
voidprintc()/*此函数用于输出中文格式*/
{
cprintf("\r学号姓名班级英语数学C语言总分平均分\n");
}
voidprinte(Node*p)/*此函数用于输出英文格式*/
{
cprintf("\r%-4s%-4s%4s%5d%5d%8d%5d%7d\n\r",p->data.num,p->data.name,p->data.cla,p->data.score3,p->data.score2,p->data.score1,p->data.total,p->data.ave);
}
Node*Locate(Ll,charfindinfo[],charnameornum[])/*该函数用于定位连表中符合要求的接点,并返回该指针*/
{
Node*r;
if(strcmp(nameornum,"num")==0)/*按学号查询*/
{
r=l->next;
while(r!
=NULL)
{
if(strcmp(r->data.num,findinfo)==0)
returnr;
r=r->next;
}
}
elseif(strcmp(nameornum,"name")==0)/*按姓名查询*/
{
r=l->next;
while(r!
=NULL)
{
if(strcmp(r->data.name,findinfo)==0)
returnr;
r=r->next;
}
}
return0;
}
voidinput(Ll)/*增加学生*/
{
Node*p,*r,*s;
charnum[10];
r=l;
s=l->next;
while(r->next!
=NULL)
r=r->next;/*将指针置于最末尾*/
while
(1)
{cprintf("\r如果输入完毕,请按任意键返回主菜单\n");
cprintf("\r如果你还想输入,请按y(yes)继续\n\r");
scanf("%s",num);
if(strcmp(num,"y")==0)
{cprintf("请你输入学号:
");
scanf("%s",num);}elsebreak;
while(s)
{
if(strcmp(s->data.num,num)==0)
{
printf("\t学号为'%s'的学生已经存在,若要修改请你选择'4修改'!
\n",num);
print1();
printc();
printe(s);
print1();
printf("\n");
getch();
return;
}
s=s->next;
}
p=(Node*)malloc(sizeof(Node));
strcpy(p->data.num,num);
cprintf("\r请你输入姓名:
");
scanf("%s",p->data.name);
getchar();
cprintf("\r请你输入班级:
");
scanf("%s",p->data.cla);
getchar();
cprintf("\r请你输入c语言成绩(0-100):
");
scanf("%d",&p->data.score1);
getchar();
cprintf("\r请你输入数学成绩(0-100):
");
scanf("%d",&p->data.score2);
getchar();
cprintf("\r请你输入英语成绩(0-100):
");
scanf("%d",&p->data.score3);
getchar();
p->data.total=p->data.score3+p->data.score1+p->data.score2;
p->data.ave=p->data.total/3;/*信息输入已经完成*/
p->next=NULL;
r->next=p;
r=p;shoudsave=1;
}
}
voidquery(Ll)/*查询学生信息*/
{
intselect;
charfindinfo[20];
Node*p;
if(!
l->next)
{
cprintf("\n没有信息可以查询!
\n");
return;
}
cprintf("\n1==>按学号查找\n\r2==>按姓名查找\n\r");
scanf("%d",&select);
if(select==1)/*学号*/
{
cprintf("\r请你输入要查找的学号:
");
scanf("%s",findinfo);
p=Locate(l,findinfo,"num");
if(p)
{
cprintf("查找结果\n\r");
print1();
printc();
printe(p);
print1();
}
else
notfind();
}
elseif(select==2)/*姓名*/
{
cprintf("\r请你输入要查找的姓名:
");
scanf("%s",findinfo);
p=Locate(l,findinfo,"name");
if(p)
{
cprintf("查找结果\n\r");
print1();
printc();
printe(p);
print1();
}
else
notfind();
}
else
wrong();
}
voidDelete(Ll)/*删除学生信息*/
{
intselect;
Node*p,*r;
charfindinfo[20];
if(!
l->next)
{
cprintf("\n没有信息可以删除!
\n");
return;
}
cprintf("\n1==>按学号删除\n\r2==>按姓名删除\n\r");
scanf("%d",&select);
if(select==1)
{
cprintf("\r请你输入要删除的学号:
");
scanf("%s",findinfo);
p=Locate(l,findinfo,"num");
if(p)
{
r=l;
while(r->next!
=p)
r=r->next;
r->next=p->next;
free(p);
cprintf("\n\r该学生已经成功删除!
\n");
shoudsave=1;
}
else
notfind();
}
elseif(select==2)
{
cprintf("\r请你输入要删除的姓名:
");
scanf("%s",findinfo);
p=Locate(l,findinfo,"name");
if(p)
{
r=l;
while(r->next!
=p)
r=r->next;
r->next=p->next;
free(p);
cprintf("\n\r该学生已经成功删除!
\n");
shoudsave=1;
}
else
notfind();
}
elsewrong();
}
voidmodify(Ll)/*修改学生信息*/
{
Node*p;
charfindinfo[20];
if(!
l->next)
{
cprintf("\n\r没有信息可以修改!
\n");
return;
}
cprintf("\r请你输入要修改的学生学号:
");
scanf("%s",findinfo);
p=Locate(l,findinfo,"num");
if(p)
{
cprintf("\r请你输入新学号(原来是%s):
",p->data.num);
scanf("%s",p->data.num);
cprintf("\r请你输入新姓名(原来是%s):
",p->data.name);
scanf("%s",p->data.name);
getchar();
cprintf("\r请你输入新班级(原来是%s):
",p->data.cla);
scanf("%s",p->data.cla);
cprintf("\r请你输入新的c语言成绩(原来是%d分):
",p->data.score1);
scanf("%d",&p->data.score1);
getchar();
cprintf("\r请你输入新的数学成绩(原来是%d分):
",p->data.score2);
scanf("%d",&p->data.score2);
getchar();
cprintf("\r请你输入新的英语成绩(原来是%d分):
",p->data.score3);
scanf("%d",&p->data.score3);
p->data.total=p->data.score3+p->data.score1+p->data.score2;
p->data.ave=p->data.total/3;
cprintf("\n\r信息修改成功!
\n");
shoudsave=1;
}
else
notfind();
}
voiddisplay(Ll)
{/*显示全部学生信息*/
intcount=0;
Node*p;
p=l->next;
if(!
p)
{
cprintf("\n\r没有信息可以显示!
\n");
return;
}
cprintf("显示结果");
print1();
printc();
while(p)
{if(count%5==0)getch();
printe(p);
p=p->next;
count++;
}
print1();
cprintf("\n");
}
voidStatistic(Ll)/*统计学生信息*/
{
Node*pm_max,*pe_max,*pc_max,*pt_max,*pa_max;/*用于指向分数最高的接点*/
Node*pm_min,*pe_min,*pc_min,*pt_min,*pa_min;
Node*r=l->next;
if(!
r)
{
cprintf("\n\r没有信息可以统计!
\n");
return;
}
pm_max=pe_max=pc_max=pt_max=pa_max=pm_min=pe_min=pc_min=pt_min=pa_min=r;
while(r!
=NULL)
{
if(r->data.score1>=pc_max->data.score1)
pc_max=r;
if(r->data.score1<=pc_min->data.score1)
pc_min=r;
if(r->data.score2>=pm_max->data.score2)
pm_max=r;
if(r->data.score2<=pm_min->data.score2)
pm_min=r;
if(r->data.score3>=pe_max->data.score3)
pe_max=r;
if(r->data.score3<=pe_min->data.score3)
pe_min=r;
if(r->data.total>=pt_max->data.total)
pt_max=r;
if(r->data.total<=pt_min->data.total)
pt_min=r;
if(r->data.ave>=pa_max->data.ave)
pa_max=r;
if(r->data.ave<=pa_min->data.ave)
pa_min=r;
r=r->next;
}
cprintf("====================================统计结果====================================\n");
cprintf("\r总分最高者:
%-16s%d分\n",pt_max->data.name,pt_max->data.total);
cprintf("\r平均分最高者:
%-16s%d分\n",pa_max->data.name,pa_max->data.ave);
cprintf("\r英语最高者:
%-16s%d分\n",pe_max->data.name,pe_max->data.score3);
cprintf("\r数学最高者:
%-16s%d分\n",pm_max->data.name,pm_max->data.score2);
cprintf("\rc语言最高者:
%-16s%d分\n\r",pc_max->data.name,pc_max->data.score1);
cprintf("\r总分最低者:
%-16s%d分\n",pt_min->data.name,pt_min->data.total);
cprintf("\r平均分最低者:
%-16s%d分\n",pa_min->data.name,pa_min->data.ave);
cprintf("\r英语最低者:
%-16s%d分\n",pe_min->data.name,pe_min->data.score3);
cprintf("\r数学最低者:
%-16s%d分\n",pm_min->data.name,pm_min->data.score2);
cprintf("\rc语言最低者:
%-16s%d分\n\r",pc_min->data.name,pc_min->data.score1);
print1();
}
voidSort(Ll)
{
Lll;
Node*p,*rr,*s;
ll=(L)malloc(sizeof(Node));/*用于做新的连表*/
ll->next=NULL;
if(l->next==NULL)
{
cprintf("\n\r没有信息可以排序!
\n");
return;
}
p=l->next;
while(p)
{
s=(Node*)malloc(sizeof(Node));/*新建接点用于保存信息*/
s->data=p->data;
s->next=NULL;
rr=ll;
while(rr->next!
=NULL&&rr->next->data.total>=p->data.total)
rr=rr->next;
if(rr->next==NULL)
rr->next=s;
else
{
s->next=rr->next;
rr->next=s;
}
p=p->next;
}
free(l);
l->next=ll->next;
cprintf("\n\r排序已经完成!
\n");
}
voidSave(Ll)/**/
{
FILE*fp;
Node*p;
intflag=1,count=0;
fp=fopen("c:
\\student","wb");
if(fp==NULL)
{
cprintf("\n\r重新打开文件时发生错误!
\n");
exit
(1);
}
p=l->next;
while(p)
{
if(fwrite(p,sizeof(Node),1,fp)==1)
{
p=p->next;
count++;
}
else
{
flag=0;
break;
}
}
if(flag)
{
cprintf("\n\r文件保存成功.(有%d条信息已经保存.)\n\r",count);
shoudsave=0;
}
fclose(fp);
}
voidmain()/**/
{
Ll;/*链表*/
FILE*fp;/*文件指针*/
intcount=0,i,menu_select;/*菜单选择*/
charch,creat;
Node*p,*r;
time_tit;
clrscr();
textmode(C80);
window(1,1,80,25);
textbackground
(1);clrscr();
textcolor(10);
printf("\r学生成绩管理系统");
printf("\r-------扬州大学信息工程学院软件0902班");
printf("\r设计人员:
李天鹏");
l=(Node*)malloc(sizeof(Node));
l->next=NULL;r=l;
fp=fopen("c:
\\student","rb");
if(fp==NULL)
{
cprintf("\n\r该文件还未存在,是否需要创建?
(y/n,Y/N)\n\r");
scanf("%c",&creat);
if(creat=='y'||creat=='Y')
{
fp=fopen("c:
\\student","wb");
}
else
exit(0);
}
gotoxy(9,11);textcolor(12);
cprintf("\n\r文件已经打开,系统正在导入信息");
for(i=0;i<6;i++)
{cprintf(".");
sleep
(1);
}textcolor(10);
gotoxy(9,11);cprintf("\n");
while(!
feof(fp))
{
p=(Node*)malloc(sizeof(N