Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 21.02.2011, 08:57   #1
Final_ekb
 
Регистрация: 18.10.2010
Сообщений: 8
По умолчанию Календарь планирования (ежедневник) в Delphi

Я закончил 1 часть проекта, и на моменте проверки при нажатии кнопки у меня List index out of bounds (0)
Все пункты выполнял по порядку, кроме одного: Для того чтобы не обрабатывать отдельно случай, когда вновь вводимое мероприятие должно стоять последним, установим фиктивное мероприятие на заведомо недостижимую дату - не понимаю, что нужно сделать. Подскажите?
Задание:
Цитата:
Сообщение от Задание
Лабораторная работа 17. Проект «Ежедневник»

Задача: создать инструмент для фиксации мероприятий, намеченных на определенную дату в будущем, и своевременного напоминания о них.
Задача разбивается на две части:
• Приложение, запускаемое в момент, когда требуется занести информацию. Пользователь должен видеть перед собой календарь, выбирать на нем нужную дату и записывать намеченное на этот день мероприятие.
• Приложение, запускаемое ежедневно и сообщающее пользователю о намеченных на текущую дату делах.

Первая часть проекта.

Рис. 13

В проекте использованы:
 главная форма приложения – объект класса TForm;
 календарь – объект класса TMonthCalendar (вкладка Win32, этот класс объектов не описан в лекции, но его смысл и назначение интуитивно понятны; единственное его свойство, которое вам потребуется – Date – содержит выбранную пользователем дату );
 два скрытых объекта класса TListBox (вкладка Standard);
 текстовое окно, кнопка (вкладка Standard).

Порядок выполнения работы
1. Подготовьте нужные объекты на форме, как показано на рис. 13. Для того чтобы скрытые объекты были не видны, установите для их свойства Visible значение false. Однако рекомендуется сделать это после отладки про-граммы, чтобы легче было увидеть возможные ошибки.
2. Объекты ListBox1 и ListBox2 предназначены для хранения списка дат и содержания намеченных мероприятий в хронологическом порядке. Чтобы этот порядок не нарушался при вводе нового элемента, код программы, выполняемой при нажатии кнопки Принять должен выглядеть так:

date1 := MonthCalendar1.Date;
{переменной типа TDateTime присваивается дата,
выбранная на календаре}
i:=0;
while date1 > StrToDate(ListBox1.Items[i])
do i:=i+1;
{пропускаем записи, намеченные на более ранние даты}
ListBox1.Items.Insert(i,DateToStr(D ate1));
{вставляем в нужную позицию новую дату}
ListBox2.Items.Insert(i,Edit1.Text) ;
{вставляем в соответствующую позицию новое мероприятие}

Для того чтобы не обрабатывать отдельно случай, когда вновь вводимое мероприятие должно стоять последним, установим фиктивное мероприятие на заведомо недостижимую дату (рис. 13).
3. Вводимая информация в промежутках между сеансами работы должна храниться во внешних файлах. Для этого следует при закрытии приложения (событие OnClose для объекта Form1) выполнить следующий код:

ListBox1.Items.SaveToFile('даты.txt ');
ListBox2.Items.SaveToFile('дела.txt ');

Проверьте правильность работы первой части приложения. Ваш Ежедневник должен позволять заносить мероприятия с указанием даты и сохранять информацию в хронологическом порядке во внешнем файле. Проверить результаты можно, открыв файлы с помощью блокнота.

Вторая часть проекта.

Кроме главной формы приложения здесь потребуются только три объек-та класса TListBox (два скрытых и один видимый).

Порядок выполнения работы

1. Подготовьте нужные объекты.
2. Все необходимые действия должны выполняться сразу при запуске приложения, поэтому весь код программы привязан к событию OnCreate для главной формы приложения (Form1).


ListBox1.Items.LoadFromFile('даты.t xt');
ListBox2.Items.LoadFromFile('дела.t xt');
{загружаем информацию из файлов}
i := 0;
while i < ListBox1.Items.Count-1 do
{просматриваем список дат}
begin
if StrToDate(ListBox1.Items[i]) = date then
{если дата совпадает с текущей}
ListBox3.Items.Add(ListBox2.Items[i]);
{добавляем мероприятие в видимый список}
i := i + 1;
end;

Проверьте правильность работы второй части приложения. Ваш Ежедневник должен показать записи файла «дела.txt», относящиеся к текущей дате (рис. 14).


Рис. 14

Задания для самостоятельного выполнения

