下载链接在文末

题目选择 :航空订票系统

开发语言 :Java

代码编写工具: Eclipse

与数据结构相关知识:队列,栈,KMP匹配算法。

一、设计思路:

1,首先在项目工程中创建Main Frame.java作为主窗口文件,设置窗口大小为,主题样式,标题栏,窗口图标,并添加到当前窗口中背景以及窗口可见性,之后创建InitGlobalFont方法,该方法设置全局字体的样式和大小。

2,之后在项目工程中创建MainPanel. Java文件,该文件用于切换界面,首先在该文件中定义一个jpanel,设置为卡片布局,之后将其添加到MainFrame中。

3,在项目工程中创建FunctionPanel.java类,并将其添加到MainPanel.java的CardLayout中,并通过CardLayout.Show方法设置FunctionPanel为默认显示。在FunctionPanel.java中,创建三个图片按钮,,分别代表航班管理,订票,退票,以及一个退出按钮,并将它们添加点击事件。

4,在项目工程中创建FunctionPanel.java文件,创建data文件夹,在该文件夹内创建program-icon和program-store文件夹,分别用于存放图标和数据,在program-store文件夹中创建flight.txt文件,写入所有的航班信息,每一行代表一个航班信息。

5,FunctionPanel.java为航班管理界面,在该文件中,首先创建一个表格table,逐行读取flight.txt的所有信息,将其存入队列中,再从队列弹出将其添加到表格中。创建五个按钮,分别为“添加航班”,“删除航班”,“修改航班”,“刷新”,“返回”,以及一个文本框和搜索按钮。

  • 点击“添加航班”,将弹出添加窗口,在窗口中输入航班信息,点击确定即可将该信息添加到flight.txt文件中,并刷新表格。
  • 选中某表格中的某一条信息,点击“删除航班”,将会获取该行中的航班号,根据该航班号与flight.txt文件进行逐行匹配,匹配成功则将其删除,并刷新表格。
  • 选中某一条信息 点击“修改航班”,过程与删除航班类似,匹配成功后对该行覆盖写入,并刷新表格。
  • 点击“刷新”,会重新读取文件,将其显示在表格中。
  • 点击“返回”,会使MainPanel的CardLayout显示FunctionPanel,即主界面。
  • 在文本框中输入关键词,点击“搜索”按钮,会将从文本框获取的数据与flight.txt进行逐行匹配,将匹配成功的信息存入队列中,之后将队列中的信息输出在表格中。

6,在项目工程中创建addPanel.java,作为航班订票界面,在该界面中创建一个表格,以及三个按钮,分别为“订票”,“候补乘客”,“返回”,在data/ program-store文件夹中创建book-list.txt,用于存储订单,创建candidata-list.txt文件,用于存储候补乘客。表格中显示当前所有航班,点击某一条信息,点击“订票”,输入乘客信息,数量,如果剩余票充足,则将当前的航班号,乘客信息,数量写入到book-list.txt文件中,并修改light.txt文件的该航班剩余票数。若余票不足,则提示是否列入候该航线的候补名单中。选中某一条航班,点击“候补乘客”,则会读取candidate-list.txt文件,并弹出新窗口以表格的形式显示。点击“返回”,则返回到主界面,点击“搜索”,则会根据输入的关键字和日期与flight.txt中的航班信息进行匹配,将所有匹配成功的信息存入队列中,清空表格,之后将队列中的信息输出在表格中,并以时间先后排序。

7,在项目工程中创建deletePanel.java,作为航班退票界面,在该界面中创建一个表格,,以及三个按钮,分别为“退票”,“候补乘客”,“返回”,以及一个文本框和“搜索”按钮,表格中显示当前所有订单,选中某一条订单,点击“退票”,则会根据航班号与book-list.txt文件里航班号匹配,匹配成功则删除该订单,并重新统计该航班剩余票量,并将剩余票量写入到flight.txt中。之后检查是否有候补乘客,如果有则将剩余票给与候补乘客,以排队顺序优先,并删除其在候补名单candidate-list的信息。

8,最后,在FunctionPanel中的点击事件中创建三个判断语句,创建三个标志位为true,当点击事件为searchPanel时,如果标志位为true,则向MainPanel中的CardLayout添加该界面,将标志位置为false,之后显示该界面,其它两个与其相同。

