写点什么

【数据库实验】《小型 MIS 的开发》

  • 2021 年 11 月 11 日
  • 本文字数:3505 字

    阅读完需:约 11 分钟

录入、修改、删除只能由管理员进行。




以下是实验要求的界面:





数据库建表


========================================================================


需要两张表:


  • 用户表 user

  • 航班信息表 flight


命令行登录 MySQL:


mysql -u root -p


输入密码: 1234


建立一个数据库:sxn210224,并进入:


CREATE DATABASE sxn210224;


USE sxn210224;


下面开始建表:


用户表的 SQL




SET FOREIGN_KEY_CHECKS=0;




-- Table structure for user




DROP TABLE IF EXISTS user;


CREATE TABLE user (


u_id varchar(8) NOT NULL,


u_username varchar(50) DEFAULT NULL,


u_password varchar(50) DEFAULT NULL,


PRIMARY KEY (u_id)


) ENGINE=InnoDB DEFAULT CHARSET=utf8;




-- Records of user




INSERT INTO user VALUES ('17210224', 'luzhenyu', '123456');


INSERT INTO user VALUES ('17210309', 'hanlei', '123456');


航班信息表的 SQL




SET FOREIGN_KEY_CHECKS=0;




-- Table structure for flight




DROP TABLE IF EXISTS flight;


CREATE TABLE flight (


f_id char(8) NOT NULL,


f_src varchar(15) DEFAULT NULL,


f_des varchar(15) DEFAULT NULL,


f_date date NOT NULL,


f_start_time char(6) DEFAULT NULL,


f_end_time char(6) DEFAULT NULL,


f_remain_seats int(4) DEFAULT NULL,


f_fares float(8,0) DEFAULT NULL,


f_discount_nums float(8,0) DEFAULT NULL,


f_discount float(8,0) DEFAULT NULL,


f_subordinate_company varchar(20) DEFAULT NULL,


PRIMARY KEY (f_id,f_date)


) ENGINE=InnoDB DEFAULT CHARSET=utf8;




-- Records of flight




INSERT INTO flight VALUES ('F001', '扬州', '苏州', '2012-12-12', '15:30', '14:20', '5', '99', '5', '1', '振宇有限公司');


INSERT INTO flight VALUES ('F002', '扬州', '苏州', '2012-12-13', '12:20', '15:50', '20', '99', '5', '1', '振宇有限公司');


INSERT INTO flight VALUES ('F003', '扬州', '北京', '2012-12-13', '12:20', '17:50', '4', '99', '5', '1', '振宇有限公司');


INSERT INTO flight VALUES ('F004', '扬州', '泰国', '2012-12-13', '7:20', '8:50', '2', '99', '5', '1', '振宇有限公司');


INSERT INTO flight VALUES ('F005', '扬州', '广州', '2012-12-14', '5:20', '14:50', '40', '99', '5', '1', '振宇有限公司');


项目演示


=======================================================================


启动项目,进入一个主界面:选择票务管理则需要登陆,选择票务查询则直接进入查询界面。



选了票务管理后进入登录界面:



用户名密码输入错误则会产生提示:



进入操作界面后,我们输入航班号:F001、日期其实随便输,但是不能为空,建议点输入框右边的小按钮随便选一个日期。。。自己手输也可以,要按照他的格式。



成功查询出数据!



增加和修改功能后台逻辑写好了,但是没有去与界面做交互(还要多写个页面太麻烦了)。。以后有空补。。


GitHub 网址获取源代码


=================================================================================


GitHub:https://github.com/szluyu99/database_exp


比较重要的知识点


===========================================================================


JavaFx 中 spring 工厂如何创建




JavaFx 利用 fxml 开发时控制器中无法获取 Spring 工厂帮你创建的对象(可能是我的姿势问题)。。


我的做法是利用一个 SpringHelper 类来辅助。。


public class SpringHelper {


public static ApplicationContext ctx;


public SpringHelper() {


ctx = new ClassPathXmlApplicationContext("/applicationContext.xml");


}


}


然后在整个类启动前创建好工厂:


public class Launcher {


public static void main(String args[]){


SpringHelper springHelper = new SpringHelper();


Application.launch(MainStage.class, args);


}


}


后面的控制类中就可以这样来使用工厂了。。。


private FlightService flightService = (FlightService) SpringHelper.ctx.getBean("flightService");


mysql 根据日期类型查询数据




其实可以转成字符串再操作。。。


select * from flight where


DATE_FORMAT(f_date,'%Y-%m-%d') = '2012-12-12'


SELECT * FROM flight WHERE


