「影院售票系统」 · Java Swing + MySQL JDBC开发

本文涉及的产品
云数据库 RDS MySQL,集群系列 2核4GB
推荐场景:
搭建个人博客
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
云数据库 RDS MySQL,高可用系列 2核4GB
简介: 「影院售票系统」 · Java Swing + MySQL JDBC开发

文档说明:


一、语言和环境


1. 实现语言:Java。

2. 开发环境:MyEclipse+MySQL。


二、实现功能


使用 Java 技术开发一个影院售票系统,具体实现功能如下:

1. 程序启动显示主界面,点击查询按钮,显示所有影片信息,如图 1 所示。


32.png

图 1 影片信息列表

2. 点击“新增”按钮,弹出新增影片窗口,可以录入新增影片相关信息,如图 2 所示


33.png

图 2 录入新增影片

 

3. 在新增影片窗口,点击“新增”按钮,将影片信息保存到数据库中,保存成功给予

用户提示,并清空所有文本框内容,点击“返回”按钮则关闭窗口。在影片列表窗

口显示最新添加的影片信息。如图 3 所示。


34.png


图 3 新增影片成功提示


三、数据库设计


1. 创建数据库(MovieDB)

2. 创建影片信息表(movies),结构如下:


35.png


四、具体要求及推荐实现步骤


1. 按以上数据库要求建库建表,并参考图 1 添加至少 3 条测试数据


2. 搭建系统框架

(1)编写实体类。

(2)创建数据访问层,并编写 BaseDAO 和数据访问层代码。

(3)创建窗体。


3. 创建主窗体

(1)按照图 1,创建窗体 MainFrame,并添加相应的组件

(2)表格中的数据均来源于数据库,点击“查询”按钮显示所有数据。

(3)实现点击“新增”按钮,显示新增影片窗体。


4. 创建新增影片信息窗体第 3 页 共 3 页


(1)按照图 2,创建窗体 AddFrame,并添加相应的组件。


(2)实现点击“新增”按钮,将影片信息保存至数据库中。


(3)新增完毕,提示用户,并清空文本框输入内容。


(4)实现点击“返回”按钮,关闭新增影片信息窗口。


五、注意事项


1. 将数据库导出成 sql 脚本文件

2. 将整个项目打包提交


六、评分标准

36.png

37.png


实现代码:


一、数据库:


SET FOREIGN_KEY_CHECKS=0;
-- ----------------------------
-- Table structure for movies
-- ----------------------------
DROP TABLE IF EXISTS `movies`;
CREATE TABLE `movies` (
  `movieID` int(11) NOT NULL AUTO_INCREMENT,
  `name` varchar(64) NOT NULL,
  `duration` int(11) NOT NULL,
  `area` varchar(32) DEFAULT NULL,
  `date` date DEFAULT NULL,
  `price` decimal(6,2) DEFAULT NULL,
  PRIMARY KEY (`movieID`)
) ENGINE=InnoDB AUTO_INCREMENT=6 DEFAULT CHARSET=utf8;
-- ----------------------------
-- Records of movies
-- ----------------------------
INSERT INTO `movies` VALUES ('1', '复仇者联盟4', '181', '美国', '2019-05-24', '59.00');
INSERT INTO `movies` VALUES ('2', '大侦探皮卡丘', '104', '美国', '2019-06-10', '39.00');
INSERT INTO `movies` VALUES ('3', '反贪风暴4', '98', '中国香港', '2019-05-04', '28.00');
INSERT INTO `movies` VALUES ('4', '撞死了一只羊', '87', '中国大陆', '2019-05-26', '25.00');
INSERT INTO `movies` VALUES ('5', '惊奇队长', '124', '美国', '2019-04-08', '48.00');


二、Java Swing

com.ynavc.Bean

Movies.java


