为了好玩,我想在学校的python中写一个时间表创建者。即学校可以输入他们的房间,教师,课程和科目以及一些偏好的计划,并为每个班级/教师/房间输出时间表。我对这背后的逻辑没有问题(因为那是我最感兴趣的部分),但我确实遇到了设计问题(由于缺乏从头开始编写大量内容的经验)。
假设我有一个房间清单(101,102,...),一份教师名单(A先生,B太太......),一系列科目(数学,英语......)和一个班级列表(5,6,...)。
现在有些房间更适合不同的科目(如101对数学和英语有好处,但如果可能,地理位置必须在102)。当然,每个老师都有一套他教过的科目。
此外,这些课程分为不同的小组。即第5年级分为5-a和5-b,除了体育(可能是5组X和5组Y)和另一个科目之外的所有科目,其中它可以是5组1,5组2和5组3 。
如果有人可以就如何有效地保存这些数据/设计我的类给我一些建议会很好,所以我可以写一些不错的代码。
我的第一个猜测就像是(pseude代码):
class Room:
string name # e.g. r102.name = "102"
int id # that should be unique?
class Subject:
string name
int id
map RoomPref # like geography.Roompref[r102.id] = 1.0
# or math.Roompref[r101.id] = 0.75
class Teacher:
list Subjects # like MrsB.Subjects = {geography.id, math.id}
等等,但我不确定这种方法是否良好,并导致良好的代码。特别是所有不同的互连对我来说都是一个问题。 (分配不同的ID是一个很好的解决方案吗?)
欢迎提供建议和/或阅读材料。
答案 0 :(得分:1)
这个问题的一个困难部分是有许多关系构成了一个时间表。我会非常认真地考虑老师T如何教课,并在下午1:30在X室教授。
例如,在您的程序中,您可能想知道X房间何时可用。为此,您需要检查数据结构并找到X房间,然后搜索房间X空闲或占用的时间列表。但是,在另一个案例中,您可能想知道J老师是否教数学。因此,您将进行类似的查找并搜索教师J教授的所有课程。
所以我的建议是这样的:您将希望避免最初看起来最简单的选项来创建数据结构,您可以在其中创建时间段组织,然后将教师和类分配给那些时间。你可能最初会快速进步,但是当你意识到使用Class对象的结构代表一组关系是多么困难时,最终会遇到麻烦。
相反,尝试从像mysql这样的关系数据库开始。使用对其他表的引用,以便将数据从一个表链接到另一个表,而不是自己编写所有代码。这里没有必要重新发明轮子,并试图编写一个复杂的类结构来表示本质上简单(虽然可能是高度互联)的关系。