Материал: Разработка информационной системы для фирмы по обслуживанию клиентов

Внимание! Если размещение файла нарушает Ваши авторские права, то обязательно сообщите нам

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

2.2 Разработка логической модели


Опишем сущности и атрибуты.

Таблица 2.1 Сущность Заказчик

Поле

Тип поля

Код_заказчика

Счетчик

Строковый [25]

Адрес

Строковый [25]

Телефон

Строковый [15]


Таблица 2.2 Сущность Разносчик

Поле

Тип поля

Код_разносчика

Счетчик

ФИО

Строковый [25]

Телефон

Строковый [15]


Таблица 2.3 Сущность Товар

Поле

Тип поля

Код_товара

Счетчик

Наименование

Строковый [25]

Группа

Строковый [15]

Цена

Числовой


Таблица 2.4 Сущность Журнал

Поле

Тип поля

Код_журнала

Счетчик

Заказчик

Числовой

Разносчик

Числовой

Сумма

Числовой

Дата

Дата


Таблица 2.5 Сущность Детализация

Поле

Тип поля

Код_детализации

Счетчик

Журнал

Числовой

Товар

Числовой

Количество

Числовой


2.3 Разработка физической модели


Физическая модель, разработанная в MS Access, представлена на рис.2.1.

Рис.2.1 Физическая модель

3. Реализация проекта


3.1 Серверная часть


Серверная часть в данном курсовой проекте представлена базой данных MS Access bd. mdb.

База данных хранит все данные, необходимые для работы разрабатываемой системы.

Для связи сервера и клиента используется технология ADO.

Технология ADO является моделью доступа к базам данных и представляет собой объектно-ориентированный интерфейс для технологии доступа к данным OLE DB.поддерживает ключевые возможности для построения клиент/серверных и Web-приложений, а также обеспечивает функции Remote Data Service (RDS), посредством которого можно перемещать данные с сервера в клиентское приложение или на Web-страницу, манипулировать данными "на стороне клиента" и возвращать обновленные данные серверу.

Рис.3.1 Таблицы базы данных

 

3.2 Клиентская часть


Клиентская часть разработана в Delphi 7 и представляет собой интерфейс пользователя с функциями для управления базой данных.

Опишем основные алгоритмы клиентской части.

Алгоритм работы со справочниками.

Рис.3.2 Схема алгоритма добавления и редактирования данных

Исходный код:

TForm3. Button2Click (Sender: TObject);Edit1. Text='' then('Введите ФИО! ');. SetFocus;;;Edit2. Text='' then('Введите Адрес! ');. SetFocus;;;Edit3. Text='' then('Введите телефон! ');. SetFocus;;;Form3. Caption='Добавление' then. ADOQuery1. Insert. ADOQuery1. Edit;. ADOQuery1. FieldValues ['ФИО']: =Edit1. Text;. ADOQuery1. FieldValues ['Адрес']: =Edit2. Text;. ADOQuery1. FieldValues ['Телефон']: =Edit3. Text;. ADOQuery1. UpdateRecord;. ADOQuery1. Last;. ADOQuery1. First;Click (Sender);;

Рис.3.3 Схема алгоритма удаления данных

Исходный код:

procedure TForm2. Button3. Click (Sender: TObject);Application doMessageBox ('Вы хотите удалить запись? ', 'Удаление', MB_OKCANCEL) =IDOK then1. Delete;

end;

end;

·        создание, модификация и удаление таблиц базы данных;

·        вставка информации (записей) в таблицы базы данных;

·        редактирование информации (записей) в таблицах базы данных;

·        выборка (извлечение) информации из таблиц базы данных;

·        удаление информации (записей) из базы данных.

Примеры использования SQL-запросов:

. SQL. Clear;: ='SELECT Журнал. Код_журнала, Заказчики. ФИО, Разносчики. ФИО, Журнал. Сумма, Журнал. Дата ';: =st+'FROM Журнал, Заказчики, Разносчики WHERE (Журнал. Заказчик=Заказчики. Код_заказчика) AND ';: =st+' (Журнал. Разносчик=Разносчики. Код_разносчика) ORDER BY Журнал. Дата';. SQL. Add (st);. Open;: ='SELECT Товары. Наименование, Детализация. Количество FROM Детализация, Товары ';: =st+'WHERE (Товары. Код_товара=Детализация. Товар) AND (Детализация. Журнал='+IntToStr (ADOQuery1. FieldValues ['Код_журнала']) +') ';. SQL. Clear;. SQL. Add (st);. Open;

4. Эксплуатация и сопровождение проекта


При запуске программы на выполнение на экран выводится главная форма программы.

Главная форма программы содержит пользовательское меню:

·        Справочник (Заказчик, Разносчик, Товар) - работа со справочниками;

·        Выход - завершение работы программы.

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

Главная форма представлена на рис.4.1.

Рис.4.1 Главная форма программы

Рассмотрим работу со справочниками на примере справочника "Заказчики". Форма содержит таблицу с данными и кнопки управления.

Все справочники имеют одинаковые функции:

·        Добавление;

·        Редактирование;

·        Удаление;

·        Выход.

Форма справочника Заказчиков представлена на рис.4.2.

Рис.4.2 Форма справочника Заказчиков

При нажатии кнопки Добавить на экране появится форма с полями для ввода новой записи (рис.4.3.).

Рис.4.3 Окно Добавление

Для добавления новой записи необходимо заполнить все поля и нажать кнопку "Сохранить". Если какое-нибудь поле не заполнено, то выдается соответствующее сообщение и предлагается повторить ввод.

Рис.4.4 Сообщение об ошибке

Кнопка "Отмена" не сохраняет введенные данные и закрывает форму.

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

Рис.4.5 Редактирование записи

После нажатия кнопки "Удаление" программа выдаст запрос на подтверждение удаления записи. После подтверждения запись будет удалена.

Рис.4.6 Запрос на удаление записи

Рассмотрим технологию добавления заказ в журнал.

На главной форме необходимо нажать кнопку "Добавить", появится форма добавления заказа, рис.4.7.

Рис.4.7 Форма добавления заказа

В верхней части формы находится таблица для хранения выбранных товаров, раскрывающийся список с ФИО заказчиков и с ФИО разносчиков, а также выбор даты заказа.

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

Рис.4.8 Форма указания количества товара

После нажатия кнопки "Ок" товар добавится в верхнюю таблицу и автоматически изменится сумма заказа.

Рис.4.9 Результат добавления заказа

После составления списка товаров выбирается заказчик, разносчик и дата. Нажимается кнопка "Сохранить" и данные записываются в базу данных.

Рис.4.10. Результат добавления заказа

Заключение


В ходе выполнения курсового проекта была рассмотрена предметная область фирмы по обслуживанию клиентов.

Были определены сущности и атрибуты базы данных, разработаны UML-диаграммы системы. Разработана физическая база данных и клиентское приложение.

Результатом работы стала программа Service. exe, позволяющая вести справочники заказчиков, разносчиков, товаров, формировать заказы и хранить данные о заказах.

Список используемой литературы


1.      Аппак М.А. Автоматизированные рабочие места на основе персональных ЭВМ. - М.: Радио и связь, 2009. - 176 с.

2.      Гольдштейн С. Л, Ткаченко Т.Я. Введение в системологию и системотехнику / С.Л. Гольдштейн. - ИРРО. Екатеринбург, 2010. - 198 с.

.        Глушаков С.В., Ломотько Д.В. Базы данных: Учебный курс. - М.: Издательство АСТ, 2008. - 504 с.

.        Дюк В.А. Обработка данных на ПК в примерах. - СПб: Питер. 1997;

.        Марк Д.А. Методология структурного анализа и проектирования SADT. - М: Метатехнология, 2009. - 242 с.

.        Сеннов А.С. Access 2003 Практическая разработка баз данных, Питер, 2005;

.        Симонович, Евсеев Занимательное программирование: Delphi. М.: АСТ-ПРЕСС, 2001;

