PHP选课系统总集实验报告及代码——完整版(含html、css、php)

PHP选课系统总集实验报告及代码——完整版(含html、css、php)

PHP选课系统总集实验报告及代码——完整版(含html、css、php)

这次先发完整版给大家

实验完整代码请点击此处
以下为实验报告

1. 实验概述

1.1 实验目的

本实验教务选课管理信息系统则让学生可以灵活运用CSS、HTML、PHP三方面知识,在搭建系统的同时能够熟悉各种指令的操作和用处,在反复的学习和实践应用的过程中,学会并用会PHP Web全站技术。

1.2 实验介绍

本教务选课系统用浏览器进行操作,对操作人员的要求也不是很高,操作简单明了,可以直接通过键盘和鼠标来完成所有的功能:包括选课,成绩查询,删除,修改以及文件的保存。进一步提高办学效益和现代化水平。本系统是以菜单及窗口的形式展现,选项清晰,按照用户所选择的各项功能进行处理。能完美全面的完成用户的要求。

1.3 实验技术

本学期主要以四个方面学习了PHP Web全站技术,分别为:CSS、HTML、PHP和MySQL数据库。由于CSS、HTML和MySQL数据库在此之前已经学过一些,所以本课程的主要目的是学会如何使用PHP。
PHP用于实现用户登录、注册、选课等业务逻辑的实现,HTML和CSS用于实现系统的人机交互界面,MySQL用于存储用户信息、课程信息等数据。
PHP是一种服务器端的 HTML 脚本/编程语言,是一种简单的、面向对象的、解释型的、健壮的、安全的、性能非常之高的、独立于架构的、可移植的、动态的脚本语言。是一种广泛用于 Open Source(开放源代码)的尤其适合 Web 开发并可以嵌入 HTML 的多用途脚本语言。它的语法接近 C,Java 和 Perl,而且容易学习。该语言让 Web 开发人员快速的书写动态生成的网页。
HTML(HyperText Mark-up Language)即超文本标记语言,是目前网络上应用最为广泛的语言,也是构成网页文档的主要语言。HTML文本是由HTML命令组成的描述性文本,HTML命令可以说明文字、图 形、动画、声音、表格、链接等。HTML的结构包括头部(Head)、主体(Body)两大部分,其中头部描述浏览器所需的信息,而主体则包含所要说明的具体内容。
CSS是层叠样式表(Cascading Style Sheets)用来定义网页的现实效果。可以解决HTML代码对样式定义的重复,提高了后期样式代码的可维护性,并增强了网页的现实效果功能。简单一句话:CSS将网页内容和显示样式进行分离,提高了显示功能。
数据库,简称DB,是以一定方式储存在一起、能与多个用户共享、具有尽可能小的冗余度、与应用程序彼此独立的数据集合,用户可以对文件中的数据进行新增、查询、更新、删除等操作。MySQL是一个小型关系型数据库管理系统,它由 MySQL AB开发、发布和支持。MySQL是一个快速的、多线程、多用户和健壮的SQL数据库服务器。MySQL服务器支持关键任务、重负载生产系统的使用,也可以将它嵌入到一个大配置(mass- deployed)的软件中去。MySQL的特点是:面向集合的操作方式,开源代码,高度非过程化,以一种语法结构提供多种使用方式,语言简洁,易用易学。

2. 实验内容及步骤

本实验所构建的教务选课管理信息系统的功能如下:
①学生与教师的登录功能;
②学生的注册功能;
③学生浏览课程信息功能;
④学生查看成绩功能;
⑤教师查看课程列表功能;
⑥编辑课程信息功能。
而为了完成这些功能,需要构建一系列能够达成功能的模块和相对应的PHP Web页面,如表1所示。

模块名称 php文件
页面头模块 header.php
页面脚模块 footer.php
主导航栏模块 navigation.php
子系统主页模块 index.php
学生子系统导航栏模块 navigation_student.php
教师子系统导航栏模块 navigation_teacher.php
连接数据库模块 mysql.php
注册模块 registration.php
注册页面 registration_p.php
登录模块 login.php
登录页面 login_p.php
课程列表模块 course_teacher.php
查看课程列表页面 course_teacher_p.php
编辑课程信息模块 course_edit.php
编辑课程信息页面 course_edit_p.php
浏览课程信息模块 course.php
浏览课程信息页面 course_p.php
查看成绩模块 score_view.php
查看成绩页面 score_view_p.php
进入系统模块 enter.php
退出登录模块 logoff.php
						表1