二、需求分析

 1.课程设计目的

(1).熟练掌握堆队列和栈的原理和应用。

(2).熟悉Java语言的程序设计与开发,查缺补漏,提高编程能力。

 2.设计任务

     线性表

本次课程设计使用的线性结构为数组,用于临时存储用户输入的订单信息,退票信息,最后将其写入到文件中。

    特殊线性表

本次课程设计使用的特殊线性结构为队列,程序中的表格数据通过从文件中读取,将需要的数据临时存储在队列中,在将队列的数据逐条输出到表格中。

非线性结构

在本次课程设计中,使用的非线性结构为二叉树,在进行模糊搜索时,通过二叉树遍历数据可提高搜索速度。

查找和排序

本程序的查找功能采用了KMP搜索搜索算法以及二叉树遍历,排序采用了冒泡排序法。

 3.设计环境

本次设计和开发的平台为Windows10,使用Java语言开发,编译环境为JDK1.8,使用的开发工具为eclipse IDE 2022-03。

三、概要设计

 1.数据结构设计

      (1)线性表数据结构设计

static String[] tab_title = {}//用于存放表头

//用于将队列转化为数组的方法

public static String[][] queue_to_array(Queue<String[]> queue){

int count=0;//定义一个int型数据充当计数器

//用于存储队列数据的数组

String[][] get_queue_data=new String[queue.size()][7];

//判断队列中是否还有数据

while (queue.size()>0){

//从队列弹出数据并存储到数组中

get_queue_data[count]=queue.poll();

count++;

}

//返回数组

return get_queue_data;

}

(2)特殊线性表数据结构设计

public static Queue<String[]> queue =

new LinkedList<String[]>();//用于存储读取到的符合条件的数据

//定义一个读取文件的方法

public static void read_txt(String src,Queue<String[]> queue){

try {

//根据传入的地址找到文件

File file = new File(src);

//定义一个FileReader

FileReader fileReader = new FileReader(file);

//定义一个LineNumberReader用于读取行数据

LineNumberReader reader = new LineNumberReader(fileReader);

int number = 1;

String txt = ""; //存储得到的行数据

int lines = 0; //从第一行开始读取

while (txt != null) {//如果读取到的数据非空

lines++;//行数加一

txt = reader.readLine();//继续读取下一行

//当读取到的数据不为空时

if (lines > number&&txt!=null&&!txt.trim().equals("")) {

//将当前数据以“/”分割并存储到数组中

String[] data=txt.split("/");

//向队列中送入读取到的数据

queue.offer(data);

}

}

//关闭LineNumberReader

reader.close();

//关闭fileReader

fileReader.close();

}catch (IOException e) {

System.out.println("读取文件出错");

}

}

(3)非线性结构数据结构设计

本次课程设计用到的非线性结构只有堆,因为堆是一个完全二叉树,所以在本次课程设计中采取的是将堆映射到数组上的方式来实现逻辑上的堆结构的。

(4)查找和排序数据结构设计

public static void filter_txt

(String src,String starting_point,String end_point,

String departure_time,Queue<String[]> queue){//筛选航线方法

try {

//根据传入的地址找到文件

File file = new File(src);

//定义一个FileReader

FileReader fileReader = new FileReader(file);

LineNumberReader reader = new LineNumberReader(fileReader);

int number = 1;

String txt = "";

int lines = 0;

while (txt != null) {//如果读取到的数据非空

lines++;

txt = reader.readLine();//继续读取下一行

if (lines > number&&txt!=null&&!txt.trim().equals("")) {

//将读取到的数据以“/”分割并存入数组中

String[] data=txt.split("/");

if(starting_point.trim().equals(data[1])&&end_point.trim().equals(data[2])&&departure_time.trim().equals(data[3].substring(0, 10))) //将符合条件的数据存储队列中

queue.offer(data);

}

}

//关闭文件流

reader.close();

fileReader.close();

}catch (IOException e) {

System.out.println("读取文件出错");

}

}

2.模块设计

  (1)线性表模块设计

本次课程设计所采用的线性结构就是数组,而数组是在Java语言中自带的一种结构,直接使用即可,无需做额外设计。

(2)特殊线性表模块设计