.        Шуремов Е.Л. Компьютерный учет торговых операций: Практическое пособие/. - М.: КомпьютерПресс, 2000;

Приложения


unit Unit1;, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,, XPMan, Menus, StdCtrls, DB, ADODB, Grids, DBGrids;= class (TForm): TXPManifest;: TMainMenu;: TMenuItem;: TMenuItem;: TMenuItem;: TMenuItem;: TMenuItem;: TADOConnection;: TGroupBox;: TGroupBox;: TButton;: TDBGrid;: TDBGrid;: TADOQuery;: TDataSource;: TADOQuery;: TDataSource;: TADOQuery;N2Click (Sender: TObject);FormCreate (Sender: TObject);N3Click (Sender: TObject);N4Click (Sender: TObject);N5Click (Sender: TObject);Button1Click (Sender: TObject);DBGrid1CellClick (Column: TColumn);

{ Private declarations }

{ Public declarations };: TForm1;Unit2, Unit4, Unit6, Unit8;

{$R *. dfm}TForm1. N2Click (Sender: TObject);. Close;;TForm1. FormCreate (Sender: TObject);,st: string;. Cursor: = crSQLWait;: ='';: =sdr+'Provider=Microsoft. Jet. OLEDB.4.0; ';: =sdr+'Password=""; ';: =sdr+'User ID=Admin; ';: =sdr+'Data Source='+ ExtractFileDir (Application. ExeName) +'\bd. mdb; ';: =sdr+'Mode=ReadWrite; Extended Properties=""; ';: =sdr+'Jet OLEDB: System database=""; ';: =sdr+'Jet OLEDB: Registry Path=""; ';: =sdr+'Jet OLEDB: Database Password=""; ';: =sdr+'Jet OLEDB: Engine Type=5; ';: =sdr+'Jet OLEDB: Database Locking Mode=1; ';: =sdr+'Jet OLEDB: Global Partial Bulk Ops=2; ';: =sdr+'Jet OLEDB: Global Bulk Transactions=1; ';: =sdr+'Jet OLEDB: New Database Password=""; ';: =sdr+'Jet OLEDB: Create System Database=False; ';: =sdr+'Jet OLEDB: Encrypt Database=False; ';: =sdr+'Jet OLEDB: Compact Without Replica Repair=False; ';: =sdr+'Jet OLEDB: SFP=False';. ConnectionString: =sdr;. Connected: =true;. SQL. Clear;: ='SELECT Журнал. Код_журнала, Заказчики. ФИО,Разносчики. ФИО, Журнал. Сумма, Журнал. Дата ';: =st+'FROM Журнал, Заказчики, Разносчики WHERE (Журнал. Заказчик=Заказчики. Код_заказчика) AND ';: =st+' (Журнал. Разносчик=Разносчики. Код_разносчика) ORDER BY Журнал. Дата';. SQL. Add (st);. Open;. Columns [0]. Width: =0;: ='SELECT Товары. Наименование, Детализация. Количество FROM Детализация, Товары ';: =st+'WHERE (Товары. Код_товара=Детализация. Товар) AND (Детализация. Журнал='+IntToStr (ADOQuery1. FieldValues ['Код_журнала']) +') ';. SQL. Clear;. SQL. Add (st);. Open;('Ошибка');;. Cursor: =crdefault;;TForm1. N3Click (Sender: TObject);. ShowModal;;TForm1. N4Click (Sender: TObject);. ShowModal;;TForm1. N5Click (Sender: TObject);. ShowModal;;TForm1. Button1Click (Sender: TObject);: String;. Caption: ='Добавление';. SQL. Clear;. SQL. Add ('SELECT MAX (Код_журнала) AS num FROM Журнал');. Open;. Label5. Caption: =IntToStr (ADOQuery3. FieldValues ['num'] +1);. ADOQuery2. SQL. Clear;: ='SELECT Детализация. Код_детализации, Детализация. Журнал, Товары. Наименование,';: =st+'Детализация. Количество FROM Детализация, Товары WHERE ';: =st+' (Журнал='+Form8. Label5. Caption+') AND (Детализация. Товар=Товары. Код_товара) ';. ADOQuery2. SQL. Add (st);. ADOQuery2. Open;. DBGrid1. Columns [0]. Width: =0;

