面面向向对对象象技技术术大大作作业业姓名:夏超学号:04121174班级:041212二零一四年十一月1.需求分析1.1.问题描述实现“选择目的车站”、“投币买票”、“找零”、“打印车票”等功能;在操作的任何阶段都允许取消操作,钱款退回并恢复到初始状态对于顾客而言,在触摸屏上定义他们所想要的一张车票,支付固定的票款,然后取得找零、车票。对于售票系统而言,显示人机操作界面,然后接受乘客选的目的车站点,然后显示具体票价,待确定乘客支付票款后,进行比较,若支付款小于票价,则退出交易,退出交易钱款;如果支付额大于实际票价,则打印车票以及交付,且在车票已经交付之后,进行找零操作。1.2.对问题的理解1.有限状态机,(英语:Finite-statemachine,FSM),又称有限状态自动机,简称状态机,是表示有限个状态以及在这些状态之间的转移和动作等行为的数学模型。2面向对象的三个基本特征:1).抽象与封装:抽象是把系统中需要处理的数据和在这些数据上的操作结合在一起,根据功能、性质和用途等因素抽象成不同的抽象数据类型。每个抽象数据类型既包含了数据,又包含了针对这些数据的授权操作。在面向对象的程序设计中,抽象数据类型是用“类”这种结构来实现的,每个类里都封装了相关的数据和操作。封装是指利用抽象数据类型和基于数据的操作结合在一起,数据被保护在抽象数据类型的内部,系统的其他部分只有通过包裹在数据之外被授权的操作,才能与这个抽象数据类型进行交互。2.)继承:它是与传统方法不同的一个最有特色的方法。它是面向对象的程序中两个类之间的一种关系,即一个类可以从另一个类(即它的父类)继承状态和行为。继承父类的类称为子类。继承的优越性:通过使用继承,程序员可以在不同的子类中多次重新使用父类中的代码,使程序结构清晰,易于维护和修改,而子类又可以提供一些特殊的行为,这些特殊的行为在父类中是没有的。3.)多态:是指一个程序中同名的方法共存的情况,调用者只需使用同一个方法名,系统会根据不同情况,调用相应的不同方法,从而实现不同的功能。多态性又被称为“一个名字,多个方法”。3我要准备的东西:画(状态)流程图翻译状态流程图为状态机优化、调试根据要求,我可以将地铁自动售票系统分为多个模块,分别为选车站模块、投币模块、找零模块、打印车票模块。具体状态图如下:2.程序设计2.1.概要设计1、本系统中我需要用到的类有:temporaryCard、station、fare、orderForm、train。(不考虑刷卡者,只研究零时顾客temporaryCard)TemporaryCard类是临时卡类别,其属性包括TemporaryCardNo、user、tel、discountStation类是站点类别,其属性包括StationNo、StationName、vistorsflowrate、pictureFare类是票价类别,其属性包括FareNo、origin、terminal、sumOrderForm类是订单类别,其属性包括OrderFormNo、origin、terminal、cardNo(外键)、OrderFormsum、return(0or1)、date、amountTrain类是列车类别,其属性包括TrainNo、StationName(多值属性)、picture2.2详细设计类型图表TemporaryCard类TemporaryCardNOuserteldiscount站点类图StationNoStationNamevistorsflowratepictureFare类是票价类别FareNooriginterminalsum3、如何交互FareFareNooriginterminalsumStationStationNoStationNamevistorsflowratepictureTemporaryCardTemporaryCardNouserteldiscountOrderFormOrderFormNooriginterminalcardNoOrderFormsumreturndateamountTurnoverTurnoverNodaysumdateTrainTrainNoStationNamepicture3.代码清单地铁售票系统一、Opreation.javapackageoperation;importstate.state;publicclassopreation{publicstaticvoidoperate(){state.StandbyState();}}二、State.javapackagestate;importjava.awt.event.ActionEvent;importjava.awt.event.ActionListener;importjavax.swing.DefaultComboBoxModel;importwindow.windows;publicclassstate{staticintindex=0;//所选车站编号staticintcash=0;//所需车费staticStringstation=null;//所选车站staticStringtext=null;//投币窗口文本staticintfare=0;//支付费用//待机初始化publicstaticvoidStandbyState(){windows.chargeField.setText(0);windows.changeField.setText(0);windows.Screen.setText(\n\n\n你好,\n\n欢迎使用西安地铁自动售票机\n\n按确定键继续);//确定键监听windows.sure.addActionListener(newActionListener(){publicvoidactionPerformed(ActionEvente){ChoiceState();windows.comboBox.setModel(newDefaultComboBoxModelObject(newString[]{\u5317\u82D1,\u8FD0\u52A8\u516C\u56ED,\u884C\u653F\u4E2D\u5FC3,\u51E4\u57CE\u4E94\u8DEF,\u5E02\u56FE\u4E66\u9986,\u5927\u660E\u5BAB\u897F,\u9F99\u9996\u539F,\u5B89\u8FDC\u95E8,\u5317\u5927\u8857,\u949F\u697C,\u6C38\u5B81\u95E8,\u5357\u7A0D\u95E8,\u4F53\u80B2\u573A,\u5C0F\u5BE8,\u7EAC\u4E00\u8857,\u4F1A\u5C55\u4E2D\u5FC3}));}});}//选择车站模式publicstaticvoidChoiceState(){windows.Screen.setText(\n\n\n\n\n请选择你要去往的车站);//选择窗口监听监听windows.comboBox.addActionListener(newActionListener(){publicvoidactionPerformed(ActionEventarg0){index=windows.comboBox.getSelectedIndex();station=windows.comboBox.getSelectedItem().toString();}});windows.main.addActionListener(newActionListener(){publicvoidactionPerformed(ActionEvente){StandbyState();}});windows.sure.addActionListener(newActionListener(){publicvoidactionPerformed(ActionEvente){windows.Screen.setText(\n\n\n\n\n请选择你要去往的车站);ChargeState();}});windows.cancel.addActionListener(newActionListener(){publicvoidactionPerformed(ActionEvente){StandbyState();}});}//支付模式publicstaticvoidChargeState(){cash=count(index);if(station==null)windows.Screen.setText(\n\n\n\n您还没有选择您要去往的车站\n\n按取消返回上一步);else{windows.Screen.setText(\n\n\n\n您选择了:+station+站+\n\n需要要支付+cash+元,\n\n请从投币口支付);windows.main.addActionListener(newActionListener(){publicvoidactionPerformed(ActionEvente){StandbyState();}});//确定键windows.sure.addActionListener(newActionListener(){publicvoidactionPerformed(ActionEvente){try{ChangeState();}catch(InterruptedExceptione1){}}});//取消键windows.cancel.addActionListener(newActionListener(){publicvoidactionPerformed(ActionEvente){ChoiceState();}});}}//找零模式publicstaticvoidChangeState()throwsInterruptedException{text=windows.chargeField.getText();intfare=Integer.parseInt(text);intnum=fare-cash;Strings=String.valueOf(num);if(num=0){windows.Screen.setText(\n\n\n您共支付了+fare+元,\n\n找您+num+元,+\n\n请收好您的零钱。);windows.changeField.setText(s);windows.main.addActionListener(newActionListener(){publicvoidactionPerformed(ActionEvente){windows.Screen.setText(\n\n\n\n\n您已支付,请勿退出);}});//确定键windows.sure.addActionListener(newActionListener(){publicvoidactionPerformed(ActionEvente){try{PrintState();}catch(InterruptedExceptione1){}}});windows.cancel.addActionListener(newActionListener(){publicvoidactionPerformed(ActionEvente){windows.changeField.setText(text);try{windows.Screen.setText(\n\n\n\n\n您选择了取消,钱已退回);Thread.sleep(2000);}catch(InterruptedExceptione1){}ChoiceState();}});}else{windows.Screen.setText(\n\n\n\n抱歉!支付不足,钱