基于PHP和MYSQL数据库实现的失物招领系统

FullHouse

发布日期: 2018-11-09 14:21:08 浏览量: 2494
评分:
star star star star star star star star star star_border
*转载请注明来自write-bug.com

一、功能描述

1.1 系统实现的目的和意义

  • 目的:在新校区为大家提供一个失物招领的平台。

  • 意义:现在新校区面积较大,同学们丢失物品后,只通过线下途径进行效率低下且失主与拾物者联系不便,所以想通过这个系统建立线上交流的平台,提高失物找回的效率。

1.2 系统实现的功能

可以发布丢失物品和捡拾物品的信息,浏览以往发布的信息并提供搜索功能。在物品成功归还后可以撤销已经发布的消息。首页,即广场,展示已经发布的物品的消息,按时间排序展示,有多种分类:

  • 大类:寻失物/寻失主

  • 小类:地点,丢失时长(一周内,一个月内,三个月内)

  • 在首页还有搜索功能,输入关键字可以进行搜索,搜索内容包括时间地点物品特点等等

  • 个人中心,进入时先登陆,然后可以进行丢失物品或捡拾物品或撤销已发布的消息等操作。其中发布消息时要填写表格,内容包括物品图片,物品描述,丢失人姓名联系方式,丢失的时间,地点

1.3 系统开发的环境

  • Mysql:5.5.56

  • PHP:5.5.38

  • 服务器:nginx

  • 网站原型设计软件 Axure

二、总体结构

2.1 文件清单(按文件系统树型方式排列)

文件夹 PATH 列表,卷序列号为 0E94-2604

  1. C:.
  2. addmessage.php //添加信息
  3. delete.php //删除信息
  4. detail.php //详细信息
  5. esc.php //用户注销
  6. findpeople.php //查找失主
  7. findthing.php //查找失物
  8. getmessage.php //ajax入口
  9. guanli.php //用户个人信息管理
  10. index.php //主页
  11. join.php //注册页面
  12. link.php //连接数据库
  13. logoin.php //登录界面
  14. people.php //个人信息界面
  15. readme.txt //帮助文档
  16. ├─bootstrap //前端界面框架
  17. ├─css
  18. style.css //层叠样式表文件
  19. ├─images //图片
  20. buct.png //buct图标
  21. message.png //信息图标
  22. more.png //详细信息图标
  23. user.png //用户界面图标
  24. ├─js
  25. index.js //网站脚本
  26. └─jquery
  27. jquery-3.2.1.min.js //网站脚本库
  28. └─database
  29. findlost.sql //数据库导出文件

2.2 系统功能结构图

下图是招领广场网页所对应的功能结构图,对于初次登录的用户,会检测有无cookie,若有则会直接进入招领广场页面,如果没有则会进入登录页面,在登录页面有登录选项和注册选项。在招领广场中有查找功能,并且有指向详细信息和个人中心的链接。

下面是个人中心网页所对应的功能结构图,在这个页面中有发布丢失信息,发布找失主信息、管理已经发布的信息等三个功能链接。该页面也可以注销账户或者回到招领广场

2.3 系统的总流程图(标明每个模块的文件名)

三、详细设计

3.1 数据结构

3.1.1 树的遍历,增加删除节点

Html是一种超文本标记语言,浏览器会解析html代码生成DOM树,如下表示:

只有html代码界面并不完美,这就需要为每个html元素设置样式属性,就是css属性,通过下面的一段代码来解释这个事情:

网页上每个元素都是有样式的,节点之间可能有共同的样式,也可能会有自己独特的样式,浏览器对每个节点进行css样式的渲染时,都首先需要找到这个节点的位置,然后再设置具体的属性,本质上是树的一个深度优先搜索遍历,比如上图中的<div>标签,在进行样式的设定时,首先要从根节点,即html标签节点向下遍历搜素,找到所有div标签的位置,这个位置指向的是一个数组,数组中的div到底哪个才是应该设置属性的目标div呢?这就涉及到另外的一个东西,叫做css选择器,有类选择器,标签选择器,id选择器等,标签选择器就是给这个界面的所有特定标签进行样式的设定,比如说给所有的div设置样式就可以使用标签选择器,上图中用到了类选择器,即class=“”中的值,回到刚才的div数组,浏览器会查找这个div数组中具有特定类名属性的div,把样式渲染上去,不确定到底有几个div有这样的属性,所以浏览器会遍历整个数组,把所有的节点都遍历完,才能结束,否则只能使部分目标div设置好样式。

用户平时看到的网页有时不是固定的,比如说点击某一个按钮会在下面生成一个新的部分,或者删除一个新的部分,这就涉及到在DOM树上进行增加节点和删除节点的操作了,每个标签都对应于DOM树的一个节点,在进行css样式的渲染时,浏览器会遍历当前html文档生成的树,首先查找到应该删除或者增加元素的位置,然后再进行删除和插入的操作,重构这个DOM树,然后解析出来,这一个过程看上去有好几步,实际上程序运行实在瞬间完成的。

3.1.2 字符串的相关处理函数

用JavaScript处理字符串,与c语言字符串处理不同的是,js处理字符串更加的简单,JavaScript是一种弱类型解释性的脚本,只要声明一个变量,然后把一个字符串的值赋给它就好,想给字符串增加内容只需要在后边直接增加,本系统在运行搜索功能的时候,会把每个条件设置一个具体的语句,然后最终的查询语句是这些语句拼合在一起完成的,如果条件改变,还需要把已经生成的查询语句进行修改,修改由于查询参数变化引起的固定位置的变化,最终的查询语句数据会发给服务端程序,后端程序在进行数据库中的查找,并把结果返回给浏览器,用户就可以看到自己搜索的结果了。

3.1.3 集合的交并运算

接收到前端的查询语句,服务器端程序会执行这个查询语句,每条查询语句会返回一个结果,这个结果是一个集合,多数情况下匹配的结果不会只有一个,部分匹配的记录也会被添加到这个结合中,这个集合被称为结果集,每个条件会返回对应的结果集合,但是用户需要的是满足所有条件的数据,所以对这些结果集要进行交集的运算,最终生成一个返回到浏览器端的结果集—-最终结果集,最终结果集就是用户查找的最终结果,然后前端再把它渲染到界面上。

3.1.4 索引查找算法

因为要存储用户输入的数据,所以,需要有数据库来存用户输入的数据,小组用到的数据库是当下流行的关系型数据库MySQL,MySQL数据库的每一行是一条记录,每一列代表相应的字段,用来存储每个用户的发布的消息。在大多数情况下,不能确定用户输入的数据没有重复的,所以需要给每条消息设置一个唯一的值,这个值只有这条消息是这个值,其他的消息都不同,以此来进行每条消息的区分,只有给每条消息设置一个唯一的标识,在进行数据删除的时候才不会误删其他的消息,这个唯一的标识就叫索引。在用户管理页面的删除功能就是用的这种方法来进行每条消息的删除操作的。通常这个索引(数据库中叫主键)以一个整数来表示,并设置自增的属性。前端用户界面把这个索引发送到后端之后后端程序进行数据库的操作,查找这个索引,以此达到查找到目标数据的目的。用到了一种索引的查找算法。

3.2 各模块(或算法)流程图(标明函数名)

3.2.1 index.php

这个网站用PHP语言写的,PHP的语法混合了C、Java、Perl以及PHP创新的语法。PHP具有的优势是能够更快的执行动态网页而且PHP几乎支持所有流行的数据库以及操作系统,这也是本系统使用它的原因。

失物招领系统是一个在非常具有使用意义的一个系统,在日常生活中几乎每天都能看见朋友圈中找东西的消息。而这个系统看起来简单但是要做到真正实用还需要考虑许多细节。例如用什么关键字去分类和寻找丢失的物品,为了便于搜索,本系统设置了时间、丢失地点的分类,还提供了近几天和范围性地点的模糊搜索。为了准确,首界面的more中可以详细的看到物品的信息。本系统还提供了管理功能让用户方便自由的管理自己发布的信息,并及时做出修改。

下面简单介绍一下这个网站的结构和各个模块的功能。

首先进入之后的首界面是由一个名为index.php的文件解析而成的网站。这是整个网站的索引中心,由它指向失物招领系统的其他功能网页。

初次进入时会检测是否具有网页cookie,如果没有就会进入登陆页面,有的话则会进入首页.

首页中detail的链接指向由detail.php编写的一个网页,负责输出丢失物品的详细信息,另外还有一个名为个人中心的链接,指向的是一个由people.php解析而成、为用户服务的功能网页。

3.2.2 people.php

下面简单介绍一下个人中心(即people.php解析成网页)。主要功能有三个,分别是找失主,找丢失的物品和管理自己发布的信息。分别对应着三个链接,这三个链接对应的网页分别是由findpeople.php findthing.php和guanli.php写的,并在各个网页实现各自对应功能。

四、系统实现

4.1 index.php

用户登陆,招领广场部分代码实现

  1. <?php
  2. require_once("link.php");
  3. if (isset($_POST["user"])&&$_POST["user"]!="") {
  4. setcookie("user",$_POST["user"]);
  5. }
  6. if (isset($_COOKIE["user"])&&$_COOKIE["user"]!="")
  7. {
  8. print <<<ETO
  9. 这里显示的是招领广场的html页面代码
  10. ETO;
  11. $link=create_connect("findlost");
  12. // $link=mysqli_connect("localhost","root","123456","findlost");
  13. if(!$link)
  14. {
  15. echo "<script>alert('数据库连接失败');</script>";
  16. }
  17. else
  18. {
  19. $sql="SELECT * FROM findpeople ORDER BY sendtime DESC";
  20. $result=mysqli_query($link,$sql);
  21. while ($rows=mysqli_fetch_assoc($result))
  22. {
  23. if($rows["class"]==0)
  24. {
  25. echo :这里写寻物消息
  26. }
  27. else
  28. {
  29. echo "这里写寻失主消息
  30. }
  31. }
  32. }
  33. }
  34. else
  35. {
  36. print <<<ETO
  37. 这里写登陆界面
  38. ETO;
  39. }
  40. ?>

4.2 people.php

这一部分是用户在个人中心的界面。可以进行找东西,找失主消息的发布,也可以进行对自己已经发布消息的一个删除操作。

  1. <div class="info">
  2. 账号:<?php echo $_COOKIE["user"]; ?> <a href="esc.php">注销</a>
  3. </div>
  4. <div class="people" style="margin-top: 100px;"><a href="findthing.php">我丢失了物品 <img src="images/more.png"></a></div>
  5. <div class="people"><a href="findpeople.php">我拾到了物品 <img src="images/more.png"></a></div>
  6. <div class="people"><a href="guanli.php">管理我的发布信息 <img src="images/more.png"></a></div>

4.3 findlost.php

发布找东西消息的页面的实现。

  1. <form name="add" action="addmessage.php" method="post">
  2. <input type="text" name="name" placeholder="输入所失物品名称"><br>
  3. <input type="text" name="attribute" placeholder="输入所失物品类别"><br>
  4. <input type="text" name="describes" placeholder="输入所失物品描述"><br>
  5. <input type="text" name="findaddress" placeholder="输入丢失地点"><br>
  6. <input type="text" name="phone" placeholder="输入联系方式"><br>
  7. <input type="text" name="photo" placeholder="输入照片"><br>
  8. <input type="hidden" name="class" value="1">
  9. <input type="button" value="提交" class="button" onclick="checkdata()">
  10. </form>

4.4 findpeople.php

发布寻找失主的消息的界面。

  1. <form name="add" action="addmessage.php" method="post">
  2. <input type="text" name="name" placeholder="输入所拾物品名称"><br>
  3. <input type="text" name="attribute" placeholder="输入所拾物品类别"><br>
  4. <input type="text" name="describes" placeholder="输入所拾物品描述"><br>
  5. <input type="text" name="findaddress" placeholder="输入捡到地点"><br>
  6. <input type="text" name="phone" placeholder="输入联系方式"><br>
  7. <input type="text" name="photo" placeholder="输入照片"><br>
  8. <input type="hidden" name="class" value="0">
  9. <input type="button" value="提交" class="button" onclick="checkdata()">
  10. </form>

4.5 detaill.php

对每一条消息详细信息展示的界面(首页点击more进入)

  1. $sql="SELECT * FROM `findpeople` WHERE id=$id";
  2. $result=mysqli_query($link,$sql);
  3. if(!$result)
  4. {
  5. echo "没有查到相关内容";
  6. }
  7. else
  8. {
  9. while($rows=mysqli_fetch_assoc($result))
  10. {
  11. echo "<div class='container detail'>
  12. <div class='row clearfix'>
  13. <div class='col-xs-12 column'>
  14. <img src='images/user.png'>
  15. <div class='text'>
  16. <p class='iteam'><span>名称: </span>".$rows['name']."</p>
  17. <p class='iteam'><span>类别: </span>".$rows['attribute']."</p>
  18. <p class='iteam'><span>描述: </span>".$rows['describes']."</p>
  19. <p class='iteam'><span>地址: </span>".$rows['findaddress']."</p>
  20. <p class='iteam'><span>时间: </span>".$rows['sendtime']."</p>
  21. <p class='iteam'><span>电话: </span>".$rows['phone']."</p>";
  22. if ($rows['class']==0) {
  23. echo "<p class='iteam'><span>拾到人:</span>".$rows['finder']."</p>";
  24. }
  25. else
  26. {
  27. echo "<p class='iteam'><span>寻物人:</span>".$rows['finder']."</p>";
  28. }
  29. echo "
  30. </div>
  31. </div>
  32. </div>
  33. </div>";
  34. }
  35. }

