教学管理系统

  • 需求
  • 结果展示
    • 登录界面
    • 学生界面
    • 教师界面
    • 管理员界面
  • 数据库设计
    • E-R图
  • 实现
    • 一、文件创建
    • 二、前端界面
    • 三、数据库设置
    • 四、控制器
    • 五、前端返回信息处理
      • ajax简单入门

需求

  1. 有登录界面,不同的用户登录后进入不同的页面。
  2. 能完成基本数据(包括学生、教师、课程、选课)的增删改。
  3. 根据指定要求完成查询。
  4. 可以查询指定姓名的学生或教师。
  5. 可以查找某位教师的授课门数。
  6. 可以查找指定学生选修的课程列表,包括课程名、任课教师、成绩等。
  7. 可以查找指定所有课程的平均成绩。

结果展示

登录界面

学生界面

教师界面

管理员界面

数据库设计

E-R图

实现

一、文件创建

在thinkPHP5下的application内创建以下三个文件夹。

在controller文件夹内部新建一个php文件,作为控制器,命名为Signin.php。

在model文件夹内创建各个表所对应的模型

在view内创建与控制器对应的文件夹,命名为signin,在signin文件夹内部,创建各个界面的html文件。以及需要的图片

二、前端界面

以登录界面为例。
在调用控制器函数时,可以用 {:url(项目名/控制器/函数)},如此调用。

