公交车信息查询管理系统(Java实现)
一、需求分析本次Java课程设计本着公交车信息查询管理系统查询管理数据的设计原则,让其满足日常生活中人们对公交查询的基本功能,实现信息查询的基础效果,提供以下功能:数据库连接,数据库操作功能;管理员登录,管理员退出;用户登录,用户注册(两次密码不一致时报错),用户退出,用户查看个人信息用户可根据公交车ID进行简单的公交线路查询,刷新表格内部数据;管理员可添加车站信息、修改车站信息、删除车站信息、查
一、需求分析
本次Java课程设计本着公交车信息查询管理系统查询管理数据的设计原则,让其满足日常生活中人们对公交查询的基本功能,实现信息查询的基础效果,提供以下功能:
- 数据库连接,数据库操作功能;
- 管理员登录,管理员退出;
- 用户登录,用户注册(两次密码不一致时报错),用户退出,用户查看个人信息
- 用户可根据公交车ID进行简单的公交线路查询,刷新表格内部数据;
- 管理员可添加车站信息、修改车站信息、删除车站信息、查询车站信息;刷新公交表格数据;
- 管理员可添加司机信息、修改司机信息、删除司机信息、刷新司机表格信息。
二、总体设计
该公交信息查询管理系统基于Java图形化设计界面以及MySQL数据库实现,采用经典的“Dao设计模式”,其中MySQL数据库的各类操作实现了实体间表格的增查改删,并配备了图形设计界面中的JTable表格控件,做到了实时更新数据的效果。下面为实现该系统的功能结构层次图:
具体功能列表细节如下:
功能模块 | 功能细分 | 备注 |
公交线路 信息管理 | 查询公交信息功能 | 按公交编号查询指定公交的全部信息 |
新增公交信息功能 | 向数据库中添加新的公交信息记录 | |
修改公交信息功能 | 按公交编号修改需要更正的公交信息 | |
删除公交信息功能 | 按公交编号删除指定的数据库记录 | |
用户使用功能 | 用户登录 | 用户根据查询后用户名密码进行登录 |
线路查询 | 用户根据公交车ID对公交信息查询 | |
个人信息确认 | 根据public方法传入参数显示 | |
用户注册 | 注册用户个人信息 | |
管理员使用功能 | 管理员登录 | 根据管理员输入管理员名称对数据库密码检索 |
公交车信息查询 | 根据UID实行简单的“增删改查”操作 | |
司机信息查询操作 | 根据BID实行简单的“增删改查”操作 |
三、Mysql数据库设计
经过用户反馈筛选,我们根据公交车信息管理的设计理念,将上述需求分析阶段得到的用户需求进行分析、总结、归纳,得到该公交车信息查询管理系统的实体以及实体属性,并在这里采用E-R图的方式抽象成信息结构即概念模型,其中根据实体间联系,画出局部E-R图,如下所示:
关系模式(关系模型)
管理员(管理员姓名,管理员密码);
用户(用户姓名,用户密码,用户性别);
公交车(公交编号,司机编号,公交名,公交车站,公交类型);
司机(司机编号,司机姓名,司机性别,公交类型,司机生日,司机地址,电话号码,有效期截止时间);
四、详细设计与实现
4.1、登录界面设计
登录界面设有用户名、密码和用户身份三个字段,在数据库中进行分别匹配,在用户输入信息后,首先判断该用户名是否存在,接着匹配该用户的身份是否正确,最后匹配该身份下的密码是否正确,通过三重判断进行页面跳转,该页面也可以将所填信息进行清楚,效果图如下:
部分代码实现如下:
button.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
if (comboBox.getSelectedItem().equals("普通用户")) {
// 获得文本框里的值
String username = textField.getText();String upassword = passwordField.getText();
boolean f = dirverdao.userlogin(username, upassword);
if (f) {JOptionPane.showMessageDialog(frame, "登陆成功!欢迎!");
// 页面跳转
UsersEnroll ue=new UsersEnroll();
// 关闭原页面
frame.setVisible(false);
} else {JOptionPane.showMessageDialog(frame, "登陆失败!账号或密码错误!");
// 账号密码清空
textField.setText("");passwordField.setText("");}
4.2、用户注册界面设计
注册界面设有用户名、性别、密码和确认密码四个字段,其中,若二次输入的密码与第一次不统一,也会做出相应的提醒,点击提交则上交给数据库。效果图如下:
4.3、线路查询界面设计
用户可以根据自己的需求,输入编号对表格查出相应的所需的数据线路进行数据库查询操作,JTable表格做到实时更新数据的效果,输入信息查找这里也采用了键盘监听事件,即可以根据用户输入的信息实时调用数据库数据,具体展示图如下:
部分代码如下:
protected TableModel getDataModel(String bySth, String keyWord) {
// 获得所有字段名,做表头
String[] columnNames = bsd.getColumnNames("businfortable");
// 获得查询结果的list列表,转换为二维数组,做表中数据
List<BusType> buslist = bsd.getBusbySth(bySth, keyWord);
int row = buslist.size(); // 获得行数,即数据个数
int column = columnNames.length; // 获得列数,即字段个数
Object[][] data = new Object[row][column];
for (int i = 0; i < buslist.size(); i++) {
data[i][0] = buslist.get(i).getBid();
data[i][1] = buslist.get(i).getDid();
data[i][2] = buslist.get(i).getBnum();
data[i][3] = buslist.get(i).getBtype();
data[i][4] = buslist.get(i).getBusstop();}
TableModel dataModel=new DefaultTableModel(data,columnNames); // 建立表格数据模型
return dataModel;}
4.4、管理员界面设计
管理员界面即是对公交车与司机二者信息显示的增删改查,这里的修改操作我采用两种方式,一种是利用getSelectedRow()方法,获取索引行,将需要修改的信息自动获取到修改页面,一种则是直接打开修改页面,根据你输入的信息进行主键查找,最终达到修改效果,删除操作也采用同样的方法,同时实时更新系统表格。效果图如下:
部分核心代码如下所示:
JMenuBar menuBar = new JMenuBar();
frame.setJMenuBar(menuBar);
JMenu menu = new JMenu("\u5F00\u59CB");
menuBar.add(menu);
JMenuItem menuItem = new JMenuItem("\u4FE1\u606F\u4FEE\u6539");
menu.add(menuItem);
menuItem.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
DriverTableFrame dtf=new DriverTableFrame(); }});
JMenu menu_1 = new JMenu("\u5E2E\u52A9");
menuBar.add(menu_1);}
部分核心代码如下所示:
public int addBus(BusType bus) {
Connection conn=DBTools.getConn();
int i=0;
String sql="insert into businfortable(bid,did,bnum,btype,busstop) values(?,?,?,?,?)";
PreparedStatement pstmt = null;
try {
pstmt = conn.prepareStatement(sql);
pstmt.setInt(1, bus.getBid());
pstmt.setInt(2, bus.getDid());
pstmt.setString(3, bus.getBnum());
pstmt.setString(4, bus.getBtype());
pstmt.setString(5, bus.getBusstop());
i=pstmt.executeUpdate();}
部分核心代码如下所示:
public void actionPerformed(ActionEvent e) {
int frow = table.getSelectedRow(); //获得第一个选中行的索引
if(frow == -1) {
JOptionPane.showMessageDialog(frame, "请先单击选择一条记录");}else {
//String[]中存入表格选中行的数据
String[] sendData = new String[table.getColumnCount()];
for(int i=0; i<sendData.length; i++) {
sendData[i] = table.getValueAt(frow, i)+"";}
//打开修改页面,并传入信息
BusInforChanged bic=new BusInforChanged(sendData);}
}});
class MYPanel3 extends JPanel {
private Image img;
public MYPanel3() {
// TODO Auto-generated constructor stub
ImageIcon icon = new ImageIcon(UsersLoginFrame.class.getResource("/images/背景图3.jpg"));
img = icon.getImage();}
@Override
protected void paintComponent(Graphics g) {
// TODO Auto-generated method stub
g.drawImage(img, 0, 0, this.getWidth(), this.getHeight(), null);}}
部分核心代码展示如下:
@Override
public void itemStateChanged(ItemEvent e) {
// TODO Auto-generated method stub
if(radioButton.isSelected()){
dsex=radioButton.getText();
}else if(radioButton_1.isSelected()){
......
if(chckbxA.isSelected()){
dtype+=chckbxA.getText();}}
@Override
public void actionPerformed(ActionEvent e) {
// TODO Auto-generated method stub
String dname=textField.getText();
....
if(e.getSource()==button){
DriverDaoImpl dridao=new DriverDaoImpl();
Driver driver=new Driver();......
else if(e.getSource()==button_2_1){
......
JOptionPane.showMessageDialog(frame, "删除成功!");
frame.setVisible(false);
至此,该公交车信息查询管理系统的基本功能与界面展示完毕。如对您有所帮助,望留下宝贵一赞!谢谢!
需源码以及1w3字课程20页报告 私信扣扣 1092644308!!!!!
更多推荐
所有评论(0)