综合练习

一、语言和环境

A、实现语言
Java
B、环境要求
JDK 6.0及其以上版本、MyEclipse7.5及其以上版本、Oracle11g、PL/SQL Developer

二、功能要求

开发基于控制台的航班信息系统。具体要求如下:
(1)显示航班信息系统主菜单,包括:
1)列出所有航班
2)按起飞时间查询
3)按目的地查询
4)删除航班
5)更新航班
6)退出系统

(2)列出所有航班:查出所有航班的信息,以列表形式显示,包括:编号,航班号,目的地,起飞日期。如图-2所示。

(3)按起飞时间查询:输入起飞时间(格式如2011-2-25),查出所有这一天的航班。如图-3所示。

(4)按目的地查询:输入目的地,查出所有飞往此地的航班。如图-4所示。

(5)删除航班:删除指定编号的航班。如图-5所示。

(6)更新航班:更新指定编号的航班。如图-6所示。

(7)退出系统。

系统运行界面包括。

主菜单界面

列出所有航班界面

按起飞时间查询界面

按目的地查询界面

删除指定航班界面

 更新指定航班界面

三、类的设计

采用DAO模式开发此系统,需要定义如下类
航班信息实体类(AirInfo)
 航班编号(id)
 航班号(flight_number)
 目的地(destination)
 起飞日期(flight_date)
数据库连接和关闭类(BaseDao)
航班信息DAO接口(AirInfoDao)
航班信息DAO实现类(AirInfoDaoImpl)
Main类

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

1、创建数据库表airinfo,添加测试数据不少于4条。
2、创建序列airinfoSeq,用于实现airinfo表的主键自增。
3、创建实体类AirInfo,根据业务提供需要的构造方法和setter/getter方法。
4、创建BaseDao类,实现数据库连接和关闭功能。
5、创建DAO接口AirInfoDao,定义查询所有航班,按日期和目的地查询航班,删除航班,更新航班的方法。
6、创建DAO实现类AirInfoDaoImpl,继承BaseDao类,实现AirInfoDao接口,使用JDBC完成相应数据库操作。
7、创建Main类,完成在控制台显示留言信息和用户添加留言操作,启动和运行系统。

oracle数据库操作

package com.glut.demo2;
/**
* 数据库连接和关闭类(BaseDao)
* @author qichunlin
*
*/
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.Statement; public class BaseDao {
//数据库参数包括: 驱动 地址 用户名 密码
private static final String DRIVER = "oracle.jdbc.driver.OracleDriver";
private static final String URL = "jdbc:oracle:thin:@localhost:1521:booksales";
private static final String USER = "bs";
private static final String PWD = "bs"; //连接数据库
public static Connection getConn(){
Connection conn = null;
try {
Class.forName(DRIVER);
conn = DriverManager.getConnection(URL,USER,PWD);
System.out.println("Connection Successful");
} catch (Exception e) {
// TODO: handle exception
e.printStackTrace();
} return conn;
} public static void closeConn(ResultSet rs,Statement st,Connection conn){
try {
if (rs != null) {
rs.close();
} if (st != null) {
st.close();
} if (conn != null) {
conn.close();
}
} catch (Exception e) {
e.printStackTrace();
}
}
/*public static void main(String[] args) {
BaseDao.getConn();//测试
}*/
}

对象AirInfo实体类

package com.glut.demo2;

/**
* 航班信息系统
* 实体类
* @author qichunlin
*
*/
public class AirInfo {
private int id;
private int flight_number;
private String destination;
private String flight_date;
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public int getFlight_number() {
return flight_number;
}
public void setFlight_number(int flight_number) {
this.flight_number = flight_number;
}
public String getDestination() {
return destination;
}
public void setDestination(String destination) {
this.destination = destination;
}
public String getFlight_date() {
return flight_date;
}
public void setFlight_date(String flight_date) {
this.flight_date = flight_date;
}
public AirInfo() {
super();
// TODO Auto-generated constructor stub
}
public AirInfo(int id, int flight_number, String destination,
String flight_date) {
super();
this.id = id;
this.flight_number = flight_number;
this.destination = destination;
this.flight_date = flight_date;
} @Override
public String toString() {
return "AirInfo [id=" + id + ", flight_number=" + flight_number + ", destination=" + destination
+ ", flight_date=" + flight_date + "]";
} }

