Создание календаря напоминания
Внимание! Это довольно старый топик, посты в него не попадут в новые, и их никто не увидит. Пишите пост, если хотите просто дополнить топик, а чтобы задать новый вопрос — начните новый.
Внимание! Это довольно старый топик, посты в него не попадут в новые, и их никто не увидит. Пишите пост, если хотите просто дополнить топик, а чтобы задать новый вопрос — начните новый.
Ребят, помогите, надо сделать календарь напоминания в С++, кто может подскажите, сделайте...
Ты пиши, выкладывай код, описывай проблемы. Может кто и поможет.
ввожу дату и событие запоминает его, хочу посмотреть событие — ввожу дату ето не пашет((
Вовка, не в обиду, такого бреда я давно не видел ((
Ошибки проектирования
(1) Не надо открывать файл для записи при создании экземпляра класса и закрывать его в деструкторе, поскольку этот файл так же используется и для чтения тем же экземпляром класса. Надо либо в конструкторе открывать файл на чтение и запись (файл с произвольным доступом) и закрывать в деструкторе, либо, что предпочтительнее, открывать и закрывать файл локально внутри методов, не используя член класса типа файлового потока.
(2) Не надо использовать рекурсию для организации циклов (вызов
menu()
изadd()
, вызванного изmenu()
).(3) Код метода
menu()
надо перенести из класса в вызывающий код (в данном случае, в ф-циюmain()
) и поместить внутрь цикла.(4) Из членов класса убрать переменные
int num,j
. Они там совершенно не нужны.(5) Вместо «магических» чисел (20, 255, 13, 10) использовать именованные константы.
(6) Имя файла данных календаря оформить как строковую константу. И, желательно, убрать её из реализации класса, а передавать как параметр в конструктор.
(7) Не надо использовать функцию
exit()
для штатного завершения программы.Ошибки кодирования
(1) Функция
exit()
немедленно завершает работу программы. При этом деструкторы объектов не отрабатываются. Следовательно, при последовательном выборе в меню пунктов «1» и «3» информация в файл записана не будет, т.к. вывод в файл буферизованный и запись последнего буфера будет производиться при закрытии файла (в деструкторе).(2) В функции
search()
для чтения открывается файл, открытый для записи. В зависимости от компилятора и ОС, результат может быть самый разнообразный: от ошибки открытия файла, до невозможности прочесть последнюю внесённую запись. Кстати, успешность открытия файла для чтения ни где не проверяется.(3) Угадать смысл в
char *file_id= new char[sizeof(file)];
я так и не смог. Почему размер буфера для ввода текста из файла должен быть равен размеру экземпляра классаifstream
(252 байта)?(4) В следующем операторе
file.getline(file_id,'\n');
угадывается желание прочитать строку до ограничителя. Однако в STL имеется только две перегрузки для методаgetline()
классаbasic_istream
:Таким образом, в программе второй параметр неявно приводится к типу
streamsize
и используется первая форма перегруженной функции: только со счётчиком, но без символа-ограничителя. В данном случае, будет считано из файла 9 байт (1 байт резервируется для концевого '\0').(5) Следующий далее фрагмент кода (до конца функции) не поддался моему осмыслению. Могу только отметить, что используется неинициализированная переменная
j
и не освобождается память для буфераfile_id
. Подозреваю, что здесь должен был бы быть код, который в цикле считывает записи из файла данных, проверяет совпадение даты с введённой пользователем и, в случае совпадения, выводит на экран «напоминание».