目录

文档说明:

一、语言和环境

二、实现功能

三、数据库设计

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

五、注意事项

六、评分标准

实现代码:

一、数据库:

二、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. Linux基础命令---mysqlimport导入数据库

    mysqlimport mysqlimport指令可以用来将文本文件中的数据导入到数据库.在导入文本文件的时候,必须确保数据库中有一张表,而且他的名字和文本文件的名字是一样的. 此命令的适用范围:Re ...

  2. Linux学习 - 关机重启退出命令

    一.shutdown 1 功能 关机.重启操作 2 语法 shutdown  [-chr]  [时间选项] -h 关机 -r 重启 -c 取消前一个关机命令 二.halt.poweroff(关机) 三 ...

  3. js实现递归菜单无限层

    /*动态加载菜单*/ function dynamicMenu(data){ if (userID != "admin"){ //1.清空所有菜单 $("#menuLis ...

  4. 【编程思想】【设计模式】【行为模式Behavioral】Specification

    Python版 https://github.com/faif/python-patterns/blob/master/behavioral/specification.py #!/usr/bin/e ...

  5. Spring Boot中使用模板引擎Thymeleaf

    一.Thymeleaf简介 Thymeleaf[taɪm lif],百里香叶,是一个流行的模板引擎,该模板引擎采用Java语言开发.Java中常见的模板引擎有Velocity.Freemaker.Th ...

  6. 【Linux】【Shell】【Basic】文件查找locate,find

    1.locate:   1.1. 简介:依赖于事先构建好的索引库: 系统自动实现(周期性任务): 手动更新数据库(updatedb):               1.2. 工作特性:查找速度快:模糊 ...

  7. jQuery - 按回车键触发跳转

    键盘事件有三种: keyup:按键按下去,抬上来后,事件才生效 (推荐) keydown:按键按下去就生效 keypress:与 keydown 事件类似,当按钮被按下时,会发生该事件,与 keydo ...

  8. py脚本 获取当前运行服务的相关信息

    一.简介 最近在统计系统中都部署了什么服务,但服务器太多,在没有标准化之前进行整理,还是写脚本收集方便一些. 当然还是需要人工去判断整理表格,为后面标准化做准备.脚本是python2.7的,默认的ce ...

  9. [IDEA] chapter_reader - idea看小说插件 idea阅读插件 idea摸鱼插件

    目录 1. 简述: 2. 使用说明: 2.1 版本说明: 2.2 重要说明: 2.3 简单使用方法: 2.4 目前支持的网站有 (新↓): 2.5 菜单介绍: 2.6 快捷键设置及推荐: 2.7 在线 ...

  10. 解决android studio no debuggable process

    这个问题可能是由多种因素造成的. 一.可能是buildtypes配置或选择错误,在对应module的build.gradle中确认如下配置 debug { debuggable true//一定要配置 ...