· 8 years ago · Apr 27, 2018, 09:36 PM
1from sqlite3 import *
2from datetime import *
3from hashlib import sha512
4
5Database = connect("homeworklog.db")
6C = Database.cursor()
7ID = 1 # Global reference so that userID can be used as a foreign key in Homework
8
9
10def programMenu(CreateUser, login):
11 uResponse = input("Type 'C' to create a new user, 'L' to log in or CTRL + C to exit: ")
12 if uResponse == 'C':
13 CreateUser()
14 elif uResponse == 'L':
15 login(ID)
16 else:
17 print("Incorrect input, please try again.\n")
18 programMenu(CreateUser, login)
19
20
21def login(ID):
22 password = [] # Had to append password and ID to list to prevent sqlite3.ProgrammingError:
23 # Incorrect number of bindings supplied. The current statement uses 1, and there are "10" supplied.
24 IDValid = int(input("Enter your userID: "))
25 ID.append(IDValid)
26 passwordValid = str(input("Enter your password: "))
27 hashed = sha512(passwordValid.encode('utf-8')).hexdigest()
28 password.append(hashed)
29 C.execute("SELECT * FROM Users WHERE userID=?", ID)
30 check1 = (C.fetchall())
31 if len(check1) > 0 and password[0] == check1[0][1]: # fixed by checking if the length is greater than 0
32 print("Valid userID and password\n")
33 uResponse = input("Type 'V' to view your homework. Type 'A' to add homework. Type 'E' your homework. Type 'D' "
34 "to delete your homework: ")
35
36 if uResponse == 'V':
37 ViewHomework(ID)
38 elif uResponse == 'A':
39 CreateHomework()
40 elif uResponse == 'E':
41 True
42 elif uResponse == 'D':
43 True
44 else:
45 print("Incorrect input, please try again.\n")
46 login(ID)
47 else:
48 print("Incorrect userID or password. Please try again")
49 login(ID)
50
51
52def CreateUser():
53 uPass = []
54 passwordTest = str(input(
55 'Create a password \nthe password must contain at least 8 characters, 1 uppercase character, 1 lowercase '
56 'character and 1 number: '))
57 uPass.append(passwordTest)
58 passwordVerify = input("Re-enter the password: ")
59 rules = (lambda x: x == passwordVerify,
60 lambda x: any(x.isupper() for x in x), # must have at least one uppercase
61 lambda x: any(x.islower() for x in x), # must have at least one lowercase
62 lambda x: any(x.isdigit() for x in x), # must have at least one digit
63 lambda x: len(x) >= 8) # must be at least 8 characters
64 if all(rule(uPass[0]) for rule in rules):
65 print("Password accepted") # inserts password into database if all is valid
66 hashed = sha512(uPass[0].encode('utf-8')).hexdigest()
67 C.execute("INSERT INTO Users (password) VALUES(?)", [hashed])
68 C.execute("SELECT MAX(userID) FROM Users")
69 variable = str(C.fetchall())
70 print("Your unique user id is ", variable[2:-3])
71 Database.commit()
72 programMenu(CreateUser, login)
73 else:
74 print("Incorrect input, please try again.\n")
75 CreateUser()
76
77
78class Homework:
79 def __init__(self):
80 self.dueDate1 = []
81 self.subject1 = []
82 self.teacher1 = []
83 self.difficulty1 = []
84 self.note1 = []
85
86 def due_date(self):
87 while True:
88 try:
89 date = input("Input YYYY-MM-DD: ")
90 dateStore = datetime.strptime(date, "%Y-%m-%d")
91 if (datetime.today() - dateStore).days >= 0: # added this so that users cant input dates in the past
92 print(
93 "The date you have entered is in the past and therefore can not be used. Please enter a "
94 "correct due date")
95 self.due_date()
96 elif (datetime.today() - dateStore).days <= 0:
97 self.dueDate1.append(dateStore)
98 break
99 except ValueError:
100 print("Please enter in the format YYYY-MM-DD")
101
102 def subject(self):
103 x = 1
104 while x == 1:
105 with open("english_words.txt") as word_file:
106 english_words = set(word.strip().lower() for word in word_file)
107 word = input("Input subject: ")
108 if word.lower() in english_words:
109 self.subject1.append(word)
110 x = 0
111
112 def teacher(self):
113 while True:
114 try:
115 teach = input("Input teacher: ")
116 self.teacher1.append(teach)
117 break
118 except ValueError:
119 print("Please input the teacher.")
120
121 def difficulty(self):
122 while True:
123 try:
124 diff = int(input("Input difficulty from 1 to 3: "))
125 if 3 >= diff >= 1:
126 self.difficulty1.append(diff)
127 break
128 except ValueError:
129 print("Please select a integer value from 1 to 3")
130
131 def note(self):
132 while True:
133 try:
134 note = input("Input a precis of the homework: ")
135 self.note1.append(note)
136 break
137 except ValueError:
138 print("Please input a valid precis.")
139
140
141def drop_Homework():
142 C.execute("DROP TABLE IF EXISTS Homework")
143
144
145def create_hTable():
146 C.execute("CREATE TABLE IF NOT EXISTS Homework\n"
147 " (\n"
148 " homeworkID integer primary key autoincrement,\n"
149 " userID integer,\n"
150 " subject varchar(255),\n"
151 " teacher varchar(255),\n"
152 " difficulty int,\n"
153 " duedate DATE,\n"
154 " precis varchar(255),\n"
155 " FOREIGN KEY (userID) REFERENCES Users(userID)\n"
156 " )")
157
158
159def drop_Users():
160 C.execute('DROP TABLE IF EXISTS Users')
161
162
163def create_uTable():
164 C.execute("CREATE TABLE IF NOT EXISTS Users\n"
165 " (\n"
166 " userID integer primary key autoincrement,\n"
167 " password varchar(255)\n"
168 " )")
169
170
171def CreateHomework():
172 homeworkOne = Homework()
173 homeworkOne.due_date()
174 homeworkOne.subject()
175 homeworkOne.teacher()
176 homeworkOne.difficulty()
177 homeworkOne.note()
178 C.execute("INSERT INTO Homework (userID,subject,teacher,difficulty,duedate,precis) VALUES(?,?,?,?,?,?)", (
179 ID,
180 homeworkOne.subject1[0],
181 homeworkOne.teacher1[0],
182 homeworkOne.difficulty1[0],
183 homeworkOne.dueDate1[0],
184 homeworkOne.note1[0]
185 ))
186 Database.commit() # Wasn't inserting without commit
187
188
189def ViewUsers():
190 Database.commit()
191 C.execute("SELECT * FROM Users")
192 print(C.fetchall())
193
194
195def ViewHomework(ID):
196 uResponse = 'S'
197 # input(
198 # "Type 'A' if you want to view all of your homework. Type 'S' if you would like to sort and view your homework: ")
199 Database.commit()
200 if uResponse == 'A':
201 C.execute("SELECT * FROM Homework WHERE userID=?", ID)
202 print(C.fetchall())
203 elif uResponse == 'S':
204 uResponse2 = 'T'
205 # input(
206 # Input the field that you would like to sort by:\n'T' for teacher\n'S' for subject\n'D' for difficulty\n'DD' for due date: '")
207 if uResponse2 == 'T':
208 uTeacher = str(input("Input the teachers name: "))
209 C.execute("SELECT * FROM Homework WHERE userID =? AND teacher =?", (ID, uTeacher))
210 sortT = C.fetchall()
211 if len(str(C.fetchall())) > 0:
212 print(sortT)
213 else:
214 print("There is no associated homework with this teacher")
215 ViewHomework(ID)
216 if uResponse2 == 'S':
217 uSubject = str(input("Input the subject you wish to view: "))
218 C.execute("SELECT * FROM Homework WHERE userID =? AND subject =?", (ID, uSubject))
219 sortS = C.fetchall()
220 if len(str(C.fetchall())) > 0:
221 print(sortS)
222 else:
223 print("There is no associated homework with this subject")
224 ViewHomework(ID)
225 if uResponse2 == 'D':
226 uDifficulty = int(input("Input the difficulty you wish to view: "))
227 C.execute("SELECT * FROM Homework WHERE userID =? AND subject =?", (ID, uSubject))
228 sortS = C.fetchall()
229 if len(str(C.fetchall())) > 0:
230 print(sortS)
231 else:
232 print("There is no associated homework with this subject")
233 ViewHomework(ID)
234 # if uResponse2 == 'DD':
235
236
237# programMenu(CreateUser, login)
238# login()
239# create_hTable()
240# create_uTable()
241# createUser()
242# CreateHomework()
243# drop_Homework()
244# drop_Users()
245ViewHomework(ID)
246# ViewUsers()