Java Swing+Mysql电影购票系统

  • 文章目录
    • 数据库连接
    • 主要页面
    • 运行截图

文章目录

电影购票系统模拟真实购票流程,在线选座,充值购票,影院信息管理。登录用户分为:普通用户+管理员

数据库连接

BaseDao类,建立数据库连接
代码如下:

package daoimpl;import java.lang.reflect.Field;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.ResultSetMetaData;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.List;public class BaseDao {private static final String DRIVER = "com.mysql.jdbc.Driver";private static final String URL = "jdbc:mysql://localhost:3306/moviesystem?useUnicode=true&characterEncoding=UTF-8";private static final String USER = "root";private static final String PASSWORD = "123456";static{try {Class.forName(DRIVER);} catch (ClassNotFoundException e) {e.printStackTrace();}}/*** 与数据库建立连接* * @return*/public static Connection getconn() {Connection conn = null;try {conn = DriverManager.getConnection(URL,USER,PASSWORD);} catch (SQLException e) {e.printStackTrace();}return conn;}/*** 释放所有资源* */public static void closeAll(ResultSet rs, PreparedStatement psts, Connection conn) {try {if (rs != null) {rs.close();}if (psts != null) {psts.close();}if (conn != null) {conn.close();}} catch (SQLException e) {e.printStackTrace();}}/*** 此方法可以完成对数据库的增删改操作* * @param sql* @param params* @return*/public static boolean operUpdata(String sql, List<Object> params) {int res = 0;//返回影响的行数Connection conn = null;PreparedStatement psts = null;//执行sql语句ResultSet rs = null;try {conn = getconn();// 与数据库建立连接psts = conn.prepareStatement(sql);// 装载sql语句if (params != null) {// 假如有?号,在执行之前把问号替换掉for(int i = 0; i < params.size(); i++) {psts.setObject(i + 1, params.get(i));}}res = psts.executeUpdate();} catch (SQLException e) {e.printStackTrace();} finally {closeAll(rs, psts, conn);}return res > 0 ? true : false;}/** 实现查的操作* */public static <T> List<T> operQuery(String sql, List<Object> p, Class<T> cls)throws Exception {Connection conn = null;PreparedStatement pste = null;// 预处理语句ResultSet rs = null;// 结果集List<T> list = new ArrayList<T>();conn = getconn();try {pste = conn.prepareStatement(sql);if (p != null) {// 将条件值装入预处理语句for (int i = 0; i < p.size(); i++) {pste.setObject(i + 1, p.get(i));}}rs = pste.executeQuery();// 执行ResultSetMetaData rsmd = rs.getMetaData();while (rs.next()) {T entity = cls.newInstance();// 反射for (int j = 0; j < rsmd.getColumnCount(); j++) {// 从数据库中取得字段名String col_name = rsmd.getColumnName(j + 1);Object value = rs.getObject(col_name);Field field = cls.getDeclaredField(col_name);field.setAccessible(true);// 类中的成员变量为private,故必须进行此操作field.set(entity, value);// 给实体类entity的field属性赋值}list.add(entity);// 加入list列表}} catch (SQLException e) {e.printStackTrace();} finally {closeAll(rs, pste, conn);// 关闭连接,释放资源}return list;}}

主要页面

登录页面:LoginUI

package view;import java.awt.Color;
import java.awt.Container;
import java.awt.Dimension;
import java.awt.Font;
import java.awt.Image;
import java.awt.Toolkit;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;import javax.swing.ButtonGroup;
import javax.swing.ImageIcon;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JOptionPane;
import javax.swing.JPasswordField;
import javax.swing.JRadioButton;
import javax.swing.JTextField;import entity.User;
import service.UserService;
import serviceimpl.UserServiceImpl;class Login implements ActionListener {private JFrame jf = new JFrame("电影系统");private Container con = jf.getContentPane();// 获得面板private Toolkit toolkit = Toolkit.getDefaultToolkit();private Dimension sc = toolkit.getScreenSize();// 获得屏幕尺寸private JLabel title = new JLabel("欢迎使用电影购票系统");private JLabel name1 = new JLabel("用户名");private JLabel pass1 = new JLabel("密  码");private JTextField textName = new JTextField();private JPasswordField textPs = new JPasswordField();// 密码框private JRadioButton choice1 = new JRadioButton("用户");private JRadioButton choice2 = new JRadioButton("管理员");private JLabel code1 = new JLabel("验证码");private JTextField textCode = new JTextField();private JLabel code2 = new JLabel();private JButton btn_login = new JButton("登录");private JButton btn_rgist = new JButton("注册");// 按钮private Font font = new Font("楷体", 1, 28);private Font font1 = new Font("楷体", 0, 20);private Font font2 = new Font("楷体", 0, 18);// 字体,样式(粗体,斜体),大小private ButtonGroup buttongroup = new ButtonGroup();private ImageIcon loginbg = new ImageIcon("image/loginbg.jpg");public Login() {con.setLayout(null);jf.setSize(1000, 618);jf.setLocation((sc.width - 1000) / 2, (sc.height - 618) / 2);jf.setResizable(false);// 窗口大小不可变jf.setVisible(true);jf.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);con.setVisible(true);JLabel maxlabel = new JLabel(loginbg);title.setBounds(375, 10, 370, 30);title.setFont(font);
//      title.setForeground(Color.black);title.setForeground(Color.white);name1.setBounds(140, 140, 85, 30);// 账号的位置大小name1.setFont(font1);// 字体name1.setForeground(Color.red);// name1字的颜色pass1.setBounds(140, 190, 85, 30);// 密码的位置大小pass1.setForeground(Color.red);pass1.setFont(font1);textName.setBounds(200, 143, 140, 25);textName.setBorder(null);// 边框textName.setFont(font1);textPs.setBounds(200, 193, 140, 25);textPs.setBorder(null);textPs.setEchoChar('*');// 可以将密码显示为* ;默认为·textPs.setFont(font1);choice1.setBounds(140, 290, 120, 25);choice1.setSelected(true);// 默认普通用户登录choice2.setBounds(260, 290, 80, 25);code1.setBounds(140, 240, 60, 25);code1.setFont(font1);code1.setForeground(Color.black);textCode.setBounds(200, 240, 95, 25);textCode.setBorder(null);textCode.setFont(font1);code2.setBounds(300, 240, 70, 25);code2.setFont(font1);code2.setText(code());code2.setForeground(Color.black);code1.setVisible(false);code2.setVisible(false);textCode.setVisible(false);btn_login.setBounds(140, 340, 90, 25);//140, 340, 90, 25btn_login.setFont(font2);btn_login.addActionListener(this);jf.getRootPane().setDefaultButton(btn_login);//回车默认是登录按钮btn_rgist.setBounds(250, 340, 90, 25);//250, 340, 90, 25btn_rgist.setFont(font2);btn_rgist.addActionListener(this);JLabel bg = new JLabel(loginbg);maxlabel.add(title);maxlabel.add(name1);maxlabel.add(pass1);maxlabel.add(textName);maxlabel.add(textPs);maxlabel.add(choice1);maxlabel.add(choice2);buttongroup.add(choice1);buttongroup.add(choice2);maxlabel.add(code1);maxlabel.add(code2);maxlabel.add(textCode);maxlabel.add(btn_login);maxlabel.add(btn_rgist);maxlabel.setBounds(0, 0, 999, 617);con.add(maxlabel);}private String code() {int m = 0;for (int i = 0; i < 4; i++) {m *= 10;m += (int) (Math.random() * 9 + 1);}return ((Integer) m).toString();}public void cleanUserInfo() {this.textName.setText("");this.textPs.setText("");this.textCode.setText("");}public static void winMessage(String str) {// 提示窗口,有多个地方调用JOptionPane.showMessageDialog(null, str, "提示",JOptionPane.INFORMATION_MESSAGE);}@Overridepublic void actionPerformed(ActionEvent ac) {if (ac.getSource() == this.btn_login) {String name = textName.getText();String pswd = new String(textPs.getPassword());if (name.equals("") || pswd.equals("")) {winMessage("账号、密码不能为空!");cleanUserInfo();this.code2.setText(code());} else {
//              String code1 = textCode.getText();int code1 = 1;//               String code = code2.getText();
//              if(code1.equals("")){
//                  winMessage("验证码不能为空!");
//                  return;
//              }if (code1==1) {int choice;if (choice1.isSelected())choice = 0;elsechoice = 1;UserService userBiz = new UserServiceImpl();User user = userBiz.login(name, pswd, choice);if (user == null) {winMessage("用户名或密码不正确!登录失败!");cleanUserInfo();this.code2.setText(code());} else {if (user.getType() == 0) {new UserUi(user,1);} else if (user.getType() == 1) {new AdminMainView(user);}this.jf.dispose();}} else {winMessage("验证码不正确!");textCode.setText("");this.code2.setText(code());}}} else if (ac.getSource() == this.btn_rgist) {new RegisterUi();this.jf.dispose();// 点击按钮时,new一个frame,原先frame销毁}}}

用户登录成功后页面:UserUi

package view;import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
import java.awt.event.MouseListener;
import java.util.List;import javax.swing.*;
import javax.swing.event.TableModelListener;
import javax.swing.table.TableModel;import entity.Hall;
import entity.Movie;
import entity.Session;
import entity.Ticket;
import entity.User;
import service.CinemaService;
import service.HallService;
import service.MovieService;
import service.SessionService;
import service.TicketService;
import service.UserService;
import serviceimpl.CinemaServiceImpl;
import serviceimpl.HallServiceImpl;
import serviceimpl.MovieServiceImpl;
import serviceimpl.SessionServiceImpl;
import serviceimpl.TicketServiceImpl;
import serviceimpl.UserServiceImpl;public class UserUi implements ActionListener ,Runnable{private SessionService session = null;private MovieService ms = null;private CinemaService cs = null;private HallService hs = null;TicketService ts = null;private UserService us = null;private User user;private int defaultcard;private JFrame jf = new JFrame("电影购票系统");private Container con = jf.getContentPane();// 获得面板private Toolkit toolkit = Toolkit.getDefaultToolkit();private Dimension sc = toolkit.getScreenSize();// 获得屏幕尺寸private JLabel lb_welcome = null;JTable rtb = null;JTable rtb2 = null;private JButton btn_buy = null;private JButton btn_comment = new JButton("评价");private JButton btnsearch = new JButton("搜索影片");private JButton btn_balance = new JButton("充值/余额查询");private JMenuBar menuBar = new JMenuBar();private JLabel oldjl;private JLabel newjl;private JLabel card0 = new JLabel();private JButton updatepass = new JButton("修改用户信息");private JButton confirmUp = new JButton("确定");private JButton cancel = new JButton("取消");private JPasswordField oldpass = new JPasswordField();private JPasswordField newpass = new JPasswordField();private JLabel card1 = new JLabel();private JLabel card2 = new JLabel();private JLabel card3 = new JLabel();private JLabel card4 = new JLabel();private Font font = new Font("楷体", 0, 20);private Font font0 = new Font("楷体", 0, 25);private Font font1 = new Font("楷体", 0, 16);private Font font2 = new Font("楷体", 0, 15);private ImageIcon userinfobg = new ImageIcon("image/userinfo.jpg");private JTable tb = null;JButton[] card1_btn = null;int x = 0;int k = 0;List<Movie> mlist = null;List<Session> sessionlist = null;List<Ticket> ticketByUId = null;// 开启线程使得欢迎标签动起来// 这是单线程private class thread implements Runnable {@Overridepublic void run() {while (true) {// 死循环让其一直移动for (int i = 900; i > -700; i--) {// for(int i=-100;i<900;i++){try {Thread.sleep(10);// 让线程休眠100毫秒} catch (InterruptedException e) {e.printStackTrace();}lb_welcome.setLocation(i, 5);}}}}public UserUi(User user) {super();this.user = user;session = new SessionServiceImpl();ms = new MovieServiceImpl();cs = new CinemaServiceImpl();hs = new HallServiceImpl();ts = new TicketServiceImpl();us = new UserServiceImpl();showTicketTable(ticketByUId);showSessionTable(sessionlist);}public UserUi(User u, int defaultcard) {user = u;this.defaultcard = defaultcard;session = new SessionServiceImpl();ms = new MovieServiceImpl();cs = new CinemaServiceImpl();hs = new HallServiceImpl();ts = new TicketServiceImpl();us = new UserServiceImpl();mlist = ms.getAllMovielist();sessionlist = session.queryAllSession();//showTicketTable(ticketByUId);//   showSessionTable(sessionlist);// con.setLayout(null);jf.setSize(1000, 618);jf.setLocation((sc.width - 1000) / 2, (sc.height - 618) / 2);jf.setResizable(false);// 窗口大小不可变jf.setVisible(true);jf.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);con.setVisible(true);btn_buy = new JButton("购买");btn_buy.setEnabled(false);btn_buy.addActionListener(this);btn_buy.setFont(font1);btn_comment.addActionListener(this);btn_comment.setFont(font1);btn_comment.setEnabled(false);btn_comment.setVisible(false);btn_balance.addActionListener(this);btn_balance.setFont(font1);btnsearch.setBounds(300, 0, 150, 30);btnsearch.setFont(font1);btnsearch.addActionListener(this);lb_welcome = new JLabel("欢 迎 " + u.getUname() + " 进 入 用 户 功 能 界 面");lb_welcome.setFont(new Font("楷体", Font.BOLD, 34));lb_welcome.setForeground(Color.BLUE);jf.setJMenuBar(menuBar);menuBar.add(btn_buy);menuBar.add(btn_balance);menuBar.add(btnsearch);menuBar.add(btn_comment);menuBar.add(lb_welcome);JTabbedPane tabbedPane = new JTabbedPane(JTabbedPane.RIGHT);// 点击栏位置// 选项卡面板类tabbedPane.setFont(font);// 选项栏栏字体,字号tabbedPane.setTabLayoutPolicy(JTabbedPane.SCROLL_TAB_LAYOUT);// 每个选项卡滚动模式con.add(tabbedPane);// tabbedPane.setSelectedIndex(0); // 设置默认选中的card// card0 user.getUname()tabbedPane.addTab(u.getUname()+" 欢迎您", card0);JLabel maxlabel = new JLabel();JLabel[] card0_label = new JLabel[2];for (int i = 0; i < 2; i++) {card0_label[i] = new JLabel();maxlabel.add(card0_label[i]);card0_label[i].setFont(font0);card0_label[i].setBounds(40, 70 + (i * 50), 250, 50);}card0_label[0].setText("您的信息如下: ");card0_label[0].setForeground(Color.gray);card0_label[1].setText("用户名 : " + u.getUname());// user.getUname()card0_label[1].setForeground(Color.gray);updatepass.setBounds(40, 190, 120, 35);updatepass.addActionListener(this);updatepass.setBackground(Color.gray);updatepass.setFont(font);updatepass.setForeground(Color.white);maxlabel.add(updatepass);oldjl = new JLabel("原密码");oldjl.setBounds(40, 250, 90, 30);oldjl.setForeground(Color.LIGHT_GRAY);oldjl.setFont(font);oldjl.setVisible(false);maxlabel.add(oldjl);oldpass.setBounds(40, 280, 120, 30);oldpass.setBackground(Color.GRAY);oldpass.setFont(font);oldpass.setForeground(Color.white);oldpass.setEchoChar('*');oldpass.setVisible(false);maxlabel.add(oldpass);newjl = new JLabel("新密码");newjl.setBounds(40, 350, 90, 30);newjl.setFont(font);newjl.setForeground(Color.LIGHT_GRAY);newjl.setVisible(false);maxlabel.add(newjl);newpass.setBounds(40, 380, 120, 30);newpass.setBackground(Color.GRAY);newpass.setForeground(Color.white);newpass.setFont(font);newpass.setEchoChar('*');newpass.setVisible(false);maxlabel.add(newpass);cancel.setBounds(40, 500, 120, 30);maxlabel.add(cancel);cancel.setBackground(Color.GRAY);cancel.setForeground(Color.white);cancel.setFont(font);cancel.setVisible(false);cancel.addActionListener(this);confirmUp.setBounds(40, 445, 120, 30);confirmUp.setBackground(Color.GRAY);confirmUp.setForeground(Color.white);confirmUp.setFont(font);maxlabel.add(confirmUp);confirmUp.setVisible(false);confirmUp.addActionListener(this);maxlabel.setIcon(userinfobg);maxlabel.setBounds(0, 0, 850, 602);card0.add(maxlabel);// card1tabbedPane.addTab("热门影片", card1);movieShow(mlist);// card3tabbedPane.addTab("我的购票信息", card3);ticketByUId = ts.queryTicketByUserId(user.getUser_id());showTicketTable(ticketByUId);// card2未还记录tabbedPane.addTab("场次信息", card2);showSessionTable(sessionlist);tabbedPane.setSelectedIndex(defaultcard); // 设置默认选中的cardrtb.addMouseListener(new MouseAdapter() {@Overridepublic void mouseClicked(MouseEvent e) {if (rtb.getSelectedRow() != -1) {btn_buy.setEnabled(true);}}});rtb2.addMouseListener(new MouseAdapter() {@Overridepublic void mouseClicked(MouseEvent e) {if (rtb2.getSelectedRow() != -1) {btn_comment.setEnabled(true);}}});//new Thread(UserUi.this).start();}public void showTicketTable(List<Ticket> ticketByUId) {int recordrow = 0;if(ticketByUId!=null){recordrow = ticketByUId.size();}String[][] rinfo = new String[recordrow][8];for (int i = 0; i < recordrow; i++) {for (int j = 0; j < 8; j++)rinfo[i][j] = new String();int sessionid = ticketByUId.get(i).getSession_id();Session session2 = session.querySessionBySessionId(sessionid);// 获取session对象rinfo[i][0] = " " + user.getUname();rinfo[i][1] = cs.queryCinemaById(session2.getCinema_id()).getCname();// 获取电影院名称rinfo[i][2] = " " + hs.queryHallById(session2.getHall_id()).getHname();// 获取场厅名称rinfo[i][3] = ms.getMovieById(ticketByUId.get(i).getMovie_id()).getMname();rinfo[i][4] = " " + session2.getStarttime();rinfo[i][5] = " " + ms.getMovieById(session2.getMovie_id()).getDuration() + "分钟";rinfo[i][6] = " " + session2.getPrice() + "元";rinfo[i][7] = " " + ticketByUId.get(i).getSeat()+"号";}String[] tbheadnames = { "用户", "电影院名", "场厅", "电影名字", "开始时间", "播放时间", "价格", "座位号" };rtb2 = new JTable(rinfo, tbheadnames);rtb2.repaint();rtb2.setRowHeight(30);rtb2.setFont(font);rtb2.setEnabled(true);rtb2.getTableHeader().setFont(new Font("楷体", 1, 20));rtb2.getTableHeader().setBackground(Color.red);rtb2.getTableHeader().setReorderingAllowed(false); // 不可交换顺序rtb2.getTableHeader().setResizingAllowed(true); // 不可拉动表格JScrollPane sPane3 = new JScrollPane(rtb2);sPane3.setBounds(0, 0, 849, 580);// 大小刚好sPane3.setVisible(true);card3.add(sPane3);}public void movieShow(List<Movie> list) {int row = (list.size() + 3) / 4;int k = list.size();JLabel[][] btn_label = new JLabel[row][4];card1_btn = new JButton[k];JLabel[][] dname = new JLabel[row][4];JLabel[][] locality_language = new JLabel[row][4];JLabel[][] type_grade = new JLabel[row][4];JLabel allinfo = new JLabel();String[] cnames = { "", "", "", "" };// JTable tb = new JTable(btn_label,cnames);tb = new JTable(btn_label, cnames);allinfo.setSize(840, 402 * row);tb.setRowHeight(400);ImageIcon img = null;ImageIcon defaultImg = new ImageIcon("image/img.jpg");for (int i = 0; i < row; i++) {for (int j = 0; j < 4 && x < k; j++) {// list.get(i).getImg()if (list.get(x).getImg() != null) {img = new ImageIcon("image/" + list.get(x).getImg());} else {img = defaultImg;}card1_btn[x] = new JButton(img);card1_btn[x].setBounds(0, 0, 205, 300);card1_btn[x].addActionListener(this);dname[i][j] = new JLabel("片名:" + list.get(x).getMname());dname[i][j].setBounds(0, 310, 208, 30);dname[i][j].setFont(font);locality_language[i][j] = new JLabel("类型:" + list.get(x).getType() + "  时长:" + list.get(x).getDuration() + " 分钟");locality_language[i][j].setBounds(0, 340, 208, 30);locality_language[i][j].setFont(font1);type_grade[i][j] = new JLabel("描述:" + list.get(x).getDetail());type_grade[i][j].setBounds(0, 370, 208, 30);type_grade[i][j].setFont(font2);btn_label[i][j] = new JLabel();btn_label[i][j].setBounds(210 * j + 1, 400 * i, 208, 400);btn_label[i][j].add(dname[i][j]);btn_label[i][j].add(locality_language[i][j]);btn_label[i][j].add(type_grade[i][j]);btn_label[i][j].add(card1_btn[x]);allinfo.add(btn_label[i][j]);x++;}}tb.add(allinfo);tb.setEnabled(false);JScrollPane sPane = new JScrollPane(tb);sPane.setBounds(0, 0, 849, 550);sPane.setVisible(true);card1.add(sPane);}public void showSessionTable(List<Session> sessionlist) {int recordrow = 0;if(sessionlist!=null){recordrow = sessionlist.size();}String[][] rinfo = new String[recordrow][6];for (int i = 0; i < recordrow; i++) {for (int j = 0; j < 6; j++)rinfo[i][j] = new String();rinfo[i][0] = cs.queryCinemaById(sessionlist.get(i).getCinema_id()).getCname();rinfo[i][1] = hs.queryHallById(sessionlist.get(i).getHall_id()).getHname();rinfo[i][2] = ms.getMovieById(sessionlist.get(i).getMovie_id()).getMname();rinfo[i][3] = "  " + sessionlist.get(i).getStarttime();rinfo[i][4] = "  " + sessionlist.get(i).getPrice();rinfo[i][5] = "  " + sessionlist.get(i).getRemain();}String[] tbheadnames = { "电影院名称", "场厅名字", "电影名字", "开始时间", "价格", "剩余座位数" };rtb = new JTable(rinfo, tbheadnames);rtb.setRowHeight(40);rtb.setFont(font);rtb.setEnabled(true);rtb.getTableHeader().setFont(new Font("楷体", 1, 20));rtb.getTableHeader().setBackground(Color.orange);rtb.getTableHeader().setReorderingAllowed(false); // 不可交换顺序rtb.getTableHeader().setResizingAllowed(false); // 不可拉动表格rtb.repaint();JScrollPane sPane2 = new JScrollPane(rtb);// sPane.add()加按钮等一些控件时,要鼠标滑过,才会显示出来,直接在构造方法中传参则正常sPane2.setBounds(0, 0, 849, 580);// 大小刚好sPane2.setVisible(true);card2.add(sPane2);}@Overridepublic void actionPerformed(ActionEvent e) {for (int i = 0; i < mlist.size(); i++) {if (e.getSource() == this.card1_btn[i]) {new MovieInfoView(mlist.get(i), user);}}if (e.getSource() == this.btn_buy) {// 购买监听事件int row = rtb.getSelectedRow();List<Session> thisSession = session.queryAllSession();if (row != -1) {int remain = thisSession.get(row).getRemain() - 1;// 购票后,剩余座位需要减一int hall_id = thisSession.get(row).getHall_id();double balance = user.getBalance() - thisSession.get(row).getPrice();int flag = JOptionPane.showConfirmDialog(jf, "确认是否购买?", "确认信息", JOptionPane.YES_NO_OPTION);if (flag == JOptionPane.YES_OPTION) {if (remain < 0) {JOptionPane.showMessageDialog(jf, "无坐了,请更换影院或者场厅!");} else if (balance < 0) {JOptionPane.showMessageDialog(jf, "余额不足,请先去充值!");} else {new ZuoWeiFrame(user, hall_id, thisSession.get(row));}}}} else if (e.getSource() == this.btn_comment) {//评论int row = rtb2.getSelectedRow();new CommentView(ticketByUId.get(row));} else if (e.getSource() == this.btn_balance) {new ChargeView(user);} else if (e.getSource() == this.btnsearch) {new SearchMovieUi();} else if (e.getSource() == this.updatepass) {this.oldjl.setVisible(true);this.oldpass.setVisible(true);this.newjl.setVisible(true);this.newpass.setVisible(true);this.cancel.setVisible(true);this.confirmUp.setVisible(true);} else if (e.getSource() == this.confirmUp) {// 修改密码String oldpassw = new String(this.oldpass.getPassword());String newpassw = new String(this.newpass.getPassword());if ("".equals(oldpassw) || "".equals(newpassw)) {Login.winMessage("信息不完整!");} else if (!oldpassw.equals(user.getPasswd())) {Login.winMessage("原密码错误,无法更改!");} else {// this.user.setPasswd(newpassw);if (us.updataUser(user.getUser_id(), newpassw)) {Login.winMessage("密码修改成功!");this.oldjl.setText("");this.oldpass.setText("");this.newjl.setText("");this.newpass.setText("");this.oldjl.setVisible(false);this.oldpass.setVisible(false);this.newjl.setVisible(false);this.newpass.setVisible(false);this.cancel.setVisible(false);this.confirmUp.setVisible(false);} else {Login.winMessage("密码修改失败!");}}} else if (e.getSource() == this.cancel) {this.oldjl.setText("");this.oldpass.setText("");this.newjl.setText("");this.newpass.setText("");this.oldjl.setVisible(false);this.oldpass.setVisible(false);this.newjl.setVisible(false);this.newpass.setVisible(false);this.cancel.setVisible(false);this.confirmUp.setVisible(false);}}@Overridepublic void run() {while(true){try {rtb.validate();rtb2.validate();rtb.updateUI();rtb2.updateUI();System.out.println("Thread sleeping····");Thread.sleep(1000);} catch (InterruptedException e) {e.printStackTrace();}}}}

电影信息页面:MovieInfoView

package view;import java.awt.Color;
import java.awt.Font;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.text.SimpleDateFormat;
import java.util.List;import javax.swing.GroupLayout;
import javax.swing.GroupLayout.Alignment;
import javax.swing.ImageIcon;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JTable;
import javax.swing.JTextField;
import javax.swing.LayoutStyle.ComponentPlacement;
import javax.swing.border.EmptyBorder;
import javax.swing.table.DefaultTableModel;import entity.Comment;
import entity.Movie;
import entity.User;
import service.CommentService;
import service.MovieService;
import service.UserService;
import serviceimpl.CommentServiceImpl;
import serviceimpl.MovieServiceImpl;
import serviceimpl.UserServiceImpl;public class MovieInfoView extends JFrame {private JPanel contentPane;private JTable table;JScrollPane scrollPane = null;Movie movie = null;User user = null;MovieService ms = null;CommentService cs = null;UserService us = null;public MovieInfoView(Movie movie,User user) {this.movie = movie;this.user = user;ms = new MovieServiceImpl();cs = new CommentServiceImpl();us = new UserServiceImpl();setTitle("用户选票界面");setBounds(260, 130, 620, 600);contentPane = new JPanel();contentPane.setBorder(new EmptyBorder(5, 5, 5, 5));setContentPane(contentPane);JLabel lblNewLabel = new JLabel("New label");lblNewLabel.setIcon(new ImageIcon("image/"+movie.getImg()));JLabel label = new JLabel("正在热映···");JLabel lblNewLabel_1 = new JLabel("影片名:");lblNewLabel_1.setFont(new Font("楷体", Font.BOLD, 18));JLabel label_1 = new JLabel("类型:");JLabel label_2 = new JLabel("时长:");JLabel label_3 = new JLabel("电影详情:");JLabel label_4 = new JLabel(movie.getMname());label_4.setFont(new Font("楷体", Font.BOLD, 18));JButton btnNewButton = new JButton("购买");btnNewButton.setForeground(Color.BLUE);btnNewButton.addActionListener(new ActionListener() {@Overridepublic void actionPerformed(ActionEvent e) {new UserUi(user,3);movie.getMovie_id();List<Movie> movieByName = ms.getMovieByName(movie.getMname());for (Movie movie2 : movieByName) {System.out.println(movie2);}              MovieInfoView.this.dispose();}});JButton button = new JButton("取消");button.setForeground(Color.RED);button.addActionListener(new ActionListener() {public void actionPerformed(ActionEvent e) {MovieInfoView.this.dispose();}});scrollPane = new JScrollPane();scrollPane.setEnabled(false);scrollPane.setVisible(false);JButton button_1 = new JButton("查看评论");button_1.addActionListener(new ActionListener() {public void actionPerformed(ActionEvent e) {scrollPane.setVisible(true);showComment();table.repaint();}});button_1.setForeground(Color.MAGENTA);JLabel lblNewLabel_2 = new JLabel("欢迎来到电影详情界面");lblNewLabel_2.setFont(new Font("新宋体", Font.BOLD, 20));lblNewLabel_2.setForeground(Color.BLACK);JLabel label_5 = new JLabel(movie.getType());JLabel label_6 = new JLabel(movie.getDuration()+"分钟");JLabel label_7 = new JLabel(movie.getDetail());GroupLayout gl_contentPane = new GroupLayout(contentPane);gl_contentPane.setHorizontalGroup(gl_contentPane.createParallelGroup(Alignment.TRAILING).addGroup(gl_contentPane.createSequentialGroup().addGroup(gl_contentPane.createParallelGroup(Alignment.LEADING).addGroup(gl_contentPane.createSequentialGroup().addGap(218).addGroup(gl_contentPane.createParallelGroup(Alignment.LEADING).addGroup(gl_contentPane.createSequentialGroup().addComponent(label_3).addPreferredGap(ComponentPlacement.RELATED).addComponent(label_7, GroupLayout.PREFERRED_SIZE, 70, GroupLayout.PREFERRED_SIZE)).addGroup(gl_contentPane.createSequentialGroup().addComponent(lblNewLabel_1).addPreferredGap(ComponentPlacement.RELATED).addComponent(label_4, GroupLayout.PREFERRED_SIZE, 137, GroupLayout.PREFERRED_SIZE)).addGroup(gl_contentPane.createSequentialGroup().addGroup(gl_contentPane.createParallelGroup(Alignment.LEADING).addComponent(label_2).addGroup(gl_contentPane.createSequentialGroup().addPreferredGap(ComponentPlacement.RELATED).addComponent(label_1))).addGap(4).addGroup(gl_contentPane.createParallelGroup(Alignment.LEADING).addComponent(label_6, GroupLayout.PREFERRED_SIZE, 55, GroupLayout.PREFERRED_SIZE).addComponent(label_5, GroupLayout.PREFERRED_SIZE, 82, GroupLayout.PREFERRED_SIZE))).addGroup(gl_contentPane.createSequentialGroup().addComponent(btnNewButton).addGap(18).addComponent(button, GroupLayout.PREFERRED_SIZE, 71, GroupLayout.PREFERRED_SIZE).addGap(18).addComponent(button_1)))).addGroup(gl_contentPane.createSequentialGroup().addGap(36).addComponent(label)).addGroup(gl_contentPane.createSequentialGroup().addGap(170).addComponent(lblNewLabel_2)).addComponent(lblNewLabel, GroupLayout.PREFERRED_SIZE, 200, GroupLayout.PREFERRED_SIZE).addGroup(gl_contentPane.createSequentialGroup().addGap(84).addComponent(scrollPane, GroupLayout.PREFERRED_SIZE, 464, GroupLayout.PREFERRED_SIZE))).addContainerGap(46, Short.MAX_VALUE)));gl_contentPane.setVerticalGroup(gl_contentPane.createParallelGroup(Alignment.TRAILING).addGroup(gl_contentPane.createSequentialGroup().addGroup(gl_contentPane.createParallelGroup(Alignment.LEADING).addGroup(gl_contentPane.createSequentialGroup().addGap(46).addComponent(label).addPreferredGap(ComponentPlacement.UNRELATED).addComponent(lblNewLabel, GroupLayout.DEFAULT_SIZE, 277, Short.MAX_VALUE)).addGroup(gl_contentPane.createSequentialGroup().addContainerGap().addComponent(lblNewLabel_2).addGap(58).addGroup(gl_contentPane.createParallelGroup(Alignment.LEADING).addComponent(lblNewLabel_1).addComponent(label_4, GroupLayout.PREFERRED_SIZE, 21, GroupLayout.PREFERRED_SIZE)).addPreferredGap(ComponentPlacement.RELATED, 53, Short.MAX_VALUE).addGroup(gl_contentPane.createParallelGroup(Alignment.BASELINE).addComponent(label_1).addComponent(label_5)).addGap(18).addGroup(gl_contentPane.createParallelGroup(Alignment.BASELINE).addComponent(label_2).addComponent(label_6)).addGap(18).addGroup(gl_contentPane.createParallelGroup(Alignment.BASELINE).addComponent(label_3).addComponent(label_7)).addGap(125).addGroup(gl_contentPane.createParallelGroup(Alignment.BASELINE).addComponent(btnNewButton).addComponent(button).addComponent(button_1)))).addGap(28).addComponent(scrollPane, GroupLayout.PREFERRED_SIZE, 139, GroupLayout.PREFERRED_SIZE)));showComment();scrollPane.setViewportView(table);contentPane.setLayout(gl_contentPane);this.setVisible(true);}public void showComment(){List<Comment> commlist = cs.getAllCommentByMovieId(movie.getMovie_id());int recordrow = 0;if(commlist!=null){recordrow = commlist.size();}String[][] rinfo = new String[recordrow][3];SimpleDateFormat sdf = new SimpleDateFormat("yy-MM-dd hh:mm");for (int i = 0; i < recordrow; i++) {for (int j = 0; j < 3; j++){rinfo[i][j] = new String();rinfo[i][0] = us.queryUserById(commlist.get(i).getUser_id()).getUname();rinfo[i][1] = commlist.get(i).getContent();rinfo[i][2] = sdf.format(commlist.get(i).getDatetime());}}String[] tbheadnames = { "用户名", "评论内容", "评论时间" };table = new JTable(rinfo, tbheadnames);table.setBorder(null);table.setRowHeight(20);table.setEnabled(false);table.getColumnModel().getColumn(0).setPreferredWidth(30);table.getTableHeader().setFont(new Font("楷体", 1, 20));table.getTableHeader().setBackground(Color.CYAN);table.getTableHeader().setReorderingAllowed(false); // 不可交换顺序table.getTableHeader().setResizingAllowed(true); // 不可拉动表格scrollPane.add(table);scrollPane.setBorder(null);table.repaint();}
}

管理员页面:AdminUi

package view;import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.EventQueue;
import java.awt.Font;
import java.awt.GridLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;import javax.swing.BorderFactory;
import javax.swing.ImageIcon;
import javax.swing.JButton;
import javax.swing.JDesktopPane;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;import entity.User;public class AdminMainView extends JFrame {private JPanel main_panel = null;private JPanel fun_panel = null;private JDesktopPane fundesk = null;private JButton oper_User = null;private JButton oper_Cinema = null;private JButton oper_Hall = null;private JButton oper_Session = null;private JButton oper_Movie = null;private JButton back = null;private JLabel lb_welcome = null;private JLabel lb_image = null;private User admin = null;public AdminMainView() {init();RegisterListener();}public AdminMainView(User admin) {this.admin = admin;init();RegisterListener();}private void init() {main_panel = new JPanel(new BorderLayout());fun_panel = new JPanel(new GridLayout(8, 1, 0, 18));oper_User = new JButton("对用户进行操作");oper_Cinema = new JButton("对影院进行操作");oper_Hall = new JButton("对场厅进行操作");oper_Session = new JButton("对场次进行操作");oper_Movie = new JButton("对电影进行操作");back = new JButton("返回");fun_panel.add(new JLabel());fun_panel.add(oper_User);fun_panel.add(oper_Cinema);fun_panel.add(oper_Hall);fun_panel.add(oper_Session);fun_panel.add(oper_Movie);fun_panel.add(back);fun_panel.add(new JLabel());//设置面板外观fun_panel.setBorder(BorderFactory.createTitledBorder(BorderFactory.createRaisedBevelBorder(), "功能区"));lb_welcome = new JLabel("欢 迎 " + admin.getUname() + " 进 入 管 理 员 功 能 界 面");lb_welcome.setFont(new Font("楷体", Font.BOLD, 34));lb_welcome.setForeground(Color.BLUE);fundesk = new JDesktopPane();ImageIcon img = new ImageIcon(ClassLoader.getSystemResource("image/beijing2.jpg"));lb_image = new JLabel(img);lb_image.setBounds(10, 10, img.getIconWidth(), img.getIconHeight());fundesk.add(lb_image, new Integer(Integer.MIN_VALUE));main_panel.add(lb_welcome, BorderLayout.NORTH);main_panel.add(fun_panel, BorderLayout.EAST);main_panel.add(fundesk, BorderLayout.CENTER);//为了不让线程阻塞,来调用线程//放入队列当中EventQueue.invokeLater(new Runnable() {         public void run() {new Thread(new thread()).start();               }});this.setTitle("管理员功能界面");this.getContentPane().add(main_panel);this.setSize(880, 600);this.setResizable(false);this.setVisible(true);this.setLocationRelativeTo(null);this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);}//开启线程使得欢迎标签动起来//这是单线程private class thread implements Runnable{@Overridepublic void run() {while(true){//死循环让其一直移动for(int i=900;i>-700;i--){//for(int i=-100;i<900;i++){try {Thread.sleep(10);//让线程休眠100毫秒} catch (InterruptedException e) {                       e.printStackTrace();}lb_welcome.setLocation(i, 5);}}}}private void RegisterListener() {oper_User.addActionListener(new ActionListener() {@Overridepublic void actionPerformed(ActionEvent e) {operUserView ouv = new operUserView();fundesk.add(ouv);ouv.toFront();}});oper_Cinema.addActionListener(new ActionListener() {@Overridepublic void actionPerformed(ActionEvent e) {operCinemaView ocv = new operCinemaView();fundesk.add(ocv);ocv.toFront();}});oper_Hall.addActionListener(new ActionListener() {@Overridepublic void actionPerformed(ActionEvent e) {operHallView ohv = new operHallView();fundesk.add(ohv);ohv.toFront();}});oper_Session.addActionListener(new ActionListener() {@Overridepublic void actionPerformed(ActionEvent e) {operSessionView osv = new operSessionView();fundesk.add(osv);osv.toFront();}});oper_Movie.addActionListener(new ActionListener() {@Overridepublic void actionPerformed(ActionEvent e) {operMovieView omv = new operMovieView();fundesk.add(omv);omv.toFront();}});back.addActionListener(new ActionListener() {@Overridepublic void actionPerformed(ActionEvent e) {new Login();AdminMainView.this.dispose();}});}
}

由于篇幅有限,不能把所有代码贴上来:

运行截图

普通用户界面:

登录:

主页面:

购买影片:

在线选座:

我的购票信息:

管理员界面:
影院管理:

场厅、场次管理:


电影管理:

(代码由于太多贴不全,如果有问题或者需要所有源码,可以加我V: Code2Life2)

Java Swing+Mysql电影购票系统(普通用户/管理员登录+充值购票+影院管理)相关推荐

  1. 基于java+swing+mysql飞机票预订系统

    基于java+swing+mysql飞机票预订系统 一.系统介绍 二.功能展示 1.项目内容 2.项目骨架 3.数据库表 4.注册窗口 5.登录窗口 6.用户-主窗口 7.用户-查询航班 8.用户-- ...

  2. Java Swing Mysql学生选课系统

    此篇是基于Java Swing Mysql学生选课系统的第二阶段 主要功能: 课程添加.编辑.查询.删除.选课.退课.修改已选课程.以及老师.管理员.学生三种角色的权限分配 开发环境: 开发工具:Ec ...

  3. java swing课程表设计_阶段2:手把手快速做一个Java swing mysql学生选课系统附带完整源码及视频开发教程【猿来入此自营】...

    <p> <span style="font-family:微软雅黑;font-size:16px;color:#666666;background:#FFFFFF;line ...

  4. Eclipse+Java+Swing+Mysql实现电影购票系统【建议收藏】

    目录 一.系统介绍 1.开发环境 2.技术选型 3.系统功能 4.数据库 5.工程截图 二.系统展示 1.注册系统 2.登录系统 3.用户-欢迎界面 4.用户-影片排行榜 5.用户-购票信息 6.用户 ...

  5. Java+Swing+mysql用户信息管理系统

    Java+Swing+mysql用户信息管理系统 一.系统介绍 二.功能展示 1.管理员登陆 2.用户信息查询 3.用户信息添加 4.用户信息修改 5.用户信息删除 三.项目相关 3.1 乱码问题 3 ...

  6. Eclipse+Java+Swing+Mysql实现医院挂号系统

    目录 一.系统介绍 1.运行环境 2.技术说明 3.系统功能 4.数据库 二.系统实现 1.登陆界面 2.错误登陆 3.病人登陆,挂号界面 4.科室过滤 5.医生过滤 6.挂号成功 7.医生界面-病人 ...

  7. Eclipse+Java+Swing+Mysql实现自助存取款机(ATM)系统

    目录 一.系统介绍 1.开发环境 2.技术选型 3.系统功能 4.数据库 5.工程截图 二.系统展示 1.注册页面 2.登录页面 3.主页面 4.取款 5.存款 6.转账 7.余额查询 三.部分代码 ...

  8. 基于java+mysql的Swing+MySQL物业收费系统(java+gui+文档)

    基于java+mysql的Swing+MySQL物业收费系统(java+gui+文档) 运行环境 Java≥8.MySQL≥5.7 开发工具 eclipse/idea/myeclipse/sts等均可 ...

  9. Eclipse+Java+Swing+Mysql实现仓库管理系统

    目录 一.系统介绍 1.软件环境 2.系统功能 3.数据库 4.工程截图 二.系统展示 1.用户-登录页 2.用户-登录成功 3.用户-主页面 4.用户-用户管理-个人信息 5.用户-用户管理-修改密 ...

最新文章

  1. 用matlab做单摆,单摆模型MATLAB程序
  2. gif透明背景动画_前端基础系列之bmp、jpg、png、gif、svg常用图片格式浅谈(二)...
  3. java一句话木马连接_webshell一句话木马大全
  4. PageOffice实现js执行在线编辑时Word文档中的宏命令
  5. httpcline转发_如何实现Http请求报头的自动转发[应用篇]
  6. HDU1002 大数相加
  7. 召回粗排精排-级联漏斗(下)
  8. 函数式编程4-高阶函数
  9. 测试POSIX、System V消息队列时延和性能
  10. Eureka和Zookeeper区别 —— 杂记
  11. 严防ARP病毒的六个步骤
  12. OpenVINO(Version: 2021.3)系统需求
  13. 地址解析协议(Address Resolution Protocol,ARP)
  14. spss统计分析基础教程(上)--自学
  15. IplImage详解
  16. 计算机控制系统的数字量输出通道由,计算机控制-习题
  17. art-高光贴图制作
  18. MySQL 8.0+版本 导入.csv文件错误,出错号:1148 The used command is not allowed with this MySQL version问题
  19. r语言 新增一列数字类型_R语言实战(2)——创建数据集【学习分享】
  20. 矩阵论 - 7 - 求解Ax=0:主变量、特解

热门文章

  1. MD5、SHA1和android apk签名杂谈
  2. Python实现数列的单调有界定理
  3. 排序在实际生活中的应用
  4. 神经网络控制法的工作原理,什么是神经网络控制
  5. Git分布式版本工具的部署与使用
  6. LaTeX数学公式编辑(2)——跨页公式
  7. learn python中文版 买_安装和准备 | Learn Python the Hard Way 中文版
  8. 基于matlab的一元线性回归原理
  9. github的tag
  10. springBoot中jetty tomcat undertow对比与undertow线程池配置