资源描述
学 号:
2
课 程 设 计
题 目
校园导游征询管理系统软件设计
学 院
计算机科学与技术学院
专 业
计算机科学与技术
班 级
计算机0804班
姓 名
王成鹏
指引教师
杜 薇
年
1
月
9
日
课程设计任务书
学生姓名: 王 成 鹏 专业班级: 计算机0804
指引教师: 杜 薇 工作单位: 计算机学院
题目:校园导游征询管理系统软件设计
初始条件:
1.预备内容:数据构造(图),软件工程,面向对象程序设计,数据库技术,编译原理,可视化编程
2.实践准备:掌握一种计算机高档语言等有关使用。
规定完毕重要任务:
基本功能规定:
(1)设计你所在学校校园平面图,所含景点不少于10个。将校内各景点数据(景点名称、代号、简介等信息)和图片以图构造表达并保存于数据库。
(2)为来访客人提供任意景点有关信息查询。
(3)为来访客人提供任意景点问路查询。
(4)测试数据:自定。
(5)涉及技术工具:软件工程技术、数据库技术、UML工具、Java语言或C#语言等
设计报告内容应阐明:
1. 课程设计目与功能;
2. 需求分析,数据构造或模块阐明(功能与框图);
3. 源程序重要某些;
4. 运营成果与运营状况分析;
5. 自我评价与总结
时间安排:
本学期第17-19周:
1. 查阅、消化资料,系统调查 2天
2. 系统分析(采用UML工具) 3天
3. 总体设计,实行筹划(采用UML工具) 3天
4. 系统开发与实现(用指定语言工具) 5天
5. 撰写报告 2天
指引教师签名: 12月25日
系主任(或责任教师)签名: 年 月 日
校园导游征询管理系统
1. 课程设计目与功能
1)设计目:
为游客设计一种校园导游征询管理系统软件,协助游客较好地理解校园景点位置,为观光带来以便。作为导游就是批示景点之间距离和方向,让游客很清晰所处位置,并且可以不久地找到方向与目地。软件是为了简朴、易用而设计。
2)基本功能规定:
1.设计你所在学校校园平面图,所含景点不少于10个。将校内各景点数据(景点名称、代号、简介等信息)和图片以图构造表达并保存于数据库。
2.为来访客人提供任意景点有关信息查询。
3.为来访客人提供任意景点问路查询。
4.测试数据:自定。
5.涉及技术工具:软件工程技术、数据库技术、UML工具、Java语言或C#语言等
3)初始条件:
1.预备内容:数据构造(图),软件工程,面向对象程序设计,数据库技术,编译原理,可视化编程
2.实践准备:掌握一种计算机高档语言等有关使用。
2. 需求分析,数据构造或模块阐明(功能与框图)
1) 拟定问题
设计一种学校校园平面图,所含景点不少于10个。将校内各景点数据(景点名称、代号、简介等信息)和图片以图构造表达并保存于数据库中。为来访客人提供任意景点有关信息查询。为来访客人提供任意景点问路查询。
一种学校中景点不少于10个,每个景点均有某些有关信息,还要有图片来形象地表达景点。给出一种平面图,表达各个景点位置和景点之间距离。并且把景点以及跟景点有关信息保存于数据库中。
运用这个软件,游客可以查看到校园平面图以及所有景点。从平面图中可以看出景点位置、景点名称和景点之间距离、方向等信息。还附于所有景点名称和代码。
运用这个软件,游客可以查找每个景点有关信息,如:填入景点代码或名称,显示景点图片和信息等。
运用这个软件,游客可以查找景点和景点间最短距离和途径。如:输入起点(景点代号或名称)和终点(景点代号或名称),显示两景点图片和景点间最短距离和途径。
2) 需求分析
对于需求分析:
从导游(管理员)角度出发,重要可以涉及几种子功能:校园平面图显示及所有景点、景点查询、途径查询、添加景点、删除景点、修改景点信息等。
从来访客人角度出发,重要可以涉及子功能有:校园平面图显示及所有景点、景点查询、途径查询等。
如下为子功能用例图,并对它们进行详细分析:
l 校园平面图显示级所有景点:对导游和来访客人都可见,如:校园平面图、所有景点代号和名称。
显示拓补图
导游或来访客人
l 景点查询:导游和来访客人都可以输入景点代号或名称进行查询景点有关信息(图片、简介等)。
景点查询
导游或来访客人
l 途径查询:导游和来访客人输入起点(景点代号或名称)和终点(景点代号或名称),查询最短距离和途径。
路经查询
导游或来访客人
l 添加景点:只有管理员可以操作,为校园添加新景点信息到数据库中。
添加景点
管理员
l 删除景点:只有管理员可以操作,从数据库中删除旧景点信息。
删除景点
管理员
l 修改景点信息:只有管理员可以操作,在数据库中修改原有景点信息。
修改景点信息
管理员
3) 数据构造
本实验中用到数据构造:图
ADT Graph {
数据对象 V:景点顶点集
数据关系R:
R = {VR}
VR = {<v,w>| v,w∈V 且 P(v,w),<v,w>表达从v到w弧,
谓词P(v,w)定义了弧<v,w>意义或信息}
基本操作 P:
CreateGraph(&G,V,VR);
初始条件:V是图顶点集,VR是图中弧集合。
操作成果:按V和VR定义构造图G。
DestroyGraph(&G);
初始条件:图G存在。
操作成果:销毁图G。
ShortestPath(&G,v1,v2);
初始条件:图G存在,给定起点v1和终点v2。
操作成果:返回起点v1和终点v2最短距离和途径。
}
4) 框图设计
导游顾客框图设计:
主界面
退出
修改景点信息
删除景点
添加景点
路经查询
景点查询
拓补图
修改
删除
添加
查询
查询
返回
返回
返回
返回
返回
来访客人框架设计:(添加景点、删除景点和修改景点信息这三项禁用)
主界面
退出
景点查询
拓补图
路经查询
查询
查询
返回
返回
5) 模块阐明
运营环境阐明:PC,java sdk,SQL Server ,eclipse
分块阐明(某些):
public class ViewDB{
定义驱动;
定义数据库;
定义顾客名、密码;
加载驱动;
链接数据库;
释放资源、关闭链接;
}
public class SerFrame{
创立控件;
对控件添加监听设立;
控件放入容器;
窗口加载容器;
监听函数实现;
}
public class ViewQuery{
创立控件;
对控件添加监听设立;
控件放入容器;
窗口加载容器;
监听函数实现;
调用class ViewDB ,实现链接数据库,进行数据库操作。
}
数据库模块阐明:
3. 源程序重要某些
ViewDB.java
package v_sql;
import java.sql.*;
public class ViewDB {
//定义驱动、数据库名、顾客名、密码
public static final String driver=
"com.microsoft.sqlserver.jdbc.SQLServerDriver";
public static final String url=
"jdbc:sqlserver://localhost:1433;Databasename=view";
public static final String user="sa";
public static final String password="12345";
public static Connection con = null;
public static ResultSet rs = null;
public static Statement st = null;
public void initDB(){
try{
Class.forName(driver);
}catch(java.lang.ClassNotFoundException e){
System.out.println("Can't load Driver");
}
try{
con=DriverManager.getConnection(url,user,password);
st=con.createStatement();
}catch(SQLException ex){
System.out.print("Query is wrong"+ex.getMessage());
}
}
public static void main(String[] args){
ViewDB vdb = new ViewDB();
vdb.initDB();
String sql = "select v_name from tb_view";
try{
rs=st.executeQuery(sql);
if(rs!=null)
{
ResultSetMetaData rsmd = rs.getMetaData();
int countCols = rsmd.getColumnCount();
for(int i=1;i<=countCols;i++)
{
if(i>1) System.out.print(";");
System.out.print(rsmd.getColumnLabel(i));
}
System.out.print("");
while(rs.next())
{
System.out.print(rs.getString("v_name"));
}
}
}catch(SQLException ex){
System.out.print("Query is wrong"+ex.getMessage());
}
finally{
try{
if(rs!=null) rs.close();
if(st!=null) st.close();
if(con!=null) con.close();
}catch(SQLException error){
error.printStackTrace();
}
}
}
}
RoadQuery.java
package v_Frame;
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import .URL;
import java.sql.ResultSetMetaData;
import java.sql.SQLException;
import java.sql.*;
import v_sql.ViewDB;
public class RoadQuery extends JFrame implements ActionListener{
……
……
……
加载容器与监听
public void actionPerformed(ActionEvent e){
if(e.getActionCommand().equals("查询")){
vdb = new ViewDB();
vdb.initDB();
String sql_pic1 = "select v_name,v_picture from tb_view where v_id='"+rq_text1.getText()
+"' or v_name='"+rq_text1.getText()+"'";
String sql_pic2 = "select v_name,v_picture from tb_view where v_id='"+rq_text2.getText()
+"' or v_name='"+rq_text2.getText()+"'";
String origin = new String();
String destination = new String();
int ori=0;
int des=0;
try{
vdb.rs = vdb.st.executeQuery(sql_pic1);
if(vdb.rs!=null)
{
while(vdb.rs.next())
{
sql_pic1=vdb.rs.getString("v_picture");
origin = vdb.rs.getString("v_name");
}
}
}catch(SQLException ex){
System.out.print("Query is wrong"+ex.getMessage());
}
try{
vdb.rs = vdb.st.executeQuery(sql_pic2);
if(vdb.rs!=null)
{
while(vdb.rs.next())
{
sql_pic2=vdb.rs.getString("v_picture");
destination = vdb.rs.getString("v_name");
}
}
}catch(SQLException ex){
System.out.print("Query is wrong"+ex.getMessage());
}
imgUrl = RoadQuery.class.getResource(sql_pic1);// 获取图片资源途径
img = Toolkit.getDefaultToolkit().getImage(imgUrl);// 获取图像资源
imagePanel1 = new DrawImagePanel(); // 创立图像面板对象
imagePanel1.setBounds(40,100,150,150);
content.add(imagePanel1);
imgUrl = RoadQuery.class.getResource(sql_pic2);// 获取图片资源途径
img = Toolkit.getDefaultToolkit().getImage(imgUrl);// 获取图像资源
imagePanel2 = new DrawImagePanel(); // 创立图像面板对象
imagePanel2.setBounds(300,100,150,150);
content.add(imagePanel2);
repaint();
String sql = "select v_name from tb_view order by v_id";
String str[] = new String[14];//{"","","","","","","","","","","","","",""};
int s = 0;
try{
vdb.rs = vdb.st.executeQuery(sql);
if(vdb.rs!=null)
{
while(vdb.rs.next())
{
sql=vdb.rs.getString("v_name");
str[s++]=sql;
}
}
}catch(SQLException ex){
System.out.print("Query is wrong"+ex.getMessage());
}
int path[][]= new int [s][s];
for(int i=0;i<s;i++)
{
for(int j=0;j<s;j++)
{
path[i][j]=-1;
}
if(origin.equals(str[i])) ori=i;
if(destination.equals(str[i])) des=i;
}
sql = "select w_name1,w_name2,w_length from tb_way";
try{
vdb.rs = vdb.st.executeQuery(sql);
if(vdb.rs!=null)
{
int i=0,j=0;
String name1 = new String();
String name2 = new String();
while(vdb.rs.next())
{
name1 = vdb.rs.getString("w_name1");
name2 = vdb.rs.getString("w_name2");
for(int k=0;k<s;k++)
{
if(str[k].equals(name1)) i=k;
if(str[k].equals(name2)) j=k;
}
path[i][j]=Integer.parseInt(vdb.rs.getString("w_length"));
path[j][i]=path[i][j];
}
}
}catch(SQLException ex){
System.out.print("Query is wrong"+ex.getMessage());
}
int shortestPaht[] = ShortestPath.getShortPath(path,ori,des);
for (int i = 0;i < shortestPaht.length;i++) {
System.out.print("节点 "+(ori+1)+" 到节点 " + (i + 1) + " 最短距离是"
+ shortestPaht[i] + "\t");
System.out.println("途径为:" + ShortestPath.getSPath(i));
if (ShortestPath.getKeepPath().equals(ShortestPath.getSPath(i)))
rq_showroad.setText("节点"+(ori+1)+"到节点"+(des+1)+"最短距离是"
+ shortestPaht[i] + "\n途径为:"+ShortestPath.getKeepPath());
}
System.out.println(ShortestPath.getKeepPath());
}
else if (e.getActionCommand().equals("返回")){
this.setVisible(false);
}
}
}
ShortestPath.java
package v_Frame;
import java.util.LinkedList;
import java.util.List;
/**
* 单源最短途径问题
*
* @author Sailor
*
*/
class ShortestPath {
private static String showPath[] = {"","","","","","","","","","","","","",""};
private static String keeppath = "";
// 返回图最短途径
public static int[] getShortPath(int path[][],int origin,int destination) {
LinkedList<Integer> savePath = new LinkedList<Integer>();// 用于保存已添加进来节点
int mark = 1;
int shortestPath[] = new int[path.length];
for (int i = 0;i < shortestPath.length;i++) {
shortestPath[i] = -1;
}
savePath.add(getsPath(origin));
//savePath.add(new Integer(0)); //拟定源点
if (savePath.size() == 1) {
int num = savePath.getLast().intValue();
int minIndex = 0;
for (int j = 0;j < shortestPath.length;j++) {
shortestPath[j] = path[num][j];
if (shortestPath[j] >= 0) {
showPath[j] = (origin+1) + "-->" + (j + 1);
if(destination==j) keeppath = showPath[j];
} else {
showPath[j] = "无通路";
if(destination==j) keeppath = showPath[j];
}
}
minIndex = getAddIndex(savePath,shortestPath);
savePath.add(minIndex);
}
if (savePath.size() > 1) {
while (mark < shortestPath.length+1) {
// savePath.size()<lenth+1 当有不可到达点是将要浮现死循环
int num = savePath.getLast().intValue();
int minIndex = 0;
for (int j = 0;j < path.length;j++) {
if (path[num][j] >= 0) {
if (shortestPath[j] < 0) {
shortestPath[j] = path[num][j] + shortestPath[num];
showPath[j] = showPath[num] + "-->" + (j + 1);
if(destination==j) keeppath = showPath[j];
} else {
if (shortestPath[num] + path[num][j] < shortestPath[j]) {
shortestPath[j] = shortestPath[num]
+ path[num][j];
showPath[j] = showPath[num] + "-->" + (j + 1);
if(destination==j) keeppath = showPath[j];
}
}
}
}
minIndex = getAddIndex(savePath,shortestPath);
if (minIndex > 0)
savePath.add(minIndex);
mark++;
}
}
return shortestPath;
}
// 获得加入到保存途径节点
public static int getAddIndex(List list,int num[]) {
int index = 0;
for (int i = 0;i < num.length;i++) {
if (!list.contains(new Integer(i))) {
if (num[i] > 0 && index == 0) {
index = i;
}
if (num[i] > 0 && index > 0) {
if (num[i] < num[index])
index = i;
}
}
}
return index;
}
public static String getSPath(int i){
return showPath[i];
}
public static String getKeepPath(){
return keeppath;
}
public static Integer getsPath(int i){
return new Integer(i);
}
}
4. 运营成果与运营状况分析
1) 主窗口
对于主窗口显示格局符合规定,如下:
2) 拓补图
显示了校园拓补图和景点代号和名称。如下:
3) 景点查询
输入景点代号或名称,显示景点图片和简介。如下:
4) 路经查询
输入起点和终点,显示起点和终点景点图片,尚有起点到终点最短距离和途径。如下:
5. 自我评价与总结
通过本次软件综合课程设计,我顺便把原有基本温故了下,并且向新只是扩展了下。学到东西诸多,并且很有用。本次设计用到了,java、数据构造、软件工程、UML设计、数据库等知识。一方面运用java可视化创立窗口框架,保证界面看起来简洁并且易操作。再创立数据库和表,优化表体现形式,易于操作,进行有关查询等。从数据库中提取数据存入暂时数据构造中,进行无向图最短途径操作。本次课设都是个人完毕,觉得受益匪浅。
遗憾是想在其基本上扩展下有关功能,如:运用TCP/IP合同实现服务器端和客户端链接,进行多线程操作,查询等可以同步进行,管理员可以对数据库进行添加景点、删除景点和修改景点信息等操作。但由于时间关系,没有对这些任务进行扩展。
本科生课程设计成绩评估表
班级:计算机0804班 姓名:王成鹏 学号:2
序号
评分项目
满分
实得分
1
学习态度认真、遵守纪律
10
2
设计分析合理性
10
3
设计方案对的性、可行性、创造性
20
4
设计成果对的性
40
5
设计报告规范性
10
6
设计验收
10
总得分/级别
评语:
注:最后成绩以五级分制记。优(90-100分)、良(80-89分)、中(70-79分)、
及格(60-69分)、60分如下为不及格
指引教师签名:
200 年 月 日
展开阅读全文