// заказчик. ADOQuery3. SQL. Clear;. ADOQuery3. SQL. Add ('SELECT * FROM Заказчики ORDER BY ФИО');. ADOQuery3. Open;. Zak. ListField: ='ФИО';. Zak. KeyField: ='Код_заказчика';

// разносчик. ADOQuery4. SQL. Clear;. ADOQuery4. SQL. Add ('SELECT * FROM Разносчики ORDER BY ФИО');. ADOQuery4. Open;. Razn. ListField: ='ФИО';. Razn. KeyField: ='Код_разносчика';. ShowModal;;TForm1. DBGrid1CellClick (Column: TColumn);: String;: ='SELECT Товары. Наименование, Детализация. Количество FROM Детализация, Товары ';: =st+'WHERE (Товары. Код_товара=Детализация. Товар) AND (Детализация. Журнал='+IntToStr (ADOQuery1. FieldValues ['Код_журнала']) +') ';. SQL. Clear;. SQL. Add (st);. Open;;.Unit2;, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,, DB, ADODB, StdCtrls, Grids, DBGrids;= class (TForm): TDBGrid;: TButton;: TButton;: TButton;: TButton;: TDataSource;: TADOQuery;Button4Click (Sender: TObject);FormCreate (Sender: TObject);Button2Click (Sender: TObject);Button1Click (Sender: TObject);Button3Click (Sender: TObject);

{ Private declarations }

{ Public declarations };: TForm2;Unit1, Unit3;

{ Private declarations }

{ Public declarations };: TForm3;Unit2;

{$R *. dfm}TForm3. Button1Click (Sender: TObject);. Text: ='';. Text: ='';. Text: ='';. Close;;TForm3. Button2Click (Sender: TObject);Edit1. Text='' then('Введите ФИО! ');. SetFocus;;;Edit2. Text='' then('Введите Адрес! ');. SetFocus;;;Edit3. Text='' then('Введите телефон! ');. SetFocus;;;Form3. Caption='Добавление' then. ADOQuery1. Insert. ADOQuery1. Edit;. ADOQuery1. FieldValues ['ФИО']: =Edit1. Text;. ADOQuery1. FieldValues ['Адрес']: =Edit2. Text;. ADOQuery1. FieldValues ['Телефон']: =Edit3. Text;. ADOQuery1. UpdateRecord;. ADOQuery1. Last;. ADOQuery1. First;Click (Sender);;.Unit4;, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,, DB, ADODB, StdCtrls, Grids, DBGrids;= class (TForm): TDBGrid;: TButton;: TButton;: TButton;: TButton;: TDataSource;: TADOQuery;FormCreate (Sender: TObject);Button4Click (Sender: TObject);Button2Click (Sender: TObject);Button1Click (Sender: TObject);Button3Click (Sender: TObject);

{ Private declarations }

{ Public declarations };: TForm4;Unit1, Unit5;

{$R *. dfm}TForm4. FormCreate (Sender: TObject);. SQL. Clear;. SQL. Add ('SELECT * FROM Разносчики ORDER BY ФИО');. Open;. Columns [0]. Width: =0;;TForm4. Button4Click (Sender: TObject);. Close;;TForm4. Button2Click (Sender: TObject);Application doMessageBox ('Вы хотите удалить запись? ', 'Удаление', MB_OKCANCEL) =IDOK then. Delete;;;TForm4. Button1Click (Sender: TObject);. Caption: ='Добавление';. ShowModal;;TForm4. Button3Click (Sender: TObject);. Caption: ='Редактирование';. Edit1. Text: =ADOQuery1. FieldValues ['ФИО'];. Edit3. Text: =ADOQuery1. FieldValues ['Телефон'];. ShowModal;;.Unit5;, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,, StdCtrls;= class (TForm): TLabel;: TEdit;: TLabel;: TEdit;: TButton;: TButton;Button1Click (Sender: TObject);Button2Click (Sender: TObject);

