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]);
			}
		}

		
	}
			
		
} 

如果发现错误,请大佬留言指出,感谢。

原文地址:https://www.cnblogs.com/yangxiao-/p/11615311.html