物联网编程技术实验指导书
内容 简 介
物联网编程技术是物联网专业学生的一门专业课程,本课程是物联网专业一门重要的专业课,着重讲述物联网编程的技术方法。对于学生从事物联网系统的研发、使用和维护有重要意义。本课程概念多、内容涉及面广、系统性强。通过本课程的学习,学生应能从软件、硬件功能分配的角度去了解、分析和研究物联网系统,建立起对物联网系统的全面认识,树立全面地、发展地看问题的观点,从而加深对各种类型物联网系统的了解。
本课程的学习应注重理论与实践相结合,因此实验教学是教学环节中必不可少的重要内容。通过实验教学的学习,使学生熟练掌握有关物联网编程的基本概念、基本原理和基本思想,掌握对物联网系统进行设计、分析和计算的方法。
实验部分包括五个实验,包括实验目的、实验内容和实验所需环境等,介绍了每个实验所需的一些基础知识和技巧。在实验中给出的实验题,跟课堂教学的内容都有密切的关系,所以需要将课堂上讲授的例子程序融会贯通,掌握实验所需的一些基本方法和工具,并在吃透例子程序的基础上,积极独立思考设计和编写满足实验要求的程序。
中南大学信息科学与工程学院 鲁鸣鸣制定
上机实验要求及规范
物联网编程技术课程具有比较强的实践性。上机实验是一个重要的教学环节。一般情况下学生能够重视实验环节,对于编写程序上机练习具有一定的积极性。但是容易忽略实验的总结,忽略实验报告的撰写。对于一名大学生必须严格训练分析总结能力、书面表达能力。需要逐步培养书写科学实验报告以及科技论文的能力。拿到一个题目,一般不要急于编程。正确的方法是:首先理解问题,明确给定的条件和要求解决的问题,然后按照自顶向下,逐步求精,分而治之的策略,按照面向对象的程序设计思路,逐一地解决子问题。
一、实验报告的基本要求:
一般性、较小规模的上机实验题,必须遵循下列要求。养成良好的习惯。
姓名 班级 学号 日期 题目
i. 问题描述
ii. 设计简要描述
iii. 程序清单(带有必要的注释)
iv. 结果分析(原始图示,测试数据与运行记录,分析正确性;)
v. 调试报告:
实验者必须重视最后这两个环节,否则等同于没有完成实验任务。这里可以体现个人特色、或创造性思维。具体内容包括:测试数据与运行记录;调试中遇到的主要问题,自己是如何解决的;经验和体会等。
二、实验报告的提高要求:
阶段性、较大规模的上机实验题,应该遵循下列要求。养成科学的习惯。
(1)问题描述
(2)需求和规格说明
(3)描述问题,简述题目要解决的问题是什么。规定软件做什么。原题条件不足时补全。
(4)概要设计:功能模块的划分
(5)详细设计:每部分模块的设计,含数据结构的设计,算法的描述(流程图或PDL) a.设计思想:主要算法基本思想。
b.设计表示:每个函数的头和规格说明;列出每个函数所调用和被调用的函数,也可以通过调用关系图表达。
(6)实现注释:各项功能的实现程度、在完成基本要求的基础上还有什么功能。
(7)用户手册:即使用说明书。
(8)调试报告:调试过程中遇到的主要问题是如何解决的;设计的回顾、讨论和分析;
时间复杂度、空间复杂度分析;改进设想;经验和体会等。
实验1 安卓智能终端传感器数据读取
一、实验目的
1. 了解和掌握安卓智能终端编程的基本方法
2. 了解和掌握安卓智能终端传感器编程的基本方法
二、实验开发环境和工具
可以在Linux或者Windows操作系统上搭建开发环境。终端上应用程序的开发采用Eclipse,使用Java语言,工具包使用JDK1.7,使用Android最新版的SDK。具体安装可通过安装JDK1.7和ADT Bundle(包括了嵌入了ADT plugin和最新安卓SDK的的Eclipse集成开发环境)来实现。测试和模拟环境综合采用Android SDK自带的模拟器以及实际的终端设备,比如Android手机或者Android平板电脑。关于Android的开发环境和工具的详细细节见课件和
[1-2]参考文献。
三、实验内容
在掌握课堂讲授的获取安卓智能终端加速计数据范例的基础上,实现对安卓智能终端所有传感器数据的读取的基本功能,包括加速计(accelerometer)、环境光(light sensor)、近距感应(proximity sensor)、电子罗盘(magenetic sensor)等,具体实现功能如下:
1. 确定实验用的安卓智能终端上可用的传感器类型(30分)
通过安卓提供的传感器系统服务(即SensorManager)的getSensorList方法来获取系统所支持的传感器类型,并在终端界面上通过控件展示出来。
2. 读取每种传感器的数据(30分)
对于实验设备所支持的每一种传感器类型,读取该传感器的数据,并将读取的数据在终端界面上显示出来。
3. 完成实验报告,详细说明设计方案和代码的实现流程。(40分)
四、参考文献
[1] 克曼特内呢(Satya Komatineni) (作者), 麦克莱恩(Dave MacLean) (作者), 哈希米(Sayed Hashimi) (作者), 杨越 (译者), "精通Android 3", 人民邮电出版社, 20xx年.
[2] Greg Milette and Adam Stroud,"Professional Android Sensor Programming", Wrox, 2012.
[3] Arvind Thiagarajan, Lenin Ravindranath, Katrina Lacurts, Sivan Toledo, Jakob Eriksson, Samuel Madden, Hari Balakrishnan, and U. Illinois Chicago, "VTrack: Accurate, Energy-aware Road Traffic Delay Estimation Using Mobile Phones", in Proceedings of SenSys 2009.
[4] Zhenyun Zhuang, Kyu-Han Kim, and Jatinder Pal Singh, "Improving Energy Efficiency of Location Sensing on Smartphones", in Proceedings of MobiSys 2010.
[5] Arvind Thiagarajan, Lenin S. Ravindranath, Hari Balakrishnan, Samuel Madden and Lewis Girod, “Accurate, Low-Energy Trajectory Mapping for Mobile Devices”, in Proceedings of NSDI 2011.
[6] Jeongyeup Paek, Kyu-Han Kim, Jatinder P. Singh, and Ramesh Govindan, "Energy-Efficient Positioning for Smartphones using Cell-ID Sequence Matching", in Proceedings of Mobisys 2011.
实验2 人体活动状态识别
一、实验目的
1. 了解和掌握人体活动状态识别的基本思想
2. 了解和掌握人体活动状态识别的系统设计和编程实现基本流程
3. 了解和掌握安卓基本组件content provider
二、实验开发环境和工具
可以在Linux或者Windows操作系统上搭建开发环境。终端上应用程序的开发采用Eclipse,使用Java语言,工具包使用JDK1.7,使用Android最新版的SDK。测试和模拟环境综合采用Android SDK自带的模拟器以及实际的终端设备,比如Android手机或者Android平
[1-2]板电脑。关于Android的开发环境和工具的详细细节见参考文献。
三、实验内容
在实验1掌握安卓智能终端传感器数据读取和课堂讲授人体活动状态监测的基础上,实现人体状态监测的应用。
1. 实现人体活动状态数据训练的功能:通过3D加速传感器收集手机用户站着、走路和跑步等运动状态数据,并基于这些数据训练用户的活动状态。训练后的活动状态数据存入数据库,并用content provider进行封装,以备活动状态识别模块访问所需。实现细节请参考课堂讲授的课件和提供的源码。
2. 实现人体活动状态识别的功能::通过3D加速传感器收集手机用户当前活动状态数据,并与人体活动状态训练模块所训练的活动状态数据进行比较,从而判定用户当前活动的状态。实现细节请参考课堂讲授的课件和提供的源码。
3.完成实验报告,详细说明设计方案和代码的实现流程。(40分)
四、参考文献
[1] 克曼特内呢(Satya Komatineni) (作者), 麦克莱恩(Dave MacLean) (作者), 哈希米(Sayed Hashimi) (作者), 杨越 (译者), "精通Android 3", 人民邮电出版社, 20xx年.
[2] Greg Milette and Adam Stroud,"Professional Android Sensor Programming", Wrox, 2012.
第二篇:《网站编程技术》上机实验指导书
南阳理工学院
《网站编程技术》上机实验指导书
(2013版)
软件学院·网络工程教研室
2013.03
目 录
实验1 PHP基础......................................................................... 1
实验2 PHP表达式...................................................................... 3
实验3 PHP流程控制.................................................................. 5
实验4 PHP数组......................................................................... 9
实验5 PHP数据采集................................................................ 11
实验6 PHP函数....................................................................... 15
实验7基于Mysql的PHP管理系统数据库................................ 17
实验8 PHP会话控制................................................................ 21
实验9 字符串处理................................................................... 25
实验10 PHP综合应用.............................................................. 28
实验1 PHP基础
实验实验目的和要求:
1.掌握WAMP或LAMP等PHP环境的部署;
2.掌握最基本的PHP程序的结构;
3.掌握基本的输出语句以及PHP代码和HTML代码的混合编写。
实验内容:
1、下载并安装WampServer,构建PHP运行环境;
2、构建PHP开发环境,编写并运行一个PHP程序,最终在屏幕上显示“hello world”以及服务器的系统时钟。要求,为程序的每一行都加上必要的注释说明。
3、编写register.html,此页面包含一个简单的表单,用户可以输入用户名、密码、确认密码等信息并可以提交表单。(选作)
4、编写register.php,用来处理register.html中用户提交的数据,把用户输入的信息输出到网页中。(选作)
实验预作记录:
1、下载并安装wampserver软件
2、配置php的时区,在php.ini文件中时区配置为date.timezone=Asia/ShangHai,然后重新启动所有的服务。
3、在WWW目录中新建一个目录1,在目录1中新建一个文件名为helloword.php的php文件。注意PHP程序的输写方法,开头需要是<?php ,结束是?>。
4、在屏幕上输出hello world !,在helloworld文件中写的php语句,对这个语句进行注释。
#在浏览器上显示服务器的系统时钟
echo date("Y年m月d日H时i分s秒");
5、在文件中写php语句将服务器的时钟显示在屏幕上, 对这个语句进行注释。
#在浏览器上显示服务器的系统时钟
echo date("Y年m月d日H时i分s秒");
6、在浏览器中输入http://localhost进行测试,正常情况下网页中应该出现“helloworld”等内容。
相关源代码:
<html>
<head>
<title>第一个PHP程序</title>
</head>
<body>
<br/>
<?php
/* 在浏览器上显示hello world !*/
//在浏览器上显示hello world !
#在浏览器上显示hello world !
echo "hello world !";
echo "<br/>";//换行
/* 在浏览器上显示服务器的系统时钟 */
//在浏览器上显示服务器的系统时钟
#在浏览器上显示服务器的系统时钟
echo date("Y年m月d日H时i分s秒");
?>
<br/>
</body>
</html>
实验2 PHP表达式
实验实验目的和要求:
实验内容:
补充完成一个名字为index.php的PHP程序,自己仔细的解读给定的HTML代码,然后获取用户输入的圆的半径,然后计算出圆的面积和周长。然后输出“圆的面积是***CM2”,“圆的周长是***CM”。注意检查用户输入的数值的合法性。
实验预作记录:
1、打开 WAMP 服务器,是 WAMP 服务器处于在线的状态。
2、单击 WAMP,选择www目录,在此目录下创建一个job3.php.
3、使用 Editplus 打开job3.php ,将老师给定的HTML代码复制到文件中,阅读给定的代码。
4、依照题目的要求再次基础上添加相应的代码,实现获取用户输入的圆的半径,然后计算出圆的面积和周长。然后输出“圆的面积是***CM2”,“圆的周长是***CM”。
5、基本功能实现之后,对输入的数据的合法性进行验证,比如说用户输入的内容不能为空,并且输入的数据必须是整形,且必须大于零,代码编写完成后,进行调试。
6、打开浏览器,输入http://localhost/job3.php,分别输入半径 2 和2.2 和2a 的值,观察结果是否正确。有错误的话返回第五步,继续进行调试。
7、实验完成后,书写相应的文档,实验结束。
相关源代码:
<html>
<title>输入半径,求圆面积和周长</title>
以下是求一个圆的面积和周长的网页,请注意所输入的圆半径需要为整数
<form action="job3.php" method="post">
请输入一个圆的半径(厘米):
<input type='text' name='radius' size='20' maxlength='15' /><br/><br/><br/>
<input type='submit' value='开始计算' name="submit" />
</form>
<body>
<?php
define("PI","3.14");
if(isset($_POST['submit']))
{
$radius=$_POST['radius'];
$radius1=(int)$radius;
if($radius!="" && $radius>=0 && !strcmp($radius,$radius1)){
$area=PI*$radius1*$radius1;
$circle=2*PI*$radius1;
echo "圆的面积是".$area."CM2<br>";
echo "圆的周长是".$circle."CM";
}else{
echo "请输入一个合法的半径的值!";
}
}
?>
</body>
</html>
实验3 PHP流程控制
实验目的和要求:
1、使学生熟悉并掌握PHP的Switch语句;
2、使学生熟悉并掌握PHP的For循环;
3、使学生熟悉并掌握PHP的While循环;
4、使学生熟悉并掌握PHP的Do While循环。
实验内容:
补充完成一个PHP程序,自己仔细的解读给定的HTML代码,然后获取用户输入的单选框的值。系统根据用户提交的选项,自动按照选项的要求计算出最终的结果。
用户点击“开始计算”按钮后,分别输出“1+2+3+4+...+99+100=xxx”,“1+3+5+...+99=xxx”,“2+4+6+...+100=xxx”以及“系统的初始总和为:xxx”。
实验内容:
补充完成一个PHP程序,自己仔细的解读给定的HTML代码,然后获取用户输入的单选框的值。系统根据用户提交的选项,自动按照选项的要求计算出最终的结果。
用户点击“开始计算”按钮后,分别输出“1+2+3+4+...+99+100=xxx”,“1+3+5+...+99=xxx”,“2+4+6+...+100=xxx”以及“系统的初始总和为:xxx”。
实验预作记录:
1、首先是实验环境的调试,这个实验是基于windows下,利用wampserver架构WAMP实验环境来完成的;
2、而php代码编写的环境安装,这个实验在Dreamware 8下调试出代码的,所以先安装Dreamware 8;
3、启动wampserver,并打开Dreamware 8;
4、分析题目,要求是编写代码利用for循环计算1+2+3+4+...+99+100的值并完整输出,使用While循环计算:1+3+5+...+99的值并完整输出,使用Do while循环计算:2+4+6+...+100的值并完整输出,确定好思路,并在写字板上写出大概得过程;
5、然后在Dreamware 8中开始编写代码,代码完成后保存,并放到wampserver的www目录下;
6、利用网页进行测试,测试时查看最初始的计数($sum)的值,并点击不同的按钮,检查结果是否正确,如果正确就保存实验结果。
相关源代码:
<html>
<title>PHP的Switch分支语句和循环语句的练习</title>
<form action="index.php" method="post">
请输入一个选项(初始值$sum=0):<br/><br />
<input type='radio' name='option' value='option_1'/>使用For循环计算:1+2+3+4+...+99+100的值<br /><br />
<input type='radio' name='option' value='option_2'/>使用While循环计算:1+3+5+...+99的值<br /><br />
<input type='radio' name='option' value='option_3'/>使用Do while循环计算:2+4+6+...+100的值<br /><br />
<input type='radio' name='option' value='option_4'/>查看最初始的计数($sum)的值<br /><br /><br />
<input type='submit' value='开始计算' name="submit" />
</form>
<?php
/*补充完成一个PHP程序,自己仔细的解读给定的HTML代码,然后获取用户输入的单选框的值。系统根据用户提交的选项,自动按照选项的要求计算出最终的结果。
用户点击“开始计算”按钮后,分别输出“1+2+3+4+...+99+100=xxx”,“1+3+5+...+99=xxx”,“2+4+6+...+100=xxx”以及“系统的初始总和为:xxx”。
*/
$sum=0;
if(isset($_POST['submit']))
{
if(isset($_POST['option']))
{
$option=$_POST['option'];
switch($option)
{
case "option_1":
for($i=1;$i<=100;$i++)
{
$sum=$sum+$i;
}
echo "1+2+3+4+...+99+100=$sum";
break;
case "option_2":
$i=1;
while($i<=100)
{
$sum=$sum+$i;
$i =$i + 2;
}
echo "1+3+5+...+99=$sum";
break;
case "option_3":
$i=2;
do
{
$sum=$sum+$i;
$i =$i + 2;
}while($i<=100);
echo "2+4+6+...+100=$sum";
break;
case "option_4":
echo "系统的初始总和为:$sum";
break;
}
}
else
{
echo "请选择一个选项";
}
}
?>
</html>
实验4 PHP数组
实验目的和要求:
1.掌握PHP的数组声明;
2.掌握PHP的数组定义;
3.掌握PHP数组的遍历和排序;
4.熟练运用数组完成相关的任务。
实验内容:
下载并仔细阅读给定的index.php程序,在网页中录入至少5个学生的个人信息,然后按照学生的成绩高低对该二维数组进行排序,并在网页中显示排序前后的数组内容。
实验预作记录:
1、启动WampServer服务。在www目录下创建index.phh文件,用ultraedit编辑此文件。
2、定义数组$_SESSION[$stuName],并使用array()语言结构创建。使用foreach($_SESSION as $value)对该数组遍历,并显示所有的学生信息。
3、在排序中,先使用foreach($_SESSION as $key=>$value)对该数组进行遍历,把学生的成绩的值赋值给$scored[$key],然后用arsort($scored)函数对所有学生的成绩按照从高到低的顺序进行排序。
4、定义一个空数组$arr,然后用foreach($scored as $key=>$value)进行遍历,把$_SESSION的键值赋给空数组的键值$arr[$key]=$_SESSION[$key],最后把数组$arr的值打印出来。
5、按照原来数组的结构重构排序后的学生数组,显示所有排序后的学生。在网页中显示排序前后的students数组。
6、修改index.phh中的各种错误,对所编写的程序进行测试,使其能够在浏览器中显示。
7、在浏览器书输入:http://127.0.0.1/观察实验结果。
相关源代码:
核心的二维数组排序函数
function multi_array_sort($multi_array,$sort_key,$sort=SORT_ASC){
if(is_array($multi_array)){
foreach ($multi_array as $row_array){
if(is_array($row_array)){
$key_array[] = $row_array[$sort_key];
}else{
return false;
}
}
}else{
return false;
}
array_multisort($key_array,$sort,$multi_array);
return $multi_array;
}
$result=multi_array_sort($_SESSION,"stuScore");
foreach($result as $key1=>$value){
//foreach($value as $key2=>$value2){
echo "姓名".$key1."=>"."学号=".$value['stuID']."性别=".$value['stuSex']."成绩=".$value['stuScore'];
echo "<br>";
//}
}
实验5 PHP数据采集
实验目的和要求:
1、使学生掌握各种Form表单控件的使用;
2、使学生掌握HTML和PHP之间的数据传递;
3、使学生掌握PHP的文件上传;
4、使学生能够灵活运用表单完成各种数据提交任务。
实验内容:
首先完成一个HTML的表单页面,该页面可以实现学生信息的提交功能。提交的信息包括:学生姓名(手动输入),登录密码、确认密码(两种密码需要对比),学生班级(下列列表选择),学生学号(输入),学生性别(单选框),学生的兴趣爱好(多选),学生的头像(需要用文件上传完成),学生的课程成绩,学生的备注信息以及其他信息(自己指定)。
然后设置两个按钮,一个提交,一个重置。
最后把表单采集的数据提交给后台的PHP服务器进行处理,最终可以在网页上显示用户输入的个人所有信息。
有兴趣的学生可以考虑对每个表单输入域的数据进行数据合法性检测。
实验预作记录:
1、设计一个专门用于数据提交的Html表单提交到"register.php",需要在表单开头添加enctype="multipart/form-data",因为表单需要上传文件;
2、学生姓名需要使用单行文本框,设置name="studentname" size="20" maxlength="15";
3、登录密码和确认密码使用密码框,设置密码框size="20" maxlength="15";
4、对学生班级使用下拉列表框,并且只能选择一个select name="grade";
5、学生的学号使用单行文本框,在PHP文件中,需要对提交的学号进行验证,判断是否为整数数字;
6、学生的性别使用单选框,因为性别只能为男或者女name="sex" type="radio
7.学生的兴趣爱好使用复选框,name使用数组的形式name="insterests[]" type="checkbox";
8、学生的备注信息使用多行文本框,<textarea name="remark" cols="50" rows="5">;
9、添加提交和重置按钮type="submit",type="reset";
10、上传文件使用文件上传框,并使用隐藏域对上传文件大小进行限制。
PHP文件对数据的处理模块设计:
1、使用$_POST[ ]获取表单提交的数据,并把数据复制给相应的变量;
2、判断用户名和密码是否为空,如果不为空则判断提交的密码和确认密码是否相同;
3、如果两次密码相同则输出注册的学生信息;
4、对于上传文件,需要使用move_uploaded_file()把上传的文件转移到指定的目录下;
5、在浏览器中对文件进行测试。
相关源代码:
<?php
$studentname = $_POST['studentname'];
$password = $_POST['password'];
$confirmpassword = $_POST['confirmpassword'];
$grade = $_POST['grade'];
$sex=$_POST['sex'];
$math=$_POST['math'];
$english=$_POST['english'];
$remark=$_POST['remark'];
if(empty($studentname))
{
echo "用户名不能为空!";
return;
}
if(empty($password))
{
if(empty($confirmpassword))
{
echo "密码不能为空!";
return;
} }
if($password!=$confirmpassword)
{
echo "两次输入的密码不相同." ;
}
else{
echo "姓名:" ;
echo $studentname."<br/><br/>";
echo "密码:" ;
echo $password."<br/><br/>";
echo "班级:" ;
echo $grade."<br/><br/>";
echo "性别:";
echo $sex."<br/><br/>";
echo "英语:";
echo $english."<br/><br/>";
echo "数学:";
echo $math."<br/><br/>";
echo "备注:";
echo $remark."<br/><br/>";
echo "爱好:";
foreach($_POST['insterests'] as $insterest)
{
echo $insterest." ";
}
echo "<br/>";
$mypicture=$_FILES['mypicture'];
$error=$mypicture['error'];
switch($error)
{
case 0:
$mypicturename=$mypicture['name'];
echo "个人相片为:".$mypicturename;
$mypictureTemp=$mypicture['tmp_name'];
$destination="uploads/".$mypicturename;
move_uploaded_file($mypictureTemp,$destination);
echo "文件上传成功<br/>";
break;
case 1:
echo "上传的文件超过了php.ini中upload_max_filesize选项限制的值!<br/>";
break;
case 2:
echo "上传的文件大小超过了form表单中max_file_size选项指定的值!<br/>";
break;
case 3:
echo "文件只有部分被上传!<br/>";
break;
case 4:
echo "没有选择上传文件!<br/>";
break;
}
echo "上传相片的文件大小不能超过:".$_POST['MAX_FILE_SIZE']."字节";
}
?>
实验6 PHP函数
实验目的和要求:
1.使学生能够熟练运用PHP的函数;
2.掌握PHP中函数的定义及使用方法。
3.使学生能够完成基本的文件上传的功能函数的编写及应用。
实验内容:
在网站主目录中创建三个文件,第一个名字为:index.html,该网页主要提供用户的注册信息的录入,具体的用户注册表单内容按照实验五的要求完成;第二个名字为:register.php,该程序完成index.html中的数据采集,并对采集到的数据进行处理(比如:判断用户密码是否有效,成绩是否为0-100的正整数等等),并实现用户的文件上传功能(注意:该功能必需使用函数编写,该函数在另外一个PHP程序中声明);第三个名字为:upload.php,该程序主要是对文件上传功能的实现。
7、如果上传成功,把照片直接显示在网页中。
实验预作记录:
1、创建一个upload()函数实现文件上传功能,在C:\wamp\www\functions目录下创建filesystem.php文件。
2、需要实现文件上传功能首先需要声名函数upload(),然后在代码处在调用upload()函数。
3、index.html页面的form表单中的“个人爱好”选项要设置为复选框,需要实现一个复选框可以可以提交多个数据。
4、设置文件上传大小的时候,需要将定义FILE_SIZE的表单控件放置在文件上传框之前。
5、在index.html页面中form表单存在多个提交按钮,为了进行区分可以为每个提交按钮进行name属性设置。
6、在register.php程序中需要完成对录入信息的数据采集,并对采集到的数据进行处理,判断采集到的数据是否符合规范。
7、upload()函数式将form表单中选择的上传文件$file上传到$filepath目录下,上传前首先要创建目录$filepath。
相关源代码:
<?php
function upload($file)
{
$error=$file['error'];
switch($error)
{
case 0:
$fileName=$file['name'];
echo "你的个人头片:".$fileName."<br/>";
$fileTemp=$file['tmp_name'];
$destination="upload/".$fileName;
move_uploaded_file($fileTemp,$destination);
echo "文件上传成功!<br/>";
break;
case 1:
echo "上传文件!<br/>";
break;
case 2:
echo "上传文件超过了MAX_FILE_SIZE选项制定得<br/>";
break;
case 3:
echo "文件只有部分被上传!<br/>";
break;
case 4;
echo "没有选择上传文件!<br/>";
break;
}
}
?>
实验7基于Mysql的PHP管理系统实现
实验目的和要求:
1.使学生能够熟练掌握Mysql数据库的配置、创建及维护;
2.使学生能够熟练掌握Mysql数据表的创建、更新、删除及查询;
3.使学生能够熟练掌握Mysql数据库的Select语句;
4.使学生能够熟练掌握使用PHP操作Mysql数据库的方法。
实验内容:
设计并利用PHP完成一个简易的图书信息管理系统。要求数据库使用Mysql创建,数据库中数据表的设计必须满足需求分析文档中要求,并出具必要的系统E-R图。利用PHP的函数完成数据库的连接、数据记录的录入、查找、更新及删除等操作。本系统涉及到的所有数据的录入统一采用HTML表单进行录入,并对必要的数据字段进行判断。
(最终的个人得分的评判根据自己系统的具体设计情况而定)
(1)在Mysql客户控制台中,使用命令图书信息管理系统的数据库和表;(2学时)
(2)使用PHPMyadmin工具建立同样的数据库和表。(1学时)
(3)编写PHP程序完成实验题目的功能需求。(3学时)
实验预作记录:
1、对实验的需求进行分析,并对实验步骤进行规划,画出用户的操作流程图;
2、对实体进行分析,画出试验的E-R图,并划出试验的数据流程图;
3、根据实验的需求分析和E-R图对数据库结构进行设计,并设计出表之间联系;
4、对数据库进行设计,新建一个数据库,数据库的名字叫borrow;
5、因为需要注册并保存用户信息,所以需要新建一个表保存读者的信息给这个表取名为user_msg,这个表中新建五个字段,把user_id设置为主键,里面保存用户的基本信息;
6、因为管理员不能注册,所以需要新建一张表,里面存放的是管理员的信息,表名为admin;
7、新建一张表book_msg里面存放的是书籍的信息,包括书的ID号,和ISBN号;
8、新建表borrow_msg里面存放的是借阅的信息表;
9、新建文件index.html作为用户的登录界面,并且能够进行用户权限选择,新建register,用作用户的注册界面;
10、新建check_role.php文件,接受登录表单提交过来的数据,并分析用户是读者还是系统管理员;
11、新建admin.php和reader.php两个文件,分别作为读者和管理员的操作界面,当角色为管理员时进入admin.php,当角色为普通用户时进入reader.php;
12、当进入admin.php界面时,管理员可以对图书进行信息的录入。可以对信息进行修改,可以对信息进行删除,可以查询用户的借阅信息
13、建立add_booK.php文件,可以添加图书的信息,并且使用save_book.php文件保存图书信息;
14、建立mod_book.php文件和del_book.php文件,执行对图书信息修改和删除;
15、用户进入reader.php文件中,可以对图书信息进行查询,并能执行借阅操作;
16、新建boorrow_book.php可以对图书进行借阅操作,当点击借阅时,把图书的借阅状态,改为“1”;
17、对系统进行测试,查看有没有bug。
相关源代码:
/*
* Created on 20##-3-3
*
* To change the template for this generated file go to
* Window - Preferences - PHPeclipse - PHP - Code Templates
*/
class mysql{
private $db_host;
private $db_name;
private $db_pwd;
private $db_database;
private $conn;//数据库连接标识;
private $result;//执行query命令的结果资源标识
private $sql;//sql执行语句
public function __construct($localhsot,$hostname,$password,$dbname)
{
$this->db_host=$localhsot;
$this->db_name=$hostname;
$this->db_pwd=$password;
$this->db_database=$dbname;
}
public function connect($conn){
$this->conn=$conn;
if($this->conn="pconn")
{
//永久链接 $this->conn=mysql_pconnect($this->db_host,$this->db_name,$this->db_pwd);
}elseif($this->conn="conn"){
$this->conn=mysql_connect($this->db_host,$this->db_name,$this->db_pwd);
}
$select=mysql_select_db($this->db_database,$this->conn);
mysql_query("set names 'gbk'");
}
/*public function mysql_select()
{
mysql_select_db($this->conn,$this->db_database);
}*/
public function close_connection(){
if($this->conn){
mysql_close($this->connect) or die(mysql_error());
}
}
}
?>
<?php
include_once('function/mysql.class.php');
$db_conn=new mysql('localhost','root','','borrow');
$db_conn->connect('conn');
$sql="select * from book_msg";
$result=mysql_query($sql);
$num=mysql_num_rows($result);
//$book_msg=mysql_fetch_array($result);
?>
实验8 PHP会话控制
实验目的和要求:
1、使学生能够掌握PHP页面跳转的实现方法;
2、使学生掌握并熟练应用PHP的Cookie技术;
3、使学生掌握并熟练应用PHP的Session技术;
4、能够把Cookie技术和Session技术恰当的应用到网站设计中。
实验内容:
分别使用Cookie技术和Session技术完成PHP页面跳转过程中的信息传递功能。应用的背景是,该网站具有两个页面,一个页面完成用户的登录功能,该页面主要输入用户名和密码,并根据用户名和密码是否和数据库中记录一致,如果一致进入到用户成功登录的页面,否则弹出用户错误登录页面。用户成功登录和错误登录页面要输出登录页面的用户名及密码的内容。(注意密码要用MD5加密进行处理)
实验预作记录:
(一)cookies的会话控制
1、对实验要求进行分析,并对实验的文件目录进行设计;
2、建立数据库cookie并新建一张用户表user,里面包含两个字段姓名字段name和密码字段pwd,向数据库中插入数据;
3、新建文件index.php。里面包含两个一个文本框,一个密码框,分别提供用户姓名的输入和用户密码的输入;
4、在index.php的表单提交到login_pro.php文件中,并且在login_pro文件中对提交的数据进行处理;
5、新建文件login_pro文件,首先判断cookie文件中是否包含加密之后的密码信息,如果有直接使用,如果没有则使用md5进行加密处理;
6、连接数据库,判断用户是否存在,存在则查找的数据集里面包含数据,如果不存在则数据集里面不包含数据;
7、如果存在使用header重定向到result文件里面;
8、如果不存在则提示错误,并输出错误的用户名和密码。
(二)session会话控制
1、session会话控制和cookie控制相似,但session主要保存在服务器端,而cookie会话控制组要保存在客户端;
2、session在使用之前需要使用session_start()函数开启session,开启之后才能使用$_SESSION全局函数传递数据;
3、判断受否登陆也有一定差距;
4、修改cookie的部分实验代码。
相关源代码:
<?php
include_once('conn.php');
session_start();
$username=$_POST['username'];
$_SESSION['username']=$username;
if(isset($_SESSION['password'])){
$password=$_SESSION['password'];
}else{
$password=$_POST['password'];
$_SESSION['password']=$password;
}
$sql="select * from user where name='$username' and pwd='$password'";
$result=mysql_query($sql);
$fetch_array=mysql_fetch_array($result);
if(!$result)
{ die(mysql_error());
exit; }
if(mysql_num_rows($result)>0){
$_SESSION['username']=$fetch_array['name'];
$_SESSION['password']=$fetch_array['pwd'];
header("Location:result.php?message=right");
}else{
echo "用户名或者密码输入错误"."<br>";
echo $_SESSION['username']."<br>";
echo $_SESSION['password'];
}
?>
<?php
include_once('conn.php');
$username=$_POST['username'];
if(isset($_COOKIE['password'])){
$password=$_COOKIE['password'];
}else{
$password=$_POST['password'];
}
$sql="select * from user where name='$username' and pwd='$password'";
$result=mysql_query($sql);
if(!$result)
{ die(mysql_error());
exit; }
if(mysql_num_rows($result)>0){
setcookie('username',$username);
setcookie('password',$password);
header("Location:result.php?message=right");
}else{
echo "用户名或者密码输入错误"."<br>";
echo $username."<br>";
echo $password;
}
?>
实验9 字符串处理
实验目的和要求:
使学生能够掌握PHP中常用字符串函数的使用方法。
实验内容:
编写PHP页面,实现字符串翻转功能、中文字符串截取、字符串对比、HTML字符串过滤等功能
实验预作记录:
实现页面翻转功能
1、首先使用header实现在浏览器页面显示的编码格式为utf-8;
2、定义四个字符串,分别纯中文,中英文,纯英文,还有包含特殊html符号;
3、创建一个自定义函数str_rev_gb($str),参数为需要翻转的字符串;
4、在函数中首先判断是否为字符串,然后判断字符串的编码格式;
5、将字符串存入一个空的数组;
6、使用mb_strlen函数计算字符串的长度;
7、使用mb_str函数截取字符串并把截取的字符串放到数组中;
8、使用krsort函数按照键值逆序排序数组,并把字符串拼接;
9、使用函数iconv_substr($str4,1,-3,"UTF-8"); 对字符串进行剪切;
10、使用strcmp函数对字符串进行比较,根据结果判断是否相等;
11、如果相等返回结果为0,不想等返回结果为1;
12、新建一个字符串包含html标签,使用htmlspecialchars函数进行处理,把对应的标签转化为预定义实体;
13、使用strip_tags函数,将字符串中的html标签去掉;
14、对实验进行测试。
相关源代码:
<?php
header("content-type:text/html;charset=utf-8");
/**
此函数的作用是反转中文字符串
mb_strlen() 获取字符的长度
mb_substr() 获取字符的单个元素
krsort() 按照键值逆序排序数组
implode() 将数组拼接为字符串
explode() 使用字符串分隔字符串
*/
$str1 = "Englist";
$str2 = "English中国";
$str3 = "Eng中lish国";
$str4 = "中华人民共和国";
$str5 = "中<h1>华人民共</h1>和国";
function str_rev_gb($str){
//判断输入的是不是utf8类型的字符,否则退出
if(!is_string($str)||!mb_check_encoding($str,'UTF-8')){
exit("输入类型不是UTF8类型的字符串");
}
$array=array();
//将字符串存入数组
$l=mb_strlen($str,'UTF-8');
for($i=0;$i<$l;$i++){
$array[]=mb_substr($str,$i,1,'UTF-8');
}
//反转字符串
krsort($array);
//拼接字符串
$string=implode($array);
return $string;
}
echo $str1."->".str_rev_gb($str1)."<br>";
echo $str2."->".str_rev_gb($str2)."<br>";
echo $str3."->".str_rev_gb($str3)."<br>";
echo $str4."->".str_rev_gb($str4)."<br>";
echo '<hr>';
echo iconv_substr($str4,1,-3,"UTF-8");
echo '<hr>';
if(strcmp($str4,'中华人民共和国')){
echo "字符串不相等";
}else{
echo "字符串相等";
}
echo '<hr>';
echo htmlspecialchars($str5);
echo '<hr>';
echo strip_tags($str5);
?>
实验10 PHP综合应用
实验目的和要求:
1、使学生理解PHP网站开发流程;
2、使学生能够把平时所学的知识进行统一的整合;
3、使学生理解一个完整的网站应用系统的构成。
实验内容:
1、编写一个PHP页面,显示所有的学生信息;
2、编写一个PHP页面,分页显示学生信息;
3、编写一个PHP页面,用来搜索学生信息。
实验预作记录:
1、对系统进行分析,了解系统的需求,并写出功能需求;
2、画出新闻发布系统中使用的模型,包括时间列表和数据字典;
3、画出新闻发布系统的功能结构图,包括前台和后台的功能结构;
4、画出新闻发布系统的E_R模型,分析新闻发布系统的实体,以及实体之间的关系;
5、画出新闻发布系统的数据流程图,用来反映信息在系统中的流动处理和存储情况;
6、使用数据字典年描述元数据的数据项数据流数据存储外部实体之间的关系;
7、画出系统的系统流程图,用来描述计算机之间的所以控制流程;
8、对系统的数据库进行分析,通过前面的分析分析出需要建立的数据库中的表,和表之间的关系,以及表中所要添加的字段;
9、对系统的UI进行设计,提高用户和系统的交互性;
10、分析文件的组织结构,以及需要建立的目录;
11、在编辑器中新建database.php文件,用来连接数据库,并在连接结束之后关闭数据库;
12、添加新闻添加页面,用来向新闻中添加新闻,并在前台显示;
13、创建file_system.php文件,实现文件上传功能;
14、创建news_save.php文件,用来保存新闻内容;
15、创建news_list.php文件。实现新闻列表在前台的显示,并方便用户点击;
16、创建文件news_edit.php文件,实现新闻的编辑,能够对新闻内容进行修改;
17、创建news_detail.php文件,可以查看新闻详细信息点击之后新闻的点击次数增加1;
18、创建review_save界面,实现新闻评论页面的保存;
19、新建page文件用来实现系统的分页,在大部分情况下分页都需要,所以需要添加到公共文件中;
20、对系统性能进行测试。
相关源代码:
登录模块
<?php
/*
* Created on 20##-3-10
*
* To change the template for this generated file go to
* Window - Preferences - PHPeclipse - PHP - Code Templates
*/
session_start();
include_once("functions/is_login.php");
if(isset($_GET["login_message"])){
if($_GET["login_message"]=="password_error"){
echo "密码错误,请重新登录<br/>";
}else if($_GET["login_message"]=="message_right"){
echo "登录成功<br/>";
}
}
if(is_login()){
echo "欢迎".$_SESSION["name"]."访问系统!<br/>";
echo "<a href='logout.php'>注销</a>";
return;
}
$name="";
if(isset($_COOKIE["name"])){
$name=$_COOKIE["name"];
}
$password="";
if(isset($_COOKIE["password"])){
$password=$_COOKIE["password"];
}
?>
<form action="login_process.php" method="post">
用户名:<input type="text" name="name" value="<?php echo $name;?>"/><br/>
密码 : <input type="password" name="password" value="<?php echo $password;?>"/><br/>
<input type="checkbox" name="expire" vlaue="3600" checked/>cookie保存一小时</br>
<input type="submit" vlaue="登录" />
</form>
退出模块
<?php
/*
* Created on 20##-3-11
*
* To change the template for this generated file go to
* Window - Preferences - PHPeclipse - PHP - Code Templates
*/
session_start();
session_unset();
if(isset($_COOKIE[session_name()])){
setcookie(session_name(),session_id(),time()-10);
}
session_destroy();
header("Location:login.php");
?>
新闻添加模块
<form action="news_save.php" method="post" enctype="multipart/form-data">
标题: <input type="text" name="title" size="30"><br/>
内容: <textarea name="content" cols="60" rows="16"></textarea><br/>
类别:
<select name="category_id" size="1">
<?php
include_once("functions/mysql.class.php");
$db_conn=new mysql("localhost","root","","phpnews");
$db_conn->connect("conn");
$res=mysql_query("select * from category");
while($row=mysql_fetch_array($res)){
?>
<option value="<?php echo $row['category_id'];?>"><?php echo $row['name'];?></option>
<?php
}
?>
</select><br/>
<input type="hidden" name="MAX_FILE_SIZE" value="10485760"/><br/>
附件:<input type="file" name="news_file" size="50"/>
<input type="submit" value="提交">
<input type="reset" value="重置">
</form>
新闻察看模块
<?php
/*
* Created on 20##-3-5
*
* To change the template for this generated file go to
* Window - Preferences - PHPeclipse - PHP - Code Templates
*/
include_once("functions/mysql.class.php");
include_once("functions/page.php");
if(isset($_GET["message"])){
echo $_GET["message"]."<br/>";
}
$search_sql="select * from news order by news_id desc";
$keyword="";
if(isset($_GET["keyword"])){
$search_sql="select * from news where title like '%$keyword%' or content like '%$keyword%' order by news_id desc";
}
?>
<form action="news_list.php" method="get">
请输入关键字:
<input type="text" name="keyword" value="<?php echo $keyword;?>" size="40" maxlength="40"/>
<input type="submit" value="搜索"/>
</form>
<br/>
<table>
<?php
$db_conn=new mysql("localhost","root","","phpnews");
$db_conn->connect("conn");
$rusult_set=mysql_query($search_sql);
$total_records=mysql_num_rows($rusult_set);
$page_size=3;
if(mysql_num_rows($rusult_set)==0){
exit("暂无记录");
}
while($row=mysql_fetch_array($rusult_set)){
?>
<tr>
<td>
<a href="news_detail.php"?news_id=<?php echo $row['news_id'];?>"><?php echo $row['title'];?></a>
</td>
<td>
<a href="news_edit.php"?news_id=<?php echo $row['news_id'];?>">编辑</a>
</td>
系统初始化模块
<?php
/*
* Created on 20##-3-3
*
* To change the template for this generated file go to
* Window - Preferences - PHPeclipse - PHP - Code Templates
*/
include_once("functions/mysql.class.php");
$db_conn=new mysql("localhost","root","","phpnews");
$result=$db_conn->connect("conn","category");
mysql_query("insert into category values(1,'娱乐')");
mysql_query("insert into category values(2,'财经')");
$password=md5(md5("admin"));
mysql_query("insert into users values(4,'huan','$password')");
?>