AirInfoDao接口 主要用来对方法的声明

package com.glut.demo2;

import java.util.List;

/**
* 航班信息DAO接口(AirInfoDao)
* @author qichunlin
*
*/
public interface AirInfoDao {
//定义查询所有航班
public List<AirInfo> queryAll()throws Exception;
//按日期查询航班
public void query1(String time) throws Exception;
//按目的地查询航班
public void query2(String destination)throws Exception;
//通过id删除航班
public boolean deleteAirInfo(int id)throws Exception;
//通过id更新航班的方法
public boolean updateAir(int id,String newDestination,String newDate)throws Exception;
}

d对Dao接口类的声明和具体实现

package com.glut.demo2;

import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.util.ArrayList;
import java.util.List;
import java.util.Scanner; /**
* 实现类
* @author qichunlin
*
*/
public class AirInfoDaoImpl implements AirInfoDao { // 显示菜单方法
public void showMenu() throws Exception {
System.out.println("=====欢迎使用航班信息管理系统=====");
System.out.println("请选择操作");
System.out.println("1.列出航班");
System.out.println("2.按起飞时间查询");
System.out.println("3.按目的地查询");
System.out.println("4.删除航班");
System.out.println("5.更新航班");
System.out.println("6.退出系统"); // 输入选择
Scanner sc = new Scanner(System.in);
int choose = sc.nextInt();
switch (choose) {
case 1:
queryAll();
break;
case 2:
System.out.println("请输入日期:");
String time = sc.next();
query1(time);
break;
case 3:
System.out.println("请输入目的地:");
String destination = sc.next();
query2(destination);
break;
case 4:
System.out.println("请输入航班编号:");
int id = sc.nextInt();
deleteAirInfo(id);
break;
case 5:
System.out.println("请输入更新的航班编号:");
int oldId = sc.nextInt(); System.out.println("请输入新的航班编号:");
int newId = sc.nextInt(); System.out.println("请输入新的目的地:");
String newDestination = sc.next(); System.out.println("请输入新的起飞日期:");
String newDate = sc.next(); updateAir(newId, newDestination, newDate);
break;
case 6:
System.out.println("欢迎下次使用!!");
System.exit(0);
break;
default:
break;
} System.out.println("是否还要继续?Y/N");
String c = sc.next();
switch (c) {
case "Y":
showMenu();
break;
case "N":
System.exit(0);
System.out.println("欢迎下次使用");
break; default:
break;
}
} @Override
public List<AirInfo> queryAll() throws Exception {
List<AirInfo> listAir = new ArrayList<AirInfo>();
Connection conn = BaseDao.getConn();
conn.commit();
String sql = "select * from airinfo";
PreparedStatement pstmt = conn.prepareStatement(sql);
ResultSet rs = pstmt.executeQuery();
while (rs.next()) {
AirInfo air = new AirInfo(rs.getInt("id"), rs.getInt("flight_number"), rs.getString("destination"),
rs.getString("flight_date"));
listAir.add(air);
}
System.out.println("编号" + "\t" + "航班号" + "\t" + "目的地" + "\t" + "起飞日期"); for (AirInfo air : listAir) {
System.out.println(air.getId() + "\t" + air.getFlight_number() + "\t" + air.getDestination() + "\t"
+ air.getFlight_date());
}
BaseDao.closeConn(rs, pstmt, conn);
return listAir;
} @Override
public void query1(String time) throws Exception {
Connection conn = BaseDao.getConn();
String sql = "select * from airinfo where flight_date=to_date(?,'yyyy-mm-dd')";
PreparedStatement pstmt = conn.prepareStatement(sql);
pstmt.setString(1, time);
ResultSet rs = pstmt.executeQuery();
System.out.println("编号" + "\t" + "航班号" + "\t" + "目的地" + "\t" + "起飞日期");
while (rs.next()) {
System.out.println(rs.getInt("id") + "\t" + rs.getInt("flight_number") + "\t" + rs.getString("destination")
+ "\t" + rs.getString("flight_date"));
}
BaseDao.closeConn(rs, pstmt, conn); } @Override
public void query2(String destination) throws Exception {
Connection conn = BaseDao.getConn();
String sql = "select * from airinfo where destination=?";
PreparedStatement pstmt = conn.prepareStatement(sql);
pstmt.setString(1, destination);
ResultSet rs = pstmt.executeQuery();
while (rs.next()) {
System.out.println(rs.getInt("id") + "\t" + rs.getInt(" flight_number") + "\t" + rs.getString("destination")
+ "\t" + rs.getString("flight_date"));
}
BaseDao.closeConn(rs, pstmt, conn);
} @Override
public boolean deleteAirInfo(int id) throws Exception {
Connection conn = BaseDao.getConn();
String sql = "delete from airinfo where id=?";
PreparedStatement pstmt = conn.prepareStatement(sql);
pstmt.setInt(1, id);
int count = pstmt.executeUpdate();
if (count > 0) {
System.out.println("删除成功");
} else {
System.out.println("删除失败");
}
BaseDao.closeConn(null, pstmt, conn);
return false;
} @Override
public boolean updateAir(int id, String newDestination, String newDate) throws Exception {
//AirInfo a = new AirInfo();
//a.setId(id); Connection conn = BaseDao.getConn();
String sql = "update airinfo set destination=?,flight_date=to_date(?,'yyyy-mm-dd') where id=?";
PreparedStatement pstmt = conn.prepareStatement(sql);
pstmt.setString(1, newDestination);
pstmt.setString(2, newDate);
pstmt.setInt(3, id);
int count = pstmt.executeUpdate();
if (count > 0) {
System.out.println("更新成功");
} else {
System.out.println("更新失败");
}
BaseDao.closeConn(null, pstmt, conn);
return false;
} }

