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]);
}
}
}
}
如果发现错误,请大佬留言指出,感谢。

浙公网安备 33010602011771号