栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

【数据结构课程设计报告】航班信息管理系统(Java实现)

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

【数据结构课程设计报告】航班信息管理系统(Java实现)

数据结构课程设计报告

航班信息管理系统
  • 数据结构课程设计报告
  • 一、需求分析
  • 二、系统功能划分及设计
    • 1.存储结构设计
    • 2.系统的功能架构设计
    • 3.模块设计
    • 3.代码实现


一、需求分析

问题描述:航班信息管理系统的业务活动包括:航班信息的添加和删除、指定航班的条件查询及所有航班的全部查询等,需对指定内容进行分析设计利用计算机加以实现。

每条航线所涉及的信息有:航班号、飞机号、出发地、到达地、飞行日期、机型和票余量。每个客户所涉及的信息有:姓名、手机号、航班号和订票量。

系统能够实现的功能与操作如下:
1.航班信息的添加:根据用户依次输入的内容(航班号、飞机号、出发地、到达地、飞行日期、机型和票余量),对所需添加的航线与已有航线进行比对添加(如出现相同航班号则无法添加)。
2.航班信息的删除:根据用户输入的航班号进行比对删除(有此航线则删除,没有则警示)。
3.指定航班的条件查询:根据用户输入的航班号进行条件查询。
4.所有航班的全部查询:显示所有航线所有信息。
选做内容:客户退订票功能,内有客户订票和退票、所有订票客户信息查询等。根据客户订票量会相应对航班票余量进行修改。

输出界面:有主菜单、分菜单可对上述所说2和3内容进行用户的相应选择和呈现,以达到系统的交互性。
编译环境:win10;eclipse;
所使用的编译语言:Java语言

二、系统功能划分及设计 1.存储结构设计


系统存储结构设计采用链式存储结构,将所有航线存储到一个链表中,对于航线的插入和删除操作运算方便。同理,将每条航线的各个数据项、客户订票信息分别存储到另外的链表中加以操作。

2.系统的功能架构设计


系统功能架构流程设计如图所示,主函数调用菜单函数进行菜单选择(1-4)。

  1. 当用户选择1时,调用航班信息管理菜单选择(1-3),1代表添加航班信息操作,2代表删除航班信息操作,3代表返回主菜单。
  2. 当用户选择2时,调用查询航班菜单选择(1-3),1代表根据航班号查询航线信息,2代表查询所有航班信息,3代表返回主菜单。
  3. 当用户选择3时,调用航班退订票菜单选择(1-4),1代表为客户办理航线订票服务,2代表查询所有客户订票信息,3代表为客户办理航线退票服务,4返回主菜单。
  4. 退出系统。
3.模块设计


如上图所示为系统所涉及到各类的属性、方法及各类之间的关系图。

