Advertisement
Hasli4

GIBDD

Jan 3rd, 2025
70
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 6.24 KB | None | 0 0
  1. import tkinter as tk
  2. from tkinter import messagebox
  3. from tkinter import simpledialog
  4. import os
  5. import json
  6.  
  7. # Файлы для хранения данных
  8. TEXT_FILE = "contacts.txt"  # Хранит ФИО, Код контакта, описание
  9. TYPE_FILE = "numbers.json"  # Хранит Код контакта, номера телефонов, описание категории
  10.  
  11. # Утилиты для работы с файлами
  12. def load_data():
  13.     if not os.path.exists(TEXT_FILE):
  14.         with open(TEXT_FILE, "w") as f:
  15.             f.write("")
  16.  
  17.     if not os.path.exists(TYPE_FILE):
  18.         with open(TYPE_FILE, "w") as f:
  19.             json.dump({}, f)
  20.  
  21.     with open(TEXT_FILE, "r") as f:
  22.         text_data = [line.strip().split(",") for line in f if line.strip()]
  23.  
  24.     with open(TYPE_FILE, "r") as f:
  25.         type_data = json.load(f)
  26.  
  27.     return text_data, type_data
  28.  
  29. def save_type_data(data):
  30.     with open(TYPE_FILE, "w") as f:
  31.         json.dump(data, f)
  32.  
  33. # Статистика
  34. def show_statistics(text_data, type_data):
  35.     num_contacts = len(text_data)
  36.     num_numbers = sum(len(numbers["phones"]) for numbers in type_data.values())
  37.     messagebox.showinfo("Статистика", f"Контактов: {num_contacts}\nНомеров телефонов: {num_numbers}")
  38.  
  39. # Добавление контакта
  40. def add_contact():
  41.     fio = simpledialog.askstring("Добавить контакт", "Введите ФИО:")
  42.     if not fio:
  43.         return
  44.  
  45.     code = simpledialog.askstring("Добавить контакт", "Введите код контакта:")
  46.     if not code:
  47.         return
  48.  
  49.     description = simpledialog.askstring("Добавить контакт", "Введите описание:")
  50.     if not description:
  51.         return
  52.  
  53.     with open(TEXT_FILE, "a") as f:
  54.         f.write(f"{fio},{code},{description}\n")
  55.  
  56.     phone = simpledialog.askstring("Добавить номер", "Введите номер телефона:")
  57.     if phone:
  58.         category = simpledialog.askstring("Добавить номер", "Введите описание категории:")
  59.         with open(TYPE_FILE, "r") as f:
  60.             type_data = json.load(f)
  61.  
  62.         type_data[code] = {"phones": [phone], "category": category}
  63.         save_type_data(type_data)
  64.  
  65.     messagebox.showinfo("Успех", "Контакт успешно добавлен!")
  66.  
  67. # Добавление номера
  68. def add_number():
  69.     code = simpledialog.askstring("Добавить номер", "Введите код контакта:")
  70.     if not code:
  71.         return
  72.  
  73.     phone = simpledialog.askstring("Добавить номер", "Введите номер телефона:")
  74.     if not phone:
  75.         return
  76.  
  77.     category = simpledialog.askstring("Добавить номер", "Введите описание категории:")
  78.  
  79.     with open(TYPE_FILE, "r") as f:
  80.         type_data = json.load(f)
  81.  
  82.     if code in type_data:
  83.         type_data[code]["phones"].append(phone)
  84.         save_type_data(type_data)
  85.         messagebox.showinfo("Успех", "Номер успешно добавлен!")
  86.     else:
  87.         messagebox.showerror("Ошибка", "Контакт с таким кодом не найден!")
  88.  
  89. # Поиск номеров по ФИО
  90. def search_numbers():
  91.     search_type = simpledialog.askstring("Поиск номеров", "Введите тип поиска (ФИО/Имя/Фамилия):")
  92.     if not search_type:
  93.         return
  94.  
  95.     search_value = simpledialog.askstring("Поиск номеров", "Введите значение для поиска:")
  96.     if not search_value:
  97.         return
  98.  
  99.     with open(TEXT_FILE, "r") as f:
  100.         text_data = [line.strip().split(",") for line in f if line.strip()]
  101.  
  102.     results = []
  103.     for fio, code, _ in text_data:
  104.         if (search_type.lower() == "фио" and search_value.lower() in fio.lower()) or \
  105.            (search_type.lower() in ["имя", "фамилия"] and search_value.lower() in fio.split()[0].lower()):
  106.             with open(TYPE_FILE, "r") as f:
  107.                 type_data = json.load(f)
  108.  
  109.             if code in type_data:
  110.                 results.append(f"Контакт: {fio}, Номера: {', '.join(type_data[code]['phones'])}")
  111.  
  112.     if results:
  113.         messagebox.showinfo("Результаты поиска", "\n".join(results))
  114.     else:
  115.         messagebox.showinfo("Результаты поиска", "Контактов не найдено!")
  116.  
  117. # Редактирование номера
  118. def edit_number():
  119.     code = simpledialog.askstring("Редактировать номер", "Введите код контакта:")
  120.     if not code:
  121.         return
  122.  
  123.     phone = simpledialog.askstring("Редактировать номер", "Введите номер телефона для редактирования:")
  124.     if not phone:
  125.         return
  126.  
  127.     with open(TYPE_FILE, "r") as f:
  128.         type_data = json.load(f)
  129.  
  130.     if code in type_data and phone in type_data[code]["phones"]:
  131.         new_phone = simpledialog.askstring("Редактировать номер", "Введите новый номер:")
  132.         if new_phone:
  133.             index = type_data[code]["phones"].index(phone)
  134.             type_data[code]["phones"][index] = new_phone
  135.             save_type_data(type_data)
  136.             messagebox.showinfo("Успех", "Номер успешно отредактирован!")
  137.         else:
  138.             messagebox.showerror("Ошибка", "Новый номер не введен!")
  139.     else:
  140.         messagebox.showerror("Ошибка", "Номер не найден!")
  141.  
  142. # Интерфейс программы
  143. load_data()
  144. root = tk.Tk()
  145. root.title("Телефонный справочник")
  146.  
  147. tk.Button(root, text="Показать статистику", command=lambda: show_statistics(*load_data())).pack(pady=5)
  148. tk.Button(root, text="Добавить контакт", command=add_contact).pack(pady=5)
  149. tk.Button(root, text="Добавить номер", command=add_number).pack(pady=5)
  150. tk.Button(root, text="Найти номера", command=search_numbers).pack(pady=5)
  151. tk.Button(root, text="Редактировать номер", command=edit_number).pack(pady=5)
  152.  
  153. root.mainloop()
  154.  
  155.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement