133 / 129 / 20
Регистрация: 05.08.2021
Сообщений: 600

А я вот тут базу данных сварганил без самой "базы данных", т. е. без SQL

16.08.2025, 15:56. Показов 4578. Ответов 21
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Конечно понимаю что должен быть бит за это тапком ибо на большом объеме данных работать будет с чудовищной медленностью, но тем не менее...
Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
from tkinter import *
from itertools import groupby
 
 
try:
    class Person:
        instances = []
        data_from_entries = ''
        search = ''
        save = ''
 
        def __init__(self, name, surname, sex, age, number, location):
            self.name = name
            self.surname = surname
            self.sex = sex
            self.age = age
            self.number = number
            self.location = location
            self.instances.append(self)
 
        @staticmethod
        def create_file():
            file = open('objects.txt', 'w')
            file.close()
 
        @staticmethod
        def create_removed():
            file = open('removed.txt','w')
            file.close()
 
        @staticmethod
        def output(a, b):
            inp = Person.search
            a.config(text=Person.search)
            test = False
            pass_name = set()
            persons = ''
            for i in Person.instances:
                if i.surname.strip() == inp.strip():
                    test = True
                    if i.name not in pass_name:
                        persons += f'имя:         {i.name}\nпол:         {i.sex}\nвозраст:  {i.age} \nномер:    {i.number} \nадрес:      {i.location}\n_____________________________________________________\n'
                pass_name.add(i.name)
            if test:
                b.config(text=persons)
            else:
                b.config(text='Фамилия не найдена')
 
        @staticmethod
        def append_obj_to_file():
            with open('objects.txt', 'a+', encoding='utf-8') as file:
                data = Person.data_from_entries
                # print(data)
                s = file.read()
                if data.count('не указано') < 6:
                    file.write(data + '|')
                    file.seek(0)
 
        @staticmethod
        def test_file_for_valid_format(n):
            def test_string_has_right_format(x):
                return not bool(len(x.split('|')[:-1]) % 6) and '|' in x
 
            with open(n, encoding='utf-8') as file:
                s = file.read()
                if s:
                    if s[-1] != '|':
                        s += '|'
                    if test_string_has_right_format(s):
                        return s
                    if s[-1] != '|':
                        s += '|'
                    new_n = []
                    for i in range(len(s) - 1):
                        if s[i] != '|' or (s[i] == '|' and s[i - 1] != '|'):
                            new_n += s[i]
                    new_s = ''.join(new_n)
                    if new_s[-1] != '|':
                        new_s += s[-1]
                    if new_s[-1] != '|':
                        new_s += '|'
                    s = new_s
                    n = s.split('|')
                    r = len(n[:-1])
                    if not r % 6 == 0:
                        i = r
                        while i % 6:
                            i += 1
                        res = i - r
                        for i in range(res):
                            s += 'не указано|'
                else:
                    Person.save = ''
                    # print('file is empty')
                return s
 
        @staticmethod
        def change_file_for_valid(x):
            with open(x, 'w', encoding='utf-8') as file:
                file.write(Person.save)
 
        @staticmethod
        def read_db():
            Person.save = Person.test_file_for_valid_format('objects.txt')
            Person.change_file_for_valid('objects.txt')
            with open('objects.txt', encoding='utf-8') as file:
                s = file.read().strip().split('|')
                res = []
                for i in range(0, len(s) - 5, 6):
                    res += [s[i: i + 6]]
                return res
 
        @staticmethod
        def create_objects():
            Person.instances.clear()
            s = Person.read_db()
            for i in s:
                obj = Person(*i)
 
        @staticmethod
        def draw_gui():
            root = Tk()
            root.geometry('600x650+200+100')
            root.title('Alexander`s Notebook 1.1')
            root.iconbitmap('favicon.ico')
            root.configure(bg='beige')
 
            def change_spaces(s):
                s = s.replace('|', '/')
                return s
 
            def test_button():
                result = [e1.get(), e2.get(), e3.get(), e4.get(), e5.get(), e6.get()]
                result2 = list(map(lambda x: 'не указано' if x == '' else x, result))
                for i in range(len(result2)):
                    result2[i] = change_spaces(result2[i])
                Person.data_from_entries = '|'.join(result2)
                e1.delete(0, END)
                e2.delete(0, END)
                e3.delete(0, END)
                e4.delete(0, END)
                e5.delete(0, END)
                e6.delete(0, END)
 
                Person.append_obj_to_file()
                Person.create_objects()
 
            def search_name():
                try:
                    label7.config(foreground='green', justify='center', font=('verdana', 20))
                    try:
                        Person.create_objects()
                        Person.search = e7.get()
                        Person.output(label7, label8)
                        e7.delete(0, END)
                    except IndexError:
                        label7.config(text='ошибка ввода')
                        with open('objects.txt', 'w', encoding='utf-8') as file:
                            file.write(Person.save)
                    except FileNotFoundError:
                        label7.config(text='Для создания файла с данными \nвведите первый контакт')
                        Person.create_file()
                except:
                    label7.config(text='Что-то пошло не так \nПерезапустите программу')
                    label8.config(text='')
 
            def to_del_contact():
                x = e9.get()
                with open('objects.txt', encoding='utf-8') as file:
                    s = file.read()
                if x in s:
                    n = s.split('|')
                    indexes = []
                    deleted = []
                    for i, f in enumerate(n):
                        if f == x:
                            indexes += [i]
                    for i in indexes:
                        if n[i - 1] == e8.get():
                            deleted = n[i - 1: i + 5]
                            break
                    to_removed = '|'.join(deleted) + '|'
                    del n[i - 1:i + 5]
                    s = '|'.join(n)
                    with open('removed.txt', 'a', encoding='utf-8') as file:
                        file.write(to_removed)
                    with open('objects.txt', 'w', encoding='utf-8') as file:
                        file.write(s)
                e8.delete(0, END)
                e9.delete(0, END)
 
            def show_contacts():
                try:
                    # сортировка по фамилиям
                    with open('objects.txt', encoding='utf-8') as file:
                        s = file.read()
                    ns = s.split('|')[:-1]
                    res = []
                    for i in range(0, len(ns) - 5, 6):
                        res += [ns[i: i + 6]]
                    res.sort(key=lambda x: x[1])
                    # сортировка однофамильцев по именам
                    result = []
 
                    def grouper(item):
                        return item[1]
 
                    for key, group_items in groupby(res, key=grouper):
                        b = list(group_items)
                        b.sort(key=lambda x: x[0])
                        b = sum(b, [])
                        result.append(b)
                    result = sum(result, [])
                    s = '|'.join(result) + '|'
                    with open('objects.txt', 'w', encoding='utf-8') as file:
                        file.write(s)
                    # сортировка по фамилиям
                    Person.create_objects()
                    label7.config(foreground='blue', justify='left')
                    contacts = ''
                    if not Person.instances:
                        label7.config(text='База контактов пуста')
                    else:
                        for i in Person.instances:
                            contacts += f'{i.surname} {i.name}\n'
                        label7.config(text=contacts, font=('verdana', 10))
                        label8.config(text='')
                except:
                    label7.config(text='')
                    label8.config(text='Что-то пошло не так \nПерезапустите программу')
 
            def restore_contacts():
                Person.save = Person.test_file_for_valid_format('removed.txt')
                Person.change_file_for_valid('removed.txt')
                s = ''
                with open('removed.txt', encoding='utf-8') as file1:
                    s = file1.read()
                # print(s)
                with open('objects.txt', 'a', encoding='utf-8') as file2:
                    file2.write(s)
                with open('removed.txt', 'w', encoding='utf-8') as file3:
                    file3.write('')
 
            label1 = Label(text='Имя', bg='beige', font=('verdana', 10))
            e1 = Entry(width=40)
            label2 = Label(text='Фамилия', bg='beige', font=('verdana', 10))
            e2 = Entry(width=40)
            label3 = Label(text='Пол', bg='beige', font=('verdana', 10))
            e3 = Entry(width=40)
            label4 = Label(text='Возраст', bg='beige', font=('verdana', 10))
            e4 = Entry(width=40)
            label5 = Label(text='Номер', bg='beige', font=('verdana', 10))
            e5 = Entry(width=40)
            label6 = Label(text='Адрес', bg='beige', font=('verdana', 10))
            e6 = Entry(width=40)
            button = Button(text='Добавить контакт', foreground='red', command=test_button)
            e7 = Entry(width=40)
            button2 = Button(text='Искомая фамилия', foreground='green', command=search_name)
            label7 = Label(text='Результат поиска', foreground='red', bg='beige', font=('verdana', 10))
            label8 = Label(justify=LEFT, bg='beige')
            label9 = Label(text="Удаление контактов", bg='beige', font=('verdana', 10))
            e8 = Entry(width=40)
            button3 = Button(text='Удалить контакт', command=to_del_contact)
            label10 = Label(text="Имя", bg='beige', font=('verdana', 10))
            label11 = Label(text="Фамилия", bg='beige', font=('verdana', 10))
            e9 = Entry(width=40)
            button5 = Button(text='Показать контакты', command=show_contacts)
            button4 = Button(text='Восстановить', command=restore_contacts)
 
            label1.place(x=120, y=10)
            e1.place(x=20, y=30)
            label2.place(x=105, y=50)
            e2.place(x=20, y=70)
            label3.place(x=120, y=90)
            e3.place(x=20, y=110)
            label4.place(x=110, y=130)
            e4.place(x=20, y=150)
            label5.place(x=115, y=170)
            e5.place(x=20, y=190)
            label6.place(x=115, y=210)
            e6.place(x=20, y=230)
            button.place(x=85, y=260)
            e7.place(x=20, y=300)
            button2.place(x=85, y=330)
            label7.place(x=320, y=10)
            label8.place(x=300, y=50)
            label9.place(x=85, y=360)
            label10.place(x=120, y=380)
            e8.place(x=20, y=405)
            label11.place(x=105, y=425)
            e9.place(x=20, y=445)
            button3.place(x=85, y=475)
            button4.place(x=90, y=510)
            button5.place(x=78, y=565)
 
            e1.focus()
 
            root.mainloop()
 
