失物招领管理系统
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
********大学课程设计说明书
姓名:学号:
学院:*********
专业年级:
课程:
设计题目:
指导教师:
2010年10月
摘要
《失物招领系统》是鉴于现今我国现状,为了帮助更多的人更加方便快捷得找回他们丢失的物品而设立的一个平台。
在这个网络日益发展的时代,网上寻物成为最简单方便的方式,只需要坐在家里就可以清清楚楚地知道自己丢失物品的情况。
基于目前国内该系统也是初步投入使用,在功能和应用方面还有待完善,我们加入自己的新点子,这个系统在以后应该会得到广泛的应用并日臻完善。
该项目的主要用户包括一些学校,政府机关和大型企业等。
为更好的实现该系统的相关功能,用户可以采用一个独立的数据库实现小范围内的实施该系统,例如学校或者企业等;也可以通过Internet的连接在网页上实施该系统,例如县市级政府机关等。
这是一个比较小型的系统,其开发成本不会很高,预算合理,价格低廉。
关键字:失物招领运行环境服务接口设计信息
目录
1需求分析 (4)
1.1 编写目的 (4)
1.2 背景 (4)
2 概要设计 (5)
2.1 系统功能 (5)
2.1.1 功能概述 (5)
2.1.2 管理端子功能模块 (8)
2.1.3 用户端子功能模块 (12)
2.2 用户业务流程图 (15)
2.2.1 总体业务流图 (15)
2.3 用户业务数据流图 (16)
2.3.1 登录数据流图 (16)
2.3.1 查询数据流图 (17)
3 数据描述 (17)
3.1 数据库描述 (17)
3.2 数据词典 (18)
4 用户界面设计及代码实现 (19)
5 参考资料 (28)
1 需求分析
1.1 编写目的
该系统是关于用户对于失物招领管理系统的功能和性能的要求,重点描述了失物招领系统的功能需求,是概要设计阶段的重要输入。
本文档的预期读者是:
➢设计人员;
➢开发人员;
➢项目管理人员;
➢测试人员;
➢用户;
1.2 背景
为了方便失主寻找丢失物品、拾主归还捡拾物品和减轻失物招领中心的管理员的工作负担,以及发扬拾金不昧的美好品德和提高中国人民的道德水平,我们开发了失物招领管理系统。
失主可以通过网络进入到本系统,查询自己丢失的物品是否已被好心人拾到并交给了招领中心和对好心人的感谢等;管理员可通过本系统对失物信息、报失信息、留言信息等方便的进行管理。
当今社会,当失主丢失物品后往往苦于寻找,要不是得登报,就得到处张贴寻物启事。
同时,拾主捡到物品若希望归还,也是麻烦重重。
最重要的是,现在我国正努力建设和谐社会,政府重视城镇居民道德素质的提高,所以弘扬拾金不昧的优秀传统是政府义不容辞的一项责任。
虽然现在很多学校已有失物招领中心,可是这些中心在记录失物等的信息时全部都是用笔纸记录的。
当失物招领中心的记录很多时,查询起来会耗费大量的时间,同时失主必须到失物招领中心才能报失自己丢失的物品或者确认自己丢失的东西是否保存在失物招领中心。
因此,开发失物招领管理系统是一件迫在眉睫的事情,并且该系统是基于网络的,失主可以在网络上查询和报失以及确认。
这个系统可以在方便管理人员和失主的同时提高我国人民的道德素质,使我国人民处于更和谐的社会。
2 概要设计
2.1 系统功能
2.1.1 功能概述
以下四个IPO表逐项定量和定性地对系统的功能需求进行描述:
表一失物管理模块的IPO表
表二报失管理模块的IPO表
表三信息公布管理模块的IPO表
系统总功能模块划分图:
2.1.2管理端子功能模块
管理端子系统主要是给失物招领中心管理员提供的功能,它分为失物信息管理报失信息管理、、信息公布管理等部分,管理员须通过安全认证后方能登录,实现相应功能。
下图为它的用例图。
登录管理
用户管理
报失信息管理
失物信息管理
信息公布管理
管理员
失物管理的功能用例图
管理端的这些用例描述如下:
登录管理:登录管理负责管理端的登录,管理端的人员(管理员)登录到管理端必须经过登录界面,输入自己的用户名和密码,然后系统判断这个用户的权限,实现其功能。
报失信息管理:失者向失物招领中心提供报失信息,管理者进行报失物品信息添加,输入报失物品名称、特点、丢失地点、时间、报失人信息(姓名、联系方式)、报失时间(以天计)。
如果失物被领走,则管理员进行报失物品信息的删除。
如果报失信息时间超过60天,则系统自动删除报失信息。
失者也可自行对报失物品信息进行添加。
失物信息管理:拾者向失物招领中心提供失物信息,管理员登录到系统对失物信息进行添加,输入失物的名称、特点、捡拾地点、时间、领取状态(置为未领取)、捡拾人信息(姓名及联系方式)、对应的存储地点及存储时间(以天计)。
若失物被领取,则管理员对失物信息进行修改将领取状态置为已领取。
若存储时间超过30,则系统对这些信息进行删除。
信息公布管理:信息公布管理是对失物招领信息和报失物品信息进行部分公开(既将信息进行输出)和用户可在留言板进行留言。
输出信息为失物的名称、捡拾地点、时间、捡拾人姓名、逾期失物的处理方式、报失物品名称、报失人信息(姓名和联系方式)及用户留言。
用户同时也可进行普通查询和高级检索。
普通查询显示名称相同的物品的信息;高级检索显示名称相同、丢失地点范围之内的物品的信息。
用户管理:用户管理由系统管理员增加或删除用户,编辑用户名、用户密码。
修改用户权限,使不同的人(管理员)进入系统主界面使用系统的功能。
✓登录管理
登录到管理端的所有人都需要通过登录界面进入管理界面。
在登录界面
输入用户名和密码,系统判断用户名和密码的正确性,然后登录到此系
统可进行相应的操作。
下图为它的活动图。
登录管理活动
✓报失信息管理:
报失信息管理主要完成报失信息的添加、修改和删除等维护功能。
用例描述:报失信息管理;
执行者:管理员;
前置条件:管理员已登录系统;
后置条件:如果信息维护成功,则数据库中的报失信息库随之变化,此时用户可以对报失信息进行查询;
基本路径:
a)进入报失信息管理界面,首先展示已有的报失信息;
b)点击每项信息可以详细浏览报失物品的信息,同时也可对信息进行
修改;
c)添加信息时,输入报失物品名称、特点、丢失地点、时间、报失人
信息(姓名、联系方式)、报失时间(以天计);
d)可删除选择的信息。
✓失物信息管理:
失物信息管理主要是完成捡拾物品信息的添加、修改和删除等维护功能。
用例描述:失物信息管理;
执行者:管理员;
前置条件:管理员登录到系统;
后置条件:如果信息维护成功,则数据库中的失物信息库随之变化,此时用户可以对失物信息进行查询;
基本路径:
a)进入失物信息管理界面,首先展示已有的失物信息;
b)点击每项信息可以详细浏览失物的信息,同时也可对信息进行修改;
c)添加信息时,输入失物信息进行添加,输入失物的名称、特点、捡
拾地点、时间、领取状态(置为未领取)、捡拾人信息(姓名及联系
方式)、对应的存储地点及存储时间(以天计);
d)可删除选择的信息。
✓信息公布管理:
信息公布管理主要是输出部分失物信息、查询(普通查询和高级检索)、用户留言等功能。
部分失物信息信息发布后,用户可通过网络可以看到失物的名称(pick_name)、捡拾地点(pick_place)、时间(pick_time)、捡拾人姓名(name)
用例描述:信息公布管理;
执行者:管理员
前置条件:管理员已登录系统;
后置条件:如果信息发布成功后,则数据库中的信息随之变化,失者可通过网络看到部分失物信息,也可对这些失物进行查询以及在留言板上留言。
基本路径:
a)进入失物管理界面对失物信息进行管理;
b)系统自动调用数据库的信息,显示相关信息;
c)管理员可点击某项信息(包括留言信息)对其进行增删改;
d)提供信息查询功能。
✓用户管理:
管理员可以进行权限设置,在用户管理界面中对用户进行添加、删除、
修改、查询。
用例描述:用户管理;
执行者:管理员;
前置条件:管理员已进入登录系统;
后置条件:如果用户信息维护完成,则用户的相应信息将记录到数据库
中。
基本路径:
a)进入用户管理界面,显示目前的系统用户;
b)点击不同的用户,可显示这个用户的信息;
c)可增加用户,也可删除用户。
2.1.3 用户端子功能模块
失者报失键入报失物品名称、特点、丢失地点、时间、报失人信息(姓名、联系方式)等。
失者可以看到部分失物信息,可以对其进行查询(普通查询和高级检索)。
用户端的功能主要是报失(报失物品的输入)、信息的查询、留言等。
此下为它的用例图。
用户端的功能用例图
用户端用例描述如下:
报失:失者键入报失物品名称、特点、丢失地点、时间、报失人信息(姓名、联系方式)。
查询:普通查询和高级检索,普通查询显示名称相同的物品的信息;高级检索显示名称相同、丢失地点范围之内的物品的信息。
留言:在留言板上输入留言信息。
✓报失
系统提供失者报失信息栏,对报失信息进行键入。
具体描述如下。
用例描述:报失
执行者:失者;
前置条件:失者已进入系统;
后置条件:可对物品进行报失。
基本路径:
a)失者登录到系统,显示部分失物信息、留言信息等;
b)选择报失栏,填写报失信息;
✓查询
查询分为普通查询和高级检索,方便失者对物品信息的查询。
具体描述
如下。
用例描述:查询;
执行者:失者;
前置条件:失者已进入系统;
后置条件:对部分物品信息进行查询。
基本路径:
a)失者登录到系统,显示部分失物信息、留言信息等;
b)选择查询项目,浏览相关信息。
✓留言
失者在留言板上进行留言。
具体用例描述如下。
用例描述:留言;
执行者:失者;
前置条件:失者已进入系统;
后置条件:在留言板上进行留言。
基本路径:
a)失者登录到系统,显示部分失物信息、留言信息等;
b)打开留言板输入留言信息。
2.2用户业务流程图
2.2.1 总体业务流图
2.3 用户业务数据流图
2.3.1 登录数据流图
2.3.2 查询数据流图
3 数据描述
3.1 数据库描述
本系统采用SQL-Sever数据库设计表,数据库名称为swzl.mdb,根据功能模块的划分及相关信息的分类可建3个表,分别为用户信息表(user_info)、失物招领信息表(pick)、失物报失信息表(lost)、留言信息表(leaveword)。
3.2 数据字典
根据系统功能及页面显示等相关信息的描述,在数据库swzl.mdb 中创建如下表:
表 3-1 用户信息表(user_info)
表3-4 留言信息表(leaveword)
4 用户界面及代码实现
1、数据库的实现
package com.yxq.toolsbean;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
public class DB {
private Connection con = null;
private Statement stm=null;
/* 通过构造方法加载数据库驱动*/
public DB(){
try {
Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");
} catch (Exception e) {
e.printStackTrace();
System.out.println("加载数据库驱动失败!");
}
}
/* 创建数据库连接*/
public void createCon() {
try {
con = DriverManager.getConnection("jdbc:odbc:swzl");
} catch (Exception e) {
e.printStackTrace();
System.out.println("获取数据库连接失败!");
}
}
/* 获取Statement对象*/
public void getStm(){
createCon();
try {
stm=con.createStatement();
} catch (SQLException e) {
e.printStackTrace();
System.out.println("创建Statement对象失败!");
}
}
/**
* @功能对数据库的增加、修改和删除的操作
* @参数sql为要执行的SQL语句
* @返回值boolean型值
*/
public boolean executeUpdate(String sql) {
System.out.println(sql);
boolean mark=false;
try {
getStm();
int iCount = stm.executeUpdate(sql);
if(iCount>0)
mark=true;
else
mark=false;
} catch (Exception e) {
e.printStackTrace();
mark=false;
}
return mark;
}
/* 查询数据库*/
public ResultSet executeQuery(String sql) {
ResultSet rs=null;
try {
getStm();
try {
rs = stm.executeQuery(sql);
} catch (Exception e) {
e.printStackTrace();
System.out.println("查询数据库失败!");
}
} catch (Exception e) {
e.printStackTrace();
}
return rs;
}
/* 关闭数据库的操作*/
public void closed() {
if(stm!=null)
try {
stm.close();
} catch (SQLException e) {
e.printStackTrace();
System.out.println("关闭stm对象失败!");
}
if(con!=null)
try {
con.close();
} catch (SQLException e) {
e.printStackTrace();
System.out.println("关闭con对象失败!");
}
}
}
2、用户登录检测
用户登录窗口
登录检测代码如下:
<%
var uname,pword
uname=request.form("username")
pword=request.form("password")
set rrs=server.createobject("adodb.recordset")
connec = "DBQ=" + server.mappath("database/swzl.mdb") + ";DefaultDir=;DRIVER={Microsoft Access Driver (*.mdb)};"
sql="select * from user_info where Name='"&uname&"'"
rrs.open sql,connec,1,1
if rrs.eof then
response.write "<script>alert('用户名错误,请核对你的用户名重新登陆');history.back();</script>"
response.end
else
if rrs("Password")<>pword then
response.write "<script>alert('密码错误,请核对你的密码重新登陆,如忘记密码请点击确认在返回页面上点击找回密码');history.back();</script>"
response.end
end if
session("Name")=uname
response.write"<script>alert('登录成功');location.href='index.jsp'</script>"
end if
%>
3、失物查询(research.jsp)
失物信息查询:输入要查询的失物的信息,在数据库中检索,查询相关信息并显示结果。
<%
String op = request.getParameter("op");
if(op!=null&&op.equals("search")){
String vpick_name=request.getParameter("pick_name");
String vpick_place=request.getParameter("pick_place");
String vpick_time=request.getParameter("pick_time");
String s_ql="select * from pick where 1=1";
if(!vpick_name.equals(""))
s_ql+=" and pick_name like'%"+vpick_name+"%' ";
if(!vpick_place.equals(""))
s_ql+=" and pick_place like'%"+vpick_place+"%' ";
if(!vpick_time.equals(""))
s_ql+=" and pick_time like'%"+vpick_time+"%' ";
session.setAttribute("s_ql",s_ql);
response.sendRedirect("picklist.jsp");
}
%>
4、失物查询结果显示(picklist.jsp)
5、失物报失(lost.jsp)
失物报失信息的填写:只需将填入的信息更新到数据库lost表中即可,该处代码与查询时的代码类似,只是这个加个数据库的更新。
6、留言(leaveword.jsp)
用户留言:在网页上留下自己需要找寻的物品的信息或者留下自己捡拾到的物品的信息。
实现代码如下:
<%
request.setCharacterEncoding("GB2312");
Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");
Connection conn = DriverManager.getConnection("jdbc:odbc:swzl","sa","");
Statement
stmt=conn.createStatement(ResultSet.TYPE_SCROLL_INSENSITIVE,ResultSet.CONCUR_RE AD_ONLY);
ResultSet rs=null;
String v_userid=(String)session.getAttribute("User_ID");
int i_totalnum=0; //总记录数
int i_pagenum=5; //一页显示的记录数码
int i_totalpage=0; //总页数
int i_currentpage=1; //当前页
String v_createid="";
String v_subject="";
String v_date1="";
String v_context="";
String v_employeeid="";
String v_date2="";
String v_advice="";
rs=stmt.executeQuery("select count(*) from leaveword ");
rs.next();
i_totalnum=rs.getInt(1);
i_totalpage=i_totalnum/i_pagenum;
if(i_totalnum%i_pagenum!=0)
i_totalpage++;
String op = request.getParameter("op");
if(op!=null&&op.equals("show")){
String v_currentpage = request.getParameter("currentpage");
i_currentpage=Integer.parseInt(v_currentpage);
}
if(op!=null&&op.equals("previous")){
String v_currentpage = request.getParameter("currentpage");
i_currentpage=Integer.parseInt(v_currentpage)-1;
if(op!=null&&op.equals("next")){
String s_currentpage = request.getParameter("currentpage");
i_currentpage=Integer.parseInt(v_currentpage)+1;
}
if(op!=null&&op.equals("firstpage")){
i_currentpage=1;
}
if(op!=null&&op.equals("lastpage")){
i_currentpage=i_totalpage;
}
%>
<div align="right">
第<%=i_currentpage%>页
<% if(i_currentpage>1){%>
<a href="leaveword.jsp?op=firstpage">首页</a>
<% }else{%>首页<%}%>
<% if(i_currentpage>1){%>
<a
href="leaveword.jsp?op=previous¤tpage=<%=i_currentpage%>">上一页</a> <% }else{%>上一页<%}%>
<% if(i_currentpage!=i_totalpage){%>
<a href="leaveword.jsp?op=next¤tpage=<%=i_currentpage%>">下一页</a>
<% }else{%>下一页<%}%>
<% if(i_currentpage!=i_totalpage){%>
<a href="leaveword.jsp?op=lastpage">末页</a>
<% }else{%>末页<%}%>
</div>
rs=stmt.executeQuery("select * from notes order by id desc ");
if(i_currentpage>i_totalpage)
i_currentpage=i_totalpage;
int i_position=(i_currentpage-1)*i_pagenum;
if(i_position==0)
rs.beforeFirst();
else
rs.absolute(i_position);
for(int i=0;i<i_pagenum;i++){
if(!rs.isLast()){
rs.next();
v_createid=(rs.getString("userid")!=null?rs.getString("userid"):"");
v_date1=(rs.getString("date")!=null?rs.getString("date").substring(0,10):"");
v_context=(rs.getString("context")!=null?rs.getString("context"):"");
v_advice=(rs.getString("advice")!=null?rs.getString("advice"):"[请等待工作人员处理]");
%>
将留言写入数据库
代码如下:
<%
request.setCharacterEncoding("GB2312");
Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");
Connection conn = DriverManager.getConnection("jdbc:odbc:swzl","sa","");
Statement
stmt=conn.createStatement(ResultSet.TYPE_SCROLL_INSENSITIVE,ResultSet.CONCUR_RE AD_ONLY);
ResultSet rs=null;
String v_userid=request.getParameter("User_ID");
String v_context=request.getParameter("context");
String s_sql="insert into notes(User_ID,date,context) "+
"values('"+s_userid+"',getdate(),'"+s_context+"')" ;
stmt.executeUpdate(s_sql);
response.sendRedirect("leaveword.jsp");
%>
5、参考文献
[1] 郭珍, 王国辉. JSP程序设计教程. 北京:人民邮电出版社. 2008
[2] 刘晓华, 张健. JSP应用开发详解. 北京:电子工业出版社. 2007
[3] 耿祥义. JSP基础教程. 北京:清华大学出版社. 2007
[4] 樊月华、刘雪涛、刘洪发,web技术应用基础,清华大学出版社,2010
[5] 申吉红、廖雪峰、余健,jsp课程设计案例精编,清华大学出版社,2007
[6] 刘晓华、张健,JSP应用开发详解,电子工业出版社,2007
[7] Vivek Chopra,Jon Eaves,Rupert Jones,JSP高级程序设计,张文静、林琪译,人民邮电出版社,2006
[8] 陆惠恩,软件工程实践教程,机械工业出版社,2006。