Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- import tkinter as tk
- from tkinter import messagebox
- from tkinter import simpledialog
- import os
- import json
- # Файлы для хранения данных
- TEXT_FILE = "contacts.txt" # Хранит ФИО, Код контакта, описание
- TYPE_FILE = "numbers.json" # Хранит Код контакта, номера телефонов, описание категории
- # Утилиты для работы с файлами
- def load_data():
- if not os.path.exists(TEXT_FILE):
- with open(TEXT_FILE, "w") as f:
- f.write("")
- if not os.path.exists(TYPE_FILE):
- with open(TYPE_FILE, "w") as f:
- json.dump({}, f)
- with open(TEXT_FILE, "r") as f:
- text_data = [line.strip().split(",") for line in f if line.strip()]
- with open(TYPE_FILE, "r") as f:
- type_data = json.load(f)
- return text_data, type_data
- def save_type_data(data):
- with open(TYPE_FILE, "w") as f:
- json.dump(data, f)
- # Статистика
- def show_statistics(text_data, type_data):
- num_contacts = len(text_data)
- num_numbers = sum(len(numbers["phones"]) for numbers in type_data.values())
- messagebox.showinfo("Статистика", f"Контактов: {num_contacts}\nНомеров телефонов: {num_numbers}")
- # Добавление контакта
- def add_contact():
- fio = simpledialog.askstring("Добавить контакт", "Введите ФИО:")
- if not fio:
- return
- code = simpledialog.askstring("Добавить контакт", "Введите код контакта:")
- if not code:
- return
- description = simpledialog.askstring("Добавить контакт", "Введите описание:")
- if not description:
- return
- with open(TEXT_FILE, "a") as f:
- f.write(f"{fio},{code},{description}\n")
- phone = simpledialog.askstring("Добавить номер", "Введите номер телефона:")
- if phone:
- category = simpledialog.askstring("Добавить номер", "Введите описание категории:")
- with open(TYPE_FILE, "r") as f:
- type_data = json.load(f)
- type_data[code] = {"phones": [phone], "category": category}
- save_type_data(type_data)
- messagebox.showinfo("Успех", "Контакт успешно добавлен!")
- # Добавление номера
- def add_number():
- code = simpledialog.askstring("Добавить номер", "Введите код контакта:")
- if not code:
- return
- phone = simpledialog.askstring("Добавить номер", "Введите номер телефона:")
- if not phone:
- return
- category = simpledialog.askstring("Добавить номер", "Введите описание категории:")
- with open(TYPE_FILE, "r") as f:
- type_data = json.load(f)
- if code in type_data:
- type_data[code]["phones"].append(phone)
- save_type_data(type_data)
- messagebox.showinfo("Успех", "Номер успешно добавлен!")
- else:
- messagebox.showerror("Ошибка", "Контакт с таким кодом не найден!")
- # Поиск номеров по ФИО
- def search_numbers():
- search_type = simpledialog.askstring("Поиск номеров", "Введите тип поиска (ФИО/Имя/Фамилия):")
- if not search_type:
- return
- search_value = simpledialog.askstring("Поиск номеров", "Введите значение для поиска:")
- if not search_value:
- return
- with open(TEXT_FILE, "r") as f:
- text_data = [line.strip().split(",") for line in f if line.strip()]
- results = []
- for fio, code, _ in text_data:
- if (search_type.lower() == "фио" and search_value.lower() in fio.lower()) or \
- (search_type.lower() in ["имя", "фамилия"] and search_value.lower() in fio.split()[0].lower()):
- with open(TYPE_FILE, "r") as f:
- type_data = json.load(f)
- if code in type_data:
- results.append(f"Контакт: {fio}, Номера: {', '.join(type_data[code]['phones'])}")
- if results:
- messagebox.showinfo("Результаты поиска", "\n".join(results))
- else:
- messagebox.showinfo("Результаты поиска", "Контактов не найдено!")
- # Редактирование номера
- def edit_number():
- code = simpledialog.askstring("Редактировать номер", "Введите код контакта:")
- if not code:
- return
- phone = simpledialog.askstring("Редактировать номер", "Введите номер телефона для редактирования:")
- if not phone:
- return
- with open(TYPE_FILE, "r") as f:
- type_data = json.load(f)
- if code in type_data and phone in type_data[code]["phones"]:
- new_phone = simpledialog.askstring("Редактировать номер", "Введите новый номер:")
- if new_phone:
- index = type_data[code]["phones"].index(phone)
- type_data[code]["phones"][index] = new_phone
- save_type_data(type_data)
- messagebox.showinfo("Успех", "Номер успешно отредактирован!")
- else:
- messagebox.showerror("Ошибка", "Новый номер не введен!")
- else:
- messagebox.showerror("Ошибка", "Номер не найден!")
- # Интерфейс программы
- load_data()
- root = tk.Tk()
- root.title("Телефонный справочник")
- tk.Button(root, text="Показать статистику", command=lambda: show_statistics(*load_data())).pack(pady=5)
- tk.Button(root, text="Добавить контакт", command=add_contact).pack(pady=5)
- tk.Button(root, text="Добавить номер", command=add_number).pack(pady=5)
- tk.Button(root, text="Найти номера", command=search_numbers).pack(pady=5)
- tk.Button(root, text="Редактировать номер", command=edit_number).pack(pady=5)
- root.mainloop()
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement