综合练习
一、语言和环境
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();
}
}
}