学生成绩查询系统.docx
《学生成绩查询系统.docx》由会员分享,可在线阅读,更多相关《学生成绩查询系统.docx(15页珍藏版)》请在冰点文库上搜索。
学生成绩查询系统
学生成绩查询系统
1课题内容和要求
1.1课题描述
【问题描述】试编写程序完成学生成绩记录的查询。
学生基本情况表
学号
姓名
成绩
14070101
孙军
98
14070102
王霞
86
14070103
刘涛
56
14070104
张宏
96
14070105
徐华
83
14070106
李明
72
14070107
陈婷
92
1.2课题要求
【基本要求】
(1)若按学号进行顺序查找,例如:
输入14070103,则输出56。
(2)按学号排序后对学号进行折半查找。
(3)随机输入以学号为关键字的学生信息并构建二叉排序树,对学号进行二叉排序树查找。
2需求分析
2.1设计要求
本系统主要实现对学生成绩信息进行管理,需要实现以下几个方面的管理功能:
(1)增加学生信息:
输入学生的相关信息,包括姓名,学号,成绩
(2)显示学生信息:
输出全部学生的信息
(3)查找学生信息:
按照学生学号查找并输出
(4)删除学生信息:
按照学生学号删除
(5)成绩统计:
输出成绩的总和,平均值
(6)显示想要的排名:
按成绩从高到低排序,输出对应的学生信息
(7)显示成绩不及格的学生信息:
输出成绩小于60的学生信息
2.2开发环境
普通计算机VisualC++
3概要设计
3.1采用数据结构及存储方式
structstudent
{
charname[60];
charID[60];
intscore;
};
structstudentst[300];//这个数组用来保存所有的学生信息和文件里面的一致
intNumber=0;//记录总的学生人数也就是数组/文件里面的学生人数
3.2系统功能结构
voidzdbc()//自动保存
voidfh()//返回
voidbujige()//输出成绩不及格的学生信息
voidpaixu()//排序显示想要的排名
voidtongji()//统计成绩的总分,均分
voidxhdel()//按学号删除
voidxhselect()//按学号查找
voidsee()//显示学生信息
voidadd()//增加学生信息
voidxianshi()//显示界面
voidbc(structstudentst[])
intdq(structstudentst[])
3.3函数之间的调用关系
main函数调用voidzdbc()//自动保存,voidfh()//返回,voidbujige()//输出成绩不及格的学生信息,voidpaixu()//排序显示想要的排名,voidtongji()//统计成绩的总分,均分,voidxhdel()//按学号删除,voidxhselect()//按学号查找,voidsee()//显示学生信息,voidadd()//增加学生信息,voidxianshi()//显示界面,voidbc(structstudentst[]),intdq(structstudentst[])
4详细设计及实现
4.1数据结构的类型定义
structstudent
{
charname[60];
charID[60];
intscore;
};
structstudentst[300];//这个数组用来保存所有的学生信息和文件里面的一致
intNumber=0;//记录总的学生人数也就是数组/文件里面的学生人数
4.2voidbujige()操作算法设计与实现
inti=0;
printf("以下是不及格:
\n");
printf("\t姓名\t学号\t成绩\n");
for(i=0;i{
if(st[i].score<60)
{
printf("\t%s\t%s\t%d\n",st[i].name,st[i].ID,st[i].score);
}
}
4.3voidpaixu()操作算法设计与实现
structstudenttemp;
intwantNUmber=0;
inti=0;
intj=0;
for(i=0;i{
for(j=i;j{
if(st[j].score{
temp=st[j];
st[j]=st[j+1];
st[j+1]=temp;
}
}
}
printf("你想输出前几名的成绩:
");
scanf("%d",&wantNUmber);
if(wantNUmber>Number)
{
wantNUmber=Number;
}printf("\t姓名\t学号\t成绩\n");
for(i=0;i{
printf("\t%s\t%s\t%d\n",st[i].name,st[i].ID,st[i].score);
}
4.4voidtongji()操作算法设计与实现
inti=0;
doublesum=0.0;
for(i=0;i{
sum+=st[i].score;
}
printf("全班总分为:
%f\n",sum);
printf("平均分为:
%f\n",sum/Number);
4.5voidxhdel()操作算法设计与实现
FILE*fp=NULL;
charid[60];
inti=0;
intj=0;
printf("请输入要删除的学生学号:
");
scanf("%s",id);
for(i=0;i{
if(strcmp(id,st[i].ID)==0)//如果查找到就删除
{
for(j=i;j{
st[j]=st[j+1];
}
Number--;
}
}//将剩余数据写入文件重新一写的方式打开文件把以前的数据擦除了
fp=fopen("C:
//student.dat","wb");
for(i=0;i{
fwrite(&st[i],sizeof(structstudent),1,fp);
}
fclose(fp);
printf("删除成功;\n");
4.6voidxhselect()操作算法设计与实现
charid[60];
inti=0;
printf("请输入要查找学生学号:
");
scanf("%s",id);
system("cls");
printf("\t姓名\t学号\t成绩\n");
for(i=0;i{
if(strcmp(id,st[i].ID)==0)
{
printf("\t%s\t%s\t%d\n",st[i].name,st[i].ID,st[i].score);
}
}
4.7voidsee()操作算法设计与实现
inti=0;
printf("以下是全部学生成绩\n");
printf("\t姓名\t学号\t成绩\n");
for(i=0;i{
printf("\t%s\t%s\t%d\n",st[i].name,st[i].ID,st[i].score);
}
4.8voidadd()操作算法设计与实现
intnumberTemp=0;
inti=0;
structstudenttemp;//临时保存信息
printf("请输入要增加学生成绩个数:
");
scanf("%d",&numberTemp);
for(i=0;i{
printf("输入第%d个同学信息\n",i+1);
printf("姓名:
");
scanf("%s",temp.name);
printf("学号:
");
scanf("%s",temp.ID);
printf("成绩:
");
scanf("%d",&temp.score);
st[Number++]=temp;//将刚添加的写入到数组
bc(&temp);//将刚添加的写入到文件}
printf("添加成功\n");
}
4.9voidbc(structstudent*st)操作算法设计与实现
FILE*fp=NULL;
fp=fopen("C:
//student.dat","ab+");
fwrite(st,sizeof(structstudent),1,fp);
fclose(fp);
4.10intdq(structstudentst[])操作算法设计与实现
FILE*fp=NULL;
inti=0;
fp=fopen("C:
//student.dat","rb");
while(fread(&st[i],sizeof(structstudent),1,fp))
i++;
fclose(fp);
returni;
4.11voidxianshi()操作算法设计与实现
printf("\t*************************************************************\n");
printf("\t\t\t\t*学生成绩管理系统*\n");
printf("\n\t*[1]增加学生成绩[2]查看学生成绩*\n");
printf("\t*[3]查找学生成绩[4]删除学生成绩*\n");
printf("\t*[5]统计(总成绩和平均分)[6]输出前N名学生成绩*\n");
printf("\t*[7]输出不及格的人*\n");
printf("\t*************************************************************\n");
4.12voidmain()操作算法设计与实现
intchoose=0;
FILE*fp=NULL;
charyesorno;
if((fp=fopen("C:
//student.dat","rb"))==NULL)
{
printf("\n=========>提示:
文件不存在,是否要创建一个?
(y/n)\n");
scanf("%c",&yesorno);
if(yesorno=='y'||yesorno=='Y')
{//这里仅为了建立文件
fp=fopen("C:
//student.dat","wb");
fclose(fp);
}
else
exit(0);
}
else
{
Number=dq(st);//要是文件只能够已经有数据将数据初始化到数组中
}
system("cls");
while(true)
{
xianshi();
printf("\t\t====>请选择:
");
scanf("%d",&choose);
system("cls");
switch(choose)
{
case1:
add();
fh();//增加学生成绩
break;
case2:
see();
fh();//查看学生成绩
break;
case3:
xhselect();
fh();//查找
break;
case4:
xhdel();
fh();//删除
break;
case5:
tongji();
fh();//统计
break;
case6:
paixu();
fh();//排序
break;
case7:
bujige();
fh();//输出不及格
break;
default:
break;
}
fflush(stdin);
getchar();
system("cls");
}
5代码调试与功能测试
5.1测试方案
输入数据进行测试
5.2测试结果
(1)界面显示
(2)选择1,添加学生信息
(3)选择2,显示全部学生信息
(4)选择3,按照学号查找学生信息
(5)选择4,按照学号删除对应的学生信息,并再选择2,核实是否删除
(6)选择5,统计学生成绩
(7)选择6,输出前3名的学生信息
(8)选择7,输出不及格学生的信息
6收获与体会
经过了为期一周的数据结构的课程设计,我了解了一般课程设计的步骤,应该利用软件工程的分析方法,利用丰富的图书和网络资源,得到一个比较完整的程序系统!
我们要把理论和实践相结合,把书本上的知识运用到我们做的程序上。
更重要的是我深刻了解了各种查找方法的重要性,必须掌握各种查找的方法。
这些都是数据结构的关键,而且,数据结构也是比较重要的一门学科,无论如何,我们应该重视!
这次的程序虽说不是很大的工程,但是我们还是通过小组之间的合作完成,体会到团队合作的重要性,汲取很多经验!
最后,我们的成功也离不开老师的帮助,分析和指导,以至于我们能够顺利完成这次工程!
虽然课程教学已经结束了,但由于课程的重要性,我们还是应该继续学习。
参考文献
[1]严蔚敏,数据结构(C语言版)[M].北京:
清华大学出版社,2014.
[2]刘鑫,陈恒,王雅轩.数据结构教学做一体化教程[M].北京:
清华大学出版社,2014.
[3]何钦铭,冯雁,陈越.数据结构课程设计[M],杭州:
浙江大学出版社,2012.