本课程设计采用的特殊线性表是队列,在队列中存储的是来自文件的数据,每一条数据需要以数组的形式存储,所以队列中存储的为数组,所以我们定义了Queue<String[]>这样的队列。

(3)非线性结构模块设计

在本次课程设计中,使用的非线性结构为二叉树,在进行模糊搜索时,通过二叉树遍历数据可提高搜索速度。

 (4)查找和排序模块设计

本程序的查找功能采用了KMP搜索搜索算法以及二叉树遍历,排序采用了冒泡排序法,此模块主要用于用户输入的信息模糊搜索航班,并将最终结果以时间先后进行排序。

三、详细设计

1.主程序界面及功能的详细设计

首先在项目工程中创建Main Frame.java作为主窗口文件,设置窗口大小为,主题样式,标题栏,窗口图标,并添加到当前窗口中背景以及窗口可见性,之后创建InitGlobalFont方法,该方法设置全局字体的样式和大小。在项目工程中创建FunctionPanel.java类,并将其添加到MainPanel.java的CardLayout中,并通过CardLayout.Show方法设置FunctionPanel为默认显示。在FunctionPanel.java中,创建三个图片按钮,分别代表航班管理,订票,退票,以及一个退出按钮,将按钮添加到界面中,设定其位置,并将它们添加点击事件,点击航班管理将MainPanel.java的CardLayout.show()设定为SearchPanel,点击订票设定为AddPanel,点击订单管理将其设为RefundPanel。

图1 主程序模块流程图

 2.航班管理模块界面及功能详细设计

FunctionPanel.java为航班管理界面,在该文件中,首先创建一个表格table,逐行读取flight.txt的所有信息,将其存入队列中,再从队列弹出将其添加到表格中。创建五个按钮,分别为“添加航班”,“删除航班”,“修改航班”,“刷新”,“返回”,以及一个文本框和搜索按钮。点击“添加航班”,将弹出添加窗口,在窗口中输入航班信息,点击确定即可将该信息添加到flight.txt文件中,并刷新表格。选中某表格中的某一条信息,点击“删除航班”,将会获取该行中的航班号,根据该航班号与flight.txt文件进行逐行匹配,匹配成功则将其删除,并刷新表格。选中某一条信息 点击“修改航班”,过程与删除航班类似,匹配成功后对该行覆盖写入,并刷新表格。点击“刷新”,会重新读取文件,将其显示在表格中。点击“返回”,会使MainPanel的CardLayout显示FunctionPanel,即主界面。在文本框中输入关键词,点击“搜索”按钮,会将从文本框获取的数据与flight.txt进行逐行匹配,将匹配成功的信息存入队列中,之后将队列中的信息输出在表格中。

图2 航班管理模块流程图

3.​​​​机票预定模块界面及功能详细设计

在项目工程中创建addPanel.java,作为航班订票界面,在该界面中创建一个表格,以及三个按钮,分别为“订票”,“候补乘客”,“返回”,在data/ program-store文件夹中创建book-list.txt,用于存储订单,创建candidata-list.txt文件,用于存储候补乘客。表格中显示当前所有航班,点击某一条信息,点击“订票”,输入乘客信息,数量,如果剩余票充足,则将当前的航班号,乘客信息,数量写入到book-list.txt文件中,并修改light.txt文件的该航班剩余票数。若余票不足,则提示是否列入候该航线的候补名单中。选中某一条航班,点击“候补乘客”,则会读取candidate-list.txt文件,并弹出新窗口以表格的形式显示。点击“返回”,则返回到主界面,点击“搜索”,则会根据输入的关键字和日期与flight.txt中的航班信息进行匹配,将所有匹配成功的信息存入队列中,清空表格,之后将队列中的信息输出在表格中,并以时间先后排序。

图3 航班管理模块流程图

  4.​​​​​​​订单管理模块界面及功能详细设计

在项目工程中创建deletePanel.java,作为航班退票界面,在该界面中创建一个表格,以及三个按钮,分别为“退票”,“候补乘客”,“返回”,以及一个文本框和“搜索”按钮,表格中显示当前所有订单,选中某一条订单,点击“退票”,则会根据航班号与book-list.txt文件里航班号匹配,匹配成功则删除该订单,并重新统计该航班剩余票量,并将剩余票量写入到flight.txt中。之后检查是否有候补乘客,如果有则将剩余票给与候补乘客,以排队顺序优先,并删除其在候补名单candidate-list的信息。

                                                             图4 订单模块流程图