<!DOCTYPE html>
<html lang="en"><head><meta charset="UTF-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><title>Document</title>
</head>
<style>* {margin: 0;overflow: hidden;padding: 0;}li ul {list-style: none;}input {margin: 3px;outline: none;}input[type=text] {width: 300px;padding: 8px 20px;margin: 4px 0px 4px 0px;display: flex;border: 1px solid #ccc;border-radius: 4px;box-sizing: border-box;background: #F0F0F0;}input[type=text]:focus {width: 300px;padding: 8px 20px;margin: 4px 0px 4px 0px;display: flex;border: 1px solid #ccc;border-radius: 4px;box-sizing: border-box;background: white;}input[type=submit] {width: 300px;background-color:#A6100E;color: white;padding: 10px 20px;margin: 18px 0;border: none;border-radius: 4px;cursor: pointer;}input[type=submit]:active {width: 300px;background-color: #8D0E0C;color: #BEBEBE;padding: 10px 20px;margin: 18px 0;border: none;border-radius: 4px;outline: none;cursor: pointer;}input [type=submit]:after{outline: none;}select{width: 300px;padding: 8px 20px;margin: 4px 0px 4px 0px;border: 1px solid #ccc;border-radius: 4px;box-sizing: border-box;outline: none;}select:active{outline: none;}option {outline: none;}#header {display: flex;background: black;color: whitesmoke;flex-direction: row;}#header ul {display: flex;margin-left: 10%;}#header li{align-items: center;display: flex;font-weight: bold;font-size: 16px;}#header ul li:hover{background-color: #444444;cursor: pointer;}#header ul li:active{background-color: #656565;}#header a{display: inline-block;padding: 0 25px 0 25px;height: 60px;line-height: 60px;font-size: 16px;}#signIn {margin-top: 10%;margin-right: 10%;float: right;color: white;display: flex;flex-direction: column;}#hh{display: flex;}a {direction: none;}a:focus{cursor: pointer;}
</style><body background="../../../../../TP/public/curricula/signin/img/02.jfif"><div id="header"><ul><li><a herf="signin">首页</a></li></ul></div><div><form id="signIn" method="post" action="{:url('curricula/Signin/checkIdentity')}"><p>用户名</p><input type="text" name="username" id="username" placeholder="username" /><p>密码</p><input type="text" name="password" id="password" placeholder="password" /><p>身份</p><select name="identity" id="identity" > <option value="s">学生</option><option value="t">教师</option><option value="a">尊敬的管理员</option></select><input type="submit" name="btn1" value="登录   login" /></form></div>
</body>

三、数据库设置

数据库建表过程略。数据库名称为student。

在application文件夹内有一个database.php文件,修改其中的信息,以连接mysql。

修改以下信息即可。

    // 数据库类型'type'            => 'mysql',// 服务器地址'hostname'        => '127.0.0.1',// 数据库名'database'        => 'student',// 用户名'username'        => 'root',// 密码'password'        => '168168',

在完成以上设置后,可以直接在表对应的model内,使用方法对完成增删改查(以student为例)
遇到比较复杂的情况可以像这样直接进行SQL查询:

use think\Model; //必须填上这句,才可使用
$M = $this;
$sql = "要执行的SQL语句";
$r = $M->execute($sql);

$r 即为查询的结果。

student.php

<?phpnamespace app\curricula\model;  //curricula可改成你的项目名称。
use think\Model;class Student extends Model
{//根据学号选择学生信息public function selStudentById($id) $student = Student::get($id);if ($student) {return true;} elsereturn false;}//增加一名学生public function addStudent($id, $name, $birth, $sex) //$id,$name,$sex,$brith){if (!$this->selStudentById($id)) {$M = $this;$r = $M->execute("insert into student values('" . (string) $id . "','" . (string) $name . "','" . (string) $birth . "','" . (string) $sex . "')");if ($r)return $this->selAll();elsereturn false;} elsereturn false;}//删除一名学生public function delStudent($id) //$id,$name,$sex,$brith){if ($this->selStudentById($id)) {$M = $this;$sql = "delete from student where s_id='" . (string) $id . "'";$r = $M->execute($sql);if ($r) {return $this->selAll();} elsereturn false;}elsereturn false;}//更新学生信息public function uptStudent($id, $name, $birth, $sex) //$id,$name,$sex,$brith){$flag = false;$M = $this;if ($this->selStudentById($id)) {if ($name && $name != '') {$sql = "update student set s_name='" . (string) $name . "'where s_id='" . (string) $id . "'";$r = $M->execute($sql);$flag = true;}if ($sex && $sex != '') {$sql = "update student set s_sex='" . (string) $sex . "'where s_id='" . (string) $id . "'";$r = $M->execute($sql);$flag = true;}if ($birth && $birth != '') {$sql = "update student set s_birth='" . (string) $birth . "'where s_id='" . (string) $id . "'";$r = $M->execute($sql);$flag = true;}if ($flag)return $this->selAll();elsereturn 2;} elsereturn 1;}//根据学生姓名查询学生信息public function selStudentByName($name) //$id,$name,$sex,$brith){$M = $this;$r = $M->query("select * from student where s_name='" . $name."'");if ($r)return $r;elsereturn false;}//查询全部信息public function selAll(){$M = $this;$r = $M->query("select * from student");if ($r) {return $r;} elsereturn false;}
}

四、控制器

注意点:

  • 命名空间 namespace app\项目名\控制器文件夹名
  • 必须引入几个模型的位置,
  • 返回时使用json()包装数据
  • 调用界面时使用view()函数
<?phpnamespace app\curricula\Controller;use think\Controller;
use think\Model;
use app\curricula\model\Student;
use app\curricula\model\Teacher;
use app\curricula\model\Users;
use app\curricula\model\Course;
use app\curricula\model\Score;
use think\migration\command\migrate\Status;define('APP_DEBUG', true);class Signin extends Controller
{public function signin(){return view("signin");}public function student(){return view("student");}public function teacher(){return view("teacher");}public function admin(){return view("admin");}public function addScore($id, $id2, $s){return (new \app\curricula\model\Score())->addScore($id, $id2, $s);}public function checkIdentity(){$username = $_POST['username'];$password = $_POST['password'];$identity = $_POST['identity'];$r = (new \app\curricula\model\Users())->check($username, $password,$identity);$data = array("status" => false,"info" => array());if (!$r) {$this->redirect('signin');}if ($identity == 's')$this->redirect('student');else if ($identity == 't')$this->redirect('teacher');else if ($identity == 'a')$this->redirect('admin');else$this->redirect('signin');}public function selScoreCT() //$id,$name,$sex,$brith){$id = $_GET['id'];$r = (new \app\curricula\model\Score())->selScoreCT($id);$data = array("status" => false,"info" => array());if ($data == false) {return (json($data));} else {$data["status"] = true;$data["info"] = $r;return (json($data));}}public function deladdScore(){$ch = $_GET["ch"];$sid = $_GET["sid"];$cid = $_GET["cid"];if ($ch == 'del') {$r = (new \app\curricula\model\Score())->stuDelScore($sid, $cid);$data = array("status" => false,"info" => array("ERROR"));if ($r == -1) {$data["status"] = -1;$data["info"] = "成绩已登陆,别想改啦";return (json($data));}if ($r == false) {return (json($data));} else {$data["status"] = true;$data["info"] = $r;return (json($data));}} else if ($ch == 'add') {$r = (new \app\curricula\model\Score())->stuAddScore($sid, $cid);$data = array("status" => false,"info" => -1);if ($r == -2) {$data["status"] = -2;$data["info"] = "你已选择这门课程";return (json($data));}if ($r == -1) {$data["status"] = -1;$data["info"] = "没有这门课程";return (json($data));}if ($r == -3) {$data["status"] = -3;$data["info"] = "插入失败";return (json($data));}else {$data["status"] = true;$data["info"] = $r;return (json($data));}}}//选择课程信息public function selCourseMS(){$tid = $_GET['tid'];$r = (new \app\curricula\model\Course())->countCourse($tid);$data = array("status" => false,"info" => array(),"cnum" => '0');if (!$r || $r[0]['c_num'] == 0)return json($data);else {$data["cnum"] = (string) $r[0]['c_num'];$r = (new \app\curricula\model\Course())->selCourse($tid);$data["info"] = $r;$data["status"] = true;return json($data);}}public function selTeacherId(){$tname = $_GET['name'];$r = (new \app\curricula\model\Teacher())->selTeacherId($tname);$data = array("status" => false,"info" => "查无此人");if (!$r) {return json($data);} else {$data["info"] = $r;$data["status"] = true;return json($data);}}public function selCourseAVG(){$c = $_GET['cid'];$cid = '';for ($i = 0; $i < count($c); $i++) {$cid .= "'" . $c[$i] . "'";if ($i != count($c) - 1) {$cid .= ',';}}$r = (new \app\curricula\model\Course())->selCourseAVG($cid);$data = array("status" => false,"info" => "无课程信息");if (!$r) {return json($data);} else {$data["info"] = $r;$data["status"] = true;return json($data);}}public function uptScore(){$sid = $_GET['sid'];$cid = $_GET['cid'];$sc = $_GET['sc'];$r = (new \app\curricula\model\Score())->uptScore($sid, $cid, $sc);$data = array("status" => false,"info" => "无课程信息");if (!$r) {return json($data);} else {$data["info"] = $r;$data["status"] = true;return json($data);}}public function addStudent($sid, $sname, $sbth, $sex){$r = (new \app\curricula\model\Student())->addStudent($sid, $sname, $sbth, $sex);$data = array("status" => false,"info" => "失败");if ($r == false) {return json($data);} else {$data["info"] = $r;$data["status"] = true;return json($data);}}// studentpublic function delStudent($sid){$r = (new \app\curricula\model\Student())->delStudent($sid);$data = array("status" => false,"info" => "失败");if ($r == false) {return json($data);} else {$data["info"] = $r;$data["status"] = true;return json($data);}}public function uptStudent($id, $name, $sbth, $sex){$r = (new \app\curricula\model\Student())->uptStudent($id, $name, $sbth, $sex);$data = array("status" => false,"info" => "失败");if ($r == 1 || $r == 2) {$data["status"] = $r;return json($data);} else {$data["info"] = $r;$data["status"] = true;return json($data);}}//teacherpublic function addTeacher($id, $name){$r = (new \app\curricula\model\Teacher())->addTeacher($id, $name);$data = array("status" => false,"info" => "失败");if ($r == false) {return json($data);} else {$data["info"] = $r;$data["status"] = true;return json($data);}}public function delTeacher($id){$r = (new \app\curricula\model\Teacher())->delTeacher($id);$data = array("status" => false,"info" => "失败");if ($r == false) {return json($data);} else {$data["info"] = $r;$data["status"] = true;return json($data);}}public function uptTeacher($id, $name){$r = (new \app\curricula\model\Teacher())->uptTeacher($id, $name);$data = array("status" => false,"info" => "失败");if ($r == 1 || $r == 2) {$data["status"] = $r;return json($data);} else {$data["info"] = $r;$data["status"] = true;return json($data);}}//Coursepublic function addCourse($cid, $name, $tid){$r = (new \app\curricula\model\Course())->addCourse($cid, $name, $tid);$data = array("status" => false,"info" => "失败");if ($r == false) {return json($data);} else {$data["info"] = $r;$data["status"] = true;return json($data);}}public function delCourse($id){$r = (new \app\curricula\model\Course())->delCourse($id);$data = array("status" => false,"info" => "失败");if ($r == false) {return json($data);} else {$data["info"] = $r;$data["status"] = true;return json($data);}}public function uptCourse($cid, $name, $tid){$r = (new \app\curricula\model\Course())->uptCourse($cid, $name, $tid);$data = array("status" => false,"info" => "失败");if ($r == 1 || $r == 2) {$data["status"] = $r;return json($data);} else {$data["info"] = $r;$data["status"] = true;return json($data);}}public function studentADU(){$ch = $_GET['ch'];$sid = $_GET['sid'];$sname = $_GET['sname'];$sbth = $_GET['sbth'];$sex = $_GET['sex'];if ($ch == 'add') {return $this->addStudent($sid, $sname, $sbth, $sex);} else if ($ch == 'del') {return $this->delStudent($sid);} else if ($ch == 'upt') {return $this->uptStudent($sid, $sname, $sbth, $sex);} elsereturn  $data = array("status" => false,"info" => "失败");}public function teacherADU(){$ch = $_GET['ch'];$id = $_GET['tid'];$name = $_GET['tname'];if ($ch == 'add') {return $this->addTeacher($id, $name);} else if ($ch == 'del') {return $this->delTeacher($id);} else if ($ch == 'upt') {return $this->uptTeacher($id, $name);} elsereturn  $data = array("status" => false,"info" => "失败");}public function courseADU(){$ch = $_GET['ch'];$cid = $_GET['cid'];$name = $_GET['cname'];$tid = $_GET['tid'];if ($ch == 'add') {return $this->addCourse($cid, $name, $tid);} else if ($ch == 'del') {return $this->delCourse($cid);} else if ($ch == 'upt') {return $this->uptCourse($cid, $name, $tid);} elsereturn  $data = array("status" => false,"info" => "失败");}public function selAllCourseAVG(){$r = (new \app\curricula\model\Course())->selAllCourseAVG();$data = array("status" => false,"info" => "无课程信息");if (!$r) {return json($data);} else {$data["info"] = $r;$data["status"] = true;return json($data);}}public function selStudentByName(){$sname = $_GET['sname'];$r = (new \app\curricula\model\Student())->selStudentByName($sname);$data = array("status" => false,"info" => "无信息");if (!$r) {return json($data);} else {$data["info"] = $r;$data["status"] = true;return json($data);}}public function selTeacherByName(){$tname = $_GET['tname'];$r = (new \app\curricula\model\Teacher())->selTeacherByName($tname);$data = array("status" => false,"info" => "无信息");if (!$r) {return json($data);} else {$data["info"] = $r;$data["status"] = true;return json($data);}}
}

五、前端返回信息处理

前端使用ajax提交并显示数据

ajax简单入门

//需引入jquery
<script src="http://libs.baidu.com/jquery/2.1.4/jquery.min.js"></script>
function func() {$.ajax({url: "delXXX",                //后端函数名type: 'GET',               //方式GET or POSTdata: {                      //要交由后端处理的数据,用逗号间隔'sid': $("#sid").val(),'cid': $("#cid").val()},success: function (data)    //成功返回数据,data是服务器端返回的字符串数据{ // .......your code}});                              //分号结束}

以学生按姓名查询信息为例:

function inquiryStuByName() {if ($("#sname").val() == '') {alert("Empty Input!");return;}$.ajax({url: "selStudentByName",type: 'GET',data: {"sname": $("#sname").val()},success: function (data) { if (!data.status)alert("ERROR");else {var str = style;str += "<Table class='pure-table pure-table-bordered'>";str += "<tr> <td>学号</td> <td>姓名</td><td>出生日期</td><td>性别</td></tr>";for (var i = 0; i < data.info.length; i++) {str += '<tr>';str += ("<td>" + data.info[i].s_id + "</td>");str += ("<td>" + data.info[i].s_name + "</td>");str += ("<td>" + data.info[i].s_birth + "</td>");str += ("<td>" + data.info[i].s_sex + "</td>");str += '</tr>';}str += "</Table>"$("#show").html(str);}}});}

需要完整代码可戳我。

web课设 thinkphp5+mySQL 简易教学管理系统相关推荐

  1. 山东大学Web课设——课程学习网站的搭建

    关于web的一些感悟,web这门课程真的收获很多(虽然最后成绩不太理想),从一开始单纯的应付课设到自己看网课学习,可以说这门课如果认真学习的话还是能收获很多的,所以如果正在浏览这篇博文的是SDU的话, ...

  2. 山东大学Web课设一——课程网站的搭建

    关于web的一些感悟,web这门课程真的收获很多(虽然最后成绩不太理想),从一开始单纯的应付课设到自己看网课学习,可以说这门课如果认真学习的话还是能收获很多的,所以如果正在浏览这篇博文的是SDU的话, ...

  3. c语言通讯录程序线性表,数据结构(C语言)课设1——单位员工通讯录管理系统(线性表应用)...

    数据结构(C语言)课设1--单位员工通讯录管理系统(线性表应用) 题目要求: 为某个单位建立一个员工通讯录管理系统,可以方便查询每一个员工的手机号.及电子邮箱.其功能包括通讯录链表的建立.员工通讯信息 ...

  4. 大学课设之Mysql图书管理设计

    大学课设之Mysql图书管理设计 需求分析 概念结构设计-总E-R图 逻辑结构设计 数据库的实现 触发器重点说明 完整的Mysql设计代码 需求分析 改图书管理涉及书本的信息,读者的信息,图书馆管理员 ...

  5. 利用Html与css从零开始制作基础静态网页(web课设)

    首先打好单个网页的基础结构 本次我们制作网页主要使用的是外部样式表 本次静态网页的主题是合金装备(由个人喜好而定,你可以根据其自己修改) 先定义外部样式表 <link rel="sty ...

  6. 数据结构(C语言)课设1——单位员工通讯录管理系统(线性表应用)

    数据结构(C语言)课设1--单位员工通讯录管理系统(线性表应用) 题目要求: 为某个单位建立一个员工通讯录管理系统,可以方便查询每一个员工的手机号.及电子邮箱.其功能包括通讯录链表的建立.员工通讯信息 ...

  7. 用starUML画的软工课设:外卖点餐管理系统

    软件工程课设:外卖点餐管理系统 一.概述 二.可行性分析 2.1技术的可行性 2.2经济的可行性 2.3操作的可行性 2.4法律的可行性 2.5结论 三.需求分析 3.1功能性需求 3.2非功能性需求 ...

  8. web课设---瓜子二手车模仿网站(页面展示)

    web课设-瓜子二手车模仿网站(页面展示) 1.项目规划书 2.思维导图 3.工程文件 4.首页 5.选车页面 6.瓜子服务 7.毛豆新车 *点击这里免费观看页面展示视频页面展示视频连接 8.声明 声 ...

  9. C语言大一课设:旭日苑菜品管理系统

    目录 引言 做课设的经验 代码 引言 大一上学习了C语言以后老师布置了一个课设任务,然后我写的是旭日苑菜品管理系统,旭日苑是我们学校最好吃的食堂哈哈哈(没有之一). 顺便介绍一下我们学校,我们学校是全 ...

最新文章

  1. 又现神论文!《本人娶刘亦菲的可行性报告》省级期刊收录
  2. C++(六)——继承
  3. SurfaceView 拍照功能
  4. postgresql - mac 启动 关闭 postgresql
  5. 搞嵌入式Linux,做底层还是应用?底层要掌握哪些技能?
  6. 系统开发基础:UML中图的相关知识笔记(下)
  7. 公钥和私钥 java_公钥与私钥 - yxhxj2006 - BlogJava
  8. 数据链路层:基本概念
  9. SlimYOLOv3:更窄、更快、更好的无人机目标检测算法
  10. mysql 中的 engine 存储引擎
  11. C/C++中如何接收return返回来的数组元素
  12. mysql purge进程_MySQL数据库之Purge死锁问题解析
  13. 使用AForge录制视频
  14. ClustalX进行多序列比对流程
  15. latex下的实数集R的写法
  16. 各种艺术字、图片在线制作
  17. python——pycharm使用入门
  18. FPM五:拆解前面的四——OVP做查询和结果
  19. 浅谈Android Architecture Components
  20. PP生产计划-Routing工艺路线

热门文章

  1. Axure谷歌浏览器插件下载安装及配置
  2. flash 生成图片上传
  3. 我把面试问烂了的⭐MySQL面试题⭐总结了一下(带答案,万字总结,精心打磨,建议收藏)
  4. win10 bcb5 Borland C++ Builder 5安装indy9
  5. 思科网计算机网络第一章测验,思科计算机网络课程设计——第一章路由概念测试答案...
  6. FOP XSL中文自动换行
  7. 计算机网络基础思维导图
  8. 日益4月招投奖励活动颁布
  9. java 监控 emc 存储_EMC存储性能监控管理手册范本
  10. 《电路分析基础》第1章 电路模型和电路元件 读书笔记