Initialize repository
This commit is contained in:
107
IA.py
Executable file
107
IA.py
Executable file
@@ -0,0 +1,107 @@
|
||||
#!/usr/bin/env python3
|
||||
|
||||
import sqlite3
|
||||
import time
|
||||
|
||||
|
||||
def connect_database(file):
|
||||
"""
|
||||
Create and return Connection object
|
||||
:param file: database file
|
||||
"""
|
||||
conn = sqlite3.connect(file)
|
||||
return conn
|
||||
|
||||
|
||||
def get_lower_weekday():
|
||||
"""
|
||||
Return current weekday's name as lowercase string
|
||||
"""
|
||||
day = time.strftime("%A")
|
||||
lower_day = day.lower()
|
||||
return lower_day
|
||||
|
||||
|
||||
def check_id(conn, id):
|
||||
"""
|
||||
Return True if existing ID, False is not.
|
||||
:param conn: Connection object
|
||||
:param id: ID of student, int
|
||||
"""
|
||||
cur = conn.cursor()
|
||||
cur.execute("SELECT id FROM students")
|
||||
ids = cur.fetchall()
|
||||
|
||||
for x in ids:
|
||||
if id == x[0]:
|
||||
return True
|
||||
else:
|
||||
return False
|
||||
|
||||
|
||||
def select_final_time(conn, day, id):
|
||||
"""
|
||||
Return ending time of final lesson student must attend, or None.
|
||||
:param conn: Connection object
|
||||
:param day: current weekday, lowercase str
|
||||
:param id: ID of student, int
|
||||
"""
|
||||
cur = conn.cursor()
|
||||
cur.execute("""
|
||||
SELECT end_time
|
||||
FROM timetable
|
||||
INNER JOIN students ON g1 = lesson_id
|
||||
OR g2 = lesson_id
|
||||
OR g3 = lesson_id
|
||||
OR g4 = lesson_id
|
||||
OR g5 = lesson_id
|
||||
OR g6 = lesson_id
|
||||
WHERE id = ? AND day = ?
|
||||
ORDER BY end_time DESC
|
||||
LIMIT 1
|
||||
""", (id, day))
|
||||
finish = cur.fetchone()
|
||||
if str(type(finish)) == "<class 'tuple'>":
|
||||
return finish[0]
|
||||
else:
|
||||
return finish
|
||||
|
||||
|
||||
def parse_time_string(timestring):
|
||||
"""
|
||||
Parse given 24h time string of format 'HH:MM' into time_struct
|
||||
:param timestring: time string 'HH:MM'
|
||||
"""
|
||||
timestruct = time.strptime(timestring, "%H:%M")
|
||||
return timestruct
|
||||
|
||||
|
||||
def main():
|
||||
db = input(
|
||||
"Please enter name of database (located in the same folder as the program): ")
|
||||
|
||||
y = "y"
|
||||
while y == "y":
|
||||
conn = connect_database(db)
|
||||
day = get_lower_weekday()
|
||||
id = int(input("Please input the student ID number: "))
|
||||
|
||||
if check_id(conn, id):
|
||||
raw = select_final_time(conn, day, id)
|
||||
final = parse_time_string(raw) if raw != None else None
|
||||
|
||||
if final != None:
|
||||
current_time = parse_time_string(time.strftime("%H:%M"))
|
||||
|
||||
if current_time > final:
|
||||
print("Clear to leave.")
|
||||
else:
|
||||
print("Student does not have clearance.")
|
||||
elif final == None:
|
||||
print("Clear to leave.")
|
||||
|
||||
y = input("Press y and enter to run again.")
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
main()
|
||||
Reference in New Issue
Block a user