· 5 years ago · Jul 07, 2020, 11:22 AM
1#!/usr/bin/env python3
2# -*- coding: utf-8 -*-
3
4from sqlite3 import connect
5from re import pattern, fullmatch
6from hashlib import md5
7from smtplib import SMTP_SSL
8
9con = connect('user_information.db')
10cur = con.cursor()
11
12sql = '''
13CREATE TABLE IF NOT EXISTS user (
14 last_name TEXT NOT NULL,
15 name TEXT NOT NULL,
16 patronymic TEXT NOT NULL,
17 phone_number TEXT NOT NULL,
18 e_mail TEXT NOT NULL,
19 login TEXT NOT NULL PRIMARY KEY,
20 password TEXT NOT NULL
21)
22'''
23cur.execute(sql)
24
25def last_name_entry():
26 last_name = input('Фамилия: ')
27 while not(last_name == last_name.capitalize()):
28 print('Фамилия должна быть записана с большой буквы')
29 last_name = input('Фамилия: ')
30 return last_name
31
32def name_entry():
33 name = input('Имя: ')
34 while not(name == name.capitalize()):
35 print('Имя должно быть записано с большой буквы')
36 name = input('Имя: ')
37 return name
38
39def patronymic_entry():
40 patronymic = input('Отчество: ')
41 while not(patronymic == patronymic.capitalize()):
42 print('Отчество должно быть записано с большой буквы')
43 patronymic = input('Отчество: ')
44 return patronymic
45
46def phone_number_entry():
47 pattern = compile('^\+7-\(\d{3}\)-\d{3}-\d{2}-\d{2}$')
48 phone_number = input('Номер телефона: ')
49 while not(pattern.fullmatch(phone_number)):
50 print('Номер телефона должен быть сохранен в форме +7-(222)-222-22-22')
51 phone_number = input('Номер телефона: ')
52 return phone_number
53
54def e_mail_entry():
55 pattern = compile('|^([a-z0-9_-]+\.)*[a-z0-9_-]+@[a-z0-9_-]+(\.[a-z0-9_-]+)*\.[a-z]{2,6}$|i')
56 e_mail = input('E-mail: ')
57 while not(pattern.fullmatch(e_mail)):
58 e_mail = input('E-mail: ')
59 return e_mail
60
61def login_entry():
62 return input('Логин: ')
63
64def password_entry():
65 pattern = compile('^((?=.*[A-Z])(?=.*[a-z])(?=.*\d)(?=.*[@#$%]).{8,})$')
66 password = input('Пароль: ')
67 while not(pattern.fullmatch(password)):
68 print('Пароль должен состоять из как минимум 8 символов, содержать как минимум одну заглавную букву, одну строчную, одну цифру, один специальный символ')
69 password = input('Пароль: ')
70 hash_object = md5(password.encode())
71 return hash_object.hexdigest()
72
73while True:
74 print('''
75 Выберите вариант
76
77 1. посмотреть список пользователей
78 2. добавить пользователя
79 3. удалить пользователя
80 4. изменить пользователя
81 5. сохранить изменения в файл
82 6. отправить сообщение на e-mail пользователя
83 7. отсортировать по выбранному полю
84 8. выход
85 ''')
86 variant = input('>>> ')
87 if variant == '1':
88 print('Просмотр списка пользователей...')
89 cur.execute('''
90 SELECT *
91 FROM user
92 ''')
93 rows = cur.fetchall()
94 for row in rows:
95 print('Фамилия:', row[0])
96 print('Имя:', row[1])
97 print('Отчество:', row[2])
98 print('Номер телефона:', row[3])
99 print('E-mail:', row[4])
100 print('Логин:', row[5])
101 print('Пароль:', row[6], end='\n\n')
102 elif variant == '2':
103 print('Добавление пользователя...')
104 last_name = last_name_entry()
105 name = name_entry()
106 patronymic = patronymic_entry()
107 phone_number = phone_number_entry()
108 e_mail = e_mail_entry()
109 login = login_entry()
110 password = password_entry()
111 elif variant == '3':
112 print('Удаление пользователя...')
113 while True:
114 print('''
115 Выберите вариант
116
117 1. по фамилии и имени
118 2. по логину
119 3. по номеру телефона
120 4. выход
121 ''')
122 variant = input('>>> ')
123 if variant == '1':
124 sql = '''
125 SELECT *
126 FROM user
127 WHERE last_name=? AND name=?
128 '''
129 last_name = last_name_entry()
130 name = name_entry()
131 cursor.execute(sql, (last_name, name))
132 while len(cursor.fetchall()) == 0:
133 print('Пользователь не найден')
134 last_name = last_name_entry()
135 name = name_entry()
136 cursor.execute(sql, (last_name, name))
137 sql = '''
138 DELETE
139 FROM user
140 WHERE last_name=? AND name=?
141 '''
142 cursor.execute(sql, (last_name, name))
143 elif variant == '2':
144 sql = '''
145 SELECT *
146 FROM user
147 WHERE login=?
148 '''
149 login = login_name_entry()
150 cursor.execute(sql, (login,))
151 while len(cursor.fetchall()) == 0:
152 print('Пользователь не найден')
153 login = login_name_entry()
154 cursor.execute(sql, (login,))
155 sql = '''
156 DELETE
157 FROM user
158 WHERE login=?
159 '''
160 cursor.execute(sql, (login,))
161 elif variant == '3':
162 sql = '''
163 SELECT *
164 FROM user
165 WHERE phone_number=?
166 '''
167 phone_number = phone_number_name_entry()
168 cursor.execute(sql, (phone_number,))
169 while len(cursor.fetchall()) == 0:
170 print('Пользователь не найден')
171 phone_number = phone_number_name_entry()
172 cursor.execute(sql, (phone_number,))
173 sql = '''
174 DELETE
175 FROM user
176 WHERE phone_number=?
177 '''
178 cursor.execute(sql, (phone_number,))
179 elif variant == '4':
180 break
181 else:
182 print('Вы выбрали неверный вариант')
183 elif variant == '4':
184 pass
185 elif variant == '5':
186 print('Сохранение изменений в файле...')
187 con.commit()
188 elif variant == '6':
189 server = SMTP_SSL('smtp.yandex.ru', 465)
190 server.login('kate.grechka@yandex.ru', 'skripina2017%')
191 text = '\n' + input('Сообщение: ')
192 server.sendmail('kate.grechka@yandex.ru', toaddr, text)
193 elif variant == '7':
194 pass
195 elif variant == '8':
196 print('Выход...')
197 cur.close()
198 con.close()
199 else:
200 print('Вы выбрали неверный вариант')