页面头模块和页面脚模块被嵌入到各个页面的头部和脚部,中间是各个功能模块的显示内容。主导航栏模块,学生子系统导航栏模块,教师子系统导航栏模块都在子系统主页中展示。用户进入子系统主页,可以点击注册按钮进入注册模块,在注册页面中输入用户信息点击立即注册按钮,即可完成注册,然后返回主页。还可以在登录模块输入用户名和密码,点击登录按钮即可登录系统,然后返回主页。然后点击“进入系统”按钮会进入进入系统模块,该模块根据用户身份选择进入学生子系统或者教师子系统。在学生子系统中点击“查看成绩”链接可以进入查看成绩模块。在教师子系统中,点击“课程列表”和“编辑课程信息”可分别进入课程列表模块和编辑课程信息模块。在学生或教师子系统中点击“退出登录”会通过进入系统模块帮助用户退出系统。

2.1 搭建数据库

在XAMPP的Shell中创建数据库elective_manage。其中构建的表有以学号sn为主键建立学生表student,还包括学生的密码spassword、学生姓名sname、性别gender、生日birthday和邮箱email;以教师号tn为主键的教师表teacher,还包括老师的密码tpassword、老师姓名tname、所属部门dept和是否为管理员admin;以课程号为主键建立课程表course,还包括课程名cname、课程描述description、学分credit、大纲outline和授课教师教师号tn;以lid号为主键的opencourse表,还包括学期term、课程号cn、教师号tn和状态status;以学号和lid号为主键的选课表elective,还包括学生课程得分score。

2.2页头、页脚和主导航栏模块的搭建(header.php, footer.php, navigation.php)

页头head.php页面由HTML写出框架,有logo.png图片(即选课图片)和欢迎进入的欢迎语和目前时间组成,此部分就以<div><img><span><p>为主要框架构建。再用CSS调整页面的结构,字体等内容。主要使用style中的font-family和margin、float等。最后使用PHP来实现具体时间的实现,先定好时区,然后用time、date函数和数组来实现时间的展示。
页脚footer.php通过设置css属性:padding和text-align等,使页面更加美观。
主导航栏navigation.php,使用if($isLogin),判断当前状态是否为登录,若为true,则进入“进入系统和退出登录”的导航栏,并输出登录人的姓名和学号(教师号);若为false,则进入“登录和注册”的导航栏,使用<?php if($choice==1) echo ' current'; ?>决定选中显示登录还是注册。

2.3 子系统主页模块的搭建(index.php)

通过<?php include ("xxx.php"); ?>语句,引入了header.php,navigation.php和footer.php页面。其中的CSS和HTML均较为简单。

2.4 学生和教师子系统导航栏模块(navigation_student.php, navigation_teacher_p.php)

学生子系统导航栏和教师子系统导航栏根据$choice的值决定选中显示哪个选项,使用href属性将其链接到对应页面。

2.5连接数据库模块(mysql.php)

首先使用connect()函数用于和数据库建立连接,‘localhost’,‘root’,‘’,'elective_manage’分别标识数据库的地址,数据库用户名,密码,数据库名称。executeSql()函数用于执行SQL语句,返回执行结果。如果执行失败,返回false;如果成功执行INSERT等数据更新语句,返回true;如果成功执行SELECT等查询语句,返回一个MySQLi_RESULT对象。其中$mysql为与数据库的连接对象;$sql为要执行的SQL语句。getOpenCourseData()函数用于获取指定部门在指定学期的开课信息。$mysqli为对数据库elective_manage的连接对象;$dept为登录管理员所属部门;$term为学期。

2.6 注册模块和页面的搭建(registration.php, registration_p.php)

①注册模块registration.php
首先<form method="POST" action=" ">提交表单,<div>分区域之后,分别用<p><label><input><span>写入相关页面信息:用户名、密码、确认密码、姓名、性别、生日和邮箱。
之后用CSS,如:基本的font-family、font-size、width、display等,还用到了.c1:after{}的操作,用content和color使得必填的项目后面标注了红色的*。
Include进来’mysql.php’,使之连上数据库。通过if($_SERVER["REQUEST_METHOD"] == "POST")判断是否收到POST请求,如果收到则进行处理。使用$user = trim($_POST["xxx"])从POST请求中获取值为xxx的变量,该变量和form表单中的元素的name值相同,trim函数用于去除多余空格。使用if(empty($xxx))判断xxx是否为空,用于校验表单中的必填项。Connect()连接数据库后,使用$user = "select * from student where sn = $sn;" ; $result = executeSql($mysqli, $user);从数据库的student表中查找是否存在用户名为
s
n
的记录,如果存在说明该用户名已被占用。使用

sn的记录,如果存在说明该用户名已被占用。使用`
sn的记录,如果存在说明该用户名已被占用。使用
result->num_rows != 0获取查询结果中记录的行数,如果该值为0,说明数据库中不存在记录。如果某些字段未通过验证,如必填信息中为空,则将错误提示信息存储到对应的变量中
u
s
e
r
E
r
r

userErr,
userErr
passwordErr,
p
a
s
s
w
o
r
d
E
r
r
1

passwordErr1,
passwordErr1
nameErr,$birthErr, $emailErr),并通过<?php echo $xxxErr;?>回显错误信息 。 ②注册页面registration_p.php 使用include(“xxx.php”);`语句将所需页面引入。如:header.php , navigation.php , registration.php , footer.php。

2.7 登录模块和页面的搭建(login.php, login_p.php)

①登录模块login.php
用户输入信息的校验、错误信息提示和数据库的连接和数据库执行sql与返回结果等操作与2.6注册模块和页面中的方法相同,HTML和CSS也较为相似和基础,在这里不再详细描述。
如果用户输入的信息通过校验,通过if($lb===’同学’)判断登录人是学生还是教师,若为学生则使用$sql = " select spassword, sname from student where sn='$user'" ; $result = executeSql($mysqli, $query);查询数据库中是否存在用户名为$user密码为$spassword的记录,如果存在,说明用户名密码正确。使用if ($row = $result->fetch_array())if ($row['spassword'] !== $password)判断数据库中是否存在该记录。若为教师则使用$sql = "select tpassword, tname from teacher where tn='$user'";其余效果同理。
如果用户登录成功,则通过$_SESSION['user'] = $user; $_SESSION['name'] = $sname(或$tname); $_SESSION['lb'] = $lb;将用户id,姓名和身份存入会话变量。
②登录页面login_p.php
同理于2.6的注册页面。

2.8 课程列表模块和页面的搭建(course_teacher.php, course_teacher_p.php)

①课程列表模块course_teacher.php
首先连接数据库,if($mysqli->connect_errno)判断能否连接数据库。根据传入的$tn的值,通过$sql = "select cn, cname, credit from course where tn='$tn';"; $result = $mysqli->query($sql); 查询该教师教了哪些课。<?php $count = 0; while($row = $result->fetch_array(MYSQLI_ASSOC)){$count++; ?> 遍历查询结果集,每次循环取一行数据,以此来计算共有几门课。用表格<table>写上课程号、课程名和学分,并用<?php echo $row['xxx']; ?>分别写出数据库这三个的信息。
②课程列表页面course_teacher_p.php
依旧将几个页面include进来,使用session_start()启动或恢复会话。然后通过if(!array_key_exists('lb', $_SESSION) or $_SESSION['lb'] != "老师")从会话变量中取出用户身份,并判断用户身份是不是老师,如果不是则跳转到首页。其余内容和之前的页面相似,不再解释。

2.9 编辑课程信息模块和页面的搭建(course_edit.php, course_edit_p.php)

①编辑课程信息模块course_edit.php
首先include’mysql.php’页面,$mysqli = connect()连接数据库。使用if($_SERVER['REQUEST_METHOD']==='GET')获取表单,通过这条sql语句:$sql = "select cn, cname from course where tn = '$tn'"; 查询由$tn教师教授的课程。通过<?php while($row = $result->fetch_array()) { $course[$row['cn']] = $row['cname']; } ?>将课程名用数组$course排列出来,若课程不为空,则由<form method='POST'>提交在下拉列表中选择的课程;若课程为空则输出“无负责课程”。
若是$_SERVER['REQUEST_METHOD']不为’GET’,则由if(array_key_exists('OK1', $_POST)),用语句$sql = "select cname, description, outline from course where cn ='$cn'";查询课程的名字、描述和大纲,即课程的详细信息,并生成三个变量$cname = $row['cname'];$desc = $row['description'];$ext = $row['outline'];
<form method='POST' enctype='multipart/form-data'>可以编辑课程信息(课程描述与大纲),可以提交课程的描述和提交大纲文件(可从本地选择提交文件)。
if(array_key_exists('OK2', $_POST)),则更新数据库中的详细信息,如果$mysqli->affected_rows===1,则课程描述更新成功,否则失败或无更新。如果$_FILES['outline']['error']===0判断文件是否上传成功,该值为0表示成功。表示文件上传后在服务器端存储的临时文件的文件标识符。设置变量$filespec = $_FILES['outline']['tmp_name'];通过move_uploaded_file($filespec, "../files/".$cn.".".$ext2);将临时文件移动到新的地址。
最后通过$sql = "update course set outline='$ext2' where cn='$cn'";将修改后的课程信息更新到数据库中。
②编辑课程信息页面course_edit_p.php
编辑课程信息页面与之前的页面逻辑相同,不再详细解释。

2.10 浏览课程信息模块和页面的搭建(course.php, course_p.php)

①浏览课程信息模块course.php
首先还是$mysqli连接数据库,if($mysqli->connect_errno)判断连接是否成功。之后用mysql语句$sql = "select term,cname,opencourse.cn,tname,opencourse.tn,credit from opencourse,course,teacher where opencourse.cn=course.cn and teacher.tn=opencourse.tn;";查找有老师叫,并能够选课的全部课程。通过$row = $result->fetch_array(MYSQLI_ASSOC)来计算一共开设了几门课程。
<table>写上学期、课程名、课程编号、教师、教师编号和学分,并用<?php echo $row['xxx']; ?>写上其各种信息,完成浏览课程信息的页面。
②浏览课程信息页面course_p.php
浏览课程信息页面与之前的页面逻辑相同,不再详细解释。

2.11 查看成绩模块和页面的搭建(score_view.php, score_view_p.php)

①查看成绩模块score_view.php
获取用户输入信息,数据库的连接和数据库执行sql与返回结果等操作与之前模块中的方法相同,在这里不再详细描述。通过这条sql语句:
$sql = "select term,cname,credit,score from elective,opencourse,course where elective.lid=opencourse.lid and opencourse.cn=course.cn and sn='$sn' and status='1' order by term"; 查询开课状态为“结课”的课程,并且按学期升序排序,同一学期的课程按课程号升序排列。通过$row = $result->fetch_array(MYSQLI_ASSOC),来判断$row['score']是否小于60分,得出查询分数小于60的课程数量,既不及格门数。通过$av = floor($s*100 / $m)/100;算出这名同学的平均分(保留小数点后两位数)。
页面展示登录系统的学生的学号、姓名和不及格门数。用<table>显示学期、课程名、学分和成绩。并用PHP语句while ($row = $result->fetch_array(MYSQLI_ASSOC))循环输出<?php echo $row['xxx'];各项信息。
②查看成绩页面score_view_p.php
查看成绩页面与之前的页面逻辑相同,不再详细解释。

2.12进入系统模块的搭建(enter.php)

session_start()用于开启或者恢复一个会话。通过array_key_exists('lb',$_SESSION) && $_SESSION['lb']获取登录用户的身份,并将该用户跳转到对应的页面。
2.13 退出登录模块的搭建(logoff.php)
通过session_destroy()清除会话变量,从而使用户退出登录。exit() 函数输出一条消息,并退出当前脚本。

3. 实验心得

经过这学期的PHP学习,我们尝试构建一个简单的PHP教务选课管理信息系统。在系统设计的初期,我感到非常迷茫。因为我不知道这门课怎么学,对于程序设计,心里很紧张,感觉无法独自完成这个大作业。但老师的认真负责,平时留下的作业,课堂上的讲解和课堂上带我们做系统使得我对PHP编译的理解更上一层楼。在完成大作业时,在不断的测试、修改、成功的过程中,我逐渐能够对代码有自己的理解,并能够举一反三,让学过的知识能够串联起来,最终获得成功的喜悦和收获的欣喜。

                       

点击阅读全文

上一篇 2023年 5月 26日 am10:53
下一篇 2023年 5月 26日 am10:55