except FileNotFoundError:
    Person.create_file()
    Person.create_removed()
finally:
    Person.draw_gui()
Миниатюры
А я вот тут базу данных сварганил без самой "базы данных", т. е. без SQL  
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
16.08.2025, 15:56
Ответы с готовыми решениями:

Вот такая вот задача
Здравствуйте, помогите решить, пожалуйста Охранниками магазина работают Андреев, Иванов, Петров,...

Что означают все эти данные вот в этом коде PITHON и где можно найти описание всех этих данных в коде
#!/usr/bin/python # Quick and dirty demonstration of CVE-2014-0160 by Jared Stafford...

Тут по теме выше про "Тест" написал функцию и вот хочу понять как МОДЕРНИЗИРОВАТЬ её, обернуть в @декоратор?
Вот он # coding: utf8 __author__ = 'yesok' def m(): print(&quot;End!&quot;) def main():

21
17 / 18 / 3
Регистрация: 09.10.2012
Сообщений: 55
Записей в блоге: 1
27.04.2026, 17:08
Студворк — интернет-сервис помощи студентам
Цитата Сообщение от Zloyalex100 Посмотреть сообщение
Вообще-то краснею за то что поле "пол" поименовал на американский лад
это пофиг, а вот за то что смешал гуй и условную бд в один класс точно красней)
0
133 / 129 / 20
Регистрация: 05.08.2021
Сообщений: 600
27.04.2026, 18:00  [ТС]
Цитата Сообщение от pyirrlicht Посмотреть сообщение
вот за то что смешал гуй и условную бд в один класс точно красней
Ну, да... Про этот косяк знаю Но в то время пытался реализовать задачу хоть каким-нибудь работоспособным способом
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
27.04.2026, 18:00

