学生管理系统实验报告.docx
- 文档编号:11147784
- 上传时间:2023-02-25
- 格式:DOCX
- 页数:21
- 大小:22.18KB
学生管理系统实验报告.docx
《学生管理系统实验报告.docx》由会员分享,可在线阅读,更多相关《学生管理系统实验报告.docx(21页珍藏版)》请在冰豆网上搜索。
学生管理系统实验报告
“高级语言程序设计”课程实习报告
班级:
姓名:
学号:
日期:
2011/12/25
1.实习目的
(1)学会用数组以及函数过程。
(2)学会pascal的各种操作例如枚举的输入与输出,学会更加熟练的运用三大循环结构
(3)学会菜单式输入输出
2.实习题目与程序功能
实验题目:
学生成绩管理系统(V2.0版本)
学生的数据信息包括:
学号、姓名、性别、出生日期、数学、语文、英语三门课成绩、平均分。
某班人数最多不超过30人,具体人数由键盘输入,编程实现如下菜单驱动的学生成绩管理系统,要求每一个功能使用一个子程序实现。
(1)录入每个学生的基本信息;
(2)计算每个学生的平均分;
(3)按平均分或按某门课程的成绩从高到低输出学生信息;
(4)按学生姓名的字典顺序或按学号从小到大顺序输出学生基本信息;
(5)按年龄和性别查找学生的基本信息;
(6)按学号或姓名查找学生平均分的排名及各科成绩;
(7)查找某门课成绩最高的学生的基本信息,某门课成绩最高的可能不只一名学生;
(8)查找某门课成绩在某个分数段内的学生人数和学生基本信息;
(9)按优秀(90~100)、良好(80~89)、中等(70~79)、及格(60~69)、不及格(0~59)五个类别,统计某门课程各个类别的人数及百分比;
(10)按学号查找学生基本信息,对学生信息进行修改后保存;
要求程序运行后,先显示菜单,并提示用户输入选项,然后根据用户输入的选项执行相应的操作,要求程序设计采用自顶向下逐步求精的方法,进行模块化程序设计以及增量测试方法。
功能描述:
(1)可以显示菜单,根据用户的需求选择可以进行的操作
(2)可以录入学生信息
(3)计算每个学生的平均分;
(4)按学生姓名的字典顺序或按学号从小到大顺序输出学生基本信息;
(5)按年龄和性别查找学生的基本信息;
(6)按学号或姓名查找学生平均分的排名及各科成绩;
(7)查找某门课成绩最高的学生的基本信息,某门课成绩最高的可能不只一名学生;
(8)查找某门课成绩在某个分数段内的学生人数和学生基本信息;
(9)按优秀(90~100)、良好(80~89)、中等(70~79)、及格(60~69)、不及格(0~59)五个类别,统计某门课程各个类别的人数及百分比;
(10)按学号查找学生基本信息,对学生信息进行修改后保存;
性能要求:
要保证程序有足够的健壮性。
3.算法设计
(1)在主程序中通过选择的循环实现菜单的输出。
(2)录入学生信息:
根据提示录入学生信息,,包括学号,姓名,出生年月,性别,成绩。
学生的信息用一个记录类型.性别用数字来代替字母,0代表male,其他为female
.
(3)求其平均分,即把三科成绩相加求其平均值。
(4)对学生的姓名按字典顺序或学号从小到大排序:
需要把有一个选择按姓名还是学号,如果选择1则是按姓名排序输出,2则是用学号.其中排序用的是简单排序法.
(5)按年龄和性别查找学生的基本信息:
需要输入年龄和性别同样的0代表male,其他为female。
从学生1一直到学生三查找,如果找到就输出他的信息,否则则输出查无此人.
(6)按学号或姓名查找学生平均分的排名及各科成绩:
和上面一样根据提示选择是按学号,还是按姓名查找学生的平均分排名。
假设按姓名则先把其平均分用简单选择法排序,然后再用一个循环找到和所需要查找的学生名字一样的学生,并输出其所对应的下标,即是他平均分的排名。
(7)查找某门课程的最高分,此时也需要选择是按哪门课程,此时的三科分别是一个枚举,1:
x:
=(math);
2:
x:
=(chinese);
3:
x:
=(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:
integer;
day:
integer;
end;
sub=(math,chinese,english,average);
student=record
number:
integer;
name:
string[10];
sex:
string;
birth:
birthday;
score:
array[sub]ofinteger;
end;
var
stu:
array[1。
.3]ofstudent;
m,a:
integer;
averag:
array[1.。
3]ofreal;
x:
sub;
procedureinput;
var
n,i:
integer;
begin
fori:
=1to3do
withstu[i]do
begin
write('学号:
');readln(number);
write('姓名:
’);readln(name);
write(’性别:
');readln(n);
ifn=0then
sex:
=’male'
else
sex:
='female';
write('出生日期(年,月,日):
');readln(birth.year,birth.month,birth.day);
write('成绩,数学,语文,英语:
');readln(score[math],score[chinese],score[english]);
end;
end;
procedureave;
var
i:
integer;
begin
fori:
=1to3do
withstu[i]do
averag[i]:
=(score[math]+score[chinese]+score[english])/3;
end;
procedurepaixun(a:
integer);
var
temp:
student;{额外加的一个小程序用来排序输出}
i,j:
integer;
begin
caseaof
1:
x:
=(average);
2:
x:
=(math);
3:
x:
=(chinese);
4:
x:
=(english);
end;
fori:
=1to2do
forj:
=1to3-ido
ifstu[j]。
score[x]>stu[j+1]。
score[x]then
begin
temp:
=stu[j];
stu[j]:
=stu[j+1];
stu[j+1]:
=temp;
end;
writeln('按学号大小排序后的学生信息如下');
writeln('学号':
10,'姓名’:
10,'性别’:
7,'生日':
7,'数学’:
10,’语文’:
7,’英语':
7,'平均分':
10);
fori:
=1to3do
withstu[i]do
begin
writeln(number,name,sex,birth.year:
6,'/',birth.month,'/',birth.day,score[math]:
6,score[chinese]:
7,score[english]:
7,averag[i]:
11:
2);
end;
end;
procedurepaixun2(a:
integer);
var
temp:
student;
i,j:
integer;
begin
ifa=1then
begin
fori:
=1to2do
forj:
=1to3—ido
ifstu[j].name>stu[j+1]。
namethen
begin
temp:
=stu[j];
stu[j]:
=stu[j+1];
stu[j+1]:
=temp;
end;
fori:
=1to3do
withstu[i]do
begin
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]:
4);
end;
end
else
begin
fori:
=1to2do
forj:
=1to3-ido
ifstu[j]。
name〉stu[j+1].namethen
begin
temp:
=stu[j];
stu[j]:
=stu[j+1];
stu[j+1]:
=temp;
end;
fori:
=1to3do
withstu[i]do
begin
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]:
4);
end;
end;
end;
procedurechazhao;
var
i,m,counter:
integer;
j:
string;
begin
writeln(’要查找的年龄’);
readln(i);
writeln(’性别(字符串)');
readln(j);
counter:
=0;
form:
=1to3do
if(2011-stu[m]。
birth。
year=i)and(stu[m]。
sex=j)then
withstu[m]do
begin
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]:
4);
end
else
counter:
=counter+1;
ifcounter=3then
writeln(’查无此人');
end;
procedurepingjunfenmingci(varc:
integer);
var
temp:
real;
n,i,j:
integer;
m:
string;
begin
casecof
1:
begin
writeln(’要查找的学号’);
read(n);
fori:
=1to2do
forj:
=1to3-ido
ifaverag[j]〈averag[j+1]then
begin
temp:
=averag[j];
averag[j]:
=averag[j+1];
averag[j+1]:
=temp;
end;
fori:
=1to3do
ifstu[i].number=nthen
begin
writeln(stu[i].score[math]:
4,stu[i]。
score[chinese]:
4,stu[i]。
score[english]:
4);
write('平均分排名:
’);writeln(i);
end;
end;
2:
begin
writeln(’要查找的姓名');
read(m);
fori:
=1to2do
forj:
=1to3—ido
ifaverag[j] begin temp: =averag[j]; averag[j]: =averag[j+1]; averag[j+1]: =temp; end; fori: =1to3do ifstu[i]。 name=mthen begin writeln(stu[i].score[math]: 4,stu[i].score[chinese]: 4,stu[i]。 score[english]: 4); write(’平均分排名: ');writeln(i); end; end; end; fori: =1to2do forj: =1to3-ido ifaverag[j]〈averag[j+1]then begin temp: =averag[j]; averag[j]: =averag[j+1]; averag[j+1]: =temp; end; fori: =1to3do ifstu[i]。 name=mthen begin writeln(stu[i].score[math]: 4,stu[i]。 score[chinese]: 4,stu[i]。 score[english]: 4); write('平均分排名: ');writeln(i); end; end; procedurechazhaohigh(p: integer); var temp: student; i,j: integer; begin casepof 1: x: =(math); 2: x: =(chinese); 3: x: =(english); end; fori: =1to2do forj: =1to3-ido ifstu[j]。 score[x] begin temp: =stu[j]; stu[j]: =stu[j+1]; stu[j+1]: =temp; end; fori: =1to3do ifstu[i]。 score[x]=stu[1].score[x]then withstu[i]do begin 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]: 4); end; end; procedurechazhaonumber(p: integer); var m,n,counter,i: integer; begin writeln('输入m,n(n大于m)'); readln(m,n); counter: =0; casepof 1: x: =(math); 2: x: =(chinese); 3: x: =(english); end; fori: =1to3do withstu[i]do begin if(score[x]〉=m)and(score[x]<=n)then counter: =counter+1; writeln(number: 10,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]: 4); end; writeln(’在’,m,'到',n,'分数段的人数为: ',counter); end; procedurefenlei(a: integer); var counter1,counter2,counter3,counter4,counter5,i: integer; begin caseaof 1: x: =(math); 2: x: =(chinese); 3: x: =(english); end; counter1: =0;counter2: =0;counter3: =0;counter4: =0;counter5: =0; fori: =1to3do withstu[i]do begin if(score[x]>=90)and(score[x]<=100)then counter1: =counter1+1 elseif(score[x]>=80)and(score[x]〈=89)then counter2: =counter2+1 elseif(score[x]〉=70)and(score[x]〈=79)then counter3: =counter3+1 elseif(score[x]〉=60)and(score[x]<=69)then counter4: =counter4+1 elseif(score[x]〉=0)and(score[x]〈=59)then counter5: =counter5+1; end; writeln('统计结果为’); write(’优秀人数及百分比为: ');writeln(counter1: 4,counter1/3: 4); write('良好人数及百分比为: ');writeln(counter2: 4,counter2/3: 4); write('中等人数及百分比为: ');writeln(counter3: 4,counter3/3: 4); write('及格人数及百分比为: ’);writeln(counter4: 4,counter4/3: 4); write('不及格人数及百分比为: ');writeln(counter5: 4,counter5/3: 4); end; procedurechazhaobaocun; var cc,i: integer; birth1: birthday; score1: array[sub]ofinteger; begin write(’查找的学号’); readln(cc); fori: =1to3do ifstu[i]。 number=ccthen withstu[i]do begin writeln('姓名: ');readln(name); writeln(’学号: ’);read(number); writeln(’性别: ’);readln(m); writeln(’出生日期: ');readln(birth1。 year,birth1.month,birth1.day); writeln('数学分数,语文分数,英语分数');readln(score1[chinese],score1[chinese],score1[english]); end; writeln(’按学号大小排序后的学生信息如下'); writeln(’学号’: 10,’姓名': 10,’性别’: 7,’生日': 7,’数学': 10,'语文': 7,'英语': 7,’平均分’: 10); fori: =1to3do withstu[i]do begin writeln(number,name,sex,birth.year: 6,’/’,birth.month,’/’,birth.day,score[math]: 6,score[chinese]: 7,score[english]: 7,averag[i]: 11: 2); end; end; begin {TODO-oUser-cConsoleMain: Insertcodehere} repeat writeln(’—--—-—--—---—--——-——-——--——-———---——--—-——---——-—-—-----————---—-—-——-—-—-——'); writeln(’1。 录入每个学生的基本信息’); writeln(’2。 计算每个学生的平均分’); writeln('3。 按平均分或按某门课程的成绩从高到低输出学生信息'); writeln(’4。 按学生姓名的字典顺序或按学号从小到大顺序输出学生基本信息'); writeln('5.按年龄和性别查找学生的基本信息’); writeln(’6.按学号或姓名查找学生平均分的排名及各科成绩'); writeln('7。 查找某门课成绩最高的学生的基本信息,某门课成绩最高的可能不只一名学生'); writeln(’8。 某成绩某分数段内的人数和信息’); writeln(’9。 统计某门课程各个类别的人数及百分比'); writeln('10.按学号查找学生基本信息,对学生信息进行修改后保存'); writeln(’11。 退出系统'); writeln(’--———————-———-——-——---—--————-——-——————--——-—-—--—————-—————-------——--————'); write(’要执行的操作’); read(m); casemof 1: input; 2: ave;
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 学生 管理 系统 实验 报告
![提示](https://static.bdocx.com/images/bang_tan.gif)