综合练习

一、语言和环境

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. Openstack swift 学习笔记

    Swift 不是文件系统或者实时的数据存储系统,而是对象存储,用于长期存储永久类型的静态数据.这些数据可以检索.调整和必要时进行更新.Swift最适合虚拟机镜像.图片.邮件和存档备份这类数据的存储. ...

  2. 倍增lca-ZJOI2012 灾难

    一个食物网有N个点,代表N种生物,如果生物x可以吃生物y,那么从y向x连一个有向边.这个图没有环.图中有一些点没有连出边,这些点代表的生物都是生产者,可以通过光合作用来生存: 而有连出边的点代表的都是 ...

  3. 洛谷P1054 等价表达式

    P1054 等价表达式 题目描述 明明进了中学之后,学到了代数表达式.有一天,他碰到一个很麻烦的选择题.这个题目的题干中首先给出了一个代数表达式,然后列出了若干选项,每个选项也是一个代数表达式,题目的 ...

  4. 洛谷P1275 魔板

    P1275 魔板 题目描述 有这样一种魔板:它是一个长方形的面板,被划分成n行m列的n*m个方格.每个方格内有一个小灯泡,灯泡的状态有两种(亮或暗).我们可以通过若干操作使魔板从一个状态改变为另一个状 ...

  5. vue使用webpack压缩后体积过大要怎么优化

    vue使用webPack压缩后存储过大,怎么优化 在生产环境去除developtool选项 在webpack.config.js中设置的developtool选项,仅适用于开发环境,这样会造成打包成的 ...

  6. Android Gradle 学习笔记(六):Gradle 插件

    Gradle 本身提供了一些基本的概念和整体核心的框架,其他用于描述真实使用场景的都可以通过插件扩展的方式来实现.这样就可以通过抽象的方式提供一个核心的框架,其他具体的功能和业务都通过插件扩展的方式来 ...

  7. django--权限(1)初识

    一.权限表结构设计 1.认识权限 生活中处处有权限,比如,腾讯视频开会员才有观看某个最新电影的权限,你有房间钥匙就有了进入这个房间的权限,等等.同样,程序开发过程中也有权限,我们今天说的权限指的是we ...

  8. JD孔_20160901

    1.买的 “[京东超市]GL格朗 耳温枪/电子体温计/温度计/耳温计EW-2”  http://item.jd.com/385507.html 2.

  9. 029 Divide Two Integers 两数相除

    不使用乘号,除号和取模符号将两数相除.如果溢出返回 MAX_INT.详见:https://leetcode.com/problems/divide-two-integers/description/ ...

  10. (转)linux route命令详解

    linux route命令详解 原文:https://www.cnblogs.com/lpfuture/p/5857738.html   &&   http://blog.csdn.n ...