四、测试分析

  1.​​​​​​​主程序界面及功能测试分析

首先对主页测试分析,如图 5所示:

图5 航空订票系统主界面

窗口可以正常出现,图片的点击事件可以正常响应,当点击航班检索时,页面正常切换到航班检索界面,如图6。

图6 航班检索界面

点击返回可以正常返回主页,并没有出现页面卡死或无法切换的情况,由此可以说明主界面没有问题。

其功能实现的主要代码是:

public void mouseClicked(MouseEvent e) {

// TODO Auto-generated method stub

if(e.getSource().equals(icon_search)||e.getSource().equals(icon_search_text)) {

if(searchPanel_on)

{

SearchPanel searchPanel=new SearchPanel();

MainPanel.jPanel.add(searchPanel,"searchPanel");

searchPanel_on=false;

}

MainPanel.cardLayout.show(MainPanel.jPanel,"searchPanel");

}else

if(e.getSource().equals(icon_add)||e.getSource().equals(icon_add_text)) {

if(addPanel_on)

{

AddPanel addPanel=new AddPanel();

MainPanel.jPanel.add(addPanel,"addPanel");

addPanel_on=false;

}

MainPanel.cardLayout.show(MainPanel.jPanel,"addPanel");

}else

if(e.getSource().equals(icon_delete)||e.getSource().equals(icon_delete_text)) {

if(refundPanel_on)

{

RefundPanel refundPanel=new RefundPanel();

MainPanel.jPanel.add(refundPanel,"refundPanel");

refundPanel_on=false;

}

MainPanel.cardLayout.show(MainPanel.jPanel,"refundPanel");

}

}

2.​​​​​​​航班管理模块功能测试分析

下面进行航班检索模块的测试:

点击航班检索,页面将切换到航班检索界面,如图7所示:

图7 航班检索界面

点击添加航班,将弹出添加界面,如图8所示,输入所有信息后点击确定即可添加,表格自动刷新。

图8 航班添加窗口

点击删除航班,将弹出提示是否删除,点击确定后,即可删除该航班。

在搜索框中输入关键信息,点击“搜索”即可查询,查询到的结果显示在表格中。

图9 航班查询功能

其功能实现的主要代码是:

public void delete() {

int count=table.getSelectedRow();

if(count>=0) {

String getname= table.getValueAt(count, 0).toString();

FileOperations.delete_txt_line("src/data/storage/flight.txt", getname, false);

refresh_table();

}else {

JOptionPane.showMessageDialog(null, "请选中列表中的某一行!!", "提示", 0);

}

}

public void search_table() {

FileOperations.search_txt_line("src/data/storage/flight.txt",search_bar.getText(),Constant.queue,0);

table_mode =new DefaultTableModel();

table_mode.setColumnIdentifiers(tab_title);

while(Constant.queue.size()>0) {

table_mode.addRow(Constant.queue.poll());

}

table.setModel(table_mode);

}

public void actionPerformed(ActionEvent e) {

String get_data="\n"+flight_number.getText()+"/"

+starting_station.getText()+"/"+terminal_station.getText()+"/"+departure_time.getText() +"/"+arrival_time.getText()+"/"+crew_quota.getText()+"/"+total_votes.getText()+"/"+total_votes.getText();

FileOperations.write_txt("src/data/storage/flight.txt",get_data);

refresh_table();

add_window_JFrame.dispose();

}

3 .机票预定模块功能测试分析

下面进行机票预订模块的测试:

点击机票预订,页面将切换到机票预订界面,如图9所示:

图9 机票预定模块界面

选中某一航班,点击“订票”,页面将弹出机票预订窗口,如图10所示,输入信息,点击确定即可订票。

图10 机票预定窗口

选中某一航班,点击“订单”,页面将弹出当前航班订单窗口,如图11所示,显示当前成功购票和候补购票名单。

图11 航班当前订单窗口

在右上角的文本框中输入起始站,终点站,出发日期,点击“搜索”,即可显示满足条件的航班,如图12所示。

图12 航班筛选功能

其功能实现的主要代码是:

