航班管理系统
发布时间
阅读量:
阅读量
相关知识包括工厂模式(Factory Pattern)、MVC模式(Model-View-Controller Pattern)、反射机制(Reflection)以及基于XML的文件解析与读取操作、基于I/O流的TXT文件读写操作等核心概念。其中具体涉及到了flights.xml这一特定XML文件的操作技术
<?xml version="1.0" encoding="UTF-8"?>
<!-- 航班信息 -->
<flights>
<fight flightNo="AB1234">
<departureCity>大连</departureCity>
<departureTime>2019-05-06 19:33:00</departureTime>
<arrivalCity>上海</arrivalCity>
<arrivalTime>2019-05-06 19:33:00</arrivalTime>
</fight>
<fight flightNo="CA1234">
<departureCity>北京</departureCity>
<departureTime>2019-08-02 12:28:00</departureTime>
<arrivalCity>上海</arrivalCity>
<arrivalTime>2019-08-02 12:28:00</arrivalTime>
</fight>
<fight flightNo="NA1234">
<departureCity>北京</departureCity>
<departureTime>2019-08-02 15:28:00</departureTime>
<arrivalCity>上海</arrivalCity>
<arrivalTime>2019-08-02 15:28:00</arrivalTime>
</fight>
</flights>
代码解释
flight.txt
CA1234,北京,2019-08-02 10:30:00,上海,2019-08-02 12:28:00
NA1234,北京,2019-08-02 13:30:00,上海,2019-08-02 15:28:00
CZ1234,北京,2019-08-02 17:03:00,上海,2019-08-02 19:28:00
代码解释
applicationContext.xml
<?xml version="1.0" encoding="UTF-8"?>
<beans >
<bean id="dao" class="cn.kgc.tangcco.chengxiangjian.dao.impl.FlightDaoImp"></bean>
<bean id="ser" class="cn.kgc.tangcco.chengxiangjian.service.impl.FlightServiceImp"></bean>
</beans>
代码解释
test
package cn.kgc.tangcco.chengxiangjian.test;
import cn.kgc.tangcco.chengxiangjian.action.FlightAction;
public class test {
//创建main方法
public static void main(String[] args) {
//实例化FlightAction
FlightAction flightAction = new FlightAction();
//调用menu()方法
flightAction.menu();
}
}
代码解释
Constant
package cn.kgc.tangcco.chengxiangjian.common;
import java.io.File;
import java.util.List;
import java.util.Map;
import java.util.concurrent.ConcurrentHashMap;
import org.dom4j.Document;
import org.dom4j.DocumentException;
import org.dom4j.Element;
import org.dom4j.io.SAXReader;
public class Constant {
//创建map集合,用于解析applicationContext.xml后存放数据
private static Map<String, String> map = new ConcurrentHashMap<String, String>();
//设定常量值
public static final String DAO = "dao";
public static final String SER = "ser";
//解析applicationContext.xml文件,数据存入map集合
static {
SAXReader saxReader = new SAXReader();
try {
Document document = saxReader.read(new File("src/files/applicationContext.xml"));
Element root = document.getRootElement();
List<Element> list = root.elements();
for (Element element : list) {
String key = element.attributeValue("id");
String value = element.attributeValue("class");
map.put(key, value);
}
} catch (Exception e) {
e.printStackTrace();
}
}
//根据键,返回对应的值
public static String getUrl(String key) {
return map.get(key);
}
}
代码解释
ObjectFactory
package cn.kgc.tangcco.chengxiangjian.common;
import java.util.Map;
import java.util.concurrent.ConcurrentHashMap;
//工厂模式
public class ObjectFactory {
//创建map集合
private static Map<String, Object> map = new ConcurrentHashMap<String, Object>();
//反射模式创建对象
public static <E> E getInstence(String key) {
E object = null;
if (map.containsKey(key)) {
object = (E) map.get(key);
}
try {
Class clz = Class.forName(key);
object = (E) clz.newInstance();
map.put(key, object);
} catch (Exception e) {
e.printStackTrace();
}
return object;
}
}
代码解释
utils
package cn.kgc.tangcco.chengxiangjian.common;
import java.util.Date;
import java.text.ParseException;
import java.text.SimpleDateFormat;
public class utils {
private static SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd HH:ss:mm");
//字符串转日期
public static String dateTostr(Date date) {
return format.format(date);
}
//日期转字符串
public static Date strToDate(String str) {
try {
return format.parse(str);
} catch (ParseException e) {
e.printStackTrace();
}
return null;
}
}
代码解释
FlightDaoImp
package cn.kgc.tangcco.chengxiangjian.dao.impl;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.OutputStream;
import java.util.ArrayList;
import java.util.Collection;
import java.util.Collections;
import java.util.Date;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.Set;
import org.dom4j.Document;
import org.dom4j.DocumentException;
import org.dom4j.Element;
import org.dom4j.io.OutputFormat;
import org.dom4j.io.SAXReader;
import org.dom4j.io.XMLWriter;
import cn.kgc.tangcco.chengxiangjian.common.utils;
import cn.kgc.tangcco.chengxiangjian.dao.FlightDao;
import cn.kgc.tangcco.chengxiangjian.entity.Flight;
public class FlightDaoImp implements FlightDao {
private Map<String, Flight> flightMap = new HashMap<String, Flight>();
private static Document document;
public FlightDaoImp() {
String xmlPath = "src/files/flights.xml";
importFromXml(xmlPath);
}
/** * 从xml文件导入航班
* * @param xmlPath
* 文件地址
*/
@Override
public void importFromXml(String xmlPath) {
SAXReader saxReader = new SAXReader();
try {
document = saxReader.read(xmlPath);
Element root = document.getRootElement();
List<Element> list = root.elements();
for (Element element : list) {
String flightNo = element.attributeValue("flightNo");
String departureCity = element.elementText("departureCity");
Date departureTime = utils.strToDate(element.elementText("departureTime"));
String arrivalCity = element.elementText("arrivalCity");
Date arrivalTime = utils.strToDate(element.elementText("arrivalTime"));
Flight flight = new Flight(flightNo, departureCity, departureTime, arrivalCity, arrivalTime);
flightMap.put(flightNo, flight);
}
} catch (Exception e) {
e.printStackTrace();
}
}
/** * 获取所有航班(根据起飞时间升序)
* * @return 所有航班集合
*/
@Override
public List<Flight> getAllFlight() {
List<Flight> list = new ArrayList<Flight>();
for (Flight flight :flightMap.values()) {
list.add(flight);
}
Collections.sort(list);
return list;
}
/** * 根据起飞城市和到达城市查询航班(根据起飞时间升序)
* * @param departureCity
* 起飞城市
* @param arrivalCity
* 到达城市
* @return 查询到的航班集合
*/
@Override
public List<Flight> queryFlightByCity(String departureCity, String arrivalCity) {
List<Flight> list = new ArrayList<Flight>();
for (Flight flight : getAllFlight()) {
if (flight.getDepartureCity().equals(departureCity) && flight.getArrivalCity().equals(arrivalCity)) {
list.add(flight);
}
}
Collections.sort(list);
return list;
}
/** * 添加航班
* * @param flight
* 待添加的航班
* @return 是否添加成功1/0
*/
@Override
public int addFlight(Flight flight) {
int result = 0;
if (flightMap.containsKey(flight.getFlightNo())) {
result = 0;
} else {
result = 1;
flightMap.put(flight.getFlightNo(), flight);
}
return result;
}
/** * 删除航班
* * @param flightNo
* 待删除的航班编号
* @return 1:删除成功 / 0:删除是吧
*/
@Override
public int deleteFlight(String flightNo) {
int result = 0;
if (flightMap.containsKey(flightNo)) {
flightMap.remove(flightNo);
result = 1;
}
return result;
}
/** * 将查询结果导出到txt文件
* * @param flightList
* 查询到的航班集合
* @param txtPath
* txt文件路径
*/
@Override
public void exportToTxt(List<Flight> flightList, String txtPath) {
File file = new File(txtPath);
OutputStream out = null;
try {
out = new FileOutputStream(file);
String string = "";
for (Flight flight : flightList) {
string = string + flight + "\n";
}
byte[] bs = string.getBytes();
out.write(bs);
} catch (Exception e) {
e.printStackTrace();
} finally {
try {
out.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
/** * 将航班信息保存到xml文件中
* * @param xmlPath
*/
@Override
public void saveXml(String xmlPath) {
SAXReader saxReader = new SAXReader();
try {
document = saxReader.read(new File(xmlPath));
Element root = document.getRootElement();
List<Element> list = root.elements();
for (Element element : list) {
root.remove(element);
}
for (Flight flight : getAllFlight()) {
Element element = root.addElement("fight");
element.addAttribute("flightNo", flight.getFlightNo());
element.addElement("departureCity").setText(flight.getDepartureCity());
element.addElement("departureTime").setText(utils.dateTostr(flight.getArrivalTime()));
element.addElement("arrivalCity").setText(flight.getArrivalCity());
element.addElement("arrivalTime").setText(utils.dateTostr(flight.getArrivalTime()));
}
} catch (Exception e) {
e.printStackTrace();
}
OutputStream out = null;
XMLWriter xmlWriter = null;
try {
out = new FileOutputStream(xmlPath);
OutputFormat format = new OutputFormat().createPrettyPrint();
xmlWriter = new XMLWriter(out, format);
xmlWriter.write(document);
} catch (Exception e) {
e.printStackTrace();
} finally {
try {
xmlWriter.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
}
代码解释
FlightDao
package cn.kgc.tangcco.chengxiangjian.dao;
import java.util.List;
import cn.kgc.tangcco.chengxiangjian.entity.Flight;
public interface FlightDao {
/** * 从xml文件导入航班
* * @param xmlPath
* 文件地址
*/
void importFromXml(String xmlPath);
/** * 获取所有航班(根据起飞时间升序)
* * @return 所有航班集合
*/
List<Flight> getAllFlight();
/** * 根据起飞城市和到达城市查询航班(根据起飞时间升序)
* * @param departureCity
* 起飞城市
* @param arrivalCity
* 到达城市
* @return 查询到的航班集合
*/
List<Flight> queryFlightByCity(String departureCity, String arrivalCity);
/** * 添加航班
* * @param flight
* 待添加的航班
* @return 是否添加成功1/0
*/
int addFlight(Flight flight);
/** * 删除航班
* * @param flightNo
* 待删除的航班编号
* @return 1:删除成功 / 0:删除是吧
*/
int deleteFlight(String flightNo);
/** * 将查询结果导出到txt文件
* * @param flightList
* 查询到的航班集合
* @param txtPath
* txt文件路径
*/
void exportToTxt(List<Flight> flightList, String txtPath);
/** * 将航班信息保存到xml文件中
* * @param xmlPath
*/
void saveXml(String xmlPath);
}
代码解释
Flight
package cn.kgc.tangcco.chengxiangjian.entity;
import java.util.Date;
import cn.kgc.tangcco.chengxiangjian.common.utils;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
@NoArgsConstructor
@Data
@AllArgsConstructor
public class Flight implements Comparable<Flight> {
private String flightNo;
private String departureCity;
private Date departureTime;
private String arrivalCity;
private Date arrivalTime;
@Override
//创建比较器,根据起飞时间升序显示
public int compareTo(Flight o) {
int s = this.getDepartureTime().compareTo(o.getDepartureTime());
return s;
}
/* * (non-Javadoc)
* * @see java.lang.Object#toString()
*/
@Override
//重写toString
public String toString() {
return getFlightNo() + "," + getDepartureCity() + "," + utils.dateTostr(getDepartureTime()) + ","
+ getArrivalCity() + "," + utils.dateTostr(getArrivalTime());
}
}
代码解释
FlightServiceImp
package cn.kgc.tangcco.chengxiangjian.service.impl;
import java.util.List;
import cn.kgc.tangcco.chengxiangjian.common.Constant;
import cn.kgc.tangcco.chengxiangjian.common.ObjectFactory;
import cn.kgc.tangcco.chengxiangjian.dao.FlightDao;
import cn.kgc.tangcco.chengxiangjian.entity.Flight;
import cn.kgc.tangcco.chengxiangjian.service.FlightService;
public class FlightServiceImp implements FlightService {
//工厂模式创建FlighDaoImp对象
FlightDao flightDao = ObjectFactory.getInstence(Constant.getUrl(Constant.DAO));
//返回所有航班集合
public List showAll() {
return flightDao.getAllFlight();
}
//返回指定航班集合
public List query(String departureCity, String arrivalCity) {
return flightDao.queryFlightByCity(departureCity, arrivalCity);
}
//添加航班
public String add(Flight flight) {
String message = "";
message = flightDao.addFlight(flight) == 0 ? "添加失败!" : "添加成功!";
return message;
}
//删除航班
public String del(String flightNo) {
String message = "";
message = flightDao.deleteFlight(flightNo) == 0 ? "删除失败!" : "删除成功!";
return message;
}
//保存到txt文件
public String saveTxt(List<Flight> flightList) {
String txtPath = "src/files/flight.txt";
String message = "";
flightDao.exportToTxt(flightList, txtPath);
if (txtPath.isEmpty()) {
message = "保存失败";
} else {
message = "保存成功,文件保存到" + txtPath;
}
return message;
}
//保存到xml文件
public String saveXml(String xmlPath) {
String message = "";
if (xmlPath.isEmpty()) {
message = "保存失败";
} else {
flightDao.saveXml(xmlPath);
message = "保存成功!";
}
return message;
}
}
代码解释
FlightService
package cn.kgc.tangcco.chengxiangjian.service;
import java.util.List;
import cn.kgc.tangcco.chengxiangjian.entity.Flight;
public interface FlightService {
//返回所有航班集合
public List showAll();
//返回指定航班集合
public List query(String departureCity, String arrivalCity);
//添加航班
public String add(Flight flight);
//删除航班
public String del(String flightNo);
//保存到txt文件
public String saveTxt(List<Flight> flightList);
//保存到xml文件
public String saveXml(String xmlPath);
}
代码解释
FlightAction
package cn.kgc.tangcco.chengxiangjian.action;
import java.util.Collections;
import java.util.Date;
import java.util.List;
import java.util.Scanner;
import javax.management.Query;
import org.omg.CosNaming.NamingContextExtPackage.AddressHelper;
import cn.kgc.tangcco.chengxiangjian.common.Constant;
import cn.kgc.tangcco.chengxiangjian.common.ObjectFactory;
import cn.kgc.tangcco.chengxiangjian.common.utils;
import cn.kgc.tangcco.chengxiangjian.entity.Flight;
import cn.kgc.tangcco.chengxiangjian.service.FlightService;
public class FlightAction {
Scanner scanner = new Scanner(System.in);
//工厂模式创建FlightServiceImp对象
FlightService flightService = ObjectFactory.getInstence(Constant.getUrl(Constant.SER));
//功能菜单
public void menu() {
System.out.println("****唐城航班管理系统*****");
System.out.println("1.显示所有航班(起飞时间升序)");
System.out.println("2.查询航班(起飞时间升序)");
System.out.println("3.添加航班");
System.out.println("4.删除航班");
System.out.println("0.退出");
System.out.println("请输入》》》");
int key = scanner.nextInt();
switch (key) {
case 1:
showAll();
break;
case 2:
query();
break;
case 3:
add();
break;
case 4:
del();
break;
case 0:
exit();
return;
default:
System.out.println("输入错误,请重新输入!");
return;
}
menu();
}
//显示所有航班
public void showAll() {
List<Flight> list = flightService.showAll();
for (Flight flight : list) {
System.out.println(flight);
}
}
//根据起飞城市、到达城市查询航班
public void query() {
System.out.println("请输入起飞城市:");
String departureCity = scanner.next();
System.out.println("请输入到达城市:");
String arrivalCity = scanner.next();
List<Flight> flightList = flightService.query(departureCity, arrivalCity);
if (flightList.isEmpty()) {
System.out.println("没有符合条件的航班");
;
} else {
for (Flight flight : flightList) {
System.out.println(flight);
}
System.out.println("按任意键继续。。。");
String answer = scanner.next();
System.out.println("请问是否要将查询结果保存到txt文件y/n");
String keys = scanner.next();
if (keys.equals("y")) {
System.out.println(flightService.saveTxt(flightList));
}
}
}
//添加航班
public void add() {
System.out.println("请输入航班编号:");
String flightNo = scanner.next();
System.out.println("请输入起飞城市:");
String departureCity = scanner.next();
System.out.println("请输入起飞时间:");
Scanner sc1 = new Scanner(System.in);
Date departureTime = utils.strToDate(sc1.nextLine());
System.out.println("请输入到达城市:");
String arrivalCity = scanner.next();
System.out.println("请输入到达时间:");
Scanner sc2 = new Scanner(System.in);
Date arrivalTime = utils.strToDate(sc2.nextLine());
Flight flight = new Flight(flightNo, departureCity, departureTime, arrivalCity, arrivalTime);
System.out.println(flightService.add(flight));
}
//删除航班
public void del() {
System.out.println("请输入航班编号:");
String flightNo = scanner.next();
System.out.println(flightService.del(flightNo));
}
//退出
public void exit() {
System.out.println("是否保存修改y/n");
String xmlPath = "src/files/flights.xml";
String answer = scanner.next();
if (answer.equals("y")) {
System.out.println(flightService.saveXml(xmlPath));
} else {
System.out.println("文件未保存");
}
System.out.println("程序结束!");
}
}
代码解释
全部评论 (0)
还没有任何评论哟~