3.代码实现
public class Node {
	T data; // 数据域
	Node next; //指针域	
	public Node(Node n){
		next=n;         
	}
	public Node(T obj,Node n){
        data=obj;
        next=n;
    }
	public T getData(  ){return data;}
	public Node getNext(  ){return next;}
}
public class LinkList {
	private Node head; // 头指针
	private int length; // 长度
	public LinkList() { // 构造一个空的链表
		length = 0;
		head = new Node(null);
	}
	public Node getHead() { // 获取链表头结点地址
		return head;
	}
	public boolean isEmpty() { // 判空
		return length == 0;
	}
	public int size() { // 求链表长度即数据元素个数
		return length;
	}
	public boolean add(T obj, int pos) { // 在链表中插入一个新元素
		if ((pos < 1 || pos > length + 1)) {
			return false; // pos值不正确
		}
		int num = 1;
		Node p = head, q = head.next;
		while (num < pos) {
			p = q;
			q = q.next;
			num++;
		}
		p.next = new Node(obj, q);
		length++;
		return true;
	}
	public T remove(int pos) { // 删除链表中的某个元素
		if (isEmpty()) {
			System.out.println("链表为空表");
			return null;
		} else {
			if ((pos < 1 || pos > length + 1)) {
				System.out.println("pos值不合法");
				return null;
			}
			int num = 1;
			Node p = head, q = head.next;
			while (num < pos) {
				p = q;
				q = q.next;
				num++;
			}
			p.next = q.next;
			length--;
			return q.data;
		}
	}
	public int find(T obj) {
		if (isEmpty()) {
			System.out.println("链表为空表");
			return -1;
		}
		int num = 1;
		Node p = head.next; // p引用的是头结点之后的结点
		while (p != null) { // 单链表的判空条件
			if (p.data.equals(obj) == false) { // equals判断两个对象值是否相等
				p = p.next;
				num++;
			} else
				break;
		}
		if (p == null)
			return -1;
		return num;
	}
	public T value(int pos) { // 获取链表中的一个元素
		if (isEmpty()) {
			System.out.println("链表为空表");
			return null;
		} else {
			if ((pos < 1 || pos > length + 1)) {
				System.out.println("pos值不合法");
				return null;
			}
			int num = 1;
			Node q = head.next;
			while (num < pos) {
				q = q.next;
				num++;
			}
			return q.data;
		}
	}
	public boolean modify(T obj, int pos) { // 更新链表中的某个元素
		if (isEmpty()) {
			System.out.println("链表为空表");
			return false;
		} else {
			if ((pos < 1 || pos > length + 1)) {
				System.out.println("pos值不合法");
				return false;
			}
			int num = 1;
			Node q = head.next;
			while (num < pos) {
				q = q.next;
				num++;
			}
			q.data = obj;
			return true;
		}
	}
	public void nextOrder() { // 依次访问链表中每个元素并输出
		Node p = head.next;
		while (p != null) {
			System.out.print(p.data + " n");
			p = p.next;
		}
	}
	public void clear() { // 清空链表
		length = 0;
		head.next = null;
	}
}
public class AirLineList extends LinkList{
    public int flightNum; //航班号
    public String airplaneNum; //飞机号
    public String departure; //出发地
    public String destination; //到达地
    public String flightDate; //飞行日期
    public String airplaneType; //机型
    public int ticketMargin; //票余量
 
    
	public int getFlightNum() {
		return flightNum;
	}
	public void setFlightNum(int flightNum) {
		this.flightNum = flightNum;
	}
	public String getAirplaneNum() {
		return airplaneNum;
	}
	public void setAirplaneNum(String airplaneNum) {
		this.airplaneNum = airplaneNum;
	}
	public String getDeparture() {
		return departure;
	}
	public void setDeparture(String departure) {
		this.departure = departure;
	}
	public String getDestination() {
		return destination;
	}
	public void setDestination(String destination) {
		destination = destination;
	}
	public String getFlightDate() {
		return flightDate;
	}
	public void setFlightDate(String flightDate) {
		this.flightDate = flightDate;
	}
	public String getAirplaneType() {
		return airplaneType;
	}
	public void setAirplaneType(String airplaneType) {
		this.airplaneType = airplaneType;
	}
	public int getTicketMargin() {
		return ticketMargin;
	}
	public void setTicketMargin(int ticketMargin) {
		this.ticketMargin = ticketMargin;
	}
	@Override
	public String toString() {
		return flightNum + "t" + airplaneNum + "t" + departure + "t" + destination + "t" + flightDate + "t"
				+ airplaneType + "t  " + ticketMargin + "t";
	}
}
public class CustomerList extends LinkList {
	public String name; //姓名
	public long phone; //手机号
	public int flightNum; //航班号
	public int ticketNum; //订票量
	
