学生成绩管理系统C语言课程设计.docx
- 文档编号:5963343
- 上传时间:2023-05-09
- 格式:DOCX
- 页数:24
- 大小:42.76KB
学生成绩管理系统C语言课程设计.docx
《学生成绩管理系统C语言课程设计.docx》由会员分享,可在线阅读,更多相关《学生成绩管理系统C语言课程设计.docx(24页珍藏版)》请在冰点文库上搜索。
学生成绩管理系统C语言课程设计
学生成绩管理系统
1.程设计的目的
通过本程序可以训练学生程序设计的基本技能,让学生掌握C程序各种函数的应用。
同时也大大增加了学生的学习兴趣,提高了学生的编程能力。
进一步掌握和利用C语言进行程设计的能力;进一步理解和运用结构化程设计的思想和方法;初步掌握开发一个小型实用系统的基本方法;学会调试一个较长程序的基本方法;掌握书写课程设计开发文档的能力.
2.设计方案论证
2.1设计思路
(1)输入学生初始信息模块:
其中包括学生的姓名、学号和性别以及学生的语文、数学、英语和计算机等相关信息;可用函数cin(stu*p1)来实现此操作。
当正确输入存在的学生学号,系统进行判断时,提示存在此学生。
(2)查询模块:
可用stu*lookdata(stu*p1) 来实现。
找到就输出此学生全部信息包括学生的语文、数学、英语和计算机等的成绩。
当正确输入查找信息时,系统却不能够得到所要查找的学生信息以及学生的语文、数学、英语和计算机的成绩。
(3)插入模块:
可用insert( )函数来实现。
其中通过学号的大小来比较的,并且以此来排序。
当我们输入插入信息时,系统却提示插入不进数据。
(4)学生的信息以及成绩:
通过学生的姓名来查看学生的语文、数学、英语和计算机等相关成绩,同时也可以分别通过caverage()、maverage()、eaverage()和comaverage() 来输出语文、数学、英语和计算机等成绩的平均分数、最高和最低分数。
(5)退出系统:
可用一个函数exit()来实现,首先将信息保存到文件中,释放动态创建的内存空间,再退出此程序。
3.程序源代码
#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],sex[4];
intscore1,score2,score3,totle,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("%-8s%-10s%5s%12d%13d%13d%8d%9d\n\r",p->data.num,p->data.name,p->data.sex,p->data.score3,p->data.score2,p->data.score1,p->data.totle,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请你输入性别(MORF):
");
scanf("%s",p->data.sex);
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.totle=p->data.score3+p->data.score1+p->data.score2;
p->data.ave=p->data.totle/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.sex);
scanf("%s",p->data.sex);
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.totle=p->data.score3+p->data.score1+p->data.score2;
p->data.ave=p->data.totle/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.totle>=pt_max->data.totle)
pt_max=r;
if(r->data.totle<=pt_min->data.totle)
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.totle);
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.totle);
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.totle>=p->data.totle)
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;/*文件指针*/
int
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 学生 成绩管理系统 语言 课程设计