zoukankan      html  css  js  c++  java
  • 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("编号" + "	" + "航班号" + "	" + "目的地" + "	" + "起飞日期");
    
    		for (AirInfo air : listAir) {
    			System.out.println(air.getId() + "	" + air.getFlight_number() + "	" + air.getDestination() + "	"
    					+ 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("编号" + "	" + "航班号" + "	" + "目的地" + "	" + "起飞日期");
    		while (rs.next()) {
    			System.out.println(rs.getInt("id") + "	" + rs.getInt("flight_number") + "	" + rs.getString("destination")
    					+ "	" + 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") + "	" + rs.getInt(" flight_number") + "	" + rs.getString("destination")
    					+ "	" + 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();
    		}
    	}
    }
    
    
  • 相关阅读:
    java在线聊天项目0.7版 连接多个客户端问题,开启多个客户端后服务器端只接收到一个 对各种异常的补充处理
    java在线聊天项目0.6版 解决客户端关闭后异常问题 dis.readUTF()循环读取已关闭的socket
    指针 引用 举例:通过指针变量访问整型变量
    字符串数组 输入3个字符串,要求按由小到大的字母顺序输出; 输入n个学生的姓名和学号到字符串数组中,在输入一个姓名,如果班级有该生则返回其信息,否则返回本班无此人
    java在线聊天项目0.5版 解决客户端向服务器端发送信息时只能发送一次问题 OutputStreamWriter DataOutputStream socket.getOutputStream()
    java在线聊天项目0.4版本 制作服务端接收连接,客户端连接功能 新增客户端窗口打开时光标指向下边文本域功能,使用WindowListener监听WindowAdapter
    java在线聊天项目0.3版本 制作客户端窗体,实现发送按钮和回车发送信息功能,使用ActionListener监听事件中actionPerformed方法(用内部类和匿名内部类两种方法)
    java在线聊天项目0.2版本 制作客户端窗体,使用swing(用户界面开发工具包)和awt(抽象窗口工具包) BorderLayout布局与GridLayout布局不同之处 JPanel设置大小
    java在线聊天项目0.1版本 制作客户端窗体,使用swing(用户界面开发工具包)和awt(抽象窗口工具包)
    HashCode的作用原理和实例解析
  • 原文地址:https://www.cnblogs.com/qichunlin/p/9136646.html
Copyright © 2011-2022 走看看