package com.ynavc.Base;
public class Movies {
  int movieId;
  String name;
  int duration;
  String area;
  String date;
  double price;
  public Movies(int movieId, String name, int duration, String area, String date, double price) {
    super();
    this.movieId = movieId;
    this.name = name;
    this.duration = duration;
    this.area = area;
    this.date = date;
    this.price = price;
  }
  public Movies() {
    super();
  }
  public int getMovieId() {
    return movieId;
  }
  public void setMovieId(int movieId) {
    this.movieId = movieId;
  }
  public String getName() {
    return name;
  }
  public void setName(String name) {
    this.name = name;
  }
  public int getDuration() {
    return duration;
  }
  public void setDuration(int duration) {
    this.duration = duration;
  }
  public String getArea() {
    return area;
  }
  public void setArea(String area) {
    this.area = area;
  }
  public String getDate() {
    return date;
  }
  public void setDate(String date) {
    this.date = date;
  }
  public double getPrice() {
    return price;
  }
  public void setPrice(double price) {
    this.price = price;
  }
}


com.ynavc.Dao

DbConnection.java


package com.ynavc.Dao;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import javax.swing.JOptionPane;
import com.mysql.jdbc.Statement;
public class DbConnection {
  //驱动类的类名
  private static final String DRIVERNAME="com.mysql.jdbc.Driver";
  //连接数据的URL路径
  private static final String URL="jdbc:mysql://127.0.0.1:3306/moviedb";
  //数据库登录账号
  private static final String USER="root";
  //数据库登录密码
  private static final String PASSWORD="root123";
  //加载驱动
  static{
    try {
      Class.forName(DRIVERNAME);
    } catch (ClassNotFoundException e) {
      e.printStackTrace();
    }
  }
    //获取数据库连接
  public static Connection getConnection() {
            try {
    return DriverManager.getConnection(URL,USER,PASSWORD);
             } catch (SQLException e) { 
    e.printStackTrace();
             }
      return null;
  }
  //查询
  public static ResultSet query(String sql) {
    System.out.println(sql);
    //获取连接
    Connection connection=getConnection();
    PreparedStatement psd;
    try {
      psd = connection.prepareStatement(sql);
      return psd.executeQuery();
    } catch (SQLException e) {
      JOptionPane.showMessageDialog(null,"执行语句出错\n"+e.toString());
      e.printStackTrace();
    }
    return null;
  }
  //增、删、改、查
    public static int updataInfo(String sql) {
      System.out.println(sql);
      //获取连接
      Connection connection=getConnection();
      try {
        PreparedStatement psd=connection.prepareStatement(sql);
        return psd.executeUpdate();
      } catch (SQLException e) {
        JOptionPane.showMessageDialog(null,"执行语句出错\n"+e.toString());
        e.printStackTrace();
      }
      return 0;
    }
  //关闭连接
  public  static  void colse(ResultSet rs,Statement stmt,Connection  conn) throws Exception{
    try { 
      if (rs != null){
        rs.close(); 
      }
            if (stmt != null){
              stmt.cancel(); 
            }
     if (conn != null) { conn.close(); }
     } catch (Exception e) {
       e.printStackTrace(); throw new Exception();
     }
  }
}


com.ynavc.Controller

Update.java

package com.ynavc.Controller;
import com.ynavc.Dao.DbConnection;
public class Update {
  //添加数据
  public int addData(String sql) {
    return DbConnection.updataInfo(sql);
  }
}


Select.java


package com.ynavc.Controller;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
import com.ynavc.Base.Movies;
import com.ynavc.Dao.DbConnection;
public class Select {
  public Object[][] getMianSelect() {
    String sql = "SELECT movieid,name,duration,area,date,price FROM movies;";
    ResultSet re = DbConnection.query(sql);
    ArrayList<Movies> list = new ArrayList<Movies>();
    try {
      while (re.next()) {
        Movies movies = new Movies();
        movies.setMovieId(re.getInt(1));
        movies.setName(re.getString(2));
        movies.setDuration(re.getInt(3));
        movies.setArea(re.getString(4));
        movies.setDate(re.getString(5));
        movies.setPrice(re.getDouble(6));
        list.add(movies);
      }
    } catch (SQLException e) {
      e.printStackTrace();
    }
    Object[][] ob = new Object[list.size()][6];
    for (int i = 0; i < list.size(); i++) {
      ob[i][0] = list.get(i).getMovieId();
      ob[i][1] = list.get(i).getName();
      ob[i][2] = list.get(i).getDuration()+"分钟";
      ob[i][3] = list.get(i).getArea();
      ob[i][4] = list.get(i).getDate();
      ob[i][5] = list.get(i).getPrice();
    }
    return ob;
  }
}


