Создание программы для работы с базой данных учёта рождаемости

Автор работы: Пользователь скрыл имя, 10 Ноября 2013 в 13:17, контрольная работа

Описание работы

Создать программу для работы с базой данных учёта рождаемости, сформированной в виде файла записей. В каждой записи определить поля:
Населённый пункт, национальность, вес, рост, дата рождения, фамилия, имя, отчество. (Я добавил поле ПОЛ). Необходимо реализовать следующие операции: создание и удаление записи, сохранение и считывание файла записи с диска, редактирование, поиск и сортировку данных по населённым пунктам, просмотр записей и навигацию по базе.

Файлы: 1 файл

Readme.doc

— 291.50 Кб (Скачать файл)

В моей работе добавлена ещё одна форма AboutBox1, которая выводит календарь из пункта меню Разное. Принцип создания формы то же, что и был описан выше, только на данной форме я поместил компонент CCalendar, расположенный на вкладке Samples панели Component.

 

                                    Компонент StringGrid

Компонент 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.dat";

    В  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(TObject *Sender)

  {

  if(PageControl1->ActivePageIndex==1)

  {int N=1;

  ComboBox1->Items->Clear();

  while(StringGrid1->Cells[0][N]!="")

  ComboBox1->Items->Add(StringGrid1->Cells[0][N++]);

  ComboBox1->ItemIndex=0;

  }

  }

  Коды обработчиков для кнопок: Предыдущая, Следующая, Изменить,  

  Добавить, Удалить все записи из базы, Удалить запись из базы, 

  Удалить запись из формы, Поиск

  см. приложение 1

               

 

 

 

 

 

 

 

 

 

 

                                         Дополнительно

                 Изменение цвета надписи на  кнопке BitBtn

Для того чтобы при наведении  на кнопку мыши цвет надписи менялся необходимо описать следующее событие

