Swing+Mysql实现的火车票管理系统3(功能分为普通用户和管理员,包含登录、车票查询、改签、购票、我的订单、用户注册、用户首页、车站管理、价格管理、用户管理等)

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();
        }
    }
}



完整源码

觉得有用,记得一键三连哦!

  • 0
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

anmu4200

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值