Eclipse+Java+Swing+Mysql實現電影購票系統(詳細代碼)
一、系統介紹
1.開發環境
開發工具:Eclipse2021
JDK版本:jdk1.8
Mysql版本:8.0.13
2.技術選型
Java+Swing+Mysql
3.系統功能
註冊系統,登錄系統;
3.1.用戶
- 1.歡迎頁:修改用戶姓名和密碼;
- 2.碟片排行榜:影片的詳細信息;
- 3.購票信息:已購買車票的信息;
- 4.場次信息:電影場次的詳細信息;
- 5.充值:充值餘額;
- 6.搜索電影:搜索電影的詳細信息;
3.2.管理員
- 1.對用戶進行操作:用戶信息的查詢、刪除;
- 2.對影院進行操作:影院信息的查詢、刪除、增加;
- 3.對場廳進行操作:場廳信息的查詢、刪除、增加;
- 4.對場次進行操作:場次信息的查詢、刪除、增加;
- 5.對電影進行操作:電影信息的查詢、刪除、增加;
4.數據庫
/* Navicat Premium Data Transfer Source Server : MySQL Source Server Type : MySQL Source Server Version : 80013 Source Host : 127.0.0.1:3306 Source Schema : swing_movie_house Target Server Type : MySQL Target Server Version : 80013 File Encoding : 65001 Date: 21/09/2021 12:33:55 */ SET NAMES utf8mb4; SET FOREIGN_KEY_CHECKS = 0; -- ---------------------------- -- Table structure for cinema -- ---------------------------- DROP TABLE IF EXISTS `cinema`; CREATE TABLE `cinema` ( `cinema_id` int(11) NOT NULL AUTO_INCREMENT, `cname` varchar(255) CHARACTER SET utf8 COLLATE utf8_bin NULL DEFAULT NULL, `address` varchar(255) CHARACTER SET utf8 COLLATE utf8_bin NULL DEFAULT NULL, PRIMARY KEY (`cinema_id`) USING BTREE ) ENGINE = InnoDB AUTO_INCREMENT = 8 CHARACTER SET = utf8 COLLATE = utf8_bin ROW_FORMAT = Dynamic; -- ---------------------------- -- Records of cinema -- ---------------------------- INSERT INTO `cinema` VALUES (6, '光明影院', '湖北武漢'); INSERT INTO `cinema` VALUES (7, '大同影院', '湖南長沙'); -- ---------------------------- -- Table structure for comment -- ---------------------------- DROP TABLE IF EXISTS `comment`; CREATE TABLE `comment` ( `comment_id` int(11) NOT NULL AUTO_INCREMENT, `user_id` int(11) NOT NULL, `movie_id` int(11) NOT NULL, `content` varchar(255) CHARACTER SET utf8 COLLATE utf8_bin NULL DEFAULT NULL, `datetime` datetime(0) NULL DEFAULT NULL, PRIMARY KEY (`comment_id`) USING BTREE, INDEX `comment_ibfk_1`(`user_id`) USING BTREE, INDEX `comment_ibfk_2`(`movie_id`) USING BTREE, CONSTRAINT `comment_ibfk_1` FOREIGN KEY (`user_id`) REFERENCES `user` (`user_id`) ON DELETE CASCADE ON UPDATE RESTRICT, CONSTRAINT `comment_ibfk_2` FOREIGN KEY (`movie_id`) REFERENCES `movie` (`movie_id`) ON DELETE CASCADE ON UPDATE RESTRICT ) ENGINE = InnoDB AUTO_INCREMENT = 10 CHARACTER SET = utf8 COLLATE = utf8_bin ROW_FORMAT = Dynamic; -- ---------------------------- -- Records of comment -- ---------------------------- -- ---------------------------- -- Table structure for hall -- ---------------------------- DROP TABLE IF EXISTS `hall`; CREATE TABLE `hall` ( `hall_id` int(11) NOT NULL AUTO_INCREMENT, `hname` varchar(255) CHARACTER SET utf8 COLLATE utf8_bin NULL DEFAULT NULL, `capacity` int(11) NULL DEFAULT NULL, `cinema_id` int(11) NOT NULL, PRIMARY KEY (`hall_id`) USING BTREE, INDEX `hall_ibfk_1`(`cinema_id`) USING BTREE, CONSTRAINT `hall_ibfk_1` FOREIGN KEY (`cinema_id`) REFERENCES `cinema` (`cinema_id`) ON DELETE CASCADE ON UPDATE CASCADE ) ENGINE = InnoDB AUTO_INCREMENT = 12 CHARACTER SET = utf8 COLLATE = utf8_bin ROW_FORMAT = Dynamic; -- ---------------------------- -- Records of hall -- ---------------------------- INSERT INTO `hall` VALUES (12, '1廳', 50, 6); -- ---------------------------- -- Table structure for movie -- ---------------------------- DROP TABLE IF EXISTS `movie`; CREATE TABLE `movie` ( `movie_id` int(11) NOT NULL AUTO_INCREMENT, `mname` varchar(255) CHARACTER SET utf8 COLLATE utf8_bin NULL DEFAULT NULL, `type` varchar(255) CHARACTER SET utf8 COLLATE utf8_bin NULL DEFAULT NULL COMMENT '電影類型', `detail` varchar(255) CHARACTER SET utf8 COLLATE utf8_bin NULL DEFAULT NULL, `duration` int(11) NULL DEFAULT NULL, `img` varchar(255) CHARACTER SET utf8 COLLATE utf8_bin NULL DEFAULT NULL COMMENT '保存圖片名稱', PRIMARY KEY (`movie_id`) USING BTREE ) ENGINE = InnoDB AUTO_INCREMENT = 14 CHARACTER SET = utf8 COLLATE = utf8_bin ROW_FORMAT = Dynamic; -- ---------------------------- -- Records of movie -- ---------------------------- INSERT INTO `movie` VALUES (12, '八佰', '抗戰', '八佰', 120, NULL); INSERT INTO `movie` VALUES (13, '春秋', '歷史', '春秋', 150, NULL); INSERT INTO `movie` VALUES (15, '1', '1', '1', 1, NULL); -- ---------------------------- -- Table structure for session -- ---------------------------- DROP TABLE IF EXISTS `session`; CREATE TABLE `session` ( `session_id` int(11) NOT NULL AUTO_INCREMENT, `hall_id` int(11) NOT NULL, `cinema_id` int(11) NOT NULL, `movie_id` int(11) NOT NULL, `starttime` varchar(11) CHARACTER SET utf8 COLLATE utf8_bin NULL DEFAULT NULL, `price` double NULL DEFAULT NULL, `remain` int(11) NULL DEFAULT NULL, PRIMARY KEY (`session_id`) USING BTREE, INDEX `hall_id`(`hall_id`) USING BTREE, INDEX `cinema_id`(`cinema_id`) USING BTREE, INDEX `movie_id`(`movie_id`) USING BTREE, CONSTRAINT `session_ibfk_1` FOREIGN KEY (`hall_id`) REFERENCES `hall` (`hall_id`) ON DELETE RESTRICT ON UPDATE RESTRICT, CONSTRAINT `session_ibfk_2` FOREIGN KEY (`cinema_id`) REFERENCES `cinema` (`cinema_id`) ON DELETE RESTRICT ON UPDATE RESTRICT, CONSTRAINT `session_ibfk_3` FOREIGN KEY (`movie_id`) REFERENCES `movie` (`movie_id`) ON DELETE RESTRICT ON UPDATE RESTRICT ) ENGINE = InnoDB AUTO_INCREMENT = 14 CHARACTER SET = utf8 COLLATE = utf8_bin ROW_FORMAT = Dynamic; -- ---------------------------- -- Records of session -- ---------------------------- INSERT INTO `session` VALUES (14, 12, 6, 12, '09:00:00', 50, 47); -- ---------------------------- -- Table structure for ticket -- ---------------------------- DROP TABLE IF EXISTS `ticket`; CREATE TABLE `ticket` ( `ticket_id` int(11) NOT NULL AUTO_INCREMENT, `user_id` int(11) NOT NULL, `movie_id` int(11) NOT NULL, `session_id` int(11) NOT NULL, `seat` varchar(255) CHARACTER SET utf8 COLLATE utf8_bin NULL DEFAULT NULL, PRIMARY KEY (`ticket_id`) USING BTREE, INDEX `ticket_ibfk_1`(`user_id`) USING BTREE, INDEX `ticket_ibfk_2`(`movie_id`) USING BTREE, INDEX `ticket_ibfk_3`(`session_id`) USING BTREE, CONSTRAINT `ticket_ibfk_1` FOREIGN KEY (`user_id`) REFERENCES `user` (`user_id`) ON DELETE CASCADE ON UPDATE CASCADE, CONSTRAINT `ticket_ibfk_2` FOREIGN KEY (`movie_id`) REFERENCES `movie` (`movie_id`) ON DELETE CASCADE ON UPDATE CASCADE, CONSTRAINT `ticket_ibfk_3` FOREIGN KEY (`session_id`) REFERENCES `session` (`session_id`) ON DELETE CASCADE ON UPDATE CASCADE ) ENGINE = InnoDB AUTO_INCREMENT = 64 CHARACTER SET = utf8 COLLATE = utf8_bin ROW_FORMAT = Dynamic; -- ---------------------------- -- Records of ticket -- ---------------------------- INSERT INTO `ticket` VALUES (64, 1, 12, 14, '3'); -- ---------------------------- -- Table structure for user -- ---------------------------- DROP TABLE IF EXISTS `user`; CREATE TABLE `user` ( `user_id` int(11) NOT NULL AUTO_INCREMENT, `uname` varchar(255) CHARACTER SET utf8 COLLATE utf8_bin NULL DEFAULT NULL, `passwd` varchar(255) CHARACTER SET utf8 COLLATE utf8_bin NULL DEFAULT NULL, `type` int(11) NULL DEFAULT 0 COMMENT '0代表普通用戶,1代表管理員', `balance` double NULL DEFAULT NULL, `level` int(11) NULL DEFAULT NULL, PRIMARY KEY (`user_id`) USING BTREE ) ENGINE = InnoDB AUTO_INCREMENT = 11 CHARACTER SET = utf8 COLLATE = utf8_bin ROW_FORMAT = Dynamic; -- ---------------------------- -- Records of user -- ---------------------------- INSERT INTO `user` VALUES (1, 'user', 'user', 0, 161, 1); INSERT INTO `user` VALUES (2, 'admin', 'admin', 1, 1, 1); SET FOREIGN_KEY_CHECKS = 1;
5.工程截圖
二、系統展示
1.註冊系統
2.登錄系統
3.用戶-歡迎界面
4.用戶-影片排行榜
5.用戶-購票信息
6.用戶-場次信息
7.用戶-充值餘額
8.用戶-搜索電影
9.管理員-首頁
10.管理員-對用戶進行操作
11.管理員-對影院進行操作
12.管理員-對場廳進行操作
13.管理員-對場次進行操作
14.管理員-對電影進行操作
三、部分代碼
AdminMainView.java
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/beijjing3.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 { @Override public 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() { @Override public void actionPerformed(ActionEvent e) { operUserView ouv = new operUserView(); fundesk.add(ouv); ouv.toFront(); } }); oper_Cinema.addActionListener(new ActionListener() { @Override public void actionPerformed(ActionEvent e) { operCinemaView ocv = new operCinemaView(); fundesk.add(ocv); ocv.toFront(); } }); oper_Hall.addActionListener(new ActionListener() { @Override public void actionPerformed(ActionEvent e) { operHallView ohv = new operHallView(); fundesk.add(ohv); ohv.toFront(); } }); oper_Session.addActionListener(new ActionListener() { @Override public void actionPerformed(ActionEvent e) { operSessionView osv = new operSessionView(); fundesk.add(osv); osv.toFront(); } }); oper_Movie.addActionListener(new ActionListener() { @Override public void actionPerformed(ActionEvent e) { operMovieView omv = new operMovieView(); fundesk.add(omv); omv.toFront(); } }); back.addActionListener(new ActionListener() { @Override public void actionPerformed(ActionEvent e) { new Login(); AdminMainView.this.dispose(); } }); } }
MovieInfoView.java
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); this.setLocationRelativeTo(null); 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() { @Override public 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(); } }
operCinemaView.java
package view; import java.awt.BorderLayout; import java.awt.GridLayout; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.awt.event.MouseAdapter; import java.awt.event.MouseEvent; import java.util.ArrayList; import java.util.List; import javax.swing.BorderFactory; import javax.swing.JButton; import javax.swing.JComboBox; import javax.swing.JInternalFrame; import javax.swing.JLabel; import javax.swing.JOptionPane; import javax.swing.JPanel; import javax.swing.JTable; import javax.swing.JTextField; import javax.swing.event.TableModelListener; import javax.swing.table.TableModel; import entity.Cinema; import service.CinemaService; import serviceimpl.CinemaServiceImpl; public class operCinemaView extends JInternalFrame { private JPanel pl_main = null; private JPanel pl_button = null; private JPanel pl_text = null; private JTable table = null; private JButton btn_add = null; private JButton btn_query = null; private JButton btn_del = null; private JComboBox<String> cb_query = null; private JButton btn_back = null; private JLabel lb_name = null; private JLabel lb_address = null; private JTextField tf_qname = null;// 查詢時輸入的名稱 private JTextField tf_name = null;// 添加輸入的名稱 private JTextField tf_address = null; private CinemaService cinemabiz = null; private List<Cinema> cinemaList = null; private CinemaInfoTableModel infoTableModel = null; // private List<Hall> hallList = null; // private List<Session> sessionList = null; // private HallBiz hallbiz = null; // private SessionBiz sessionbiz = null; public operCinemaView() { cinemabiz = new CinemaServiceImpl(); // hallbiz = new HallBizImpl(); // sessionbiz = new SessionBizImpl(); init(); RegisterListener(); } private void init() { pl_main = new JPanel(new BorderLayout()); pl_button = new JPanel(new GridLayout(8, 1, 0, 40)); pl_text = new JPanel(new GridLayout(1, 4)); cinemaList = new ArrayList<Cinema>(); table = new JTable(); refreshTable(cinemaList); cb_query = new JComboBox<String>(new String[] { "查詢所有影院", "按名字查找影院" }); tf_qname = new JTextField(8); tf_qname.setEnabled(false); btn_query = new JButton("查詢"); btn_add = new JButton("增添影院"); btn_del = new JButton("刪除影院"); btn_del.setEnabled(false); btn_back = new JButton("退出窗口"); lb_name = new JLabel("影院名稱: "); tf_name = new JTextField(8); lb_address = new JLabel("影院地址: "); tf_address = new JTextField(12); pl_main.add(table.getTableHeader(), BorderLayout.PAGE_START); pl_main.add(table); pl_main.setBorder(BorderFactory.createTitledBorder(BorderFactory.createEtchedBorder(null, null), "查詢信息")); pl_button.add(new JLabel()); pl_button.add(cb_query); pl_button.add(tf_qname); pl_button.add(btn_query); pl_button.add(btn_add); pl_button.add(btn_del); pl_button.add(new JLabel()); pl_button.add(btn_back); pl_text.add(lb_name); pl_text.add(tf_name); pl_text.add(lb_address); pl_text.add(tf_address); this.add(pl_main, BorderLayout.CENTER); this.add(pl_button, BorderLayout.EAST); this.add(pl_text, BorderLayout.NORTH); this.setVisible(true); this.setTitle("影院操作界面"); this.setSize(700, 530); this.setIconifiable(true); this.setClosable(true); this.setDefaultCloseOperation(DISPOSE_ON_CLOSE); } private void RegisterListener() { table.addMouseListener(new MouseAdapter() { @Override public void mouseClicked(MouseEvent e) { if (table.getSelectedRow() != -1) { btn_del.setEnabled(true); } int row = table.getSelectedRow(); String name = table.getValueAt(row, 1).toString(); String address = table.getValueAt(row, 2).toString(); tf_name.setText(name); tf_address.setText(address); } }); cb_query.addActionListener(new ActionListener() { @Override public void actionPerformed(ActionEvent e) { if (cb_query.getSelectedIndex() + 1 == 2) { tf_qname.setEnabled(true); } else { tf_qname.setEnabled(false); } } }); btn_query.addActionListener(new ActionListener() { @Override public void actionPerformed(ActionEvent e) { if (cb_query.getSelectedIndex() + 1 == 1) { cinemaList = cinemabiz.queryAllCinema(); refreshTable(cinemaList); } else { String name = tf_qname.getText().trim(); cinemaList = cinemabiz.queryCinemaByName(name); refreshTable(cinemaList); } } }); btn_add.addActionListener(new ActionListener() { @Override public void actionPerformed(ActionEvent e) { String name = tf_name.getText().trim(); String address = tf_address.getText().trim(); if (name.equals("")) { JOptionPane.showMessageDialog(operCinemaView.this, "影院名稱不能為空!"); } else if (address.equals("")) { JOptionPane.showMessageDialog(operCinemaView.this, "影院地址不能為空!"); } else { int flag = JOptionPane.showConfirmDialog(operCinemaView.this, "確認是否添加?", "確認信息", JOptionPane.YES_NO_OPTION); if (flag == JOptionPane.YES_OPTION) { Cinema cinema = new Cinema(name, address); boolean res = cinemabiz.addCinema(cinema); if (res) { cinemaList = cinemabiz.queryAllCinema(); refreshTable(cinemaList); JOptionPane.showMessageDialog(operCinemaView.this, "添加成功!"); } else { JOptionPane.showMessageDialog(operCinemaView.this, "添加失敗!"); } } } } }); btn_del.addActionListener(new ActionListener() { @Override public void actionPerformed(ActionEvent e) { int row = table.getSelectedRow(); int id = (Integer) table.getValueAt(row, 0); int flag = JOptionPane.showConfirmDialog(operCinemaView.this, "確認是否刪除此影院?", "確認信息", JOptionPane.YES_NO_OPTION); if (flag == JOptionPane.YES_OPTION) { boolean res = cinemabiz.deleteCinemaById(id); /* * if(res) { //更新數據 hallList = hallbiz.queryAllHall(); int hid = 0; for(int i = * 0; i < hallList.size(); i++) { if(id == hallList.get(i).getCid()) { hid = * hallList.get(i).getId(); hallbiz.delHall(hid); } } sessionList = * sessionbiz.queryAllSession(); for(int i = 0; i < sessionList.size(); i++) { * if(hid == sessionList.get(i).getHid()) { * sessionbiz.delSession(sessionList.get(i).getId()); } } } */ cinemaList = cinemabiz.queryAllCinema(); refreshTable(cinemaList); } } }); btn_back.addActionListener(new ActionListener() { @Override public void actionPerformed(ActionEvent e) { operCinemaView.this.dispose(); } }); } public class CinemaInfoTableModel implements TableModel { public List<Cinema> cinemaList = null; public CinemaInfoTableModel(List<Cinema> cinemaList) { this.cinemaList = cinemaList; } @Override public int getRowCount() { return cinemaList.size(); } @Override public int getColumnCount() { return 3; } @Override public String getColumnName(int columnIndex) { if (columnIndex == 0) { return "影院ID"; } else if (columnIndex == 1) { return "影院名稱"; } else if (columnIndex == 2) { return "影院地址"; } else { return "出錯"; } } @Override public Class<?> getColumnClass(int columnIndex) { return String.class; } @Override public boolean isCellEditable(int rowIndex, int columnIndex) { return false; } @Override public Object getValueAt(int rowIndex, int columnIndex) { Cinema cinema = cinemaList.get(rowIndex); if (columnIndex == 0) { return cinema.getCinema_id(); } else if (columnIndex == 1) { return cinema.getCname(); } else if (columnIndex == 2) { return cinema.getAddress(); } else { return "出錯"; } } @Override public void setValueAt(Object aValue, int rowIndex, int columnIndex) { // TODO Auto-generated method stub } @Override public void addTableModelListener(TableModelListener l) { // TODO Auto-generated method stub } @Override public void removeTableModelListener(TableModelListener l) { // TODO Auto-generated method stub } } private void refreshTable(List<Cinema> cinemaList) { infoTableModel = new CinemaInfoTableModel(cinemaList); table.setModel(infoTableModel); table.setRowHeight(20); } }
operHallView.java
package view; import java.awt.BorderLayout; import java.awt.GridLayout; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.awt.event.MouseAdapter; import java.awt.event.MouseEvent; import java.util.ArrayList; import java.util.List; import javax.swing.BorderFactory; import javax.swing.JButton; import javax.swing.JInternalFrame; import javax.swing.JLabel; import javax.swing.JOptionPane; import javax.swing.JPanel; import javax.swing.JTable; import javax.swing.JTextField; import javax.swing.event.TableModelListener; import javax.swing.table.TableModel; import entity.Cinema; import entity.Hall; import entity.Session; import service.CinemaService; import service.HallService; import serviceimpl.CinemaServiceImpl; import serviceimpl.HallServiceImpl; import serviceimpl.SessionServiceImpl; import util.Check; public class operHallView extends JInternalFrame { private JPanel pl_main = null; private JPanel pl_button = null; private JPanel pl_text = null; private JTable table = null; private JButton btn_add = null; private JButton btn_del = null; private JButton btn_query = null; private JButton btn_back = null; private JLabel lb_name = null; private JLabel lb_cid = null; private JLabel lb_capacity = null; private JTextField tf_name = null;// 添加輸入的名稱 private JTextField tf_cid = null;// 添加時輸入的所屬影院id private JTextField tf_capacity = null;// 添加輸入的名稱 private HallService hallbiz = null; private CinemaService cinemabiz = null; private SessionServiceImpl sessionbiz = null; private List<Hall> hallList = null; private HallInfoTableModel infoTableModel = null; public operHallView() { hallbiz = new HallServiceImpl(); cinemabiz = new CinemaServiceImpl();// 查詢出所有的影院與cid進行匹配,顯示影院名稱 sessionbiz = new SessionServiceImpl(); init(); RegisterListener(); } private void init() { pl_main = new JPanel(new BorderLayout()); pl_button = new JPanel(new GridLayout(6, 1, 0, 40)); pl_text = new JPanel(new GridLayout(1, 6)); hallList = new ArrayList<Hall>(); table = new JTable(); // 綁定JTabel,呈現數據 refreshTable(hallList); btn_query = new JButton("查詢所有場廳"); btn_add = new JButton("增添場廳"); btn_del = new JButton("刪除場廳"); btn_del.setEnabled(false); btn_back = new JButton("退出窗口"); tf_name = new JTextField(8); tf_cid = new JTextField(8); tf_capacity = new JTextField(8); lb_name = new JLabel("場廳名稱"); lb_cid = new JLabel("所屬影院id"); lb_capacity = new JLabel("場廳容量"); pl_main.setBorder(BorderFactory.createTitledBorder(BorderFactory.createEtchedBorder(null, null), "查詢信息")); pl_main.add(table.getTableHeader(), BorderLayout.PAGE_START); pl_main.add(table); this.add(pl_main, BorderLayout.CENTER); pl_button.add(new JLabel()); pl_button.add(btn_query); pl_button.add(btn_add); pl_button.add(btn_del); pl_button.add(new JLabel()); pl_button.add(btn_back); this.add(pl_button, BorderLayout.EAST); pl_text.add(lb_name); pl_text.add(tf_name); pl_text.add(lb_cid); pl_text.add(tf_cid); pl_text.add(lb_capacity); pl_text.add(tf_capacity); this.add(pl_text, BorderLayout.NORTH); this.setVisible(true); this.setTitle("場廳操作界面"); this.setSize(700, 530); this.setIconifiable(true); this.setClosable(true); this.setDefaultCloseOperation(DISPOSE_ON_CLOSE); } private void RegisterListener() { table.addMouseListener(new MouseAdapter() { @Override public void mouseClicked(MouseEvent e) { // 加入選中一行,刪除按鈕變為可用 if (table.getSelectedRow() != -1) { btn_del.setEnabled(true); } int row = table.getSelectedRow(); String name = table.getValueAt(row, 1).toString(); String cid = table.getValueAt(row, 2).toString(); String capacity = table.getValueAt(row, 3).toString(); tf_name.setText(name); tf_cid.setText(cid); tf_capacity.setText(capacity); } }); btn_add.addActionListener(new ActionListener() { @Override public void actionPerformed(ActionEvent e) { String name = tf_name.getText().trim(); String cid = tf_cid.getText().trim(); String capacity = tf_capacity.getText().trim(); if (name.equals("")) { JOptionPane.showMessageDialog(operHallView.this, "場廳名稱不能為空!"); } else if (cid.equals("")) { JOptionPane.showMessageDialog(operHallView.this, "所屬影院id不能為空!"); } else if (capacity.equals("")) { JOptionPane.showMessageDialog(operHallView.this, "場廳容量不能為空!"); } else if (!Check.isNumber(cid)) { JOptionPane.showMessageDialog(operHallView.this, "所屬影院id隻能為數字!"); } else if (!Check.isNumber(capacity)) { JOptionPane.showMessageDialog(operHallView.this, "場廳容量隻能為數字!"); } else { int flag = JOptionPane.showConfirmDialog(operHallView.this, "是否添加此場廳?", "確認信息", JOptionPane.YES_NO_OPTION); if (flag == JOptionPane.YES_OPTION) { Hall hall = new Hall(name, new Integer(capacity), new Integer(cid)); boolean res = hallbiz.addHall(hall); hallList = hallbiz.queryAllHall(); refreshTable(hallList); if (res) { JOptionPane.showMessageDialog(operHallView.this, "添加成功!"); } else { JOptionPane.showMessageDialog(operHallView.this, "添加失敗!"); } } } } }); btn_query.addActionListener(new ActionListener() { @Override public void actionPerformed(ActionEvent e) { // 清除數據,防止累加 if (hallList != null) { hallList.clear(); } hallList = hallbiz.queryAllHall(); refreshTable(hallList); } }); btn_del.addActionListener(new ActionListener() { @Override public void actionPerformed(ActionEvent e) { int row = table.getSelectedRow(); int id = (Integer) table.getValueAt(row, 0); int flag = JOptionPane.showConfirmDialog(operHallView.this, "確認是否刪除此場廳?", "確認信息", JOptionPane.YES_NO_OPTION); if (flag == JOptionPane.YES_OPTION) { boolean res = hallbiz.delHall(id); if (res) { JOptionPane.showMessageDialog(operHallView.this, "刪除成功!"); // 更新數據 List<Session> sessionList = new ArrayList<Session>(); sessionList = sessionbiz.queryAllSession(); // 刪除某場廳後,對應的場次也進行刪除 int sid = 0; for (int i = 0; i < sessionList.size(); i++) { if (id == sessionList.get(i).getHall_id()) { sid = sessionList.get(i).getSession_id(); sessionbiz.delSession(sid); } } hallList = hallbiz.queryAllHall(); refreshTable(hallList);// 更新顯示數據 } else { JOptionPane.showMessageDialog(operHallView.this, "刪除失敗!"); } } } }); btn_back.addActionListener(new ActionListener() { @Override public void actionPerformed(ActionEvent e) { operHallView.this.dispose(); } }); } private class HallInfoTableModel implements TableModel { public List<Hall> hallList = null; public HallInfoTableModel(List<Hall> hallList) { this.hallList = hallList; } // JTable顯示的行數 @Override public int getRowCount() { return hallList.size(); } // JTable顯示的列數 @Override public int getColumnCount() { return 4; } // JTable顯示各行的名稱 @Override public String getColumnName(int columnIndex) { if (columnIndex == 0) { return "場廳ID"; } else if (columnIndex == 1) { return "場廳名稱"; } else if (columnIndex == 2) { return "所屬影院"; } else if (columnIndex == 3) { return "場廳容量"; } else { return "出錯"; } } // JTable列的數據類型 @Override public Class<?> getColumnClass(int columnIndex) { return String.class; } // 單元格是否可編輯 @Override public boolean isCellEditable(int rowIndex, int columnIndex) { return false; } // 每行單元格顯示的數據 @Override public Object getValueAt(int rowIndex, int columnIndex) { Hall hall = hallList.get(rowIndex); Cinema cinema = null; if (columnIndex == 0) { return hall.getHall_id(); } else if (columnIndex == 1) { return hall.getHname(); } else if (columnIndex == 2) { List<Cinema> cinemaList = cinemabiz.queryAllCinema(); for (int i = 0; i < cinemaList.size(); i++) { if (hall.getCinema_id() == cinemaList.get(i).getCinema_id()) { cinema = cinemaList.get(i); break; } } return cinema.getCname(); // return hall.getCid(); } else if (columnIndex == 3) { return hall.getCapacity(); } else { return "出錯"; } } @Override public void setValueAt(Object aValue, int rowIndex, int columnIndex) { // TODO Auto-generated method stub } @Override public void addTableModelListener(TableModelListener l) { // TODO Auto-generated method stub } @Override public void removeTableModelListener(TableModelListener l) { // TODO Auto-generated method stub } } private void refreshTable(List<Hall> hallList) { infoTableModel = new HallInfoTableModel(hallList); table.setModel(infoTableModel); table.setRowHeight(20); } }
到此這篇關於Eclipse+Java+Swing+Mysql實現電影購票系統(詳細代碼)的文章就介紹到這瞭,更多相關Eclipse+Java+Swing+Mysql實現電影購票系統內容請搜索WalkonNet以前的文章或繼續瀏覽下面的相關文章希望大傢以後多多支持WalkonNet!