基于LAMP平台的中学学生成绩管理系统的设计与实现

上传人:仙*** 文档编号:28059018 上传时间:2021-08-23 格式:DOC 页数:29 大小:974.50KB
返回 下载 相关 举报
基于LAMP平台的中学学生成绩管理系统的设计与实现_第1页
第1页 / 共29页
基于LAMP平台的中学学生成绩管理系统的设计与实现_第2页
第2页 / 共29页
基于LAMP平台的中学学生成绩管理系统的设计与实现_第3页
第3页 / 共29页
点击查看更多>>
资源描述
基于LAMP平台的中学学生成绩管理系统的设计与实现摘 要:成绩管理作为中学教务管理的主要任务,其自动化的实现将对中学信息化建设有极大推动作用。本系统考虑到基层中学的实际情况,基于LAMP平台对系统各功能模块进行设计,使用PHP结合MysQL数据库,建立用户身份验证机制,实现成绩录入、修改和查询等成绩管理基本功能。着重设计了成绩分析功能,实现对班级整体成绩的分析,能快速统计并显示各分数段学生名单,并以直观的条形图形式展示总体成绩情况。针对个人成绩分析,系统利用PHP动态生成图像技术生成学生个人成绩波动折线图,对学生个人某一学科多次考试成绩进行纵向比较。系统能有效帮助教师或学生根据成绩数据调整教学方法或学习方法。运行结果表明,系统稳定、安全、可靠,基本实现预先设计的功能。关键词:成绩管理 PHP MySQL 数据分析 教学辅助1 引言办公自动化在信息时代已成为必然趋势,近几年随着硬件成本降低,个人计算机普及,使得越来越多基层中学有条件由传统手工办公方式转为电子自动化办公的新方式。教务管理是学校日常管理的重要组成部分,据笔者调研发现,学生成绩管理是中学教务管理的主要任务,成绩管理自动化能使教务管理工作更加高效,方便各职能部门协同作业1,加快校园信息化建设步伐;能更加准确、科学的反映学生学习情况,为学校课程的调整和设置提供有效数据;能让基层中学教师更方便管理和分析学生成绩;能让学生通过查看分析图表更直观了解自己成绩的变化情况。Excel等数据管理分析软件能为中学成绩管理提供较好的解决方案。但处于由手工到自动化的转型期的很多基层中学教师,由于计算机基础较差,未能使用Excel在数据管理分析方面出色的功能。而Excel等软件由于桌面软件固有的局限性,不方便学校对学生成绩进行统一管理。当前,全国各高校基本上都有自己的教务管理软件,为学校统一管理学生成绩提供有效的解决方案。如笔者所在的陕西师范大学所使用的由某软件公司开发的教务管理系统,该系统由校方向软件公司定制,由专业团队负责开发并维护。系统基于B/S架构,有丰富的教务管理功能,实现了高校适用的选课管理、学分管理、成绩管理等功能。但高校所使用的教务管理软件相对基层中学而言成本太高,又因系统过于庞大导致维护工作量大,而一般基层中学地处偏远,没有专业人员负责维护。另一方面,这类系统所实现的功能如选课管理等在当前中学并不需要,中学教务管理的主要任务是成绩管理,高校的教务管理系统普遍没有对成绩管理和分析功能进行深入研究。一些硬件设施条件较好的中学已经部署教务管理相关软件,这类系统软件大多由当地规模较小的软件公司开发,没有遵循基本的软件工程方法,随意堆积代码,以最快的开发方式(无论系统设计是否符合规范)低价格出售给基层中学使用,有数据安全隐患2,可能会导致不可预知的、难以维护的错误。在成绩分析方面这类系统没有实现或没有做深入研究,只有成绩录入、修改等基本功能,未对学生成绩数据进行挖掘研究3,不能实现对学生成绩进行科学分析后,以科学的数据帮助教师改进教学方法,帮助学生改进学习方法。本系统基于LAMP平台,即使用Apache作为Web服务器,在Linux环境下,以MysQL为后台数据库支持,以PHP为后台脚本语言,严格遵从软件工程开发方法,为中学学生成绩管理提出有针对性的解决方案。系统基于B/S架构,可多地域任意时间段访问,方便学校和教师统一管理成绩。对系统界面进行优化,加强人机交互,方便计算机水平较低的教师使用。因LAMP平台开源技术4特点,系统具有开发成本及硬件成本低、稳定可靠、跨平台等特点。使用功能模块化设计,后期维护方便,有良好的可扩展性,可作为中学教务管理系统的子系统5。系统实现了有安全访问控制6的用户身份验证机制,分为教师管理后台和学生浏览前台界面。在实现基本的成绩录入、修改和查询等基本功能的前提下,对成绩分析模块进行了深入研究,实现从数据库获取数据并动态生成相应成绩分析图表,一方面能直观反映整体成绩情况,另一方面能以图表的方式更直观的反映各个学生的个人成绩波动情况7。2 系统开发的关键技术 2.1 LAMP平台LAMP是Linux+Apache+MySQL+PHP网站架构的通用缩写,是目前国际流行的Web框架,该框架包括:Linux操作系统,Apache网络服务器,MySQL数据库,PHP后台脚本编程语言,框架所有组成产品均是开源软件。与微软的.NET架构相比,LAMP具有通用、跨平台、高性能、低价格等优势,与Java/J2EE架构相比,LAMP具有Web资源丰富、轻量、快速开发等特点,因此无论是从性能、质量还是开发成本上考虑,LAMP平台都是实现中学学生成绩管理系统的首选8,以下对该平台各个组成部分作简要介绍。(1)GPL版权声明:GPL授权是开源技术得以发展壮大的原因之一,LAMP平台的组成软件几乎都使用GPL版权声明。GPL全称为General Public License,即通用公共许可证,有GPL版权声明的软件即是通常所说的“自由软件”,GPL的创立者史托曼(Richard Mathew Stallman)对“自由”的定义是:用户可以自由执行、复制、再发行、学习、修改与强化自由软件。正是因为这一开放精神,使得遍布世界各地的工程师们组成一个技术力量雄厚的“虚拟团队”,不断对自由软件源码查找漏洞进一步完善,使得自由软件具有安全性好、执行效率高等显著特点。当然,并不是任何自由软件都是完全免费,事实上自由软件是可以销售的,只是不能仅仅销售软件,还需搭配相应的售后服务。如目前有很多Linux开发商在销售各种Linux发行版,但他们不能仅仅销售Linux系统,还需给用户提供特定的技术升级服务。(2)Linux:Linux是类Unix开源系统,内核原型是由托瓦兹(Linus Torvalds)于1991年基于GPL版权声明发布。由于使用GPL授权,自Linux发行以来很多优秀工程师不断对其核心进行改善,对硬件的兼容性比Unix系统好,且很好继承了Unix系统良好性能,使Linux拥有很高的稳定性、完全性,是当前众多企业搭建Web站点服务器的首选平台。Linux有很多发行版本,本系统所选用的CentOS(Community Enterprise Operating System)是Linux发行版之一,CentOS源代码与著名的商业Linux系统RHEL(Red Hat Enterprise Linux)相同,拥有与RHEL相当的高稳定性。RHEL、SUSE LE等Linux企业版,提供的后期升级服务均是收费,无法免费在线升级,而CentOS是由开源社区开发,免费提供升级服务,因此成绩管理系统用CentOS替代RHEL做服务器。(3)Apache:Apache是目前世界使用最多的Web服务器,使用率超过60%。它是自由软件,开发人员可以根据自己的需要对相关模块进行改写,有良好的可扩展性。另外,Apache可以兼容Linux和Windows等主流平台,以其轻量、运行速度快和稳定9-10等特点深受Web开发人员喜爱。(4)MySQL:MySQL是使用GPL授权的关系数据库管理系统(RDBMS),兼容Windows和Linux系统。在GPL许可下,可以免费使用,在商业许可下,其费用也很少。相比于价格昂贵的Mircrosoft SQL Server、Orcal等关系数据库管理系统,MySQL大大减少了系统成本,而它拥有高性能、可跨平台、使用和管理方便、运行速度快、安全可靠性高等优点,可以高效地存储、搜索、排序和检索数据11。本系统使用MySQL作后台数据库支持软件,在降低系统成本的同时,能方便、高效的对学生成绩数据进行管理和分析12。(5)PHP:PHP是服务器端解释脚本编程语言,是开放源代码的自由软件,专门为Web开发设计,是目前最流行的Web编程脚本语言之一,与JSP、ASP、ASP.NET相比具有简易性、高安全性、开发速度快和执行灵活等优点13。由于PHP是自由软件,其网络资源丰富,基于PHP的开发框架14众多,如较为成熟的Smarty,Yii和Zend Framework等。本系统的实现主要使用PHP作为后台脚本编写语言,结合MySQL数据库实现了成绩管理和分析等相关功能15。2.2 框架与布局系统严格遵循软件工程方法,使用分层设计16,保证系统安全性,方便系统维护及扩展。页面布局全部采用DIV+CSS技术,便于系统重构。2.2.1 系统框架为了使开发更加高效,系统安全稳定,后期维护简单、方便,系统综合采用多种分层技术构造框架。在目录结构上,按照组件、逻辑、内容和源代码库将目录分成多个部分,目录结构图如图1所示。整个系统包含于SRMS目录,其它组件存放于SRMS的子目录。公共可访问的文件如系统登录首页login.php等页面存放在pulic_files目录,另外,在public_files专门下创建css、img和js分别存放样式代码、系统使用的图像及Javascript文件。lib文件存放系统运行过程中会调用的库文件,sql是使用SQL语句操作数据库的相关文件。图 1 系统目录结构Fig.1 Systems Directory Structure除了目录结构分层设计外,代码也使用了代码分解技术。将各个功能模块的代码分解,构造相关函数,再通过函数调用实现相关功能。这样避免了单段代码过长,使代码容易阅读,易于理解,方便代码重用,避免重复编写大量代码,提高系统开发速度。系统在实现过程中多处使用该技术。例如,在系统中多处需要连接数据库,可以在lib目录下创建专门连接数据库的函数db_fns.php,代码如下:该函数能抛出错误信息,在需要连接数据库的页面使用require_once(db_fns.php);包含该函数,再使用$conn = db_connect();便能取得数据库连接句柄。为了更加便于函数调用,把常用的函数全部包含于functions.php文件,如下所示:在其它页面只需写一行代码:require_once(functions.php);就能实现在页面中调用特定函数。在设计系统框架时还使用了逻辑和内容分离技术,即PHP与HTML分离。将逻辑从内容分离、内容从外观分离可以使系统更易于长期使用和维护。系统把常用的显示内容的HTML代码存放于output.php文件里,其中代码类似于下面代码: 在需要输出内容的页面以如下代码所示的方式直接调用函数即可:getMessage(); /获取错误信息do_html_url(./public_files/login.php, 重新登录); /创建超链接do_html_url(./public_files/register_form.php, 注册);do_html_main_footer(); /主体内容结束do_html_footer1();/显示页面页脚信息?2.2.2 用DIV+CSS布局页面传统的网页布局方式一般采用表格,但层叠样式表CSS出现后,以其在Web页面外观控制上的优越性能迅速取代了传统的布局方式,目前几乎所有站点都使用CSS布局页面。使用CSS技术能将内容和外观分离,使得开发人员可以更加专注于后台内容开发,外观由专门负责界面设计的前端设计师设计,这有利于系统的逻辑和内容研发,而由专业界面设计人员负责外观,人机交互会更好。即便如这个系统一样开发和布局都由一个人完成,也容易系统的后期维护和长期使用。在布局页面时使用HTML的块元素div配合CSS使用,还能达到传统表格无法完成的效果。本系统专门建立存放CSS文件的目录,在目录下为不同页面的布局创建不同的布局文件。如系统登录首页的布局文件为login.css,在login.php页面的头部标签里加上一行代码:即可配合使用login.css文件定义的布局。系统利用CSS,使首页的登录框于页面居中,如图2所示。图 2 系统登录首页界面Fig.2 Systems Login Page该页面能在浏览器窗口大小调动情况下始终居中,实现该功能的主要CSS代码如下:#login_form width:280px; height:170px; position:absolute;/*随着浏览器大小的改变,页面始终居中*/ left:50%; top:50%; margin-left:-140px; margin-top:-85px;3 系统设计在确定系统框架及页面布局使用的技术后,对系统进行总体设计。本系统设计分为两个部分:系统功能模块设计和数据库设计。它们在系统流程图(图3)框架下进行设计。图 3 系统流程图Fig.3 Systems Flowchart3.1 系统功能模块设计使用模块化设计,按功能将系统分为几个模块分别进行编码,各模块编码实现后再整合调试,提高代码重用,使系统逻辑更为清晰,便于后期维护和功能扩展。系统最主要的两个模块分别是教师管理后台和学生可浏览的前台。这两个模块均使用HTML的frame框架布局,利用用户身份验证机制为特定用户显示个性化界面,模块与模块之间存在相互调用关系。3.1.1 前台功能模块系统前台包括系统登录首页、用户注册、重置密码、修改密码及错误提示页面,这些页面都使用DIV+CSS控制外观,除登录页面单独使用login.css进行布局外,其它页面都通过给各自的div块元素定义不同的id或class来使用同一个CSS文件layout.css进行布局,便于维护。还通过命名相同的class,共用某个样式,使界面风格统一,减少编写CSS样式代码工作量。前台功能模块中最重要的是学生用户可以浏览的成绩管理模块。该模块的框架如图4所示:图 4 学生界面框架Fig.4 The Frame of Students Page学生从首页登录系统,由身份识别系统对学生的身份属性进行识别,系统自动导向学生界面。学生界面由两大模块及大模块下的相关小模块组成。用户识别模块可识别学生身份,针对不同的学生显示与“欢迎陈建康同学”相类似的个性化信息,该模块还将集成注销登录及修改密码功能。成绩管理模块有查询成绩功能和分析成绩功能。在查询功能中,学生用户可按学科快速查询该学科总体成绩。在分析成绩功能中,学生可按学科和考试时间查看班级整体成绩分析情况,包括平均分、各分数段人数及该分数段学生名单,能通过图表直观查看分析结果。通过整体分析功能进行成绩横向比较,让学生了解自己当次考试成绩在班级的位置,及时调整自己的学习计划和心态。另外,作为本系统最重要的功能,学生可通过分析成绩模块中的个人分析功能对自己某学科的成绩进行纵向比较,通过查看系统自动生成的有数据描点的折线图了解自己几次考试成绩的波动情况,以数据为依据,联系学生生活实际,分析自己在某一时间段内成绩上升或下滑的具体原因,为保持一个良好的学习状态制定周详的学习计划。3.1.2 后台功能模块教师管理后台模块与学生的前台界面相类似,在系统开发时通过代码复用及函数调用实现相同功能。教师管理后台模块的框架图如图5所示:图 5 教师管理后台框架Fig.5 The Teacher Admin Frame系统对教师身份进行识别后,将在用户识别模块显示“欢迎卢俊岭老师”一类个性化信息。其它模块功能与学生前台界面相似。在教师管理后台模块中,主要增加了录入成绩和修改成绩功能。只允许教师从后台对成绩进行录入和修改操作,学生没有修改成绩的权限,这保证了系统的可靠性。在录入成绩模块中,教师能够非常直观的、简便的按照学科及考试月份对全班学习成绩进行录入工作,录入成功后系统立即返回录入结果,如果发现有录入错误,使用修改成绩功能修改。在修改成绩模块中,同样按照学科及相应考试月份进行修改,修改时,系统可显示成绩修改前的数据,方便修改,修改成功后立即返回修改后的成绩表。教师通过使用教师管理后台,能便捷的对学生成绩进行录入、修改和查询等基本管理。系统还能帮助教师实现对学生成绩的分析。通过对本班整体成绩的分析,了解各个分数段的人数,针对不同分数段的学生采取不同的指导方式,以求取得更好的成绩。对比多次考试平均分,了解教师在某段时间教学上的状态,以科学的数据指导自己教学方法的改进。另外,还可通过分析学生个人成绩波动情况,对个别学生进行有针对性的指导。3.2 数据库设计系统中所使用的数据全部使用数据库存储,方便统一管理数据,结合PHP和MysQL数据库,可以实现对数据进行分析。系统以功能为驱动,遵行数据库设计规范,对该系统需要使用的教师和学生数据建模,系统的分析各个数据之间的关系,避免数据库保存冗余数据,为每个表选择有意义的主键。最后构造的数据库模型图如图6所示:图 6 SRMS数据库模型Fig.6 SRMS Database Moduel在SRMS数据库里创建如模型所示的7张数据表。teacher和student表分别记录教师和学生的id(学号或工号)、名字、密码和email,两张数据表的结构如图7所示。用id字段作为表的主键,id,name,passwd和email的值均不能缺省,如果允许缺省可能会导致数据冗余,因为只有学号没有学生姓名或只有教师名字没有别的相关信息这种情况是不允许存在。图7 student和teacher表结构Fig.7 The Structure of Student and Teachers Database Tableyw、sx、yy、wl、hx分别存放学生语文、数学、英语、物理、化学成绩数据。为了把更多精力放在分析功能的设计上,系统仅以5个学科4次考试成绩这个简单的模型作为系统开发的测试数据,作为测试模型,该方法是可行的。这5个表的结构如图8所示,sid是学生学号,是其所处关系的外键,当查询数据时,可利用外键,引用student表的数据,达到同时显示学生学号、姓名和成绩目的,避免了空间的浪费。记录成绩的字段皆设置为float浮点型数据,以中学实际成绩为依据,设置为5位有效数字,精确到小数后两位,在教师录入数据时,对录入数据的最大值做限定。图 8 成绩表结构Fig.8 The Structure of Scores Database Table4 系统功能模块的实现系统所有功能模块以成绩管理模块为核心,为提供安全、稳定、方便可用、可维护性好的成绩管理模块而进行设计并实现。4.1 成绩管理模块的实现成绩管理模块是本系统的核心,该模块的实现分为成绩的录入、修改和查询基本操作部分及对成绩分析功能的深度研发部分。模块的实现主要是利用PHP脚本语言结合MySQL对数据进行查询和分析。此外,对该模块使用界面优化技术,使教师和学生更容易使用本系统。4.1.1 成绩管理的基本操作成绩管理的基本操作分为录入、修改和查询3个部分,在教师管理后台可使用全部功能,学生界面去掉录入、修改成绩功能,查询功能为教师管理后台和学生前台界面所共用。(1)录入成绩:录入成绩需按学科和考试月份进行录入,通过表单传递学科和月份信息,创建insert_form.php文件作为学科和月份信息选择页面,主要代码如下:请选择学科:语文数学英语(接下一页)物理化学请选择考试月份:1月份2月份3月份页面显示结果如图9所示:图9 成绩录入选择表单Fig.9 The Select Form of Insert Score Page点击“开始录入”后,表单将以post方式向insert.php页面传递course和month相对应的值。在insert.php页面中,使用:$course = $_POSTcourse;$month = $_POSTmonth;从全局数组$_POST里接受数据,并分别创建短变量名$course和$month,便于程序中其它地方使用。在insert.php页面中,首先使用require_once(./db_fns.php);包含数据库连接函数,在页面中以$conn = db_connect();实例化php的mysqli类,创建到数据库的连接。成绩的录入以表格形式(见图10)显示录入框,该系统在创建这类表格时大量使用了动态显示表格技术,根据数据库记录的实际数据显示表格的行数。实现这一功能的主要代码如下:$conn = db_connect();$result = $conn-query(select * from student order by id asc);fetch_object() ? input type=hidden name=sid value=id;? / id;?name;?图10 成绩录入表格Fig.10 The Table of Insert Score Page循环条件里的$result-fetch_object()在每次循环时以给$stu赋值,在每个循环体里使用对象属性值生成特定的表格行。另外,在表单中还设置一些标签的type设置为“hidden”以隐藏的方式向insert.php页面传值,从而使在前端如图10的页面中并没有看到使用hidden的input元素,但能够向指定页面传递数据。insert.php页面仅仅完成成绩数据收集工作,真正往数据库里写入数据的操作是在insert_fns.php,主要的代码如下:if ($month = ks1) $sql = insert into .$course. (sid,.$month.) values ;/构造插入SQL语句for ($i=0;$i0) $sql = substr($sql,0,strlen($sql)-1);$conn-query($sql);当选择的月份是1月份时会执行上述代码,使用for循环创建SQL查询语句,使用insert关键字把学生成绩插入到数据库中。该技术结合循环实现批量查询数据,这一技术在本系统其它地方也多次使用,能利用数组及程序控制,实现批量向数据库录入数据。导入完数据后,使用select语句,立即返回录入结果。(2)修改成绩:修改成绩的实现方法与录入成绩大致类似,使用SQL里的update关键字对数据进行修改。从update_form.php页面选择需要修改的学科及考试月份,使用表单的post方式向update.php页面传递course和month两个变量信息,update.php根据变量的不同,自动生成相应行数的成绩修改表格,最后再由update_fns.php更新数据库中相应数据表的数据,并返回修改后的成绩。在生成修改成绩输入表时,update.php使用了一个关键技术,使得教师可以看到未修改前的成绩,如图11所示:图11 修改成绩表格Fig.11 The Table of Update Score Page该技术实现的关键代码如下:input type=text name=result value=ks1; ?/使input元素有默认值,即当教师进行修改时,表格会显示数据库中记录的原来的成绩值,当往表单元素input重新赋值时,新值会更新到数据库中,这大大方便了教师进行成绩的修改。(3)查询成绩:成绩录入和修改的实现已经涉及成绩查询功能,查询功能的实现较为简单,单独以功能模块的形式来完成该功能其一是为了便于教师更快速的查询到相应成绩,其二是学生前台可以通过查询的方式查看成绩。无论是教师管理后台还是学生的前台,默认的显示页面就是查询功能,如图12所示。图12 系统默认显示界面Fig.12 The Default Display Interface4.1.2 成绩分析成绩分析是成绩管理模块的核心,分为整体分析和个人分析两部分。系统使用PHP调用MySQL中的成绩数据,分别对班级总体成绩情况和各个学生的成绩波动情况进行了分析,并将所获取的数据动态生成图表,直观明了的表现整体及个人的成绩水平,以方便快捷的方式为教师改进教学方法和学生调整学习计划提供科学的数据。(1)整体分析:整体分析是以班级为研究对象,按学科按考试月份分析。如图13所示,在显示各分数段学生名单的同时,整体分析功能还列出了班级该学科当次考试总体成绩情况表。分数段划分为不及格(小于60分)、60以上、70以上、80以上、90以上共5个分数段,在选定学科及考试月份情况下,系统自动显示5个分数段学生名单,便于教师查看处在某一分数段的学生群体,对不同分数段的学生群体根据实际情况作有针对性的辅导和帮助。学生也可通过该功能了解与自己同处一分数段的同学都是哪些,比自己成绩更出色的还有哪些同学,找准自己在班级里成绩水平的位置,通过与那些相对自己处在更高分数段的同学对比,评估自己成绩应该能够达到的高度,进而调整学习计划,实现自己的预期目标。此外,系统还通过自动生成总体成绩情况表,列出平均分及各分数段学生人数,让教师和学生更易把握该学科当次考试的总体情况,该情况分析表还可以选择以如图14所示的条形图方式显示,这个条形图比表格更直观的反应了各分数段人数所占的比例。图13 整体分析图Fig.13 The Overalls Analysis Chart图14 总体情况条形图Fig.14 The Overalls Bar Chart整体分析功能的实现重用了部分成绩管理的基本操作模块里的功能,学科和考试月份的选择功能与基础操作部分相似,都是利用表单向服务器传递数据。整体分析的具体实现在all_analyse.php页面完成。首先创建相应的SQL查询语句,从数据库中获取对应分数段的学生名单,如取得某学科1月份考试成绩大于等于80的学生名单的主要代码如下:$conn = db_connect();$sql = select id , name , .$month. from student , .$course. where student.id = .$course.sidand .$course.$month. = 80 order by .$month. desc ; $result = $conn-query($sql);在这段代码中,创建SQL查询语句时使用外键关联两个数据表,从student表和选定的学科course对应的表中获取数据,在查询数据时使用相关SQL子句获取特定条件的数据,如and .$course.$month. = 80使所获取的成绩数据必须大于或等于80。然后还需对所获取的数据进行排序,order by .$month. desc表示结果以成绩值的大小递减排序。最后,以表格的形式动态显示数据来显示最终结果,效果如图15所示。其它分数段实现的方法与此类似。图15 在某一分数段学生名单Fig.15 List of Students in A Fraction of The Segment另外,在使用SQL语句查询数据并获得特定分数段的名单后,可调用数据对象$result的num_rows成员获取当前分数段的记录行数,即学生总数。如使用$totalNum = $result-num_rows;把符合条件的学生总数记录在变量$totalNum中,然后把所有统计出来的各分数段人数据制作成如图16所示的表格。图16 总体情况表格Fig.16 Overall Form点击图16中的“查看图表”,可显示如图14所示的条形图,该条形图是由PHP创建的动态图像,相关技术实现见个人分析功能。(2)个人分析:个人分析功能是以学生个人为研究对象,对其在某学科多次考试成绩的波动情况进行分析。使用整体分析功能可以实现对学生个人成绩在班级中位置的横向比较,但整体分析未能反应个人成绩的波动情况,不利于掌握学生个人学习状态的变化。个人分析功能利用GD2函数库与数据库,动态绘制反应学生个人多次考试成绩波动情况的折线图,如图17所示。图17 学生成绩波动折线图Fig.17 The Line of Student Chievement学生成绩波动图能根据学生的不同,动态生成以学生自己名字命名的图表标题,并将该学生在几次考试的成绩作为图像有关坐标的数据,最终绘制成折线图。实现该功能,首先连接数据库,获取学生的成绩数据并以数组变量$ks存放,主要代码如下:$conn = db_connect();$sql = select id, name, ks1, ks2, ks3 from student,.$course. where student.id = .$course.sid and student.id = .$id.;$result = $conn-query($sql);$rows = $result-fetch_row();$stuNam = $rows1; /获得学生姓名$ks = $rows2;/1月份考试成绩$ks = $rows3;/2月份考试成绩$ks = $rows4;/3月份考试成绩$ks = $rows5;/3月份考试成绩取得数据后,将进行绘制图像步骤。在实际绘图之前,提倡先预定义在绘图过程中需要经常使用的参数,如图形尺寸、字体和颜色值等,这方便后期调整和修改,使用有意义的变量名,能够使代码更容易阅读。在准备工作做完后,使用$im = imagecreatetruecolor($width, $height);创建一个图像标识符,利用GD2图像函数绘制图像时必须有一个图像标识符。接着可以开始绘制图像的框架:/绘制有背景颜色的画布-给指定大小的矩形填充颜色imagefilledrectangle($im, 0, 0, $width, $height, $bg_color);/给画布绘制外边框imagerectangle($im, 0,0, $width-1, $height-1, $line_color); /绘制Y轴imageline($im, $x, $y, $x, $height-$bottom_margin, $line_color);/绘制X轴imageline($im, $x, $height-$bottom_margin, $width-$right_margin, $height-$bottom_margin, $line_color);/绘制图表标题$title = $stuNam.成绩变化表;/取得文字外面的虚框。这一步主要是为了准确定位标题的位置$title_dimensions = imagettfbbox($title_size, 0, $font, $title); $title_length = $title_dimensions2 - $title_dimensions0;$title_x = ($width - $title_length) / 2;/X轴居中$title_y = $y / 2 + 10;/Y轴居中imagettftext($im, $title_size, 0, $title_x, $title_y, $text_color, $font, $title);/把X轴的标识写入X轴末端靠下位置$title_x = 月份; /X轴标识imagettftext($im, $main_size, 0, $width-$right_margin, $height-($bottom_margin/2), $text_color, $font, $title_x);/把Y轴的标识写入Y轴顶端偏左位置$title_y = 成绩;/Y轴标识/起始坐标要对照图形慢慢调,/$left_margin/2 $y是基本的值,所加减的数字只是为了更加美观、合理imagettftext($im, $main_size, 0, $left_margin/2 +10, $y-18, $text_color, $font, $title_y);以上主要完成了绘制画布外边框、坐标轴和相关标题,至此图像的大致轮廓已经绘制完毕。为了所绘制的折线图更容易阅读,表现更为细致,系统为图像绘制了网格,标出在坐标轴上坐标的值。在该图像的绘制过程中,最重要的是部分是折线图的绘制,主要代码如下:$y_length = ($height-$bottom_margin) - $y;/Y轴的总长度for ($i=1; $iquery(select * from .$db_table. where name=.$username. and passwd = sha1(.$passwd.); if ($result-num_rows0) return true; else throw new Exception(用户名或密码不正确,请重新登录); 在验证用户密码时,为提高数据的安全性,使用PHP内置sha1()函数,该函数使用哈希算法对指定字符串生成固定长度的字符串,该字符串无法使用软件破解。用户注册时使用sha1()函数生成密码字符串存储于数据库中,用户登录验证时先将用户输入的密码利用sha1()函数再次生成密码字符串与数据库中的数据进行匹配。如果登录成功,使用会话控制技术,用$_SESSIONvalid_user = $username;为该用户注册一个会话变量,利用这个会话变量对用户进行个性化设置,在系统的用户识别模块中显示个人登录信息,如图22所示:图22 个性化信息Fig.22 Personalized Information同样利用会话控制技术,在系统的其它界面中使用check_valid_user()函数检查用户是否登录,函数原型如下:function check_valid_user() if (isset($_SESSIONvalid_user) else / 没有登录 do_html_header1(错误); do_html_main(你还未登录, ./public_files/login.php, 重新登录); do_html_footer1(); exit; 在这个用户身份验证机制下,系统能保证为不同用户显示不同界面的同时,避免非法用户使用系统。此外,如果出现用户忘记密码的情况,系统提供重置密码功能,解决的方法是根据用户提供的用户名及对应的身份在数据库中进行匹配,如果用户确实已经存在,那么利用随机函数生成新的密码字符串,并调用mail()函数通过用户注册时登记的邮箱通知用户。实现的主要代码如下:function notify_password($identity, $username, $password) $conn = db_connect();/连接数据库$db_table = identity($identity);/判断身份$query = select email from .$db_table. where name=.$username.; $result = $conn-query($query); if (!$result) throw new Exception(没有找到E-mail地址。); else if ($result-num_rows = 0) throw new Exception(用户未注册。); else $row = $result-fetch_object();/返回当前行 $email = $row-email; $from = From: 学生成绩管理系统-陈建康毕业设计作品 admin rn;
展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 办公文档


copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知装配图网,我们立即给予删除!