|
0 / 0 / 0
Регистрация: 22.11.2019
Сообщений: 7
|
|
Телефонный справочник22.11.2019, 15:49. Показов 40942. Ответов 27
Метки нет (Все метки)
Помогите, пожалуйста, написать программу. Я запуталась в ее написании(
Требования к программе: 1) При запуске программы (скрипта), она должна считывать содержимое телефонного справочника из файла, хранящего на жестком диске. Файл может как содержать записи (в корректном виде), так и быть пустым. 2) При завершении работы программы и/или при завершении выполнении команды, изменяющей справочник, все изменения в справочнике должны быть сохранены в файл (тот, из которого справочник считывается в начале). 3) Минимальный набор поддерживаемых команд для работы со справочником: Просмотр всех записей справочника: вывод всего справочника так, чтобы было читабельно. Поиск по справочнику. Поиск может осуществляться по любому из полей, а также по нескольким полям одновременно (например, найти запись с именем «А» и фамилией «Б»). В результате поиска должны быть выведены найденные записи со значением полей. Добавление новой записи. NB: Обязательна проверка на то, что такая запись не содержится в справочнике (по уникальному идентификатору). Если такая запись уже содержится в справочнике, сообщить об этом пользователю и предложить: изменить существующую запись, изменить (Имя, Фамилия) новой записи или вернуться к выбору команды. NB: При вводе Имени и Фамилии обязательна автозамена первой буквы на заглавную. Удаление записи из справочника по Имени и Фамилии Изменение любого поля в определенной записи справочника Вывод возраста человека (записи) по Имени и Фамилии 4) Если пользователь неправильно ввел команду, программа должна проинформировать его о некорректном вводе и вернуться в состояние ожидания ввода команды. 5) Ни одна операция не должна заканчиваться ошибкой или вылетом программы при поступлении любых входных данных – либо операция должна быть корректно обработана, либо должно быть выведено сообщение об ошибке (желательно информативное), и программа возвращена в состояние ожидания ввода.
0
|
|
| 22.11.2019, 15:49 | |
|
Ответы с готовыми решениями:
27
Телефонный справочник Телефонный справочник Телефонный справочник |
|
955 / 341 / 114
Регистрация: 04.08.2018
Сообщений: 2,533
|
|
| 22.11.2019, 16:12 | |
|
Ekaterina56, хм, интересное задание, можете начинать.
1
|
|
|
955 / 341 / 114
Регистрация: 04.08.2018
Сообщений: 2,533
|
|
| 22.11.2019, 16:46 | |
|
Welemir1, она имела ввиду, что запуталась пока писала сюда.
0
|
|
|
5222 / 3469 / 1173
Регистрация: 21.03.2016
Сообщений: 8,295
|
|
| 22.11.2019, 18:43 | |
|
Ekaterina56, это в стиле ооп задание или как? как хранить данные как текст или в словарях, базах данных, json, что-то другое? а файл точно существует или его нужно создать при его отсутствии? вообщем без ваших начальных попыток по которым будет хоть что то понятно вы больше получите вопросов чем ответов
0
|
|
| 22.11.2019, 18:59 | |
|
Ekaterina56, Хранить информацию в текстовом файле в виде таблицы и осуществлять все те действия, которые здесь описаны, которые осуществляются в полноценных базах данных, это не серьезно. Хранить нужно в базе данных, или создаваемой питоном с помощью модуля shelve или в сторонней базе данных. И именно используя их осуществлять все необходимые действия с данными. А выводить на экран или на печать в виде текстовой таблицы.
0
|
|
|
0 / 0 / 0
Регистрация: 22.11.2019
Сообщений: 7
|
|
| 23.11.2019, 07:55 [ТС] | |
|
Я написала эти операции по отдельности. Возник вопрос как объединить их так, чтобы пользователю при запуске программы выходило меню и предлагалось выбрать одну из представленных операций (по номерам). При выборе номера запускался процесс выполнения операции.
Файл уже существует, но изначально в нем нет записей. Ещё вопрос открытие и чтение файла написать в начале скрипта или расписывать в каждой операции, ведь где-то происходят изменения в файле, а где-то просто его чтение? А если не создавая базу данных, оставить хранение в файле? Добавлено через 4 минуты Я и не прошу выполнять весь процесс за меня. Просто подсказать в каком направлении двигаться.
0
|
|
|
5222 / 3469 / 1173
Регистрация: 21.03.2016
Сообщений: 8,295
|
||||||
| 23.11.2019, 08:39 | ||||||
Сообщение было отмечено Ekaterina56 как решение
Решение
ну примерно так. вы не указали в каком формате хранятся данные поэтому в примере используется чтение построчно из файла.
0
|
||||||
| 23.11.2019, 10:29 | ||
|
Semen-Semenich, Я уважаю Вашу работоспособность при разработке громоздких кодов. Но замечу, что наиболее трудоемкую часть ( из за которой я говорил, что нужно использовать базу данных) Вы не реализовали. Это задача указанная в условии
Вы выложили только часть кода? Потому, что я не вижу где вносятся изменения в поля записи и где происходит запись (сохранение) этих изменений в файл. Может я что то недопонимаю? Добавлено через 30 минут И еще, основное достоинство баз данных, что при работе с ней база данных не перезаписывается целиком, а перезаписывается только та запись, в которую вносятся изменения. Я не представляю, как можно в текстовом файле изменять одну запись не трогая другие. Ведь в текстовом файле, как я понимаю для удаления одной записи или добавлении ее в середину повлечет перезапись всего, что располагается ниже ее. Интересно, как Вы будете заменять внутри таблицы запись, которую Вы изменили. В базах данных для этого существуют встроенные средства. Ведь Вы должны отслеживать, что бы размеры полей при вводе новой записи или при изменении существующей не превышали определенной длины. Все это придется контролировать. В случае использования формы, эту проблему можно было бы снять. Но я убедился, что использование формы значительно увеличивает размеры кода. В общем мне кажется, что проблем полно, за которые Вы еще даже не брались. В моем понимании текстовый файл в виде таблицы можно использовать только для нескольких записей, скажем с десяток, но не для большого количества записей. На этот случай были придуманы и разработаны базы данных. Добавлено через 10 минут Может конечно это просто задание данное преподавателем в процессе обучения. Тогда еще можно понять использование текстового файла. Потому что для практического применения, там где используются сотни записей, такой подход не эффективен. С другой стороны, для учебного процесса это задание уж очень громоздко.
0
|
||
|
5222 / 3469 / 1173
Регистрация: 21.03.2016
Сообщений: 8,295
|
||
| 23.11.2019, 13:42 | ||
|
Viktorrus, я и не пытался это все реализовывать. я показал примерно как на вопрос автора
нет ни формата хранения данных, я привел просто пример. я бы вообще создал класс персона где реализовал бы методы которые возвращают требуемые поля и хранил бы объекты в базе. как то так. а можно просто функциями. все зависит от уровня знаний автора или требований согласно программе обучения
0
|
||
| 23.11.2019, 19:42 | |
|
Semen-Semenich, Я аналогичный справочник создал для себя используя два класса, класс "Книга" и класс "Запись". И создал форму, что бы работать с этим Телефонным справочником. Правда у меня в этом коде нет проверок на ошибки. Их я добавил когда стал создавать шаблон, в котором не указывается область применения. а создается некий безликий журнал с записями имеющими безликие поля. И по определенной методики можно привязать этот журнал записей к любой тематике, простым способом заменив безликие названия полей на связанные с тематикой. Количеством полей можно варьировать, но максимум ограничен размерами экрана. А вот количество записей не ограничено, так как реализован механизм листания страниц, так как на одной странице в форме на весь экран умещается 25 записей. Хранится все в питоновской базе данных созданной с помощью модуля shelve. Кстати используя этот шаблон, каталог для книг я создал за 20 мин. Используя этот шаблон я могу быстро создавать телефонные книги, складские каталоги и любой журнал на любую тематику состоящий из некоторых записей. Это конечно примитивно по сравнению с существующими СУБД, но зато быстро решает простые задачи, которые можно свести к журналу и записям в нем. Поиск там тоже есть. Он ищит заданную подстроку по всем полям, во всех записях в журнале. И в том числе поиск в выбранных записях. Поэтому поиск по условиям в нескольких полях выполняется поэтапно. Ищется по одному условию, потом в найденных записях ищется по другому условию.
0
|
|
|
0 / 0 / 0
Регистрация: 22.11.2019
Сообщений: 7
|
||||||
| 24.11.2019, 18:47 [ТС] | ||||||
|
Добавила ограничения на ввод данных и все сломалось...
Как правильно их вставить? Ввод новой записи
0
|
||||||
| 25.11.2019, 04:51 | ||||||
|
Ekaterina56, Ваша ошибка из за того, что Вы не совсем понимаете технологию ООП. В реальности у Вас есть объект "Запись в телефонной книге" , которая является экземпляром класса всех существующих записей в телефонной книге. Вы этот класс назвали Member. Вы видели где нибудь в реальной телефонной книге, что бы когда Вы в нее записываете телефон, то что бы запись из книги ограничивала, что Вы туда пишете? Нет. Значит в классе не должно быть метода проверяющего, что вы заносите в телефонную книгу. Ввод данных и проверка их корректности должны производиться вне класса. А в класс должны поступать в качестве аргументов уже проверенные данные.
Поэтому выведите ввод и проверку данных за пределы класса. Описываете класс а потом в блоке
Осуществляете ввод данных и их проверку. Затем создаете экземпляр записи передавая ей введенные данные в виде аргументов. И продолжаете работать с этой записью, делая с ней то, что Вам нужно. Например записываете ее в файл. Добавлено через 11 минут Ekaterina56, Скажите. Это учебное задание, от которого Вы не можете отступать? Просто работать с текстовым файлом очень не удобно. Много лишней работы. Добавлено через 11 минут Если это учебное задание, тогда использование текстового файла может быть оправдано. Лишняя работа используется для углубленного изучения программирования на питоне, пока Вы не изучали работу с базами данных. Последние упрощают программирование, беря на себя часть работы.
0
|
||||||
|
5222 / 3469 / 1173
Регистрация: 21.03.2016
Сообщений: 8,295
|
||
| 25.11.2019, 15:40 | ||
|
0
|
||
|
0 / 0 / 0
Регистрация: 22.11.2019
Сообщений: 7
|
|
| 25.11.2019, 19:58 [ТС] | |
|
Это учебное задание. Была не знакома ни с одним языком программирования. Но в рамках учебы пришлось изучать питон..
Добавлено через 11 минут Только все идет очень плохо и непонятно... Добавлено через 19 минут Отдельными операциями я написала все нужные функции, теперь надо к каждому добавить ограничения и сделать так, чтобы программа не останавливалась из-за ошибки (когда пользователь, что-то не так вводит), а сообщала ему об этом и предлагала повторный ввод
0
|
|
|
5222 / 3469 / 1173
Регистрация: 21.03.2016
Сообщений: 8,295
|
|||||||
| 25.11.2019, 20:14 | |||||||
|
Ekaterina56, все не совсем плохо. есть этот форум и ваше желание подкрепленное попытками с кодом. давайте начнем сначала. мне тоже интересно что из этого получиться.
пока писал вы уже дописали часть текста и я не видел.
0
|
|||||||
|
0 / 0 / 0
Регистрация: 22.11.2019
Сообщений: 7
|
||||||
| 25.11.2019, 20:41 [ТС] | ||||||
|
Ограничивать ввод данных от пользователя, чтобы имя, телефон и возраст были корректны. Если пользователь вводит вместо букв цифры и наоборот, то выдать ему ошибку "неправильный ввод". Знаю, что это можно сделать с помощью Try и except, но куда и как правильно вставить это в скрипт не понятно...
В питоне есть какая-либо функция для дат? Я могу сделать после поиска еще дополнительные функции: выход или изменение контакта? или же лучше прописать это как отдельную функцию? Чтобы после выполнения операции пользователю возвращалось меню, можно использовать цикл while и в отдельном пункте меню прописать операцию "выход"? Добавлено через 6 минут
0
|
||||||
|
5222 / 3469 / 1173
Регистрация: 21.03.2016
Сообщений: 8,295
|
||||||||||||||||
| 25.11.2019, 21:24 | ||||||||||||||||
|
ну вот пример, функция проверяет корректность ввода имени и фамилии и возвращает с заглавной буквой
теперь то же самое для телефона. проверяете что номер содержит + и 11 цифр или 12 цифр если через 8 записан. можно регуляркой а можно парсить входную строку или явно указывать при вводе формат ввода типа номер через + и без пробелов. Добавлено через 10 минут вот проверка номера (без заморочек)
0
|
||||||||||||||||
| 25.11.2019, 21:39 | |||||||||||
|
Ekaterina56, Опять Вы ввод данных пытаетесь осуществлять с помощью метода класса. Выведете функцию запроса данных за пределы класса. У Вас вообще кроме определения класса ничего нет. А где у Вас будет запрос на создание экземпляра класса?
Определите функцию ввода и проверки данных за пределами класса ниже него. А после того, как определити класс и все функции, которые не входят в класс, создайте блок
Добавлено через 3 минуты Semen-Semenich, выложил Вам функции проверки введенных данных, но это тоже нужно разместить за пределами класса.
0
|
|||||||||||
| 25.11.2019, 21:39 | |
|
Помогаю со студенческими работами здесь
20
Написать программу - телефонный справочник (на основании словарей)
Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
|||
|
Изучаю kubernetes
lagorue 13.01.2026
А пригодятся-ли мне знания kubernetes в России?
|
Сукцессия микоризы: основная теория в виде двух уравнений.
anaschu 11.01.2026
https:/ / rutube. ru/ video/ 7a537f578d808e67a3c6fd818a44a5c4/
|
WordPad для Windows 11
Jel 10.01.2026
WordPad для Windows 11
— это приложение, которое восстанавливает классический текстовый редактор WordPad в операционной системе Windows 11. После того как Microsoft исключила WordPad из. . .
|
Classic Notepad for Windows 11
Jel 10.01.2026
Old Classic Notepad for Windows 11
Приложение для Windows 11, позволяющее пользователям вернуть классическую версию текстового редактора «Блокнот» из Windows 10. Программа предоставляет более. . .
|
|
Почему дизайн решает?
Neotwalker 09.01.2026
В современном мире, где конкуренция за внимание потребителя достигла пика, дизайн становится мощным инструментом для успеха бренда. Это не просто красивый внешний вид продукта или сайта — это. . .
|
Модель микоризы: классовый агентный подход 3
anaschu 06.01.2026
aa0a7f55b50dd51c5ec569d2d10c54f6/
O1rJuneU_ls
https:/ / vkvideo. ru/ video-115721503_456239114
|
Owen Logic: О недопустимости использования связки «аналоговый ПИД» + RegKZR
ФедосеевПавел 06.01.2026
Owen Logic: О недопустимости использования связки «аналоговый ПИД» + RegKZR
ВВЕДЕНИЕ
Введу сокращения:
аналоговый ПИД — ПИД регулятор с управляющим выходом в виде числа в диапазоне от 0% до. . .
|
Модель микоризы: классовый агентный подход 2
anaschu 06.01.2026
репозиторий https:/ / github. com/ shumilovas/ fungi
ветка по-частям.
коммит Create переделка под биомассу. txt
вход sc, но sm считается внутри мицелия. кстати, обьем тоже должен там считаться. . . .
|