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

本文涉及的产品
云数据库 RDS MySQL Serverless,0.5-2RCU 50GB
简介: Eclipse+Java+Swing+Mysql实现电影购票系统【建议收藏】

一、系统介绍


1.开发环境


开发工具:Eclipse2021


JDK版本:jdk1.8


Mysql版本:8.0.13


2.技术选型


Java+Swing+Mysql


3.系统功能


注册系统,登录系统;


1.用户


1.欢迎页:修改用户姓名和密码;


2.碟片排行榜:影片的详细信息;


3.购票信息:已购买车票的信息;


4.场次信息:电影场次的详细信息;


5.充值:充值余额;


6.搜索电影:搜索电影的详细信息;


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.工程截图


20210921125522742.jpg


二、系统展示


1.注册系统


20210921125925196.jpg


2.登录系统


20210921130118193.jpg


3.用户-欢迎界面


20210921130141435.jpg


4.用户-影片排行榜


2021092113015565.jpg


5.用户-购票信息


20210921130206236.jpg


6.用户-场次信息


20210921130217416.jpg


7.用户-充值余额


20210921130224179.jpg


8.用户-搜索电影


20210921130231476.jpg


9.管理员-首页


2021092113025073.jpg


10.管理员-对用户进行操作


20210921130258228.jpg


11.管理员-对影院进行操作


20210921130307848.jpg


12.管理员-对场厅进行操作


20210921130317480.jpg


13.管理员-对场次进行操作


20210921130345822.jpg


14.管理员-对电影进行操作


20210921130357216.jpg


三、部分代码


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


四、其他


1.其他系统实现


1.JavaWeb系统系列实现


Java+JSP实现学生图书管理系统


Java+JSP实现学生信息管理系统


Java+JSP实现用户信息管理系统


Java+Servlet+JSP实现航空订票系统


Java+Servlet+JSP实现新闻发布系统


Java+Servlet+JSP实现图书管理系统


Java+Servlet+JSP实现停车场管理系统


Java+Servlet+JSP实现学生信息管理系统


Java+Servlet+JSP实现学生选课管理系统


Java+Servlet+JSP实现学生成绩管理系统-1


Java+Servlet+JSP实现学生成绩管理系统-2


Java+Servlet+JSP实现宠物诊所管理系统


Java+SSM+JSP实现网上考试系统


Java+SSH+JSP实现在线考试系统


Java+SSH+JSP实现医院在线挂号系统


Java+Springboot+Mybatis+Bootstrap+Maven实现网上商城系统


2.JavaSwing系统系列实现


Java+Swing实现斗地主游戏


Java+Swing实现图书管理系统


Java+Swing实现医院管理系统


Java+Swing实现考试管理系统


Java+Swing实现仓库管理系统-1


Java+Swing实现仓库管理系统-2


Java+Swing实现自助取款机系统


Java+Swing实现通讯录管理系统


Java+Swing实现停车场管理系统


Java+Swing实现学生信息管理系统


Java+Swing实现学生宿舍管理系统


Java+Swing实现学生选课管理系统


Java+Swing实现学生成绩管理系统


Java+Swing实现学校教材管理系统


Java+Swing实现学校教务管理系统


Java+Swing实现企业人事管理系统


Java+Swing实现电子相册管理系统


Java+Swing实现超市管理系统-TXT存储数据


Java+Swing实现自助取款机系统-TXT存储数据


Java+Swing实现宠物商店管理系统-TXT存储数据


3.运行项目


请点击以下链接,部署你的项目。


Eclipse如何导入JavaSwing项目超详细图文教程


Eclipse如何导入JavaSwing项目超详细视频教程


4.备注


如有侵权请联系我删除。


5.支持博主


如果您觉得此文对您有帮助,请点赞加关注加收藏。祝您生活愉快!


相关实践学习
基于CentOS快速搭建LAMP环境
本教程介绍如何搭建LAMP环境,其中LAMP分别代表Linux、Apache、MySQL和PHP。
全面了解阿里云能为你做什么
阿里云在全球各地部署高效节能的绿色数据中心,利用清洁计算为万物互联的新世界提供源源不断的能源动力,目前开服的区域包括中国(华北、华东、华南、香港)、新加坡、美国(美东、美西)、欧洲、中东、澳大利亚、日本。目前阿里云的产品涵盖弹性计算、数据库、存储与CDN、分析与搜索、云通信、网络、管理与监控、应用服务、互联网中间件、移动服务、视频服务等。通过本课程,来了解阿里云能够为你的业务带来哪些帮助 &nbsp; &nbsp; 相关的阿里云产品:云服务器ECS 云服务器 ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。产品详情: https://www.aliyun.com/product/ecs
相关文章
|
6天前
|
运维 Java
Java版HIS系统 云HIS系统 云HIS源码 结构简洁、代码规范易阅读
云HIS系统分为两个大的系统,一个是基层卫生健康云综合管理系统,另一个是基层卫生健康云业务系统。基层卫生健康云综合管理系统由运营商、开发商和监管机构使用,用来进行运营管理、运维管理和综合监管。基层卫生健康云业务系统由基层医院使用,用来支撑医院各类业务运转。
30 5
|
7天前
|
JavaScript Java 测试技术
基于Java的电影评论系统的设计与实现(源码+lw+部署文档+讲解等)
基于Java的电影评论系统的设计与实现(源码+lw+部署文档+讲解等)
24 0
|
7天前
|
JavaScript Java 测试技术
基于Java的实验室设备管理系统的设计与实现(源码+lw+部署文档+讲解等)
基于Java的实验室设备管理系统的设计与实现(源码+lw+部署文档+讲解等)
21 1
|
8天前
|
JavaScript Java 测试技术
基于Java的社区人员管理系统的设计与实现(源码+lw+部署文档+讲解等)
基于Java的社区人员管理系统的设计与实现(源码+lw+部署文档+讲解等)
26 2
|
8天前
|
JavaScript Java 测试技术
基于Java的公司员工工作日志办公系统的设计与实现(源码+lw+部署文档+讲解等)
基于Java的公司员工工作日志办公系统的设计与实现(源码+lw+部署文档+讲解等)
32 3
|
8天前
|
JavaScript Java 测试技术
基于Java的图书馆智能选座系统的设计与实现(源码+lw+部署文档+讲解等)
基于Java的图书馆智能选座系统的设计与实现(源码+lw+部署文档+讲解等)
29 2
|
8天前
|
JavaScript Java 测试技术
基于Java的精品课程在线学习系统的设计与实现(源码+lw+部署文档+讲解等)
基于Java的精品课程在线学习系统的设计与实现(源码+lw+部署文档+讲解等)
28 1
|
8天前
|
JavaScript Java 测试技术
基于Java的高校大学生党建系统的设计与实现(源码+lw+部署文档+讲解等)
基于Java的高校大学生党建系统的设计与实现(源码+lw+部署文档+讲解等)
25 1
|
8天前
|
JavaScript Java 测试技术
基于Java的学生课堂考勤系统的设计与实现(源码+lw+部署文档+讲解等)
基于Java的学生课堂考勤系统的设计与实现(源码+lw+部署文档+讲解等)
24 0
|
8天前
|
JavaScript Java 测试技术
基于Java的中文学习系统的设计与实现(源码+lw+部署文档+讲解等)
基于Java的中文学习系统的设计与实现(源码+lw+部署文档+讲解等)
24 0

推荐镜像

更多