Базы данных. Создание программы "Телефонный справочник"
СОВРЕМЕННЫЙ ГУМАНИТАРНЫЙ
Филиал ______________________________
Курсовая
работа
По дисциплине
Программирование на
языке высокого уровня________________
Тема__Базы данных.
Создание программы
телефонный справочник
Выполнил студент
Трифонов Александр
Владимирович
№ контракта 09208060601010
№ группы
______________
Подпись студента
________ Дата сдачи работы «____»________200_г
Курсовая работа к аттестации допущена
Руководитель
______________________________
«__»______200_г
Работа принята
______________________________
«___»______200_г
Оглавление
Введение……………………………………………………….
Назначение и область применения…………….5
Постановка задачи и разработка
Алгоритма решения задачи…………………….6
Заключение……………………………………………………
Список использованной литературы………………………..16
Введение
В этой курсовой пойдет речь о языке программирования Delphi и о базах данных.
Процесс
разработки в Delphi предельно упрощен.
В первую очередь это
Как
уже говорилось ранее, в Delphi
используется язык Object Pascal, который
постоянно расширяется и
Вы можете создавать свои собственные компоненты, импортировать ОСХ-компоненты, создавать <шаблоны> проектов и <мастеров>, создающих <заготовки> проектов. Мало того, Delphi предоставляет разработчику интерфейс для связи ваших приложений (или внешних программ) с интегрированной оболочкой Delphi (IDE).
Таким
образом, вы можете
Назначение и область применения
Программа телефонный
справочник предназначена для хранения
телефонных номеров на компьютере.
В ней присутствуют такие элементы
как поиск по номеру, имени, улице,
а так же сортировка.
Постановка задачи и разработка алгоритма
решения задачи
Необходимо создать приложение позволяющие создать базу данных, делать сортировку базы данных, производить новые записи или удаление полей базы данных.
Приложение телефонный справочник
Чтобы базу данных
можно было переносить с компьютера
на другой компьютер программа должна
сама создавать алиасы. Так как dBase сохраняет
базу данных в виде файла с названием базы
dBase.DBF. Удобно не просто указывать путь
доступа к таблицам базы данных, а использовать
для этого некий заменитель - псевдоним,
называемый алиасом.
Алиас
сохраняется в отдельном
Для
создания алиаса запустите
Рис. 1: Главное окно утилиты конфигурации BDE
Главное окно утилиты
настройки BDE имеет вид, изображенный
на рис.1.
Рис. 2: В диалоговом окне добавления
нового алиаса можно указать тип
базы данных
Выберите в меню “Object” пункт “New”. В появившемся диалоговом окне выберите имя драйвера базы данных. Тип алиаса может быть стандартным (STANDARD) для работы с локальными базами в формате dBase или Paradox или соответствовать наименованию SQL-сервера (InterBase, Sybase, Informix, Oracle и т.д.).
После
создания нового алиаса следует дать ему
имя. Это можно сделать с помощью подпункта
“Rename” меню “Object”. Однако просто создать
алиас не достаточно. Вам нужно указать
дополнительную информацию, содержание
которой зависит от типа выбранной базы
данных. Например, для баз данных Paradox и
dBase (STANDARD) требуется указать лишь путь
доступа к данным, имя драйвера и флаг
ENABLE BCD, который определяет, транслирует
ли BDE числа в двоично-десятичном формате
(значения двоично-десятичного кода устраняют
ошибки округления):
| TYPE | STANDARD |
| DEFAULT DRIVER | PARADOX |
| ENABLE BCD | FALSE |
| PATH | c:\users\data |
SQL-сервер InterBase
и другие типы баз данных
требуют задания большого
Ниже приведен листинг программы которая производит индексацию и проверку базы данных, а также изображение работы программы (PROGRESS.PAS):
Рис.1 Индексация базы данных.
unit Progress;
interface
uses
Windows, SysUtils, Classes, Forms, Dialogs, StdCtrls,
DB, DBTables, Controls, ComCtrls, Registry,ShellApi, Messages, Graphics,
ExtCtrls ;
const
MM_BASE = WM_USER;
MM_OKSTART = MM_BASE + $1;
MM_DATAERROR = MM_BASE + $2;
MM_KeyDown = MM_BASE + $3;
MM_ENDTHREAD = MM_BASE + $4;
type
TMainForm = class(TForm)
ProgressBar1: TProgressBar;
lbPersent: TLabel;
Table2: TTable;
Image1: TImage;
Table1: TTable;
Timer1: TTimer;
lbMessage: TLabel;
procedure FormCreate(Sender: TObject);
procedure ProgressAOM (var MSG: tagMSG; var Handled: boolean);
procedure DataError(var Message: TMessage); message MM_DATAERROR;
procedure Timer1Timer(Sender: TObject);
procedure EndThread(var Message:TMessage); message MM_ENDTHREAD;
private
IsCanStart: boolean;
FStartTime: cardinal;
function SearchFile(FileName: string): boolean;
public
{ Public declarations }
end;
type EPhoneException = class (Exception);
var
MainForm: TMainForm;
tick: cardinal;
IsFirst : boolean = true;
const
sDataFile = 'Data.dbf';
sIndexFile = 'Data.mdx';
sBuffFile = 'DataBuff.dbf';
sBuffFile2 = 'DataBuff2.dbf';
sShortappname = 'LutskPhone';
sIniFile = 'options.ini';
sDataFileError = 'Ошибка при работе с базой данных '+#10#13+'Проверьте наличии файла базы!';
sBDEError = 'Ошибка работы с BDE!';
implementation
uses Teldov, Thread, ActiveX, ComObj, ShlObj;
{$R *.dfm}
procedure TMainForm.FormCreate(Sender: TObject);
var
mess: tagmsg;
handled :boolean;
begin
try
IsCanStart := false;
Top := (Screen.Height - Height) div 2-200;
Left := (Screen.Width - Width) div 2;
Application.OnMessage := ProgressAOM ;
// создание ярлыка, запись в реестр
try
Table1.TableName := sBuffFile;// Check BDE
Table1.CreateTable;
Table1.Close;
//
ShowMessage(DBIgetErrorString)
DeleteFile(ExtractFilePath(
except
raise
EPhoneException.Create(
end;
if not SearchFile(sDataFile)
then raise EPhoneException.Create(
if not SearchFile(sIndexFile)
then DataThread.create(false)
else IsCanStart := true;
except
on E: Exception do
begin
MessageDlg(e.Message, mtError, [mbOk],0);
PostMessage(MainFOrm.Handle, MM_DATAERROR, 0, 0);
end;
end;
Invalidate;
end;
procedure TMainForm.ProgressAOM (var MSG: tagMSG; var Handled: boolean);
begin
if MSG.message = MM_OKSTART then
begin
Timer1.Enabled := false;
Application.CreateForm(
MainFOrm.Hide;
PhoneForm.Show;
Application.OnMessage := PhoneForm.AOM;
end;
end;
function TMainForm.SearchFile(FileName: string): boolean;
var
CurrFile : TSearchRec;
begin
if FindFirst(GetCurrentDir +'\'+FileName, faAnyFile, CurrFIle)=0
then Result := true
else Result := false;
end;
procedure TMainForm.DataError(var Message: TMessage);
begin
Close;
end;
procedure TMainForm.Timer1Timer(Sender: TObject);
begin
if IsFirst then
begin
IsFirst := false;
FStartTime := 0; // GetTickCount;
end;
if IsCanStart then
begin
Tick := GetTickCount;
if Tick > (FStartTime + 0) // 1000
then PostMessage(MainFOrm.Handle, MM_OKSTART, 1, 0);
end
end;
procedure TMainForm.EndThread(var Message: TMessage);
begin
Image1.Visible := true;
Caption := '';
lbPersent.Visible := false;
lbMessage.Visible := false;
ProgressBar1.Visible := false;
IsCanStart := true;
end;
end.
После индексации
базы данных и проверки её на существование
запускается программа для
Рис.2 Главное
окно программы.
На рисунке 3 показан результат поиска в базе данных по номеру телефона.
Рис. 3 Поиск в базе данных по номеру телефона.
База данных
состоит из шести полей : номер
телефона, ФИО, улица, номер дома,
номер квартиры, категория.Что соответствует
полям в базе данных: номер телефона –
NUMTEL, ФИО - FAMIL, улица - STREET, номер дома - HOUSE,
номер квартиры - KVART, категория – PR09.
Заключение
В результате выполнения
курсовой работы мною было создано приложение
для работы с базой данных (dBase) создание
алиасов к базе данных.
Список использованной литературы
1. А. Я. Архангельский Программирование в Delphi 7.2003г.
2. Никита Культин.
Основы программирования в
3. Delphi 7. Учебный курс. Бобровский С.
5.Бобровский С.И. Delphi 5 – М.: Питер, 2002
6. Delphi 5.0, учебный курс, Фараонов В.В., ISBN 5-8952-020-4, 400 с
7. Фаронов В. В. DELPHI 6: Учебный курс (+ дискета) – СПб: Питер, 2002.
8. Фаронов В.В. Программирование
баз данных в Deiphi 7. Учебный курс.
приложение
листинг программы (TElDov.pas)
unit TElDov;
interface
uses
Windows, SysUtils, Thread, Progress, ExtCtrls, ComCtrls, Menus,
ToolWin, DBCtrls, ImgList, Classes, Controls, StdCtrls, Grids,
DB, DBTables, DBGrids,
Forms, Messages, Dialogs,Clipbrd;
type
TPhoneForm = class(TForm)
DataSource1: TDataSource;
Table1: TTable;
StatusBar1: TStatusBar;
GroupBox1: TGroupBox;
Search: TButton;
ToolBar1: TToolBar;
ExitButton: TToolButton;
SearchButton: TToolButton;
HelpButton: TToolButton;
DBGrid1: TDBGrid;
ImageList1: TImageList;
SortButton: TToolButton;
PopupMenu1: TPopupMenu;
ImageList2: TImageList;
ToolButton2: TToolButton;
ToolButton3: TToolButton;
ToolButton4: TToolButton;
ToolButton5: TToolButton;
ToolButton6: TToolButton;
ToolButton7: TToolButton;
ToolButton8: TToolButton;
PopupMenu2: TPopupMenu;
DBNavigator1: TDBNavigator;
procedure FormCreate(Sender: TObject);
procedure SearchClick(Sender: TObject);
procedure AOM(var Msg: tagMSG; var Handled: Boolean);
procedure MyPopupHandler(Sender: TObject);
procedure MyPopupHandler2(Sender: TObject);
procedure MyEditPopup(Sender: TObject; MousePos: TPoint; var Handled: Boolean);
procedure FormClose(Sender: TObject; var Action: TCloseAction);
procedure MInMaxSize(var Message: TMessage); message WM_GETMINMAXINFO;
procedure N20Click(Sender: TObject);
procedure N13Click(Sender: TObject);
procedure N14Click(Sender: TObject);
procedure N15Click(Sender: TObject);
procedure N16Click(Sender: TObject);
procedure ExitButtonClick(Sender: TObject);
procedure SearchButtonClick(Sender: TObject);
procedure HelpButtonClick(Sender: TObject);
procedure FormDestroy(Sender: TObject);
private
procedure CreatePopupFields;
procedure UpdateStatusBar;
procedure CalculateEditSize;
procedure SortMode (Sender: tObject);
procedure ReadIni;
procedure WriteIni; // Ini-file
public
end;
var
PhoneForm: TPhoneForm;
Inputs : array [0..4] of TEdit;
MyThread: DataThread;
bool: boolean;
ColumnIndex: integer;
const
SortName : array[0..2] of string =('по Телефону','по Имени','по Улице');
IndexName : array [0..2]
of string =('ByNumTel','ByFamil','
COPY_TO_CLIPBOARD = 'Копировать';
PASTE_FROM_CLIPBOARD
= 'Вставить';
function IndexOfItem(Item:
string): integer;
implementation
uses IniFiles, DBITypes, DBIProcs, Graphics,ShellApi;
{$R *.dfm}
procedure TPhoneForm.FormCreate(Sender: TObject);
begin
Table1.TableName := sDataFile;
Table1.Open;
CreatePopupFields;
CalculateEditSize;
UpDateStatusBar;
ReadIni;
Application.onMessage := Aom;
Application.HelpFile := sHelpFile;
end;
procedure TPhoneForm.MyPopupHandler(
begin
if Sender is TMenuItem then with (Sender as TMenuItem) do
begin
case tag of
0..2: begin Table1.IndexName := IndexName[(Sender as TMenuItem).tag ];
SortMode(Sender);
end;
4: Clipboard.AsText := DBGrid1.SelectedField.
end;
UpdateStatusBar;
end;
end;
procedure TPhoneForm.CreatePopupFields;
var
i: integer;
MyPopupMenuItem : array [0..4] of TMenuItem;
MenuItem: TMenuItem;
begin
for i := 0 to 4 do
begin
Inputs[i] := TEdit.Create(self);
Inputs[i].Parent := GroupBox1;
Inputs[i].PopupMenu := PopupMenu2;
Inputs[i].OnContextPopup := MyEditPopup;
Inputs[i].Tag := i;
end;
for i := 0 to 4 do with PopupMenu1 do
begin
MyPopupMenuItem[i] := TMenuItem.Create(self);
if i<3 then MyPopupMenuItem[i].Caption := SortName[i];
MyPopupMenuItem[i].Tag := i;
MyPopupMenuItem[i].OnClick := MyPopupHandler;
PopupMenu1.Items.add(
end;
MyPopupMenuItem[3].Caption := '-';
MyPopupMenuItem[4].Caption := COPY_TO_CLIPBOARD;
MyPopupMenuItem[4].ShortCut := ShortCut(Word('C'), [ssCtrl]);
PopupMenu1.Items[0].Checked
:= true;
MenuItem := TMenuItem.Create(self);
MenuItem.Caption := PASTE_FROM_CLIPBOARD;
MenuItem.OnClick := MyPopupHandler2;
PopupMenu2.Items.add(MenuItem)
MyEditPopup(nil, Point(0,0), bool);
end;
procedure TPhoneForm.CalculateEditSize;
var
i: integer;
OffSet: integer;
begin
offset :=13;
for i := 0 to 4 do
begin
Inputs[i].Left := Offset;
Offset := Offset + DbGrid1.Columns[i].width + 8;
Inputs[i].Width := DBGrid1.Columns[i].width;
Inputs[i].Top := 24;
Inputs[i].MaxLength :=Table1.Fields[i].Size;
end;
end;
procedure TPhoneForm.UpdateStatusBar;
var SortMode: string;
begin
statusBar1.Panels[0].Text := ' Найдено абонентов: '+ InttoStr(Table1.RecordCount);
Sortmode := SortName[0];
if PopupMenu1.Items[1].Checked then sortMode := SortName[1];
if PopupMenu1.Items[2].Checked then sortMode := SortName[2];
statusbar1.Panels[1].Text := ' Отсортировано: '+SortMode;
end;
procedure tPhoneForm.AOM(var Msg: tagMSG; var Handled: Boolean);
var key : word;
begin
handled := false;
if msg.message = Wm_keydown then
begin
key := msg.wParam;
handled := true;
case key of
vk_up: SendMessage(DBGrid1.Handle,wm_
vk_Down: SendMessage(DBGrid1.Handle,wm_
vk_Prior: SendMessage(DBGrid1.Handle,wm_
vk_Next: SendMessage(DBGrid1.Handle,wm_
vk_return: Search.OnClick(Search);
vk_f1: Application.HelpCommand(HELP_
else handled := false;
end;
end;
end;
procedure TPhoneForm.SearchClick(Sender: TObject);
var
filters: string;
i: integer;
begin

- Базы данных Субд
- Базы данных торговой фирмы
- Байкал - жемчужина Сибири
- Байкальская горная страна
- Байкальский рифт
- Байланыс желілерін талдау
- Байланыс желісі және коммутация жүйелері
- Базы данных и системы управления базами данных
- Базы данных и управление ими
- Базы данных. Реляционные базы данных. Язык SQL
- Базы данных "Ремонт компьютеров"
- Базы данных розничной клиентуры
- Базы данных «Санаторий»
- Базы данных. Системы управления базами данных