版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、链表的学生管理系统报告1. 需求分析1.1 开发背景学生信息管理系统是针对学校人事处的大量业务处理工作而开发的管理软件,主要用于学校学生信息管理,总体任务是实现学生信息关系的系统化、科学化、规范化和自动化,其主要任务是用计算机对学生各种信息进行日常管理,如查询、修改、增加、删除等。学生信息档案的管理对于学校的管理者来说至关重要,学生信息是高等学校非常重要的一项数据资源,是一个教育单位不可缺少一部分。随着科学技术的不断提高,计算机科学与技术日渐成熟,计算机应用的普及已进入人类社会生活的各个领域,并发挥着越来越重要的作用。这种传统的手工管理模式必然被以计算机为物质基础的信息管理方法所取代。使用计算
2、机对学生档案进行管理,有着手工管理所无法比拟的优点,如:检索迅速、查找方便、可靠性高、存储量大、保密性好、寿命长、成本低等。这些优点能够极大地提高学生档案管理的效率,也是学校向科学化、正规化管理发展的必要条件,更是各个高等院校与世界接轨的重要条件。1.2数据需求学生管理系统能实现对大量的学生信息的管理处理,其中记录了学生的学号,姓名,性别,出生日期,各科成绩等。首先学号为字符型长度为十七位,姓名为字符串型长度为十七位,性别为字符型,female为女,male为男,出生年月日为整型,例如出生年为1995,出生月为6,出生日为30,各科成绩为实型。1.3功能性需求本程序可对学生管理系统的学生信息进
3、行增、删、改、查、排序、统计、保存入文件和从文件读取数据等操作。2. 概要设计2.1流程程序执行的命令包括:(1)录入(2)读取信息(3)存入数组(4)平均分或某课成绩排序(5)姓名或学号顺序输出(6)按照年龄和性别查找(7)查找平均分排名及成绩(8)查找某课最高成绩(9)查找某课成绩分数段内(10)统计人数及百分比(11)修改学生信息(12)删除学生信息(13)插入学生信息(0)退出系统菜 单信息查询统计信息录入输出信息维护更新信息修改信息删除信息增加信息录入信息读取入放入数组排序查找图2-1 流程图图2-2 主菜单2.2测试数据学号 姓名性别出生日期数学成绩语文成绩英语成绩1001sufe
4、male199506073456771002kaimale199405097090891003taofemale199304188090701004beimale1995070799100791005bingmale199609099090901006yafemale199308086050661007geefemale1995062488991001008fanfemale199401016655401009lilimale199406309084621010sangmale1994051570801003. 详细设计 3.1平均分或某课成绩输出学生信息分程序菜单选项数学、语文、英语和平均分
5、,选择按哪个科目进行排序,排序时用的是冒泡排序,依据选择的学科成绩由大到小排序,排序好了就将信息输出出来。3.2查找某课最高成绩注意最高成绩可能不止一人。该分程序建立在选择科目对成绩进行从大到小排序的基础上。首先在分程序菜单中选择要查询的科目,然后对该科目的成绩进行从大到小的排序,令第一个为最高成绩,输出学生信息,判断接下来的成绩是否等于最高成绩,若等于最高成绩输出该学生信息。3.3删除学生信息输入需删除的学生学号,输出该学生信息,使当前信息开始被下一学生信息覆盖,存储信息个数减少。3.4插入学生信息 学生信息存储个数增加,将新增信息保存至数组最后。4. 测试运行测试运行1:主菜单界面 图4-
6、1 测试运行2:录入学生信息图4-2测试运行3:读取信息图4-3测试运行4:平均分或某课成绩排序输出图4-4平均分排序输出 测试运行5:姓名或学号顺序输出图4-5 按姓名查找 测试运行:6:按年龄和性别查找图4-6 按年龄查找测试运行7:查找平均分排名及成绩图4-7 测试运行8:查找某课最高成绩图4-8测试运行9:查找某课成绩分数段内图4-9 测试运行11:修改学生信息图4-11 测试运行12:删除学生信息图4-12 测试运行13:插入学生信息图4-13测试运行14:退出系统图4-145. 总结展望5.1总结通过对学生管理系统的设计,我体会到了高级语言的灵活性。并且通过这个作业我了解到自己所掌
7、握的知识是远远不够的!要编出完美的代码需要自己下去看各种参考资料加上自己的思考。5.2展望 该系统还可在多方面加以拓展: (1)登录,可设置用户名和密码。(2) 插入学生信息时,若已有相同的学号存在,则不允许再插入相同的学号的学生信息。(3) 修改学生信息时,可提示,让用户选择要更改姓名、还是学号、还是成绩。而不要默认让用户把这个人的信息全部重新输入。修改学号时同样要注意不能出现重复学号(4) 还可在录入学生信息时增加学院、专业、民族等信息。6. 参考文献1 赵致琢.刘坤起等,高级语言程序设计,国防工业出版社,2010年2 赵占芳.刘坤起,高级语言程序设计实验教程,电子工业出版社,2
8、014年7. 源代码清单* Auther:sunxiaoying Number:413109030111 Name:Studentmanagement Function:学生成绩管理系统(数组) Date:2014_12_25 *program stumanagement;$APPTYPE CONSOLEuses definition in 'definition.pas', inputoutput in 'inputoutput.pas', sortfind in 'sortfind.pas', service in 'service.
9、pas', menu in 'menu.pas' begin /主程序 mainmenu; readln;end. /定义unit definition;interfacetype subject=(math,chinese,english,average); /成绩类型 inf=(name,number); student=record infor:arrayname.numberof string17; sex:string10; year:integer; month:integer; day:integer; score:arraymath.average of
10、 real; end; stuarr=array 1.30of student ; sfile=file of student;Var stu:stuarr; stufile:sfile; /文件变量 n,result,counter:integer;implementationEnd./菜单 unit menu;interface uses definition,inputoutput,sortfind,service; procedure mainmenu;implementationprocedure mainmenu;begin /主程序 writeln('*欢迎使用学生成绩管
11、理系统*'); while true do begin writeln('*'); writeln(' '); writeln(' 菜单: '); writeln(' '); writeln(' 1 录入 '); writeln(' 2 读取信息 '); writeln(' 3 存入数组 '); writeln(' 4 平均分或某课成绩排序 '); writeln(' 5 姓名或学号顺序输出 '); writeln(' 6 按照年龄和性
12、别查找 '); writeln(' 7 查找平均分排名及成绩 '); writeln(' 8 查找某课最高成绩 '); writeln(' 9 查找某课成绩分数段内 '); writeln(' 10 统计人数及百分比 '); writeln(' 11 修改学生信息 '); writeln(' 12 删除学生信息 '); writeln(' 13 插入学生信息 '); writeln(' 0 结束 '); writeln('请用户输入选项:');
13、 readln(n); case n of 1: savetofile(stufile); 2: outfromfile(stufile); 3: setuparray(stufile,stu,counter); 4: sortbyscore(stu); 5: sortbyorder(stu); 6: findbyns(stu,counter); 7: findbyranking(stu,counter); 8: findbyhighest(stu); 9: findbyrange(stu); 10: count(stu,counter); 11: revise(stu,counter); 1
14、2: delete(stu,counter); 13: append(stu,counter); /追加 0:begin ending; break; end; end; end; readln;end;End./录入输出 unit inputoutput;interface uses definition; procedure savetofile(Var stufile:sfile); procedure outfromfile(Var stufile:sfile); procedure setuparray(var stufile:sfile;var stu:stuarr;var cou
15、nter:integer);implementation功能:将输入的学生信息保存到文件中 便于多次运行 参数:变参stufile表示学生信息保存地址 procedure savetofile(Var stufile:sfile);Var i,n:integer; sum:real; s:student;begin TODO -oUser -cConsole Main : Insert code here assign(stufile,'student.dat'); rewrite(stufile); /以写状态打开文件 writeln('请输入班级人数:');
16、 readln(n); writeln('请输入学生的信息'); writeln('提示:女:female 男:male'); for i:=1 to n do begin sum:=0; writeln('学号:'); readln(rnumber); writeln('姓名:'); readln(rname); writeln('性别:'); readln(s.sex); writeln('出生日期:'); readln(s.year); readln(s.month);
17、 readln(s.day); if 2014-s.year>30 then /判断日期是否正确 begin writeln('年龄超范围 输入错误 请重新输入学生信息'); readln(s.year,s.month,s.day); end else begin case s.month of 1,3,5,7,8,10,12:result:=31; 4,6,9,11:result:=30; 2:if (s.year mod 4=0) and (s.year mod 100<>0) or (s.year mod 400=0) then result:=29 e
18、lse result:=28; end; if s.day>result then begin writeln('输入期有误 请重新输入') ; readln(s.year,s.month,s.day); end; end; writeln('数学:'); readln(s.scoremath); sum:=sum+s.scoremath; writeln('语文:'); readln(s.scorechinese); sum:=sum+s.scorechinese; writeln('英语:'); readln(s.sco
19、reenglish); sum:=sum+s.scoreenglish; writeln('平均分:'); s.scoreaverage:=sum/3; writeln(s.scoreaverage:4:0); write(stufile,s); end; close(stufile);end;功能:非首次运行 从文件中读取已保存学生信息 参数:变参stufile表示学生信息保存地址 procedure outfromfile(Var stufile:sfile);Var s:student;begin assign(stufile,'student.dat')
20、; reset(stufile); writeln('学号 姓名 性别 出生日期 数学 语文 英语 平均分'); writeln('_'); while not eof(stufile) do begin read(stufile,s); writeln(rnumber,#9,rname,#9,s.sex,#9,s.year:8,s.month:4,s.day:4,s.scoremath:8:0,s.scorechinese:8:0,s.scoreenglish:8:0,s.scoreaverage:8:0); end; close(st
21、ufile);end;功能;将原始数据保存到数组stu中 参数:变参stufile表示学生信息保存地址,变参stu表示数组,变参counter表示存储学生信息个数procedure setuparray(var stufile:sfile;var stu:stuarr;var counter:integer);begin counter:=0; /数组存储学生信息个数 assign(stufile,'student.dat'); reset(stufile);/以读状态打开文件 while not eof(stufile) do begin counter:=counter+1
22、; read(stufile,stucounter);/每读出一个数据,放入数组中 end; close(stufile);end;End./排序查找统计 unit sortfind;interface uses definition; procedure sortbyscore(var stu:stuarr); procedure sortbyorder(var stu:stuarr ); procedure findbyns(var stu:stuarr;var counter:integer); procedure findbyranking(var stu:stuarr;var cou
23、nter:integer) ; procedure findbyhighest(Var stu:stuarr); procedure findbyrange(var stu:stuarr); procedure count(var stu:stuarr;var counter:integer);implementation功能:按照选项对学生信息进行从高到低排序 参数:变参stu表示数组,枚举变量sortchoice1表示选择的排序方式,变量counter表示数组存储学生信息个数 procedure sort1( var stu:stuarr; sortchoice1:subject;var
24、counter:integer);var i,j:integer; temp:student;begin for i:=1 to counter-1 do for j:=1 to counter-i do begin if stuj.scoresortchoice1<stuj+1.scoresortchoice1 then begin temp:=stuj; stuj:=stuj+1; stuj+1:=temp; end; end; writeln('排序结果为:'); writeln('学号 姓名 性别 出生日期 数学 语文 英语 平均分'); writ
25、eln('_'); for i:=1 to counter do begin writeln(rnumber,#9,rname,#9,stui.sex,#9,stui.year:8,stui.month:4,stui.day:4,stui.scoremath:8:0,stui.scorechinese:8:0,stui.scoreenglish:8:0,stui.scoreaverage:8:0); end;end;功能:按照平均分或者某课成绩排序输出 参数:变参stu表示数组 procedure sortbyscore(var stu:st
26、uarr);var sortnumber:integer;begin writeln('1 math'); writeln('2 chinese'); writeln('3 english'); writeln('4 average'); writeln('选择排序方式:'); readln(sortnumber); case sortnumber of 1: sort1(stu,math,counter); 2: sort1(stu,chinese,counter); 3: sort1(stu,english,c
27、ounter); 4: sort1(stu,average,counter); end;end;功能:按照选项将学生信息从小到大进行排序 参数:变参stu表示数组,枚举变量sortchoice1表示选择的排序方式,变量counter表示数组存储学生信息个数 procedure sort2(var stu:stuarr; sortchoice2:inf;var counter:integer); /从小到大排序var i,j:integer; temp:student;begin for i:=1 to counter-1 do for j:=1 to counter-i do begin if
28、 rsortchoice2>stuj+1.inforsortchoice2 then begin temp:=stuj; stuj:=stuj+1; stuj+1:=temp; end; end; writeln('排序结果为:'); writeln('学号 姓名 性别 出生日期 数学 语文 英语 平均分'); writeln('_'); for i:=1 to counter do begin writeln(rnumber,#9,rname,#9,stui.sex,#9,stui.y
29、ear:8,stui.month:4,stui.day:4,stui.scoremath:8:0,stui.scorechinese:8:0,stui.scoreenglish:8:0,stui.scoreaverage:8:0); end;end;功能:按照姓名或者学号排序输出 参数:变参stu表示数组procedure sortbyorder(var stu:stuarr );var sortnumber:integer;begin writeln('选择排序方式:'); writeln('1 姓名'); writeln('2 学号'); r
30、eadln(sortnumber); case sortnumber of 1: sort2(stu, name, counter); 2: sort2(stu, number, counter); end;end;功能:按照年龄或性别查找学生信息 参数:变参stu表示数组,变量counter表示数组存储学生信息个数procedure findbyns(var stu:stuarr;var counter:integer);var x,findnumber,i:integer; y:string;begin writeln('选择查找方式:'); writeln('1
31、年龄 '); writeln('2 性别'); readln(findnumber); case findnumber of 1: begin write('请输入出生年份:'); readln(x); writeln('学号 姓名 性别 出生日期 数学 语文 英语 平均分'); for i:=1 to counter do begin if x=stui.year then begin writeln(rnumber,#9,rname,#9,stui.sex,#9,stui.year:8,stui.m
32、onth:4,stui.day:4,stui.scoremath:8:0,stui.scorechinese:8:0,stui.scoreenglish:8:0,stui.scoreaverage:8:0); break; end; end; end; 2: begin write('请输入性别:'); readln(y); writeln('学号 姓名 性别 出生日期 数学 语文 英语 平均分'); for i:=1 to counter do begin if y=stui.sex then begin writeln(rnumber,#9
33、,rname,#9,stui.sex,#9,stui.year:8,stui.month:4,stui.day:4,stui.scoremath:8:0,stui.scorechinese:8:0,stui.scoreenglish:8:0,stui.scoreaverage:8:0); break; end; end; end; end;end;功能:查找平均分排名及成绩 参数:变参stu表示数组,变量counter表示数组存储学生信息个数 procedure findbyranking(var stu:stuarr;var counter:integer) ;var i,
34、j:integer; temp:student; num:string;begin writeln('请输入需要查找平均分排名和成绩的学生学号:'); readln(num); for i:=1 to counter-1 do for j:=1 to counter-i do begin if stuj.scoreaverage<stuj+1.scoreaverage then begin temp:=stuj; stuj:=stuj+1; stuj+1:=temp; end; end; writeln('平均分总排名:'); writeln('学
35、号 姓名 性别 出生日期 数学 语文 英语 平均分'); writeln('_'); for i:=1 to counter do begin writeln(rnumber,#9,rname,#9,stui.sex,#9,stui.year:8,stui.month:4,stui.day:4,stui.scoremath:8:0,stui.scorechinese:8:0,stui.scoreenglish:8:0,stui.scoreaverage:8:0); end; writeln('_'); for i:=1
36、 to counter do begin if num=rnumber then begin writeln('该同学的平均分排名为:',i) ; writeln('成绩如下:'); writeln(' 数学 语文 英语 平均分'); writeln(stui.scoremath:8:0,stui.scorechinese:8:0,stui.scoreenglish:8:0,stui.scoreaverage:8:0); break; end; end;end;功能:查找最高成绩 参数:变参stu表示数组,变量counter表示
37、数组存储学生信息个数,枚举变量subjectchoice表示选择的科目procedure part(var stu:stuarr;subjectchoice:subject;var counter:integer);var i:integer ; highest:real;begin writeln('成绩最高的学生信息:'); writeln('学号 姓名 性别 出生日期 数学 语文 英语 平均分'); writeln('_'); writeln(rnumber,#9,rname,#9,stu1.sex,#9
38、,stu1.year:8,stu1.month:4,stu1.day:4,stu1.scoremath:8:0,stu1.scorechinese:8:0,stu1.scoreenglish:8:0,stu1.scoreaverage:8:0); highest:=stu1.scoresubjectchoice; for i:=2 to counter do begin if stui.scoresubjectchoice=highest then begin writeln(rnumber,#9,rname,#9,stui.sex,#9,stui.year
39、:8,stui.month:4,stui.day:4,stui.scoremath:8:0,stui.scorechinese:8:0,stui.scoreenglish:8:0,stui.scoreaverage:8:0); end; if stui.scoresubjectchoice<highest then begin break ; end; end;end;功能:选择科目 输出该科目最高成绩 参数:变参stu表示数组 procedure findbyhighest(Var stu:stuarr);var findnumber:integer;begin writeln(
40、9;选择查找方式:'); writeln('1 math'); writeln('2 chinese'); writeln('3 english'); writeln('请输入选择的科目'); readln(findnumber); case findnumber of 1:begin sort1(stu,math,counter); part(stu,math,counter); end; 2:begin sort1(stu,chinese,counter); part(stu,chinese,counter); end
41、; 3:begin sort1(stu,english,counter); part(stu,english,counter); end; end;end;功能:查找成绩范围 参数:枚举变量subjectchoice表示选择的科目,变参stu表示数组,变量counter表示数组存储学生信息个数procedure range(var stu:stuarr;subjectchoice:subject;var counter:integer);var i: integer; mindata,maxdata:real;begin writeln('输入查找范围的最小值'); readl
42、n(mindata); writeln('输入查找范围的最大值') ; readln(maxdata); writeln('学号 姓名 性别 出生日期 数学 语文 英语 平均分'); writeln('_'); for i:=1 to counter do begin if (stui.scoresubjectchoice<=maxdata) and (stui.scoresubjectchoice>=mindata) then begin writeln(rnumber,#9,rname,#9,s
43、tui.sex,#9,stui.year:8,stui.month:4,stui.day:4,stui.scoremath:8:0,stui.scorechinese:8:0,stui.scoreenglish:8:0,stui.scoreaverage:8:0); end; end;end;功能:选择科目 输出该科目分数段内的学生信息 参数:变参stu表示数组 procedure findbyrange(var stu:stuarr); / 分数段var findnumber:integer;begin writeln('选择查找方式:'); writeln('1 math'); writeln('2 chinese'); writeln('3 english'); writeln('请输入选择的科目'); readln(findnumber); case findnumber of 1
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 富春山居图介绍课件
- 家长康复培训课件
- 影视发行合同2026年数据共享协议
- 2026年大件运输夜间作业合同
- 保密协议2026年财务信息合同
- 2026年汽车车身修复合同
- 2026年货运代理合同协议范本
- 2026年医疗健康管理服务合同
- 2026年商务汽车租赁合同
- 2026年室内设计效果图合同协议
- 昆山钞票纸业有限公司2026年度招聘备考题库附答案详解
- 2025年巴楚县辅警招聘考试备考题库附答案
- GB/T 46793.1-2025突发事件应急预案编制导则第1部分:通则
- 老人再婚协议书
- 2025年九江理工职业学院单招职业适应性测试模拟测试卷附答案解析
- 广东省深圳市盐田高级中学2025-2026学年高三上学期12月末测试数学试题(含答案)
- 2025辽宁沈阳盛京资产管理集团有限公司所属子公司沈阳华海锟泰投资有限公司所属子公司招聘5人考试参考题库附答案
- 22为中华之崛起而读书 教学课件
- 2026年安全员之C证(专职安全员)考试题库500道附完整答案【网校专用】
- 2025山东劳动职业技术学院(山东劳动技师学院)招聘8人备考考试试题及答案解析
- 会计师事务所项目经理助理面试题及答案
评论
0/150
提交评论