com.ynavc.Vive

MainFrame.Java


package com.ynavc.Vive;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JScrollPane;
import javax.swing.JTable;
import javax.swing.table.DefaultTableModel;
import com.ynavc.Controller.Select;
public class MainFrame extends JFrame {
  Select select = new Select();
  Object[] header = {"序号","片名","时长","地区","上映时间","价格"};
  Object[][] data = select.getMianSelect();
  DefaultTableModel df = new DefaultTableModel(data,header);
  public MainFrame() {
    super("影视售票系统");
    this.setBounds(0, 0, 700, 450);
    this.setLocationRelativeTo(null);
    this.setResizable(false);
    this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    getContentPane().setLayout(null);
    JButton button1 = new JButton("查询");
    button1.setBounds(349, 13, 100, 27);
    getContentPane().add(button1);
    button1.addActionListener(new ActionListener() {
      @Override
      public void actionPerformed(ActionEvent e) {
        Object[][] data = select.getMianSelect();
        df.setDataVector(data,header);
      }
    });
    JButton button2 = new JButton("增加");
    button2.setBounds(494, 13, 100, 27);
    getContentPane().add(button2);
    button2.addActionListener(new ActionListener() {
      @Override
      public void actionPerformed(ActionEvent e) {
        new AddFrame().setVisible(true);
      }
    });
    JTable jTable = new JTable(df);
    JScrollPane jsPane = new JScrollPane(jTable);
    jsPane.setBounds(25, 50, 650, 350);
    getContentPane().add(jsPane);
  }
  public static void main(String[] args) {
    new MainFrame().setVisible(true);
  }
}


AddFrame.Java


package com.ynavc.Vive;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JOptionPane;
import javax.swing.JTextField;
import com.ynavc.Base.Movies;
import com.ynavc.Controller.Update;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.JButton;
public class AddFrame extends JFrame {
  private JTextField textField_movieName;
  private JTextField textField_duration;
  private JTextField textField_area;
  private JTextField textField_releateDate;
  private JTextField textField_price;
  Update update = new Update();
  public AddFrame() {
    super("新增影片信息");
    this.setBounds(0, 0, 400, 450);
    this.setLocationRelativeTo(null);
    this.setResizable(false);
    getContentPane().setLayout(null);
    JLabel movieName = new JLabel("片名称");
    movieName.setBounds(55, 59, 66, 18);
    getContentPane().add(movieName);
    textField_movieName = new JTextField();
    textField_movieName.setBounds(150, 56, 183, 24);
    getContentPane().add(textField_movieName);
    textField_movieName.setColumns(10);
    JLabel duration = new JLabel("时长");
    duration.setBounds(55, 100, 66, 18);
    getContentPane().add(duration);
    textField_duration = new JTextField();
    textField_duration.setColumns(10);
    textField_duration.setBounds(150, 97, 183, 24);
    getContentPane().add(textField_duration);
    JLabel area = new JLabel("地区");
    area.setBounds(55, 142, 66, 18);
    getContentPane().add(area);
    textField_area = new JTextField();
    textField_area.setColumns(10);
    textField_area.setBounds(150, 139, 183, 24);
    getContentPane().add(textField_area);
    JLabel releaseDate = new JLabel("上映日期");
    releaseDate.setBounds(55, 188, 66, 18);
    getContentPane().add(releaseDate);
    textField_releateDate = new JTextField();
    textField_releateDate.setColumns(10);
    textField_releateDate.setBounds(150, 185, 183, 24);
    getContentPane().add(textField_releateDate);
    textField_releateDate.setText("2020-10-04");
    JLabel price = new JLabel("票价");
    price.setBounds(55, 232, 66, 18);
    getContentPane().add(price);
    textField_price = new JTextField();
    textField_price.setColumns(10);
    textField_price.setBounds(150, 229, 183, 24);
    getContentPane().add(textField_price);
    JButton btnNewButton_add = new JButton("新增");
    btnNewButton_add.setBounds(58, 309, 113, 27);
    getContentPane().add(btnNewButton_add);
    btnNewButton_add.addActionListener(new ActionListener() {
      @Override
      public void actionPerformed(ActionEvent e) {
        String name = textField_movieName.getText();
        int duration = Integer.parseInt(textField_duration.getText());
        String area = textField_area.getText();
        String date = textField_releateDate.getText();
        double price = Double.parseDouble(textField_price.getText());
        String sql = "INSERT INTO `movies` VALUES ("+null+", '"+name+"', '"+duration+"', '"+area+"', '"+date+"', '"+price+"');";
        int result = update.addData(sql);
        if (result>0) {
          JOptionPane.showMessageDialog(null, "新增影片成功!");
        } else {
          JOptionPane.showMessageDialog(null, "添加失败!");
        }
      }
    });
    JButton btnNewButton_last = new JButton("返回");
    btnNewButton_last.setBounds(220, 309, 113, 27);
    getContentPane().add(btnNewButton_last);
    btnNewButton_last.addActionListener(new ActionListener() {
      @Override
      public void actionPerformed(ActionEvent e) {
        dispose();
      }
    });
  }
  public static void main(String[] args) {
    new AddFrame().setVisible(true);
  }
}


