个人工作流程(地铁收费系统)——计应193第6组张淑雅
地铁收费系统设计——计应193第6组张淑雅
描述:
随着国家的发展速度,现在有许多交通方式,地铁是一种流行的交通方式。能够避免城市的路面拥堵。具有准时、速度快的优点。
1.计划
根据郑州市地铁线路图写一个地铁票价计算程序
2,需求分析
1、郑州市地铁规划图
2、郑州市地铁收费标准
3、郑州市地铁线路换乘点
郑州一号线地铁票价政策
票价
郑州地铁票价实行分段计价收费票制。
起步2元可坐4站,超过4站实行"递远递减"原则,
5~10站内在原本的基础上递增加1元(3元),
11~16站内在原本的基础上递增加1元(4元),
17~23站内在原本的基础上递增加1元(5元),
24~28站内在原本的基础上递增加1元(6元)
29站(从第一站到终点站)内在原本的基础上递增加1元(7元),
优惠政策
(1)60周岁以上有郑州市户口的老人在工作日非高峰期和节假日全天可免费乘车(工作日高峰期指7:00~9:00,17:00~19:00),每月免费限乘80次。
(2)革命伤残军人、因公致残的人民警察、盲人分别凭中华人民共和国伤残军人证、中华人民共和国伤残人民警察证及盲人乘车证可免费乘坐地铁。其他残疾人乘坐地铁,按照《郑州市城市轨道交通运营管理办法》规定执行。
(3)郑州市全日制中小学校学生凭相关证件购买相应票卡,可享受5折优惠。同时,身高1.3米以下的儿童须由成年乘客陪同,方可免费乘车。
2、具体设计
首先将郑州市地铁规划图存储到文件中并读取,然后使用迪杰斯特拉算法求出最短路径,并将结果展示,最终根据最短路径来计算花费
3、具体编码
package 地铁收费;
import java.util.ArrayList;
import java.util.List;
import java.util.Scanner;
public class Subway {
public static void main(String[] args) {
List al = new ArrayList();
int N1;
int N2;
double T = 3;
al.add("河南工业大学");
al.add("郑大科技园");
al.add("郑州大学");
al.add("梧桐街");
al.add("兰寨");
al.add("铁炉");
al.add("市民中心");
al.add("西流湖");
al.add("西三环");
al.add("秦岭路");
al.add("五一公园");
al.add("碧沙岗");
al.add("绿城广场");
al.add("医学院");
al.add("郑州火车站");
al.add("二七广场");
al.add("人民路");
al.add("紫荆山");
al.add("燕庄");
al.add("民航路");
al.add("会展中心");
al.add("黄河南路");
al.add("农业南路");
al.add("东风南路");
al.add("郑州东站");
al.add("博学路");
al.add("市体育中心");
al.add("龙子湖");
al.add("文苑北路");
al.add("河南大学新区");
System.out.println("\n" + "欢迎使用地铁系统");
System.out.println("===========================");
for (int i = 0; i < al.size(); i++) {
System.out.print("第" + (i + 1) + "站:" + al.get(i) + "\t");
if ((i + 1) % 5 == 0) {
System.out.println();
}
}
System.out.println("\n" + "===========================");
do {
System.out.println("请输入上车站");
Scanner sc = new Scanner(System.in);
String name1 = sc.nextLine();
if (al.contains(name1)) {
N1 = al.indexOf(name1);
break;
} else {
System.out.println("您输入的上车站" + name1 + "不存在!!!");
}
} while (true);
do {
System.out.println("请输入下车站");
Scanner sc = new Scanner(System.in);
String name2 = sc.nextLine();
if (al.contains(name2)) {
N2 = al.indexOf(name2);
break;
} else {
System.out.println("您输入的到达站:" + name2 + "不存在");
}
} while (true);
if (Math.abs(N2 - N1) <= 4) {
System.out.println("从" + al.get(N2) + "到" + al.get(N1) + "共经过" + Math.abs(N2 - N1) + "站," + "收费2元" + "大约需要"
+ (T * Math.abs(N2 - N1)) + "分钟");
} else if (Math.abs(N2 - N1) >=5 && Math.abs(N2 - N1) <=10) {
System.out.println("从" + al.get(N2) + "到" + al.get(N1) + "共经过" + Math.abs(N2 - N1) + "站," + "收费3元" + "大约需要"
+ (T * Math.abs(N2 - N1)) + "分钟");
} else if(Math.abs(N2 - N1) >=11 && Math.abs(N2 - N1) <=16){
System.out.println("从" + al.get(N2) + "到" + al.get(N1) + "共经过" + Math.abs(N2 - N1) + "站," + "收费4元" + "大约需要"
+ (T * Math.abs(N2 - N1)) + "分钟");
} else if(Math.abs(N2 - N1) >=17 && Math.abs(N2 - N1) <=23){
System.out.println("从" + al.get(N2) + "到" + al.get(N1) + "共经过" + Math.abs(N2 - N1) + "站," + "收费5元" + "大约需要"
+ (T * Math.abs(N2 - N1)) + "分钟");
}else if(Math.abs(N2 - N1) >=24 && Math.abs(N2 - N1) <=28){
System.out.println("从" + al.get(N2) + "到" + al.get(N1) + "共经过" + Math.abs(N2 - N1) + "站," + "收费6元" + "大约需要"
+ (T * Math.abs(N2 - N1)) + "分钟");
}else {
System.out.println("从" + al.get(N2) + "到" + al.get(N1) + "共经过" + Math.abs(N2 - N1) + "站," + "收费7元" + "大约需要"
+ (T * Math.abs(N2 - N1)) + "分钟");
}
}
}
8、代码复审
在测试过程中出现过许多错误,问题很多。使用了debag模式打断点进行纠错,一行一行的运行。然后将重复使用两次或两次以上的代码抽取成一个方法,减少代码的长度,增加可阅读性
9、测试报告
在出现正确的运行结果之前,运行了好多次,出现了好多漏洞。反复改进,才有了正确结果。
10、事后总结
这个项目刚开始觉得这个项目挺复杂,现在再做一次这个项目,查了好多资料。观看了好多大学毕业生的设计报告,突然间理顺了思路,做每个项目都需要分层设计这,也是一个重要环节。因为这是第一次个人做项目,经验少,还对内部原理不太清楚。希望在下次做项目时多改进。
工作所花时间百分比
PSP阶段 |
预计时间 |
实际记录 |
计划 |
10 |
8 |
|
10 |
8 |
开发 |
91 |
86 |
|
10 |
8 |
|
8 |
7 |
|
8 |
7 |
|
5 |
5 |
|
10 |
13 |
|
32 |
25 |
|
8 |
10 |
|
10 |
11 |
报告 |
19 |
22 |
|
3 |
3 |
|
3 |
4 |
|
13 |
15 |
总共花费的时间 |
120 |
116 |