php里班级分数,一个php开辟的中学成绩经管体系

2023-11-21 08:59

本文主要是介绍php里班级分数,一个php开辟的中学成绩经管体系,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

写在前面

博客好久没更新了,比来看了MSRA牛人刘未鹏的博客(www.mindhacks.cn),深有感觉,感触感染进修到了很多器材,关于算法进修,思维办法,职业成长等等,是以看了好几篇他的博客之后我就做了两件事

将我之前所有项目代码都上传到github上

持续对峙写博客

正好这个礼拜受某中学委托用php写了一个成绩经管体系,是以就把体系开辟过程记录下来,当做是一个总结,也和各位园友交换一下,共同进步进步。

因为本人今朝还只是在校学生,是以常识经验必定存在很大不足,文章内容也不免疏漏粗浅,如有偏颇的处所大师多多懂得。交换进步才是终极目标,感谢!

成绩经管体系的角色及功能

1.经管员

1.1 导入用户信息(包含学生和教师)

1.2.1 挂号测验(包含全县统考、全校统考、班级测验)

1.2.2 查询测验信息

1.3 导入成绩

1.4 批改暗码

1.5 用户查找

2.教师

2.1    查看本班所有学生成绩(包含各科分数、总分、排名)

2.2    批改暗码

3.学生

3.1    查看本身的所有测验成绩

3.2    批改暗码

具体用的技巧

后台说话:Php

前台说话及框架:html+javascript+jquery

安排办事器:linux+nginx

开辟过程

1.数据库设计

数据库中有3个表:grades(分数表)、users(用户表)、exams(测验表)

users表顶用户ID是Grades表中userid的外键

exams表中测验id是grades中examid的外键

872275-0.jpg

2.登录

登录界面

登录界面是在网上找到的一个用jquery建造的很都雅的登录界面,这里供给下地址:

http://www.veryhuo.com/down/html/55826.html

872275-1.jpg

登录逻辑

若是用户登录成功读取用户的用户类型(经管员,教师,学生),当然为了避免sql诸如,将用户输入都做了特别字符过滤处理惩罚,并将用户的用户名、用户类型、用户ID等信息读入¥_session中,然后分别导向不合的页面(admin.php、teacher.php、student.php),在这些页面里也对session从头进行验证,避免未授权用户直接接见该页面。用户点击退出后就把session里的一些变量置空。

3.用户界面

经管员导入用户信息和成绩信息都用php-reader这款第三方插件来读取上传的excel信息,这里也供给这款插件地址:http://code.google.com/p/php-reader/

这款插件供给了一些很便利的办法来获取excel文件的数据,甚至可以读取一些如单位格边框色彩等附加信息,然则要重视的是这款插件只能读取.xls文件,不克不及读取.xlxs文件。

其他教师和学生界面的功能都只是简单的查表返回成果,没有什么错杂的功能。

一些具体的功能也到细节实现中去细说吧。下面上一张用户操纵的界面图

872275-2.jpg

4.应用逻辑

经管员导入用户信息(包含学生和教师)

经管员挂号测验信息,体系获取测验ID并返回给经管员(为了区分导入grades表的成绩数据须要给每次测验分派一个ID )

经管员导入成绩表(有一列是第二步获取的测验ID)

教师和学生登录查询成绩

(关于测验经管这里之所以要让经管员获取一个测验ID是因为我愁闷经管员录入测验成绩的时辰有漏录的景象,为了让体系知道后面补录的成绩是前一次录的此次成绩,就须要一个测验ID来把他们接洽起来,是以引入了这个获取测验ID的看似烦复的步调)

一些细节实现

1.教师界面查询本班所有学生成绩

因为我将所有学生成绩都放在同一张表grades里,而这张表里每笔记录都是一个学生某次测验的记录,是以要将这个教员班上学生有关的测验的成绩都查询出来并且每次测验遵守名次排序,是以必定涉及到多表查询的题目,而因为成绩字段斗劲多,也培养了我最长的SQL(¥exam_id是之前查询出来的该教师班级所有学生参与的测验ID号):

SELECTt1.sx,t1.yw,t1.yy,t1.wl,t1.hx,t1.sw,t1.ls,t1.zz,t1.dl,

(coalesce(t1.sx,0)+coalesce(t1.yw,0)+coalesce(t1.yy,0)+coalesce(wl,0)+coalesce(hx,0)+coalesce(sw,0)+coalesce(ls,0)+coalesce(dl,0)+coalesce(zz,0))as sumscore,t2.realname FROM myphpcj.grades as t1 ,users as t2 where t1.userid=t2.id and exam_id=.¥exam_id. order by sumscore desc;

看起来可能有点长,这里大致申明一下,t1是grades表,t2是用户表。两表结合查询得出该次测验每个学生姓名,学号,分数,总分,最后按总分排序,因为有的科目学生未参加或者本次测验不包含,是以采取了mysql的coalesce函数来处理惩罚null值。之前很罕用结合表查询,此次试用之后发明可以简化很多法度逻辑,进步法度效力。此次数据库设计的时辰应用了一些外键,可以说对于简化法度异常处理惩罚也起了很鸿文用。总之感触感染对数据库开辟也有了更深的懂得。

2.文件保存避免重名

因为要导入用户成绩,我设法是先把文件上传到files目次下,然后再读取文件内容导入信息。我想将所有文件用日期时候戳来定名,这就涉及同一天上传多次文件覆盖的题目,最后想了一个办法同一天上传的文件后面加上上传次序1,2,3….. 。同时若是中心删了一个文件,后面上传的文件会弥补这个数字地位。于是在上传代码里加了如下处理惩罚:

