学生管理系统实验报告.docx

上传人:b****7 文档编号:11147784 上传时间:2023-02-25 格式:DOCX 页数:21 大小:22.18KB
下载 相关 举报
学生管理系统实验报告.docx_第1页
第1页 / 共21页
学生管理系统实验报告.docx_第2页
第2页 / 共21页
学生管理系统实验报告.docx_第3页
第3页 / 共21页
学生管理系统实验报告.docx_第4页
第4页 / 共21页
学生管理系统实验报告.docx_第5页
第5页 / 共21页
点击查看更多>>
下载资源
资源描述

学生管理系统实验报告.docx

《学生管理系统实验报告.docx》由会员分享,可在线阅读,更多相关《学生管理系统实验报告.docx(21页珍藏版)》请在冰豆网上搜索。

学生管理系统实验报告.docx

学生管理系统实验报告

“高级语言程序设计”课程实习报告

班级:

姓名:

学号:

日期:

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;

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 经管营销 > 经济市场

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1