JavaSwing 船只停靠管理可视化
Posted easyidea
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了JavaSwing 船只停靠管理可视化相关的知识,希望对你有一定的参考价值。
项目源码 :https://github.com/Wo-com/ShipPort
如果觉得不错的话就在GitHub里面给个Star吧
JavaSwing 船只停靠管理可视化
项目目录:
工具类主要是
consql包里面的 Dao类,用于连接数据库。
tool包里面的Appoint类用于船只 指定港口。
tool包里面的DateFormat类用于时间计算。
Dao类源码:
import java.sql.Connection; import java.sql.DriverManager; import java.sql.PreparedStatement; import java.sql.ResultSet; import java.sql.SQLException; public class Dao private Connection conn = null; PreparedStatement statement = null; // connect to mysql public void connSQL() String url = "jdbc:mysql://localhost:3306/ShipPort?useUnicode=true&characterEncoding=utf-8&useSSL=false"; String username = "root"; String password = "zgx1734475W"; // 加载驱动程序以连接数据库 try Class.forName("com.mysql.cj.jdbc.Driver" ); conn = DriverManager.getConnection( url,username, password ); //捕获加载驱动程序异常 catch ( ClassNotFoundException cnfex ) System.err.println( "装载 JDBC/ODBC 驱动程序失败。" ); cnfex.printStackTrace(); //捕获连接数据库异常 catch ( SQLException sqlex ) System.err.println( "无法连接数据库" ); sqlex.printStackTrace(); // 断开连接 MySQL public void deconnSQL() try if (conn != null) conn.close(); catch (Exception e) System.out.println("关闭数据库问题 :"); e.printStackTrace(); // 查询语句 public ResultSet selectSQL(String sql) ResultSet rs = null; try statement = conn.prepareStatement(sql); rs = statement.executeQuery(sql); catch (SQLException e) e.printStackTrace(); return rs; // 插入语句 public boolean insertSQL(String sql) try statement = conn.prepareStatement(sql); statement.executeUpdate(); return true; catch (SQLException e) System.out.println("插入数据库时出错:"); e.printStackTrace(); catch (Exception e) System.out.println("插入时出错:"); e.printStackTrace(); return false; //删除语句 public boolean deleteSQL(String sql) try statement = conn.prepareStatement(sql); statement.executeUpdate(); return true; catch (SQLException e) System.out.println("删除数据库时出错:"); e.printStackTrace(); catch (Exception e) System.out.println("删除时出错:"); e.printStackTrace(); return false; //更新语句 public boolean updateSQL(String sql) try statement = conn.prepareStatement(sql); statement.executeUpdate(); return true; catch (SQLException e) System.out.println("更新数据库时出错:"); e.printStackTrace(); catch (Exception e) System.out.println("更新时出错:"); e.printStackTrace(); return false; public static void main(String args[]) Dao db = new Dao(); db.connSQL(); // String sql1 = "select * from port"; // String sql2 = "insert into port(id,name) values("+2222222+",‘mmmmm‘)"; // String sql3 = "delete from port where id=‘20190101‘"; // String sql4 = "update ship set name=‘bbbb‘ where id=‘3453‘;"; // String sql5="insert into portship(shipid,arrive,leaves,portid) values(‘222‘,‘2012-12-12 01:12:11‘,‘2012-12-12 01:12:11‘,‘5‘)"; // String sql5="select * from ship where id=‘2222‘;"; // String sql6="select recent form port where id=‘333‘;"; String min_time="select * from portship where leaves<=‘2019-06-15 01:12:11‘;"; ResultSet rs_min=db.selectSQL(min_time); try while(rs_min.next()) //第一行 获取最近停靠时间 System.out.println(rs_min.getString(1)); catch(Exception e) System.out.println("查询出现max min"); System.out.println("查询完成"); db.deconnSQL();//关闭连接
Appoint类源码:
import java.sql.ResultSet; import consql.Dao; public class Appoint Dao db = new Dao(); public Appoint() System.out.println("--开始指定位置--"); public boolean human_appoint(String shipid,String portid) try db.connSQL(); //连接数据库 //获取船只到达离开时间 String sql1="select * from ship where id=‘"+shipid+"‘;"; System.out.println(sql1); ResultSet rs2=db.selectSQL(sql1); String ar = null; String lv = null; if(rs2.first()) //第一行 获取最近停靠时间 System.out.println(rs2.getString("leaves")); ar=rs2.getString("arrive"); lv=rs2.getString("leaves"); // String sql4="insert into portship(shipid,arrive,leaves,portid) values(‘"+shipid+"‘,‘"+ar+"‘,‘"+lv+"‘,‘"+portid+"‘)"; int ptid=Integer.parseInt(portid); update(shipid,ar,lv,ptid); System.out.print("手动指定完成"); catch(Exception e1) System.out.print("手动指定,出错"); db.deconnSQL(); //断开连接 return false; db.deconnSQL(); return true; //断开连接 public boolean auto_appoint(String shipid) try db.connSQL(); //连接数据库 //获取船只 偏好 到达时间 离开时间 String sql1="select * from ship where id=‘"+shipid+"‘;"; ResultSet rs1=db.selectSQL(sql1); String per = null; String one_ar = null; String one_lv = null; if(rs1.first()) //只有一行 per=rs1.getString("perfer"); one_ar=rs1.getString("arrive"); one_lv=rs1.getString("leaves"); int one_per=Integer.parseInt(per); //查询偏好处有没有 时间冲突 String sql2="select * from portship where portid=‘"+one_per+"‘;";//查询已经停靠在 偏好位置的船只 System.out.println("查看偏好处有没有空"); boolean add_one=conflict(shipid,one_ar,one_lv,one_per,sql2);//在偏好位置添加成功则退出 if(!add_one) System.out.println("查看偏好处没有空 查看其他位置"); String sql3="select * from port;"; ResultSet rs3=db.selectSQL(sql3); rs3.last() ; int port_row = rs3.getRow(); rs3.beforeFirst();//光标回滚 获取行数 光标回滚 int portid=0; int i=0; boolean add_two=false; //如果在其他位置 可以添加则 添加之后退出 while(rs3.next()&&(!add_two)) i++; portid=rs3.getInt("num_add"); String sql4="select * from portship where portid=‘"+portid+"‘;";//查询已经停靠在 偏好位置的船只 add_two=conflict(shipid,one_ar,one_lv,portid,sql4); if(i==port_row&&(!add_two)) //查找所有位置没空位时 db.deconnSQL(); //断开连接 return false; System.out.println("自动分配结束"); catch(Exception e1) db.deconnSQL(); //断开连接 System.out.println("自动分配,出错"); db.deconnSQL(); //断开连接 return true; boolean conflict(String shipid,String one_ar,String one_lv,int one_per,String sql) try DateFormat da=new DateFormat(); String all_ar = null; String all_lv = null; ResultSet rs2=db.selectSQL(sql); if(rs2.next()) System.out.println("港口不为空"); else update(shipid,one_ar,one_lv,one_per); System.out.println("港口"+one_per+"为空可以添加"); rs2.last() ; int row = rs2.getRow(); //获取行数 int i=0; //i每比较一次增加1 当等于row时那么 执行到最后一条数据了 rs2.beforeFirst();//游标归位 while(rs2.next()) //为空不执行 不为空执行 all_ar=rs2.getString("arrive"); all_lv=rs2.getString("leaves"); int num=i+1; System.out.println("港口"+one_per+"不为空 判定时间是否冲突"+num+"次");//时间段(a-b)时间段(c-d) 不相交条件: (b<c)||(d<a) int dtime1=da.dateDiff(all_lv,one_ar); //船只到达时间 与 已经停靠离开时间做时间差 int dtime2=da.dateDiff(one_lv,all_ar); //已经停靠到达时间做时间差 与 船只离开时间 if((dtime1>0)||(dtime2>0)) i++; if(i==row) //直到最后一条数据都不冲突时 那么可以添加 update(shipid,one_ar,one_lv,one_per); System.out.println("港口"+one_per+"不为空 时间不冲突"); else System.out.println("港口"+one_per+"不为空 时间冲突"); return false; catch(Exception e) db.deconnSQL(); //断开连接 System.out.println("confict判定错误xxxx"); return true; void update(String shipid,String ar,String lv,int per)//执行插入操作(为船只安排泊位) // String sql5 = "select * from portship where shipid=‘"+shipid+"‘;"; //把港口编号存入船只表中 String sql6 = "update ship set site=‘"+per+"‘ where id=‘"+shipid+"‘;"; db.updateSQL(sql6); //插入数据到portship中,作为服务记录 //String sql4="insert into portship(shipid,arrive,leaves,portid) values(‘222‘,‘2012-12-12 01:12:11‘,‘2012-12-12 01:12:11‘,‘5‘)"; String sql7="insert into portship(shipid,arrive,leaves,portid) values(‘"+shipid+"‘,‘"+ar+"‘,‘"+lv+"‘,‘"+per+"‘)"; db.insertSQL(sql7);
DateFormat类源码:
import java.text.SimpleDateFormat; /** * 用于计算 时间间隔 */ public class DateFormat public static void main(String[] args) try // long min = dateDiff("2014-05-27 13:30:00","2014-05-27 13:00:00"); // System.out.println("---------相隔分钟数: "+min); catch (Exception e) e.printStackTrace(); public int dateDiff(String startTime, String endTime) throws Exception String format="yyyy-MM-dd HH:mm:ss"; //按照传入的格式生成一个simpledateformate对象 SimpleDateFormat sd = new SimpleDateFormat(format); long nd = 1000*24*60*60;//一天的毫秒数 long nh = 1000*60*60;//一小时的毫秒数 long nm = 1000*60;//一分钟的毫秒数 // long ns = 1000;//一秒钟的毫秒数 long diff; //获得两个时间的毫秒时间差异 diff = sd.parse(endTime).getTime() - sd.parse(startTime).getTime(); long day = diff/nd;//计算差多少天 long hour = diff%nd/nh;//计算差多少小时 long min = diff%nd%nh/nm;//计算差多少分钟 // long sec = diff%nd%nh%nm/ns;//计算差多少秒//输出结果 // System.out.println("时间相差:"+day+"天"+hour+"小时"+min+"分钟"+sec+"秒。"); int bet=(int) (day*24+hour+min/60); return bet ;
至此项目源码已经介绍完成了,接下来介绍数据库设计;JavaSwing 船只停靠管理可视化(五)
以上是关于JavaSwing 船只停靠管理可视化的主要内容,如果未能解决你的问题,请参考以下文章