长途汽车管理系统.docx
《长途汽车管理系统.docx》由会员分享,可在线阅读,更多相关《长途汽车管理系统.docx(28页珍藏版)》请在冰豆网上搜索。
长途汽车管理系统
滁州学院
课程设计报告
课程名称:
数据库系统原理与设计
设计题目:
长途汽车管理系统
系别:
计算机科学与技术系
专业:
计算机科学与计算专业
组别:
第二组
起止日期:
2010年12月7日~2010年12月28日
指导教师:
周强
计算机科学与技术系二○一○年制
课程设计题目
长途汽车信息管理系统
组长
粱炎光
学号
2008210768
班级
08计科
系别
计算机科学与技术系
专业
计算机科学与技术专业
组员
范远军、王超、熊国富、张雷
指导教师
周强
课程设计目的
实现长途汽车管理系统的一些基本的功能,能够熟练地掌握SQL语句的用法,并且懂得如何团队协作开发程序
课程设计所需环境
Windowsxp系统、SQLserver2000、JDK和JCreator
课程设计任务要求
要求包括汽车信息管理系统、票价信息管理系统、线路信息管理系统
课程设计工作进度计划及分工情况
序号
起止日期
工作内容
分工情况
1
11月29日—12月1日
确定组员分工情况、阐明系统的开发背景
组长和组员共同完成
2
12月2日—12月3日
确定系统功能的基本描述以及需求分析
熊国富、范远军负责此项
3
12月4日—12月9日
ER图的设计、完成数据库创建
粱炎光负责此项
4
12月10日—12月13日
汽车管理系统系统的界面代码设计
王超负责查询等操作界面,粱炎光负责系统登陆界面
5
12月14日—12月17日
汽车管理系统系统的功能代码设计
张雷,熊国富负责此项
6
12月18日—12月20日
连接数据库、测试程序、以及调试程序
所有人共同完成
7
12月21日—12月26日
完成课程设计报告的填写与设计
范远军负责此项
教研室审核意见:
教研室主任签字:
年月日
1需求分析
1.1课程设计任务及要求
长途汽车信息管理系统运用在汽车站部门的系统工具,方便此系统部门的工作人员的工作,该系统主要根据此部门的特点建立的,是记录和查询汽车站信息的的依据。
早期的长途汽车站信息主要是人工记录和人工管理的,不仅不容易记录,而且还不容易保存。
随着计算机的不断普及和软件系统的不断发展加上信息系统开发的迫切需求,计算机长途汽车站信息管理系统应运而生了。
随着市场经济的不断飞速发展,交通道路环境的不断改善,人们的出行次数不断增多,人口流动频繁,数量不断加大,车站信息量迅猛增长,长途汽车站信息管理系统在人们的日常生活中发挥着越来越重要的作用。
本系统实现了汽车线路信息,汽车信息,票务信息的查询和管理,以满足人们的需求。
线路信息管理:
车站管理员可以在线路信息管理模块对车站线路信息进行管理。
管理员首先建立汽车线路信息数据库,输入原始的线路信息,当有新的线路需要添加或者需要对已有的线路信息进行修改,删除的时候,管理员就可以进行相应的操作。
管理员也可以通过本模块查询到所有需要查询的线路的详细信息。
汽车信息管理:
管理员可以在汽车信息管理模块实现对汽车信息的管理。
管理员首先应该建立汽车信息数据库,输入原始的数据信息,当有新的汽车信息的时候或者管理员需要修改某个汽车的相关信息以及想要删除某个汽车信息的时候,就可以完成相应的操作。
管理员也可以在整个数据库中查寻相关汽车信息。
车票信息管理:
管理员可以在车票管理模块实现对线路车票信息的管理。
管理员根据相应的汽车线路信息来设置相应的车票详细信息。
当有新的线路添加的时候,要把相应的车票信息添加到数据库中,管理员还可以对某条线路的车票信息进行修改,删除和查询操作。
1.2课程设计思想
(1)充分利用所学过的数据库的相关知识建立长途汽车管理系统所需的数据库。
(2)进行详细的功能设计,在Java中利用ODBC连接数据库技术对数据库中数据进行操作,并能进行多表之间的链接与查询操作。
2概念模型设计
2.1功能设计
在Java中利用ODBC访问技术操作数据库,建立到数据库中的映射类,在对话框类中通过引用映射类完成对数据库的操作。
程序分为登陆界面,选择界面,线路信息界面,汽车信息界面,车票信息这几个主体界面。
使用时应先知道管理员帐号和密码,登陆进入系统主菜单界面,里面包括线路信息,汽车信息,车票信息,退出程序菜单选项。
所需时间等,可以对它们进行添加,查询,删除,其中线路信息界面包括包括出发地、目的地、出发时间、修改,返回主菜单的操作;汽车信息和车票信息的界面与其类似。
需要特别说明的是,当对数据进行操作时,在查询框内输入提示数据内容,对话框的表中和提示栏中都会出现所查询的数据,我们可以在提示栏中对数据进行删除和修改操作。
2.2长途汽车信息系统功能模块
图2-1
2.3系统E_R图
图2-2
3逻辑模型设计与优化
管理员登陆:
Manager(username,passwd)
汽车表:
Qiche(busno,zhonglei,zaike)
车票表:
Chepiao(ticketno,shoupiao,busno,shengyu,yishou,piaojia)
线路表:
Xianlu(mudidi,chufadi,chushi,yongshi)
行驶表:
Xingshi(mudidi,busno,licheng)
4物理设计与实施
表1:
管理员登陆表
字段
字段名称
数据类型
是否为空
主码
外码
备注
Username
用户名
Varchar(20)
Notnull
是
Passwd
密码
Varchar(20)
Notnull
表2:
路线表
字段
字段名称
数据类型
是否为空
主码
外码
备注
chufadi
出发地
Char(20)
Notnull
是
mudidi
目的地
Char(20)
Notnull
是
shijian
时间
time
Notnull
busno
汽车号
Char(20)
Notnull
是
表3:
汽车表
字段
字段名称
数据类型
是否为空
主码
外码
备注
busno
汽车号
Char(20)
Notnull
是
zhonglei
类别
Char(20)
Notnull
zaike
载客
Char(20)
Notnull
表4:
行驶表
字段
字段名称
数据类型
是否为空
主码
外码
备注
busno
汽车号
Char(20)
Notnull
chufadi
出发地
Char(20)
Notnull
mudidi
目的地
Char(20)
Notnull
licheng
里程
Char(20)
Notnull
表5:
车票表
字段
字段名称
数据类型
是否为空
主码
外码
备注
busno
汽车号
Char(20)
Notnull
是
ticketno
车票号
Char(20)
Notnull
是
shoupiao
售票
Char(20)
Notnull
yishou
已售
Char(20)
Notnull
shengyu
剩余
Char(20)
Notnull
piaojia
票价
Char(20)
Notnull
5详细设计
5.1登陆界面代码
在此模式下通过输入管理员名及密码,以获取权限,进入各项操作的界面。
packagechangtu;
importjava.awt.*;
importjava.awt.event.*;
importjavax.swing.*;
importjava.sql.*;
importjava.io.*;
publicclassdengluextendsJFrameimplementsActionListener
{
staticJLabeljl=newJLabel("欢迎登陆汽车管理系统");
staticJLabeljl2=newJLabel();
staticJLabeljl3=newJLabel("姓名");
staticJLabeljl4=newJLabel("密码");
staticJButtonjb1=newJButton("确定");
staticJButtonjb2=newJButton("返回");
staticJTextFieldjt1=newJTextField();
staticJTextFieldjt2=newJTextField();
staticOprationop=newOpration();
Statementst;
publicvoidDl(Statementsta)
{
this.st=sta;
setSize(300,250);
setVisible(true);
setLayout(null);
jl.setBounds(80,20,200,20);
jl3.setBounds(60,60,50,20);
jl4.setBounds(60,100,50,20);
jl2.setBounds(100,140,200,20);
jb1.setBounds(80,180,60,30);
jb2.setBounds(160,180,60,30);
jt1.setBounds(100,60,100,20);
jt2.setBounds(100,100,100,20);
add(jl);
add(jl2);
add(jl3);
add(jl4);
add(jt1);
add(jt2);
add(jb1);
add(jb2);
jb1.addActionListener(this);
jb2.addActionListener(this);
}
publicstaticvoidmain(Stringargs[])
{
try{
Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");
}
catch(Exceptione){
System.out.println("连接失败!
");
return;
}
try
{
Connectioncon=DriverManager.getConnection("jdbc:
odbc:
changtu","sa","");
Statementstmt=con.createStatement();
newdenglu().Dl(stmt);
}
catch(Exceptione){
System.out.println(e);
}
}
publicvoidactionPerformed(ActionEvente)
{
Objects=e.getSource();
ResultSetrs;
if(s.equals(jb1))
{
try{
rs=st.executeQuery("selectxingmin,mimafrommanager");
while(rs.next())
{
Stringa=rs.getString("xingmin");
Stringb=rs.getString("mima");
if(a.equals(jt1.getText())&&b.equals(jt2.getText()))
{
dispose();
op.opration();
}
}
jl2.setText("姓名或密码错误!
");
jl2.setForeground(Color.red);
}
catch(Exceptione1){
System.out.println(e);
}
}
if(s.equals(jb2))
{
System.exit(0);
}
}
}
5.2主操作界面
在此模式下,可以实现查询,插入,删除,及总查询等诸多功能。
packagechangtu;
importjava.awt.*;
importjavax.swing.*;
importjava.awt.event.*;
publicclassOprationextendsJFrameimplementsActionListener
{
staticJLabeljl=newJLabel("请选择一种操作:
");//定义标签
staticJRadioButtonjc1=newJRadioButton("查询操作");//单选按钮
staticJRadioButtonjc2=newJRadioButton("插入操作");
staticJRadioButtonjc3=newJRadioButton("删除操作");
staticJRadioButtonjc4=newJRadioButton("修改操作");
staticJButtonjb1=newJButton("确定");//按钮
staticJButtonjb2=newJButton("返回");
staticButtonGroupbg=newButtonGroup();
publicstaticintflag;
staticCheckch=newCheck();
publicvoidxuanze()
{
setTitle("操作选择");//设置界面内容
setSize(300,270);//界面大小
setLayout(null);//界面布局
jl.setBounds(70,10,150,20);//设置位置大小
jc1.setBounds(60,50,150,20);
jc2.setBounds(60,90,150,20);
jc3.setBounds(60,130,150,20);
jc4.setBounds(60,170,150,20);
jb1.setBounds(80,210,60,20);
jb2.setBounds(160,210,60,20);
jc1.setSelected(true);//设为选中
bg.add(jc1);
bg.add(jc2);
bg.add(jc3);
bg.add(jc4);
add(jl);
add(jc1);
add(jc2);
add(jc3);
add(jc4);
add(jb1);
add(jb2);
jc1.addActionListener(this);//加入事件监听
jc2.addActionListener(this);
jc3.addActionListener(this);
jc4.addActionListener(this);
jb1.addActionListener(this);
jb2.addActionListener(this);
setVisible(true);
}
publicintgetState(){
returnflag;
}
publicstaticvoidopration()
{
newOpration().xuanze();
}
publicvoidactionPerformed(ActionEvente)
{
Objects=e.getSource();//事件源
if(s.equals(jb1))
{
if(jc1.isSelected()){
flag=1;
setVisible(false);
ch.ch();
}
elseif(jc2.isSelected()){
flag=2;
setVisible(false);
ch.ch();
}
elseif(jc3.isSelected()){
flag=3;
setVisible(false);
ch.ch();
}
elseif(jc4.isSelected()){
flag=4;
setVisible(false);
ch.ch();
}
}
if(s.equals(jb2))
{
System.exit(0);
}
}
}
5.3汽车查询代码
在此模式下输入汽车的某一项信息,可以获得汽车编号、汽车种类、载客量等信息,如输入汽车编号01,便可以显示01车的其他信息。
packagechangtu;
importjava.awt.*;
importjava.awt.event.*;
importjavax.swing.*;
importjava.sql.*;
importjava.io.*;
publicclassQchepiaoextendsJFrameimplementsActionListener
{
Statementst=null;
JTextAreaja=newJTextArea("编号售票剩余已售\n");
JTextFieldjt=newJTextField();
JRadioButtonjc1=newJRadioButton("查询全部");
JRadioButtonjc2=newJRadioButton("部分查询");
ButtonGroupbg=newButtonGroup();
JButtonjb1=newJButton("查询");
JButtonjb2=newJButton("返回");
JButtonjb3=newJButton("退出");
staticOprationop=newOpration();
publicvoidQcp(Statementsta)
{
this.st=sta;//Statement语句传输
setSize(400,300);
setLayout(null);
setVisible(true);//设置界面可见
jc1.setBounds(20,20,80,20);
jc2.setBounds(20,60,80,20);
jt.setBounds(20,100,80,30);
jb1.setBounds(30,150,60,30);
jb2.setBounds(120,220,60,30);
jb3.setBounds(230,220,60,30);
ja.setBounds(120,20,250,200);
bg.add(jc1);
bg.add(jc2);
add(jc1);
add(jc2);
add(jt);
add(jb1);
add(jb2);
add(jb3);
add(ja);
jc1.addActionListener(this);
jc2.addActionListener(this);
jb1.addActionListener(this);
jb2.addActionListener(this);
jb3.addActionListener(this);
}
publicvoidactionPerformed(ActionEvente)
{
Objects=e.getSource();
ResultSetrs=null;
Stringa1;
if(s.equals(jb1))
{
if(jc1.isSelected())
{
try{
rs=st.executeQuery("selectbianhao,shoupiao,shengyu,yishoufromchepiao");
ja.setText("");
ja.setText("编号售票剩余已售\n");
while(rs.next()){
Stringa=rs.getString("bianhao");
Stringb=rs.getString("shoupiao");
Stringc=rs.getString("shengyu");
Stringd=rs.getString("yishou");
ja.append(a+""+b+""+c+""+d+"\n");
}
}
catch(Exceptione1){
System.out.println(e);
}
}
if(jc2.isSelected())
{
try{
ja.setText("");
ja.setText("编号售票剩余已售\n");
rs=st.executeQuery("selectbianhao,shoupiao,shengyu,yishoufromchepiaowherebianhao='"+jt.getText()+"'orshoupiao='"+jt.getText()+"'orshengyu='"+jt.getText()+"'oryishou='"+jt.getText()+"'");
while(rs.next()){
Stringa=rs.getString("bianhao");
Stringb=rs.getString(