1. 程式人生 > >JAVA語言課堂測試——石家莊地鐵模擬

JAVA語言課堂測試——石家莊地鐵模擬

實驗要求

https://pan.baidu.com/s/1kqfW9f28Z7wkDIYDDsh_XQ

原始碼

/*
 * 班級:信1705-1
 * 學號:20173458
 * 姓名:王嘉樑
*/
package subway;

import java.io.BufferedReader;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.IOException;
import java.util.Scanner;

class Subway{
    private String lineNumber=null
; private String lineName=null; private String transferInformation=null; public void lineInformation() {} public void querySite() {} public int buyTicket(int siteNumber) { if(siteNumber%3==0) return siteNumber/3; else return siteNumber/3+1; }
public String getLineNumber() { return lineNumber; } public void setLineNumber(String lineNumber) { this.lineNumber = lineNumber; } public String getLineName() { return lineName; } public void setLineName(String lineName) { this.lineName = lineName; }
public String getTransferInformation() { return transferInformation; } public void setTransferInformation(String transferInformation) { this.transferInformation = transferInformation; } } class FirstLineSubway extends Subway{ private String[] lineNames; //1號線所有站點名 FirstLineSubway(){ super(); try { BufferedReader br = new BufferedReader(new FileReader("shijiazhuang-subway.txt")); String firstLine = br.readLine(); String[] str = firstLine.split(","); setLineNumber(str[0]); setLineName(str[1]); setTransferInformation(str[2]); lineNames = getLineName().split("、"); br.close(); } catch (FileNotFoundException e1) { System.out.println("shijiazhuang-subway.txt檔案不存在!"); } catch (IOException e2) { System.out.println("IO流異常!"); } } public void lineInformation() { for(int i=0;i<lineNames.length;i++){ if(lineNames[i].compareTo(getTransferInformation()) == 0) System.out.println(getLineNumber()+ ":" + lineNames[i] + "\t可換乘3號線"); else System.out.println(getLineNumber()+ ":" + lineNames[i]); } } public String[] querySite(String begin,String end) { int be=-1,en=-1,mid=-1; String[] s = new String[6]; for(int i=0;i<lineNames.length;i++){ if(lineNames[i].compareTo(getTransferInformation()) == 0) mid = i; if(lineNames[i].compareTo(begin) == 0) be = i; if(lineNames[i].compareTo(end) == 0) en = i; } if(be>-1 && en>-1) { s[0]="true"; //s[0]代表是否為起點,若是則s[1]為起點站在陣列內位置。 s[1]=Integer.toString(be); s[2]="true"; //s[2]代表是否為終點站,若是則s[3]為終點站在陣列內位置。 s[3]=Integer.toString(en); s[4]=Integer.toString(be<en?en-be:be-en); //s[4]為站點數差值。 } else if(be>-1 && en==-1 && be!=mid) { s[0]="true"; s[1]=Integer.toString(be); s[2]="false"; s[3]="-1"; s[4]= Integer.toString(be<mid?mid-be:be-mid); } else if(be==-1 && en!=-1 && en!=mid) { s[0]="false"; s[1]="-1"; s[2]="true"; s[3]=Integer.toString(en); s[4]= Integer.toString(en<mid?mid-en:en-mid); } else { s[0]="false"; s[1]="-1"; s[2]="false"; s[3]="-1"; s[4]="0"; } s[5]=Integer.toString(mid); //s[5]為換乘站點(即新百廣場)在陣列內的位置 return s; } public String[] getLineNames() { return lineNames; } } class ThirdLineSubway extends Subway{ private String[] lineNames; //3號線所有站點名 ThirdLineSubway(){ super(); try { BufferedReader br = new BufferedReader(new FileReader("shijiazhuang-subway.txt")); String thirdLine = br.readLine(); thirdLine = br.readLine(); String[] str = thirdLine.split(","); setLineNumber(str[0]); setLineName(str[1]); setTransferInformation(str[2]); lineNames = getLineName().split("、"); br.close(); } catch (FileNotFoundException e1) { System.out.println("shijiazhuang-subway.txt檔案不存在!"); } catch (IOException e2) { System.out.println("IO流異常!"); } } public void lineInformation() { for(int i=0;i<lineNames.length;i++){ if(lineNames[i].compareTo(getTransferInformation()) == 0) System.out.println(getLineNumber()+ ":" + lineNames[i] + "\t可換乘1號線"); else System.out.println(getLineNumber()+ ":" + lineNames[i]); } } public String[] querySite(String begin,String end) { int be=-1,en=-1,mid=-1; String[] s = new String[6]; for(int i=0;i<lineNames.length;i++){ if(lineNames[i].compareTo(getTransferInformation()) == 0) mid = i; if(lineNames[i].compareTo(begin) == 0) be = i; if(lineNames[i].compareTo(end) == 0) en = i; } if(be>-1 && en>-1) { s[0]="true"; s[1]=Integer.toString(be); s[2]="true"; s[3]=Integer.toString(en); s[4]=Integer.toString(be<en?en-be:be-en); } else if(be>-1 && en==-1 && be!=mid) { s[0]="true"; s[1]=Integer.toString(be); s[2]="false"; s[3]="-1"; s[4]= Integer.toString(be<mid?mid-be:be-mid); } else if(be==-1 && en!=-1 && en!=mid) { s[0]="false"; s[1]="-1"; s[2]="true"; s[3]=Integer.toString(en); s[4]= Integer.toString(en<mid?mid-en:en-mid); } else { s[0]="false"; s[1]="-1"; s[2]="false"; s[3]="-1"; s[4]="0"; } s[5]=Integer.toString(mid); return s; } public String[] getLineNames() { return lineNames; } } public class SubwayManager { public static void main(String[] args) { int i; Scanner sc = new Scanner(System.in); Subway s = new Subway(); FirstLineSubway fls = new FirstLineSubway(); ThirdLineSubway tls = new ThirdLineSubway(); do { welcome1(); welcome2(); i=sc.nextInt(); switch(i) { case 1: System.out.print("請線路號(1或3;0顯示全部):"); i=sc.nextInt(); line(); switch(i) { case 0:fls.lineInformation();tls.lineInformation();break; case 1:fls.lineInformation();break; case 3:tls.lineInformation();break; default:System.out.println("請正確選擇!"); }break; case 2: welcome1(); System.out.print("起始站:"); String begin = sc.next(); System.out.print("終點站:"); String end = sc.next(); System.out.print("購票數量:"); int number = sc.nextInt(); System.out.println("***************************************************************"); welcome1(); String[] s1 = fls.querySite(begin, end); String[] s2 = tls.querySite(begin, end); String[] str1 = fls.getLineNames(); String[] str2 = tls.getLineNames(); int be,en,unitPrice=0; //全在1號線 if(s1[0].compareTo("true")==0 && s1[2].compareTo("true")==0) { System.out.println(s1[4] + "站"); be=Integer.parseInt(s1[1]); en=Integer.parseInt(s1[3]); if(en>be) for(i=be;i<=en;i++) System.out.println(str1[i]); else for(i=be;i>=en && i>=0;i--) System.out.println(str1[i]); unitPrice = s.buyTicket(Integer.parseInt(s1[4])); } //一半在1號線 if(s1[0].compareTo("true")==0 && s1[2].compareTo("false")==0) { System.out.println(Integer.parseInt(s1[4]) + Integer.parseInt(s2[4]) + "站"); be=Integer.parseInt(s1[1]); en=Integer.parseInt(s1[5]); if(en>be) for(i=be;i<en;i++) System.out.println(str1[i]); else for(i=be;i>en && i>=0;i--) System.out.println(str1[i]); System.out.println(str1[i] + "\t換乘3號線"); be=Integer.parseInt(s2[5]); en=Integer.parseInt(s2[3]); if(en>be) for(i=be+1;i<=en;i++) System.out.println(str2[i]); else for(i=be-1;i>=en && i>=0;i--) System.out.println(str2[i]); unitPrice = s.buyTicket(Integer.parseInt(s1[4]) + Integer.parseInt(s2[4])); } if(s1[0].compareTo("false")==0 && s1[2].compareTo("true")==0) { System.out.println(Integer.parseInt(s1[4]) + Integer.parseInt(s2[4]) + "站"); be=Integer.parseInt(s2[1]); en=Integer.parseInt(s2[5]); if(en>be) for(i=be;i<en;i++) System.out.println(str2[i]); else for(i=be;i>en && i>=0;i--) System.out.println(str2[i]); System.out.println(str2[i] + "\t換乘1號線"); be=Integer.parseInt(s1[5]); en=Integer.parseInt(s1[3]); if(en>be) for(i=be+1;i<=en;i++) System.out.println(str1[i]); else for(i=be-1;i>=en && i>=0;i--) System.out.println(str1[i]); unitPrice = s.buyTicket(Integer.parseInt(s1[4]) + Integer.parseInt(s2[4])); } //全在3號線 if(s1[0].compareTo("false")==0 && s1[2].compareTo("false")==0) { System.out.println(s2[4] + "站"); be=Integer.parseInt(s2[1]); en=Integer.parseInt(s2[3]); if(en>be) for(i=be;i<=en;i++) System.out.println(str2[i]); else for(i=be;i>=en && i>=0;i--) System.out.println(str2[i]); unitPrice = s.buyTicket(Integer.parseInt(s2[4])); } System.out.println("購票單價:" + unitPrice + "元"); System.out.println("購票金額:" + unitPrice*number + "元"); System.out.println("***************************************************************"); break; default:System.out.println("請正確選擇!"); } }while(true); } public static void welcome1() { System.out.println("***************************************************************"); System.out.println("歡迎乘坐石家莊地鐵"); System.out.println("***************************************************************"); } public static void welcome2() { System.out.println("1、顯示具體線路資訊;"); System.out.println("2、購票;"); System.out.println("***************************************************************"); } public static void line() { System.out.println("***************************************************************"); System.out.println("石家莊地鐵線路圖"); System.out.println("***************************************************************"); } }

shijiazhuang-subway.txt內容

1號線,洨河大道、南村、石家莊東站、火炬廣場、留村、白佛、朝暉橋、談固、北宋、體育場、博物院、北國商城、平安大街、解放廣場、新百廣場、烈士陵園、和平醫院、長城橋、時光街、西王,新百廣場
3號線,市二中、新百廣場、東里、槐安橋、西三教、石家莊站,新百廣場