代码拉取完成,页面将自动刷新
/*
*用于黑盒测试、白盒测试和JUnit自动化测试。
*/
/**
* 这是菜单触发事件处理类。(作者:何海江)
* 增加一个航班,删除一个航班,修改航班信息,删除所有航班。
* 从文件读取航班信息,将航班信息存入文件
* 以票价为条件检索,以航空公司名称为条件检索,基于出发地统计航班数,基于目的地统计航班数,基于座位数目统计航班数
* 软件功能介绍,关于......
*
* 注意:此类用了很多麻烦的做法,避免了HFlightInfo和HMenuAction之间的耦合。HFlightInfo和HMenuAction之间的联系时间接的,
* 通过HManaFlight实现。
* 同学们在以后的代码中可以学习这样的方法。
*/
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.util.ArrayList;
import javax.swing.JEditorPane;
import javax.swing.JOptionPane;
import javax.swing.JTextArea;
public class HMenuAction implements ActionListener{
public static final String strReadFile = "从文件读取航班信息(R)";
public static final String strWriteFile = "将航班信息存入文件(W)";
public static final String strAddFlight = "增加一个航班";
public static final String strDelFlight = "删除一个航班";
public static final String strEditFlight = "修改航班信息(E)";
public static final String strRemoveAllFlight = "删除所有航班";
public static final String strPriceSearch = "以票价为条件检索航班(C)";
public static final String strAirlineNameSearch = "以航空公司名称为条件检索航班";
public static final String strDepartureStatistics = "基于出发地统计航班数";
public static final String strDestinationStatistics = "基于目的地统计航班数";
public static final String strSeatsStatistics = "基于座位数目统计航班数(S)";
public static final String strHelp ="软件功能介绍";
public static final String strAboutMe ="关于(A)......";
private HManaFlight m_hmfDmana; //航班管理类
private JEditorPane m_jtaShow; //关联显示区域,减少耦合。
//构造函数
HMenuAction()
{
m_hmfDmana = new HManaFlight();
}
//显示所有航班信息。
public void SetShowArea(JEditorPane jxa)
{
m_jtaShow = jxa;
}
@Override
public void actionPerformed(ActionEvent e) {
// TODO Auto-generated method stub
String strMenu = e.getActionCommand();
if( strHelp==strMenu )
DoHelp();
else if( strAboutMe==strMenu )
DoAboutMe();
else if( strReadFile==strMenu )
{//从文件读入数据:航班记录
StringBuffer strAllFlightInfo = new StringBuffer();
boolean bResult = m_hmfDmana.readFileToString(strAllFlightInfo);
if( bResult==true )
ShowAllFlight(strAllFlightInfo.toString());
}
else if( strWriteFile==strMenu )
{//保存数据:航班记录到文件
boolean bResult = m_hmfDmana.writeFlightFile();
if( bResult==true )
JOptionPane.showMessageDialog(null,
"<html><body><h1>所有航班记录成功保存到文件。</h1></body></html>",
"保存文件",JOptionPane.PLAIN_MESSAGE);
}
else if( strAddFlight==strMenu )//增加一个航班
{
AddOneFlight();
}
else if( strDelFlight==strMenu )//删除一个航班
{
DelOneFlight();
}//end of else if ( strDelFlight==strMenu )//删除一个航班
else if( strEditFlight==strMenu )//修改一个航班
{
EditOneFlight();
}
else if( strRemoveAllFlight==strMenu )//删除所有航班
{
m_hmfDmana.removeAllFlight();
String strInfo = m_hmfDmana.getAllFlightInfo(true, "<br>");
ShowAllFlight(strInfo);
}
else if( strPriceSearch==strMenu )//以票价为条件检索
{
SearchFlightByPrice();
}
else if( strAirlineNameSearch==strMenu )//以航空公司名称为条件检索
{
SearchFlightByCompanyName();
}
else if( strDepartureStatistics==strMenu )//基于出发地统计航班数
{
flightStatisticsByDeparture();
}
else if( strDestinationStatistics==strMenu )//基于目的地统计航班数
{
flightStatisticsByDestination();
}
else if( strSeatsStatistics==strMenu )//基于座位数目统计航班数(S)
{
flightStatisticsBySeats();
}
else{}
}//end of actionPerformed
//以票价查询航班记录
private void SearchFlightByPrice()
{
HSearchByTicketPrice hsp = new HSearchByTicketPrice(null);
hsp.setVisible(true);
boolean bResult = hsp.GetValidSearch();
if( true==bResult )
{
float fMin = hsp.GetMinPrice();
float fMax = hsp.GetMaxPrice();
String strInfo = m_hmfDmana.searchFlightByPrice(fMin, fMax);
if( strInfo.length()<2 ) //航班信息的长度不会少于30个字符长度。
JOptionPane.showMessageDialog(null,
"<html><body><h1>没有找到符合条件的航班!</h1></body></html>",
"查询结果",JOptionPane.PLAIN_MESSAGE);
else
JOptionPane.showMessageDialog(null, strInfo,
"查询结果",JOptionPane.PLAIN_MESSAGE);
}
}
//以航空公司名称查询航班记录
private void SearchFlightByCompanyName()
{
HSearchByAirCompany hsbc = new HSearchByAirCompany(null);
hsbc.setVisible(true);
boolean bResult = hsbc.GetValidSearch();
if( bResult )
{
String strCompany = hsbc.GetCompanyTitle();
int matching = hsbc.getMatchingStyle();
//String strInfo = m_hmfDmana.searchFlightByCompany(strCompany);
String strInfo = m_hmfDmana.multiSearchFlightByCompany(matching,strCompany);
if( strInfo.length()<2 ) //航班信息的长度不回少于30个字符长度。
JOptionPane.showMessageDialog(null,
"<html><body><h1>没有找到符合条件的航班!</h1></body></html>",
"查询结果————白盒测试教学",JOptionPane.PLAIN_MESSAGE);
else
JOptionPane.showMessageDialog(null, strInfo,
"查询结果————白盒测试教学",JOptionPane.PLAIN_MESSAGE);
}
}
//增加一个航班
private void AddOneFlight()
{
HInputFlight hif = new HInputFlight(/*mpFrame*/null,"输入航班的相关数据");
//获取航班号字符串数组表,后续使用它查询航班号是否存在。
ArrayList<String> flightIDArrayList = m_hmfDmana.getFlightIDArray();
hif.setFlightIDArrayList(flightIDArrayList);
//hif.setVisible(true);后,模态对话框将结束操作。
hif.setVisible(true);
//HFlightInfo hfiInfo=null;//这么做,会产生HFlightInfo和HMenuAction之间的耦合。
boolean bResult = hif.GetValidFlight();
if( true==bResult )
{
StringBuffer strSid = new StringBuffer();
StringBuffer strName = new StringBuffer();
StringBuffer strCompany = new StringBuffer();
StringBuffer strDeparture = new StringBuffer();
StringBuffer strDestination = new StringBuffer();
float[] fPrice = {0.0f};
int[] nSeat = {0};
boolean[] transits = {true};
hif.GetInputFlightRecord(strSid,strName,strCompany,strDeparture,strDestination,
fPrice,nSeat,transits);
m_hmfDmana.addFlightInfo(strSid.toString(), strName.toString(), strCompany.toString(),
strDeparture.toString(),strDestination.toString(),
fPrice[0], nSeat[0], transits[0]);
String strInfo = m_hmfDmana.getAllFlightInfo(true, "<br>");
ShowAllFlight(strInfo);
}
}
//删除一个航班
private void DelOneFlight()
{
String strID = JOptionPane.showInputDialog(null, "<html><body>请输入要删除航班的航班号:<br><em style=\"color: green;\">两个英文大写字母(A-Z)开头,后接4位数字(0-9)</em></body></html>",
"删除一个航班" , JOptionPane.INFORMATION_MESSAGE);
if( null!=strID )
{ //用户按了确定按钮。 strID==null表示用户按了取消按钮。用户没有输入则strID=""。
if(VerifyFlightFields.checkFlightID(strID))
{
boolean bResult = m_hmfDmana.delFlightInfoByID(strID);
if( bResult )//成功删除
{
String strInfo = m_hmfDmana.getAllFlightInfo(true, "<br>");
ShowAllFlight(strInfo);
}
else
JOptionPane.showMessageDialog(null,
"<html><body><h1>航班号"+strID+"不存在,注意与航班名称和航班公司名称区分开来!</h1></body></html>",
"删除一个航班",JOptionPane.PLAIN_MESSAGE);
}
else
JOptionPane.showMessageDialog(null,
"<html><body><h1>输入的航班号"+strID+"无效,航班号要求两个英文大写字母(A-Z)开头,后接4位数字(0-9)。)!</h1></body></html>",
"删除一个航班",JOptionPane.PLAIN_MESSAGE);
}
}
//修改一个航班
private void EditOneFlight()
{
//这些多参数虽然复杂,但是减少了模块之间的耦合。
StringBuffer strSid = new StringBuffer();
StringBuffer strName = new StringBuffer();
StringBuffer strCompany = new StringBuffer();
StringBuffer strDeparture = new StringBuffer();
StringBuffer strDestination = new StringBuffer();
float[] fPrice = {0.0f};
int[] nSeat = {0};
boolean[] transits = {true};
//strSid与flightID重复,因为GetInputFlightRecord的关系,要求参数类型为StringBuffer。
String flightID = JOptionPane.showInputDialog(null, "<html><body>请输入要修改航班的航班号:<br><em style=\"color: green;\">两个英文大写字母(A-Z)开头,后接4位数字(0-9)</em></body></html>",
"修改航班信息" , JOptionPane.INFORMATION_MESSAGE);
if( null!=flightID )
{ //用户按了确定按钮。 flightID==null表示用户按了取消按钮。用户没有输入则flightID=""。
if(VerifyFlightFields.checkFlightID(flightID))
{
boolean bResult = m_hmfDmana.getFlightInfoByID(flightID, strName,strCompany,strDeparture,strDestination,
fPrice,nSeat,transits );
if( bResult )//航班号存在,可以修改。
{
HInputFlight hif = new HInputFlight(/*mpFrame*/null,"修改航班的相关数据");
hif.fillFlightInfo(flightID, strName.toString(), strCompany.toString(),
strDeparture.toString(),strDestination.toString(),
fPrice[0], nSeat[0], transits[0]);
hif.setModifyFlight(true);//必须放在hif.setVisible(true);之前。
hif.setVisible(true);
//HFlightInfo hfiInfo=null;//这么做,会产生HFlightInfo和HMenuAction之间的耦合。
boolean bModify = hif.GetValidFlight();
if( bModify )
{
// 清除原有内容
strSid.setLength(0);
strName.setLength(0);
strCompany.setLength(0);
strDeparture.setLength(0);
strDestination.setLength(0);
hif.GetInputFlightRecord(strSid,strName,strCompany,strDeparture,strDestination,
fPrice,nSeat,transits);
m_hmfDmana.modifyFlightInfo(strSid.toString(), strName.toString(), strCompany.toString(),
strDeparture.toString(),strDestination.toString(),
fPrice[0], nSeat[0], transits[0]);
String strInfo = m_hmfDmana.getAllFlightInfo(true, "<br>");
ShowAllFlight(strInfo);
}
}
else//航班号不存在。
JOptionPane.showMessageDialog(null,
"<html><body><h1>航班号"+flightID+"不存在,注意与航班名称和航班公司名称区分开来!</h1></body></html>",
"修改航班信息————白盒测试教学",JOptionPane.PLAIN_MESSAGE);
}//enf of if(VerifyFlightFields.checkFlightID(flightID))
else //输入的航班号无效
JOptionPane.showMessageDialog(null,
"<html><body><h1>输入的航班号"+flightID+"无效,航班号要求两个英文大写字母(A-Z)开头,后接4位数字(0-9)。)!</h1></body></html>",
"修改航班信息————白盒测试教学",JOptionPane.PLAIN_MESSAGE);
}
}
//基于出发地统计航班数
private void flightStatisticsByDeparture()
{
String strPrompt = "基于出发地统计航班数————白盒测试教学";
String strDeparture = JOptionPane.showInputDialog(null, "<html><body>请输入要统计航班的出发地:<br><em style=\"color: green;\">2到5个英文小写字母(a-z)</em></body></html>",
strPrompt, JOptionPane.INFORMATION_MESSAGE);
if( null!=strDeparture )
{ //用户按了确定按钮。 strDeparture==null表示用户按了取消按钮。用户没有输入则strDeparture=""。
if( true==VerifyFlightFields.checkPlaceDeparture(strDeparture) )
{
StringBuffer strAllFlights = new StringBuffer();
int flights = m_hmfDmana.statisticsFlightByDeparture(strDeparture, strAllFlights,"<br>");
if( flights>0 )//至少有一个符合统计条件
{
JOptionPane.showMessageDialog(null,
"<html><body>当前共有<em style=\"color: red;\">【"+String.valueOf(flights)+
"】</em>个航班符合统计条件。<br>"+strAllFlights.toString()+"</body></html>",
strPrompt,JOptionPane.PLAIN_MESSAGE);
}
else
JOptionPane.showMessageDialog(null,
"<html><body><h1>出发地 "+ strDeparture +" 不存在,注意与目的地区分开来!</h1></body></html>",
strPrompt,JOptionPane.PLAIN_MESSAGE);
}//end of if( true==VerifyFlightFields.checkPlaceDeparture(strDeparture) )
else
JOptionPane.showMessageDialog(null,
"<html><body><h1>航班的出发地:2到5个英文小写字母(a-z)。 "+ strDeparture +"无效!</h1></body></html>",
strPrompt,JOptionPane.PLAIN_MESSAGE);
}
}
//基于目的地统计航班数
private void flightStatisticsByDestination()
{
String strPrompt = "基于目的地统计航班数————白盒测试教学";
String strDestination = JOptionPane.showInputDialog(null, "<html><body>请输入要统计航班的目的地:<br><em style=\"color: green;\">2到5个英文小写字母(a-z)</em></body></html>",
strPrompt, JOptionPane.INFORMATION_MESSAGE);
if( null!=strDestination )
{ //用户按了确定按钮。 strDestination==null表示用户按了取消按钮。用户没有输入则strDestination=""。
if( VerifyFlightFields.checkPlaceDestination(strDestination) )
{
StringBuffer strAllFlights = new StringBuffer();
int flights = m_hmfDmana.statisticsFlightByDestination(strDestination, strAllFlights,"<br>");
if( flights>0 )//至少有一个符合统计条件
{
JOptionPane.showMessageDialog(null,
"<html><body>当前共有<em style=\"color: red;\">【"+String.valueOf(flights)+
"】</em>个航班符合统计条件。<br>"+strAllFlights.toString()+"</body></html>",
strPrompt,JOptionPane.PLAIN_MESSAGE);
}
else
JOptionPane.showMessageDialog(null,
"<html><body><h1>目的地 "+ strDestination +" 不存在,注意与出发地区分开来!</h1></body></html>",
strPrompt,JOptionPane.PLAIN_MESSAGE);
}//end of if( VerifyFlightFields.checkPlaceDestination(strDestination) )
else
JOptionPane.showMessageDialog(null,
"<html><body><h1>航班的目的地:2到5个英文小写字母(a-z)。 "+ strDestination +"无效!</h1></body></html>",
strPrompt,JOptionPane.PLAIN_MESSAGE);
}
}
//基于座位数目统计航班数
private void flightStatisticsBySeats()
{
String strPrompt = "基于座位数目统计航班数————白盒测试教学";
String strSeats = JOptionPane.showInputDialog(null, "<html><body>请输入要统计航班的座位数目:<br><em style=\"color: green;\">座位数为120-200的整数</em><br>将统计座位数不少于此值的航班。</body></html>",
strPrompt, JOptionPane.INFORMATION_MESSAGE);
if( null!=strSeats )
{ //用户按了确定按钮。 strSeats==null表示用户按了取消按钮。用户没有输入则strSeats=""。
int numberOfSeats = VerifyFlightFields.checkSeats(strSeats);
if( numberOfSeats>0 )
{ //numberOfSeats>0隐含了120<=numberOfSeat<=200,checkSeats会将无效座位数设置为-1.
StringBuffer strAllFlights = new StringBuffer();
int flights = m_hmfDmana.statisticsFlightBySeats(numberOfSeats, strAllFlights,"<br>");
if( flights>0 )//至少有一个符合统计条件
{
JOptionPane.showMessageDialog(null,
"<html><body>当前共有<em style=\"color: red;\">【"+String.valueOf(flights)+
"】</em>个航班的错位数不少于" + String.valueOf(numberOfSeats)+"。<br>"+strAllFlights.toString()+"</body></html>",
strPrompt,JOptionPane.PLAIN_MESSAGE);
}
else
JOptionPane.showMessageDialog(null,
"<html><body><h1>座位数不少于 "+ String.valueOf(numberOfSeats) +" 的航班不存在!</h1></body></html>",
strPrompt,JOptionPane.PLAIN_MESSAGE);
}//end of if( numberOfSeats>0 )
else
{
//范围之外的numberOfSeat会变为-1,所以不要用String.valueOf(numberOfSeats)代替strSeats
JOptionPane.showMessageDialog(null,
"<html><body><h1>航班的座位数目(120-200的整数): "+ strSeats +" 无效!</h1></body></html>",
strPrompt,JOptionPane.PLAIN_MESSAGE);
}
}//end of if( null!=strSeats )
}
//about me关于......
private void DoAboutMe()
{
JOptionPane.showMessageDialog(null,
"<html><body><h1>软件测试教学程序,包括:黑盒测试、白盒测试和自动化测试。</h1><h2>参看实验指导书</h2></body></html>",
"关于......————白盒测试教学案例",JOptionPane.PLAIN_MESSAGE);
}
//help软件功能介绍
private void DoHelp()
{
JOptionPane.showMessageDialog(null,
"<html><body><h1>软件功能介绍</h1><h3>1,操作航班信息前,先读文件FlightInfo.txt;使用结束,将航班信息保存到文件。</h3>"
+ "<h3>2,测试过程中,可通过菜单修改航班信息。</h3>"
+ "<h3>3,要有多个航班数据,才能查询统计。</h3></body></html>",
"软件功能介绍————白盒测试教学案例",JOptionPane.PLAIN_MESSAGE);
}
/*
* 显示当前所有的航班记录。
* 航班记录放在strInfo中
* 供HMenuAction调用。
*/
public void ShowAllFlight(String strInfo)
{
m_jtaShow.setText("<html><body><h3>"+strInfo+"</h3></body></html>");
}
}
此处可能存在不合适展示的内容,页面不予展示。您可通过相关编辑功能自查并修改。
如您确认内容无涉及 不当用语 / 纯广告导流 / 暴力 / 低俗色情 / 侵权 / 盗版 / 虚假 / 无价值内容或违法国家有关法律法规的内容,可点击提交进行申诉,我们将尽快为您处理。