Создание баз данных

Автор: Пользователь скрыл имя, 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

Работа содержит 1 файл

Курсовая работа.doc

— 1.55 Мб (Скачать)

Примечания:

Файл, указаный в параметре FileName может быть файлом документа или исполнимым файлом. Если это файл документа, функция ShellExecute открывает его или выводит на печать, основываясь на значении параметра Operation. Если же файл является исполнимым файлом, функция ShellExecute открывает его, даже если в параметре Operation задана печать.

Вы можете использовать ShellExecute чтобы открыть папку или исследовать ее с помощью эксплорера.

Чтобы открыть папку, используйте один из следующих вызывов:

ShellExecute(handle,nil,путь_для_папки,nil,nil,SW_SHOWNORMAL);

или

ShellExecute(handle,'open',путь_для_папки,nil,nil,SW_SHOWNORMAL);

(См. Рис. 1)

Чтобы исследовать папку с помощью эксплорера используйте следующий вызов:

ShellExecute(handle,'explore',путь_для_папки,nil,nil,SW_SHOWNORMAL);

(См. Рис. 2)

Если Operation - nil, функция открывает файл указаный в параметре FileName. Если Operation - 'open' или 'explore' функция будет приудительно открывать окно или эксплорер.

Рис.1 Так открывается папка,

если в параметре Operation 

значение nil или 'open'

Рис.2 А так открывается папка, если в параметре 

Operation значение 'explore'


И напоследок. В shell32.dll функции ShellExecute нет. Вместо нее имеются функции ShellExecuteA (работает с параметрами в ANSI) и ShellExecuteW (работает с параметрами в unicode):

  • function ShellExecuteA(hWnd: HWnd; Operation, FileName, Parameters, Directory: PAnsiChar; ShowCmd: Integer): HINST; stdcall;
  • function ShellExecuteW(hWnd: HWnd; Operation, FileName, Parameters, Directory: PWideChar; ShowCmd: Integer): HINST; stdcall;

А из модуля ShellApi под именем функции ShellExecute вызывается функция ShellExecuteA. Поэтому, если вы не хотите подключать модуль ShellApi к проекту, а желаете  обращаться к shell32.dll напрямую, используйте одну из этих функций.

 

 

 

 

 

 

 

 

 

 

 

 

 

ЗАКЛЮЧЕНИЕ

 

В заключение я бы хотел сказать, на примере  этого задания я научился разрабатывать  базы данных средней сложности. Ознакомился  с компонентами, которые необходимы для разработки базы данных, изучил свойства этих компонентов.

Так же научился связывать между  собой окна приложения, создавать  псевдонимы баз данных, разрабатывать  структуру таблицы.

В общем созданная мной база данных очень проста в использовании, не требует к себе дополнительной справочной системы. Пользователи этой базы данных могут беспрепятственно вводить новые данные и изменять прежние, так как здесь не запрещено удаление и добавление данных  

Созданная база данных помогла мне  не только  освоить применение различных  компонентов  языка программирования  Delphi, но и самому применять их при составлении программы.

Кроме того, заполнение таблиц программным  способом помогает овладеть возможностями  данного языка программирования.

 

 

 

 

 

 

 

 

 

 

 

СПИСОК ИСПОЛЬЗОВАННОЙ ЛИТЕРАТУРЫ

 

  1. Архангельский А. Я. Программирование Delphi 5. – М.: Нолидж, 2000.
  2. Баас Р. и другие.  Delphi 5. Для пользователя. Киев, 2000.            
  3. Бобровский В.А. Delphi 5.Учебный курс.СПб., 2000.
  4. Гофман В., Хомоненко А. Delphi. Быстрый старт. – СПб.: БХВ – Петербург, 2001.
  5. Кандзюба С.П., Громов В.Н. Delphi 6. Базы данных и приложения. Лекции и упражнения. – М.: DiaSoft, 2001.
  6. Культин Н. Delphi 6. Программирование на Object Pascal. – СПб.: БХВ – Петербург, 2001.
  7. Рейсдор Кент ф. Delphi 4. Основной самостоятельно. М.: Бином, 1999.
  8. Фаранов В.В. Учебное пособие по Delphi 4. СПб., 1999.
  9. Фараонов В.В. Профессиональная работа в Delphi 6 – СПб.: Питер, 2002.

    10) Эбнер Михаэль. Delphi 5. Руководство разработчика. Киев, 2000.

    11) Архангельский  А. Я. Справочное пособие по Delphi 5. – М.: Нолидж,

2000.

12) Бобровский В.А. Delphi 5. Начальный курс. – СПб., 1998.