	public String getName() {
		return name;
	} 
	public void setName(String name) {
		this.name = name;
	}
	public long getphone() {
		return phone;
	}
	public void setphone(long phone) {
		this.phone = phone;
	}
	public int getFlightNum() {
		return flightNum;
	}
	public void setFlightNum(int flightNum) {
		this.flightNum = flightNum;
	}
	public int getTicketNum() {
		return ticketNum;
	}
	public void setTicketNum(int ticketNum) {
		this.ticketNum = ticketNum;
	}
	@Override
	public String toString() {
		return name + "t" + phone + "t" + flightNum + "t" + ticketNum + "t";
	}
}
import java.util.Scanner;
 
public class Main {
	static LinkList airLine = new LinkList();
	static LinkList airLinekey = new LinkList();
	static LinkList airLineTicketMargin = new LinkList();
	static LinkList customer = new LinkList();
	static LinkList customerkey = new LinkList();
	static int customerNum = 0;
	
	private static void MenuSelect() {
		Scanner sc = new Scanner(System.in);
		System.out.println();
		System.out.println("tt      航班信息管理系统(2205yu君gong惜时)——主菜单");
		System.out.println("tt*****************************************");
		System.out.println("tt*t      1.航班信息管理   tt*");
		System.out.println("tt*t      2.查询航班   tt*");
		System.out.println("tt*t      3.航班退订票   tt*");
		System.out.println("tt*t      4.退出系统   tt*");
		System.out.println("tt*****************************************");
		System.out.println("ttt 请输入数字1-4!请输入您的选择:");
		switch (sc.nextInt()) {
		case 1:
			airplaneInfoSelect();
			MenuSelect();
			break;
		case 2:
			seachAirplaneSelect();
			MenuSelect();
			break;
		case 3:
			airplaneTicketSelect();
			MenuSelect();
			break;
		default:
			break;
		}
	}
	
	private static void airplaneInfoSelect() {
		Scanner sc = new Scanner(System.in);
		System.out.println();
		System.out.println("tt    航班信息管理系统(2205yu君gong惜时)——航班信息管理");
		System.out.println("tt*****************************************");
		System.out.println("tt*t      1.添加航班信息   tt*");
		System.out.println("tt*t      2.删除航班信息   tt*");
		System.out.println("tt*t      3.返回主菜单   tt*");
		System.out.println("tt*****************************************");
		System.out.println("ttt 请输入数字1-3!请输入您的选择:");
 
		switch (sc.nextInt()) {
		case 1:
			addAirplane();
			airplaneInfoSelect();
			break;
		case 2:
			delAirplane();
			airplaneInfoSelect();
			break;
		default:
			break;
		}
	}
	
	private static void seachAirplaneSelect() {
		Scanner sc = new Scanner(System.in);
		System.out.println();
		System.out.println("tt    航班信息管理系统(2205yu君gong惜时)——查询航班信息");
		System.out.println("tt*****************************************");
		System.out.println("tt*t      1.查询航班号   tt*");
		System.out.println("tt*t      2.全部航班信息   tt*");
		System.out.println("tt*t      3.返回主菜单   tt*");
		System.out.println("tt*****************************************");
		System.out.println("ttt 请输入数字1-3!请输入您的选择:");
		switch (sc.nextInt()) {
		case 1:
			seachAirplane();
			seachAirplaneSelect();
			break;
		case 2:
			displayAirplane();
			seachAirplaneSelect();
			break;
		default:
			break;
		}
	}
	
	private static void airplaneTicketSelect() {
		Scanner sc = new Scanner(System.in);
		System.out.println();
		System.out.println("tt     航班信息管理系统(2205yu君gong惜时)——航班退订票");
		System.out.println("tt*****************************************");
		System.out.println("tt*t      1.办理订票服务   tt*");
		System.out.println("tt*t      2.查询订票客户   tt*");
		System.out.println("tt*t      3.办理退票服务   tt*");
		System.out.println("tt*t      4.返回主菜单   tt*");
		System.out.println("tt*****************************************");
		System.out.println("ttt 请输入数字1-4!请输入您的选择:");
 
		switch (sc.nextInt()) {
		case 1:
			addAirplaneTicket();
			airplaneTicketSelect();
			break;
		case 2:
			seachAirplaneTicket();
			airplaneTicketSelect();
			break;
		case 3:
			delAirplaneTicket();
			airplaneTicketSelect();
			break;
		default:
			break;
		}
	}
	
