「影院售票系统」 · Java Swing + MySQL JDBC开发
目录
文档说明:
一、语言和环境
1. 实现语言:Java。
2. 开发环境:MyEclipse+MySQL。
二、实现功能
使用 Java 技术开发一个影院售票系统,具体实现功能如下:
1. 程序启动显示主界面,点击查询按钮,显示所有影片信息,如图 1 所示。
2. 点击“新增”按钮,弹出新增影片窗口,可以录入新增影片相关信息,如图 2 所示
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 个方法
|
|
|
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开发的更多相关文章
- 「物流跟踪管理系统」 · Java Swing + MySQL JDBC开发,美和易思结业考试机试试题
目录 文档说明: 一.语言和环境 二.技术要求 三.功能要求 四.数据库设计 五.具体要求及推荐实现步骤 六.注意事项 实现代码: 一.数据库 二.Java Swing com.ynavc.Bean ...
- 「会员卡管理系统」 · Java Swing + MySQL JDBC开发
目录 目录 一.语言和环境 二.实现功能 三.数据库设计 四.具体要求及推荐实现步骤 五.注意事项 六.评分标准 >>>实现代码: 数据库 com.ynavc.Bean com.yn ...
- 「超市管理系统——商品管理」 · Java Swing + MySQL JDBC开发
项目下载:https://download.csdn.net/download/weixin_44893902/13715024 1.9元付费赞助下载:https://download.csdn.ne ...
- 「旅游信息管理系统」 · Java Swing + MySQL 开发
代码写得烂,写博客纯属记录! 微信公众号:BugLass 码云仓库地址:https://gitee.com/ynavc/tourism_sys 源代码及文档打包下载:https://download. ...
- 「艺蜂酒店管理系统」 · Java Swing + mysql 开发 学生毕业设计项目
Java Swing在社会上基本用不到,但是任有学校拿来当做结课设计,只是博主在校期间的一个项目.如果在部署过程中有问题可以加我qq68872185. 码云仓库地址:https://gitee.co ...
- 迄今为止最硬核的「Java8时间系统」设计原理与使用方法
为了使本篇文章更容易让读者读懂,我特意写了上一篇<任何人都需要知道的「世界时间系统」构成原理,尤其开发人员>的科普文章.本文才是重点,绝对要读,走起! Java平台时间系统的设计方案 几乎 ...
- C#总结项目《影院售票系统》编写总结一
C#学习经历从基本语法结构到窗体再到面向对象终于走完了.NET初级程序员的道路,做为品德优良好学生更不能落下课程的总结项目-某某鸟<影院售票系统>.用了大概一天半的时间做完这个练手项目,先 ...
- C#编写影院售票系统(A project with a higher amount of gold )
项目需求: 影院售票系统 1.基础设施 放映厅 座位集合 2.一个海报------------>放映计划 3.售票设置----------->观影 领域模型:程序中提炼出的实体 4.从电影 ...
- C#编写影院售票系统(A project with a higher amount of gold )(2:相关代码)
此篇文章为项目代码,,,需要项目需求 ,思路分析与窗体效果请访问:http://www.cnblogs.com/lsy131479/p/8367304.html 项目类图: 影院类: using Sy ...
随机推荐
- Linux基础命令---mysqlimport导入数据库
mysqlimport mysqlimport指令可以用来将文本文件中的数据导入到数据库.在导入文本文件的时候,必须确保数据库中有一张表,而且他的名字和文本文件的名字是一样的. 此命令的适用范围:Re ...
- Linux学习 - 关机重启退出命令
一.shutdown 1 功能 关机.重启操作 2 语法 shutdown [-chr] [时间选项] -h 关机 -r 重启 -c 取消前一个关机命令 二.halt.poweroff(关机) 三 ...
- js实现递归菜单无限层
/*动态加载菜单*/ function dynamicMenu(data){ if (userID != "admin"){ //1.清空所有菜单 $("#menuLis ...
- 【编程思想】【设计模式】【行为模式Behavioral】Specification
Python版 https://github.com/faif/python-patterns/blob/master/behavioral/specification.py #!/usr/bin/e ...
- Spring Boot中使用模板引擎Thymeleaf
一.Thymeleaf简介 Thymeleaf[taɪm lif],百里香叶,是一个流行的模板引擎,该模板引擎采用Java语言开发.Java中常见的模板引擎有Velocity.Freemaker.Th ...
- 【Linux】【Shell】【Basic】文件查找locate,find
1.locate: 1.1. 简介:依赖于事先构建好的索引库: 系统自动实现(周期性任务): 手动更新数据库(updatedb): 1.2. 工作特性:查找速度快:模糊 ...
- jQuery - 按回车键触发跳转
键盘事件有三种: keyup:按键按下去,抬上来后,事件才生效 (推荐) keydown:按键按下去就生效 keypress:与 keydown 事件类似,当按钮被按下时,会发生该事件,与 keydo ...
- py脚本 获取当前运行服务的相关信息
一.简介 最近在统计系统中都部署了什么服务,但服务器太多,在没有标准化之前进行整理,还是写脚本收集方便一些. 当然还是需要人工去判断整理表格,为后面标准化做准备.脚本是python2.7的,默认的ce ...
- [IDEA] chapter_reader - idea看小说插件 idea阅读插件 idea摸鱼插件
目录 1. 简述: 2. 使用说明: 2.1 版本说明: 2.2 重要说明: 2.3 简单使用方法: 2.4 目前支持的网站有 (新↓): 2.5 菜单介绍: 2.6 快捷键设置及推荐: 2.7 在线 ...
- 解决android studio no debuggable process
这个问题可能是由多种因素造成的. 一.可能是buildtypes配置或选择错误,在对应module的build.gradle中确认如下配置 debug { debuggable true//一定要配置 ...