1. При длительном использовании приложения файлы будут расти, со-храняя устаревшую, ненужную уже информацию о давно прошедших событиях. Усовершенствуйте программу так, чтобы в файлах не хранились записи, относящиеся к прошедшему времени. Для этого после каждого запуска списки потребуется сокращать, а файлы перезаписывать.
2. Заметим, что ваша разработка имеет существенный недостаток. Если пользователь по каким-либо причинам в один из дней не запустил програм-му, о намеченных на этот день делах он не получит напоминания уже никогда. Полагая, что «лучше поздно, чем никогда», измените программу так, чтобы каждое напоминание однажды обязательно появлялось на экране, пусть и позднее нужной даты.
Изображения
Тип файла: png Календарь.png (44.6 Кб, 845 просмотров)
Тип файла: png ежедневник.png (20.5 Кб, 848 просмотров)

Последний раз редактировалось Final_ekb; 21.02.2011 в 09:00.
Final_ekb вне форума Ответить с цитированием
Старый 21.02.2011, 09:08   #2
Final_ekb
 
Регистрация: 18.10.2010
Сообщений: 8
По умолчанию

Вот введенный мною код
Цитата:
unit Unit1;

interface

uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, ComCtrls;

type
TForm1 = class(TForm)
MonthCalendar1: TMonthCalendar;
ListBox1: TListBox;
ListBox2: TListBox;
Edit1: TEdit;
Button1: TButton;
procedure Button1Click(Sender: TObject);
procedure FormClose(Sender: TObject; var Action: TCloseAction);
private
{ Private declarations }
public
{ Public declarations }
end;

var
Form1: TForm1;
Date1: TDateTime;
i: Integer;

implementation

{$R *.dfm}

procedure TForm1.Button1Click(Sender: TObject);
begin
date1 := MonthCalendar1.Date;
i:=0;
while date1 > StrToDate(ListBox1.Items[i])
do i:=i+1;
ListBox1.Items.Insert(i,DateToStr(D ate1));
ListBox2.Items.Insert(i,Edit1.Text) ;
end;

procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction);
begin
ListBox1.Items.SaveToFile('даты.txt ');
ListBox2.Items.SaveToFile('дела.txt ');
end;

end.
Вложения
Тип файла: rar Курсовая 17.rar (173.5 Кб, 365 просмотров)

Последний раз редактировалось Final_ekb; 21.02.2011 в 10:10.
Final_ekb вне форума Ответить с цитированием
Старый 21.02.2011, 11:32   #3
Final_ekb
 
Регистрация: 18.10.2010
Сообщений: 8
По умолчанию

Ребят, помогите пожалуйста, задайте вопросы, если ничего не понятно)
Сам пытаюсь разобраться, не чего-то недопонимаю Я вроде бы всю информацию предоставил. И задание и код и проект...

Из за чего ошибка? почему не записывает?
Final_ekb вне форума Ответить с цитированием
Старый 22.02.2011, 06:08   #4
Final_ekb
 
Регистрация: 18.10.2010
Сообщений: 8
По умолчанию

Ап
приходится спамить, че то не вижу, как удалить предыдущее сообщение.
Final_ekb вне форума Ответить с цитированием
Старый 22.02.2011, 08:19   #5
Пепел Феникса
Старожил
 
Аватар для Пепел Феникса
 
Регистрация: 28.01.2009
Сообщений: 21,000
По умолчанию

а кнопку Правка вы не видите?
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел.
Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите.
Пепел Феникса вне форума Ответить с цитированием
Старый 24.02.2011, 05:52   #6
Final_ekb
 
Регистрация: 18.10.2010
Сообщений: 8
По умолчанию

Цитата:
Сообщение от Пепел Феникса Посмотреть сообщение
а кнопку Правка вы не видите?
оо, первый ответ. уже лучше чем ничего))

а по существу?
Final_ekb вне форума Ответить с цитированием
Старый 13.06.2011, 21:14   #7
andryhagsv
Новичок
Джуниор
 
Регистрация: 13.06.2011
Сообщений: 1
По умолчанию

это полная прога ежедневник по примеру все работает? или есть лаги? просто проверять некогда срочно нужна эта прога!
andryhagsv вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Календарь в delphi nnndaniil Помощь студентам 23 23.01.2011 05:56
календарь-ежедневник-ВПР rusgaz Microsoft Office Excel 3 18.03.2010 03:19
Календарь Ежедневник Яр|/||< (^_^) C++ Builder 7 14.02.2010 12:40
помогите календарь delphi npizpak Помощь студентам 3 27.11.2009 10:52
Календарь в Delphi Vladya Помощь студентам 4 09.11.2008 12:44