	private static void addAirplane() {
		Scanner sc = new Scanner(System.in);
		AirLineList a = new AirLineList();
		System.out.println("请输入要添加的航班:航班号(数字)  飞机号  出发地  到达地  飞行日期  机型  票余量(数字)");
		a.flightNum = sc.nextInt();
		a.airplaneNum = sc.next();
		a.departure = sc.next();
		a.destination = sc.next();
		a.flightDate = sc.next();
		a.airplaneType = sc.next();
		a.ticketMargin = sc.nextInt();
		if (airLinekey.find(a.flightNum) != (-1)) {
			System.out.println("添加航班号错误!请重新选择:");
		} else {
			airLine.add(a, a.flightNum);
			airLinekey.add(a.flightNum, a.flightNum);
			airLineTicketMargin.add(a.ticketMargin, a.flightNum);
			System.out.println("添加航班成功!");
		}
	} 
	
	private static void delAirplane() {
		Scanner sc = new Scanner(System.in);
		System.out.println("请输入要删除的航班号(数字):");
		int pos = sc.nextInt();
		if (airLinekey.find(pos) != (-1)) {
			airLine.remove(pos);
			airLinekey.remove(pos);
			airLineTicketMargin.remove(pos);
			System.out.println("删除航班成功!");
		} else {
			System.out.println("输入错误!没有此航班!!");
			System.out.println("请重新选择:");
		}
	}
	
	private static void seachAirplane() {
		Scanner sc = new Scanner(System.in);
		System.out.println("请输入需要查询的航班号:");
		int pos = sc.nextInt();
		if (airLinekey.find(pos) != (-1)) {
			System.out.println(
					"航班号t" + "  飞机号t" + "t  出发地t" + "t  到达地t" + " t    飞行日期 t" + "t 机型  t" + " 票余量t");
			System.out.println(airLine.value(pos));
		}
	} 
	
	private static void displayAirplane() {
		System.out.println("航班号t" + "  飞机号t" + "t  出发地t" + "t  到达地t" + " t    飞行日期 t" + "t 机型  t" + " 票余量t");
		airLine.nextOrder();
	}
	
	private static void addAirplaneTicket() { // 添加订票客户
		CustomerList c = new CustomerList();
		AirLineList a = new AirLineList();
		Scanner sc = new Scanner(System.in);
		System.out.println("请输入您需要订票的航班号:");
		int flightNum = sc.nextInt();
		if (airLinekey.find(flightNum)!=(-1)) {
			System.out.println("请输入您需要订票的数量:");
			int ticketNum = sc.nextInt();
			int ticketval = (int) airLineTicketMargin.value(flightNum);
			if (ticketNum > ticketval) {
				System.out.println("订票失败!以下为航班信息,希望对您有所帮助:");
				System.out.println(airLine.value(flightNum));
			} else {
				System.out.println("请输入您的姓名:");
				String name = sc.next();
				System.out.println("请输入您的手机号:");
				long phone = sc.nextLong();
				c.flightNum = flightNum;
				c.ticketNum = ticketNum;
				c.name = name;
				c.phone = phone;
				a = (AirLineList) airLine.value(flightNum);
				a.ticketMargin = ticketval - ticketNum;
				airLine.modify(a, flightNum);
				airLineTicketMargin.modify(a.ticketMargin,flightNum);
				a.clear();
				int count = ++customerNum;
				customer.add(c, count);
				customerkey.add(phone, count);
				System.out.println("订票成功!");
			}
		} else {
			System.out.println("暂无此航班号!");
		}
	}
	private static void seachAirplaneTicket() { // 查看订票客户
		if (customer.size() != 0) {
			System.out.println("姓名t" + "t手机号t" + "t航班号t" + "订票量t");
			customer.nextOrder();
		} else {
			System.out.println("暂无可查看的客户订票信息!");
		}
	}
	private static void delAirplaneTicket() { // 删除订票客户
		AirLineList a = new AirLineList();
		CustomerList c = new CustomerList();
		if (customer.size() != 0) {
			Scanner sc = new Scanner(System.in);
			System.out.println("请输入需要退票的航班号:");
			int flightNum = sc.nextInt();
			if (airLinekey.find(flightNum)!=(-1)) {
				int ticketval = (int) airLineTicketMargin.value(flightNum);
				System.out.println("请输入退票使用的手机号:");
				long phone = sc.nextLong();
				if (customerkey.find(phone) != (-1)) {
					a = (AirLineList) airLine.value(flightNum);
					c = (CustomerList) customer.value(flightNum);
					int ticketNum = c.ticketNum;
					a.ticketMargin = ticketval + ticketNum;
					airLine.modify(a, flightNum);
					airLineTicketMargin.modify(a.ticketMargin, flightNum);
					customer.remove(customerkey.find(phone));
					System.out.println("退票成功!");
				} else {
					System.out.println("对不起,没有您的订票信息!");
				}
			}else {
				System.out.println("对不起,没有关于此航线能够退票的信息!");
			}
		} else {
			System.out.println("暂无可删除的客户订票信息!");
		}
	}
	