{ Private declarations }

{ Public declarations };: TForm5;Unit4;

{$R *. dfm}TForm5. Button1Click (Sender: TObject);. Text: ='';. Text: ='';. Close;;TForm5. Button2Click (Sender: TObject);Edit1. Text='' then('Введите ФИО! ');. SetFocus;;;Edit3. Text='' then('Введите телефон! ');. SetFocus;;;Form5. Caption='Добавление' then. ADOQuery1. Insert. ADOQuery1. Edit;. ADOQuery1. FieldValues ['ФИО']: =Edit1. Text;. ADOQuery1. FieldValues ['Телефон']: =Edit3. Text;. ADOQuery1. UpdateRecord;. ADOQuery1. Last;. ADOQuery1. First;Click (Sender);;.Unit6;, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,, DB, ADODB, StdCtrls, Grids, DBGrids;= class (TForm): TDBGrid;: TButton;: TButton;: TButton;: TButton;: TDataSource;: TADOQuery;Button4Click (Sender: TObject);Button2Click (Sender: TObject);FormCreate (Sender: TObject);Button1Click (Sender: TObject);Button3Click (Sender: TObject);

{ Private declarations }

{ Public declarations };: TForm6;Unit1, Unit7;

{$R *. dfm}TForm6. Button4Click (Sender: TObject);. Close;;TForm6. Button2Click (Sender: TObject);Application doMessageBox ('Вы хотите удалить запись? ', 'Удаление', MB_OKCANCEL) =IDOK then. Delete;;;TForm6. FormCreate (Sender: TObject);. SQL. Clear;. SQL. Add ('SELECT * FROM Товары ORDER BY Наименование');. Open;. Columns [0]. Width: =0;;TForm6. Button1Click (Sender: TObject);. Caption: ='Добавление';. ShowModal;;TForm6. Button3Click (Sender: TObject);. Caption: ='Редактирование';. Edit1. Text: =ADOQuery1. FieldValues ['Наименование'];. Edit2. Text: =ADOQuery1. FieldValues ['Группа'];. Edit3. Text: =ADOQuery1. FieldValues ['Цена'];. ShowModal;;.Unit7;, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,, StdCtrls;= class (TForm): TLabel;: TEdit;: TLabel;: TEdit;: TLabel;: TEdit;: TButton;: TButton;Button1Click (Sender: TObject);Button2Click (Sender: TObject);

{ Private declarations }

{ Public declarations };: TForm7;Unit6;

{$R *. dfm}TForm7. Button1Click (Sender: TObject);. Text: ='';. Text: ='';. Text: ='';. Close;;TForm7. Button2Click (Sender: TObject);Edit1. Text='' then('Введите Наименование! ');. SetFocus;;;Edit2. Text='' then('Введите Группу! ');. SetFocus;;;Edit3. Text='' then('Введите Цену! ');. SetFocus;;;Form7. Caption='Добавление' then. ADOQuery1. Insert. ADOQuery1. Edit;. ADOQuery1. FieldValues ['Наименование']: =Edit1. Text;. ADOQuery1. FieldValues ['Группа']: =Edit2. Text;. ADOQuery1. FieldValues ['Цена']: =Edit3. Text;. ADOQuery1. UpdateRecord;. ADOQuery1. Last;. ADOQuery1. First;Click (Sender);;.Unit8;, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,, StdCtrls, DBCtrls, Grids, DBGrids, DB, ADODB, ComCtrls;= class (TForm): TGroupBox;: TGroupBox;: TLabel;: TDBLookupComboBox;: TLabel;: TDBLookupComboBox;: TLabel;: TLabel;: TButton;: TButton;: TDBGrid;: TDBGrid;: TADOQuery;: TDataSource;: TADOQuery;: TDataSource;: TADOQuery;: TDataSource;: TADOQuery;: TDataSource;: TADOQuery;: TDataSource;: TLabel;: TLabel;: TDateTimePicker;: TLabel;FormCreate (Sender: TObject);Button1Click (Sender: TObject);Button2Click (Sender: TObject);DBGrid2DblClick (Sender: TObject);

