2018.6.6 基于Oracle数据库的航天信息系统JDBC练习

综合练习

一、语言和环境

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();
        }
    }
}

猜你喜欢

转载自www.cnblogs.com/qichunlin/p/9136646.html
今日推荐