我希望制作一个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) //
我在漫无边际,总而言之只是寻找一个有效的结构来编写这个应用程序。有什么建议吗?
答案 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