c语言实验报告三学生成绩管理系统.docx
《c语言实验报告三学生成绩管理系统.docx》由会员分享,可在线阅读,更多相关《c语言实验报告三学生成绩管理系统.docx(11页珍藏版)》请在冰豆网上搜索。
c语言实验报告三学生成绩管理系统
1.实验内容
实现一个学生成绩处理程序,先输入多名学生的学号和成绩,然后进入菜单,可以选择打印,添加,修改,删除或查询成绩(学号查询和成绩段查询)。
2.实验步骤
2.1程序1
2.1.1程序功能
这是一个学生成绩处理程序,通过用户输入多名学生的学号和成绩,然后进入菜单,可以选择打印,添加,修改,删除或查询成绩(学号查询和成绩段查询)。
2.1.2设计思路
将一个大程序分块化处理,各个部分先用普通方法实现,在能运行的条件下改用插入排序和折半查找实现。
先实现输入成绩和菜单,再一项一项实现菜单中的功能。
2.1.3流程图或其他描述(不要求可以不写)
2.1.4程序代码(要有注释)
//实现一个学生成绩处理程序,可以选择打印、添加、修改、删除或查询成绩(学号和成绩段查询)
#include
#include
#include
#include
#defineN80
typedefstructstudent
{
longnum;
intscore;
}STU;
STUstu[N];
intn=0;
intKEY=0;
intk;
voidInput();
voidOutput();
voidAdd();
voidDirect();
voidDelete();
voidSearch();
voidSch();
voidSave();
voidRead();
voidmain()
{
intchos;
system("cls");
printf("\n");
printf("学生成绩管理系统\n\n");
printf("1.录入\n2.显示\n3.添加\n4.修改\n");
printf("5.删除\n6.查找\n7.查询\n8.退出\n");
printf("\n请选择:
");
scanf("%d",&chos);
switch(chos)
{
case1:
Input();break;
case2:
Output();break;
case3:
Add();break;
case4:
KEY=1;Search();break;
case5:
Delete();break;
case6:
Search();break;
case7:
Sch();break;
case8:
exit(0);break;
default:
printf("错误!
请按要求输入!
");
Sleep(2000);main();
}
}
voidInput()
{
inti=-1;
system("cls");
printf("当输入学号为负时返回!
\n");
do{
i++;
printf("\n");
printf("请输入第%2d个学生的学号:
",i+1);
scanf("%ld",&stu[i].num);
if(stu[i].num<0)break;
printf("请输入第%2d个学生的成绩:
",i+1);
scanf("%d",&stu[i].score);
n++;
}while(i=0);
if(stu[i].num<0)Save();
}
voidOutput()
{
system("cls");
printf("\n");
Read();
printf("\n\n任意键返回!
");
getchar();
getchar();
main();
}
voidAdd()
{
inti,j;
system("cls");
printf("\n");
printf("请输入需添加学生的学号:
");
scanf("%8ld",&stu[N-1].num);
printf("请输入需添加学生的成绩:
");
scanf("%d",&stu[N-1].score);
for(i=0;i{
if(stu[N-1].num{
for(j=n;j>i;j--)
{
stu[j].num=stu[j-1].num;
stu[j].score=stu[j-1].score;
}
stu[i].num=stu[N-1].num;
stu[i].score=stu[N-1].score;
break;
}else{
stu[n].num=stu[N-1].num;
stu[n].score=stu[N-1].score;
break;
}
}n++;
printf("修改后的");
Save();
}
voidDirect()
{
printf("请输入修改后的成绩:
");
scanf("%d",&stu[k].score);
printf("修改后的成绩为:
\n");
printf("\t%8ld\t%d\n",stu[k].num,stu[k].score);
printf("\n\n");
printf("修改后的");
Save();
}
voidDelete()
{
inti,del;
charkey;
system("cls");
printf("请输入要删除信息的学生学号:
");
scanf("%ld",&del);
getchar();
printf("确认删除?
(Y/N)");
scanf("%c",&key);
if(key=='y'||key=='Y')
{
for(i=0;i{
if(del==stu[i].num)
{
stu[i]=stu[i+1];
n-=1;
}
}
}
printf("修改后的");
Save();
}
voidSearch()
{
inti;
charkey='y';
longsearch;
system("cls");
if(KEY==1)printf("\n请输入要修改成绩学生的学号:
");
elseprintf("\n请输入要查询成绩学生的学号:
");
scanf("%ld",&search);
for(i=0;i{
if(search==stu[i].num)
{
printf("学生信息为:
\n");
printf("\t%ld\t%d\n",stu[i].num,stu[i].score);
k=i;
}
}
if(KEY==1)Direct();
KEY=0;
}
voidSch()
{
inti,a,b;
system("cls");
printf("请输入您要查询的成绩段(AB):
");
scanf("%d%d",&a,&b);
printf("符合条件的学生有:
\n");
for(i=0;i{
if(stu[i].score>=a&&stu[i].score<=b)
printf("\t%ld\t%d\n",stu[i].num,stu[i].score);
}
printf("任意键返回!
");
getchar();getchar();
main();
}
voidSave()
{
FILE*fp;
if((fp=fopen("score.bin","wb"))==NULL)
{
printf("Failedtosavethedata!
\n");
exit(0);
}
fwrite(stu,sizeof(STU),n,fp);
fclose(fp);
printf("学生成绩已储存在\"score.bin\"中!
\n");
printf("\n\n任意键返回!
");
getchar();getchar();
main();
}
voidRead()
{
FILE*fp;
inti,total;
printf("学生信息:
\n");
if((fp=fopen("score.bin","rb"))==NULL)
{
printf("Failedtoreadthedata!
\n");
exit(0);
}
for(i=0;!
feof(fp);i++)
{
fread(&stu[i],sizeof(STU),1,fp);
}
fclose(fp);
total=i-1;
for(i=0;iprintf("\t%ld\t%d\n",stu[i].num,stu[i].score);
printf("\n\n任意键返回!
");
getchar();getchar();
main();
}
2.1.5运行结果
3.实验体会
3.1调试中出现的问题及解决过程
在程序中运用数组时还是不够熟练,调试时总出现指代不明或无法显示所要内容的情况,在认真看老师课上例子后找出错误所在,修改后运行成功。
3.2心得体会
3.3实验改进建议
在查询某个学生成绩,可实现查询第n-m名学生成绩,查询分数在n-m之间的学生成绩,查询平均成绩;学生成绩修改(增加、删除、修改)等。