- •Задача 1. Конвертер
- •Задача 2. Фунты-килограммы
- •Задача 3. Сила тока.
- •Задача 4. Сопротивление
- •Задача 5. Кафе
- •Задача 6. Любимый напиток
- •Задача 7. Электроэнергия
- •Задание 8. Осаго
- •Задание 9.Просмотр иллюстраций
- •Задача 10. Калькулятор
- •Задача 11. Калькулятор-2
- •Задача 12.Секундомер
- •Задача 13. Угадай число
- •Задание 14.Угадай число-2
- •Задание 15.Запуск Internet Explorer
- •Задание 16.Конвертор
- •Задание 17.Конвертор 2
- •Задание 18.Погода
- •Задание 19.Средняя температура
- •Задание 20. Простая база данных
- •Задание 21. Редактор текста
- •Задание 22. Приветствие
- •Задача 23. Олимпийский флаг
- •Задание 24. Диаграмма
- •Задача 26. Круговая диаграмма.
- •Задача 27. Просмотр иллюстраций.
- •Задача 28 .Часы
- •Задача 29. Пинг понг.
- •Задача 30. Полет в облаках
- •Задача 31.Баннер
- •Задача 32. Фоновый рисунок
- •Задача 33. Wav
- •Задача 34. Mp3 Player
- •Задача 35.Воспроизведение midi
- •Задача 36.Compact Disk Player (версия 1)
- •Задача 37.Compact Disk Player (версия 2)
- •Задача 38.VideoPlayer
- •Задача 39. Анимация
- •Задача 40. Записная книжка
- •Задача 41 Магазин
- •Задача 42. Ежедневник
- •Задача 43. Сапер
- •Часть 1. Примеры и задачи
- •Часть 1. Примеры и задачи
- •Задача 44 Игра 15
- •Часть 1. Примеры и задачи
- •Задача 45. Игра "Собери картинку" (Puzzle)
- •Задача 46 Игра "Парные картинки"
- •Задача 47. Экзаменатор
- •Задача 48. Экзаменатор-2
- •Задача 49. Календарь
- •Задача 50. Будильник
- •Задача 51. Очистка диска
- •Задача 52.Печать
- •Задачи для самостоятельного решения Задача 1. Скидка
- •Задача 2.Доход по вкладу
- •Задача 3. Таблица умножения
- •Задача 4.Поездка на автомобиле
- •Задача 5.Стоимость разговора
- •Задача 6. Стеклопакет
- •Задача7. Калькулятор
- •Задача 8. Электроэнергия
- •Задача 9. Добрый день
- •Задача 10. Часы
- •Задача 11. Узоры
- •Задача 12. Курс доллара
- •Задача 13. Диаграмма
- •Задача 14. Домашние животные
- •Задача 15. Кораблик
- •Задача 16. Сапер
- •Задача 17 .Экзаменатор
- •Задача 18. База данных "Расходы"
Задача 41 Магазин
Программа Магазин (Рис. 48 и 49) работает с одноименной базой данных и демонстрирует использование компонентов BDE.
Рис 48
Рис 49
Вывод:В этой программе создали окно магазина для базы данных .
Листинг
#include <vcl.h>
#pragma hdrstop
#include "Unit1.h"
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"
TForm1 *Form1;
//---------------------------------------------------------------------------
__fastcall TForm1::TForm1(TComponent* Owner)
: TForm(Owner)
{
}
//---------------------------------------------------------------------------
void __fastcall TForm1::FormShow(TObject *Sender)
{
try {
Table1->Open();
}
catch ( EDBEngineError &e)
{
ShowMessage("Для доступа к базе данных надо создать " "псевдоним stock");
}
}
//---------------------------------------------------------------------------
void __fastcall TForm1::DataSource1StateChange(TObject *Sender)
{
if ( DataSource1->State == dsBrowse) StatusBar1->Panels->Items[1]->Text = "Просмотр";
else
StatusBar1->Panels->Items[1]->Text = "Редактирование";
}
//---------------------------------------------------------------------------
void __fastcall TForm1::Table1AfterScroll(TDataSet *DataSet)
{
AnsiString Picture;
if ( Table1->RecNo != -1)
{
StatusBar1->Panels->Items[0]->Text = "Запись: " + IntToStr( Table1->RecNo );
try {
Picture = Table1->Database->Directory + DataSet->FieldValues["Image"];
}
catch (EVariantTypeCastError &e)
{
Image1->Visible = false;
return;
}
ShowPhoto(Picture);
}
else
{
StatusBar1->Panels->Items[0]->Text = "";
StatusBar1->Panels->Items[1]->Text = "Новаязапись";
Image1->Visible = false;
}
}
//---------------------------------------------------------------------------
void __fastcall TForm1::ShowPhoto(AnsiString Picture)
{
try
{
Image1->Picture->LoadFromFile(Picture);
}
catch ( EFOpenError &e)
{
Image1->Visible = false;
return;
}
Image1->Visible = true;
}
//---------------------------------------------------------------------------
void __fastcall TForm1::FormClose(TObject *Sender, TCloseAction &Action)
{
if (Table1->State == dsEdit )
Table1->Post();
}
//---------------------------------------------------------------------------
Задача 42. Ежедневник
Программа Ежедневник (рис. 50) демонстрирует использование компонентов ADO для доступа к базе данных формата Microsoft Access. База данных содержит информацию о запланированных мероприятиях (дата, задача). Программа позволяет вносить в базу данных изменения (добавлять, удалять и редактировать записи), а также обеспечивает выбор информации по запросу — выводит список мероприятий, запланированных "на сегодня", "на завтра" и "на эту неделю". При запуске программа автоматически выводит список мероприятий, запланированных "на сегодня" или, если программа запущена в пятницу, субботу или воскресенье, "на сегодня и ближайшие дни”.
Рис 50
Вывод: В этом задании мы научились использовать компонентов ADO для доступа к базе данных формата Microsoft Access.
Листинг
AnsiString stDay[7] = ("воскресенье","понедельник","вторник", "среда","четверг","пятница","суббота"} ;
AnsiString stMonth[12] = {"января","февраля","марта", "апреля","мая","июня","июля", "августа","сентября","октября", "ноября","декабря"};
void fastcall TForml::FormShow(TObject *Sender)
{
TDateTime Today, // сегодня
NextDay; // следующий день (не обязательно завтра)
Word Year, Month, Day; // год, месяц, день
Today п Now ();
DecodeDate(Today, Year, Month, Day);
Labell->Caption = "Сегодня " + IntToStr(Day) + " " + stMonth[Month-1] + " " + IntToStr(Year) + " года, " + stDay[DayOfWeek(Today) -1];
Label2->Caption » "Сегодня и ближайшие дни";
/* вычислим следующий день, если сегодня пятница, то, чтобы не забыть, что запланировано на понедельник, считаем, что следующий день - понедельник */ switch ( DayOfWeek(Today) ) { case 6 : NextDay = Today + 3; break; // сегодня пятница case 7 : NextDay r» Today + 2; break; // сегодня суббота default : NextDay = Today + 1; break;
176 Часть 1. Примерыизадачи
ADODataSetl->CommandText = "SELECT * FROM schedule WHERE aDate BETWEEN DateValueC" FormatDateTimeC'dd/iran/yyyy", Today) + "') AND DateValue('" + FormatDateTime("dd/mm/yyyy",NextDay) + "') ORDER BY aDate";
// еслинадо, отобразить SQL-команду if ( CheckBoxl->Checked) ShowSQLO;
// если БД не зарегистрирована как источник данных ODBC, // возникает исключение EOleException
try { // открыть набор данных (выполнить // SQL-команду ADODataSetl->CommandText ADODataSetl->Open();
catch ( EOleException &e) // чтобы тип EOleException был доступен, в программу // надо поместить директиву ^include <ComObj.hpp> I
ShowMessage( "Ошибка обращения к БД. База данных Planner.mdb должна" "быть зарегистрирована\пв системе как источник данных ODBC " "под именем dplaner"
Buttonl->Enabled = false; Button2->Enabled = false; Button3->Enabled = false;
Базыданных 177
Button4->Enabled = false; return;
if ( ! ADODataSetl->RecordCount ) ShowMessage("На сегодня и ближайшие дни ни каких дел "не запланировано.");
// ЩелчокнакнопкеСегодня void fastcall TForml::ButtonlClick(TObject *Sender) { AnsiString today = FormatDateTime("dd/inm/yyyy",Now());
Forml->Label2->Caption = "Сегодня";
ADODataSetl->Close(); // закрытьнаборданных
// изменитькритерийзапроса ADODataSetl->CommandText = "SELECT * FROM schedule WHERE aDate = DateValue('" + today +"')";
if ( CheckBoxl->Checked) ShowSQLf); // отобразитьзапрос
ADODataSetl->Open(); // открыть набор данных с новым // запросом
// щелчокнакнопкеЗавтра void fastcall TForml::Button2Click(TObject *Sender) { AnsiString tomorrow = FormatDateTime("dd/mm/yyyy" Now () +1 ) ;
Label2->Caption = "Завтра";
178 Часть 1. Примеры и задачи
ADODataSetl->Close() ;
// изменитькритерийзапроса ADODataSetl->CornmandText = "SELECT * FROM schedule WHERE aDate = DateValue('" +
tomorrow + " ')";
if ( CheckBoxl->Checked) ShowSQLO;
ADODataSetl->Open(); // выполнить запрос
if ( ! ADODataSetl->RecordCount )
{
ShowMessage("На завтра никаких дел не" "запланировано!");
// щелчокнакнопкеНаэтойнеделе void fastcall TForml::Button3Click(TObject *Sender)
{
// "эта неделя" - от текущего дня до конца недели // (до воскресенья) TDateTime Present, eWeek;
Label2->Caption = "На этой неделе";
Present^ Now О; // Now - возвращает текущую дату
eWeek = EndOfAWeek(YearOf(Present),WeekOf(Present));
/* длядоступак StartOfWeek, EndOfAWeek, YearOf и WeekOf надоподключить DateUtils.hpp (см. директивы iinclude ) */
Базыданных 179
ADODataSetl->Close();
ADODataSetl->CommandText = "SELECT * FROM schedule WHERE aDate BETWEEN DateValue('" + FormatDateTime("dd/mm/yyyy", Present) + ."•') AND DateValuef1" + FormatDateTime("dd/mm/yyyy",eWeek)+"') ORDER BY aDate";
if ( CheckBoxl->Checked) ShowSQLO;
ADODataSetl->Open();
if ( ! ADODataSetl->RecordCount ) ShowMessage("На эту неделю никаких дел " "не запланировано.");
} // ЩелчокнакнопкеВсе void fastcall TForml::Button4Click(TObject *Sender) { ADODataSetl->Close();
ADODataSetl->CommandText = "SELECT * FROM schedule ORDER BY aDate"; if ( CheckBoxl->Checked) ShowSQLO; ADODataSetl->Open(); Label2->Caption - "Все, чтонамеченосделать";
} // отображает SQL-команду void fastcall TForml::ShowSQL(void) { ShowMessage ( ADODataSetl->CommandText );