public void search_table() {

FileOperations.filter_txt("src/data/storage/flight.txt",starting_station_textField.getText(),terminal_station_textField.getText(),departure_time_textField.getText(),Constant.queue);

table_mode =new DefaultTableModel();

table_mode.setColumnIdentifiers(tab_title);

while(Constant.queue.size()>0) {

table_mode.addRow(Constant.queue.poll());

}

table.setModel(table_mode);

}

public void delete() {

int count=table.getSelectedRow();

if(count>=0) {

String getname= table.getValueAt(count, 0).toString();

FileOperations.delete_txt_line("src/data/storage/flight.txt", getname, false);

refresh_table();

}else {

JOptionPane.showMessageDialog(null, "     请选中列表中的某一行!!", "提示", 0);}}

4.​​​​​​​订单管理模块功能测试分析

下面进行订单管理模块的测试:

点击订单管理,页面将切换到订单管理界面,如图13所示:

图13 订单管理模块界面

选中某一航班,点击“退票”,将弹出退票界面,如图14所示,输入退票数量,点击“确定”,即可完成退票。

图14 订单管理模块

选中某一航班,点击“详情”,将弹出该航班详细信息界面,如图15所示。

图15 航班详情界面

在搜索框中输入关键信息,点击搜索即可显示搜索到的订单,具体界面上文已有所提到,这里不多赘述。

其功能实现的主要代码是:

public static void delete_line(JTable table) {

int count=table.getSelectedRow();

if(count>=0) {

if(JOptionPane.showConfirmDialog(null, "是否删除当前所选候补信息", "注意", JOptionPane.YES_NO_OPTION)==JOptionPane.YES_OPTION) {

FileOperations.delete_txt_line("src/data/storage/alternate.txt",table.getValueAt(count, 0).toString(),true);

JOptionPane.showMessageDialog(null, "    删除成功!!", "提示", 1);

refresh_table("src/data/storage/alternate.txt", table_mode2, table2, order_tab_title2,true);

}

}else {

JOptionPane.showMessageDialog(null, "     请选中列表中的某一行!!", "提示", 1);

}

}

public void actionPerformed(ActionEvent e) {

if(e.getSource().equals(refund_button)) {//退票

OrderWindow.refund_window(table_mode1,table1,order_tab_title1);

}else if(e.getSource().equals(details_button1)) {//详情1

OrderWindow.details_window(table1);

}else if(e.getSource().equals(booking_button)){

booking();

}else if(e.getSource().equals(delete_button)) {//删除

delete_line(table2);

}else if(e.getSource().equals(refresh_button1)||e.getSource().equals(refresh_button2)) {//刷新

refresh_table("src/data/storage/booking.txt", table_mode1, table1, order_tab_title1,true);

refresh_table("src/data/storage/alternate.txt", table_mode2, table2, order_tab_title2,true);

}else if(e.getSource().equals(return_button1)||e.getSource().equals(return_button2)) {//返回

MainPanel.cardLayout.show(MainPanel.jPanel,"featuresPanel");

}else if(e.getSource().equals(search_button1)) {

FileOperations.search_txt_line("src/data/storage/booking.txt",search_bar1.getText(),Constant.queue,0);

refresh_table("src/data/storage/booking.txt", table_mode1, table1, order_tab_title1,false);

}else if(e.getSource().equals(search_button2)) {

refresh_table("src/data/storage/alternate.txt", table_mode2, table2, order_tab_title2,false);

}

}

下载链接:数据结构课设之航空订票系统(Java).zip-Java文档类资源-CSDN下载

