Swing+Mysql实现的火车票管理系统3
本系统是一个火车票购票管理系统,分为普通用户和管理员两种角色,普通用户可以购票、改签、查询订单,管理员可以对价格、车站、联系人、用户等进行管理。
(文末查看完整源码)
实现功能截图
注册登录
用户首页
购票
改签
车票查询
我的订单
车站管理
价格管理
用户管理
联系人管理
系统功能
本系统实现了以下功能:
1、注册登录
2、车票查询
3、购票
4、改签
5、我的订单
6、用户管理
7、价格管理
8、车站管理
等
使用技术
数据库:mysql
开发工具:Idea(Myeclispe、Eclipse也可以)
知识点:Swing
项目结构
代码
java端
实体类
Trains.java
package com.code2life.train.ticketing.system.entity;
/**
* @Project: StationTicketingSystem
* @Date: 2020/2/23 17:07
* @author: Eric
* @Description: TODO 列车实体类
*/
public class Trains {
private String trainno;
private int traintypeno;
private String startplace;
private String endplace;
private String starttime;
private String endtime;
private String runtime;
public String getTrainno() {
return trainno;
}
public void setTrainno(String trainno) {
this.trainno = trainno;
}
public int getTraintypeno() {
return traintypeno;
}
public void setTraintypeno(int traintypeno) {
this.traintypeno = traintypeno;
}
public String getStartplace() {
return startplace;
}
public void setStartplace(String startplace) {
this.startplace = startplace;
}
public String getEndplace() {
return endplace;
}
public void setEndplace(String endplace) {
this.endplace = endplace;
}
public String getStarttime() {
return starttime;
}
public void setStarttime(String starttime) {
this.starttime = starttime;
}
public String getEndtime() {
return endtime;
}
public void setEndtime(String endtime) {
this.endtime = endtime;
}
public String getRuntime() {
return runtime;
}
public void setRuntime(String runtime) {
this.runtime = runtime;
}
}
Users.java
package com.code2life.train.ticketing.system.entity;
/**
* @Project: StationTicketingSystem
* @Date: 2020/2/23 17:06
* @author: Eric
* @Description: TODO 用户实体类
*/
public class Users {
private String usertel;
private String password;
private String username;
private String usergender;
private int usertypeno;
private String userid;
private int idtypeno;
public String getUsertel() {
return usertel;
}
public void setUsertel(String usertel) {
this.usertel = usertel;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
public String getUsername() {
return username;
}
public void setUsername(String username) {
this.username = username;
}
public String getUsergender() {
return usergender;
}
public void setUsergender(String usergender) {
this.usergender = usergender;
}
public int getUsertypeno() {
return usertypeno;
}
public void setUsertypeno(int usertypeno) {
this.usertypeno = usertypeno;
}
public String getUserid() {
return userid;
}
public void setUserid(String userid) {
this.userid = userid;
}
public int getIdtypeno() {
return idtypeno;
}
public void setIdtypeno(int idtypeno) {
this.idtypeno = idtypeno;
}
}
dao层
TrainsDao.java
package com.code2life.train.ticketing.system.dao;
import com.code2life.train.ticketing.system.utils.SQLHelper;
import com.code2life.train.ticketing.system.entity.Trains;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
/**
* @Project: StationTicketingSystem
* @Date: 2020/2/23 17:55
* @author: Eric
* @Description: TODO 对列车信息的数据库操作类
*/
public class TrainsDao {
//获得全部列车信息
public ArrayList<Trains> trainQueryAll() {
String mysql = "select * from trains;";
System.out.println(mysql);
return getTrains(mysql);
}
//通过列车号来搜索列车
public Trains trainQueryByno(String trainno) {
String mysql = "select * from trains where trainno='" + trainno + "'";
System.out.println(mysql);
return getTrains(mysql).get(0);
}
//搜索除了列车类型为traintypeno的所有符合条件的列车
public ArrayList<Trains> trainTicketsQuery(String startplace, String endplace, int traintypeno) {
String mysql = "select * from trains where startplace='" + startplace +
"' and endplace='" + endplace + "' " +
"and traintypeno!=" + traintypeno;
System.out.println(mysql);
return getTrains(mysql);
}
//搜索所有符合条件的列车(管理员用)
public ArrayList<Trains> trainQueryByAdmin(String startplace, String endplace, int traintypeno) {
String mysql = "select * from trains where startplace='" + startplace +
"' and endplace='" + endplace + "' " +
"and traintypeno=" + traintypeno;
System.out.println(mysql);
return getTrains(mysql);
}
//判断列车是否存在
public boolean trainIsExist(String trainno) {
boolean isExist = false;
String mysql = "select * from trains where trainno='" + trainno + "'";
try {
ResultSet rs = SQLHelper.executeQuery(mysql);
isExist = rs.next();//如果列车存在,则会返回一个true值
SQLHelper.closeConnection();
} catch (Exception e) {
System.out.println("判断列车是否存在方法报错");
}
return isExist;
}
//修改列车信息
public int updateTrain(String trainno, int traintypeno, String startplace, String endplace,
String starttime, String endtime, String runtime) {
String mysql = "update trains set traintypeno=" + traintypeno + ",";
String mysql1 = "startplace='" + startplace + "',endplace='" + endplace + "',";
String mysql2 = "starttime='" + starttime + "',endtime='" + endtime + "',runtime='";
String mysql3 = runtime + "' where trainno='" + trainno + "'";
mysql = mysql + mysql1 + mysql2 + mysql3;
System.out.println(mysql);
return SQLHelper.executeUpdate(mysql);
}
//增加列车
public int addTrain(String trainno, int traintypeno, String startplace, String endplace,
String starttime, String endtime, String runtime) {
String mysql = "insert into trains values('" + trainno + "'," + traintypeno;
String mysql1 = ",'" + startplace + "','" + endplace + "','";
String mysql2 = starttime + "','" + endtime + "','" + runtime + "')";
mysql = mysql + mysql1 + mysql2;
System.out.println(mysql);
return SQLHelper.executeUpdate(mysql);
}
//删除列车
public boolean deleteTrain(String trainNo) {
String mysql = "delete from trains where trainno=" + trainNo + "'";
System.out.println(mysql);
return 0 != SQLHelper.executeUpdate(mysql);
}
//获取列车信息数组列表
private ArrayList<Trains> getTrains(String mysql) {
ArrayList<Trains> trains = new ArrayList<>();
try {
ResultSet rs = SQLHelper.executeQuery(mysql);
while (rs.next()) {
Trains train = new Trains();
train.setTrainno(rs.getString(1));
train.setTraintypeno(Integer.parseInt(rs.getString(2)));
train.setStartplace(rs.getString(3));
train.setEndplace(rs.getString(4));
train.setStarttime(rs.getString(5));
train.setEndtime(rs.getString(6));
train.setRuntime(rs.getString(7));
trains.add(train);
}
SQLHelper.closeConnection();
} catch (SQLException e) {
System.out.println("获取列车数组列表方法中报错");
}
return trains;
}
}
UsersDao.java
package com.code2life.train.ticketing.system.dao;
import com.code2life.train.ticketing.system.utils.SQLHelper;
import com.code2life.train.ticketing.system.entity.Users;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
/**
* @Project: StationTicketingSystem
* @Date: 2020/2/23 17:18
* @author: Eric
* @Description: TODO 对用户信息的数据库操作类
*/
public class UsersDao {
//判断用户是否存在以及密码是否输入正确
public boolean userValidate(String tel, String pwd, int type) {
boolean existed = false;
String mysql = "select usertel,password from users ";
mysql += "where usertel='" + tel + "'" + " and password='" + pwd + "'";
mysql += " and usertypeno='" + type + "'";
System.out.println(mysql);
try {
ResultSet rs = SQLHelper.executeQuery(mysql);
//如果用户存在
if (rs.next()) {
existed = true;
}
SQLHelper.closeConnection();
} catch (SQLException e) {
System.out.println("验证用户方法中报错");
}
return existed;
}
//通过用户手机号获取用户信息
public Users userQueryByTel(String usertel) {
String mysql = "select * from users where usertel='" + usertel + "'";
System.out.println(mysql);
return getUsers(mysql).get(0);
}
//通过身份证号来获取用户信息
public Users userQueryById(String userid) {
String mysql = "select * from users where userid='" + userid + "'";
System.out.println(mysql);
return getUsers(mysql).get(0);
}
//获得全部用户信息
public ArrayList<Users> userQueryAll() {
String mysql = "select * from users";
return getUsers(mysql);
}
//更新用户信息(用于管理员)
public int updateUser(String usertel, String password, String username,
String usergender, int usertypeno, String userid) {
String mysql = "update users set usertel='" + usertel + "',password='" + password + "',";
String mysql1 = "username='" + username + "',usergender='" + usergender + "',";
String mysql2 = "usertypeno=" + usertypeno + ",idtypeno=0";
String mysql3 = " where userid='" + userid + "'";
mysql = mysql + mysql1 + mysql2 + mysql3;
System.out.println(mysql);
return SQLHelper.executeUpdate(mysql);
}
//删除用户信息(用于管理员)
public int deleteUser(String userid) {
String mysql = "delete from users where userid='" + userid + "'";
return SQLHelper.executeUpdate(mysql);
}
//修改自我信息
public int modifySelfInfo(String usertel, String password,
String username, String userid) {
String mysql = "update users set usertel='" + usertel +
"',password='" + password + "',username='" + username + "' " +
"where userid='" + userid + "'";
System.out.println(mysql);
return SQLHelper.executeUpdate(mysql);
}
//查询用户是否存在,不存在返回false
public boolean userExisted(String usertel) {
String mysql = "select * from users where usertel='" + usertel + "'";
System.out.println(mysql);
Object obj = SQLHelper.executeSingleQuery(mysql);
return obj == null;
}
//注册用户信息,返回注册是否成功
public boolean register(String tel, String password, String name, String gender, int usertype, String id, int idtype) {
String mysql = "insert into users values('" + tel +
"','" + password + "','" + name + "','" + gender + "'," +
usertype + ",'" + id + "'," + idtype + ");";
System.out.println(mysql);
int rs = 0;//0表示插入失败
try {
rs = SQLHelper.executeUpdate(mysql); //如果更新成功,则rs=1
} catch (Exception e) {
System.out.println("注册用户信息报错");
}
return rs != 0;
}
//获得用户信息数组列表
private ArrayList<Users> getUsers(String mysql) {
ArrayList<Users> users = new ArrayList<>();
try {
ResultSet rs = SQLHelper.executeQuery(mysql);
while (rs.next()) {
Users user = new Users();
user.setUsertel(rs.getString(1));
user.setPassword(rs.getString(2));
user.setUsername(rs.getString(3));
user.setUsergender(rs.getString(4));
user.setUsertypeno(rs.getInt(5));
user.setUserid(rs.getString(6));
user.setIdtypeno(rs.getInt(7));
users.add(user);
}
SQLHelper.closeConnection();
} catch (SQLException e) {
System.out.println("获取用户数组列表方法中报错");
}
return users;
}
}
view层
LoginWindow.java
package com.code2life.train.ticketing.system.view;
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import com.code2life.train.ticketing.system.dao.*;
import com.code2life.train.ticketing.system.utils.Background;
import com.code2life.train.ticketing.system.entity.Users;
/**
* @Project: StationTicketingSystem
* @Date: 2020/2/23 18:44
* @author: Eric
* @Description: TODO 登录界面类
*/
public class LoginWindow extends JFrame implements ActionListener {
private JTextField txt_tel; //用户电话
private JPasswordField txt_password; //用户密码
private JComboBox<String> com_role; //用户角色类型
private JButton btn_login, btn_register, btn_cancel; //功能按钮
private static Users user; //登录的用户信息,在乘客界面中用到
public LoginWindow(String title) {
//设置登录界面题头和符号
setTitle(title);
String iconSrc = "picture/logo1.jpg";
ImageIcon icon = new ImageIcon(iconSrc);
setIconImage(icon.getImage());
//自定义设置主界面主面板的背景
String bgdSrc = "picture/rail5.jpg";
ImageIcon background = new ImageIcon(bgdSrc);
Background.setBackgroundPicture(this, background);
//界面显示信息面板
JLabel lbl_show = new JLabel("售票登陆系统");
lbl_show.setForeground(Color.WHITE);
lbl_show.setFont(new Font("楷体", Font.PLAIN, 65));
lbl_show.setHorizontalAlignment(JLabel.CENTER);
JPanel jp_show = new JPanel();
jp_show.setOpaque(false);
jp_show.add(lbl_show);
//用户信息模块
//1.手机号
JLabel lbl_tel;
lbl_tel = new JLabel("手机号:");
lbl_tel.setForeground(Color.WHITE);
lbl_tel.setFont(new Font("楷体", Font.BOLD, 30));
lbl_tel.setHorizontalAlignment(SwingConstants.CENTER);
//2.密码
JLabel lbl_password = new JLabel("密 码:");
lbl_password.setForeground(Color.WHITE);
lbl_password.setFont(new Font("楷体", Font.BOLD, 30));
lbl_password.setHorizontalAlignment(SwingConstants.CENTER);
//3.身份选择
JLabel lbl_role = new JLabel("身 份:");
lbl_role.setForeground(Color.WHITE);
lbl_role.setFont(new Font("楷体", Font.BOLD, 30));
lbl_role.setHorizontalAlignment(SwingConstants.CENTER);
//4.信息输入框
txt_tel = new JTextField(15);
txt_password = new JPasswordField(20);
com_role = new JComboBox<>(new String[]{"乘客", "管理员"});
//5.用户信息面板(排版)
JPanel jp_userInfo = new JPanel();
jp_userInfo.setOpaque(false);//将面板背景设计为透明,因为要显示自定义的背景图片
jp_userInfo.setLayout(new GridLayout(7, 2));
jp_userInfo.add(new JLabel());
jp_userInfo.add(new JLabel());
jp_userInfo.add(lbl_tel);
jp_userInfo.add(txt_tel);
jp_userInfo.add(new JLabel());
jp_userInfo.add(new JLabel());
jp_userInfo.add(lbl_password);
jp_userInfo.add(txt_password);
jp_userInfo.add(new JLabel());
jp_userInfo.add(new JLabel());
jp_userInfo.add(lbl_role);
jp_userInfo.add(com_role);
jp_userInfo.add(new JLabel());
jp_userInfo.add(new JLabel());
// 登录界面功能按钮模块
//1.登录按钮
btn_login = new JButton("登录");
btn_login.setFont(new Font("楷体", Font.PLAIN, 20));
btn_login.addActionListener(this);
//2.注册按钮
btn_register = new JButton("注册");
btn_register.setFont(new Font("楷体", Font.PLAIN, 20));
btn_register.addActionListener(this);
//3.取消按钮
btn_cancel = new JButton("取消");
btn_cancel.setFont(new Font("楷体", Font.PLAIN, 20));
btn_cancel.addActionListener(this);
//4.功能按钮面板
JPanel jp_functionBtn = new JPanel();
jp_functionBtn.setOpaque(false);
jp_functionBtn.add(btn_login);
jp_functionBtn.add(btn_register);
jp_functionBtn.add(btn_cancel);
//设置主面板布局,并添加上面自定义的面板
this.setLayout(new BorderLayout());
this.add(jp_show, BorderLayout.NORTH);
this.add(jp_userInfo, BorderLayout.CENTER);
this.add(jp_functionBtn, BorderLayout.SOUTH);
this.validate();
this.setVisible(true);
this.setSize(background.getIconWidth(), background.getIconHeight());
this.setResizable(false);
this.setLocationRelativeTo(null);
this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
}
public void actionPerformed(ActionEvent e) {
//登录
if (e.getSource() == btn_login) {
String userTel = txt_tel.getText().trim();
String password = new String(txt_password.getPassword());
int type = com_role.getSelectedIndex();
login(userTel, password, type);
return;
}
//注册判断
if (e.getSource() == btn_register) {
RegisterWindow RegisterWindow = new RegisterWindow("注册为乘客");
return;
}
//取消登陆
if (e.getSource() == btn_cancel) {
txt_tel.setText("");
txt_password.setText("");
com_role.setSelectedIndex(0);
}
}
public static Users getUser() {
return user;
}
//用户点击登录按钮时调用此方法
private void login(String userTel, String password, int type) {
Icon success = new ImageIcon("picture/success.jpg");
Icon failed = new ImageIcon("picture/failed.jpg");
final int PASSENGER = 0;
final int ADMIN = 1;
//用户信息均不能为空
if (userTel.equals("") || password.equals("")) {
JOptionPane.showMessageDialog(this, "输入不能为空!", "提醒", JOptionPane.WARNING_MESSAGE, failed);
return;
}
//如果用户信息不为空,验证此用户是否存在
UsersDao usersDao = new UsersDao();
boolean existed = usersDao.userValidate(userTel, password, type);
if (!existed) {
JOptionPane.showMessageDialog(this, "输入信息有误", "提醒", JOptionPane.WARNING_MESSAGE, failed);
return;
}
//如果用户存在,判断是哪种用户类型,并进入用户界面
if (type == PASSENGER) {
user = usersDao.userQueryByTel(userTel);
JOptionPane.showMessageDialog(this, "欢迎您! " + userTel + " 用户!", "登陆成功", JOptionPane.PLAIN_MESSAGE, success);
new PassengerWindow("用户");
this.dispose();
} else if (type == ADMIN) {
JOptionPane.showMessageDialog(this, "欢迎您! " + userTel + " 管理员!", "登陆成功", JOptionPane.PLAIN_MESSAGE, success);
new AdminWindow("管理员");
this.dispose();
}
}
}
完整源码
觉得有用,记得一键三连哦!