4.6 esc.php

这是一个后端程序,用于消除cookie,即注销操作。

  1. <?php
  2. setcookie("user","");
  3. echo "<script>window.location.href='index.php'</script>";
  4. ?>

4.7 guanli.php

对自己发布的消息进行管理(浏览和删除)

  1. $user=$_COOKIE['user'];
  2. $sql="SELECT * FROM findpeople WHERE finder = $user ORDER BY sendtime DESC";
  3. $result=mysqli_query($link,$sql);
  4. $i=0;
  5. if (mysqli_num_rows($result)==0) {
  6. echo "空空如也";
  7. }
  8. while ($rows=mysqli_fetch_assoc($result))
  9. {
  10. 这里显示数据
  11. }

4.8 join.php

注册界面,没账号,先注册。

  1. <?php
  2. require_once("link.php");
  3. if (isset($_POST["user"])){
  4. // $link=mysqli_connect("localhost","root","123456","findlost");
  5. $link=create_connect("findlost");
  6. if(!$link)
  7. echo "<script>alert('连接失败');history.back();</script>";
  8. else
  9. {
  10. $user=$_POST["user"];
  11. $sql="SELECT * FROM `user` WHERE account='$user'";
  12. $result=mysqli_query($link,$sql);
  13. if (mysqli_num_rows($result)) {
  14. echo "<script>alert('该用户已经存在');history.back();</script>";
  15. }
  16. else
  17. {
  18. $password=$_POST["password"];
  19. $sql2="INSERT INTO user (`account`,`password`) VALUES ('$user','$password')";
  20. $res=mysqli_query($link,$sql2);
  21. if(!$res)
  22. {
  23. echo "<script>alert('注册失败');history.back();</script>";
  24. }
  25. else
  26. {
  27. setcookie("user",$user);
  28. echo "<script>alert('注册成功');window.location.href='index.php';</script>";
  29. }
  30. }
  31. }
  32. }

4.9 addmessage.php

发布消息的后端程序,用于把用户的数据写入到数据库,并跳转到消息界面。

  1. $name=$_POST["name"];
  2. $attribute=$_POST["attribute"];
  3. $describes=$_POST["describes"];
  4. $findaddress=$_POST["findaddress"];
  5. $phone=$_POST["phone"];
  6. $class=$_POST["class"];
  7. $finder=$_COOKIE["user"];
  8. $photo="user.png";
  9. $sendtime=date("Y-m-d H:i:s");
  10. $sql="INSERT INTO `findpeople`(`name`, `attribute`, `describes`, `findaddress`, `sendtime`, `phone`, `finder`, `photo`, `class`) VALUES ('".$name."','".$attribute."','".$describes."','".$findaddress."','".$sendtime."','".$phone."','".$finder."','".$photo."','".$class."')";

五、程序的过程展示

5.1 程序运行过程展示

程序登陆界面

程序主界面(广场界面)

个人中心界面

发布“找失物“消息界面:

发布“找失主“消息界面:

消息详细信息界面:

消息分类选择界面:

时间跨度选择

拾失地点选择

上传的附件 cloud_download 基于PHP实现的失物招领系统.7z ( 409.37kb, 220次下载 )
error_outline 下载需要13点积分

keyboard_arrow_left上一篇 : 基于Android Studio开发的笔记APP 基于php的失物招领程序的设计与实现 : 下一篇keyboard_arrow_right



光光
2019-11-18 12:38:19
和GV和
摇曳的小村庄
2020-01-02 14:47:23
数据库不全吧!显示连接失败 怎么处理?
摇曳的小村庄
2020-01-02 14:59:03
可以了
zhengjz
2020-01-03 17:01:17
感谢分享
奶子荣
2020-06-22 19:57:46
有文档说明吗
黄思怡
2020-06-28 10:12:05
为什么会乱码

发送私信

人生百年,转眼成空。幸福靠的不是缘分,而是珍惜

7
文章数
8
评论数
最近文章
eject