Advertisement

航班管理系统

阅读量:

相关知识包括工厂模式(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)

还没有任何评论哟~