2. Разработка рабочего проекта
2.1 Разработка программы
С точки зрения пользователя, база данных — это программа, которая обеспечивает работу с информацией. При запуске такой программы на экране, как правило, появляется таблица, просматривая которую пользователь может найти интересующие его сведения. Если система позволяет, то он может внести изменения в базу данных: добавить новую информацию или удалить ненужную. С точки зрения программиста, база данных — это набор файлов, содержащих информацию. Разрабатывая базу данных для пользователя, программист создает программу, которая обеспечивает работу с файлами данных.
В настоящее время существует достаточно большое количество программных систем, позволяющих создавать и использовать локальные (dBASE, FoxPro, Access, Paradox) и удаленные (Interbase, Oracle, Sysbase, Infomix, Microsoft SQL Server) базы данных.В состав Delphi входят компоненты, позволяющие создавать программы работы с файлами данных, созданными различными системами: от SE до Infomix и Oracle. Delphi также позволяет программисту, используя утилиту Borland Database Desktop, создавать файлы баз данных в различных форматах
2.2 Спецификация программы
База данных — это набор однородной, как правило, упорядоченной по некоторому критерию, информации. База данных может быть представлена в "бумажном" или в компьютерном виде. Типичным примером "бумажной" базы данных является каталог библиотеки — набор бумажных карточек, содержащих информацию о книгах. Информация в этой базе однородная (содержит сведения только о книгах) и упорядоченная (карточки расставлены, например, в соответствии с алфавитным порядком фамилий авторов).
Следует обратить внимание, что каждая запись состоит из одинаковых полей. Некоторые поля могут быть не заполнены, однако они все равно присутствуют в записи. На бумаге базу данных удобно представить в виде таблицы. Каждая строка таблицы соответствует записи, а ячейка таблицы — полю. При этом заголовок столбца таблицы — это имя поля, а номер строки таблицы — номер записи. Информацию компьютерных баз данных обычно выводят на экран в виде таблиц.
Таблицы физически хранится в отдельном файле. В простейшем случае источником информации для программы, работающей с базой данных, может быть вся таблица. Однако, как правило, пользователя интересует не вся информация, находящаяся в базе данных, а только какая-то ее часть. Он выбирает и просматривает только некоторые, удовлетворяющие его запросу записи. Поэтому в модель базы данных помимо таблицы, представляющей собой всю базу данных, было введено понятие запроса, являющегося выборкой, т. е. группой записей базы данных.
База данных — это набор файлов (таблиц), в которых находится информация. Как правило, база данных состоит из нескольких таблиц, которые размещают в одном каталоге. Каталог для новой базы данных создается обычным образом, например, при помощи Проводника.
2.3 Текст программы
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, Grids, Menus, StdCtrls;
type
TForm1 = class(TForm)
sg: TStringGrid;
mm: TMainMenu;
N1: TMenuItem;
N2: TMenuItem;
N3: TMenuItem;
N4: TMenuItem;
N5: TMenuItem;
N6: TMenuItem;
N7: TMenuItem;
N8: TMenuItem;
N9: TMenuItem;
N10: TMenuItem;
N11: TMenuItem;
procedure FormCreate(Sender: TObject);
procedure N2Click(Sender: TObject); //Процедура нажатия пункта в главнам меню Фаил-Сохранить
procedure N3Click(Sender: TObject); //Процедура нажатия пункта в главнам меню Фаил-Загрузить
procedure N5Click(Sender: TObject); //Процедура нажатия пункта в главнам меню Файл-Выход
procedure N7Click(Sender: TObject); //Процедура нажатия пункта в главнам меню Продавец-Добавить
procedure N8Click(Sender: TObject); //Процедура нажатия пункта в главнам меню Продавец-Удалить
procedure N9Click(Sender: TObject); //Процедура нажатия пункта в главнам меню Продавец-Редактировать
procedure N10Click(Sender: TObject); //Процедура нажатия пункта в главнам меню Отчет
procedure N11Click(Sender: TObject); //Процедура нажатия пункта в главнам меню О программе private
{ Private declarations }
public
{ Public declarations }
Procedure LoadBD; // Загрузка Базы
Procedure SaveBD; // Сохранение Базы
end;
var
Form1: TForm1;
God: integer; // Нынешний год
implementation
uses Unit2, Unit3;
{$R *.dfm}
function CalcComiss(index:integer):integer; // Подсчет комиссионных
// по номеру продавца в таблице
var year,dohod:integer;
begin
Result:=0; // Изначально комиссионные = 0
with form1.sg do
begin
year:=StrToInt(Cells[2,index]); // Узнаем год приема на работу
Dohod:=StrToInt(Cells[3,index]); // И средний доход за день
end;
if god-year>=10 then // Если продавец работает 10 лет и больше
Result:=Result+1; // Добавляем 1%
if Dohod>=1000 then // Если еще и продает на сумму 1000 или больше
Result:=Result+6 else // то добавляем 6%
Result:=Result+5; // Если же нет, то 5%
end;
procedure TForm1.SaveBD;
var I:integer;
s:TStringList;
begin
S:=TStringList.Create; // Создаем Список строк
for i:=1 to sg.RowCount-2 do // Проходим по всей таблице
begin
{Переносим в список данные из таблицы}
S.Add(Sg.Cells[0,i]);
S.Add(Sg.Cells[1,i]);
S.Add(Sg.Cells[2,i]);
S.Add(Sg.Cells[3,i]);
end;
S.SaveToFile('Base.txt'); // Сохраняем
S.Free; // Очищаем память
end;
procedure Tform1.LoadBD; // Загрузка базы
var I:integer;
s:TstringList;
begin
sg.RowCount:=2;
S:=TStringList.Create; // Создаем в памяти Список строк
S.LoadFromFile('Base.txt'); // Загружаем в него файл с базой
For i:=0 to S.Count div 4 -1 do // Организуем цикл загрузки 4х данных
// для каждого продавца
begin
sg.RowCount:=sg.RowCount+1; // Увеличиваем таблицу на 1 пункт
{Помещаем в таблицу данные}
sg.Cells[0, sg.RowCount-2]:=S[i*4];
sg.Cells[1, sg.RowCount-2]:=S[i*4+1];
sg.Cells[2, sg.RowCount-2]:=S[i*4+2];
sg.Cells[3, sg.RowCount-2]:=S[i*4+3];
sg.Cells[4, sg.RowCount-2]:=IntToStr(CalcComiss(sg.RowCount-2));
end;
S.Free; // Очищаем память от уже ненужного файла
end;
procedure TForm1.FormCreate(Sender: TObject);
begin
{Заполняем заголовок таблицы}
sg.Cells[0,0]:='Фамилия и имя продавца';
sg.Cells[1,0]:='Табельный номер';
sg.Cells[2,0]:='Год приема на работу';
sg.Cells[3,0]:='Выручка $ за день';
sg.Cells[4,0]:='% комиссионных';
God:=StrToInt(Copy(DateToStr(Date),7,4)); // Узнаем нынешний год
LoadBD; // Загружаем базу с диска
end;
procedure TForm1.N5Click(Sender: TObject);
begin
close; // Выход
end;
procedure TForm1.N8Click(Sender: TObject);
var i, j:integer;
begin
{Удаление продавца из списка, все следующие за ним продавцы, просто поднимаются на ячейку выше}
if sg.Selection.Top<>sg.RowCount-1 then
begin
for i:=sg.Selection.Top+1 to sg.RowCount-1 do
for j:=0 to 4 do
sg.Cells[j,i-1]:=sg.Cells[j,i];
sg.RowCount:=sg.RowCount-1;
end;
end;
procedure TForm1.N2Click(Sender: TObject);
begin
LoadBd; // Загружаем базу с диска
end;
procedure TForm1.N3Click(Sender: TObject);
begin
SaveBD; //Сохраняем
end;
procedure TForm1.N10Click(Sender: TObject);
begin
Form3.ShowModal;
end;
procedure TForm1.N7Click(Sender: TObject);
var I:integer;
begin
{Открываем окно "Добавить" и в случае нажатия на кнопку Ok, добавляем продавца в таблицу}
Form2.Caption:='Добавить';
for i:=1 to 4 do // Цикл очистки полей ввода
TEdit(Form2.FindComponent('Edit'+IntToStr(i))).text:='';
if form2.showmodal=mrOk then
begin
sg.RowCount:=sg.RowCount+1; // Увеличиваем таблицу на 1 пункт
{Помещаем в таблицу данные}
sg.Cells[0, sg.RowCount-2]:=Form2.Edit1.Text;
sg.Cells[1, sg.RowCount-2]:=Form2.Edit2.Text;
sg.Cells[2, sg.RowCount-2]:=Form2.Edit3.Text;
sg.Cells[3, sg.RowCount-2]:=Form2.Edit4.Text;
sg.Cells[4, sg.RowCount-2]:=IntToStr(CalcComiss(sg.RowCount-2));
end;
end;
procedure TForm1.N9Click(Sender: TObject);
var i:integer;
begin
if sg.Selection.Top<>sg.RowCount-1 then
begin
Form2.Caption:='Редактировать';
for i:=1 to 4 do
TEdit(Form2.FindComponent('Edit'+IntToStr(i))).text:=sg.cells[i-1,sg.selection.top];
if form2.showmodal=mrOk then
begin
{Помещаем в таблицу данные}
sg.Cells[0, sg.selection.top]:=Form2.Edit1.Text;
sg.Cells[1, sg.selection.top]:=Form2.Edit2.Text;
sg.Cells[2, sg.selection.top]:=Form2.Edit3.Text;
sg.Cells[3, sg.selection.top]:=Form2.Edit4.Text;
sg.Cells[4, sg.selection.top]:=IntToStr(CalcComiss(sg.selection.top));
end;
end;
end;
procedure TForm1.N11Click(Sender: TObject);
var summ:integer; //Общий доход за этот месяц
kom:integer; //Комиссионные выплаты
z:integer; //Доход с вычетом комиссионных выплат
days:integer; //Дней в этом месяце
i,j,k:integer; //Вспомогательные переменные
begin
case StrToInt(copy(DateToStr(Date),4,2)) of //Проверяем какой щас месяц
1,3,5,7,8,10,12:days:=31; // если месяц 1,3,5,7,8,10,12 то дней в месяце 31
2: days:=28; // если месяц 2 то дней в месяце 28
else days:=30; // иначе в месяце 30 дней
end;
summ:=0; //Общим доходам за этот месяц присваеваем ноль
kom:=0; //Комиссионным выплатам присваеваем ноль
z:=0; //Доходам с вычетом комиссионных выплат присваеваем ноль
for i:=1 to sg.RowCount-2 do
begin
j:=calccomiss(i);
k:=strtoint(sg.cells[3,i])*days;
j:=Trunc((j / 100)*K); //"Trunc" - целая часть числа
kom:=kom+j; //считаем Комиссионные выплаты
z:=z+k-j; //считаем Доход с вычетом комиссионных выплат
summ:=summ+k; // считаем Общий доход за этот месяц
end;
showmessage('Общий доход за этот месяц: '+inttostr(summ)+#13#10+'Комиссионные выплаты: '+inttostr(kom)+#13#10+'Доход с вычетом комиссионных выплат: '+inttostr(z)+#13#10+'Дней в этом месяце: ' +inttostr(days));
end;
end.
Рисунок 1- Таблица ведения базы данных торговой фирмы
... Таблица «Счет» Таблица «Товар» Таблица «Товар по счету» Таблица «Товарные группы» Лабораторная работа № 2. Разработка запросов отбора данных и вычислений Цель работы приобретение навыков в описании запросов к базе данных на языке QBE (Query by Example). Выборка неоплаченных счетов Результат выполнения: Выборка поставок Результат выполнения: Поиск ...
... : pered=record st:array[1..12] of string; m:byte; {количество строк в меню} end; temr,tt1,tt2,tt3,tt4:cc – Таблицы базы данных. Тут tt1 – таблица с данными о студентах, tt2 – предметы, tt3 – преподаватели, tt4 – оценки (успеваемость). Temr – временная таблица. Все эти переменные являются динамическими списками. Они описаны в файле tips.pas: tabl2=record {Сама ...
... от используемых в дальнейшем программных средств [1]. Для описания инфологической модели были использованы графические средства. Описание связи «объект-свойство» изображено на рис. 2.2.1 графического материала. База данных «Кадры» разрабатывается для хранения текстовой информации (хотя для удобства ввода некоторые поля таблиц – числовые), поэтому в приложении не будут применены вычисления ...
... проекта 1. Введение. Целью данного курсового проекта является структурирование данных и разработка пользовательского интерфейса. В курсовом проекте рассмотрены следующие теоретические вопросы и практические задания: ü проведен системно-комплексный анализ выбранного объекта автоматизации ü разработана структура пользовательского интерфейса автоматизированной системы ...
0 комментариев