2014-2015学年 第一学期
《数据库系统概论》 课程设计报告
题目: 长途汽车信息管理系统 专业: 计算机科学与技术 班级: 班 姓名: 指导教师: 成绩:
计算机与信息工程系
2014年 10月 12 日
目录
1设计内容及要求 .................................................... 0
设计内容 ........................................................ 0 设计任务及具体要求 .............................................. 0 2原理及分析 ........................................................ 1
需求分析 ........................................................ 1 系统功能简介 .................................................... 1 程序框图 ........................................................ 2 3设计过程和程序代码 ................................................ 5
数据库表格的设计概述 ............................................ 5 数据库表格的实现过程 ............................................ 6 程序的构造方法及其实现 ......................................... 16 数据库与Java程序的链接 ....................................... 23 4设计结果与分析 ................................................... 23
设计结果截图 ................................................... 23 设计结果分析 .................................................. 25 5小结 ............................................................. 25 参考文献........................................................... 25 致谢............................................................... 26 附录:源程序....................................................... 27
1设计内容及要求
设计内容
本次课程设计名称为长途汽车信息管理系统,用户登录后主要实现对线路信息,汽车信息,售票信息,乘客信息进行基本操作的功能。该系统功能主要包括以下几个模块:
(1)充分利用所学过的数据库的相关知识建立长途汽车信息管理系统所需的数据库。
(2)对线路信息(包括出发地、目的地、出发时间、所需时间等)汽车信息(最大载客量、汽车类型、剩余座位等)售票信息(包括售票情况、票价)乘客信息(包括姓名、年龄、性别等)的查询、添加和删除操作。
(3)进行详细的功能设计后,在Java中利用JDBC连接数据库技术对数据库中数据进行操作,并能进行多表之间的链接与查询操作。
设计任务及具体要求
(1)设计任务:
长途汽车信息管理系统运用在汽车站部门的系统工具,方便此系统部门的工作人员的工作,该系统主要根据此部门的特点建立的,是记录和查询汽车站信息的的依据。随着市场经济的不断飞速发展,交通道路环境的不断改善,人们的出行次数不断增多,人口流动频繁,数量不断加大,车站信息量迅猛增长,长途汽车站信息管理系统在人们的日常生活中发挥着越来越重要的作用。本系统实现了汽车线路信息,汽车信息,票务信息的查询和管理,以满足人们的需求。 (2)具体要求:
车站管理员可以在线路信息管理、汽车信息管理等模块对车站线路信息、票价信息、乘客信息等进行管理。管理员首先建立相应模块的信息数据库,输入原始的线路、汽车、车票、乘客信息,当有新数据需要添加或者需要对已有的信息进行修改,删除的时候,管理员就可以进行相应的操作。管理员也可以通过本模
块查询到所有需要查询的线路、汽车、车票、乘客的详细信息。
2原理及分析
需求分析
长途汽车信息管理数据库系统是面向所有汽车的数据管理系统,其目的是使乘车有序化,规范化,简单化,易于车站人员的管理,查询。本系统主要包括以下几个模块:乘客信息、汽车信息、线路以及车票的信息这四个功能模块基本实现设计本系统的目的,从而可以进一步满足车站对乘客乘车管理的要求。长途汽车信息管理系统运用在汽车站和火车站等车站部门的系统工具,方便此系统部门的工作人员的工作,该系统主要根据此部门的特点建立的,是记录和查询汽车站信息的的依据。早期的长途汽车站信息主要是人工记录和人工管理的,不仅不容易记录,而且还不容易保存。随着计算机的不断普及和软件系统的不断发展加上信息系统开发的迫切需求,计算机长途汽车站信息管理系统应运而生了。
随着市场经济的不断飞速发展,交通道路环境的不断改善,人们的出行次数不断增多,人口流动频繁,数量不断加大,车站信息量迅猛增长,长途汽车站信息管理系统在人们的日常生活中发挥着越来越重要的作用。本系统实现了汽车线路信息,汽车信息,票价信息的查询和管理,满足人们的需求。
系统功能简介
在Java中利用ODBC访问技术操作数据库,建立到数据库中的映射类,在对话框类中通过引用映射类完成对数据库的操作。
程序分为登陆界面,选择界面,线路信息界面,汽车信息界面,车票信息这几个主体界面。使用时应先知道管理员帐号和密码,登陆进入系统主菜单界面,里面包括线路信息,汽车信息,车票信息,退出程序菜单选项。所需时间等,可以对它们进行添加,查询,删除,其中线路信息界面包括包括出发地、目的地、出发时间、修改,返回主菜单的操作;汽车信息和车票信息的界面与其类似。
需要特别说明的是,当对数据进行操作时,在查询框内输入提示数据内容,对话框的表中和提示栏中都会出现所查询的数据,我们可以在提示栏中对数据进行删除和修改操作。
程序框图
(1)数据库E—R图
线路信息图:
出发时间 出发地 线路信息 目的地 行驶总的总时间
图1-1 线路信息图
汽车信息图:
最大的载客量 汽车的类型 剩余座位 汽车信息 班次编号
图1-2 汽车信息图
车票信息图:
车票信息 售票情况 车票查询 打印相应的车票
图1-3 车票信息图
乘客信息图:
年龄 姓名 乘客信息 性别 民族
图1-4 乘客信息图
(2)长途汽车信息管理系统功能模块图
图1-5 系统功能模块图
3设计过程和程序代码
数据库表格的设计概述
1实体类型结构
汽车线路(出发地,目的地,出发时间,行驶的总时间) 汽车(汽车类型,班次,最大载客数,剩余座位) 车票(已买票数,剩余票数,票价) 乘客(姓名,年龄,性别,民族)
2联系类型结构
乘坐(汽车班次,类型) 供应(数量)
行驶(线路)
3逻辑设计阶段
根据ER模型转换成关系模型的规则,可把上述ER图转换成5个关系模式,从而实现对乘客验证ER模型向关系数据模型的转换,具体如下: 汽车线路(出发地,目的地,出发时间,行驶的总时间) 汽车(汽车类型,汽车班次,最大载客数,剩余座位数) 车票(已买票数,剩余票数,票价) 乘客(姓名,年龄,性别,民族)
乘坐(所需时间,汽车班次,票价,乘客姓名) 冗余问题检查:
在各关系模式中,可得出每个关系的属性值都是不可分的,因此各关系模式都是规范化关系;又可从以上各关系模式中可得每个属性都不传递依赖于各关系模式的候选键,且转换后各个属性值的数据并没有丢失,数据共享率高,所以在ER模型向关系模式转化时不存在冗余问题。
数据库表格的实现过程
1. 创建汽车线路表
用Microsoft SQL 2000 Server数据库系统的Transact-SQL语句定义创建这个表,程序如下: create table Busline (
Source char(20) , Destination char(20) , Start char(15),
Alltime smallint primary key, );
将代码写入SQL查询分析器的SQL编辑窗体中,并运行可得创建的Busline表及其属性如图1-6:
图1-6 Busline表格属性
往表中加数据语句如下: insert into Busline
values('淮南','合肥','8:00','50'); insert into Busline
values('淮南','蚌埠','8:30','59'); insert into Busline
values('淮南','阜阳','7:30','60'); insert into Busline
values('淮南','宿州','8:10','65'); insert into Busline
values('淮南','芜湖','7:00','70'); insert into Busline
values('淮南','安庆','9:00','71'); insert into Busline
values('淮南','桐城','9:50','78'); insert into Busline
values('淮南','亳州','8:50','80'); insert into Busline
values('淮南','黄山','9:00','100');
由以上可得一个表名为”Busline”的数据表就建成了如图1-7:
2. 创建汽车表
用Microsoft SQL 2000 Server数据库系统的Transact-SQL语句定义创建这个表,程序如下: create table Bus (
Type char(20),
Maxpassenger smallint, Turn char (20) primary key, Remainder smallint, );
将代码写入SQL查询分析器的SQL编辑窗体中,并运行可得数据空表如图1-8所示:
创建的Bus表及其属性如下:
往表中加数据语句如下: insert into Bus
values('大','50','0001','20') insert into Bus
values('大','50','0002','30') insert into Bus
values('大','45','0003','15') insert into Bus
values('中','35','0004','21') insert into Bus
values('中','35','0005','16') insert into Bus
values('小','25','0006','5') insert into Bus
values('小','25','0007','7') insert into Bus
values('小','25','0008','11')
由以上可得一个表名为”Bus”的数据表就建成了如图1-9:
3. 创建车票表
用Microsoft SQL 2000 Server数据库系统的Transact-SQL语句定义创建这个表,程序如下: create table Ticket (
Sold smallint, Remainder smallint, Price smallint primary key, );
将代码写入SQL查询分析器的SQL编辑窗体中,并运行可得数据空表如图2所示:
创建的Ticket表及其属性如下图1-10:
往表中加数据语句如下: insert into Ticket values('22','3','15') insert into Ticket values('19','6','16') insert into Ticket values('20','5','18') insert into Ticket values('30','15','26') insert into Ticket values('20','30','27') insert into Ticket values('28','6','15') insert into Ticket values('26','4','17') 继续添加数据
由以上可得一个表名为”Ticket”的数据表就建成了如图1-11:
4. 创建乘客表
用Microsoft SQL 2000 Server数据库系统的Transact-SQL语句定义创建这个
表,程序如下:
create table Passenger (
Pname char(10) primary key, Psex char(2), Pracial char(5), Psage smallint, );
将代码写入SQL查询分析器的SQL编辑窗体中,并运行可得数据空表如图2所示:
创建的Passenger表及其属性如下图1-12:
往表中加数据语句如下: insert into Passenger values('高健','男','汉','23') insert into Passenger
values('王小明','男','汉','21') insert into Passenger values('安妮','女','汉','19') insert into Passenger
values('张凯','男','汉','21') insert into Passenger values('王睿','女','汉','21') insert into Passenger values('姚洁','女','汉','20') insert into Passenger values('刘佳','女','汉','28') insert into Passenger values('杨枫','男','汉','33') insert into Passenger values('李勇','男','汉','29') insert into Passenger values('王妮','女','汉','25') insert into Passenger values('张云','男','汉','37') insert into Passenger values('李露','女','汉','23')
由以上可得一个表名为”Passenger”的数据表就建成了如图1-13:
5.创建Bbtp表
用Microsoft SQL 2000 Server数据库系统的Transact-SQL语句定义创建这个表,程序如下: create table Bbtp (
Alltime smallint, Turn char (20), Price smallint,
Pname char(10) primary key,
foreign key (Alltime) references Busline(Alltime), foreign key (Price) references Ticket(Price), foreign key (Turn) references Bus(Turn), );
将代码写入SQL查询分析器的SQL编辑窗体中,并运行可得数据空表如图2所示:
创建的Bbtp表及其属性如下图1-14:
往表中加数据语句如下: insert into Bbtp
values('60','0004','15','高健') insert into Bbtp
values('50','0005','16','王小明') insert into Bbtp
values('70','0001','18','安妮') insert into Bbtp
values('71','0007','15','张凯') insert into Bbtp
values('78','0003','15','王睿') insert into Bbtp
values('60','0006','16','姚洁') insert into Bbtp
values('650','0002','16','刘佳') insert into Bbtp
values('70','0004','18','杨枫') insert into Bbtp
values('80','0001','18','李勇') insert into Bbtp
values('65','0005','18','王妮') insert into Bbtp
values('100','0004','18','张云') insert into Bbtp
values('70','0001','16','李露')
由以上可得一个表名为”Bbtp”的数据表就建成了如图1-15:
程序的构造方法及其实现
因为长途汽车信息管理系统可以实现对不同信息的不同操作,程序中分别构造各个功能模块供信息操作使用,详细设计及主要代码如下:
(1)登陆界面代码
在此模式下通过输入管理员名及密码,以获取权限,进入各项操作的界面。 package changtu; import .*; import .*; import .*; import .*;
public class denglu extends JFrame implements ActionListener {
static JLabel jl=new JLabel(\"欢迎登陆汽车管理系统\"); static JLabel jl2=new JLabel(); static JLabel jl3=new JLabel(\"姓名\"); static JLabel jl4=new JLabel(\"密码\"); static JButton jb1=new JButton(\"确定\"); static JButton jb2=new JButton(\"返回\"); static JTextField jt1=new JTextField(); static JTextField jt2=new JTextField();
static Opration op=new Opration(); Statement st;
public void Dl(Statement sta) {
=sta;
setSize(300,250); setVisible(true); setLayout(null); (80,20,200,20); (60,60,50,20); (60,100,50,20); (100,140,200,20); (80,180,60,30); (160,180,60,30); (100,60,100,20); (100,100,100,20); add(jl); add(jl2); add(jl3); add(jl4); add(jt1); add(jt2); add(jb1); add(jb2); (this); (this);
}
(2)主操作界面
在此模式下,可以实现查询,插入,删除,及总查询等诸多功能。 package changtu; import .*; import .*;
import class Opration extends JFrame implements ActionListener {
static JLabel jl=new JLabel(\"请选择一种操作:\");; import import .*; import .*;
public class Qchepiao extends JFrame implements ActionListener {
Statement st=null;
JTextArea ja=new JTextArea(\"编号 售票 剩余 已售\\n\"); JTextField jt=new JTextField();
JRadioButton jc1=new JRadioButton(\"查询全部\"); JRadioButton jc2=new JRadioButton(\"部分查询\"); ButtonGroup bg=new ButtonGroup(); JButton jb1=new JButton(\"查询\"); JButton jb2=new JButton(\"返回\"); JButton jb3=new JButton(\"退出\"); static Opration op=new Opration();
import .*;
public void Qcp(Statement sta) {
=sta;;
import .*; import .*;
public class Ichepiao extends JFrame implements ActionListener {
Statement st=null;
JLabel jl1=new JLabel(\"编号\"); JLabel jl2=new JLabel(\"售票\"); JLabel jl3=new JLabel(\"剩余\"); JLabel jl4=new JLabel(\"已售\"); JLabel jl5=new JLabel(); JTextField jt1=new JTextField(); JTextField jt2=new JTextField(); JTextField jt3=new JTextField(); JTextField jt4=new JTextField(); JButton jb1=new JButton(\"插入\"); JButton jb2=new JButton(\"返回\"); JButton jb3=new JButton(\"修改\");
static Opration op=new Opration();
public void Icp(Statement sta) {
=sta;
setLayout(null); setSize(300,300); setVisible(true); (20,20,80,20); (20,60,80,20);
(20,100,80,20); (20,140,80,20); (100,20,40,20); (100,60,40,20); (100,100,40,20); (100,140,40,20); (100,180,100,20); (200,100,60,20); (200,140,60,20);
(200,60,60,20); }
add(jl1); add(jl2); add(jl3); add(jl4); add(jl5); add(jt1); add(jt2); add(jt3); add(jt4); add(jb1); add(jb2); add(jb3); (this); (this); (this);
(5) 车票删除代码
在此模式下,我们可以删除指定的无用的汽车信息,以便汽车信息的更新。 package changtu; import .*; import .*; import .*;
public class Dchepiao extends JFrame implements ActionListener {
Statement st=null;
JTextField jt1=new JTextField(); JLabel jl1=new JLabel(\"删除的信息\"); JLabel jl2=new JLabel(); JButton jb1=new JButton(\"删除\"); JButton jb2=new JButton(\"返回\"); static Opration op=new Opration(); public void Dcp(Statement sta) {
=sta;
setSize(200,200); setLayout(null); setVisible(true); (60,20,100,20); (70,40,40,20); (40,80,140,20); (40,120,60,20); (110,120,60,20);
}
add(jl1); add(jl2); add(jb1); add(jb2); add(jt1); (this); (this);
public void actionPerformed(ActionEvent e) {
JButton jb=(JButton)(); ResultSet rs=null; if(jb==jb1) {
try {
String st1=\"delete from chepiao where bianhao='\"+()+\"'or
shoupiao='\"+()+\"'or shengyu='\"+()+\"'or yishou='\"+()+\"'\";
(st1);
(\"删除车票信息成功\") ;
;
}
catch(Exception e1){
}}
if(jb==jb2) {
dispose();
数据库实
用教程习题解答[M]. 清华大学出版社. 2004年
[2] 郑玲利. 数据原理与应用案例教程[M]. 清华大学出版社. 2008年 [3] 龙帅. 深入浅出SQL Server 数据库开发[M]. 中国青年出版社. 2006年04月
[4] 刘大玮. SQL Server 数据库项目案例导航[M]. 清华大学出版社. 2005年 [5] 丁宝康. 数据库实用教程[M]. 清华大学出版社. 2002年09月 [6] 万常选 廖国琼. 数据库系统原理与设计. 清华大学出版社. 2009年 [7] 王珊 萨师煊. 数据库系统概论. 高等教育出版社. 2006年07月 [8] 黄晓东. Java课程设计案例精编. 中国水利水电出版社. 2007年01月 [9] 孙一林 彭波. Java 网络编程实例[M]. 清华大学出版社. 2003年 [10] 李宗伟. Java语言描述[M]. 第2版. 机械工业出版社. 2009年01月 [11] 张银鹤. Java开发典型实例[M]. 电子工业出版社. 2009年01月
[12] 张峋 杨三成. Java应用详解[M]. 中国铁道出版社. 2010年11月 [13] 袁然 郑自国. java 案例开发集锦[M]. 电子工业出版社. 2005年 [14] 耿祥义. Java 基础教程[M]. 清华大学出版社. 2004年10月 [15] 王珊 萨师煊. 数据库系统概论. 高等教育出版社. 2011年03月
致谢
经过这一学期的系统学习,我们对数据库有了一定的了解,并且学会了一些常用的操作方法以及熟练应用SQL语言。在这次的课程设计中,我们都有很大的收益但同时也遇到了很多的困难,不过最后我们还是完成了任务。这当中与老师的耐心指导是分不开的。由于我们本身知识的有限性,在遇到困难时,我们不得不上网搜索相关知识点,解决我们的困难。老师的讲解与建议,也给了我们不少的帮助。我们课程设计的完成,主要归功于老师的耐心指导与讲解,感谢一直给予我帮助和支持的老师,也感谢本院系给我这次程序设计的机会,让我在本次课程设计中得到了最大的收获,今后我会继续学习,争取做到最好。
附录1:
源程序
package changtu; import .*; import .*; import .*; import .*;
public class denglu extends JFrame implements ActionListener {
static JLabel jl=new JLabel(\"欢迎登陆汽车管理系统\");
static JLabel jl2=new JLabel(); static JLabel jl3=new JLabel(\"姓名\"); static JLabel jl4=new JLabel(\"密码\"); static JButton jb1=new JButton(\"确定\"); static JButton jb2=new JButton(\"返回\"); static JTextField jt1=new JTextField(); static JTextField jt2=new JTextField(); static Opration op=new Opration(); Statement st;
public void Dl(Statement sta) {
=sta;
setSize(300,250); setVisible(true); setLayout(null); (80,20,200,20); (60,60,50,20); (60,100,50,20); (100,140,200,20); (80,180,60,30); (160,180,60,30); (100,60,100,20); (100,100,100,20); add(jl); add(jl2); add(jl3); add(jl4);
add(jt1); add(jt2); add(jb1); add(jb2); (this); (this);
}
public static void main(String args[]) { try{ (\"\");
}
catch(Exception e){ \"连接失败!\"); return; } try {
Connection con=(\"jdbc:odbc:changtu\ Statement stmt=(); new denglu().Dl(stmt);
} catch(Exception e){
}
}
public void actionPerformed(ActionEvent e)
{
Object s=(); ResultSet rs;
if(jb1)) {
try{
rs=(\"select xingmin,mima from manager\"); {
String a=(\"xingmin\"); String b=(\"mima\"); if())&&())) { }
dispose(); ();
while())
}
} if(jb2)) {
(0);
(\"姓名或密码错误!\"); ; }
catch(Exception e1){
}
} } }
(2)主操作界面
在此模式下,可以实现查询,插入,删除,及总查询等诸多功能。 package changtu; import .*; import .*;
import class Opration extends JFrame implements ActionListener {
static JLabel jl=new JLabel(\"请选择一种操作:\");uanze(); }
public void actionPerformed(ActionEvent e) {
Object s=();;
import .*;
import import .*; import .*;
public class Qchepiao extends JFrame implements ActionListener {
Statement st=null;
JTextArea ja=new JTextArea(\"编号 售票
剩余 已售\\n\");
JTextField jt=new JTextField();
JRadioButton jc1=new JRadioButton(\"查询全部\"); JRadioButton jc2=new JRadioButton(\"部分查询\"); ButtonGroup bg=new ButtonGroup(); JButton jb1=new JButton(\"查询\"); JButton jb2=new JButton(\"返回\"); JButton jb3=new JButton(\"退出\"); static Opration op=new Opration();
public void Qcp(Statement sta) {
=sta;;
import .*; import .*;
public class Ichepiao extends JFrame implements ActionListener {
Statement st=null;
JLabel jl1=new JLabel(\"编号\"); JLabel jl2=new JLabel(\"售票\"); JLabel jl3=new JLabel(\"剩余\"); JLabel jl4=new JLabel(\"已售\"); JLabel jl5=new JLabel(); JTextField jt1=new JTextField(); JTextField jt2=new JTextField(); JTextField jt3=new JTextField(); JTextField jt4=new JTextField(); JButton jb1=new JButton(\"插入\"); JButton jb2=new JButton(\"返回\"); JButton jb3=new JButton(\"修改\");
static Opration op=new Opration();
public void Icp(Statement sta) {
=sta;
setLayout(null); setSize(300,300); setVisible(true); (20,20,80,20); (20,60,80,20); (20,100,80,20); (20,140,80,20); (100,20,40,20); (100,60,40,20); (100,100,40,20); (100,140,40,20); (100,180,100,20); (200,100,60,20); (200,140,60,20);
(200,60,60,20);
add(jl1); add(jl2); add(jl3); add(jl4); add(jl5); add(jt1); add(jt2); add(jt3);
add(jt4); add(jb1); add(jb2); add(jb3); (this); (this); (this);
}
public void actionPerformed(ActionEvent e) { Object s=(); if(jb1)) { try {
String
st1=\"insert
values('\"+()+\"','\"+()+\"','\"+()+\"','\"+()+\"')\"; (st1); (\"插入成功\"); ;
}
catch(Exception e1){
} } if(jb2)) {
dispose();
chepiao
into
();
} if(jb3)) {
if()!=null&&!\"\".equals()))quals())) try {
String str2=\"update chepiao set shengyu='\"+()+\"' where
bianhao='\"+()+\"'\";
(str2); }
catch(Exception e1){
}
if()!=null&&!\"\".equals()))
try {
String str2=\"update chepiao set yishou='\"+()+\"' where
bianhao='\"+()+\"'\";
(str2); }
catch(Exception e1){
}
(\"修改车票信息成功\"); ;;
import .*; import .*;
public class Dchepiao extends JFrame implements ActionListener
{
Statement st=null;
JTextField jt1=new JTextField(); JLabel jl1=new JLabel(\"删除的信息\"); JLabel jl2=new JLabel(); JButton jb1=new JButton(\"删除\"); JButton jb2=new JButton(\"返回\"); static Opration op=new Opration(); public void Dcp(Statement sta) { }
=sta;
setSize(200,200); setLayout(null); setVisible(true); (60,20,100,20); (70,40,40,20); (40,80,140,20); (40,120,60,20); (110,120,60,20); add(jl1); add(jl2); add(jb1); add(jb2); add(jt1); (this); (this);
public void actionPerformed(ActionEvent e) {
JButton jb=(JButton)(); ResultSet rs=null; if(jb==jb1) {
try {
String st1=\"delete from chepiao where bianhao='\"+()+\"'or
shoupiao='\"+()+\"'or shengyu='\"+()+\"'or yishou='\"+()+\"'\";
} }
(st1);
(\"删除车票信息成功\") ;
; }
if(jb==jb2) {
dispose();//释放内存 }
catch(Exception e1){
}
();//调用Opration中xuanze方法 }
因篇幅问题不能全部显示,请点此查看更多更全内容