Archives
Trending
Support
Login
clear text
XML
Django
JavaScript
MATLAB
C
C++
C#
Python
SQL
Shell
Bash
Markdown
YAML
JSON
HTML
CSS
PHP
Java
Ruby
Go
Rust
Swift
Kotlin
Arduino
TypeScript
Perl
Autohotkey
Lua
SQF
R
Scala
Haskell
Groovy
Dart
Clojure
VB.NET
Objective-C
PowerShell
Bash
CoffeeScript
Verilog
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()
Mark as private (unlisted)
for 30 minutes
for 6 hours
for 1 day
for 1 week
for 1 month
for 1 year
everlasting (like CCCP)