Зачем python нужен? Работу всё-равно не найти: вот некоторый обзор требований
Ищем Python программиста в связи с расширением штата разработчиков. Проект связан с автоматизацией...

Разогнать вот этот scanner tulpar да в Google был
Всем привет не могу разогнать вот этот scanner tulpar да в Google был тыц :) не помогло мне это...

как считать вот такое 10/3
как считать такую строку и разбить на числа? 10/3 a=input() a=10 a=3 ...

хочу что бы при нажатие на кнопку фотография обрезалась по определенно заданному формату,вот мой код
from tkinter import * from PIL import ImageTk, Image root = Tk ( ) root.geometry ('450x330') ...

подскажите пожалуйста. Вот код и мне надо сделать так ,чтобы добавление слова осуществлялось только на русском,а перевод
def start(): print('Выберите пункт меню, введя число: ') print('1 – Добавить новое...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
22
Ответ Создать тему
Опции темы

Новые блоги и статьи
Сезонность и суточность закисления почв
anaschu 04.07.2026
200 часов это все равно моловато. Есть ситуации, но нестандартные, когда смена происходит за 5 лет. Но обычно это 50 лет и более. Наверное, закисление почвы происходит сезонно в средней. . .
В чем ценность человеческого опыта в глобальном смысле?
kumehtar 03.07.2026
Возможно, ценность человека не в том, что он однажды достигает мудрости, а в том, что он становится носителем карты пути. Он знает не только истину, но и последовательность внутренних изменений,. . .
интеграция AnyLogic с самописным REST API и переход на Odoo
anaschu 03.07.2026
Успешная интеграция AnyLogic с самописным REST API и переход на промышленную Odoo WMS Сегодня проделал огромный путь от простой симуляции физических процессов до построения полноценной. . .
Поиск всех путей на ориентированном графе. Linux
dcc0 02.07.2026
Переработка старого кода из моей статьи. Через несколько переработок от PHP кода к C89 (надеюсь, 89). Но довольно запутанно получилось. Код для Linux. Но если убрать time и то, что с ним. . .
Сам себя обучал rest api
anaschu 02.07.2026
Педагогический лайфхак: Почему чистый REST API для ученика намного круче, чем готовые библиотеки Когда мы отказались от капризного JAR-файла AnyLogic и переписали код на стандартный HttpClient,. . .
rest api anylogic - выполнение модели на своём русском сайте
anaschu 02.07.2026
Как подружиться с AnyLogic Cloud API, победить провайдеров и развернуться Java-бэкенд в Docker на бесплатном хостинге: Двухдневный лог борьбы Всем привет! Хочу поделиться свежим (и довольно. . .
Где деньги лежат
kumehtar 02.07.2026
Это - японская подводная лодка I-52 (тип C2, кодовое имя Momi) вышла из Японии в марте 1944 года с миссией в оккупированную немцами Францию (Лорьян). Это была одна из «Янаги»-миссий по обмену. . .
Krabik для WoW 3.3.5a, многоязычный
AmbA 02.07.2026
Допилил бота, думаю что окончательно. Изменения: - добавлена многоязычность - добавлено снятие скриншотов - добавлено поддержание бафов хождения по воде (для жреца, дк и шамана) - и так, по. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru