Автор: Пользователь скрыл имя, 28 Февраля 2013 в 19:28, курсовая работа
В последнее время резко возрос интерес к программированию. Это связано с развитием и внедрением в повседневную жизнь информационно-коммуникационных технологий. Если человек имеет дело с компьютером, то рано или поздно у него возникает желание, а иногда и необходимость, программировать.
Среди пользователей персональных компьютеров в настоящее время наиболее популярно семейство операционных систем Windows и, естественно, что тот, кто собирается программировать, стремится писать программы, которые будут работать в этих системах.
ВВЕДЕНИЕ 3
ГЛАВА I. ХАРАКТЕРИСТИКА КОМПОНЕНТОВ.
ПОЛЬЗОВАТЕЛЬСКИЙ ИНТЕРФЕЙС 4
1.1. Компоненты, использованные в базе данных «Каталог книг» 4
1.2. Характеристика компонентов ввода и отображения текстовой информации 4
1.3. Кнопки 6
1.4. Характеристика компонента Timer 8
1.5. Компоненты меню 9
1.6. Компоненты, обеспечивающие доступ к базе данных 11
1.7. Просмотр базы данных 15
1.8. Пользовательский интерфейс 21
ГЛАВА II. СОЗДАНИЕ БАЗЫ ДАННЫХ «КАТАЛОГ КНИГ» 22
2.1. База данных 22
2.2. Классификация баз данных 22
2.3. Структура базы данных 24
2.4. Модель базы данных в Delphi 25
2.5. Псевдоним базы данных 26
2.6. Создание базы данных «Каталог книг» 26
2.7. Создание каталога 27
2.8. Создание псевдонима 27
2.9. Создание таблицы 29
Глава III. СОЗДАНИЕ СПРАВОЧНО-ИНФОРМАЦИОННОЙ СИСТЕМЫ 36
ЗАКЛЮЧЕНИЕ 43
СПИСОК ИСПОЛЬЗОВАННОЙ ЛИТЕРАТУРЫ 44
ПРИЛОЖЕНИЕ 45
Примечания:
Файл, указаный в параметре FileName может быть файлом документа или исполнимым файлом. Если это файл документа, функция ShellExecute открывает его или выводит на печать, основываясь на значении параметра Operation. Если же файл является исполнимым файлом, функция ShellExecute открывает его, даже если в параметре Operation задана печать.
Вы можете использовать ShellExecute чтоб
Чтобы открыть папку, используйте один из следующих вызывов:
ShellExecute(handle,nil,путь_
или
ShellExecute(handle,'open',пут
(См. Рис. 1)
Чтобы исследовать папку с помощью эксплорера используйте следующий вызов:
ShellExecute(handle,'explore',
(См. Рис. 2)
Если Operation - nil, функция открывает файл указаный в параметре FileName. Если Operation - 'open' или 'explore' функция будет приудительно открывать окно или эксплорер.
Рис.1 Так открывается папка, если в параметре Operation значение nil или 'open' |
Рис.2 А так открывается папка, если в параметре Operation значение 'explore' |
И напоследок. В shell32.dll функции ShellExecute нет. Вместо нее имеются функции ShellExecuteA (работает с параметрами в ANSI) и ShellExecuteW (работает с параметрами в unicode):
А из модуля ShellApi под именем функции ShellExecute вызывается функция ShellExecuteA. Поэтому, если вы не хотите подключать модуль ShellApi к проекту, а желаете обращаться к shell32.dll напрямую, используйте одну из этих функций.
ЗАКЛЮЧЕНИЕ
В заключение я бы хотел сказать, на примере этого задания я научился разрабатывать базы данных средней сложности. Ознакомился с компонентами, которые необходимы для разработки базы данных, изучил свойства этих компонентов.
Так же научился связывать между собой окна приложения, создавать псевдонимы баз данных, разрабатывать структуру таблицы.
В общем созданная мной база данных очень проста в использовании, не требует к себе дополнительной справочной системы. Пользователи этой базы данных могут беспрепятственно вводить новые данные и изменять прежние, так как здесь не запрещено удаление и добавление данных
Созданная база данных помогла мне не только освоить применение различных компонентов языка программирования Delphi, но и самому применять их при составлении программы.
Кроме того, заполнение таблиц программным
способом помогает овладеть возможностями
данного языка
СПИСОК ИСПОЛЬЗОВАННОЙ ЛИТЕРАТУРЫ
10) Эбнер Михаэль. Delphi 5. Руководство разработчика. Киев, 2000.
11) Архангельский
А. Я. Справочное пособие по De
2000.
12) Бобровский В.А. Delphi 5. Начальный курс. – СПб., 1998.
13) Пачек Ксавье. Программирование в Delphi 5 (2тома). Руководство разработчика. М.: Нолидж, 2000.
14) Свиридов С. и
др. Создание мультимедийных
Приложение
Листинг программы
unit uMain;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, Menus, ImgList, ComCtrls, ToolWin, ActnList, uStruct;
type
TfmMain = class(TForm)
mmMain: TMainMenu;
miFile: TMenuItem;
miExit: TMenuItem;
cbrMain: TCoolBar;
tbMain: TToolBar;
ilMain: TImageList;
alMain: TActionList;
miEdit: TMenuItem;
actAddNewEntry: TAction;
miAddNewEntry: TMenuItem;
tbtAddNewEntry: TToolButton;
stbMain: TStatusBar;
tbtEditEntry: TToolButton;
tbtDeleteEntry: TToolButton;
tbtCreate: TToolButton;
tbtOpen: TToolButton;
tbtSeparator1: TToolButton;
lvMain: TListView;
tbtSeparator2: TToolButton;
tbtSearch: TToolButton;
miHelp: TMenuItem;
miAbout: TMenuItem;
odMain: TOpenDialog;
actIndexFile: TAction;
tbtIndexFile: TToolButton;
miView: TMenuItem;
miIndexFile: TMenuItem;
actEditEntry: TAction;
miEditEntry: TMenuItem;
actDeleteEntry: TAction;
miDeleteEntry: TMenuItem;
actCreate: TAction;
miSeparator1: TMenuItem;
miCreate: TMenuItem;
actOpen: TAction;
miOpen: TMenuItem;
actSearch: TAction;
miSeparator2: TMenuItem;
miSearch: TMenuItem;
procedure miExitClick(Sender: TObject);
procedure actAddNewEntryExecute(Sender: TObject);
procedure FormCreate(Sender: TObject);
procedure miAboutClick(Sender: TObject);
procedure FormDestroy(Sender: TObject);
procedure actIndexFileExecute(Sender: TObject);
procedure lvMainSelectItem(Sender: TObject; Item: TListItem;
Selected: Boolean);
procedure actEditEntryExecute(Sender: TObject);
procedure actDeleteEntryExecute(Sender: TObject);
procedure lvMainDblClick(Sender: TObject);
procedure actCreateExecute(Sender: TObject);
procedure actOpenExecute(Sender: TObject);
procedure actSearchExecute(Sender: TObject);
private
public
end;
var
fmMain: TfmMain;
ComputerFile: TComputerFile;
IndexFile: TIndexFile;
implementation
uses
uAbout, uAddEditEntry, uIndexFile, uSearch;
{$R *.dfm}
procedure TfmMain.miExitClick(Sender: TObject);
begin
Close;
end;
procedure AddComputerRecToList(Computer: TComputer);
begin
with fmMain.lvMain.Items.Add, Computer do
begin
Caption:=CPU;
SubItems.Add(IntToStr(
SubItems.Add(IntToStr(
SubItems.Add(OS);
SubItems.Add(IntToStr(Cost));
end;
end;
procedure AddIndexRecToList(IndexRec: TIndex);
begin
with fmIndexFile.lvMain.Items.Add, IndexRec do
begin
Caption:=CPU;
SubItems.Add(IntToStr(Idx));
end;
end;
procedure TfmMain.actAddNewEntryExecute(
var
Computer: TComputer;
Index, TempIndex: TIndex;
begin
fmAddEditEntry:=TfmAddEditEntr
try
fmAddEditEntry.Caption:='
fmAddEditEntry.ShowModal;
if fmAddEditEntry.ModalResult=
begin
Computer.CPU:=fmAddEditEntry.
Computer.RAMTotalSpace:=fmAddE
Computer.HDDTotalSpace:=
Computer.OS:=fmAddEditEntry.
Computer.Cost:=fmAddEditEntry.
Seek(ComputerFile, FileSize(ComputerFile));
Write(ComputerFile, Computer);
AddComputerRecToList(Computer)
Index.CPU:=Computer.CPU;
Index.Idx:=lvMain.Items.Count-
Seek(IndexFile, 0);
if not EOF(IndexFile) then
begin
Seek(IndexFile, FileSize(IndexFile));
repeat
Seek(IndexFile, FilePos(IndexFile)-1);
Read(IndexFile, TempIndex);
if TempIndex.CPU > Index.CPU then
begin
Write(IndexFile, TempIndex);
Seek(IndexFile, FilePos(IndexFile)-2);
end;
until
(FilePos(IndexFile)=0) or (TempIndex.CPU <= Index.CPU);
end;
Write(IndexFile, Index);
with fmIndexFile.lvMain.Items.Inser
begin
Caption:=Computer.CPU;
SubItems.Add(IntToStr(lvMain.
end;
end;
finally
fmAddEditEntry.Free;
end;
end;
procedure Sort(var A: array of TIndex);
procedure QuickSort(var A: array of TIndex; iLo, iHi: Integer);
var
Lo, Hi: Integer;
Mid, T: TIndex;
begin
Lo:=iLo;
Hi:=iHi;
Mid:=A[(Lo + Hi) div 2];
repeat
while A[Lo].CPU < Mid.CPU do
Inc(Lo);
while A[Hi].CPU > Mid.CPU do
Dec(Hi);
if Lo <= Hi then
begin
T:=A[Lo];
A[Lo]:=A[Hi];
A[Hi]:=T;
Inc(Lo);
Dec(Hi);
end;
until
Lo > Hi;
if Hi > iLo then
QuickSort(A, iLo, Hi);
if Lo < iHi then
QuickSort(A, Lo, iHi);
end;
begin
QuickSort(A, Low(A), High(A));
end;
procedure CreateIndexFile(const sFileName: String);
var
Computer: TComputer;
Index: TIndex;
IndexArr: array of TIndex;
N, i: Integer;
begin
N:=FileSize(ComputerFile);
AssignFile(IndexFile, sFileName);
Rewrite(IndexFile);
if N=0 then
Exit;
SetLength(IndexArr, N);
try
Seek(ComputerFile, 0);
for i:=0 to N-1 do
begin
Read(ComputerFile, Computer);
Index.CPU:=Computer.CPU;
Index.Idx:=i;
IndexArr[i]:=Index;
end;
Sort(IndexArr);
for i:=0 to N-1 do
begin
Index:=IndexArr[i];
Write(IndexFile, Index);
AddIndexRecToList(Index);
end;
finally
IndexArr:=nil;
end;
end;
procedure OpenIndexFile(const sFileName: String);
var
Index: TIndex;
begin
AssignFile(IndexFile, sFileName);
Reset(IndexFile);
while not EOF(IndexFile) do
begin
Read(IndexFile, Index);
AddIndexRecToList(Index);
end;
end;
procedure CheckIndexFile(const sFileName: String);
begin
if FileExists(sFileName) then
OpenIndexFile(sFileName)
else
CreateIndexFile(sFileName);
end;
procedure OpenDBFile(const sFileName: String);
var
Computer: TComputer;
begin
AssignFile(ComputerFile, sFileName);
Reset(ComputerFile);
while not EOF(ComputerFile) do
begin
Read(ComputerFile, Computer);
AddComputerRecToList(Computer)
end;
CheckIndexFile(ChangeFileExt(
end;
procedure CreateDBFile(const sFileName: String);
begin
AssignFile(ComputerFile, sFileName);
Rewrite(ComputerFile);
CreateIndexFile(ChangeFileExt(
end;
procedure TfmMain.FormCreate(Sender: TObject);
begin
fmIndexFile:=TfmIndexFile.
if FileExists('data.db') then
OpenDBFile('data.db')
else
CreateDBFile('data.db');
end;
procedure TfmMain.miAboutClick(Sender: TObject);
begin
fmAbout:=TfmAbout.Create(Self)
try
fmAbout.ShowModal;
finally
fmAbout.Free;
end;
end;
procedure TfmMain.FormDestroy(Sender: TObject);
begin
CloseFile(ComputerFile);
CloseFile(IndexFile);
fmIndexFile.Free;
end;
procedure TfmMain.actIndexFileExecute(
begin
fmIndexFile.Visible:=
end;
procedure TfmMain.lvMainSelectItem(
Selected: Boolean);
begin
actEditEntry.Enabled:=lvMain.
actDeleteEntry.Enabled:=
end;
procedure TfmMain.actEditEntryExecute(
var
s: String;
Idx: Integer;
Computer: TComputer;
Index, TempIndex: TIndex;
OldFPos, NewFPos: Integer;
begin
fmAddEditEntry:=
try
fmAddEditEntry.Caption:='
s:=lvMain.Selected.Caption;
fmAddEditEntry.edCPU.Text:=s;
fmAddEditEntry.edOS.Text:=
fmAddEditEntry.sedRAMSpace.
fmAddEditEntry.sedHDDSpace.
fmAddEditEntry.sedCost.Value:=
fmAddEditEntry.ShowModal;
if fmAddEditEntry.ModalResult=
begin
Computer.CPU:=fmAddEditEntry.
Computer.RAMTotalSpace:=
Computer.HDDTotalSpace:=
Computer.OS:=fmAddEditEntry.
Computer.Cost:=fmAddEditEntry.
Idx:=lvMain.Selected.Index;
Seek(ComputerFile, Idx);
Write(ComputerFile, Computer);
with lvMain.Selected, Computer do
begin
Caption:=CPU;
SubItems[0]:=IntToStr(
SubItems[1]:=IntToStr(
SubItems[2]:=OS;
SubItems[3]:=IntToStr(Cost);
end;
if Computer.CPU = s then
Exit;
Seek(IndexFile, 0);
repeat
Read(IndexFile, Index);
until
Index.Idx = Idx;
OldFPos:=FilePos(IndexFile)-1;
Index.CPU:=Computer.CPU;
if Index.CPU < s then
begin
if OldFPos > 0 then
begin
repeat
Seek(IndexFile, FilePos(IndexFile)-2);
Read(IndexFile, TempIndex);
if TempIndex.CPU > Index.CPU then
begin
Write(IndexFile, TempIndex);
Seek(IndexFile, FilePos(IndexFile)-1);
end;
until
(FilePos(IndexFile) = 1) or (TempIndex.CPU <= Index.CPU);
if TempIndex.CPU > Index.CPU then
Seek(IndexFile, FilePos(IndexFile)-1);
Write(IndexFile, Index);
end;
end
else
begin
if OldFPos < FileSize(IndexFile) - 1 then
begin
repeat
Read(IndexFile, TempIndex);
if TempIndex.CPU < Index.CPU then
begin
Seek(IndexFile, FilePos(IndexFile)-2);
Write(IndexFile, TempIndex);
Seek(IndexFile, FilePos(IndexFile)+1);
end;
until
(EOF(IndexFile)) or (TempIndex.CPU >= Index.CPU);
if TempIndex.CPU < Index.CPU then
Seek(IndexFile, FilePos(IndexFile)-1)
else
Seek(IndexFile, FilePos(IndexFile)-2);
Write(IndexFile, Index);
end;
end;
NewFPos:=FilePos(IndexFile)-1;
fmIndexFile.lvMain.Items.Delet
with fmIndexFile.lvMain.Items.
begin
Caption:=CPU;
SubItems.Add(IntToStr(Idx));
end;
end;
finally
fmAddEditEntry.Free;
end;
end;
procedure TfmMain.actDeleteEntryExecute(