学生管理系统实验报告Word格式.docx
《学生管理系统实验报告Word格式.docx》由会员分享,可在线阅读,更多相关《学生管理系统实验报告Word格式.docx(24页珍藏版)》请在冰点文库上搜索。
![学生管理系统实验报告Word格式.docx](https://file1.bingdoc.com/fileroot1/2023-5/5/9d427d1a-94e6-4fc7-a9f9-9ee5acc93b6a/9d427d1a-94e6-4fc7-a9f9-9ee5acc93b6a1.gif)
(10)按学号查找学生基本信息,对学生信息进行修改后保存;
要求程序运行后,先显示菜单,并提示用户输入选项,然后根据用户输入的选项执行相应的操作,要求程序设计采用自顶向下逐步求精的方法,进行模块化程序设计以及增量测试方法。
功能描述:
(1)可以显示菜单,根据用户的需求选择可以进行的操作
(2)可以录入学生信息
(3)计算每个学生的平均分;
(4)按学生姓名的字典顺序或按学号从小到大顺序输出学生基本信息;
(5)按年龄和性别查找学生的基本信息;
(6)按学号或姓名查找学生平均分的排名及各科成绩;
性能要求:
要保证程序有足够的健壮性。
3.算法设计
(1)在主程序中通过选择的循环实现菜单的输出.
(2)录入学生信息:
根据提示录入学生信息,,包括学号,姓名,出生年月,性别,成绩.学生的信息用一个记录类型.性别用数字来代替字母,0代表male,其他为female
.
(3)求其平均分,即把三科成绩相加求其平均值.
(4)对学生的姓名按字典顺序或学号从小到大排序:
需要把有一个选择按姓名还是学号,如果选择1则是按姓名排序输出,2则是用学号.其中排序用的是简单排序法.
(5)按年龄和性别查找学生的基本信息:
需要输入年龄和性别同样的0代表male,其他为female.从学生1一直到学生三查找,如果找到就输出他的信息,否则则输出查无此人.
(6)按学号或姓名查找学生平均分的排名及各科成绩:
和上面一样根据提示选择是按学号,还是按姓名查找学生的平均分排名.假设按姓名则先把其平均分用简单选择法排序,然后再用一个循环找到和所需要查找的学生名字一样的学生,并输出其所对应的下标,即是他平均分的排名.
(7)查找某门课程的最高分,此时也需要选择是按哪门课程,此时的三科分别是一个枚举,1:
x:
=(math);
2:
=(chinese);
3:
=(english);
运用简单排序法从高到低排序,由于最高分可能不只一个所以只要分数和第一个的相同则输出.
(8)查找某门课成绩在某个分数段内的学生人数和学生基本信息:
”某门课程”和上述的处理一样,某个分数段需要自己输入,有一个记数器,同时赋初值0.从1到3开始循环如果某分数在自己定义的范围之内就加一,最后输出学生的信息。
(9)和第八步相似,此时要多用几个计数器,最后用计数器的值除以总人数即是其所占的百分比。
(10)按学号查找信息,只要找到学生就输入他的个人信息。
此时的信息就把以前的信息给覆盖了。
4.主要数据结构和标识符及其说明
其中涉及到记录,枚举,数组,整型,字符串等类型。
在变量的定义上实行见名知义的原则,在全局变量中:
year,month,day分别代表出生年,月,日,math,chinese,english,average分别代表数学,语文,英语,平均分。
Number代表学号,name代表名字,bith代表出生年月日,sex代表性别。
分数使用的是数组。
三个学生也是使用的数组类型,而学生的信息是用一个记录类型保存。
其中birth也是使用的记录类型。
在分程序中temp用来交换学生位置的媒介。
I,j,m为整型,用来循环的。
也有j为字符串用来代表性别。
还有c,x用来代表所选择的排序类型。
M,n用来输入分数段,counter用来计数。
Cc代表输入的学号。
5.程序运行实例
(1)输入学生信息
(2)求其平均分,此时不用输出,只需要按选择按2即可。
(3)按平均分或按某门课程的成绩从高到低输出学生信息:
不妨设按语文从低到高输出,其学号结果应为1,2,3
(4)执行第三步,选择3即可,不仿选择按姓名排序,结果应为学号为1的是第一个,其次为3号,最后为2号
(5)输入19岁,male,结果应为查无此人。
(6)查找某门课成绩最高的学生的基本信息,某门课成绩最高的可能不只一名学生
选择数学,其结果应为学生3
(7)查找没分数的人,输入2到8分,人数应该为三个人。
(8)其结果应为不及格人数为3,百分数为1
(9)输入要查找的学号1,并修改输入姓名,学号,性别,出生日期。
(10)选择11,退出界面。
6.源程序清单
programProject2;
{$APPTYPECONSOLE}
type
birthday=record
year:
integer;
month:
day:
end;
sub=(math,chinese,english,average);
student=record
number:
name:
string[10];
sex:
string;
birth:
birthday;
score:
array[sub]ofinteger;
var
stu:
array[1..3]ofstudent;
m,a:
averag:
array[1..3]ofreal;
x:
sub;
procedureinput;
n,i:
begin
fori:
=1to3do
withstu[i]do
begin
write('
学号:
'
);
readln(number);
姓名:
readln(name);
性别:
readln(n);
ifn=0then
='
male'
else
female'
;
出生日期(年,月,日):
readln(birth.year,birth.month,birth.day);
成绩,数学,语文,英语:
readln(score[math],score[chinese],score[english]);
end;
procedureave;
i:
fori:
averag[i]:
=(score[math]+score[chinese]+score[english])/3;
procedurepaixun(a:
integer);
temp:
student;
{额外加的一个小程序用来排序输出}
i,j:
caseaof
1:
=(average);
2:
3:
4:
=1to2do
forj:
=1to3-ido
ifstu[j].score[x]>
stu[j+1].score[x]then
=stu[j];
stu[j]:
=stu[j+1];
stu[j+1]:
=temp;
writeln('
按学号大小排序后的学生信息如下'
writeln('
学号'
:
10,'
姓名'
性别'
7,'
生日'
数学'
语文'
英语'
平均分'
10);
writeln(number,name,sex,birth.year:
6,'
/'
birth.month,'
birth.day,score[math]:
6,score[chinese]:
7,score[english]:
7,averag[i]:
11:
2);
procedurepaixun2(a:
ifa=1then
ifstu[j].name>
stu[j+1].namethen
writeln(number:
4,name:
5,birth.year:
6,birth.month:
4,birth.day:
4,sex:
10,score[math]:
4,score[chinese]:
4,score[english]:
4);
writeln(averag[i]:
end
else
procedurechazhao;
i,m,counter:
j:
要查找的年龄'
readln(i);
性别(字符串)'
readln(j);
counter:
=0;
form:
if(2011-stu[m].birth.year=i)and(stu[m].sex=j)then
withstu[m]do
end
=counter+1;
ifcounter=3then
查无此人'
procedurepingjunfenmingci(varc:
real;
n,i,j:
m:
casecof
要查找的学号'
read(n);
ifaverag[j]<
averag[j+1]then
=averag[j];
averag[j]:
=averag[j+1];
averag[j+1]:
ifstu[i].number=nthen
writeln(stu[i].score[math]:
4,stu[i].score[chinese]:
4,stu[i].score[english]:
平均分排名:
writeln(i);
要查找的姓名'
read(m);
ifstu[i].name=mthen
procedurechazhaohigh(p:
casepof
ifstu[j].score[x]<
ifstu[i].score[x]=stu[1].score[x]then
procedurechazhaonumber(p:
m,n,counter,i:
输入m,n(n大于m)'
readln(m,n);
fori:
if(score[x]>
=m)and(score[x]<
=n)then
10,name:
在'
m,'
到'
n,'
分数段的人数为:
counter);
procedurefenlei(a:
counter1,counter2,counter3,counter4,counter5,i:
counter1:
counter2:
counter3:
counter4:
counter5:
=90)and(score[x]<
=100)then
=counter1+1
elseif(score[x]>
=80)and(score[x]<
=89)then
=counter2+1
=70)and(score[x]<
=79)then
=counter3+1
=60)and(score[x]<
=69)then
=counter4+1
=0)and(score[x]<
=59)then
=counter5+1;
统计结果为'
优秀人数及百分比为:
writeln(counter1:
4,counter1/3:
良好人数及百分比为:
writeln(counter2:
4,counter2/3:
中等人数及百分比为:
writeln(counter3:
4,counter3/3:
及格人数及百分比为:
writeln(counter4:
4,counter4/3:
不及格人数及百分比为:
writeln(counter5:
4,counter5/3:
procedurechazhaobaocun;
cc,i:
birth1:
score1:
查找的学号'
readln(cc);
ifstu[i].number=ccthen
readln(name);
学号:
read(number);
性别:
readln(m);
出生日期:
readln(birth1.year,birth1.month,birth1.day);
数学分数,语文分数,英语分数'
readln(score1[chinese],score1[chinese],score1[english]);
{TODO-oUser-cConsoleMain:
Insertcodehere}
repeat
----------------------------------------------------------------------------'
1.录入每个学生的基本信息'
);
2.计算每个学生的平均分'
3.按平均分或按某门课程的成绩从高到低输出学生信息'
4.按学生姓名的字典顺序或按学号从小到大顺序输出学生基本信息'
5.按年龄和性别查找学生的基本信息'
6.按学号或姓名查找学生平均分的排名及各科成绩'
7.查找某门课成绩最高的学生的基本信息,某门课成绩最高的可能不只一名学生'
8.某成绩某分数段内的人数和信息'
9.统计某门课程各个类别的人数及百分比'
10.按学号查找学生基本信息,对学生信息进行修改后保存'
11.退出系统'
-----------------