测试类 调用菜单的方法

package com.glut.demo2;

/**
* 测试类
* @author qichunlin
*
*/
public class Test {
public static void main(String[] args) {
AirInfoDaoImpl ad = new AirInfoDaoImpl();//子类对象指向父类对象
try {
ad.showMenu();
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}

2018.6.6 基于Oracle数据库的航天信息系统JDBC练习的更多相关文章

  1. 通用超级强大的基于Oracle数据库的代码生成器

    项目中使用了Oracle数据库,命名基本规范为表名和字段名全部大写,用下划线分割各个单词: 如“BASE_USER_LOGON_EXTEND”这个表表示用户登录的扩展表. 基于这个规范,通用权限管理系 ...

  2. 基于Oracle数据库登陆界面及功能实现 Java版

    首先要在Oracle数据库创建表文件,包括建立表头以及关键字(唯一标识符),此次程序所用的表名称为SW_USER_INFO,表头有UNAME.UKEY.USEX等,关键字为UCC,然后添加一条记录,用 ...

  3. 基于oracle数据库存储过程的创建及调用

    1.PLSQL编程 1.1概念和目的 PL/SQL(Procedure Language/SQL) PLSQL是Oracle对sql语言的过程化扩展 指在SQL命令语言中增加了过程处理语句(如分支.循 ...

  4. oracle学习1 基于oracle数据库的PLSQL编程以及存储过程的创建和使用视频

    https://www.bilibili.com/video/av46777605 plsql中选择testWindow中可以进行测试 1.编写函数在plsql的testwindow中 begin d ...

  5. Oracle数据库编程:在JDBC中应用Oracle

    9.在JDBC中应用Oracle: JDBC访问数据库基本步骤:          1.加载驱动          2.获取链接对象          3.创建SQL语句          4.提交S ...

  6. 基于Oracle的SQL优化(社区万众期待 数据库优化扛鼎巨著)

    基于Oracle的SQL优化(社区万众期待数据库优化扛鼎巨著) 崔华 编   ISBN 978-7-121-21758-6 2014年1月出版 定价:128.00元 856页 16开 编辑推荐 本土O ...

  7. 基于ORACLE建表和循环回路来创建数据库存储过程SQL语句来实现

    一个.概要 在实际的软件开发项目.我们经常会遇到需要创造更多的相同类型的数据库表或存储过程时,.例如.假设按照尾号点表的ID号,然后,你需要创建10用户信息表,的用户信息放在同一个表中. 对于类型同样 ...

  8. Oracle 数据库导入与出

    Oracle 数据库导入与出 导出( EXPORT )是用 EXP 将数据库部分或全对象的结构和导出 . 导入( 导入( IMPORT )是用 )是用 IMP IMP将 OS 文件中的对象结构和数据装 ...

  9. 批量Excel数据导入Oracle数据库

    由于一直基于Oracle数据库上做开发,因此常常会需要把大量的Excel数据导入到Oracle数据库中,其实如果从事SqlServer数据库的开发,那么思路也是一样的,本文主要介绍如何导入Excel数 ...

随机推荐

  1. 51nod1049(最大子段和2)

    题目链接:https://www.51nod.com/onlineJudge/questionCode.html#!problemId=1049 题意:中文题诶- 思路:本题和51nod1049(题解 ...

  2. 洛谷P2607 [ZJOI2008]骑士

    P2607 [ZJOI2008]骑士 题目描述 Z国的骑士团是一个很有势力的组织,帮会中汇聚了来自各地的精英.他们劫富济贫,惩恶扬善,受到社会各界的赞扬. 最近发生了一件可怕的事情,邪恶的Y国发动了一 ...

  3. Linux调优(文件系统)

    查看单个文件是否发生碎片化(被存在磁盘非连续磁盘块上) # filefrag -v /var/log/messages 查看文件系统是否存在大量碎片(会显示空闲离散的块) # dumpe2fs /de ...

  4. Spring ThreadPoolTaskExecutor队列满的异常处理

    <!-- 配置线程池 --> <bean id="threadPool" class="org.springframework.scheduling.c ...

  5. zabbix对tcp状态监控

    1.先编写一个获取tcp状态的脚本文件,脚本放在/usr/lib/zabbix/alertscripts/vim /usr/lib/zabbix/alertscripts/tcp_status.sh ...

  6. Zookeeper崩溃恢复过程(Leader选举)

    1. 崩溃恢复 a). leader选择过程可以保证新leader是ZXID最大的节点 b). ZAB协议确保丢弃那些只在leader上被提出的事务,场景 leader发出PROPOSAL收到ACK, ...

  7. Http中常见MIME类型

    MIME类型 常见MIME类型: 超文本标记语言文本 .html text/html xml文档 .xml text/xml XHTML文档 .xhtml application/xhtml+xml ...

  8. MongoDB Linux 安装配置 后台运行

    介绍安装的文档很多,可以参考这篇: http://www.mkyong.com/mongodb/how-to-install-mongodb-on-mac-os-x/ 安装完后你可能会碰到的2个问题. ...

  9. struts2 第二天

    3.自动装配  零散属性:Action类中两个成员变量的名称和页面上表单元素name属性值保持一致.      规则:约定优于配置.  领域模型:两种配置    public class FirstA ...

  10. String与Date转换

    public class TimeTraining { public static void changeStr(String str){ str = "137878"; } pu ...