Автор работы: Пользователь скрыл имя, 10 Ноября 2013 в 13:17, контрольная работа
Создать программу для работы с базой данных учёта рождаемости, сформированной в виде файла записей. В каждой записи определить поля:
Населённый пункт, национальность, вес, рост, дата рождения, фамилия, имя, отчество. (Я добавил поле ПОЛ). Необходимо реализовать следующие операции: создание и удаление записи, сохранение и считывание файла записи с диска, редактирование, поиск и сортировку данных по населённым пунктам, просмотр записей и навигацию по базе.
В моей работе добавлена ещё одна форма AboutBox1, которая выводит календарь из пункта меню Разное. Принцип создания формы то же, что и был описан выше, только на данной форме я поместил компонент CCalendar, расположенный на вкладке Samples панели Component.
Компонент StringGrid создает сетку для отображения строк по строкам или столбцам. Таблица может иметь полосы прокрутки, причём, заданное число первых строк и столбцов может быть фиксированным и не прокручиваться. Таким образом можно задать заголовки столбцов и строк, постоянно присутствующие в окне компонента. Компонент StringGrid находится на вкладке Additional панели Component.
Поместим его на первую страницу. Установим для StringGrid1 следующие свойства:
Свойство |
Значения |
ColCount |
4 |
FixedCols |
0 |
RowCount |
100 |
FixetRows |
1 |
Options => goEditing |
true |
ColCount - количество столбцов таблицы.
FixedCols – количество фиксированных столбцов таблицы, которые не
прокручиваются слева.
RowCount – количество строк таблицы.
FixetRows – количество строк в шапке таблицы, которые не
прокручиваются вверх.
Options => goEditing – возможность редактировать содержимое таблицы.
Задаём ширину столбцов таблицы при помощи мыши. Для этого
передвинем границу между двумя столбцами в первой (серой) строке
таблицы StringGrid1. Указатель мыши при этом должен принять вид
двойной черты со стрелками вправо-влево.
Компоненты OpenDialog и SaveDialog
Стандартные диалоговые окна OpenDialog (открыть) , SaveDialog
(сохранить) не являются формами С++Builder . Эти окна содержаться в
системном файле COMDLG32.Dll, представляются самой ОС и доступны
всем приложениям Windows.
Типы искомых файлов, появляющихся в диалоге в раскрывающимся
списке, задаётся свойством Filter. Это свойство можно устанавливать с
помощью специального редактора или программно. Для доступа к
редактору достаточно щёлкнуть по кнопке с многоточием в строке Filter
окна инспектора объектов. В левом столбце редактора (Filter Name)
записывается тот текст, который увидит пользователь в раскрывающимся
списке Тип файлов окна диалога. В нашей базе будет текст Файлы
данных. В правом столбце редактора (Filter) записываются разделённые
точкой с запятой шаблоны фильтра. В нашем случае: *.dat*. Если
необходимо указать название файла то пишется следующая функция, в
нашем случае это: OpenDialog1->FileName="Base.
В SaveDialog есть свойство Options и подсвойство ofOverwritePrompt,
если его установить в true, то SaveDialog, если это нужно, будет сам
выводить диалог: "Файл уже существует. Заменить его?"
Компоненты OpenDialog и SaveDialog Находятся на вкладке Dialog
панели Component. Поместим их на нашу форму.
Щёлкнем по вкладке Unit1.h в нижней части окна редактора кода.
Опишем структуру для работы с записью базы данных:
struct info
{char city[20]; //Город
char vera[20]; //Национальность
char pol[20]; //Пол
char ves[20]; //Вес
char rost[20]; //Рост
char dr[20]; //Дата Рождения
char fam[20]; //Фамилия
char imja[20]; //Имя
char otch[15]; //Отчество
};
Вернёмся в текст модуля, щёлкнув Unit1.cpp нижней части окна редактора
кода.
Подключим к модулю файл #include <fstream.h>, содержащий описание
классов для работы с файлами.
Напишем код обработчика для OpenDialog см. прилож. 1 //Запись из
Файла стр. 16 - 17
Код обработчика для SaveDialog см. прил 1 //Запись в файл стр. 17
В окне инспектора объектов выберем форму PageDlg. И перейдём на
вкладку Events (События).
В левом столбце найдём событие OnCreate и дважды щёлкнем в этой
строке в правом столбце. В редакторе кода будет создана заготовка
обработчика события OnCreate (Создание).
Комбинированный список (ComboBox)
Объединяет функции компонентов ListBox – списка, и Edit – окна
редактирования. Основное событие компонента – OnChange наступает при
изменении текста в окне редактирования в результате прямого
редактирования текста или в результате выбора из списка.
Поместим на страницу «Редактирование и поиск записей» 11
компонентов Label, 10 компонентов Edit, компонент ComboBox,
компонент GroupBox и 09 кнопок BitBtn.
Запретим ввод данных в ComboBox1. Для этого свойство Style должно
иметь значение csDropDownList. В свойстве Text компонента ComboBox1
и компонентов Edit1- Edit9 удалим текст.
Дважды щёлкнем по компоненту ComboBox1. В заготовке обработчика
события OnChange напишем код заполнения компонентов Edit1- Edit9
Выберем в дереве инспектора объектов компонент PageControl1. На
странице Events найдём событие OnChange и дважды щёлкнем в правом
столбце этого события. В коде обработчика укажем следующее:
void __fastcall TPagesDlg::PageControl1Change(
{
if(PageControl1->
{int N=1;
ComboBox1->Items->Clear();
while(StringGrid1->Cells[0][N]
ComboBox1->Items->Add(
ComboBox1->ItemIndex=0;
}
}
Коды обработчиков для кнопок: Предыдущая, Следующая, Изменить,
Добавить, Удалить все записи из базы, Удалить запись из базы,
Удалить запись из формы, Поиск
см. приложение 1
Изменение цвета надписи на кнопке BitBtn
Для того чтобы при наведении на кнопку мыши цвет надписи менялся необходимо описать следующее событие
void__fastcall TForm1::BitBtn1MouseMove(
TShiftState Shift, int X, int Y)
{
BitBtn1->Font->Color = clRed; //Изменение надписи
на красный
}
//----------------------------
void __fastcall TForm1::FormMouseMove(TObject *Sender,
TShiftState Shift, int X, int Y)
{
BitBtn1->Font->Color = clBlack; //Возврат стандартного
цвета
}
Компонент SpeedButton создает графическую кнопку быстрого вызова.
Компонент находится на вкладке Additional панели Component.
Для того, чтобы поместить на кнопку изображение необходимо в
инспекторе объектов найти в левом столбце Glyph и напротив в правом
нажать кнопку с многоточием, появиться редактор загрузки изображений
Picture Editor. Изображение должно иметь расширение .bmp.
Изменение звукового сигнала
В различные варианты системы Windows включается более или менее
обширный список звуковых файлов для обозначения системных действий:
CHIMES.WAV, CHORD.WAV, TADA.WAV и др. В некоторых вариантах
Windows их число может достигать нескольких десятков. Ниже приведены
обозначения возможных значений параметра функции MessageBee()
MB_ICONASTERISK - Звездочка
MB_ICONEXCLAMATION - Восклицание
MB_ICONHAND - Критическая ошибка
MB_ICONQUESTION - Вопрос
MB_OK - Стандартный звук
Таким образом, если мы хотим в некоторой точке программы вызвать
звуковое сопровождение, в это место программы нужно включить API:
MessageBeep(MB_ICONASTERISK); //Дадим звуковой сигнал
Запрет вводы определённых символов в поле Edit
Код:
if (//Какое-то условие) // если условие выполняется
BitBtn2->Enabled=true; // то кнопка доступна
еlse // иначе
BitBtn2->Enabled=false; // кнопка недоступна
Перенос программы с одного компьютера на другой
Чтобы программа была переносима с компьютер на компьютер и
запускалась без посторонних библиотек, нужно снять галочки с "Use
dynamic RTL" в свойствах Linker и "Build with runtime packages" в
свойствах Packages.
Выбор подходящего значка
Project->Otions->Закладка – Applicaton кнопка LoadIcon
Приложение 1 (Файл-модуль Unit1.cpp)
//----------------------------
#include <vcl.h>
#include <fstream.h>
#include <mmsystem.h> //для CD-дисковода
#include <Sysutils.hpp>
#pragma hdrstop
#include "Unit1.h"
#include "Unit2.h"
#include "Unit3.h"
//----------------------------
#pragma resource "*.dfm"
TPagesDlg *PagesDlg;
//----------------------------
__fastcall TPagesDlg::TPagesDlg(
: TForm(AOwner)
{
}
//----------------------------
void __fastcall TPagesDlg::N5Click(TObject *Sender)
{ //Команда меню Выход из базы
StatusBar1->Panels->Items[0]->
Close();
StatusBar1->Panels->Items[0]->
}
//----------------------------
void __fastcall TPagesDlg::N2Click(TObject *Sender)
{//Запись из файла - команда меню
StatusBar1->Panels->Items[0]->
OpenDialog1->FileName="Base.
OpenDialog1->FilterIndex=1;
if(OpenDialog1->Execute())
{int N=1;info r;
ifstream infile(OpenDialog1->FileName.
if(!infile)
{ShowMessage("Ошибка открытия файла");
return;
}
while(!infile.eof())
{infile.read((char*)&r,sizeof(
if(!infile.eof())
{StringGrid1->Cells[0][N]=r.
StringGrid1->Cells[1][N]=r.
StringGrid1->Cells[2][N]=r.
StringGrid1->Cells[3][N]=r.
StringGrid1->Cells[4][N]=r.
StringGrid1->Cells[5][N]=r.dr;
StringGrid1->Cells[6][N]=r.
StringGrid1->Cells[7][N]=r.
StringGrid1->Cells[8][N]=r.
N++;
}
}
infile.close();
}
StatusBar1->Panels->Items[0]->
}
//----------------------------
void __fastcall TPagesDlg::N3Click(TObject *Sender)
{//Запись в файл - команда меню
StatusBar1->Panels->Items[0]->
SaveDialog1->FileName="Base.
if(SaveDialog1->Execute())
{int N=1; info r;
ofstream outfile(SaveDialog1->FileName.
if(!outfile)
{ShowMessage("Ошибка открытия файла");
return;
}
while(StringGrid1->Cells[8][N]
{strcpy(r.city,StringGrid1->
strcpy(r.vera,StringGrid1->
strcpy(r.pol,StringGrid1->
strcpy(r.ves,StringGrid1->
strcpy(r.rost,StringGrid1->
strcpy(r.dr,StringGrid1->
strcpy(r.fam,StringGrid1->
strcpy(r.imja,StringGrid1->
strcpy(r.otch,StringGrid1->
N++;
outfile.write((char*)&r,
}
outfile.close(); }
StatusBar1->Panels->Items[0]->
}
//----------------------------
void __fastcall TPagesDlg::FormCreate(TObject *Sender)
{//открытие формы из середины
Application->OnHint = &OnHint; //Необходимо для StatusBar1
TRect r1,r2;
r1 = Rect(Left+Width/2,Top+Height/
r2 = BoundsRect;
DrawAnimatedRects(Handle,
//Заполнение таблицы
StringGrid1->Cells[0][0]="
StringGrid1->Cells[1][0]="
StringGrid1->Cells[2][0]="Пол"
StringGrid1->Cells[3][0]="Вес в гр.";
StringGrid1->Cells[4][0]="Рост в см.";
StringGrid1->Cells[5][0]="Дата рождения";
StringGrid1->Cells[6][0]="
StringGrid1->Cells[7][0]="Имя"
StringGrid1->Cells[8][0]="
PageControl1->ActivePageIndex=
}
//----------------------------
void __fastcall TPagesDlg::ComboBox1Change(TOb
{
int N=1;
while(StringGrid1->Cells[0][N]
{if(StringGrid1->Cells[0][N]==
{Edit1->Text=StringGrid1->
Edit2->Text=StringGrid1->
Edit3->Text=StringGrid1->
Edit4->Text=StringGrid1->Cells
Edit5->Text=StringGrid1->
Edit6->Text=StringGrid1->
Edit7->Text=StringGrid1->
Edit8->Text=StringGrid1->
Edit9->Text=StringGrid1->
}
N++;
}
BitBtn1->Enabled=true;
BitBtn2->Enabled=true;
}
//----------------------------
void __fastcall TPagesDlg::PageControl1Change(
{
StatusBar1->Panels->Items[0]->
if (ComboBox1->ItemIndex==-1)
{
BitBtn1->Enabled=false;
BitBtn2->Enabled=false;
}
if(PageControl1->
{int N=1;
ComboBox1->Items->Clear();
while(StringGrid1->Cells[0][N]
ComboBox1->Items->Add(
ComboBox1->ItemIndex=0;
StatusBar1->Panels->Items[0]->
}
}
//----------------------------
void __fastcall TPagesDlg::BitBtn1Click(
Информация о работе Создание программы для работы с базой данных учёта рождаемости