void__fastcall TForm1::BitBtn1MouseMove(TObject *Sender, 
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. С. Бобровский – самоучитель по C++ Builder  Москва 2001 .PDF
  2. Кент Райсдорф - C++ Builder  Освой самостоятельно .PDF
  3. Начинаем работать в Borland C++ Builder Виктор Алексанкин .DOC
  4. Справочник советов и примеров по C++Builder Версия 8 от 01.02.2004
  5. Интернет-Форум: http://www.rxlib.ru/index.html
  6. C++BuilderFAQ Составлен по материалам форума на Исходниках.Ru

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

                             Приложение 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(TComponent* AOwner)

: TForm(AOwner)

{

}

//---------------------------------------------------------------------

 

void __fastcall TPagesDlg::N5Click(TObject *Sender)

{ //Команда меню Выход из базы

StatusBar1->Panels->Items[0]->Text="Выход  из базы";

Close();

StatusBar1->Panels->Items[0]->Text="";

}

//---------------------------------------------------------------------------

 

void __fastcall TPagesDlg::N2Click(TObject *Sender)

{//Запись из файла  - команда меню

StatusBar1->Panels->Items[0]->Text="Запись  из файла";

OpenDialog1->FileName="Base.dat";

OpenDialog1->FilterIndex=1;

if(OpenDialog1->Execute())

{int N=1;info r;

ifstream infile(OpenDialog1->FileName.c_str(),ios::binary);

if(!infile)

{ShowMessage("Ошибка открытия файла");

return;

}

while(!infile.eof())

{infile.read((char*)&r,sizeof(info));

if(!infile.eof())

{StringGrid1->Cells[0][N]=r.city;

StringGrid1->Cells[1][N]=r.vera;

StringGrid1->Cells[2][N]=r.pol;

StringGrid1->Cells[3][N]=r.ves;

StringGrid1->Cells[4][N]=r.rost;

StringGrid1->Cells[5][N]=r.dr;

StringGrid1->Cells[6][N]=r.fam;

StringGrid1->Cells[7][N]=r.imja;

StringGrid1->Cells[8][N]=r.otch;

N++;

}

}

infile.close();

}

StatusBar1->Panels->Items[0]->Text="";

}

//---------------------------------------------------------------------------

 

void __fastcall TPagesDlg::N3Click(TObject *Sender)

{//Запись в файл - команда  меню

StatusBar1->Panels->Items[0]->Text="Запись  в файл";

SaveDialog1->FileName="Base.dat";

if(SaveDialog1->Execute())

{int N=1; info r;

ofstream outfile(SaveDialog1->FileName.c_str(),ios::binary);

if(!outfile)

{ShowMessage("Ошибка открытия файла");

return;

}

while(StringGrid1->Cells[8][N]!="")

{strcpy(r.city,StringGrid1->Cells[0][N].c_str());

strcpy(r.vera,StringGrid1->Cells[1][N].c_str());

strcpy(r.pol,StringGrid1->Cells[2][N].c_str());

strcpy(r.ves,StringGrid1->Cells[3][N].c_str());

strcpy(r.rost,StringGrid1->Cells[4][N].c_str());

strcpy(r.dr,StringGrid1->Cells[5][N].c_str());

strcpy(r.fam,StringGrid1->Cells[6][N].c_str());

strcpy(r.imja,StringGrid1->Cells[7][N].c_str());

strcpy(r.otch,StringGrid1->Cells[8][N].c_str());

N++;

outfile.write((char*)&r,sizeof(info));

}

outfile.close(); }

StatusBar1->Panels->Items[0]->Text="";

}

//---------------------------------------------------------------------------

 

void __fastcall TPagesDlg::FormCreate(TObject *Sender)

{//открытие формы из  середины

Application->OnHint = &OnHint; //Необходимо  для  StatusBar1

TRect r1,r2;

r1 = Rect(Left+Width/2,Top+Height/2,Left+Width/2,Top+Height/2);

r2 = BoundsRect;

DrawAnimatedRects(Handle,IDANI_CAPTION,&r1,&r2);

//Заполнение таблицы заголовками

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=0;

}

//---------------------------------------------------------------------------

 

void __fastcall TPagesDlg::ComboBox1Change(TObject *Sender)

{

int N=1;

while(StringGrid1->Cells[0][N]!="")

{if(StringGrid1->Cells[0][N]==ComboBox1->Text)

{Edit1->Text=StringGrid1->Cells[0][N];

Edit2->Text=StringGrid1->Cells[1][N];

Edit3->Text=StringGrid1->Cells[2][N];

Edit4->Text=StringGrid1->Cells[3][N];

Edit5->Text=StringGrid1->Cells[4][N];

Edit6->Text=StringGrid1->Cells[5][N];

Edit7->Text=StringGrid1->Cells[6][N];

Edit8->Text=StringGrid1->Cells[7][N];

Edit9->Text=StringGrid1->Cells[8][N];

}

N++;

}

BitBtn1->Enabled=true;

 BitBtn2->Enabled=true;

}

//---------------------------------------------------------------------------

 

void __fastcall TPagesDlg::PageControl1Change(TObject *Sender)

{

StatusBar1->Panels->Items[0]->Text="Список всех записей";

if (ComboBox1->ItemIndex==-1)

{

BitBtn1->Enabled=false;

BitBtn2->Enabled=false;

}

if(PageControl1->ActivePageIndex==1)

{int N=1;

ComboBox1->Items->Clear();

while(StringGrid1->Cells[0][N]!="")

ComboBox1->Items->Add(StringGrid1->Cells[0][N++]);

ComboBox1->ItemIndex=0;

StatusBar1->Panels->Items[0]->Text="Редактирование и поиск записей";

}

}

//---------------------------------------------------------------------------

 

void __fastcall TPagesDlg::BitBtn1Click(TObject *Sender)

Информация о работе Создание программы для работы с базой данных учёта рождаемости