com.ynavc.Test

test.java


package com.ynavc.Test;
import com.ynavc.Vive.MainFrame;
public class Test {
  public static void main(String[] args) {
    new MainFrame().setVisible(true);
  }
}
相关实践学习
如何快速连接云数据库RDS MySQL
本场景介绍如何通过阿里云数据管理服务DMS快速连接云数据库RDS MySQL,然后进行数据表的CRUD操作。
全面了解阿里云能为你做什么
阿里云在全球各地部署高效节能的绿色数据中心,利用清洁计算为万物互联的新世界提供源源不断的能源动力,目前开服的区域包括中国(华北、华东、华南、香港)、新加坡、美国(美东、美西)、欧洲、中东、澳大利亚、日本。目前阿里云的产品涵盖弹性计算、数据库、存储与CDN、分析与搜索、云通信、网络、管理与监控、应用服务、互联网中间件、移动服务、视频服务等。通过本课程,来了解阿里云能够为你的业务带来哪些帮助 &nbsp; &nbsp; 相关的阿里云产品:云服务器ECS 云服务器 ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。产品详情: https://www.aliyun.com/product/ecs
相关文章
|
3天前
|
存储 分布式计算 Hadoop
基于Java的Hadoop文件处理系统:高效分布式数据解析与存储
本文介绍了如何借鉴Hadoop的设计思想,使用Java实现其核心功能MapReduce,解决海量数据处理问题。通过类比图书馆管理系统,详细解释了Hadoop的两大组件:HDFS(分布式文件系统)和MapReduce(分布式计算模型)。具体实现了单词统计任务,并扩展支持CSV和JSON格式的数据解析。为了提升性能,引入了Combiner减少中间数据传输,以及自定义Partitioner解决数据倾斜问题。最后总结了Hadoop在大数据处理中的重要性,鼓励Java开发者学习Hadoop以拓展技术边界。
24 7
|
11天前
|
自然语言处理 Java 关系型数据库
Java mysql根据很长的富文本如何自动获取简介
通过使用Jsoup解析富文本并提取纯文本,然后根据需要生成简介,可以有效地处理和展示长文本内容。该方法简单高效,适用于各种应用场景。希望本文对您在Java中处理富文本并生成简介的需求提供实用的指导和帮助。
45 14
|
27天前
|
Java 数据库连接 数据库
springboot java.lang.ClassNotFoundException: dm.jdbc.driver.DmDriver应该如何解决
通过上述步骤,可以有效解决Spring Boot项目中遇到的 `java.lang.ClassNotFoundException: dm.jdbc.driver.DmDriver`问题。确保在项目中正确添加达梦数据库的JDBC驱动依赖,并在配置文件中正确配置数据源信息,是解决此问题的关键。通过这些方法,可以确保Spring Boot项目能够正确连接达梦数据库并正常运行。
193 31
|
24天前
|
移动开发 前端开发 Java
Java最新图形化界面开发技术——JavaFx教程(含UI控件用法介绍、属性绑定、事件监听、FXML)
JavaFX是Java的下一代图形用户界面工具包。JavaFX是一组图形和媒体API,我们可以用它们来创建和部署富客户端应用程序。 JavaFX允许开发人员快速构建丰富的跨平台应用程序,允许开发人员在单个编程接口中组合图形,动画和UI控件。本文详细介绍了JavaFx的常见用法,相信读完本教程你一定有所收获!
Java最新图形化界面开发技术——JavaFx教程(含UI控件用法介绍、属性绑定、事件监听、FXML)
|
10天前
|
监控 JavaScript 数据可视化
建筑施工一体化信息管理平台源码,支持微服务架构,采用Java、Spring Cloud、Vue等技术开发。
智慧工地云平台是专为建筑施工领域打造的一体化信息管理平台,利用大数据、云计算、物联网等技术,实现施工区域各系统数据汇总与可视化管理。平台涵盖人员、设备、物料、环境等关键因素的实时监控与数据分析,提供远程指挥、决策支持等功能,提升工作效率,促进产业信息化发展。系统由PC端、APP移动端及项目、监管、数据屏三大平台组成,支持微服务架构,采用Java、Spring Cloud、Vue等技术开发。
|
12天前
|
自然语言处理 Java 关系型数据库
Java mysql根据很长的富文本如何自动获取简介
通过使用Jsoup解析富文本并提取纯文本,然后根据需要生成简介,可以有效地处理和展示长文本内容。该方法简单高效,适用于各种应用场景。希望本文对您在Java中处理富文本并生成简介的需求提供实用的指导和帮助。
31 9
|
1月前
|
NoSQL Java 关系型数据库
Liunx部署java项目Tomcat、Redis、Mysql教程
本文详细介绍了如何在 Linux 服务器上安装和配置 Tomcat、MySQL 和 Redis,并部署 Java 项目。通过这些步骤,您可以搭建一个高效稳定的 Java 应用运行环境。希望本文能为您在实际操作中提供有价值的参考。
146 26
|
1月前
|
存储 JavaScript 前端开发
基于 SpringBoot 和 Vue 开发校园点餐订餐外卖跑腿Java源码
一个非常实用的校园外卖系统,基于 SpringBoot 和 Vue 的开发。这一系统源于黑马的外卖案例项目 经过站长的进一步改进和优化,提供了更丰富的功能和更高的可用性。 这个项目的架构设计非常有趣。虽然它采用了SpringBoot和Vue的组合,但并不是一个完全分离的项目。 前端视图通过JS的方式引入了Vue和Element UI,既能利用Vue的快速开发优势,
126 13
|
1月前
|
前端开发 Java 测试技术
java日常开发中如何写出优雅的好维护的代码
代码可读性太差,实际是给团队后续开发中埋坑,优化在平时,没有那个团队会说我专门给你一个月来优化之前的代码,所以在日常开发中就要多注意可读性问题,不要写出几天之后自己都看不懂的代码。
66 2
|
26天前
|
存储 Oracle 关系型数据库
数据库传奇:MySQL创世之父的两千金My、Maria
《数据库传奇:MySQL创世之父的两千金My、Maria》介绍了MySQL的发展历程及其分支MariaDB。MySQL由Michael Widenius等人于1994年创建,现归Oracle所有,广泛应用于阿里巴巴、腾讯等企业。2009年,Widenius因担心Oracle收购影响MySQL的开源性,创建了MariaDB,提供额外功能和改进。维基百科、Google等已逐步替换为MariaDB,以确保更好的性能和社区支持。掌握MariaDB作为备用方案,对未来发展至关重要。
55 3

热门文章

最新文章