Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

kursovaya_Builder

.doc
Скачиваний:
25
Добавлен:
26.05.2015
Размер:
72.7 Кб
Скачать

Курсовая в среде Borland Builder.

Рассматриваемый далее проект реализует базу данных сотрудников. Имя класса – штат (staff), поля – имя (name), должность (job) и оклад (pay). Контейнер (таблица) называется crew (штат, шайка, экипаж и т.п.). Вы должны назвать класс соответственно теме Вашего проекта. Естественно названия полей и контейнера так же необходимо поменять. Обратите внимание, что свойство Name редактируемых полей формы включает в себя класс визуального компонента и имя поля Вашего класса. Это необязательно, но очень удобно при написании кода. Так же из соображений удобства свойство Name кнопок включает в себя имя операции над базой данных.

Запустите Borland Builder. Создайте новый проект – тип Application Form.

Сохраните проект (Save Project As) в папке на рабочем столе. Будьте внимательны – будет предложено сохранить две группы файлов Unit (форма) и Project (проект). В каждой группе по три файла, плюс еще один, дополнительный. Откройте папку и запишите имена этих семи файлов – именно их надо сохранять и переносить, это исходники.

Вы находитесь в режиме проектирования формы (design). Перейдите в окно кода – выберите файл формы типа h, по умолчанию - Unit1.h. Добавьте после последней директивы #include… инструкции:

#include <vector.h>

#include <algorith.h>

struct staff{

char name[50];

char job[20];

int pay;

friend bool operator<(const staff& a,const staff& b)

{ return a.pay<b.pay; } // for sort by pay

friend bool operator==(const staff& a,const staff& b)

{ return a.pay==b.pay; } // for search by pay

};

using namespace std;

extern vector <staff> crew;

extern int iMax,iCur;

Теперь выберите файл формы типа cpp, по умолчанию - Unit1. cpp. Добавьте после объявления TForm1 *Form1; инструкции:

vector <staff> crew;

int iMax=0,iCur=0;

Вернитесь в режим проектирования формы (design для Builder 2009).

Поместите на форму компонент TLabel, это метка (надпись). Выберите этот компонент на форме и в окне инспектора задайте свойство Auto Size = false, а свойство Caption = имя. Добавьте на форму компонент TEdit (редактируемое поле) и задайте его свойства: Text – пустое значение, Name = EditName.

Аналогично добавьте еще две пары метка – поле: TLabel (Auto Size = false, Caption = должность), TEdit (Name = EditJob, Text – пустое значение) и TLabel (Auto Size = false, Caption = оклад), TEdit (Name = EditPay, Text – пустое значение).

Поместите внизу на форму еще один компонент TLabel для вывода номера текущей записи. Задайте свойство Auto Size = false, свойство Name = LabelNum, а свойство Caption = 0 (ноль).

Поместите на форму кнопку – компонент TButton. Задайте свойства кнопки: Caption = добавить, Name = ButtonAdd. Для создания кода, выполняемого при нажатии на кнопку, дважды щелкните по этой кнопке. Вы попадете в режим редактирования кода. При этом будет создана заготовка функции, вызываемой при щелчке по кнопке:

void __fastcall TForm1::ButtonAddClick(TObject *Sender)

{

}

Добавьте между фигурными скобками следующие инструкции:

crew.push_back(staff());

strcpy(crew[iMax].name,EditName->Text.c_str()); // t_str() for Builder 2009

strcpy(crew[iMax].job,EditJob->Text.c_str()); // t_str() for Builder 2009

crew[iMax].pay=EditPay->Text.ToIntDef(0);

iCur=iMax; iMax++;

LabelNum->Caption= IntToStr(iMax);

Добавьте «вручную» в класс формы функцию, выводящую выбранную запись базы данных в окно формы. Для этого опять выберите файл формы с расширением h. Добавьте после инструкции:

public: // User declarations

строчку:

void __fastcall ShowRecord();

Выберите файл формы с расширением cpp. Добавьте в конец файла код функции:

void __fastcall TForm1::ShowRecord()

{

EditName->Text=crew[iCur].name;

EditJob->Text=crew[iCur].job;

EditPay->Text=IntToStr(crew[iCur].pay);

LabelNum->Caption=IntToStr(iCur+1);

}

Вернитесь в режим проектирования формы (design). Добавьте слева от надписи, предназначенной для вывода номера текущей записи кнопку TButton. Задайте свойства кнопки: Caption = <<, Name = ButtonPrev. Справа от надписи еще одну кнопку (Caption = >>, Name = ButtonNext). Эти кнопки предназначены для навигации по записям базы данных.

Выберите кнопку ButtonPrev. Дважды щелкните по ней и в созданную заготовку функции добавьте инструкции:

if(iCur<=0) return;

iCur--; ShowRecord();

Аналогично создайте функцию для кнопки ButtonNext. Соответствующий код:

if(iCur>=iMax-1) return;

iCur++; ShowRecord();

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

В начало файла формы с расширением h или файла формы с расширением cpp добавьте директиву:

#include <stdio.h>

Добавьте на форму кнопки «сохранить» и «открыть». Код для кнопки «сохранить» может быть следующим:

SaveDialog1->Execute();

FILE *f=fopen(SaveDialog1->FileName.c_str(),"wb"); // t_str() for Builder 2009

if(f)fwrite(&crew[0],sizeof(staff),iMax,f);

else ShowMessage("file error");

fclose(f);

А код кнопки «открыть» таким:

OpenDialog1->Execute();

FILE *f=fopen(OpenDialog1->FileName.c_str(),"rb"); // t_str() for Builder 2009

if(f==0){

ShowMessage("file error");return;

}

for(int i=0;i<crew.max_size();i++){

staff s;

fread(&s,sizeof(staff),1,f);

if(feof(f)) break;

crew.push_back(s);

}

fclose(f);

iMax=crew.size(); iCur=0; ShowRecord();

Далее реализуем операции поиска и сортировки записей базы данных по окладу сотрудника. Поместите на форму компонент TEdit (редактируемое поле) и задайте его свойства: Text = 0 , Name = EditName. Добавьте на форму кнопки «искать» и «сортировать». Код для кнопки «сортировать» может быть следующим:

sort(crew.begin(),crew.end());

iCur=0; ShowRecord();

А код кнопки «искать» таким:

staff s;

vector <staff>::iterator p;

s.pay=EditSearch->Text.ToIntDef(0);

s.pay=EditSearch->Text.ToIntDef(0);

p=find(crew.begin(),crew.end(),s);

iCur=p-crew.begin(); ShowRecord();

Замечание: Эти коды не устойчивы. Не хватает проверок на случай пустой базы данных, безуспешного поиска и т.п. Более аккуратную реализацию этих, а так же других операций можно найти в пособии: «Маслянкин В.И. Разработка Windows – приложений в среде Borland».

Возможный дизайн главного окна (формы) приведен ниже:

В пояснительной записке нужно отметить что:

1. Проект выполнен в среде Borland Builder.

2. Проект состоит из шести основных файлов (здесь приведены имена файлов,

задаваемые по умолчанию):

- Project1.bpr – файл проекта

- Project1.res – ресурсы проекта

- Project1.cpp – функция WinMain (точка входа)

- Unit1.dfm – ресурсы формы

- Unit1.h – объявление класса формы

- Unit1.cpp – реализация класса формы и основных операций

3. Необходимо полностью привести код четырех файлов:

Project1.cpp, Unit1.dfm, Unit1.h и Unit1.cpp

4. Программа написана не Вами и Вы в ней так ничего и не поняли...

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]