13) Пачек Ксавье. Программирование  в Delphi 5 (2тома). Руководство разработчика. М.: Нолидж, 2000.

14) Свиридов С. и  др. Создание мультимедийных приложений. – М.: Нолидж, 2000.

 

 

 

 

 

 

 

Приложение

Листинг программы

 

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(RAMTotalSpace));

      SubItems.Add(IntToStr(HDDTotalSpace));

      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(Sender: TObject);

var

  Computer: TComputer;

  Index, TempIndex: TIndex;

begin

  fmAddEditEntry:=TfmAddEditEntry.Create(Self);

  try

    fmAddEditEntry.Caption:='Добавить  новую запись';

    fmAddEditEntry.ShowModal;

 

    if fmAddEditEntry.ModalResult=mrOk then

      begin

        Computer.CPU:=fmAddEditEntry.edCPU.Text;

        Computer.RAMTotalSpace:=fmAddEditEntry.sedRAMSpace.Value;

        Computer.HDDTotalSpace:=fmAddEditEntry.sedHDDSpace.Value;

        Computer.OS:=fmAddEditEntry.edOS.Text;

        Computer.Cost:=fmAddEditEntry.sedCost.Value;

 

        Seek(ComputerFile, FileSize(ComputerFile));

        Write(ComputerFile, Computer);

 

        AddComputerRecToList(Computer);

 

        Index.CPU:=Computer.CPU;

        Index.Idx:=lvMain.Items.Count-1;

 

        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.Insert(FilePos(IndexFile)-1) do

          begin

            Caption:=Computer.CPU;

            SubItems.Add(IntToStr(lvMain.Items.Count-1));

          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(sFileName, '.idx'));

end;

 

procedure CreateDBFile(const sFileName: String);

begin

  AssignFile(ComputerFile, sFileName);

  Rewrite(ComputerFile);

 

  CreateIndexFile(ChangeFileExt(sFileName, '.idx'));

end;

 

procedure TfmMain.FormCreate(Sender: TObject);

begin

  fmIndexFile:=TfmIndexFile.Create(Self);

 

  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(Sender: TObject);

begin

  fmIndexFile.Visible:=actIndexFile.Checked;

end;

 

procedure TfmMain.lvMainSelectItem(Sender: TObject; Item: TListItem;

  Selected: Boolean);

begin

  actEditEntry.Enabled:=lvMain.SelCount <> 0;

  actDeleteEntry.Enabled:=lvMain.SelCount <> 0;

end;

 

procedure TfmMain.actEditEntryExecute(Sender: TObject);

var

  s: String;

  Idx: Integer;

  Computer: TComputer;

  Index, TempIndex: TIndex;

  OldFPos, NewFPos: Integer;

begin

  fmAddEditEntry:=TfmAddEditEntry.Create(Self);

  try

    fmAddEditEntry.Caption:='Редактировать  запись';

 

    s:=lvMain.Selected.Caption;

    fmAddEditEntry.edCPU.Text:=s;

    fmAddEditEntry.edOS.Text:=lvMain.Selected.SubItems[2];

   fmAddEditEntry.sedRAMSpace.Value:=StrToInt(lvMain.Selected.SubItems[0]);

    fmAddEditEntry.sedHDDSpace.Value:=StrToInt(lvMain.Selected.SubItems[1]);

    fmAddEditEntry.sedCost.Value:=StrToInt(lvMain.Selected.SubItems[3]);

 

    fmAddEditEntry.ShowModal;

 

    if fmAddEditEntry.ModalResult=mrOk then

      begin

        Computer.CPU:=fmAddEditEntry.edCPU.Text;

        Computer.RAMTotalSpace:=fmAddEditEntry.sedRAMSpace.Value;

        Computer.HDDTotalSpace:=fmAddEditEntry.sedHDDSpace.Value;

        Computer.OS:=fmAddEditEntry.edOS.Text;

        Computer.Cost:=fmAddEditEntry.sedCost.Value;

 

        Idx:=lvMain.Selected.Index;

        Seek(ComputerFile, Idx);

        Write(ComputerFile, Computer);

 

        with lvMain.Selected, Computer do

          begin

            Caption:=CPU;

            SubItems[0]:=IntToStr(RAMTotalSpace);

            SubItems[1]:=IntToStr(HDDTotalSpace);

            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.Delete(OldFPos);

        with fmIndexFile.lvMain.Items.Insert(NewFPos), Computer do

          begin

            Caption:=CPU;

            SubItems.Add(IntToStr(Idx));

          end;

      end;

  finally

    fmAddEditEntry.Free;

  end;

end;

 

procedure TfmMain.actDeleteEntryExecute(Sender: TObject);

Информация о работе Создание баз данных