f_date = '2012-12-12';


在控制器 Controller 中关闭当前 fxml 界面




public void close(ActionEvent event) {


((Node)event.getSource()).getScene().getWindow().hide();


}


Navicat for MySQL 显示 ER 图




右击某个表,选择 逆向到模型…




Delphi 的 DBNavigator 组件




Delphi 中有个 DBNavigator 组件:



  • First 按钮 将指针移到数据表的第一条记录。

  • Previous 按钮 将指针前移一条记录 o

  • Next 按钮 将指针后移一条记录。

  • Last 按钮 将指针移到数据表的最后一条记录。

  • Insert 按钮 在当前记录前插入一条新记录,并将数据集组件置于插人状态。

  • Delete 按钮 删除当前记录。

  • Edit 按钮 将数据集置于编辑状态。

  • Post 按钮 提交对当前记录的修改。

  • Cancel 按钮 取消对当前记录的修改。

  • Refresh 按钮 清除数据浏览组件的显示缓冲区,并用与其相连的数据集组件中的记录刷新显示缓冲区。


这个有点牛逼嗷,JavaFx 没有自带,我也懒得自己写一个这种功能的组件,用几个按钮代替,实现增删改查的功能就行了。。


JavaFx 给组件添加背景图片




我们利用 css 样式可以给 JavaFx 的组件添加背景图片。


style="-fx-background-image: url('/pictures/s4.png'); -fx-background-size: 100% 100%"


当然也可以给组件添加背景颜色:


style="-fx-background-image: url('/pictures/s4.png'); -fx-background-size: 100% 100%"


我们利用 Idea 在 .fxml 文件中任意一个组件的标签中打 style="-fx" 即可提示出样式。



弹框方法的封装




private void alert(String title, String content, String header, Alert.AlertType type){


Alert alert = new Alert(type);


alert.setTitle(title);


alert.setHeaderText(header);


alert.setContentText(content);


alert.showAndWait();


}


JDBC 连接数据库




JdbcUtil 工具类:


package com.yusael.util;


import javax.sql.DataSource;


import java.sql.*;


// Java Data Base Connect


public class JdbcUtil { // 连接数据库


public static DataSource ds = null;


// static {


// try {


// //1.加载配置文件


// Properties p = new Properties();


// FileInputStream in = new FileInputStream("/db.properties");


// // InputStream in = JdbcUtil.class.getClassLoader().getResourceAsStream("db.properties");


// p.load(in);


// //ds = BasicDataSourceFactory.cr


【一线大厂Java面试题解析+后端开发学习笔记+最新架构讲解视频+实战项目源码讲义】
浏览器打开:qq.cn.hn/FTf 免费领取
复制代码


eateDataSource(p);


// ds = DruidDataSourceFactory.createDataSource(p);


// }catch(Exception e) {


// e.printStackTrace();


// }


// }


public static Connection getConn() {


Connection connection = null;


try {


Class.forName("com.mysql.jdbc.Driver");


String url = "jdbc:mysql://localhost:3306/sxn210224?useSSL=false";


String user = "root";


String password = "1234";


// 2.连接数据


// return ds.getConnection();


connection = DriverManager.getConnection(url, user, password);


return connection;


} catch (Exception e) {


System.out.println("报错了!");


e.printStackTrace();


}


return connection;


}


public static void close(Connection conn, Statement st, ResultSet rs) {


if (rs != null) {


try {


rs.close();


} catch (SQLException e) {


e.printStackTrace();


}


}


if (st != null) {


try {


st.close();


} catch (SQLException e) {


e.printStackTrace();


}


}


if (conn != null) {


try {


conn.close();


} catch (SQLException e) {


e.printStackTrace();


}


}


}


}


数据库操作:


package com.yusael.dao.impl;


import com.yusael.dao.IFlightDAO;


import com.yusael.entity.Flight;


import com.yusael.util.JdbcUtil;


import java.sql.Connection;


import java.sql.PreparedStatement;


import java.sql.ResultSet;


import java.util.ArrayList;


import java.util.List;


public class FlightDAOImpl implements IFlightDAO {


public int executeUpdate(String sql, Object... params) {


Connection conn = null;


PreparedStatement ps = null;


try {


// 1.加载驱动


// 2.连接数据库


conn = JdbcUtil.getConn();


// 3.创建语句


ps = conn.prepareStatement(sql);


// 遍历参数


for (int i = 0; i < params.length; i++) {


// ps.setString(1, stu.getName());


// ps.setInt(2, stu.getAge());

评论

发布
暂无评论
【数据库实验】《小型MIS的开发》