{ Private declarations }

{ Public declarations };: TForm8;Unit1, Unit9;

{$R *. dfm}TForm8. FormCreate (Sender: TObject);. SQL. Clear;. SQL. Add ('SELECT * FROM Товары ORDER BY Наименование');. Open;. Columns [0]. Width: =0;;TForm8. Button1Click (Sender: TObject);. KeyValue: =0;. KeyValue: =0;. Close;;TForm8. Button2Click (Sender: TObject);: String;. SQL. Clear;. SQL. Add ('SELECT * FROM Журнал');. Open;. Insert;. FieldValues ['Заказчик']: =Zak. KeyValue;. FieldValues ['Разносчик']: =Razn. KeyValue;. FieldValues ['Сумма']: =StrToInt (Label4. Caption);. FieldValues ['Дата']: =DateToStr (Dat. Date);. UpdateRecord;. Last;. First;: ='SELECT Журнал. Код_журнала, Заказчики. ФИО,Разносчики. ФИО, Журнал. Сумма, Журнал. Дата ';: =st+'FROM Журнал, Заказчики, Разносчики WHERE (Журнал. Заказчик=Заказчики. Код_заказчика) AND ';: =st+' (Журнал. Разносчик=Разносчики. Код_разносчика) ORDER BY Журнал. Дата';. ADOQuery1. SQL. Clear;. ADOQuery1. SQL. Add (st);. ADOQuery1. Open;. DBGrid1. Columns [0]. Width: =0;: ='SELECT Товары. Наименование, Детализация. Количество FROM Детализация, Товары ';: =st+'WHERE (Товары. Код_товара=Детализация. Товар) AND (Детализация. Журнал='+IntToStr (Form1. ADOQuery1. FieldValues ['Код_журнала']) +') ';. ADOQuery2. SQL. Clear;. ADOQuery2. SQL. Add (st);. ADOQuery2. Open;Click (Sender);;TForm8. DBGrid2DblClick (Sender: TObject);. ShowModal;;.Unit9;, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,, StdCtrls, ComCtrls;= class (TForm): TEdit;: TUpDown;: TButton;: TButton;Button1Click (Sender: TObject);Button2Click (Sender: TObject);

{ Private declarations }

{ Public declarations };: TForm9;Unit8;

{$R *. dfm}TForm9. Button1Click (Sender: TObject);. Text: ='1';. Close;;TForm9. Button2Click (Sender: TObject);: Integer;: String;. ADOQuery2. SQL. Clear;. ADOQuery2. SQL. Add ('SELECT * FROM Детализация');. ADOQuery2. Open;. ADOQuery2. Insert;. ADOQuery2. FieldValues ['Журнал']: =StrToInt (Form8. Label5. Caption);. ADOQuery2. FieldValues ['Товар']: =Form8. ADOQuery1. FieldValues ['Код_товара'];. ADOQuery2. FieldValues ['Количество']: =StrToInt (Edit1. Text);. ADOQuery2. UpdateRecord;. ADOQuery2. Last;. ADOQuery2. First;. ADOQuery2. SQL. Clear;: ='SELECT Детализация. Код_детализации, Детализация. Журнал, Товары. Наименование,';: =st+'Детализация. Количество FROM Детализация, Товары WHERE ';: =st+' (Журнал='+Form8. Label5. Caption+') AND (Детализация. Товар=Товары. Код_товара) ';. ADOQuery2. SQL. Add (st);. ADOQuery2. Open;. DBGrid1. Columns [0]. Width: =0;: =StrToInt (Edit1. Text) *Form8. ADOQuery1. FieldValues ['Цена'];. Label4. Caption: =IntToStr (StrToInt (Form8. Label4. Caption) +sum);Click (Sender);;.