数据结构课设之航空订票系统(Java)下载链接在文末相关推荐

  1. JAVA毕业设计航空订票系统计算机源码+lw文档+系统+调试部署+数据库

    JAVA毕业设计航空订票系统计算机源码+lw文档+系统+调试部署+数据库 JAVA毕业设计航空订票系统计算机源码+lw文档+系统+调试部署+数据库 本源码技术栈: 项目架构:B/S架构 开发语言:Ja ...

  2. 数据结构课程设计【航空订票系统】

    /* * Copyright (c) 2017,烟台大学计算机学院 * All right reserved. * 文件名称:main.cpp * 作者:于嵩 * 完成日期:2017年12月22日 * ...

  3. 东北大学20级计算机C语言课设-航空订票系统

    航空订票系统 开发人员:东北大学20级计算机系学生 开发团队:三人小组 开发语言:C语言 开发工具:vs2015 有疑问欢迎进行讨论 总代码数量大概在三千五百行左右 耗时近一个月的时间完成了该次课设, ...

  4. C语言课设 航空订票系统

    大一写的时候没有写注释,后来也懒得加了.在这里说一下读写文件的思路吧. 就是利用二进制将一整个结构体中的数据存入文件,然后读取文件时再用二进制的形式将结构体中的数据读取出来,边读取边创建链表,将结构体 ...

  5. cs结构航空订票系统java_VC++航空订票系统数据库设计-课程设计

    VC++航空订票系统数据库设计 目录 一  绪论 1 二 需求分析 1 三 概要设计 2 四 详细设计 4 五 调试分析 19 六 测试结果 20 七 用户使用说明 29 小结 29 参考文献 30 ...

  6. 基于JAVA航空订票系统计算机毕业设计源码+数据库+lw文档+系统+部署

    基于JAVA航空订票系统计算机毕业设计源码+数据库+lw文档+系统+部署 基于JAVA航空订票系统计算机毕业设计源码+数据库+lw文档+系统+部署 本源码技术栈: 项目架构:B/S架构 开发语言:Ja ...

  7. 基于android实现航空订票系统【100010286】

    研究意义 通过在 Android 系统,进行航空订票系统的设计与实现,充分运用所学的数据库.Java 语言.数据结构.操作系统.设计模式等知识.了解一个较完整的 Android 项目的构建过程,同时, ...

  8. c语言航班订票管理系统源代码,简易C语言航空订票系统

    代码片段和文件信息 属性            大小     日期    时间   名称 ----------- ---------  ---------- -----  ---- 目录        ...

  9. 航空订票系统界面java_Java命令行界面(第21部分):航空公司2

    航空订票系统界面java 本系列文章的第21篇关于Java中解析命令行参数的文章的重点是Airline 2库. Airline 2的GitHub项目页面描述了该库," Airline是一个J ...

  10. 基于h5的航空订票系统的设计与实现

    1,项目介绍 基于 SpringBoot,h5 的航空订票系统系统拥有两种角色,分别为管理员和用户. 用户:机票浏览,机票查询,机票预定,新闻浏览,购票信息管理,留言信息管理 管理员:购票信息管理,机 ...

最新文章

  1. C#利用Graphics类绘制进阶--绘制条形码Code128
  2. BZOJ-1492-货币兑换cash-NOI2007-CDQ分治
  3. GDCM:gdcm::VM的测试程序
  4. 每天学一点flash(16) as3.0 与asp通信(3) 错误探究
  5. Spring MVC控制器的单元测试:配置
  6. html5input表单标签新属性
  7. 玛塔留言板无刷新留言板程序
  8. linux目录数据块,如何在Linux上列出文件的数据块?
  9. htm的head标签各元素分享
  10. Android中Context的详细介绍
  11. SpringApplication#run⽅法的第6步,创建ApplicationContext(五)
  12. 互评成绩 c语言,1077 互评成绩计算 (C语言)
  13. mysql MHA集群安装
  14. Canvas彩色樱花图案背景js特效
  15. 微信小程序实现评论多级展开收起以及点赞功能
  16. 大小口圆锥台计算机,2011年对口单招计算机试卷A04(18页)-原创力文档
  17. 系统设计开发模式思考
  18. AD21覆铜,包地,补泪滴,有图
  19. Gradient_patch_recovery, Z_Z posteriori error estimator
  20. ablation experiments

热门文章

  1. Java生成png文件字体不清晰_java 文本图片字体模糊优化处理
  2. 【JY】YJK前处理参数详解及常见问题分析(六):地震信息
  3. jieba 结巴分词详解
  4. 西门子 STEP7 HMI生成步骤
  5. C语言-----职工信息管理系统
  6. roseha修改服务器ip地址,roseha 9.0 for windows维护手册_v2.0-2015-04.pdf
  7. 电脑常用截图方法(含长截图)
  8. CE 自带Tutorial -第9关
  9. 射频识别技术漫谈(26)——Felica的文件系统
  10. Python 源码剖析 目录