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

目录

一、系统介绍

1.开发环境

2.技术选型

3.系统功能

4.数据库

5.工程截图

二、系统展示 

1.注册系统

2.登录系统

3.用户-欢迎界面

4.用户-影片排行榜

5.用户-购票信息

6.用户-场次信息

7.用户-充值余额

8.用户-搜索电影

9.管理员-首页

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

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

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

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

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

三、部分代码

AdminMainView.java

MovieInfoView.java

operCinemaView.java

operHallView.java

四、其他

1.其他系统实现

1.JavaWeb系统系列实现

2.JavaSwing系统系列实现

2.获取源码

3.运行项目

4.备注

5.支持博主


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存储数据

一、系统介绍

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

二、系统展示 

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

四、其他

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存储数据

2.获取源码

点击以下链接获取源码,数据库文件在sql文件下面。

Java+Swing+Mysql电影购票系统-Java文档类资源-CSDN下载Java+Swing+Mysql电影购票系统,系统经多次测试,运行无误,大家放心下载。更多下载资源、学习资料请访问CSDN下载频道.https://download.csdn.net/download/helongqiang/23921261

3.运行项目

 

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

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

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

4.备注

如有侵权请联系我删除。

5.支持博主

如果您觉得此文对您有帮助,请点赞加关注加收藏。祝您生活愉快!想要获取其他资源可关注左侧微信公众号获取!

 

评论 25
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

水坚石青

你的鼓励是我更新的动力

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

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

打赏作者

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

抵扣说明:

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

余额充值