Репетиторские услуги и помощь студентам!
Помощь в написании студенческих учебных работ любого уровня сложности

Тема: Создание базы данных: «Автоматизированное рабочее место сервисного центра»

  • Вид работы:
    Курсовая работа (п) по теме: Создание базы данных: «Автоматизированное рабочее место сервисного центра»
  • Предмет:
    Информационное обеспечение, программирование
  • Когда добавили:
    03.08.2010 15:16:00
  • Тип файлов:
    MS WORD
  • Проверка на вирусы:
    Проверено - Антивирус Касперского

Другие экслюзивные материалы по теме

  • Полный текст:
    Оглавление: Оглавление: 2
    Цели и задачи курсовой работы.. 3
    Цели и задачи курсовой работы.. 3
    Обзор рынка аналогичных программ. 3
    Сбор исходных данных. 3
    Интерфейс проекта. 4
    Технологии. 16
    Руководство. 33
    Порядок ввода в эксплуатацию. 34
    Литература. 35
     Цели и задачи курсовой работы  
    Цель работы: Создание базы данных: «Автоматизированное рабочее место сервисного центра»
     
    СУБД или язык программирования, используемые для реализации курсовой работы:   SQL server InterBase 7, Delphi 7
     
    Основные аспекты курсовой работы:
    Основная задача курсовой работы создание программного продукта позволяющего вести учет приемки-выдачи заказов в сервисном центре.
    Состав курсовой работы должен содержать следующие составные части:
    1.   Полностью завершённый проект базы данных «Автоматизированное рабочее место сервисного центра», реализованный на базе СУБД InterBase 7, и алгоритмического языка Delphi 7, содержащий следующие модули:
    · Ввод нового заказа
    · Работа с существующими заказами
    · Сортировка
    · Отчет о проделанной работе сервисного центра
    Заказчик также требует учесть чтобы был ввод данных сервисного центра, возможность сортировать по состоянию заказа.
    Обзор рынка аналогичных программ. Имеется целая серия ПО позволяющих вести работу в сервисном центре. Но не многие из этой армии Software имеют гибкую настройку сортировки заказов. К тому же, программы подобного уровня стоят не малые деньги. Также во многих аналогах нет возможности быстро оценить степень срочности заказа благодаря цветовому выделению. Нет также в своем  большинстве таких программ вывода информации на бумажный носитель.
    В нашей работе мы устраним эти недостатки. А именно добавим в проект возможность гибкой сортировки заказов, цветовое выделение строк, вывод отчетов на бумажный носитель. Программа получила свое название: Dialog3.
     
    Сбор исходных данных. Разберем сам процесс автоматизации рабочего места сервисного центра.
    В сервисный центр поступает (Дата приемки, Дата выдачи) устройство (Устройство, Производитель, Модель, Серийный номер), вносятся сведенья о сделавшем заявку, это может быть как физическое лицо, так и юридическое. В случае, если сделало заявку юридическое лицо вносятся сведенья о названии организации и фамилия, имя, отчество через кого была сделана заявка организацией (Правовая форма, Адрес, Телефон, Фамилия, Имя, Отчество) и кто из сотрудников выполнил заявку (Выполнил, Фамилия, Имя, Отчество). После выполнения заявки вносятся дополнительные сведенья о проделанной работе: какая работа была проделана, в случае если выполняемые услуги в сервисном центре систематизированы вводиться артикул, количество видов работ, цена работы, общая сумма за выполненную работу, дополнительное описание работы если есть необходимость, в случае если пришлось заменить какое-то комплектующие вносятся сведенья об снятом устройстве и сведенья об установленном устройстве  (Работа, Артикул, Количество, Цена, Сумма, Описание, Выполнено, Снято, Установлено).
    Интерфейс проекта  
    После запуска программы мы видим главное окно программы. Можно посмотреть, что необходимо делать. Цветов выделено:
     

     
    Что позволяет быстро сориентироваться сотруднику сервисного центра – какую работу надо проделать в п6ервую очередь.
     

     
     
    Если мы выберем меню Файл, то нам будет предложено выйти из программы.

     
    При выборе в пункте меню поля Запись, нам будет предложено:

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

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

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

     
    После того, как мы заполнили форму Неисправность и перечень работ, мы нажимаем Ок. Заказ принят.
     
    При нажатии клавиши Enter или же Запись -> Изменить появляется следующая форма:
     

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

     
    После того, как работа выполнена заполняется форма Выполненная работа:

     
    Здесь мы устанавливаем какая работа проводилась над заказом и стоимость проводимой работы.
     
    В случае, если во время ремонта производилась замена деталей или комплектующих, то указывается это в формах Снято и Установлено соответственно.

     
    Здесь указываются сведенья об устройстве, серийный номер устройства, артикул, количество и цена устройства. Устройств может быть неограниченное количество.
     
    Если на форме мы нажмем кнопку печать, то появится следующая форма:

     
    Если мы выберем кнопку Квиток, то появиться форма для вывода на печать заявки на ремонт.

     
    Данный квиток выдается заказчику. Данную форму предоставил заказчик программы, она содержит все необходимые заказчику сведенья: дату заказа, кто принял заказ, название и телефон организации по которому можно узнать, как продвигается выполнение работы, номер заказа, какая работа выполняется и какое оборудование предоставил заказчик сервисному центру.
     
     
    Если же мы выберем Отчет, то появиться отчет о проделанной работе над заказом. В отчете предоставлены полные сведенья о проделанной работе: номер заказа, дата приемки и дата выдачи заказа, кто принимал и кто выдавал заказ, какая работа была проведена, какие устройства были заменены, общая стоимость проведенных работ. Благодаря тому, что сведенья о конечной сумме проделанной работы достаточно полные это позволяет заказчику увидеть «за что» он отдает деньги.
     

    Для данного отчета приведен пример: в сервисный центр поступила заявка на лечение вирусов. Для лечения вирусов был установлен антивирусный пакет стоимостью 500 рублей. В процессе работы встала производственная необходимость извлечь из системного блока CD – Rom, тут же указывается его цена и модель. В результате этой манипуляции в графе Итого Выполненная работа из общей цены была отнята цена привода.
    После того, заказ выполнен необходимо нажать кнопку Заказ выполнен, после чего со строки спадает выделение цветом.
     
    Если в меню Запись выбрать Удалить, то строчка будет выделена черным цветом.
     
    Последний пункт в меню Запись это Сортировка.

    Сортировка имеет три вкладки Сортировка, Дополнительно и Расширенный поиск. В Сортировке вводиться критерий выборки и пункт по которому производиться сортировка. В случае, если необходим расширенный поиск, то необходимо выбрать свойство Использовать расширенный поиск.
     

     
    При выборе условий используются логические операции И и Или. Если необходимо, то для сортировки необходимо использовать вкладку Дополнительно
     

     
    В Сортировка -> Дополнительно, можно выбрать свойства: Показывать удаленные записи, Находиться сколько дней в ремонте, Показать все невыполненные заказы, находящиеся более 7 дней.
     
    Далее в меню идет Отчет. В отчете мы можем увидеть работу сервисного центра: какие заказы выполнены, кто заказчик, доход за указанный промежуток времени, дату выполнения заказа, какой вид ремонта (гарантийный или платный ремонт).
     
    Программа оснащена достаточно полной справочной системой. В справке полностью отражены о системойолнения формы:сновные свойства программного продукта.

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

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

     
    По умолчанию при установке программы в первый раз все свойства включены.
     

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

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

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

     
     
    Технологии. Процедура закраски ячеек:
     
    procedure TForm1.DBCoolGrid1DrawColumnCell(Sender: TObject;
      const Rect: TRect; DataCol: Integer; Column: TColumn;
      State: TGridDrawState);
    var
      ss,s:string;
      dat,dat1:TDateTime;
      d1,d,m1,m,y1,y:word;
    begin
    if DataModule2.IBQuery1_2.RecordCount>0 then
    begin
      s:=column.Field.Text;
    if Column.Index=0 then
     begin
    if s='N' then
      s:='В ремонте';
    if s='B' then
      s:='Отправлено по гарантии';
    if s='C' then
      s:='Ждем запчасти';
    if s='D' then
      s:='Ждем заказчика';
    if s='Y' then
      s:='Выполнено';
    if s='X' then
      s:='Удалено';
      end;
    if Column.Index=3 then
     begin
    ss:= (Sender as TDBGrid).DataSource.DataSet.FieldByName('T113').AsString;
     if ss<>'Y' then s:='Не готово';
     end;
    if Column.Index=5 then
     begin
     
     if s='1' then s:='Платный'else
     if s='2' then s:='Гарантийный';
     end;
    if Column.Index=4 then
     begin
      DataModule2.IBQueryAll.Close;
      with DataModule2 do
    begin
    IBQueryAll.SQL.Clear;
    IBQueryAll.SQL.Add('select * from tabl04 ');
     
    if s='' then s:='none';
    IBQueryAll.SQL.Add('where T401='+s+' ');
    end;
      DataModule2.IBQueryAll.Open;
      if DataModule2.IBQueryAll.RecordCount>0 then
      s:=Trim(DataModule2.IBQueryAll.fieldbyname('T402').AsString);
     end;
    if Column.Index=6 then
     begin
      DataModule2.IBQueryAll.Close;
    with DataModule2 do
    begin
    IBQueryAll.SQL.Clear;
    IBQueryAll.SQL.Add('select * from tabl07 ');
     
    if s='' then s:='none';
    IBQueryAll.SQL.Add('where T701='+s+' ');
    end;
      DataModule2.IBQueryAll.Open;
      if DataModule2.IBQueryAll.RecordCount>0 then
      s:=Trim(DataModule2.IBQueryAll.fieldbyname('T702').AsString);
     end;
    if Column.Index=7 then
     begin
      DataModule2.IBQueryAll.Close;
    with DataModule2 do
    begin
    IBQueryAll.SQL.Clear;
    IBQueryAll.SQL.Add('select * from tabl07 ');
     
    if s='' then s:='none';
    IBQueryAll.SQL.Add('where T701='+s+' ');
    end;
      DataModule2.IBQueryAll.Open;
      if DataModule2.IBQueryAll.RecordCount>0 then
      s:=Trim(DataModule2.IBQueryAll.fieldbyname('T707').AsString);
     end;
    if Column.Index=8 then
     begin
      DataModule2.IBQueryAll.Close;
    with DataModule2 do
    begin
    IBQueryAll.SQL.Clear;
    IBQueryAll.SQL.Add('select * from tabl08 ');
     
    if s='' then s:='none';
    IBQueryAll.SQL.Add('where T801='+s+' ');
    end;
      DataModule2.IBQueryAll.Open;
      if DataModule2.IBQueryAll.RecordCount>0 then
      s:=Trim(DataModule2.IBQueryAll.fieldbyname('T802').AsString);
     end;
    if Column.Index=9 then
     begin
      DataModule2.IBQueryAll.Close;
    with DataModule2 do
    begin
    IBQueryAll.SQL.Clear;
    IBQueryAll.SQL.Add('select * from tabl08 ');
     
    if s='' then s:='none';
    IBQueryAll.SQL.Add('where T801='+s+' ');
    end;
      DataModule2.IBQueryAll.Open;
      if DataModule2.IBQueryAll.RecordCount>0 then
      s:=Trim(DataModule2.IBQueryAll.fieldbyname('T802').AsString);
     end;
    if  (Sender as TDBGrid).DataSource.DataSet.FieldByName('T113').AsString='Y' then
     begin
      DBCoolGrid1.Canvas.Font.Color:=clGray;
      DBCoolGrid1.Canvas.Brush.Color:=clWhite;
     end
    else
    begin
      DBCoolGrid1.Canvas.Font.Color:=clBlack;
      DBCoolGrid1.Canvas.Brush.Color:=clWhite;
    end;
    if  (Sender as TDBGrid).DataSource.DataSet.FieldByName('T113').AsString<>'Y' then
    begin
    dat:=(Sender as TDBGrid).DataSource.DataSet.FieldByName('T103').AsDateTime;
    dat1:=Date;
    DecodeDate(Dat,y,m,d);
    DecodeDate(Dat1,y1,m1,d1);
     
    if dat1-dat >=7 then
     begin
      if  (Sender as TDBGrid).DataSource.DataSet.FieldByName('T113').AsString='N' then
    begin
    DBCoolGrid1.Canvas.Font.Color:=clWhite;
    DBCoolGrid1.Canvas.Brush.Color:=form12.Panel1.Color;
    end;
      if  (Sender as TDBGrid).DataSource.DataSet.FieldByName('T113').AsString='D' then
    begin
    DBCoolGrid1.Canvas.Font.Color:=clWhite;
    DBCoolGrid1.Canvas.Brush.Color:=form12.Panel2.Color;
    end;
      if  (Sender as TDBGrid).DataSource.DataSet.FieldByName('T113').AsString='C' then
    begin
    DBCoolGrid1.Canvas.Font.Color:=clWhite;
    DBCoolGrid1.Canvas.Brush.Color:=form12.Panel3.Color;
    end;
      if  (Sender as TDBGrid).DataSource.DataSet.FieldByName('T113').AsString='B' then
    begin
    DBCoolGrid1.Canvas.Font.Color:=clWhite;
    DBCoolGrid1.Canvas.Brush.Color:=form12.Panel4.Color;
    end;
     end;
     
    end;
      if  (Sender as TDBGrid).DataSource.DataSet.FieldByName('T113').AsString='X' then
    begin
    DBCoolGrid1.Canvas.Font.Color:=clGray;
    DBCoolGrid1.Canvas.Brush.Color:=form12.Panel5.Color;
    end;
    {if gdFocused in State then
    NoId:=DataModule2.IBQuery1_2T101.AsInteger;
    if NoId =(Sender as TDBGrid).DataSource.DataSet.FieldByName('T101').AsInteger then
     begin
    DBCoolGrid1.Canvas.Font.Style:=[fsBold];
    DBCoolGrid1.Canvas.Font.Color:=clWhite;
    DBCoolGrid1.Canvas.Brush.Color:=$00FF8000;
     end;
    }
    if gdFocused in State then
     begin
    DBCoolGrid1.Canvas.Font.Style:=[fsBold];
    DBCoolGrid1.Canvas.Font.Color:=clWhite;
    DBCoolGrid1.Canvas.Brush.Color:=$00FF8000;
     end;
     
    DBCoolGrid1.Canvas.FillRect(Rect);
    DBCoolGrid1.Canvas.TextRect(Rect, Rect.Left+1, Rect.Top + 2, s);
    end;
    end;
     
    Процедура занесения данных в базу:
     
    procedure TForm3.SpeedButton1Click(Sender: TObject);
    var
      i,NT2,NT1,NT4,NT5,NT6,NT7,NT8,NT9,NT10,NT11,NT12:integer;
      s,snam,sot,ss:string;
      DtD:TDateTime;
      DD,MM,YY:word;
     
    begin
    dxPickEdit1.Text:=TestStr(dxPickEdit1.Text);
    dxPickEdit2.Text:=TestStr(dxPickEdit2.Text);
    dxPickEdit3.Text:=TestStr(dxPickEdit3.Text);
    dxPickEdit4.Text:=TestStr(dxPickEdit4.Text);
    dxPickEdit5.Text:=TestStr(dxPickEdit5.Text);
    dxPickEdit6.Text:=TestStr(dxPickEdit6.Text);
    dxPickEdit7.Text:=TestStr(dxPickEdit7.Text);
    dxPickEdit8.Text:=TestStr(dxPickEdit8.Text);
    dxPickEdit9.Text:=TestStr(dxPickEdit9.Text);
    dxPickEdit10.Text:=TestStr(dxPickEdit10.Text);
    dxPickEdit11.Text:=TestStr(dxPickEdit11.Text);
    form1.Memo1.Lines.Append('+------{**___**}------+');
    form1.Memo1.Lines.Append('Add:'+dxPickEdit1.Text);
    form1.Memo1.Lines.Append('Add:'+dxPickEdit2.Text);
    form1.Memo1.Lines.Append('Add:'+dxPickEdit3.Text);
    form1.Memo1.Lines.Append('Add:'+dxPickEdit4.Text);
    form1.Memo1.Lines.Append('Add:'+dxPickEdit5.Text);
    form1.Memo1.Lines.Append('Add:'+dxPickEdit6.Text);
    form1.Memo1.Lines.Append('Add:'+dxPickEdit7.Text);
    form1.Memo1.Lines.Append('Add:'+dxPickEdit8.Text);
    form1.Memo1.Lines.Append('Add:'+dxPickEdit9.Text);
    form1.Memo1.Lines.Append('Add:'+dxPickEdit10.Text);
    form1.Memo1.Lines.Append('Add:'+dxPickEdit11.Text);
    DataModule2.IBQueryAll.Close;
     with DataModule2 do
     begin
    IBQueryAll.SQL.Clear;
    IBQueryAll.SQL.Add('select * from tabl04 ');
    s:=Trim(dxPickEdit1.Text);
    if s='' then s:='none';
    IBQueryAll.SQL.Add('where T402='''+s+'''');
     end;
    DataModule2.IBQueryAll.Open;
     if DataModule2.IBQueryAll.RecordCount>0 then
      nt4:=DataModule2.IBQueryAll.fieldbyname('T401').AsInteger
     else
    begin
    DataModule2.IBTable4.Insert;
    DataModule2.IBTable4T401.AsInteger:=0;
    s100:=dxPickEdit1.Text;
    if s100='' then s100:='none';
    DataModule2.IBTable4T402.AsString:=s100;
    DataModule2.IBTable4.Post;
    DataModule2.IBQueryAll.Close;
    DataModule2.IBQueryAll.Open;
      nt4:=DataModule2.IBQueryAll.fieldbyname('T401').AsInteger
    end;
    DataModule2.IBQueryAll.Close;
     with DataModule2 do
     begin
    IBQueryAll.SQL.Clear;
    IBQueryAll.SQL.Add('select * from tabl05 ');
    s:=Trim(dxPickEdit2.Text);
    if s='' then s:='none';
    IBQueryAll.SQL.Add('where T502='''+s+'''');
     end;
    DataModule2.IBQueryAll.Open;
     if DataModule2.IBQueryAll.RecordCount>0 then
      nt5:=DataModule2.IBQueryAll.fieldbyname('T501').AsInteger
     else
    begin
    DataModule2.IBTable5.Insert;
    DataModule2.IBTable5T501.AsInteger:=0;
    s100:=dxPickEdit2.Text;
    if s100='' then s100:='none';
    DataModule2.IBTable5T502.AsString:=s100;
    DataModule2.IBTable5.Post;
    DataModule2.IBQueryAll.Close;
    DataModule2.IBQueryAll.Open;
      nt5:=DataModule2.IBQueryAll.fieldbyname('T501').AsInteger
    end;
    DataModule2.IBQueryAll.Close;
     with DataModule2 do
     begin
    IBQueryAll.SQL.Clear;
    IBQueryAll.SQL.Add('select * from tabl06 ');
    s:=Trim(dxPickEdit3.Text);
    if s='' then s:='none';
    IBQueryAll.SQL.Add('where T602='''+s+'''');
     end;
    DataModule2.IBQueryAll.Open;
     if DataModule2.IBQueryAll.RecordCount>0 then
      nt6:=DataModule2.IBQueryAll.fieldbyname('T601').AsInteger
     else
    begin
    DataModule2.IBTable6.Insert;
    DataModule2.IBTable6T601.AsInteger:=0;
       s100:=dxPickEdit3.Text;
    if s100='' then s100:='none';
    DataModule2.IBTable6T602.AsString:=s100;
    DataModule2.IBTable6.Post;
    DataModule2.IBQueryAll.Close;
    DataModule2.IBQueryAll.Open;
      nt6:=DataModule2.IBQueryAll.fieldbyname('T601').AsInteger
    end;
    DataModule2.IBQueryAll.Close;
     with DataModule2 do
     begin
    IBQueryAll.SQL.Clear;
    IBQueryAll.SQL.Add('select * from tabl08 ');
    s:=Trim(dxPickEdit11.Text);
    if s='' then s:='none';
    IBQueryAll.SQL.Add('where T802='''+s+'''');
     end;
    DataModule2.IBQueryAll.Open;
     if DataModule2.IBQueryAll.RecordCount>0 then
      nt8:=DataModule2.IBQueryAll.fieldbyname('T801').AsInteger
     else
    begin
    DataModule2.IBTable8.Insert;
    DataModule2.IBTable8T801.AsInteger:=0;
    s50:=dxPickEdit11.Text;
    if s50='' then s50:='none';
    DataModule2.IBTable8T802.AsString:=s50;
    DataModule2.IBTable8.Post;
    DataModule2.IBQueryAll.Close;
    DataModule2.IBQueryAll.Open;
      nt8:=DataModule2.IBQueryAll.fieldbyname('T801').AsInteger
    end;
    DataModule2.IBQueryAll.Close;
    if dxPickEdit5.Text='' then
     begin
      snam:=trim(dxPickEdit9.Text);
      sot:=trim(dxPickEdit10.Text);
      ss:=Trim(dxPickEdit8.Text);
      if snam<>'' then
      ss:=ss+' '+snam[1]+'.';
      if sot<>'' then
      ss:=ss+' '+sot[1]+'.';
      dxPickEdit5.Text:=ss;
     end;
     with DataModule2 do
     begin
    IBQueryAll.SQL.Clear;
    IBQueryAll.SQL.Add('select * from tabl07 ');
     
    s:=Trim(dxPickEdit5.Text);
    if s='' then s:='none';
    IBQueryAll.SQL.Add('where (T702='''+s+''') and');
     
    s:=Trim(dxPickEdit6.Text);
    if s='' then s:='none';
    IBQueryAll.SQL.Add('   (T706='''+s+''') and');
     
    s:=Trim(dxPickEdit7.Text);
    if s='' then s:='none';
    IBQueryAll.SQL.Add('   (T707='''+s+''') and');
     
    s:=Trim(dxPickEdit8.Text);
    if s='' then s:='none';
    IBQueryAll.SQL.Add('   (T703='''+s+''') and');
     
    s:=Trim(dxPickEdit9.Text);
    if s='' then s:='none';
    IBQueryAll.SQL.Add('   (T704='''+s+''') and');
     
    s:=Trim(dxPickEdit10.Text);
    if s='' then s:='none';
    IBQueryAll.SQL.Add('   (T705='''+s+''')');
     end;
    DataModule2.IBQueryAll.Open;
     if DataModule2.IBQueryAll.RecordCount>0 then
      nt7:=DataModule2.IBQueryAll.fieldbyname('T701').AsInteger
     else
    begin
    DataModule2.IBTable7.Insert;
    DataModule2.IBTable7T701.AsInteger:=0;
    s100:=dxPickEdit5.Text;
    if s100='' then s100:='none';
    DataModule2.IBTable7T702.AsString:=s100;
    s30:=dxPickEdit8.Text;
    if s30='' then s30:='none';
    DataModule2.IBTable7T703.AsString:=s30;
       s30:=dxPickEdit9.Text;
    if s30='' then s30:='none';
    DataModule2.IBTable7T704.AsString:=s30;
    s30:=dxPickEdit10.Text;
    if s30='' then s30:='none';
    DataModule2.IBTable7T705.AsString:=s30;
    s100:=dxPickEdit6.Text;
       if s100='' then s100:='none';
    DataModule2.IBTable7T706.AsString:=s100;
    s30:=dxPickEdit7.Text;
    if s30='' then s30:='none';
    DataModule2.IBTable7T707.AsString:=s30;
    DataModule2.IBTable7.Post;
    DataModule2.IBQueryAll.Close;
    DataModule2.IBQueryAll.Open;
      nt7:=DataModule2.IBQueryAll.fieldbyname('T701').AsInteger
    end;
    {Showmessage('T4='+inttostr(nt4)+' T5='+inttostr(nt5)+' T6='+inttostr(nt6)+' T7='+inttostr(nt7)+' '+' T8='+inttostr(nt8)+' ');}
    begin
    DataModule2.IBTable1.Insert;
    DataModule2.IBTable1T101.AsInteger:=0;
    DataModule2.IBTable1T102.AsInteger:=round(dxSpinEdit1.Value);
    DataModule2.IBTable1T103.AsDateTime:=StrToDate(dxDateEdit1.Text);
    dtd:=StrToDate(dxDateEdit1.Text);
       DecodeDate(DtD,YY,MM,DD);
    DtD:=DateSer(YY,MM,DD-1);
    DataModule2.IBTable1T104.AsDateTime:=DtD;
    DataModule2.IBTable1T105.AsInteger:=NT4;
    DataModule2.IBTable1T106.AsInteger:=NT5;
    DataModule2.IBTable1T107.AsInteger:=NT6;
    s20:=dxPickEdit4.Text;
    if s20='' then s20:='none';
    DataModule2.IBTable1T108.AsString:=s20;
    if dxCheckEdit1.Checked then
    DataModule2.IBTable1T109.AsString:='1'
    else
    DataModule2.IBTable1T109.AsString:='2';
       DataModule2.IBTable1T110.AsInteger:=NT7;
    DataModule2.IBTable1T111.AsInteger:=NT8;
    DataModule2.IBTable1T112.AsInteger:=NT8;
    DataModule2.IBTable1T113.AsString:='N';
    DataModule2.IBTable1.Post;
    DataModule2.IBQueryAll.Close;
       DataModule2.IBQueryAll.Open;
    DataModule2.IBTable1.Refresh;
    DataModule2.IBTable1.Last;
    nt1:=DataModule2.IBTable1T101.AsInteger;
      for i:=1 to 5 do
      if trim(form4.StringGrid1.Cells[1,i])<>'' then
      begin
      DataModule2.IBQueryAll.Close;
    with DataModule2 do
    begin
    IBQueryAll.SQL.Clear;
    IBQueryAll.SQL.Add('select * from tabl09 ');
    s:=trim(form4.StringGrid1.Cells[1,i]);
    if s='' then s:='none';
    IBQueryAll.SQL.Add('where T902='''+s+'''');
    end;
    DataModule2.IBQueryAll.Open;
    if DataModule2.IBQueryAll.RecordCount>0 then
      nt2:=DataModule2.IBQueryAll.fieldbyname('T901').AsInteger
    else
    begin
    DataModule2.IBTable9.Insert;
    DataModule2.IBTable9T901.AsInteger:=0;
    s200:=trim(form4.StringGrid1.Cells[1,i]);
    if s200='' then s200:='none';
    DataModule2.IBTable9T902.AsString:=s200;
    DataModule2.IBTable9.Post;
    DataModule2.IBQueryAll.Close;
    DataModule2.IBQueryAll.Open;
    nt2:=DataModule2.IBQueryAll.fieldbyname('T901').AsInteger
    end;
      DataModule2.IBTable2.Insert;
      DataModule2.IBTable2T201.AsInteger:=0;
      DataModule2.IBTable2T202.AsInteger:=nt1;
      DataModule2.IBTable2T203.AsInteger:=nt2;
     DataModule2.IBTable2.Post;
      end;
    end;
      for i:=1 to Form14.CoolStringGrid1.RowCount-1 do
      if trim(form14.CoolStringGrid1.Cells[1,i])<>'' then
      begin
      DataModule2.IBTable14.Insert;
      DataModule2.IBTable14T1401.AsInteger:=0;
      DataModule2.IBTable14T1402.AsInteger:=nt1;
      s100:=Form14.CoolStringGrid1.Cells[0,i];
      if s100='' then s100:='none';
      DataModule2.IBTable14T1403.AsString:=s100;
      s100:=Form14.CoolStringGrid1.Cells[1,i];
      if s100='' then s100:='none';
      DataModule2.IBTable14T1404.AsString:=s100;
      DataModule2.IBTable14.Post;
      end;
     DataModule2.IBTable1.Refresh;
     DataModule2.IBTable2.Refresh;
     DataModule2.IBTable4.Refresh;
     DataModule2.IBTable5.Refresh;
     DataModule2.IBTable6.Refresh;
     DataModule2.IBTable7.Refresh;
     DataModule2.IBTable8.Refresh;
     DataModule2.IBTable9.Refresh;
     
      Form1.RefreshDB;
    close;
    end;
     
     
    Процедура закрытия БД (эмуляция перезагрузки компьютера):
     
    Procedure TForm1.RefreshDB;
    begin
    DataModule2.IBDatabase1.Close;
    DataModule2.IBDatabase1.Open;
    DataModule2.IBTable1.Open;
    DataModule2.IBTable2.Open;
    DataModule2.IBTable3.Open;
    DataModule2.IBTable4.Open;
    DataModule2.IBTable5.Open;
    DataModule2.IBTable6.Open;
    DataModule2.IBTable7.Open;
    DataModule2.IBTable8.Open;
    DataModule2.IBTable9.Open;
    DataModule2.IBTable10.Open;
    DataModule2.IBTable11.Open;
    DataModule2.IBTable12.Open;
    DataModule2.IBTable14.Open;
    DataModule2.IBQuery1.Open;
    DataModule2.IBQuery1_1.Open;
    DataModule2.IBQuery1_2.Open;
    DataModule2.IBQuery10.Open;
    DataModule2.IBQuery11.Open;
    DataModule2.IBQuery12.Open;
    DataModule2.IBQuery14.Open;
    DataModule2.IBQuery14_1.Open;
    DataModule2.IBQuery2.Open;
    DataModule2.IBQuery2_1.Open;
    DataModule2.IBQuery3.Open;
    DataModule2.IBQuery3_1.Open;
    DataModule2.IBQuery4.Open;
    DataModule2.IBQuery5.Open;
    DataModule2.IBQuery6.Open;
    DataModule2.IBQuery7.Open;
    DataModule2.IBQuery8.Open;
    DataModule2.IBQuery9.Open;
    DataModule2.IBQueryAll.Open;
    DataModule2.IBQueryAll2.Open;
     
    end;
    function DateSer(y, m, d: Integer): TDateTime;
    const
      mj: array[1..12] of Integer = (31, 28, 31, 30, 31, 30, 31,
      31, 30, 31, 30, 31);
    var
      add: Integer;
    begin
      while (true) do
      begin
      y := y + (m - 1) div 12;
      m := (m - 1) mod 12 + 1;
      if m <= 0 then
      begin
      Inc(m, 12);
      Dec(y);
      end;
      if ((y mod 4 = 0) and
      ((y mod 100 <> 0) or (y mod 400 = 0)))
      and (m = 2) then
      add := 1 //дополнительный день в феврале
      else
      add := 0;
      if (d > 0) and (d <= (mj[m] + add)) then
      break;
      if d > 0 then
      begin
      Dec(d, mj[m] + add);
      Inc(m);
      end
      else
      begin
      Inc(d, mj[m] + add);
     Dec(m);
      end;
      end;
      Result := EncodeDate(y, m, d);
    end;
     
    Заполнение полей:
     
    procedure TForm3.FormShow(Sender: TObject);
    var
     s:string;
    begin
    dxPickEdit1.Items.Clear;
    DataModule2.IBQuery4.First;
    repeat
     s:=Trim(DataModule2.IBQuery4T402.AsString);
     if s<>'' then
      if dxPickEdit1.Items.IndexOf(s)=-1 then
    dxPickEdit1.Items.Add(s);
     DataModule2.IBQuery4.Next;
    until DataModule2.IBQuery4.Eof;
     dxPickEdit1.Sorted:=true;
    dxPickEdit2.Items.Clear;
    DataModule2.IBQuery5.First;
    repeat
     s:=Trim(DataModule2.IBQuery5T502.AsString);
     if s<>'' then
      if dxPickEdit2.Items.IndexOf(s)=-1 then
    dxPickEdit2.Items.Add(s);
     DataModule2.IBQuery5.Next;
    until DataModule2.IBQuery5.Eof;
     dxPickEdit2.Sorted:=true;
    dxPickEdit3.Items.Clear;
    DataModule2.IBQuery6.First;
    repeat
     s:=Trim(DataModule2.IBQuery6T602.AsString);
     if s<>'' then
      if dxPickEdit3.Items.IndexOf(s)=-1 then
    dxPickEdit3.Items.Add(s);
     DataModule2.IBQuery6.Next;
    until DataModule2.IBQuery6.Eof;
     dxPickEdit3.Sorted:=true;
    dxPickEdit11.Items.Clear;
    DataModule2.IBQuery8.First;
    repeat
     s:=Trim(DataModule2.IBQuery8T802.AsString);
     if s<>'' then
      if dxPickEdit11.Items.IndexOf(s)=-1 then
    dxPickEdit11.Items.Add(s);
     DataModule2.IBQuery8.Next;
    until DataModule2.IBQuery8.Eof;
     dxPickEdit11.Sorted:=true;
    dxPickEdit5.Items.Clear;
    dxPickEdit6.Items.Clear;
    dxPickEdit7.Items.Clear;
    dxPickEdit8.Items.Clear;
    dxPickEdit9.Items.Clear;
    dxPickEdit10.Items.Clear;
    DataModule2.IBQuery7.First;
    repeat
     s:=Trim(DataModule2.IBQuery7T702.AsString);
     if s<>'' then
      if dxPickEdit5.Items.IndexOf(s)=-1 then
    dxPickEdit5.Items.Add(s);
     s:=Trim(DataModule2.IBQuery7T706.AsString);
     if s<>'' then
      if dxPickEdit6.Items.IndexOf(s)=-1 then
    dxPickEdit6.Items.Add(s);
     s:=Trim(DataModule2.IBQuery7T707.AsString);
     if s<>'' then
      if dxPickEdit7.Items.IndexOf(s)=-1 then
    dxPickEdit7.Items.Add(s);
     s:=Trim(DataModule2.IBQuery7T703.AsString);
     if s<>'' then
      if dxPickEdit8.Items.IndexOf(s)=-1 then
    dxPickEdit8.Items.Add(s);
     s:=Trim(DataModule2.IBQuery7T704.AsString);
     if s<>'' then
      if dxPickEdit9.Items.IndexOf(s)=-1 then
    dxPickEdit9.Items.Add(s);
     s:=Trim(DataModule2.IBQuery7T705.AsString);
     if s<>'' then
      if dxPickEdit10.Items.IndexOf(s)=-1 then
    dxPickEdit10.Items.Add(s);
     DataModule2.IBQuery7.Next;
    until DataModule2.IBQuery7.Eof;
     dxPickEdit5.Sorted:=true;
     dxPickEdit6.Sorted:=true;
     dxPickEdit7.Sorted:=true;
     dxPickEdit8.Sorted:=true;
     dxPickEdit9.Sorted:=true;
     dxPickEdit10.Sorted:=true;
    end;
     
    Процедура открытия и редактирования:
     
    procedure TForm1.N7Click(Sender: TObject);
    var
     id,id2,i,no:integer;
     s:string;
    begin
    BM := DataModule2.IBQuery1_2.GetBookmark;
    id:=DataModule2.IBQuery1_2T101.AsInteger;
     id2:=DataModule2.IBQuery1_2T102.AsInteger;
     Form5.NT1:=id;
     Form5.id2:=id2;
    DataModule2.IBQueryAll.Close;
     with DataModule2 do
     begin
    IBQueryAll.SQL.Clear;
    IBQueryAll.SQL.Add('select * from tabl01 ');
    IBQueryAll.SQL.Add('where T101='+inttostr(id)+' ');
     end;
    DataModule2.IBQueryAll.Open;
    Form5.NT2:=DataModule2.IBQueryAll.fieldbyname('T102').AsInteger;
    Form5.dxDateEdit1.Date:=DataModule2.IBQueryAll.fieldbyname('T103').AsDateTime;
    Form5.dxDateEdit2.Date:=DataModule2.IBQueryAll.fieldbyname('T104').AsDateTime;
    Form5.NT5:=DataModule2.IBQueryAll.fieldbyname('T105').AsInteger;
    Form5.NT6:=DataModule2.IBQueryAll.fieldbyname('T106').AsInteger;
    Form5.NT7:=DataModule2.IBQueryAll.fieldbyname('T107').AsInteger;
    Form5.dxPickEdit4.Text:=trim(DataModule2.IBQueryAll.fieldbyname('T108').AsString);
    Form5.NT9:=DataModule2.IBQueryAll.fieldbyname('T109').AsString;
    Form5.NT10:=DataModule2.IBQueryAll.fieldbyname('T110').AsInteger;
    Form5.NT11:=DataModule2.IBQueryAll.fieldbyname('T111').AsInteger;
    Form5.NT12:=DataModule2.IBQueryAll.fieldbyname('T112').AsInteger;
    Form5.NT13:=DataModule2.IBQueryAll.fieldbyname('T113').AsString;
    Form5.Caption:='Редактирование заявки на обслуживание № '+inttostr(form5.NT2);
    if Form5.NT13<>'Y' then Form5.dxDateEdit2.Visible:=false;
    form5.SpeedButton6.Enabled:=true;
    if Form5.NT13='Y'then form5.SpeedButton6.Enabled:=false;
    Form5.dxCheckEdit1.Checked:=false;
    Form5.dxCheckEdit2.Checked:=false;
    If form5.NT9='1' then
     Form5.dxCheckEdit1.Checked:=true;
    If form5.NT9='2' then
     Form5.dxCheckEdit2.Checked:=true;
    if form5.NT13='N' then
     form5.dxPickEdit13.ItemIndex:=0;
    if form5.NT13='B' then
     form5.dxPickEdit13.ItemIndex:=1;
    if form5.NT13='C' then
     form5.dxPickEdit13.ItemIndex:=2;
    if form5.NT13='D' then
     form5.dxPickEdit13.ItemIndex:=3;
    if form5.NT13='Y' then
     form5.dxPickEdit13.ItemIndex:=4;
    DataModule2.IBQueryAll.Close;
     with DataModule2 do
     begin
    IBQueryAll.SQL.Clear;
    IBQueryAll.SQL.Add('select * from tabl04 ');
    s:=inttostr(form5.NT5);
    if s='' then s:='none';
    IBQueryAll.SQL.Add('where T401='''+s+'''');
     end;
    DataModule2.IBQueryAll.Open;
    Form5.dxPickEdit1.Text:=Trim(DataModule2.IBQueryAll.fieldbyname('T402').AsString);
    DataModule2.IBQueryAll.Close;
     with DataModule2 do
     begin
    IBQueryAll.SQL.Clear;
    IBQueryAll.SQL.Add('select * from tabl05 ');
    s:=inttostr(form5.NT6);
    if s='' then s:='none';
    IBQueryAll.SQL.Add('where T501='''+s+'''');
     end;
    DataModule2.IBQueryAll.Open;
    Form5.dxPickEdit2.Text:=Trim(DataModule2.IBQueryAll.fieldbyname('T502').AsString);
    DataModule2.IBQueryAll.Close;
     with DataModule2 do
     begin
    IBQueryAll.SQL.Clear;
    IBQueryAll.SQL.Add('select * from tabl06 ');
    s:=inttostr(form5.NT7);
    if s='' then s:='none';
    IBQueryAll.SQL.Add('where T601='''+s+'''');
     end;
    DataModule2.IBQueryAll.Open;
    Form5.dxPickEdit3.Text:=Trim(DataModule2.IBQueryAll.fieldbyname('T602').AsString);
    DataModule2.IBQueryAll.Close;
     with DataModule2 do
     begin
    IBQueryAll.SQL.Clear;
    IBQueryAll.SQL.Add('select * from tabl07 ');
    s:=inttostr(form5.NT10);
    if s='' then s:='none';
    IBQueryAll.SQL.Add('where T701='''+s+'''');
     end;
    DataModule2.IBQueryAll.Open;
    form5.dxSpinEdit1.Value:=form5.id2;
    Form5.dxPickEdit5.Text:=Trim(DataModule2.IBQueryAll.fieldbyname('T702').AsString);
    Form5.dxPickEdit6.Text:=Trim(DataModule2.IBQueryAll.fieldbyname('T706').AsString);
    Form5.dxPickEdit7.Text:=Trim(DataModule2.IBQueryAll.fieldbyname('T707').AsString);
    Form5.dxPickEdit8.Text:=Trim(DataModule2.IBQueryAll.fieldbyname('T703').AsString);
    Form5.dxPickEdit9.Text:=Trim(DataModule2.IBQueryAll.fieldbyname('T704').AsString);
    Form5.dxPickEdit10.Text:=Trim(DataModule2.IBQueryAll.fieldbyname('T705').AsString);
    DataModule2.IBQueryAll.Close;
     with DataModule2 do
     begin
    IBQueryAll.SQL.Clear;
    IBQueryAll.SQL.Add('select * from tabl08 ');
    s:=inttostr(form5.NT11);
    if s='' then s:='none';
    IBQueryAll.SQL.Add('where T801='''+s+'''');
     end;
    DataModule2.IBQueryAll.Open;
    Form5.dxPickEdit11.Text:=Trim(DataModule2.IBQueryAll.fieldbyname('T802').AsString);
    DataModule2.IBQueryAll.Close;
     with DataModule2 do
     begin
    IBQueryAll.SQL.Clear;
    IBQueryAll.SQL.Add('select * from tabl08 ');
    s:=inttostr(form5.NT12);
    if s='' then s:='none';
    IBQueryAll.SQL.Add('where T801='''+s+'''');
     end;
    DataModule2.IBQueryAll.Open;
    Form5.dxPickEdit12.Text:=Trim(DataModule2.IBQueryAll.fieldbyname('T802').AsString);
    DataModule2.IBQueryAll.Close;
     with DataModule2 do
     begin
    IBQueryAll.SQL.Clear;
    IBQueryAll.SQL.Add('select * from tabl02 ');
    s:=inttostr(form5.NT1);
    if s='' then s:='none';
    IBQueryAll.SQL.Add('where T202='''+s+'''');
     end;
    DataModule2.IBQueryAll.Open;
    DataModule2.IBQueryAll.First;
    i:=0;
    Form5.CoolStringGrid1.Clear;
    if DataModule2.IBQueryAll.RecordCount>0 then
    repeat
      no:=DataModule2.IBQueryAll.fieldbyname('T203').AsInteger;
      DataModule2.IBQueryAll2.Close;
    with DataModule2 do
    begin
      IBQueryAll2.SQL.Clear;
      IBQueryAll2.SQL.Add('select * from tabl09 ');
      s:=inttostr(No);
      if s='' then s:='none';
      IBQueryAll2.SQL.Add('where T901='''+s+'''');
    end;
      DataModule2.IBQueryAll2.Open;
      Inc(i);
      Form5.CoolStringGrid1.Cells[0,i]:=trim(DataModule2.IBQueryAll2.fieldbyname('T902').AsString);
      DataModule2.IBQueryAll.Next;
    until DataModule2.IBQueryAll.Eof;
     
     
    Процедура автоматического заполнения формы:
     
    procedure TForm3.dxPickEdit5KeyPress(Sender: TObject; var Key: Char);
    var
     s:string;
    begin
    s:=dxPickEdit5.Text;
    {if key=#13 then}
    begin
    DataModule2.IBQueryAll.Close;
     with DataModule2 do
     begin
    IBQueryAll.SQL.Clear;
    IBQueryAll.SQL.Add('select * from tabl07 ');
    if s='' then s:='none';
    IBQueryAll.SQL.Add('where T702='''+s+'''');
    IBQueryAll.SQL.Add('order by T701 desc ');
     end;
    DataModule2.IBQueryAll.Open;
     if DataModule2.IBQueryAll.RecordCount>0 then
    begin
    dxPickEdit6.Text  := Trim(DataModule2.IBQueryAll.fieldbyname('T706').AsString);
    dxPickEdit7.Text  := Trim(DataModule2.IBQueryAll.fieldbyname('T707').AsString);
    dxPickEdit8.Text  := Trim(DataModule2.IBQueryAll.fieldbyname('T703').AsString);
    dxPickEdit9.Text  := Trim(DataModule2.IBQueryAll.fieldbyname('T704').AsString);
    dxPickEdit10.Text := Trim(DataModule2.IBQueryAll.fieldbyname('T705').AsString);
    end;
     
    Руководство. Программа имеет интуитивно понятный интерфейс. Не всегда есть необходимость ввести полный набор данных, поэтому необязательно вводить всю информацию, достаточно ввести только основное.
    Так как программа имеет очень узко специализированную область применения (это требуется заказчику), и нет необходимости создавать дополнительную справочную систему. Достаточно будет обучения заказчика. В план обучения входит:
    · Обучение установки программы
    · Восстановление поврежденных данных и предотвращение. (эти два пункта есть в помощи поставляемой с InterBase)
    · Обучение заполнению данных (для дальнейшей работы, есть справочник который в полном объеме представляет информацию по программе, а благодаря интуитивно понятному интерфейсу, вероятность ошибиться равна нулю).
     
    Помощь по работе с программой:
    1. Создание новой записи
    Находясь в рабочей области нажмите <<Ins>> или Запись --> Новая.
    В появившемся окне желательно заполнить графы: устройство, Организация/физ. лицо, Специалист сервисного центра. И   О Б Я З А Т Е Л Ь Н О указать  вид ремонта. Затем нажать далее и указать неполадки.
    Если заполняя графу <<Организация/Физ.лицо>> дважды нажать <<Enter>>, то  остальные графы заполнятся сами, используя предыдущие данные.
     
    2. Открытие записи
    Находясь в рабочей области нажмите <<Enter>> или Запись --> Открыть. В появившемся окне можно указать выполненные операции и распечатать. Дату выдачи есть смысл ставить только при установлении
    состояния в положение <<Выполнено>>
     
    3. Сортировка записи
    Находясь в рабочей области нажмите <<F3>> или Запись --> Сортировка. В появившемся окне нужно указать критерий выборки и текст выборки. Если  не требуется выборка, то в критерии выборки нужно указать - none- В  этой версии не требуется вводить весь текст. Достаточно ввесть только часть.  например: дана фамилия "Иванов" можно ввести "Ив". добавлять знак "%" не требуется. Если нужно искать по типу ремонта то при платном нужно указать "1", а при гарантийном "2"
     
    4. Настройки
    Находясь в рабочей области нажмите  Настройка --> Настройка.В появившемся окне есть два пункта Цвет и Log. Для изменения цвета нужно кликнуть по цветному квадратику
     
    Порядок ввода в эксплуатацию.  
    Установка Программы.
    На диске находится Borland Interbase v7.0.1. следует запустить Setup.exe и проследовав инструкции установить сервер. Для регистрации следует запустить KeyGen.exe.
    Далее следует перезагрузить компьютер и посмотреть должен появиться процесс ibguardian теперь нужно запустить программу IBConsole. В ней создать новый сервер Local Server. Теперь зайти в папку Dialog2 и запустить setup.exe.
    Теперь установка завершена.
    Оценка проекта.
    Заказчик:
     Все поставленные цели выполнены
    1.   Полностью завершённый проект базы данных «Автоматизированное рабочее место сервисного центра», реализованный на базе СУБД InterBase 7, и алгоритмического языка Delphi 7, содержащий следующие модули:
    · Ввод нового заказа
    · Работа с существующими заказами
    · Сортировка
    · Отчет о проделанной работе сервисного центра
    В целом программа является функциональной и завершенной, удовлетворяющая поставленной задачи.
    Литература 1.   Справочная служба поставляемая с комплексом Borland InterBase 7.0
    2.   Справочная служба поставляемая с комплексом Borland Delphi 7.0
    3.   Шкарина Л. Язык SQL: учебный курс. – СПб.: Питер, 2001. – 592 с.:ил.
    4.   Дарахвелидзе П. Delphi 4. СПб.: БХВ –Санкт-Питербург,1999. –816 с.:ил.
    5.   Дарахвелидзе П. Программирование в Delphi 7. СПб.: БХВ –Петербург,2003. –784 с.:ил.
     
     
Если Вас интересует помощь в НАПИСАНИИ ИМЕННО ВАШЕЙ РАБОТЫ, по индивидуальным требованиям - возможно заказать помощь в разработке по представленной теме - Создание базы данных: «Автоматизированное рабочее место сервисного центра» ... либо схожей. На наши услуги уже будут распространяться бесплатные доработки и сопровождение до защиты в ВУЗе. И само собой разумеется, ваша работа в обязательном порядке будет проверятся на плагиат и гарантированно раннее не публиковаться. Для заказа или оценки стоимости индивидуальной работы пройдите по ссылке и оформите бланк заказа.