目录

文档说明:

一、语言和环境

二、实现功能

三、数据库设计

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

五、注意事项

六、评分标准

实现代码:

一、数据库:

二、Java Swing:

com.ynavc.Bean

com.ynavc.Dao

com.ynavc.Controller

com.ynavc.Vive

com.ynavc.Test


文档说明:

一、语言和环境

1. 实现语言:Java。

2. 开发环境:MyEclipse+MySQL。

二、实现功能

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

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

图 1 影片信息列表

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

图 2 录入新增影片

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

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

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

图 3 新增影片成功提示

三、数据库设计

1. 创建数据库(MovieDB)

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

字段名

说明

字段类型

长度

备注

movieID

影片编号

int

主键,自动增长

name

影片名称

varchar

64

非空

duration

影片时长

int

非空

area

影片产地

varchar

32

date

上映日期

date

price

票价

decimal(6,2)

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

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. 将整个项目打包提交

六、评分标准

题目:影院售票系统

该项目的评分标准如下:

20

数据库

5

创建数据库

5

添加至少 3 条测试数据

10

正确创建 BaseDAO 类,封装 2 个方法

  1. 获取连接
  2. 关闭连接

30

项目框架搭建

5

正确添加并引用 JDBC 依赖 jar 包

5

正确编写实体类

10

结合 BaseDAO 正确编写查询数据的方法

10

结合 BaseDao 正确编写新增数据的方法

20

显示所有影片信息

15

点击查询按钮,展示所有影片信息

5

上映日期列需以指定格式显示“YYYY-MM-DD”

20

新增影片信息

5

新增前判断所有项目是否填写完毕。

10

正确将数据添加到数据库并在列表窗口显示新增加的记录

5

新增完毕提示用户(2 分),清空文本框内容(3 分)

10

总体编程技术

5

程序逻辑分明,有一定注释

5

变量命名符合规范,可读性好,编码书写有缩进,有异常处理

总分

100 分

实现代码:

一、数据库:

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

「影院售票系统」 · Java Swing + MySQL JDBC开发的更多相关文章

  1. 「物流跟踪管理系统」 · Java Swing + MySQL JDBC开发,美和易思结业考试机试试题

    目录 文档说明: 一.语言和环境 二.技术要求 三.功能要求 四.数据库设计 五.具体要求及推荐实现步骤 六.注意事项 实现代码: 一.数据库 二.Java Swing com.ynavc.Bean ...

  2. 「会员卡管理系统」 · Java Swing + MySQL JDBC开发

    目录 目录 一.语言和环境 二.实现功能 三.数据库设计 四.具体要求及推荐实现步骤 五.注意事项 六.评分标准 >>>实现代码: 数据库 com.ynavc.Bean com.yn ...

  3. 「超市管理系统——商品管理」 · Java Swing + MySQL JDBC开发

    项目下载:https://download.csdn.net/download/weixin_44893902/13715024 1.9元付费赞助下载:https://download.csdn.ne ...

  4. 「旅游信息管理系统」 · Java Swing + MySQL 开发

    代码写得烂,写博客纯属记录! 微信公众号:BugLass 码云仓库地址:https://gitee.com/ynavc/tourism_sys 源代码及文档打包下载:https://download. ...

  5. 「艺蜂酒店管理系统」 · Java Swing + mysql 开发 学生毕业设计项目

    Java  Swing在社会上基本用不到,但是任有学校拿来当做结课设计,只是博主在校期间的一个项目.如果在部署过程中有问题可以加我qq68872185. 码云仓库地址:https://gitee.co ...

  6. 迄今为止最硬核的「Java8时间系统」设计原理与使用方法

    为了使本篇文章更容易让读者读懂,我特意写了上一篇<任何人都需要知道的「世界时间系统」构成原理,尤其开发人员>的科普文章.本文才是重点,绝对要读,走起! Java平台时间系统的设计方案 几乎 ...

  7. C#总结项目《影院售票系统》编写总结一

    C#学习经历从基本语法结构到窗体再到面向对象终于走完了.NET初级程序员的道路,做为品德优良好学生更不能落下课程的总结项目-某某鸟<影院售票系统>.用了大概一天半的时间做完这个练手项目,先 ...

  8. C#编写影院售票系统(A project with a higher amount of gold )

    项目需求: 影院售票系统 1.基础设施 放映厅 座位集合 2.一个海报------------>放映计划 3.售票设置----------->观影 领域模型:程序中提炼出的实体 4.从电影 ...

  9. C#编写影院售票系统(A project with a higher amount of gold )(2:相关代码)

    此篇文章为项目代码,,,需要项目需求 ,思路分析与窗体效果请访问:http://www.cnblogs.com/lsy131479/p/8367304.html 项目类图: 影院类: using Sy ...

随机推荐

  1. 100个Shell脚本——【脚本3】tomcat启动脚本

    [脚本3]tomcat启动脚本 一.脚本tomcatd.sh #!/bin/bash # chkconfig:2345 64 36 # description: Tomcat start/stop/r ...

  2. What happens when more restrictive access is given to a derived class method in C++?

    We have discussed a similar topic in Java here. Unlike Java, C++ allows to give more restrictive acc ...

  3. SpringMVC(2):JSON

    一,JSON 介绍 JSON (JavaScript Object Notation, JS 对象简谱) 是一种轻量级的数据交换格式.易于人阅读和编写,同时也易于机器解析和生成,并有效地提升网络传输效 ...

  4. java多线程5:线程间的通信

    在多线程系统中,彼此之间的通信协作非常重要,下面来聊聊线程间通信的几种方式. wait/notify 想像一个场景,A.B两个线程操作一个共享List对象,A对List进行add操作,B线程等待Lis ...

  5. Mysql资料 锁机制

    目录 一.简介 二.类型 三.操作 四.死锁 第一种情况 第二种情况 第三种情况 一.简介 数据库和操作系统一样,是一个多用户使用的共享资源.当多个用户并发地存取数据 时,在数据库中就会产生多个事务同 ...

  6. 分布式可扩展web体系结构设计实例分析

    Web分布式系统设计准则 下面以一个上传和查询图片的例子来说明分布式web结构的设计考虑和常用的提高性能的方法.该例子提供上传图片和下载图片两个简单功能,并且有一下假设条件?: - 可以存储无上限数量 ...

  7. 学习型的“文山表海无限发展公司”——《Office妖精是怎样炼成的》续1

    本篇无故事情节版:https://www.cnblogs.com/officeplayer/p/14841590.html <Office妖精是怎样炼成的>http://blog.sina ...

  8. 【紧急】Log4j又发新版2.17.0,只有彻底搞懂漏洞原因,才能以不变应万变,小白也能看懂

    1 事件背景 经过一周时间的Log4j2 RCE事件的发酵,事情也变也越来越复杂和有趣,就连 Log4j 官方紧急发布了 2.15.0 版本之后没有过多久,又发声明说 2.15.0 版本也没有完全解决 ...

  9. 尚硅谷SSM-CRUD实战Demo

    SSM-CRUD实战项目 1. 项目总览 SpringMVC + Spring + MyBatis CRUD:增删改查 功能: 分页 数据校验 jquery前端校验+JSR303后端校验 ajax R ...

  10. socket模块实现基于UDP聊天模拟程序;socketserver模块实现服务端 socket客户端代码示例

    socket模块 serSocket.setblocking(False) 设置为非阻塞: #coding=utf-8 from socket import * import time # 用来存储所 ...