目录
摘 要 1
Abstract 1
1 绪论 1
1.1 选题背景 1
1.2 国内外发展状况 1
1.3 选题的目的 1
1.4 研究手段及意义 1
2相关技术简介 3
2.1Jsp技术介绍 3
2.2 MyEclipse简介 4
2.3 数据库技术 4
2.3.1 数据库的体系结构 4
2.3.2 数据库管理系统(DBMS) 5
2.3.3 Mysql数据库 5
2.3.4 MySQL特点特性 7
2.3.5 MySQL数据库应用环境 7
2.4 JAVA概述 7
2.5 J2EE技术 7
2.6 B/S结构 8
2.7 Tomcat服务器 10
2.8 Web技术 10
3 系统需求分析 11
3.1 需求分析 11
3.1.1 设计的原则 11
3.1.2 系统设计目标 11
3.2 系统可行性分析 11
3.2.1 经济可行性分析 12
3.2.2技术可行性分析 12
3.3 用户需求 12
3.4 系统功能需求概述 13
3.5 运行环境 13
4 系统概要设计 15
4.1 概要设计的概论 15
4.2 架构设计 15
4.3 系统功能结构图及分析 15
4.3.1 系统功能结构图…………………………………………………………………………………………………15
4.3.2 系统基本功能………………………………………………………………………16
4.4 系统用例图 17
4.4.1 UML用例图简介 17
4.4.2 系统用例图 18
4.5 技术架构 19
4.6 数据库结构设计 19
4.6.1 数据库设计的原则 19
4.6.2 数据库结构分析 19
4.6.3 数据库概念模型 20
4.6.4 部分数据库数据表字段设计 21
5 系统详细设计 24
5.1 系统数据库连接配置 24
5.2 系统流程图的分析设计……………………………………………………………………25
5.3 系统登陆模块实现 26
5.4 前台功能模块设计 27
5.4.1 公交查询设计 27
5.4.2 热门线路功能模块设计 29
5.4.3 网站公告功能模块设计 29
5.4.4 在线提问模块设计 30
5.5 后台功能模块设计 30
6系统测试 33
6.1 程序测试 33
6.2 测试的重要性及目的 33
6.3 测试的步骤 34
6.4 测试的主要内容 34
6.4.1 功能测试 35
6.4.2 可用性测试 37
6.4.3 性能测试 38
6.5 测试结论 38
总结与展望 39
参考文献 40
致 谢 42
3 系统需求分析
3.1 需求分析
软件需求是指用户对目标软件系统在功能、行为、性能、设计约束等方面的期望。通过对应问题及其环境的理解与分析,为问题涉及的信息、功能及系统行为建立模型,将用户需求精确化、完全化,最终形成需求规格说明,这一系列的活动即构成软件开发生命周期的需求分析阶段。
需求分析是介于系统分析和软件设计阶段之间的桥梁。一方面,需求分析以系统规格说明和项目规划作为分析活动的基本出发点,并从软件角度对它们进行检查与调整;另一方面,需求规格说明又是软件设计、实现、测试直至维护的主要基础。良好的分析活动有助于避免或尽早剔除早期错误,从而提高软件生产率,降低开发成本,改进软件质量。
3.1.1 设计的原则
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%
String path = request.getContextPath();
String basePath = request.getScheme() + "://" + request.getServerName() + ":" + request.getServerPort()
+ path + "/";
%>
<%
String menu = (String)request.getAttribute("menu");
%>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<title>我的UI我做主</title>
<link href="<%=path %>/resource/lib/ligerUI/skins/Aqua/css/ligerui-all.css" rel="stylesheet"
type="text/css" />
<link rel="stylesheet" type="text/css" id="mylink" />
<script src="<%=path %>/resource/lib/jquery/jquery-1.9.0.min.js" type="text/javascript"></script>
<script src="<%=path %>/resource/lib/ligerUI/js/ligerui.all.js" type="text/javascript"></script>
<script src="<%=path %>/resource/lib/ligerUI/js/plugins/ligerTab.js"></script>
<script src="<%=path %>/resource/lib/jquery.cookie.js"></script>
<script src="<%=path %>/resource/lib/json2.js"></script>
<script type="text/javascript">
var tab = null;
var accordion = null;
var tree = null;
var tabItems = [];
$(function() {
//布局
$("#layout1").ligerLayout({
leftWidth : 190,
height : '100%',
heightDiff : -34,
space : 4,
onHeightChanged : f_heightChanged
});
var height = $(".l-layout-center").height();
//Tab
$("#framecenter").ligerTab({
height : height,
showSwitchInTab : true,
showSwitch : true,
onAfterAddTabItem : function(tabdata) {
tabItems.push(tabdata);
saveTabStatus();
},
onAfterRemoveTabItem : function(tabid) {
for (var i = 0; i < tabItems.length; i++) {
var o = tabItems[i];
if (o.tabid == tabid) {
tabItems.splice(i, 1);
saveTabStatus();
break;
}
}
},
onReload : function(tabdata) {
var tabid = tabdata.tabid;
addFrameSkinLink(tabid);
}
});
//面板
$("#accordion1").ligerAccordion({
height : height - 24,
speed : null
});
$(".l-link").hover(function() {
$(this).addClass("l-link-over");
}, function() {
$(this).removeClass("l-link-over");
});
//我的菜单
$("#mytree").ligerTree(
{
data :<%=menu%> ,
checkbox : false,
slide : false,
nodeWidth : 120,
attribute : [ 'nodename', 'url' ],
render : function(a) {
if (!a.isnew)
return a.text;
return '+ a.url + '" target="_blank">'
+ a.text + '';
},
onSelect : function(node) {
if (!node.data.url)
return;
if (node.data.isnew) {
return;
}
var tabid = $(node.target).attr("tabid");
if (!tabid) {
tabid = new Date().getTime();
$(node.target).attr("tabid", tabid)
}
f_addTab(tabid, node.data.text, node.data.url);
}
});
function openNew(url) {
var jform = $('#opennew_form');
if (jform.length == 0) {
jform = $('').attr('id', 'opennew_form')
.hide().appendTo('body');
} else {
jform.empty();
}
jform.attr('action', url);
jform.attr('target', '_blank');
jform.trigger('submit');
}
;
tab = liger.get("framecenter");
accordion = liger.get("accordion1");
tree = liger.get("tree1");
$("#pageloading").hide();
css_init();
pages_init();
});
function f_heightChanged(options) {
if (tab)
tab.addHeight(options.diff);
if (accordion && options.middleHeight - 24 > 0)
accordion.setHeight(options.middleHeight - 24);
}
function f_addTab(tabid, text, url) {
tab.addTabItem({
tabid : tabid,
text : text,
url : url,
callback : function() {
//addShowCodeBtn(tabid);
addFrameSkinLink(tabid);
}
});
}
function addShowCodeBtn(tabid) {
var viewSourceBtn = $('<a class="viewsourcelink" href="javascript:void(0)">查看源码</a>');
var jiframe = $("#" + tabid);
viewSourceBtn.insertBefore(jiframe);
viewSourceBtn.click(function() {
showCodeView(jiframe.attr("src"));
}).hover(function() {
viewSourceBtn.addClass("viewsourcelink-over");
}, function() {
viewSourceBtn.removeClass("viewsourcelink-over");
});
}
function showCodeView(src) {
$.ligerDialog.open({
title : '源码预览',
url : '<%=path %>/resource/dotnetdemos/codeView.aspx?src=' + src,
width : $(window).width() * 0.9,
height : $(window).height() * 0.9
});
}
function addFrameSkinLink(tabid) {
var prevHref = getLinkPrevHref(tabid) || "";
var skin = getQueryString("skin");
if (!skin)
return;
skin = skin.toLowerCase();
attachLinkToFrame(tabid, prevHref + skin_links[skin]);
}
var skin_links = {
"aqua" : "<%=path %>/resource/lib/ligerUI/skins/Aqua/css/ligerui-all.css",
"gray" : "<%=path %>/resource/lib/ligerUI/skins/Gray/css/all.css",
"silvery" : "<%=path %>/resource/lib/ligerUI/skins/Silvery/css/style.css",
"gray2014" : "<%=path %>/resource/lib/ligerUI/skins/gray2014/css/all.css"
};
function pages_init() {
var tabJson = $.cookie('liger-home-tab');
if (tabJson) {
var tabitems = JSON2.parse(tabJson);
for (var i = 0; tabitems && tabitems[i]; i++) {
f_addTab(tabitems[i].tabid, tabitems[i].text, tabitems[i].url);
}
}
}
function saveTabStatus() {
$.cookie('liger-home-tab', JSON2.stringify(tabItems));
}
function css_init() {
var css = $("#mylink").get(0), skin = getQueryString("skin");
$("#skinSelect").val(skin);
$("#skinSelect").change(function() {
if (this.value) {
location.href = "<%=path %>/jsp/index.jsp?skin=" + this.value;
} else {
location.href = "<%=path %>/jsp/index.jsp";
}
});
if (!css || !skin)
return;
skin = skin.toLowerCase();
$('body').addClass("body-" + skin);
$(css).attr("href", skin_links[skin]);
}
function getQueryString(name) {
var now_url = document.location.search.slice(1), q_array = now_url
.split('&');
for (var i = 0; i < q_array.length; i++) {
var v_array = q_array[i].split('=');
if (v_array[0] == name) {
return v_array[1];
}
}
return false;
}
function attachLinkToFrame(iframeId, filename) {
if (!window.frames[iframeId])
return;
var head = window.frames[iframeId].document
.getElementsByTagName('head').item(0);
var fileref = window.frames[iframeId].document.createElement("link");
if (!fileref)
return;
fileref.setAttribute("rel", "stylesheet");
fileref.setAttribute("type", "text/css");
fileref.setAttribute("href", filename);
head.appendChild(fileref);
}
function getLinkPrevHref(iframeId) {
if (!window.frames[iframeId])
return;
var head = window.frames[iframeId].document
.getElementsByTagName('head').item(0);
var links = $("link:first", head);
for (var i = 0; links[i]; i++) {
var href = $(links[i]).attr("href");
if (href && href.toLowerCase().indexOf("ligerui") > 0) {
return href.substring(0, href.toLowerCase().indexOf("lib"));
}
}
}
</script>
<style type="text/css">
body, html {
height: 100%;
}
body {
padding: 0px;
margin: 0;
overflow: hidden;
}
.l-link {
display: block;
height: 26px;
line-height: 26px;
padding-left: 10px;
text-decoration: underline;
color: #333;
}
.l-link2 {
text-decoration: underline;
color: white;
margin-left: 2px;
margin-right: 2px;
}
.l-layout-top {
background: #102A49;
color: White;
}
.l-layout-bottom {
background: #E5EDEF;
text-align: center;
}
#pageloading {
position: absolute;
left: 0px;
top: 0px;
background: white url('<%=path %>/resource/loading.gif') no-repeat center;
width: 100%;
height: 100%;
z-index: 99999;
}
.l-link {
display: block;
line-height: 22px;
height: 22px;
padding-left: 16px;
border: 1px solid white;
margin: 4px;
}
.l-link-over {
background: #FFEEAC;
border: 1px solid #DB9F00;
}
.l-winbar {
background: #2B5A76;
height: 30px;
position: absolute;
left: 0px;
bottom: 0px;
width: 100%;
z-index: 99999;
}
.space {
color: #E7E7E7;
}
/* 顶部 */
.l-topmenu {
margin: 0;
padding: 0;
height: 31px;
line-height: 31px;
background: url('<%=path %>/resource/lib/images/top.jpg') repeat-x bottom;
position: relative;
border-top: 1px solid #1D438B;
}
.l-topmenu-logo {
color: #E7E7E7;
padding-left: 35px;
line-height: 26px;
background: url('<%=path %>/resource/lib/images/topicon.gif') no-repeat 10px 5px;
}
.l-topmenu-welcome {
position: absolute;
height: 24px;
line-height: 24px;
right: 30px;
top: 2px;
color: #070A0C;
}
.l-topmenu-welcome a {
color: #E7E7E7;
text-decoration: underline
}
.body-gray2014 #framecenter {
margin-top: 3px;
}
.viewsourcelink {
background: #B3D9F7;
display: block;
position: absolute;
right: 10px;
top: 3px;
padding: 6px 4px;
color: #333;
text-decoration: underline;
}
.viewsourcelink-over {
background: #81C0F2;
}
.l-topmenu-welcome label {
color: white;
}
#skinSelect {
margin-right: 6px;
}
</style>
</head>
<body style="padding: 0px; background: #EAEEF5;">
<div id="pageloading"></div>
<div id="topmenu" class="l-topmenu">
<div class="l-topmenu-logo"><h1>城市公交查询系统 </h1></div>
<%--<div class="l-topmenu-welcome">
<label> 皮肤切换:</label> <select id="skinSelect">
<option value="aqua">默认</option>
<option value="silvery">Silvery</option>
<option value="gray">Gray</option>
<option value="gray2014">Gray2014</option>
</select> </span>
</div>
--%></div>
<div id="layout1"
style="width: 99.2%; margin: 0 auto; margin-top: 4px;">
<div position="left" title="主要菜单" id="accordion1">
<div title="功能列表" class="l-scroll">
<ul id="mytree" style="margin-top: 3px;">
</div>
</div>
<div position="center" id="framecenter">
<div tabid="home" title="我的主页" style="height: 300px">
<iframe frameborder="0" name="home" id="home" src="<%=path %>/jsp/welcome.jsp"></iframe>
</div>
</div>
</div>
<div style="height: 32px; line-height: 32px; text-align: center;">
Copyright © 城市公交查询系统 </div>
<div style="display: none"></div>
</body>
</html>





















