个人开发流程 --计应191第二小组国际强

zPSP阶段

预算花费时间

实际花费时间

计划

3

3

明确开发方向,使用功能

2

2.5

开发

9

15

需求分析

1

2

代码编码

1

3

代码复审

1

1.5

测试(修改错误,完善功能)

1

2

郑州地铁计费系统

计划过程 

在进行编写之前,要对编码方向,实现功能有个大概的构思,再将功能进行细分,规划各个阶段使用的时间。

需求分析

对此次软件功能进行分析,需要什么按钮,需要什么功能,完成什么任务,都需要进行必要的分析。

起点和终点是无法获取乘客的行驶路径,于是乎简化计算过程,只计算两站之间的站数,而不进行公里数的计算。

       根据百度后得到每站计算费用的计费方式,对程序计算方法进行编程

      

具体实现

使用Eclipse对编码进行编程,根据以往学习经验,首先就是需要把数据库设计妥当,用来记录乘客起始和终止位置,计算乘客用时和路程以及费用,需要从数据库中去获取。

       其实在之前想过几种方法,觉得太过于简单,或者存在一定的误区,但是运用到算法的话又过于复杂,并且也没有接触过算法,所以要避开使用算法进行计算,细分各个计算过程,再对各个功能进行分析,要实现购票,出票,结算,进站和出战,分析这些问题后就可以开始进行编码了。

       再着就是要解决换乘的事情,例如一号线换为三号线,再怎么去解决计费问题,首先用第一站上站的位置开始计数,计算换乘的时候的位置,如果从一号线转到三号线,则计算上车位置到转站位置的站数,再从转站位置重新计数,计算到下车位置的站数,将这进行相加,则可以解决换站计费问题。

开发

简单进行一个系统的模拟,此处只演示两条线路

由于代码测试过程出现几处错误,此处只贴出一篇正确代码

package dt;

import java.util.ArrayList;

import java.util.HashSet;

import java.util.List;

import java.util.Set;

public class Line {

    public static List<Station> l1 = new ArrayList();//1号线

    public static List<Station> l2 = new ArrayList();//2号线

  

    static {

       init();

    }

    /**

     * 初始化方法

     */

    private static void init(){

        String line1Str = "河南工业大学 郑大科技园 郑州大学 梧桐街 兰寨 铁炉 市民中心 西流湖 西三环 秦岭路区";

        String line2Str = "贾河 惠济区政府 毛庄 黄河迎宾馆 金洼 金达路 刘庄 柳林 沙门 北三环 东风路 关虎屯

     

        initArr(l1,l1Str);

        initArr(l2,l2Str);

       

    }

    /**

     * 初始化列表,将字符串按空格分割添加到列表中

     * @param stationList 要初始化的列表

     * @param lineStr 存放数据的字符串

     */

    private static void initArr(List<Station> stationList, String lineStr) {

        String[] lineArr = lineStr.split(" ");

        for (String s : lineArr) {

            stationList.add(new Station(s));

        }

        for (int i = 0; i < stationList.size(); i++) {

            if (i < stationList.size() - 1) {

                stationList.get(i).next = stationList.get(i + 1);

                stationList.get(i + 1).prev = stationList.get(i);

            }

        }

        lineSet.add(stationList);

        stationCount += stationList.size();

    }

}

public class Station {

    private String name; //地铁站名称

    public Station prev; //前一个站

    public Station next; //后一个站

    //本站到某一个目标站(key)所经过的所有站集合(value),保持前后顺序

    private Map<Station,LinkedHashSet<Station>> orderSetMap = new HashMap();

    public Station() {

    }

    public Station (String name){

        this.name = name;

    }

    public String getName() {

        return name;

    }

    public LinkedHashSet<Station> getAllPassedStations(Station station) {

        if(orderSetMap.get(station) == null){

            LinkedHashSet<Station> set = new LinkedHashSet();

            set.add(this);

            orderSetMap.put(station, set);

        }

        return orderSetMap.get(station);

    }

    public Map<Station, LinkedHashSet<Station>> getOrderSetMap() {

        return orderSetMap;

    }

    @Override

    public boolean equals(Object o) {

        if (this == o){

            return true;

        }

        if (o == null || getClass() != o.getClass()) {

            return false;

        }

        Station station = (Station) o;

        return name.equals(station.name);

    }

    @Override

    public int hashCode() {

        return Objects.hash(name);

    }

}

代码复审和测试

代发复审并没有发现错误,因为单单在代码上无法看出有什么出入,在代码测试的过程,出现有换站过程计算费错误的出现,后面对代码就行优化,把车站计费重新进行修改,把起始站和换乘站的站数加上换乘位置到下车位置的站数,再通过站数进行费用的计算,这样经过几轮测试,发现原本的错误解决掉,在多次测试后,发现并无代码可以进行优化,也无代码错误的出现后,此处测试完成。

原文地址:https://www.cnblogs.com/jinpai/p/14645778.html