	public static void main(String[] args) {
		// 信息的初始化
		AirLineList a1 = new AirLineList();
		a1.flightNum = 1;
		a1.airplaneNum = " HO1111 ";
		a1.departure = " shanghai ";
		a1.destination = " shenzhen ";
		a1.flightDate = " 07:35-10:05/02-25 ";
		a1.airplaneType = " 789 ";
		a1.ticketMargin = 11;
		AirLineList a2 = new AirLineList();
		a2.flightNum = 2;
		a2.airplaneNum = " ZH9855 ";
		a2.departure = " guangzhou ";
		a2.destination = " nanjing ";
		a2.flightDate = " 06:30-08:55/02-25 ";
		a2.airplaneType = " 32Q ";
		a2.ticketMargin = 7;
		AirLineList a3 = new AirLineList();
		a3.flightNum = 3;
		a3.airplaneNum = " JD5777 ";
		a3.departure = " beijing ";
		a3.destination = " sanya ";
		a3.flightDate = " 21:15-01:35/02-25 ";
		a3.airplaneType = " 321 ";
		a3.ticketMargin = 7;
		AirLineList a4 = new AirLineList();
		a4.flightNum = 4;
		a4.airplaneNum = " HO1127 ";
		a4.departure = " shanghai ";
		a4.destination = " sanya ";
		a4.flightDate = " 16:35-19:45/02-27 ";
		a4.airplaneType = " 789 ";
		a4.ticketMargin = 5;
		airLine.add(a1, a1.flightNum);
		airLine.add(a2, a2.flightNum);
		airLine.add(a3, a3.flightNum);
		airLine.add(a4, a4.flightNum);
		airLinekey.add(a1.flightNum, a1.flightNum);
		airLinekey.add(a2.flightNum, a2.flightNum);
		airLinekey.add(a3.flightNum, a3.flightNum);
		airLinekey.add(a4.flightNum, a4.flightNum);
		airLineTicketMargin.add(a1.ticketMargin, a1.flightNum);
		airLineTicketMargin.add(a2.ticketMargin, a2.flightNum);
		airLineTicketMargin.add(a3.ticketMargin, a3.flightNum);
		airLineTicketMargin.add(a4.ticketMargin, a4.flightNum);
		a1.clear();
		a2.clear();
		a3.clear();
		a4.clear();
 
		MenuSelect();
		System.out.println("谢谢您,使用本系统!");
	}
}


转载请注明:文章转载自 www.mshxw.com
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号