2019/9/30 极限测试(1)
测试内容:
石家庄地铁一号线站点信息如下:
洨河大道、南村、石家庄东站、火炬广场、留村、白佛、朝晖桥、
谈固、北宋、体育场、博物院、北国商城、平安大街、解放广场、新百广场、烈士陵园、和平医院、长城桥、时光街、西王。
石家庄地铁三号线站点信息如下:
市二中、新百广场、东里、槐安桥、西三教、石家庄站。
1、把石家庄地铁图的各个线路,各个站点,换乘信息等用文本文件 shijiazhuang-subway.txt的形式保存起来,应该保存的信息有 {线路号,线路的各个站名,车站的换乘信息}。
2、定义Subway数据类
其中包括
三个私有变量:线路号、线路的各个站名,换乘车站的信息。
三个方法:
(1)遍历线路信息:输出线路号,显示所有改线路站点信息。
(2)查询站点信息:输入起始站、终点站,返回经历的站名的个数,和路径,如果有换乘,请列出换乘的线路, 例如:
起始站:北国商城
终点站:石家庄站
返回结果显示:
7站
北国商城
平安大街
解放广场
新百广场 换乘3号线
东里
槐安桥
西三教
石家庄站
(3)购票:统计起始站和终点站之间经过站点之和(包括终点站,不包括起始站),以每三站1元钱标准计算,超出部分不足三站的按照最低票价1元计算。例如北国商城到石家庄站共有7站,票价为3元。
4、定义SubwayManager类实现地铁运行功能,显示下列界面。
(1)欢迎界面
***************************************************************
欢迎乘坐石家庄地铁
****************************************************************
1、 显示具体线路信息;
2、 购票;
****************************************************************
(2)显示具体线路信息(需要标注换乘站信息)
提示用户输入线路号,显示该线路的全部站点信息,换乘车站应标注换乘信息,如果用户 输入0,则显示全部线路信息。
***************************************************************
石家庄地铁线路图
****************************************************************
1号线:站点1…………………….
3号线:站点1…………………….
****************************************************************
(3)购票界面
***************************************************************
欢迎乘坐石家庄地铁
****************************************************************
起始站:
终点站:
购票数量:
****************************************************************
返回结果界面
返回经历的站名的个数,和路径,如果有换乘,请列出换乘的线路,和购票金额。
显示结果如下所示:
***************************************************************
欢迎乘坐石家庄地铁
****************************************************************
7站
北国商城
平安大街
解放广场
新百广场 换乘3号线
东里
槐安桥
西三教
石家庄站
购票单价:3元
购票金额:6元
****************************************************************
思路:把所有站名通过文件读取按照线路的顺序读入到字符串数组。麻烦在于购票,需要考虑换线,这里以新百广场作为换成路线,起点和终点所在的线路。
代码:
这是subwayManager类
package subwayTest; import java.util.Scanner; public class subwayManager { static int z; subway sb = new subway(); Scanner scanner = new Scanner(System.in); void show() { System.out.println("***************************************************************"); System.out.println(" 欢迎乘坐石家庄地铁"); System.out.println("****************************************************************"); System.out.println(" 1、显示具体线路信息;"); System.out.println(" 2、购票;"); System.out.println(" 0、退出;"); System.out.println("****************************************************************"); } void show1() { sb.showAll(); } void showBuy() { System.out.println("***************************************************************"); System.out.println(" 欢迎乘坐石家庄地铁"); System.out.println("****************************************************************"); System.out.println("起点站:"); System.out.println("终点站:"); System.out.println("购票数量:"); System.out.println("****************************************************************"); System.out.println("请输入购票数量:"); int x=scanner.nextInt(); int price; sb.lookfor(); if(sb.num1%3==0) { price=((sb.num1)/3); }else { price=((sb.num1)/3+1); } System.out.println("购票单价:"+price+"元"); System.out.println("购票金额:"+price*x+"元"); } public static void main(String args[]) { subwayManager sm = new subwayManager(); Scanner scanner = new Scanner(System.in); do { sm.show(); System.out.print("请输入你要选择的项目:"); int n=scanner.nextInt(); switch(n) { case 1:sm.show1();break; case 2:sm.showBuy();break; case 0:break; } z=n; }while(z!=0); } }
这是subway类:
package subwayTest; import java.math.*; import java.io.File; import java.io.InputStreamReader; import java.util.Scanner; import java.util.StringTokenizer; import java.io.BufferedReader; import java.io.BufferedWriter; import java.io.FileInputStream; import java.io.FileNotFoundException; import java.io.FileReader; import java.io.FileWriter; /** * * @author 201835456 信1805-2 杨晓 * */ public class subway { private int num; private int length[]= new int[2]; private String subwayname[] = new String[100]; private String changename; static int num1=0; Scanner scanner = new Scanner(System.in); subway() { try {int i=0,j=0; String path="C:/Users/MACHENIKE/Desktop/石家庄地图.txt"; File file = new File(path); InputStreamReader reader = new InputStreamReader(new FileInputStream(file)); BufferedReader br = new BufferedReader(new FileReader(file)); String s=""; s=br.readLine(); while(s!=null) { StringTokenizer st = new StringTokenizer(s," "); while(st.hasMoreElements()) { String str =(String)st.nextElement(); subwayname[i++]=str; } } }catch(Exception e){ e.printStackTrace(); } } void showAll() { System.out.print("请输入你要查找的路线号码:"); int n=scanner.nextInt(); System.out.println("***************************************************************"); System.out.println(" 石家庄地铁线路图"); System.out.println("****************************************************************"); if(n==1) { System.out.println("1号线:"); for(int i=0;i<19;i++) { System.out.print(subwayname[i]); if(i==14) {System.out.print(" 换乘3号线");} System.out.println(); } System.out.println(subwayname[19]); }else if(n==3) { System.out.println("3号线:"); for(int i=20;i<25;i++) { System.out.print(subwayname[i]); if(i==21) {System.out.print(" 换成1号线");} System.out.println(); } System.out.println(subwayname[25]); }else if(n==0) { System.out.print("一号线:"); for(int i=0;i<20;i++) { System.out.print(subwayname[i]+" "); } System.out.println(); System.out.print("二号线:"); for(int i=20;i<26;i++) { System.out.print(subwayname[i]+" "); } System.out.println(); } System.out.println("****************************************************************"); } void lookfor() { System.out.println("请输入起点站和终点站"); String s1 = scanner.next(); String s2 = scanner.next(); int i=0,j=0; System.out.println("***************************************************************"); System.out.println(" 石家庄地铁线路图"); System.out.println("****************************************************************"); while(!(s1.equals(subwayname[i]))){ i++; } while(!(s2.equals(subwayname[j]))) { j++; } if(j>19&&i<=19) { // 起点在1号线,终点在3号线 num1=Math.abs(j-21)+Math.abs(i-14); }else if(i>19&&j<=19){// 起点在3号线,终点在1号线 num1=Math.abs(i-21)+Math.abs(j-14); }else {num1=Math.abs(j-i);} //起点终点在同一条线 System.out.println(num1+"站"); // 起点在新百广场右或新百广场 终点在三号线 if(i<14&&j>19) { for(;i<14;i++) { System.out.println(subwayname[i]); } if(j>=21) { for(int x=21;x<j+1;x++) { System.out.print(subwayname[x]); if(x==21) System.out.print(" 换乘三号线"); System.out.println(); } }else { for(int x=21;x>j-1;x--) { System.out.print(subwayname[x]); if(x==21) System.out.print(" 换乘三号线"); System.out.println(); } } } //起点在新百广场左或新百广场 终点在三号线 else if(i<20&&i>=14&&j>19) { for(;i>14;i--) { System.out.println(subwayname[i]); } if(j>21) { for(int x=21;x<j+1;x++) { System.out.print(subwayname[x]); if(x==21) System.out.print(" 换乘三号线"); System.out.println(); } }else { for(int x=21;x>j-1;x--) { System.out.print(subwayname[x]); if(x==21) System.out.print(" 换乘三号线"); System.out.println(); } } } //起点在三号线,终点在1号线 else if(i>19&&j<20) { for(;i>21;i--) { System.out.print(subwayname[i]); System.out.println(); } if(j>=14) { for(int x=14;x<j+1;x++) { System.out.print(subwayname[x]); if(x==14) System.out.print(" 换乘1号线"); System.out.println(); } }else{ for(int x=14;x>j-1;x--) { System.out.print(subwayname[x]); if(x==14) System.out.print(" 换乘1号线"); System.out.println(); } } } else { for(;i<j+1;i++) { System.out.println(subwayname[i]); } } } }
如果发现错误,请大佬留言指出,感谢。