¥i=1;¥save_filename=files/users.date(Y-m-d[).¥i.].xls;while(file_exists(files/users.date(Y-m-d[).¥i.].xls))

{¥i=¥i+1;¥save_filename=files/users.date(Y-m-d[).¥i.].xls;

}move_uploaded_file(¥_FILES[grade_file][tmp_name],

¥save_filename);

最后结果是如许的:

872275-3.jpg

其他一些功能也斗劲简单,这里就不细说了。至于安然方面,因为没有什么相干的经验,只是在所有表单根蒂根基都做了特别字符过滤避免SQL注入,用户登录也做了登录失败次数记录防止蛮力。至于XSS,网站不供给对外注册,封闭性较强就也没怎么推敲。

写在最后

之前一向用.net 开辟web,此次在w3school上看了两天php的教程(这里要赞一下这个网站,不清楚的同窗可以百度一下,教程内容精简不失重点!)之后就上手花了3天做这个器材,最后固然功能斗劲简单,界面结果也一般,然则本身还是斗劲合意的,一方面增长了一种技能,另一方面也对这两种技巧做了个简单的对比,小我认为php跟html和js的连络较好,是以做前端相对轻松一些,并且开辟效力小我感触感染也较.net高一些,然则毕竟?成果是脚本说话,安然性必然没.net好,根蒂根基上一个功能周全一点,大一点的体系很轻易呈现各类百般的漏洞。至于效力方面,我没实测过,也没有讲话权,当然这只是一家之言,两种都是优良的说话,不然也不会这么风行。也迎接大师提出不合的概念交换评论辩论。

最后若是有中学须要本体系的话,迎接接洽我QQ:290405983无论对感情还是对生活,“只要甜不要苦”都是任性而孩子气的,因为我们也不完美,我们也会伤害人。正因为我们都不完美,也因为生活从不是事事如意,所以对这些“瑕疵”的收纳才让我们对生活、对他人的爱变得日益真实而具体。—— 汪冰《世界再亏欠你,也要敢于拥抱幸福》

这篇关于php里班级分数,一个php开辟的中学成绩经管体系的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/401297

相关文章

poj 2976 分数规划二分贪心(部分对总体的贡献度) poj 3111

poj 2976: 题意: 在n场考试中,每场考试共有b题,答对的题目有a题。 允许去掉k场考试,求能达到的最高正确率是多少。 解析: 假设已知准确率为x,则每场考试对于准确率的贡献值为: a - b * x,将贡献值大的排序排在前面舍弃掉后k个。 然后二分x就行了。 代码: #include <iostream>#include <cstdio>#incl

PHP原理之内存管理中难懂的几个点

PHP的内存管理, 分为俩大部分, 第一部分是PHP自身的内存管理, 这部分主要的内容就是引用计数, 写时复制, 等等面向应用的层面的管理. 而第二部分就是今天我要介绍的, zend_alloc中描写的关于PHP自身的内存管理, 包括它是如何管理可用内存, 如何分配内存等. 另外, 为什么要写这个呢, 因为之前并没有任何资料来介绍PHP内存管理中使用的策略, 数据结构, 或者算法. 而在我们

php中json_decode()和json_encode()

1.json_decode() json_decode (PHP 5 >= 5.2.0, PECL json >= 1.2.0) json_decode — 对 JSON 格式的字符串进行编码 说明 mixed json_decode ( string $json [, bool $assoc ] ) 接受一个 JSON 格式的字符串并且把它转换为 PHP 变量 参数 json

如何将文件夹里的PHP代码放到一个文件里

find ./dir -name "*.php" -exec 'cat' {} \; > dir.out

PHP抓取网站图片脚本

方法一: <?phpheader("Content-type:image/jpeg"); class download_image{function read_url($str) { $file=fopen($str,"r");$result = ''; while(!feof($file)) { $result.=fgets($file,9999); } fclose($file); re

PHP防止SQL注入详解及防范

SQL 注入是PHP应用中最常见的漏洞之一。事实上令人惊奇的是,开发者要同时犯两个错误才会引发一个SQL注入漏洞。 一个是没有对输入的数据进行过滤(过滤输入),还有一个是没有对发送到数据库的数据进行转义(转义输出)。这两个重要的步骤缺一不可,需要同时加以特别关注以减少程序错误。 对于攻击者来说,进行SQL注入攻击需要思考和试验,对数据库方案进行有根有据的推理非常有必要(当然假设攻击者看不到你的

PHP防止SQL注入的方法(2)

如果用户输入的是直接插入到一个SQL语句中的查询,应用程序会很容易受到SQL注入,例如下面的例子: $unsafe_variable = $_POST['user_input'];mysql_query("INSERT INTO table (column) VALUES ('" . $unsafe_variable . "')"); 这是因为用户可以输入类似VALUE”); DROP TA

PHP防止SQL注入的方法(1)

(1)mysql_real_escape_string – 转义 SQL 语句中使用的字符串中的特殊字符,并考虑到连接的当前字符集 使用方法如下: $sql = "select count(*) as ctr from users where username ='".mysql_real_escape_string($username)."' and password='". mysql_r

Linux系统安装php开发环境

Linux系统centos6.5 PHP5.6 MySQL5.6 Nginx1.7 yum安装依赖库 yum install -y make cmake gcc gcc-c++ autoconf automake libpng-devel libjpeg-devel zlib libxml2-devel ncurses-devel bison \libtool-ltdl-devel li

PHP字符串全排列

方法一: $str = 'abc';$a =str_split($str);perm($a, 0, count($a)-1);function perm(&$ar, $k, $m) {if($k == $m){ echo join('',$ar), PHP_EOL;}else {for($i=$k; $i<=$m; $i++) {swap($ar[$k], $ar[$i]);perm($ar