我如何构建一个确定下一班巴士出发的程序?

时间:2014-03-23 10:02:32

标签: ios algorithm pseudocode

我希望制作一个iOS应用程序,显示公交车从终端出发的时间。用户可以选择在1到5个总线之间进行检查。例如,假设有5条公共汽车,所有这些公共汽车都可能在不同的时间离开航站楼(例如,它们都不会离开航站楼:30)。除此之外,每周的每一天都会改变该公交车的起飞时间。此外,有些公共汽车在某些日子没有运行。所以基本上总结一下..

- 公共汽车有不同的出发时间,具体取决于一周中的哪一天 - 所有公共汽车都在一周7天运行

关于如何构建这个程序,我有点不知所措。我最初的想法是为5辆公共汽车中的每一辆做一个班级。我将确定用户是否已选择检查公共汽车的下一个出发时间。例如,用户可以根据需要检查所有5辆公交车的出发时间。如果用户检查所有5个总线,应用程序将显示所有5个总线的下一个离开时间。如果用户只想在下一次出发时显示其中一辆公交车,他们只会检查那辆公交车。

因此,就启动逻辑而言,我会考虑首先检查总线是否已被检查:

如果(bus1CheckedOff)    //

如果(bus2CheckedOff)    //

如果(bus3CheckedOff)    //

如果(bus4CheckedOff)    //

如果(bus5CheckedOff)    //

从那里,我需要获得下一个离开时间。我想每天写一个班级,并存储5个公共汽车中的每一个的所有信息。所以星期一,星期二,星期三,星期四,星期五,星期六,星期日上课。

然后我会在用户的iOS设备上找到日期和时间,并根据日期,转到该类,并过滤一系列次数,并返回最接近的时间(确保它没有& #39; t过去了吗?

如果(bus1CheckedOff) {    如果(isMonday)       //

否则if(isTuesday)       //

否则if(isWednesday)       //

否则if(isThursday)       //

否则if(isFriday)       //

否则if(isSaturday)       //

否则if(isSunday)       // }

如果(bus2CheckedOff)    //

如果(bus3CheckedOff)    //

如果(bus4CheckedOff)    //

如果(bus5CheckedOff)    //

我在漫无边际,总而言之只是寻找一个有效的结构来编写这个应用程序。有什么建议吗?

1 个答案:

答案 0 :(得分:0)

不要为每个总线和每个工作日创建一个类。类的想法是封装常见行为,以便单个实例可以使用它。特别是,如果您的代码有许多类似于上述建议的行,则可能值得重新考虑数据结构。

我会创建一个Bus类(其中总线实际上是指公共汽车服务),其中包含行号,目的地和时间表列表以及返回特定日期时间表的方法。它还需要知道是否在应用程序中检查了它。然后你可以得到一个从终端开始的(任意数量,而不仅仅是五个)总线服务的列表,你可以检查它们是否应该被循环考虑。

我还会写一个系统来分类天。当然,有七个星期的日子,但也有更广泛的类别,如工作日,周末和公众假期。该系统具有层次结构:广泛的类别具有低优先级,特殊日期具有高优先级。

然后你需要确定如何存储时间表。最简单的方法是制作日期类别和时间列表的地图。

class Bus
    public
        String destination
        String service
        bool checked

        Time[] timetable(Day):
            if day in times:
                return times[day]
            if holiday(day) and "Holiday" in times:
                return times["Holiday"]
            if weekday(day) in times:
                return times[weekday(day)]
            if "Everyday" in times:
                return times["Everyday"]
            return []

        void add(Day, Time[])

    private
        Time[][Day] times

Bus bus[] = []

Bus b1("1", "Forest View")
b1.add(Weekend, [0845, 1045, 1245, 1540])
b1.add(Workday, [0845, 0945, 1045, 1145, 1245,
    1420, 1520, 1620, 1820, 2020, 2220])
b1.add("Dec 25", [1300])
bus.add(b1)

Bus b5("5", "Mountain View")
b5.add(Everyday, [0800, 0900, 0930, 1000, 1030, 1100, 1130,
    1200, 1300, 1400, 1430, 1530, 1600, 1630, 1700, 1800,
    1900, 2000, 2200, 2230])
b5.add(Sunday, [1000, 1200, 1600, 1800])
bus.add(b5)

Bus gc("Grand Circuit", "via Ocean View")
gc.add(Everyday, [0835, 1035, 1235, 1635])
bus.add(gc)

您可以循环查找所有公交车的出发时间。将它们添加到时间和服务元组列表中,并按出发时间对该列表进行排序:

# helper class to relate times and bus services
public class Departure
    Time time
    Bus bus

Departure dep[] = []
day = "Mar 23"
foreach b in bus:
    if b.checked():
        tt = timetable(day)
        foreach t in tt:
            dep.add(Departure(t, b))

dep.sort()      # sort by time

for d in dep:
    print d.time, d.bus.service, d.bus.destination

瞧!这应该给你

08:35    Grand Circuit - via Ocean View
08:45    1 - Forest View
10:00    5 - Mountain View
10:35    Grand Circuit - via Ocean View
10:45    1 - Forest View
12:00    5 - Mountain View
12:35    Grand Circuit - via Ocean View
12:45    1 - Forest View
15:40    1 - Forest View
16:00    5 - Mountain View
16:35    Grand Circuit - via Ocean View
18:00    5 - Mountain View