Функционална схема и функционален състав на програмата. Структуриран програмен дизайн


Тема 1.3: Системен софтуер

Тема 1.4: Обслужващ софтуер и основи на алгоритмите

Въведение в икономическата информатика

1.3. PC системен софтуер

1.3.1. Структура на компютърния софтуер

Набор от програми, предназначени за решаване на проблеми на компютър, се нарича софтуер. Съставът на компютърния софтуер се нарича софтуерна конфигурация.

Софтуерът може да бъде разделен на три категории:

  1. системен софтуер (програми за обща употреба), които изпълняват различни спомагателни функции, като създаване на копия на използвана информация, предоставяне на помощна информация за компютъра, проверка на функционалността на компютърните устройства и др.
  2. приложен софтуер, който осигурява необходимата работа на компютър: редактиране на текстови документи, създаване на чертежи или снимки, обработка на информационни масиви и др.
  3. инструментален софтуер (системи за програмиране), който осигурява разработването на нови компютърни програми на език за програмиране.


Ориз. 1.

Системен софтуер

Тези програми за общо ползване не са свързани с конкретно компютърно приложение и изпълняват традиционни функции: планиране и управление на задачи, I/O управление и т.н.

С други думи, системните програми изпълняват различни спомагателни функции, например създаване на копия на използвана информация, предоставяне на помощна информация за компютъра, проверка на функционалността на компютърните устройства и др.

Системният софтуер включва:

  • операционни системи (тази програма се зарежда в RAM, когато компютърът е включен);
  • shell програми (осигуряват по-удобен и визуален начин за комуникация с компютър, отколкото използването на командния ред на DOS, например Norton Commander);
  • операционни обвивки – интерфейсни системи, които се използват за създаване на графични интерфейси, мултипрограмиране и др.;
  • Драйвери (програми, предназначени да управляват портове на периферни устройства, обикновено се зареждат в RAM при стартиране на компютъра);
  • помощни програми (спомагателни или помощни програми, които предоставят на потребителя редица допълнителни услуги).

Помощните програми включват:

  • файлови мениджъри или файлови мениджъри;
  • средства за динамично компресиране на данни (позволяват ви да увеличите количеството информация на диска поради динамичното му компресиране);
  • инструменти за гледане и възпроизвеждане;
  • инструменти за диагностика; контролните инструменти ви позволяват да проверявате конфигурацията на компютъра и да проверявате производителността на компютърните устройства, предимно твърди дискове;
  • средства за комуникация (комуникационни програми) са предназначени да организират обмена на информация между компютри;
  • Инструменти за компютърна сигурност (бекъп, антивирусен софтуер).

Трябва да се отбележи, че някои от помощните програми са включени в операционната система, докато другата част функционира автономно. Повечето от общия (системен) софтуер е включен в ОС. Част от общия софтуер е включен в самия компютър (някои от OS програмите и контролните тестове са написани в ROM или PROM, инсталиран на дънната платка). Някои от обичайните софтуери са самостоятелни програми и се доставят отделно.

Приложен софтуер

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

Приложен софтуер - програми, които директно позволяват извършването на необходимата работа на компютър: редактиране на текстови документи, създаване на чертежи или снимки, създаване на електронни таблици и др.

Приложните софтуерни пакети са система от програми, които според обхвата на приложение се делят на проблемно ориентирани пакети с общо предназначение и интегрирани пакети. Съвременните интегрирани пакети съдържат до пет функционални компонента: процесор за тестове и електронни таблици, СУБД, графичен редактор, телекомуникационни средства.

Приложният софтуер, например, включва:

  1. MS OFFICE пакет от офис приложения.
  2. Счетоводни системи.
  3. Финансови аналитични системи.
  4. Интегрирани пакети за управление на офиса.
  5. CAD – системи (системи за автоматизирано проектиране).
  6. HTML или уеб редактори.
  7. Браузърите са средства за преглед на уеб страници.
  8. Графичен редактор.
  9. Експертни системи.

Инструментален софтуер

Инструментален софтуер или системи за програмиране са системи за автоматизиране на разработването на нови програми на език за програмиране.

В най-общия случай, за да създадете програма на избрания език за програмиране (системен език за програмиране), трябва да имате следните компоненти:

  1. Текстов редактор за създаване на файл с изходния текст на програмата.
  2. Компилатор или интерпретатор. Изходният текст се превежда в междинен обектен код с помощта на програма за компилиране. Изходният код на голяма програма се състои от няколко модули(изходни файлове). Всеки модул се компилира в отделен файл с обектен код, който след това трябва да се комбинира в един.
  3. Редактор на връзки или асемблер, който извършва свързване на обектни модули и генерира работещо приложение като изход - изпълним код. Изпълнимият код е пълна програма, която може да се изпълнява на всеки компютър, който има операционната система, за която е създадена програмата. По правило полученият файл има разширение .EXE или .COM.
  4. Напоследък методите за визуално програмиране (използващи скриптови езици), насочени към създаване на Windows приложения, станаха широко разпространени. Този процес е автоматизиран в среди за бързо проектиране. В този случай се използват готови визуални компоненти, които се конфигурират с помощта на специални редактори.

Най-популярните редактори (системи за програмиране на програми, използващи визуални инструменти) за визуален дизайн:

  1. Borland Delphi - предназначен за решаване на почти всеки проблем с програмирането на приложения.
  2. Borland C++ Builder е отличен инструмент за разработване на DOS и Windows приложения.
  3. Microsoft Visual Basic е популярен инструмент за създаване на Windows програми.
  4. Microsoft Visual C++ - този инструмент ви позволява да разработвате всякакви приложения, работещи в операционна среда като Microsoft Windows.

Набор от програми, предназначени за решаване на проблеми на компютър, се нарича софтуер. Съставът на компютърния софтуер се нарича софтуерна конфигурация. Софтуерът може да бъде разделен на три категории (фиг. 1):

Фигура 1. Класификация на софтуера

    системен софтуер (програми за обща употреба), които изпълняват различни спомагателни функции, като създаване на копия на използвана информация, предоставяне на помощна информация за компютъра, проверка на функционалността на компютърните устройства и др.

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

    инструментален софтуер (системи за програмиране), който осигурява разработването на нови компютърни програми на език за програмиране.

Системен софтуере набор от програми, които осигуряват ефективно управление на компоненти на компютърната система, като процесор, RAM, входно/изходни устройства, мрежово оборудване, действащи като „междуслоен интерфейс“, от едната страна на който е хардуерът, а от другата, потребителски приложения. За разлика от приложния софтуер, системният софтуер не решава специфични приложни проблеми, а само осигурява работата на други програми, управлява хардуерните ресурси на компютърната система и т.н.

Тези програми за общо ползване не са свързани с конкретно компютърно приложение и изпълняват традиционни функции: планиране и управление на задачи, I/O управление и т.н. С други думи, системните програми изпълняват различни спомагателни функции, например създаване на копия на използвана информация, предоставяне на помощна информация за компютъра, проверка на функционалността на компютърните устройства и др. Системният софтуер включва:

    операционни системи (тази програма се зарежда в RAM, когато компютърът е включен)

    shell програми (предоставят по-удобен и визуален начин за комуникация с компютър, отколкото използването на командния ред на DOS, например Norton Commander)

    операционните обвивки са интерфейсни системи, които се използват за създаване на графични интерфейси, мултипрограмиране и т.н.

    Драйвери (програми, предназначени да контролират портове на периферни устройства, обикновено се зареждат в RAM при стартиране на компютъра)

    помощни програми (спомагателни или помощни програми, които предоставят на потребителя редица допълнителни услуги)

Помощните програми включват:

    файлови мениджъри или файлови мениджъри

    инструменти за динамично компресиране на данни (позволяват ви да увеличите количеството информация на диска поради динамичното му компресиране)

    инструменти за гледане и възпроизвеждане

    инструменти за диагностика; контролните инструменти ви позволяват да проверявате конфигурацията на компютъра и да проверявате функционалността на компютърните устройства, предимно твърдите дискове

    средства за комуникация (комуникационни програми) са предназначени да организират обмена на информация между компютрите

    Инструменти за компютърна сигурност (бекъп, антивирусен софтуер).

Помощните програми са програми, предназначени за решаване на тесен кръг от спомагателни задачи.

Понякога помощните програми се класифицират като обслужващ софтуер

Помощните програми се използват за:

    Мониторинг на сензорни индикатори и работа на оборудването - мониторинг на температурата на процесора и видео адаптера; четене на S.M.A.R.T. твърди дискове;

    Управление на параметрите на оборудването - ограничаване на максималната скорост на въртене на CD устройството; промяна на скоростта на вентилатора.

    Индикатори за наблюдение - проверка на референтната цялост; коректност на записа на данни.

    Разширени възможности - форматиране и/или повторно разделяне на диска при запазване на данни, изтриване без възможност за възстановяване.

Видове комунални услуги:

Дискови помощни програми

      Дефрагментиращи програми

      Сканиране на дискове - търсене на неправилно записани или повредени по различни начини файлове и дискови области и последващото им премахване за ефективно използване на дисковото пространство.

      Disk Cleanup - изтриване на временни файлове, ненужни файлове, изпразване на кошчето.

      Разделянето на диска е разделяне на диск на логически дискове, които могат да имат различни файлови системи и да се възприемат от операционната система като няколко различни диска.

      Архивиране - създаване на резервни копия на цели дискове и отделни файлове, както и възстановяване от тези копия.

      Дискова компресия - компресиране на информация на дискове за увеличаване на капацитета на твърдите дискове.

      • Помощни програми за регистър

        Помощни програми за наблюдение на оборудването

        Тестове на оборудването

Фигура 2. Място на софтуера с отворен код в многостепенната структура на компютъра

Трябва да се отбележи, че някои от помощните програми са включени в операционната система, докато другата част функционира автономно. Повечето от общия (системен) софтуер е включен в ОС (фиг. 2). Част от общия софтуер е включен в самия компютър (някои от OS програмите и контролните тестове са написани в ROM или PROM, инсталиран на дънната платка). Някои от обичайните софтуери са самостоятелни програми и се доставят отделно.

          Приложен софтуер. Приложните програми могат да се използват самостоятелно или като част от софтуерни системи или пакети. Приложен софтуер - програми, които директно поддържат извършването на необходимата работа на компютър: редактиране на текстови документи, създаване на чертежи или снимки, създаване на електронни таблици и др. Пакетите с приложен софтуер са система от програми, които според обхвата на приложение се разделят на ориентирани към проблеми, общи пакети назначения и интегрирани пакети. Съвременните интегрирани пакети съдържат до пет функционални компонента: процесор за тестове и електронни таблици, СУБД, графичен редактор, телекомуникационни средства. Приложният софтуер, например, включва:

    MS OFFICE пакет от офис приложения

    Счетоводни системи

    Финансови аналитични системи

    Интегрирани пакети за управление на офиса

    CAD – системи (системи за компютърно проектиране)

    HTML или уеб редактори

    Браузъри – средства за преглед на уеб страници

    Графичен редактор

    Експертни системи.

          Инструментален софтуер. Инструментален софтуер или системи за програмиране са системи за автоматизиране на разработването на нови програми на език за програмиране. В най-общия случай, за да създадете програма на избрания език за програмиране (системен език за програмиране), е необходимо да имате следните компоненти: 1. Текстов редактор за създаване на файл с изходния текст на програмата. 2. Компилатор или интерпретатор. Изходният текст се превежда в междинен обектен код с помощта на програма за компилиране. Изходният код на голяма програма се състои от няколко модули(изходни файлове). Всеки модул се компилира в отделен файл с обектен код, който след това трябва да се комбинира в едно цяло.3. Редактор на връзки или асемблер, който извършва свързване на обектни модули и генерира работещо приложение като изход - изпълним код. Изпълнимият код е пълна програма, която може да се изпълнява на всеки компютър, който има операционната система, за която е създадена програмата. По правило полученият файл има разширение .EXE или .COM.4. Напоследък методите за визуално програмиране (използващи скриптови езици), насочени към създаване на Windows приложения, станаха широко разпространени. Този процес е автоматизиран в среди за бързо проектиране. В този случай се използват готови визуални компоненти, които се конфигурират с помощта на специални редактори. Най-популярните редактори (системи за програмиране на програми, използващи визуални инструменти) за визуален дизайн:

    Borland Delphi - предназначен за решаване на почти всеки проблем с програмирането на приложения

    Borland C++ Builder е отличен инструмент за разработване на DOS и Windows приложения

    Microsoft Visual Basic е популярен инструмент за създаване на Windows програми

    Microsoft Visual C++ - този инструмент ви позволява да разработвате всякакви приложения, работещи в операционна среда като Microsoft Windows

Контролни въпроси:

    Определете операционната система.

    Какъв софтуер се счита за системен софтуер?

    Назовете помощния софтуер.

    Какъв софтуер се счита за приложен софтуер?

    Каква е целта на софтуера?

    Кои са основните класове програми? Дайте примери за програми във всеки клас според предназначението им.

Структурни и функционални схеми на програмата

Структурната диаграма е набор от елементарни връзки на обект и връзките между тях, един от видовете графични модели. Под елементарна връзка се разбира част от обект, система за управление и т.н., която изпълнява елементарна функция. На фиг. 2.1 е показана блоковата схема на разработената програма.

Фигура 2.1 - Блокова диаграма на програмата

Функционалната диаграма е документ, който обяснява процесите, протичащи в отделни функционални вериги на продукт (инсталация) или продукта като цяло. Функционалната диаграма е обяснение на определени видове процеси, протичащи в интегрални функционални блокове и вериги на устройство. Фигура 2.2 показва функционалната схема на разработената програма.

Фигура 2.2 - Функционална схема на програмата

Описание на процедурите, функциите и модулите

Декларация на модула:

Всеки изходен файл трябва да съдържа декларация на модул. Думата единица е ключова дума, така че трябва да бъде написана с малки букви. Името на модула може да съдържа главни и малки букви и трябва да съвпада с името, използвано от операционната система за този файл.

Стандартни модули на езика Delphi. Средата Delphi включва отличен набор от модули, чиито възможности ще задоволят и най-претенциозния програмист. Всички модули могат да бъдат разделени на две групи: системни модули и модули за визуални компоненти.

Системните модули включват System, SysUtils, ShareMem, Math. Те съдържат най-често използваните типове данни в програми, константи, променливи, процедури и функции. Системният модул е ​​сърцето на средата на Delphi; съдържащите се в него подпрограми осигуряват работата на всички останали модули на системата. Системният модул се включва автоматично във всяка програма и не е необходимо да се посочва в оператора за използване.

Модулите за визуални компоненти (VCL - Visual Component Library) се използват за визуална разработка на пълнофункционални GUI приложения - приложения с графичен потребителски интерфейс (Graphical User Interface). Тези модули заедно представляват обектно-ориентирана библиотека от високо ниво с всички видове елементи на потребителския интерфейс: бутони, етикети, менюта, панели и др. В допълнение, модулите на тази библиотека съдържат прости и ефективни средства за достъп до бази данни. Тези модули се свързват автоматично, когато компонентите се поставят върху формуляра.

Описание на процедурите:

Тази процедура затваря заглавната страница и страницата и излиза от програмата.

процедура TForml.Button2Click(Подател: TObject);

Тази процедура отваря главното меню на програмата и премахва заглавната страница от екрана.

процедура TForm2.Button1Click(Подател: TObject);

Тази процедура отваря прозорец с избор на метод за решаване на транспортния проблем и премахва прозореца на менюто от екрана.

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

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

Тази процедура отваря прозорец за разработчика и премахва прозореца на менюто.

процедура TForm2.Button5Click(Подател: TObject);

Тази процедура затваря прозореца на менюто и излиза от програмата.

процедура TForm3.Button1Click(Подател: TObject);

Тази процедура излиза в главното меню и затваря прозореца с избор на метод за решаване на транспортния проблем:

процедура TForm3.Button3Click(Подател: TObject);

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

Тази процедура затваря прозореца с решения на транспортния проблем с помощта на три метода и показва формуляр с решение на проблема с помощта на метода на двойното предпочитание:

процедура TForm2.Button2Click(Подател: TObject);

процедура TForm2.Button3Click(Подател: TObject);

процедура TForm2.Button4Click(Подател: TObject);

Тези процедури позволяват на потребителя да премине от главното меню към всеки елемент в програмата: „Формуляр за решение“, „Ръководство за потребителя“, „Информация за разработчици“, „Изход“.

процедура СТЪПКА ПО СТЪПКА;

Това е процедура за извършване на изчисления стъпка по стъпка в програмата, можете да проследявате всеки етап от попълването на таблицата. След извършване на едно изчисление, процедурата прекъсва изчислението и изчаква команди от потребителя.

процедура TForm4.Label2Click(Подател: TObject);

процедура TForm4.Label3Click(Подател: TObject);

процедура TForm4.Label4Click(Подател: TObject);

процедура TForm4.Label5Click(Подател: TObject);

Тези процедури зареждат текстовото поле Memo със съдържанието на текстов документ в зависимост от избрания елемент от менюто. Текстовите документи съдържат информация за използването на приложението.

процедура TForm1.Button8Click(Подател: TObject);

Тази процедура извършва изчисления с помощта на формули, замества въведените стойности и накрая записва резултата в променлива.

процедура TForm1.Button9Click(Подател: TObject);

Тази процедура показва отговора в текстово поле.

процедура TForm1.Button2Click(Подател: TObject);

Тази процедура попълва полетата за въвеждане с изходни данни в съответствие със заданието за курсов проект.

процедура TForm3.Button4Click(Подател: TObject);

процедура TForm4.Button1Click(Подател: TObject);

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

процедура почистване;

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


Разработването на програмна блокова диаграма (архитектура) е един от най-важните етапи в процеса на разработка на софтуер поради следните причини:

  • грешният избор на архитектура води до риск от провал на целия проект в бъдеще;

  • този етап е основен за целия процес на разработка;

  • добре обмислената архитектура улеснява модифицирането на софтуерния продукт, ако изискванията към него се променят.
Архитектурата се разбира като набор от програмни компоненти, както и връзки и методи за организиране на обмен на информация между тях. Първата задача, която трябва да бъде решена при разработването на структурна схема на система, е задачата за идентифициране на нейните съставни компоненти.

Въз основа на анализа на изискванията към системата се определя набор от всички функции, които програмата трябва да поддържа. След това получените функции се комбинират в логически взаимосвързани групи. Всяка от тези групи може да стане един от компонентите на софтуерната система. Трябва да сте подготвени за факта, че първата версия на комплекта компоненти няма да бъде пълна. По време на процеса на анализ на характеристиките и в ранните етапи на архитектурния дизайн могат да бъдат идентифицирани допълнителни характеристики, които трябва да бъдат включени в разработваната програма. В по-голямата си част тези функции ще бъдат необходими за извършване на технологични процеси за поддържане на системата в непокътнато и работно състояние. Съвсем естествено е да се предположи, че тези функционални характеристики не могат да бъдат известни на клиента на софтуерната система и на разработчиците в първите етапи на разработка.

На първо място, архитектурата на програмата трябва да включва общо описание на системата. Без такова описание е доста трудно да се създаде последователна картина от много малки детайли или поне дузина отделни класове. Архитектурата трябва да включва доказателства, че по време на нейното разработване са били разглеждани алтернативни варианти и да обоснове избора на окончателната организация на системата.

Архитектурата трябва ясно да дефинира отговорностите на всеки компонент. Един компонент трябва да има една област на отговорност и да знае възможно най-малко за зоните на отговорност на други компоненти. Чрез минимизиране на количеството информация, която компонентите знаят за други компоненти, можете лесно да локализирате информацията за дизайна на приложението към отделни компоненти.

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

Потребителският интерфейс често се проектира по време на фазата на изискванията. Ако това не е така, трябва да се определи по време на фазата на архитектурния дизайн. Архитектурата трябва да описва основните елементи на формата на уеб страницата, графичния интерфейс (GUI) и др. Използваемостта на интерфейса може в крайна сметка да определи популярността или провала на дадена програма.

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

Програмата за обработка на студентски анкетни карти може да бъде разделена на две части с различни функции и нива на достъп за потребителите:


  • система за анкетиране на учениците;

  • система за обработка на резултати от анкети;

  • контролна система.
Всички части са свързани в една програма чрез обща база данни.



Фигура 2.1. - Структура на системата


Системата за проучване съдържа следните функции:

  • издаване на въпрос от анкетната карта;

  • автоматична проверка на вида и коректността на въведените данни;

  • запазване на данни в база данни.
Системата за обработка на резултатите от проучването ви позволява да:

  • показване или отпечатване на доклади от проучвания;

  • преглед на информация за проучването на конкретен студент;

  • сравнете резултатите от текущи и предишни проучвания със същите въпроси.
Системата за управление позволява:

  • контролира провеждането на проучването;

  • управление на данни - добавяне, изтриване и промяна;
От своя страна всяка от системите може да бъде разделена на две подсистеми въз основа на средата, в която работят:

  • сървърна част, написана на езика за програмиране PHP и изпълнявана на сървъра;

  • клиентската част, написана на езика за маркиране HTML и езика за програмиране JavaScript с помощта на библиотеката jQuery и изпълнена в браузъра на потребителя.
СЪС
Сървърната част на програмата по своята структура отговаря на архитектурата MVC (Model-View-Controller) или модел-изглед-контролер. MVC е софтуерна архитектура, в която моделът на данни на приложението, потребителският интерфейс и контролната логика са разделени на три отделни компонента, така че модификацията на един компонент има минимално въздействие върху другите компоненти.
Фигура 2.2. – Архитектура модел-изглед-контролер
Този подход ви позволява да разделите данните, представянето и обработката на потребителските действия на три отделни компонента.

  • Модел(Модел) -модул, отговорен за директното изчисляване на нещо въз основа на данни, получени от потребителя. Резултатът, получен от този модул, трябва да бъде предаден на контролера и не трябва да съдържа нищо, свързано с директен изход (т.е. трябва да бъде представен във вътрешния формат на системата). Основната цел е моделът да бъде напълно независим от другите части и да не знае почти нищо за тяхното съществуване, което би позволило промяна както на контролера, така и на изгледа на модела, без да се докосва самият модел, и дори да позволи функционирането на няколко екземпляра на изгледи и контролери със същия модел по едно и също време. Като следствие, при никакви обстоятелства моделът не може да съдържа препратки към обекти на изглед или контролер.

  • Преглед- модул за извеждане на информация. Отговорностите на изгледа включват показване на данните, получени от модела. Обикновено изгледът има свободен достъп до модела и може да взема данни от него, но това е достъп само за четене; на изгледа е забранено да променя каквото и да било в модела или дори просто да извиква методи, които водят до промени във вътрешното му състояние. За да взаимодейства с контролер, изгледът обикновено внедрява интерфейс, известен на контролера, позволяващ изгледи да се променят независимо и да има множество изгледи на контролер.

  • Контролер- контролен модул за въвеждане и извеждане на данни. Задачите на контролера включват реагиране на външни събития и промяна на модела и/или изгледа в съответствие с логиката, вложена в него. Един контролер може да работи с няколко изгледа, в зависимост от ситуацията, взаимодействайки с тях чрез определен (предварително известен) интерфейс, който тези изгледи имплементират. Важен нюанс - в класическата версия на MVC контролерът не прехвърля данни от модела към изгледа.

    Контролерът получава данни от потребителя и ги предава на модела. В допълнение, той получава съобщения от модела и ги предава на изгледа. Важно е да се отбележи, че и изгледът, и контролерът зависят от модела. Моделът обаче не зависи нито от контролера, нито от поведението. Това е едно от основните предимства на подобно разделение. Тя ви позволява да изградите модел, независим от визуалното представяне, както и да създадете няколко различни представяния за един модел.
Предимствата, които MVC архитектурата представя пред традиционния модел:

  • прозрачност на системата;

  • единна входна точка в системата;

  • повторно използване на код;;

  • бързо развитие;

  • наличие на готови решения;

  • лекота на поддръжка;

  • лесно се правят промени.
По този начин използването на MVC архитектурата осигурява осезаеми предимства при проектирането и разработването на програма за обработка на анкетни карти за студенти от катедрата, което има положителен ефект както върху скоростта на самото разработване, така и върху качеството на крайния резултат.

2. Разработване на структурата на базата данни на програмата

Организацията на структурата на базата данни се формира въз основа на следните съображения:

  • адекватност на описания обект - на ниво концептуален и логически модел;

  • лекота на използване за счетоводство и анализ на данни - на ниво т.нар. физически модел.
Според модела за представяне на данни основните са йерархични, мрежови и релационни модели; съответно, за да работят с всяка от горните бази данни, те използват собствена СУБД.

В този случай релационният модел на данни е най-подходящ, тъй като цялата информация може лесно да бъде представена под формата на таблици. Релационният модел на данни е логически модел на данни, който описва структурния аспект, аспекта на целостта и аспекта на обработката на данни на релационните бази данни.

Структурен аспект- Данните в база данни са набор от връзки.

Аспект на почтеност- отношенията отговарят на определени условия за почтеност.

Аспект на обработка- поддържат се оператори за манипулиране на релации.

Важен аспект от дизайна на базата данни е нормализирането - процесът на преобразуване на база данни във форма, която съответства на нормалните форми. Нормализирането помага да защитите вашата база данни от логически и структурни проблеми, наречени аномалии в данните. Например, когато има няколко идентични записа в таблица, съществува риск от нарушаване на целостта на данните при актуализиране на таблицата. Таблица, която е претърпяла нормализиране, е по-малко податлива на такива проблеми, защото неговата структура включва дефиниране на връзки между данни, което елиминира необходимостта от записи с дублирана информация.

За СУБД беше избрана безплатната система за управление на бази данни MySQL. Гъвкавостта на MySQL DBMS се осигурява от поддръжката на голям брой типове таблици: потребителите могат да избират както MyISAM таблици, които поддържат пълнотекстово търсене, така и InnoDB таблици, които поддържат транзакции на ниво индивидуален запис. Благодарение на отворената архитектура и GPL лицензирането (GNU General Public License - лиценз за безплатен софтуер, чиято цел е да предостави на потребителя правата за копиране, модифициране и разпространение на програми, както и да гарантира, че потребителите на всички производни програми получават горните права), СУБД MySQL постоянно се появяват нови типове таблици.

Важно предимство на СУБД MySQL е, че е пренесено на голям брой платформи, като AIX, FreeBSD, HP-UX, GNU/Linux, Mac OS X, NetBSD, OpenBSD, Solaris и Windows. Имайте предвид, че MySQL AB предоставя за безплатно изтегляне не само изходните кодове на СУБД, но и готови изпълними модули, компилирани и оптимизирани за конкретни операционни системи.

MySQL има интерфейс за програмиране на приложения (API) за езици като Delphi, C, C++, Java, Perl, PHP, Python и Ruby, библиотеки за платформени езици на .NET, а също така осигурява поддръжка за ODBC чрез ODBC драйвера (Open DataBase Connectivity е програмен интерфейс за достъп до бази данни) MyODBC.

Типът MyISAM беше избран като основен тип таблица. Таблиците MyISAM са идеално оптимизирани за използване във връзка с уеб приложения, където преобладават заявките за четене. Таблици като MyISAM показват много добри резултати при SELECT заявки. Това до голяма степен се дължи на липсата на поддръжка за транзакции и външни ключове. Въпреки това, когато се променят и добавят записи, цялата таблица се заключва за кратко, което може да доведе до сериозни забавяния при голямо натоварване. Но в случай на програма за анализиране на анкетни карти, това не е сериозен проблем, тъй като не се планира голямо натоварване на системата.

Друго предимство на таблици като MyISAM е независимостта от платформата. Табличните файлове могат да се преместват между компютри с различни архитектури и различни операционни системи без преобразуване.

Таблиците MyISAM могат да имат фиксирани, динамични или компресирани записи. Изборът между фиксиран и динамичен формат се диктува от дефинициите на колоните.

Структурата на базата данни е показана на фигура 2.4.

Р

Фигура 2.3. – Структура на базата данни


Връзките между таблиците, организирани в базата данни, ви позволяват да извършвате каскадно изтриване и актуализиране на данни. Използването на таблици за връзки направи възможно намаляването на излишъка на данни до минимум.

Таблицата it_students съдържа данни за учениците, попълнили анкетата.

Таблица 2.1 – таблица с данни “it_students”.


Поле

Тип

Дължина

Описание

документ за самоличност

Числен

11

Индекс

бр

Числен

11

Студентски идентификационен номер

име

Символично

100

Име

второ име

Символично

100

Фамилия

фамилия

Символично

100

Фамилия

раждане

дата

-

Дата на раждане

година_постъпл

година

-

Година на прием

адрес

Символично

500

Адрес

phone_h

Символично

15

Домашен телефон

phone_m

Символично

15

Мобилен телефон

поща

Символично

250

Имейл адрес

icq

Числен

10

ICQ номер

Таблицата it_answers_var съдържа опции за отговаряне на въпроси от анкетата.

Таблица 2.2 – Таблица с данни „it_answers_var“

Таблицата it_questions съдържа въпроси от анкетата.

Таблица 2.3 – Таблица с данни „it_questions“.

Таблицата it_tests_cfg свързва въпросите на проучването с конкретен въпросник.

Таблица 2.4 – Таблица с данни „it_tests_cfg“

Таблицата it_tests съдържа данни за всички въпросници и датите на анкетите.

Таблица 2.5 – Таблица с данни „it_tests“.

Таблицата it_text_answers съдържа данни за отговорите на учениците, въведени ръчно.

Таблица 2.6 – Таблица с данни „it_text_answers“

Таблицата it_students_answers съдържа данни за отговорите на учениците.

Таблица 2.6 – Таблица с данни „it_students_answers“

3. Разработване на модел на информационния поток от база данни

Тъй като програмата за анализиране на анкетни карти за студенти е изградена на принципа на MVC, информационните потоци могат да бъдат представени по следния начин. Когато се получи заявка от потребител, който изпраща браузър към уеб сървъра, контролерът, следвайки програмирани алгоритми, квалифицира получената заявка, модифицира и я предава на модела. Моделът, който е връзката между контролера и СУБД, интерпретира заявката и прави съответното извикване към СУБД MySQL, връщайки резултатите на контролера.

Трябва да се отбележи, че за контролера остава скрито с какъв тип или реализация на СУБД работи; всички извиквания към базата данни се извършват чрез модела, чиято основна задача е да абстрахира работата с данни. Вместо база данни можете дори да използвате текстов или XML файл; това няма да има значение за контролера. Успоредно с това контролерът изпраща заявка до компонента за преглед, който съставя крайния шаблон и го връща на контролера. Възможно е също обменът на данни да се извършва директно между модела и изгледа. Контролерът комбинира селекцията от базата данни и шаблона за изглед и ги предава на браузъра на потребителя.



Фигура 2.4. - Схема на информационните потоци на MVC архитектурата

4. Разработване на алгоритмична поддръжка

Алгоритмичната поддръжка за всички програмни компоненти има значителни разлики, тъй като те носят различна функционалност.

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

д
След това студентът отговаря на поредица от въпроси на анкетата и едва след като завърши анкетата, всички данни се записват в базата данни. Алгоритъмът за работа на системата за проучване е показан на фигура 2.5.

Фигура 2.5. – Алгоритъм за работа на анкетната система

Една от най-важните точки за сигурност за уеб приложение е проверката на всички входящи данни, така че винаги трябва да проверявате данните, въведени от потребителя във формуляри за търсене, попълване на полета за регистрация и т.н., за наличие на „опасни“ данни. Това може да е злонамерен JavaScript код, PHP или PERL команди или (най-опасното) команди към сървъра.

Винаги трябва да помните, че абсолютно всеки потребител представлява опасност за незащитено уеб приложение, така че винаги си струва да проверявате заявките и променливите, идващи от потребителя.


  • анализ на POST и GET променливи и суперглобални масиви;

  • разделяне на променливи;

  • филтриране на низови променливи.
Задължително е да проверявате входящите променливи в самото начало на програмата, предотвратявайки непроверени, потенциално опасни данни от потребители да работят с функции и заявки към базата данни. Така всички функции, необходими за защита, ще бъдат разположени на едно конкретно място или дори файл. В случая на програмата за обработка на анкетни карти за студенти, филтрирането на данни се извършва на ниво рамка CodeIgniter в автоматичен режим, тъй като редът $config["global_xss_filtering"] = ВЯРНО.

Абсолютно всяка променлива в програмата трябва вече да има свой собствен тип на етапа на проектиране, било то число или низ. Този проблем е особено остър за езиците за програмиране със слабо или липсващо въвеждане, които включват PHP и JavaScript. Следователно в най-критичните области на програмата променливите се проверяват за съответствие с типа.

Особено опасни са текстовите променливи, например поле за въвеждане на отговор на въпрос от анкета. Те просто трябва да бъдат проверени за злонамерен код. За да се премахне опасността, някои елементи се премахват от текста или се заменят с други символи. Алгоритъмът за обработка на входящи данни в рамката CodeIgniter е показан на фигура 2.6.

Р
Фигура 2.6. – Алгоритъм за обработка на входящи данни в рамката CodeIgniter

2.5 Разработване на програмния интерфейс

Един от най-важните въпроси при разработването на софтуерна система е разработването на потребителски интерфейс. Всяка система, която използва технически средства в работата си, принадлежи към класа на системите "човек-машина". Би било правилно да се предложат следните изисквания за интерфейса на системите за тестване:


  • интерфейсът трябва да е ясен, прост и лесен за използване

  • потребителят не трябва да се разсейва от действия, които не са свързани с изпълняваната задача.
Потребителският интерфейс е направен на HTML език за маркиране с помощта на JavaScript и библиотеката jQuery, което направи възможно изграждането на интерактивен потребителски интерфейс за програмата.

ДА СЕ

Например, текстово поле за въвеждане на дата с помощта на jQuery беше преобразувано в компактен календар, който има функцията автоматично да проверява коректността на въведената дата (вижте Фигура 2.7).

Фигура 2.7. – Календарен интерфейс за избор на дата на раждане
Потребителският интерфейс, достъпен за студентите, участващи в анкетата, е донякъде минималистичен. В резултат на това учениците не се разсейват от красиви графики и се концентрират върху мисленето за отговора на въпроса. Интерфейс с един от

проучвания е показано на фигура 2.8.

Фигура 2.8. – Интерфейс за отговор на анкетен въпрос


Ако по някаква причина студент не избере нито един от отговорите на въпрос, но се опита да премине към следващия въпрос, системата за проучване автоматично ще покаже съобщение за грешка и ще предложи да се отговори отново на текущия въпрос (вижте Фигура 2.9).

Фигура 2.9. - Съобщение за грешка при въвеждане на данни



Системата за обработка на резултатите от проучването може да показва резултатите в няколко режима - текстов, графичен и печатен режим. Интерфейсът за показване на резултатите от проучването в графична форма е показан на Фигура 2.10.

Фигура 2.10. – Интерфейс за показване на резултатите от проучването



Браузър, който е клиент по отношение на сървъра и му изпраща заявка за обработка на уеб страница, може да бъде реализация на така наречените тънки клиенти. Браузърът може да показва уеб страници и като правило е част от операционната система, а функциите по актуализирането и поддържането му са на доставчика на операционната система. Логиката на приложението е центрирана върху сървъра, а функцията на браузъра е главно да показва информация, изтеглена по мрежата от сървъра, и да предава потребителски данни обратно. Едно предимство на този подход е фактът, че клиентите са независими от конкретната операционна система на потребителя и следователно уеб приложенията са междуплатформени услуги.

Значително предимство на изграждането на уеб приложения за поддръжка на стандартна функционалност на браузъра е, че функционалността трябва да работи независимо от операционната система на клиента. Вместо да се пишат различни версии за Microsoft Windows, Mac OS X, GNU/Linux и други операционни системи, приложението се създава веднъж и се внедрява на всяка платформа.

3. Технологичен раздел

3.1 Технология за разработване на програми

3.1.1 Основи на уеб сървъра

Как работи уеб сървърът: Известно е, че уеб сървърите съхраняват информация под формата на текстови файлове, наричани още страници. В допълнение към текста, такива страници могат да съдържат връзки към други страници (разположени на същия или различен сървър), връзки към графични изображения, аудио и видео информация, различни обекти за въвеждане на данни (полета, бутони, формуляри и т.н.) и както и други обекти и програми, изпълнявани на сървъра. Всъщност страниците представляват някакъв вид свързващо звено между обекти от различен тип. Те са проектирани с помощта на специален език за маркиране на хипертекст, HyperText Markup Language или накратко HTML. За достъп до информация, намираща се на уеб сървъри, потребителите използват специални клиентски програми - браузъри. В момента има десетки различни браузъри, но само няколко от тях са най-популярните в момента:


  • Microsoft Internet Explorer;

  • опера;

  • Mozilla Firefox

  • Google Chrome.
Всяка страница на уеб сървъра има свой собствен така наречен универсален адрес на ресурс - Universal Resource Locator (URL). За достъп до определена страница, потребителят трябва да предостави нейния URL адрес на браузъра. По правило всеки уеб сървър има една главна страница, съдържаща връзки към всички други страници на този сървър. Следователно разглеждането на съдържанието на уеб сървър обикновено започва с неговата основна (индекс) страница.

3.1.2 Пасивни и активни уеб сървъри

Има пасивни и активни уеб сървъри. Ако сървърните страници съдържат само статичен текст и мултимедийна информация, както и хипертекстови връзки към други страници, тогава сървърът се нарича пасивен. Когато сървърните страници се държат подобно на прозорците на обикновени интерактивни приложения, влизайки в диалог с потребителя, имаме работа с активен сървър.


3.1.3 Обектно-ориентиран подход

Понастоящем използването на обектно-ориентиран подход при разработването на уеб приложения става все по-популярно. И въпреки че предимствата на този подход не са толкова очевидни, колкото например в езиците за програмиране като C++ или Java, все по-голям брой свободно разпространявани библиотеки и програми, написани на езика за програмиране PHP, преминават към обектно-ориентиран интерфейс . Правейки това, те принуждават разработчиците, които ги използват, да се обърнат към обектно-ориентираните възможности на PHP. Въвеждането на пълна поддръжка за обектно-ориентирания модел в петата версия на PHP интерпретатора допълнително подклажда интереса към тази методология.

Често използването на обектно-ориентиран подход към мястото, а не към мястото ще направи проекта успешен. Програмирането като начинаещ в стила на обектно-ориентирано програмиране често се чувства като навигиране в минно поле - ако не знаете къде са мините, е невъзможно да стигнете до края на проекта. Обектно-ориентираното програмиране само по себе си не е панацея - то е работеща технология, която ви позволява да:


  • увеличаване на процента на повторно използван изходен код;

  • когато програмирате, работете с концепции и обекти от реалния свят (студент, група, курс и т.н.), а не с компютърни термини на ниско ниво (файл, линия и т.н.), което ви позволява да създавате по-големи проекти с по-малко грешки и по-ефективно кратко време.
Развитието на технологиите за програмиране, както отбелязва Дейкстра, е продиктувано от тезата „Разделяй и владей“. Всяка успешна технология предполага, че колкото по-кратък е изходният код на една програма, толкова по-лесно е създаването, отстраняването на грешки и поддръжката, а простата програма е много по-малко податлива на грешки от сложната.

В зората на компютърната ера една програма беше една нишка, която обработваше един масив от данни. С течение на времето сложността на програмите и изискванията към тях нарастваха и този начин на организиране на данните се оказа неприемлив. Предложен е структурен подход, при който масивът от данни става достъпен от всяка точка на програмата, но основният поток на програмата е разделен на няколко процедури. Отделна малка процедура, дори ако използва общи данни, е много по-лесна за разработване от голямо количество изходен код.

Всяка процедура има локална променлива, чийто живот се определя от продължителността на процедурата. Някои процедури могат да извикват други, но масивът от данни в програмата остава общ и достъпен за всички процедури. Този подход се използва в процедурното програмиране в PHP и ви позволява да създавате големи софтуерни комплекси. Но разработването, отстраняването на грешки и поддръжката на програми, които работят с големи обеми данни (като база данни на отдел), все още остават сложни и изискват значителни умения и опит.

Отговорът на нарастващата сложност беше появата на обектно-ориентиран подход към програмирането: програмата е разделена на няколко масива от данни, всеки от които има свои собствени процедури, както и процедури, които взаимодействат с други масиви от данни.

В резултат на това една сложна задача се разделя на няколко по-прости подзадачи и разработчиците получават по-гъвкав начин за управление на проекта - редактирането на един огромен монолитен блок от код е много по-трудно от колекция от малки, слабо свързани блокове.

Независимо от връзката с езика за програмиране, обектно-ориентираният подход има редица общи принципи, а именно:


  • възможността за създаване на абстрактни типове данни, което позволява, заедно с предварително дефинирани типове данни (като цяло число, низ и т.н.), да въвеждате свои собствени типове данни (класове) и да декларирате „променливи“ на такива типове данни (обекти). Създавайки свои собствени типове данни, програмистът работи не с машинни термини (променлива, функция), а с обекти от реалния свят, като по този начин се издига до ново ниво на абстракция;

  • капсулиране, което ограничава потребителското взаимодействие на абстрактни типове данни само до техния интерфейс и скрива вътрешната реализация на обекта, предотвратявайки влияние върху вътрешното му състояние. Човешката памет е ограничена и не може да съдържа всички детайли на огромен проект, докато използването на капсулиране ви позволява да проектирате обект и да го използвате, без да се притеснявате за вътрешно внедряване и да прибягвате само до малък брой интерфейсни методи;

  • наследяване, което ви позволява да развиете съществуващ абстрактен тип данни - клас, като създадете нов клас, базиран на него. В този случай новият клас автоматично придобива възможностите на съществуващ абстрактен тип данни. Често абстрактните типове данни са твърде сложни, така че се прибягва до тяхното последователно развитие, изграждайки йерархия на класове от общи към специфични;

  • полиморфизъм, позволяващ изграждането на цели вериги и разклонени дървета, които наследяват един от друг абстрактни типове данни (класове). В този случай целият набор от класове ще има редица методи с еднакви имена: гарантирано е, че всеки от класовете в това дърво има метод със същото име. Този принцип помага за автоматична обработка на набори от данни от различни типове.

3.1.4 Характеристики на рамката CodeIgniter

Използваната рамка на CodeIgniter е написана с помощта на обектно-ориентиран подход. Всички класове контролери, изгледи и модели, въведени от програмиста, наследяват оригиналните класове, въведени в самата рамка. Това прави възможно писането на по-малък изходен код, тъй като всички необходими основни функции са незабавно достъпни.

В допълнение към класовете на контролера, изгледите и моделите, достъпни за програмиста, рамката на CodeIgniter също има плъгини и помощни функции, достъпни за програмиста. Помощниците, както подсказва името, са предназначени да помогнат при изпълнението на някои второстепенни функции. Например, има помощници за изграждане на уеб формуляри, изтегляне на файлове или работа със сесии. За разлика от всички други основни елементи на рамката, помощниците са набори от елементарни функции, написани дори без използване на обектно-ориентиран подход. Всяка функция изпълнява малка, строго ограничена задача. Комплектът обаче е доста голям и такава „дреболия“ става много полезна в работата.

Добавките са почти същото нещо като помощниците, с изключение на основната разлика: те не са набор от функции, те са една функция. Освен това можете да обърнете внимание на факта, че помощниците са по-скоро част от ядрото на системата, докато плъгините са нещо външно, разработено от програмисти на трети страни. В действителност това се оказва. Дори плъгините, които идват с основния комплект, са написани от потребители на CodeIgniter в общността.


3.1.5 Eclipse IDE

При разработването на програма за обработка на анкетни карти за студенти от катедрата, ние също използвахме такъв важен и полезен инструмент за програмиране като интегрирана среда за разработка (IDE - Integrated Development Environment), а именно Eclipse. Eclipse е безплатна рамка за разработване на модулни междуплатформени приложения. Разработено и поддържано от Eclipse Foundation.

Най-известните приложения, базирани на платформата Eclipse, са различните „Eclipse IDE“ за разработка на софтуер на различни езици (например най-популярната „Java IDE“, която се поддържаше първоначално). В този случай бяха използвани разширения за програмиране на езиците за програмиране PHP (PDT модул) и JavaScript (JSEclipse модул), както и оформление с помощта на езика за маркиране HTML.

3.2 Технология за тестване на програмата

Тестването на програмата е процес на идентифициране на грешки в софтуера. В момента има много методи за тестване на програми, но те не гарантират идентифициране и отстраняване на всички дефекти и грешки или установяване на правилното функциониране на анализираната програма. Следователно всички съществуващи методи за тестване работят в рамките на официален процес на проверка на софтуера, който се изследва или разработва.

Този формален процес на проверка може да докаже, че няма грешки само по отношение на използвания метод, но не гарантира пълното им отсъствие.

Тестът е информация, състояща се от специално подбрани първоначални данни за програмата, която се отстранява, и съответните референтни резултати, използвани за наблюдение на правилната работа на програмата.

Контролът на програмата се свежда до избор на тестове, чието получаване на правилни резултати ще гарантира правилната работа на програмата за останалите входни данни от целия допустим диапазон от стойности.

Системата е тествана по няколко метода:


  • Стрес тестване;

  • ръчно отстраняване на грешки и проследяване на програми с помощта на разширението XDebug;

  • Единично тестване с phpUnit.
Когато тествате програми, написани на PHP, трябва да проверите дали данните, показани на екрана на потребителя, отговарят на очакванията. Възможни са следните основни проблеми:

  • на екрана не се показва нищо или се показва системна грешка със съответния код (грешка при оторизация, грешка на уеб сървъра и др.);

  • възникна грешка при работа с базата данни и се генерира отчет за грешка;

  • повреда на сървъра поради голямо натоварване на приложението или базата данни;

  • Възникна грешка при изпълнение на програмата, което доведе до показване на неправилни данни или отчет за грешка.

3.2.1 Натоварващо тестване на програмата

Един от най-важните тестове е тестването на натоварването, което ви позволява да намерите тесни места в изходния код или извикванията на базата данни.

Има много инструменти, които опростяват задачата за увеличаване на броя на заявките и извикване на множество операции на сървъра. Тестът за ограничаване на натоварването трябва да бъде проектиран така, че да възпроизвежда точно очакваното натоварване на приложението.

За натоварващо тестване на програмата за обработка на анкетни карти за студенти от катедрата е използвана програмата curl-loader. Curl-loader е свободно разпространявана помощна програма за тестване на производителността на уеб приложения, написана на езика за програмиране C. Тя е в състояние да симулира стотици и дори хиляди сървърни извиквания през HTTP и HTTPS протоколи и използва библиотеката libcurl, която ви позволява лесно да тествате приложения, които изискват оторизация. А поддръжката на HTTPS протокола ви позволява да използвате помощната програма curl-loader за тестване на натоварването на уеб приложения, работещи чрез криптирани транспортни механизми SSL (Secure Sockets Layer) и TLS (Transport Layer Security).

3.2.2 Отстраняване на грешки с помощта на вградени PHP инструменти

Стандартното поведение на приложение, написано на PHP, когато възникне грешка в кода, зависи до голяма степен от настройките на конфигурацията. По правило те се задават в конфигурационния файл php.ini:

  • параметърът display_errors, включен или изключен, указва дали съобщенията за грешка трябва да се показват на потребителя или да се оставят скрити;

  • параметърът log_errors, зададен на включено или изключено, кара PHP интерпретатора да записва съобщения в регистрационния файл на събитията;

  • Директивата error_reporting определя в кои случаи трябва да се генерира предупреждение и в кои случаи то може да бъде игнорирано.
Когато разработвате и дебъгвате програма на тестов сървър, трябва да активирате параметъра display_errors и да деактивирате параметъра log_errors. Това позволява на програмиста да реагира възможно най-бързо при възникване на ситуация на грешка, минимизирайки броя на „превключванията между прозорците“.

В работеща версия на програмата, напротив, трябва да деактивирате параметъра display_errors, но да активирате log_errors. От една страна, това ще усложни живота на нападателите, които вече няма да могат да виждат информация за отстраняване на грешки. От друга страна, в критична ситуация ще ви помогне да разберете какво точно се е случило и да коригирате грешката, дори ако тя не е възпроизводима в тестовата среда.

И в двата случая е удобно да настроите параметъра error_reporting на най-подробното състояние - E_ALL, което принуждава PHP да докладва най-незначителните грешки в кода.

3.2.3 Дебъгване на програма с помощта на XDebug

Докато езикът за програмиране PHP може да се използва за създаване на скриптове от командния ред за задачи като системно администриране и традиционна обработка на данни, силата на езика е особено очевидна в уеб приложенията.

Като се има предвид кратката продължителност на уеб приложенията и техния многослоен дизайн (клиентско приложение, мрежа, уеб сървър, код на приложение и основна база данни), може да бъде трудно да се уловят грешки в изходния код. Дори ако приемем, че всички слоеве с изключение на PHP кода работят безупречно, проследяването обратно до програмна грешка може да бъде трудно, особено ако приложението използва голям брой класове.

PHP ехо изразът и функциите като var_dump(), debug_zval_dump() и print_r() са често срещани и много популярни инструменти за отстраняване на грешки, които могат да помогнат за решаването на различни дребни проблеми. Въпреки това, като инструменти за тестване и отстраняване на грешки, тези изрази (и дори по-надеждни инструменти, например пакетът PEAR Log) са от малка помощ и не винаги.

Освен това този тип отстраняване на грешки е подход с груба сила. Ако необходимата информация липсва, трябва да повторите изходния код, да повторите предишните стъпки и да започнете да търсите грешката отново. Много по-ефективна стратегия е да тествате приложението, докато работи. Можете да каталогизирате параметрите на заявката, да видите стека от извиквания на процедури и да откриете стойността на всяка променлива или обект. Можете временно да прекъснете изпълнението на приложението и да получите известие за промени в стойността на променлива

Това „живо“ или интерактивно изследване се осигурява от специално приложение, наречено дебъгер. Дебъгерът се изпълнява или се свързва с процес, за да го манипулира и да изследва неговата памет. Или, в случай на интерпретирани езици, дебъгерът може директно да интерпретира кода. Типичният съвременен дебъгер може да индексира и преглежда изходния код, да показва сложни структури от данни в четима форма и едновременно да показва състоянието на програмата, стека на повикванията, изхода на програмата и стойностите на всички променливи. Например, обичайно е дебъгерът да каталогизира и показва свойствата и методите на даден клас.

Вместо ръчно да добавяте различни изходни функции за отстраняване на грешки, можете да използвате XDebug, за да създадете журнал за проследяване. Журналът за проследяване е списък от извиквания на функции и методи на клас по време на изпълнението на програмата. Предимството му е, че абсолютно всяко обаждане ще бъде отразено в дневника.

Регистърът на проследяване обикновено варира от изпълнение до изпълнение, защото зависи от входящите данни, които варират от заявка до заявка.

Проследяването на дневника ви помага да разберете как се изпълнява програмата, но е много трудно да се визуализират всички възможни разклонения, освен ако програмата не е много проста. Поради това тестването на големи програми е доста трудно: има твърде много различни пътища за развитие и всеки трябва да бъде тестван.

Инструментът за отстраняване на грешки в приложението XDebug, както подсказва името му, предоставя няколко функционалности за показване на състоянието на програмата и е много ценен инструмент за изследване. Веднъж инсталиран, XDebug се намесва, за да предотврати безкрайни рекурсии, добавя информация за проследяване на стека и функцията към съобщенията за грешка, следи разпределението на паметта и изпълнява няколко други функции. Xdebug също така съдържа набор от функции, които могат да бъдат добавени към изходния код за получаване на диагностични данни по време на изпълнение.

Резултатите от модула XDebug могат да се видят с помощта на програмата KCachegrind, която ви позволява да визуализирате процесите, протичащи в изходния код (вижте Фигура 3.1).

За да обобщим, XDebug е малък, но много полезен инструмент за PHP разработчика и трябва да бъде инсталиран на всеки PHP интерпретатор, използван за разработка. Но не трябва да използвате XDebug на производствени сървъри, тъй като това значително ще намали производителността.
Р

Фигура 2.1. – Интерфейс на програмата KCachegrind

3.2.4 Единично тестване с помощта phpUnit

Единичното тестване е процес в програмирането, който ви позволява да проверявате коректността на отделните модули от изходния код на програмата. Идеята е да се напишат валидиращи тестове за всяка нетривиална функция или метод. Това ви позволява бързо да проверите дали следващата промяна на кода е довела до появата на грешки във вече написани и тествани части на програмата, а също така улеснява откриването и отстраняването на такива грешки. Целта на модулното тестване е да изолира отделни части от програма и да покаже, че поотделно тези части работят.

При дебъгване и тестване на програмата за обработка на анкетни карти за студенти от катедрата е използвана системата phpUnit, която позволява модулно тестване на уеб приложения, написани на езика за програмиране PHP.

За да напишете минимален набор от тестове с помощта на phpUnit, трябва да:


  • включете библиотеката PHPUnit.php;

  • създайте подклас на базовия клас TestCase;

  • добавете към него произволен брой методи за тестване, чиито имена започват с "test". Предварително известни параметри ще бъдат предоставени като вход и резултатът ще бъде сравнен с референтния с помощта на семейството от функции Assert, наследено от тестовия клас от базовия клас TestCase;

  • създайте класа PHPUnit_TestSuite, като му подадете името на класа с набор от тестове като параметър;

  • Изпълнете набор от тестове и проверете резултата от изпълнението.

6 (?). Списък на графичния материал

6.1 Постановка на проблема

6.2 Блокова схема на програмата


3. СТРУКТУРНА СХЕМА НА ПРОГРАМАТА

Основните функции, които трябва да бъдат реализирани в нашата програма, следват от формулирането и анализа на проблема:

1) Показване на потребителски данни под формата на таблица и работа с тях.

2) Добавяне и изтриване на типове обекти.

3) Графично представяне на плана с възможност за мащабиране.

4)Работа с файлове и отпечатване на резултатите.

5) Удобен потребителски интерфейс.

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

Ориз. 3.1. Функционална структура на програмата.

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


4. ОСНОВНИ АЛГОРИТМИ

Основният е алгоритъмът за конструиране на изображение въз основа на данни от основната таблица, реализиран под формата на метода plandraw().

По-долу е неговата блокова диаграма и описание.

4.1 Описание на алгоритъма

Ако разделът, съдържащ нашето изображение на план, не е активиран, ние ще го активираме.

Подготвяме таблица с разстояния, като я изчистваме от предишни записи.

Задаваме параметрите на фона (цвят) и го рисуваме, след което задаваме параметрите на писалката (дебелина на линията и стил), които ще определят показването на линиите на маршрута в чертежа. В началото дебелината на линията е равна на единица - за чертане на координатна мрежа.

Използвайки свойството на таблицата RecordCount, намираме броя на редовете в основната таблица.

Задаваме указателя на текущия запис към първия и организираме цикъл на преминаване през всички записи на таблицата, в който броим броя на маршрутите.

В самото начало на цикъла се подготвяме за показване на мащаба - задаваме коефициент на увеличение (в цели единици) на променливата на мащаба и за двете ленти за превъртане определяме максималната стойност, която зависи от степента на увеличение и размер на картината.

Ако номерът на маршрута е нула, тогава е изпълнено условието за начертаване на координатна мрежа – меридиани и паралели. Първо се извършва цикъл на изчертаване на меридиани - преминаваме от 0 до 360 градуса на стъпки в зависимост от степента на увеличение (15, 6, 3 или 1 градус), като близо до всеки меридиан се подписва съответният градус на дължина (източна географска дължина - със знак "+", западна - със знак "-"). Главният меридиан е изобразен в черно. Подобни действия се извършват в цикъла на рисуване на паралели, единствената разлика е, че цикълът се изпълнява от 0 до 180 градуса. Знакът "+" показва северната ширина, а знакът "-" показва южната ширина.

Променете дебелината на линията на 2, за да покажете линиите на маршрута.

Създаваме три масива, в които ще въведем индексите на текущите маршрутни записи и координати. След това организираме цикъл, в който преминаваме през записите в таблицата и попълваме тези масиви за текущия маршрут. Освен това вече мащабираните стойности се въвеждат в координатните масиви. В същия цикъл отчитаме броя точки на маршрута.

В следващия цикъл сортираме съдържанието на индексния масив, така че след това да можем да начертаем точките в реда, в който се появяват в таблицата.

Задайте цвета на линията в зависимост от номера на маршрута. И организираме цикъл, който чертае линии.

В цикъла на чертане правим следното: като се вземат предвид позициите на лентите за превъртане, се изчислява позицията на прозореца спрямо картата и координатите на точката в прозореца се изчисляват спрямо тази позиция. Ако това е първото ни преминаване, просто преместваме курсора до точката с изчислените координати; ако не и флагът за чертане на линия е включен, рисуваме линия от предишната точка към тази. Ако квадратчето за отметка е деактивирано, на картата се поставят само точки.

След това се изчислява разстоянието между точките, разположени на земното кълбо, чиито проекции току-що изобразихме на нашата карта. Разстоянията се изчисляват в километри, радиусът на Земята се приема за 6371 км. Разстоянието се изчислява, ако i не е равно на 0 и това не е първото преминаване през цикъла. Това условие е необходимо, защото използваме координатите на предишната точка, за да намерим разстоянието до текущата.

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

Разглеждат се три случая:

1) ако точките са на една и съща дължина, ъгълът е лесен за определяне - той ще бъде равен на разликата между по-голямата и по-малката стойност на географската ширина.

2) ако точките са на една и съща географска ширина, то определянето й също не е трудно - тя е равна на разликата между по-голямата и по-малката стойност на географската дължина, умножена по корекцията cos(f), където f е текущата ширина.

3) ако точките са разположени на различни географски ширини и дължини, този случай на намиране на ъгъла е по-сложен. Нека го разгледаме подробно.

Първо намираме разликата в дължината на точките, сякаш са на една и съща ширина, умножаваме по корекцията cos(f) и изчисляваме линейното разстояние между тях, като използваме косинусовата теорема (другите две страни на триъгълника са радиусите на Земята). По същия начин изчисляваме разстоянието между точките, сякаш са на една и съща дължина. Означаваме тези разстояния като l1 и l2.

Сега имаме правоъгълен триъгълник с катети l1, l2, чиято хипотенуза е разстоянието l3. Изчисляваме го с помощта на Питагоровата теорема. Нашата цел е да намерим ъгъл a. Използвайки косинусовата теорема, намираме косинуса на този ъгъл. След като изчислим арккосинуса от него, получаваме ъгъла! По-долу има обяснителен чертеж.


Ориз. 4.1. Обяснение на изчисленията на разстоянието на различни географски ширини и дължини.

След като намерим ъгъла, изчисляваме дължината на дъгата и въвеждаме полученото разстояние в таблицата на разстоянието заедно с номера на текущия маршрут.

Забележка: тъй като функциите косинус и аркосинус работят с ъгли, определени в радиани, програмата преобразува радианите в градуси и обратно. Всички тези изчисления водят до натрупване на грешки.

Всички споменати формули са дадени в Приложение Д.

След като изчислим разстоянието, ние го показваме на плана до текущата точка, ако съответният флаг е включен. Освен това, поради условието за оценка на дължината на маршрута, фигурата показва не дължината на един сегмент, а сумата от дължините на сегментите, предхождащи тази точка. Потребителят може да разгледа дължините на отделните сегменти в таблицата на разстоянията.

Картата също така показва типа на обекта за дадена точка, ако има отметка в квадратчето "покажи типа на обекта".

Ако квадратчето за отметка „не показвай таблица с разстояния“ е деактивирано, направете го видимо.

След като всички маршрути са начертани, освобождаваме паметта, разпределена за индекса и координатните масиви.


4.2 Блок-схема на алгоритъма

Ориз. 4.2. Блок-схема на алгоритъма за чертане на план.


5. СОФТУЕРНО РЕАЛИЗИРАНЕ 5.1 Избор на среда за разработка на програмата

Както вече беше споменато в „Изложение на проблема“, за създаването на тази програма беше избрана среда за разработка Borland C++Builder 5. Това решение се дължи на факта, че в нея процесът на създаване на интерфейс не е труден дори за програмист, който се сблъсква с Builder за първи път и те работят добре с бази данни и графики, което е точно това, от което се нуждаем, за да разработим нашата програма.

Недостатък според мен е големият изпълним код на програмата - за да работи на машина, на която не е инсталиран Builder, е необходимо да се включат всички библиотеки, които се използват в нея, поради което размерът на програмата става няколко пъти по-голяма.

Освен това хубавото на Builder е, че компонентите имат много свойства, които могат да се променят не само по време на изграждане, но и по време на изпълнение на програмата, което прави работата с тях по-гъвкава.

5.2 Работа с таблици

Ние използваме Paradox като драйвер за база данни. Този тип база данни беше избран първо, защото Builder има вградени инструменти за работа с таблици на Paradox, като Borland Database Engine, и също така идва с програмата Database Desktop. Второ, предимството на Paradox е, че името на базата данни може да бъде посочено като път до директорията, където се намира файлът на таблицата, и всички таблици се съхраняват в отделни файлове. Трето, те заемат малко място и са най-простите от местните маси. Четвърто, таблиците на Paradox ви позволяват да създавате ключови полета.

За да осигурим работа с таблицата, инсталирахме следните компоненти на формата:

DBGrid, с който можем да вмъкваме, изтриваме или редактираме данни в таблица или просто да ги показваме.

DBComboBox списък, с който можем да вмъкнем данни от обектната таблица в текущия запис на основната таблица. Преди да използвате този списък, той трябва да бъде попълнен със стойности от таблицата с обекти. За целта при стартиране на програмата преминаваме през всички нейни записи и въвеждаме съдържанието им в полето Items на този списък.

Навигатор DBNavigator - с него можете да изтривате, добавяте, редактирате записи в таблицата, както и да навигирате в тях. Свързваме го с мрежата, в която ще се показва нашата таблица.

Всички тези компоненти са свързани с таблицата чрез DataSourse, в свойствата на който посочваме нейното име. Освен това самата таблица също е представена като компонент, Таблица, в който трябва да се обърне най-голямо внимание на три свойства:

1)Active – показва дали таблицата е активна. Ако се опитате да получите достъп до него, ако това свойство е деактивирано, програмата ще генерира грешка „Не може да извърши тази операция върху затворен набор от данни“. По време на тестването бяха проследени и обработени всички възможни ситуации, които биха могли да доведат до тази грешка.

2) DatabaseName – името на базата данни, като се приема пътят до директорията, от която е отворена или създадена таблицата.

3) TableName – името на таблицата – файл с разширение .db, в който се съхранява таблицата.

Всички тези свойства се променят по време на изпълнение на програмата.

Нуждаем се от компонента Table, за да се отървем от спецификацията. Можем, под прикритието на Таблица, да отворим всяка конкретна таблица и да променим само свойствата на Таблицата, без да засягаме други компоненти. Например, когато отваряме таблица, затваряме и деактивираме предишната, докато името на базата данни и името на таблицата в свойствата на компонента Таблица се изтриват и отваряме и активираме нова, записвайки нови имена на директория и файлове в DatabaseName и TableName при отваряне. (Вижте методите TBOpenFileClick и TBCloseFileClick в Приложение A).

Компонентите DataSourse и Table се намират на формата, но се виждат само при работа с програмата в Builder.

5.3 Работа с графики

За да начертаем плана, използваме компонента Изображение. Този обект има две важни свойства:

1)Picture – е обект от класа TPicture, който е контейнер за графики от всякакъв вид. Тези. този компонент може да съхранява растерни графики, икони или други дефинирани от потребителя графики. Изображението е мястото, където се намира нашата рисунка. С негова помощ запазваме получения чертеж във файл. (Вижте Приложение A, метод TBSaveFileClick). Моля, имайте предвид също, че размерите на картината и изображението може да не са еднакви. Този проблем ще бъде разгледан по-подробно по-долу.

2) Платно - платно. Целият процес на рисуване се извършва върху платното на компонента Image. Canvas ви позволява да задавате параметрите на писалката, четката, шрифта, да рисувате обекти като линии, правоъгълници, елипси, както и да показвате текст.

В нашата програма използваме чертане на линии с помощта на методите MoveTo и LineTo outline, чертане на точки с помощта на Ellipse и извеждане на текст с помощта на метода TextOut. (Вижте Приложение A, чертеж на план).

Тези. canvas ни позволява да работим с Windows GDI функции, без да имаме директен достъп до тях, което прави работата с графики много по-лесна.


5.4 Развитие на интерфейса

Специално внимание трябва да се обърне и на разработването на интерфейса, тъй като е необходимо той да бъде удобен за потребителя. Инструментите на Builder улесняват внедряването на интерфейса в стандартите на Windows.

Основните елементи на стандартния програмен интерфейс на Windows:

1) Менюта - осигуряват лесен начин за потребителите да изпълняват логически групирани команди.

Главното меню се създава с помощта на компонента MainMenu и е много удобно да го редактирате, когато създавате програма, тъй като не е необходимо да го стартирате, за да го проверите - цялото му съдържание вече се показва във формуляра.

2) Лента с инструменти - съдържа бутони с инструменти, които съответстват на елементите в менюто на програмата и дават на потребителя по-директен достъп до нейните команди.

Лентата с инструменти е реализирана с помощта на компонента ToolBar, който ви позволява бързо да добавяте и поставяте бутони. Всички бутони с инструменти на лентата с инструменти имат еднаква ширина и височина.

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

В съответствие със стандарта на Windows създадох бутони на панела, съответстващи на елементите от менюто „Ново“, „Отваряне“, „Запазване“, „Печат“.

3) Бутони - с тяхна помощ потребителят започва изпълнението на действието, зададено на този бутон.

Обикновено, според стандарта за интерфейс на Windows, бутоните почти никога не се използват, за да не претрупват прозореца на програмата. Вместо това се използват ленти с инструменти и менюта.

Но тъй като нашата програма не изпълнява много голям брой действия, можем да използваме и бутони. Това е удобно с това, че за разлика от менютата, те са разположени до елемента, по отношение на който се извършва извикваното от тях действие (например бутоните за добавяне и изтриване на обекти са разположени до списъка с обекти, а бутоните за мащабиране са следващите към снимката), което разбира се ще бъде удобно за потребителя.

Освен това можете да поставите подписи върху тях, обяснявайки предназначението им, което също е удобно.

Бутон се създава чрез поставяне на компонент Button във формуляр. При разработването на програма се използва нейното свойство Caption - надписът върху бутона, а по време на изпълнение се използва свойството Enabled, за да направи бутона неактивен или, напротив, да го активира. (Вижте Приложение A, HideButtons() и ShowButtons()). Например при отваряне на таблица активираме бутоните за чертане на план, а при затваряне ги правим неактивни.

4) Падащи списъци – използват се, за да позволят на потребителя да избере елемент от списък. Това е много по-удобно, отколкото да го въвеждате ръчно.

В тази програма се използва разгъващ се списък за въвеждане на тип обект в таблицата (DBComboBox, разгледан по-горе) и за премахване на тип обект от таблицата с обекти (ComboBox).

Разликата между DBComboBox и ComboBox е, че първият е свързан с таблично поле, а вторият е обикновен списък. Използването на прост списък ComboBox ви позволява да разрешите проблемите с взаимодействието с таблицата и DBComboBox, които възникват при изтриване на обект от таблицата.

5) Ленти за превъртане – реализирани с помощта на компонента ScrollBox, в нашия случай те са необходими за превъртане на плановото изображение, когато е увеличено. Програмата променя параметъра Max, който определя максималното количество на превъртане в зависимост от мащаба.

6) Квадратчета (превключватели) – определят дали опцията, която представляват, е активирана или деактивирана.

В Builder това е компонентът CheckBox.

В програмата квадратчетата за отметка определят дали следните функции са активирани или деактивирани:

Чертане на маршрутни линии;

Показване на разстоянието върху плана;

Изобразяване на вида на обекта върху плана;

Показване на таблица с разстояния.

Квадратчетата за отметка обикновено се намират в менюто с настройки. Но поради простотата на нашата програма, те се показват на панела до полето за рисуване, което е много удобно за потребителя.

7) Раздели - в тази програма таблицата и чертежа на плана са разположени в различни раздели. Вярвам, че това ще бъде по-удобно за потребителя, тъй като цялата програма се съдържа в един прозорец и в същото време както областта на таблицата, така и областта за рисуване не са разположени в ущърб една на друга.

В Builder има два типа раздели: TabControl и PageControl.

Програмата използва PageControl, тъй като, за разлика от първия, този компонент може да съдържа разнородни контроли в раздели. В TabControl всички страници са еднакви.

8) Диалозите са много удобен инструмент, който помага за реализирането на такива диалози с потребителя като запазване, отваряне на файл, отпечатване и избор на цвят, използван в тази програма.

Всички необходими диалогови прозорци се поставят във формата, но остават невидими за потребителя. Те се извикват от програмата и реализират стандартния интерфейс на Explorer.

Използвайки диалоговите прозорци OpenDialog и SaveDialog, програмата получава името на файла и директорията, които потребителят избира. С помощта на PrintDialog се извикват настройките за печат. И ColorDialog ви помага да изберете цвят (използва се за избор на фонов цвят на картината).

Предназначението на всеки компонент на видимия за потребителя интерфейс е описано в ръководството за потребителя.

Струва си да се отбележи, че всеки интерфейсен обект има свойство, наречено Align. Тя ви позволява да подравните контрола отдясно, отляво, отгоре или отдолу на формуляр и панел и контролата остава там, дори ако формулярът е преоразмерен. Например, панелът с бутони близо до картината е подравнен вдясно, таблицата с разстояния е подравнен вляво, а полето на картината е подравнено към alClient, което заема цялото свободно пространство между таблицата и панела . Докато разтягате формата, тези контроли също ще се разтягат, докато остават на място.

Използването на свойството Align е удобно, защото на етапа на проектиране можете да подредите компонентите според нуждите и след това не е необходимо ръчно да задавате размерите им всеки път, когато формата се промени.

5.5 Някои особености на алгоритмите

Алгоритъм за рисуване

Тъй като вече беше описано доста подробно, ще добавя само една бележка относно развитието му: чертае карта в конформна проекция. Те поддържат равенството на ъглите между посоките на картата и в природата. В същото време размерите на териториите са изкривени.

Този тип проекция е избран, защото е най-лесно да начертаете координатна мрежа за него, тъй като се състои от прави линии. (Вижте Приложение E за повече информация относно картографските проекции и координатната мрежа.)

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

Алгоритъм за изчисляване на разстояние.

Подробно е описано и в "Описание на алгоритъма". Това е част от алгоритъма за рисуване.

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

Като форма на земната повърхност се приема сфера. Това може да доведе до грешки, тъй като формата на земята всъщност е елипсоид, но значително опростява изчисленията. Средният радиус на земята се приема за 6371 km. Това дава грешка от около 0,3%.

Трябва също да се отбележи, че за изчисляване на разстоянието, особено в най-сложния случай, се използват няколко последователни изчисления, в резултат на което грешката се натрупва. Величината на грешката също се влияе от преобразуването на градусната мярка на ъгъл в радиани и обратно. Но със съвременната точност на компютърните изчисления тази грешка ще бъде малка и освен това в задачата не е посочено, че оценката на маршрута трябва да е точна.

Създаване на таблица

Тук трябва да се каже, че не съм намерил алгоритъм за създаване на таблица програмно в нито една книга, която имам. Цялата литература говори за създаване на таблици в DatabaseDesktop, което би било неудобно за потребителя да инсталира още по-голяма програма, само за да реши проблема със създаването на нови таблици.

Но все пак този алгоритъм беше намерен в помощта на Builder, въпреки че съдържаше грешки там.

Програмата представя и работещ пример за него (вижте Приложение A, TBNewFileClick).

Като характеристика на този алгоритъм трябва да се отбележи, че преди да извикате процедурата за създаване на таблица CreateTable(), трябва да инициализирате всички полета, като посочите тяхното име, тип, дължина (ако е необходимо) и необходимата стойност (независимо дали е необходима или не). След като инициализираме полетата, декларираме ключово поле и едва след това извикваме процедурата за създаване на таблица. След това трябва да свържете новата таблица към компонента Table, за да можете да работите с нея, като използвате мрежата и навигатора. Името на файла на новата таблица се изисква чрез SaveDialog.

Проблем с размера на графиката

По време на разработката на програмата възникна доста сериозен проблем с рисуването на картина - при промяна на размера на формата трябваше да се промени размерът на картината, но това не се случи.

Причината беше, че размерът на компонента Изображение все още се променя, но размерът на Картината остава същият. В тази връзка беше създадена процедурата ResizeForm (вижте Приложение A), която реагира на промените в размера на формата и промени размера на изображението в съответствие с променения размер на компонента Image.

5.6 Тестване

По време на целия дизайн на програмата тя беше тествана и отстранена. Особено внимание беше обърнато на две точки - правилността на работа с таблици и правилността на чертане на план.

Когато работите с таблици, първата стъпка беше да проследите всички проблеми, свързани с отварянето, създаването на таблици и рисуването. Например, ако не деактивирате бутоните за рисуване, щракването върху тях, докато таблицата не е отворена, може да доведе до грешка. За да се елиминира тази грешка, ако няма отворена маса, бутоните се правят неактивни.

Друга важна грешка, която беше коригирана, е проблемът с размера на графиката (вижте по-горе).

Също така беше необходимо да се гарантира, че при деактивиране/активиране на квадратчета за отметка и промяна на размера на формуляра няма да бъде нарисувана картина, ако потребителят все още не е щракнал върху бутона „рисуване“. Това проследяване се извършва в програмата чрез флага за изтегляне, който се задава, когато потребителят щракне върху бутона за изтегляне и се изчиства, когато се щракне върху бутона за изчистване. По време на процеса на тестване всички ситуации, при които е необходимо да се провери този флаг, бяха наблюдавани и отстранени грешки.

Най-важният аспект на тестването беше проверката на функционалността на програмата на компютър, който няма инсталиран Builder. Това помогна да се определи следното:

1) когато компилирате програма, трябва да включите всички използвани библиотеки. Това се постига чрез деактивиране на две опции в настройките на компилатора. В същото време изпълнимият код на програмата става по-голям, но може да работи и на машина без Builder.

2) програмата изисква Borland Database Engine. Ако не е на вашия компютър, трябва да го инсталирате.


6. ОПИСАНИЕ НА ПРОГРАМАТА

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

Програмата е създадена за операционна система Windows и има стандартизиран и лесен за използване интерфейс. Заедно с него идва пример под формата на таблица с маршрути на влакове.


7. ИНСТРУКЦИИ ЗА ИНСТАЛИРАНЕ

За да инсталирате програмата, трябва да отговаряте на следните изисквания: процесор 233 MHz или по-висок, RAM 16 MB, OS Windows98 или по-висока.

За да инсталирате програмата, трябва да направите следното:

1) Създайте нова папка за програмата.

2) От носителя, на който се намира архивът на програмата (флопи диск или диск), копирайте го в тази папка.

3) Разопаковайте архива в тази папка.

4) Уверете се, че файловете objects.db и rasst.db са в същата папка като програмата.

5) Уверете се, че атрибутът „Само за четене“ е изчистен за тези файлове. Ако не, премахнете го.

6) Разопаковайте архива с библиотеки в папката на Windows.

7) Сега можете да стартирате програмата и да я използвате.


8. РЪКОВОДСТВО ЗА ПОТРЕБИТЕЛЯ 8.1 Главно меню Меню "Файл".

За да започнете работа в програмата, трябва да отворите файл с таблица или да създадете нов. Това може да стане с помощта на елементите от менюто Файл, Отваряне и Нов.

"Отвори" - отваряне на съществуваща таблица. Извиква диалогов прозорец, в който потребителят трябва да избере файл с разширение .db.

"Ново" - създаване на нова таблица. Извиква се диалогов прозорец, в който потребителят посочва името на новата таблица.

"Печат" - в зависимост от отворения раздел, отпечатва картина или таблица. Когато изберете този елемент, се отваря диалоговият прозорец с настройки за печат; след като щракнете върху бутона "OK", заданието се изпраща за печат.

Меню на масата

"План за изграждане" - ако таблицата е отворена, активира раздел "План" и чертае план.

"Добавяне на тип обект" - извиква формата за добавяне на тип обект.

"Изтриване на тип обект" - извиква формата за изтриване на тип обект.

Помощно меню

"За програмата" - показва името на програмата и информация за автора.


8.2 Панел с бързи бутони

Действията на тези бутони са подобни на елементите със същото име в менюто "Файл".

- "Ново" - създаване на нова таблица.

- "Open" - отваряне на съществуваща таблица.

- "Печат" - отпечатване на картина или таблица.

8.3 Раздел Таблица

Table grid – таблицата се зарежда в нея. Използвайки тази мрежа, потребителят може да редактира и преглежда записи в таблицата.

Навигатор – разположен под решетката, позволява редактиране и преглед на таблицата.

Бутони за навигация

- "Първи запис" - преминава към първия запис в таблицата.

- "Предишен запис" - преминава към предишния запис в таблицата.

- "Следващ запис" - преминава към следващия запис в таблицата.

- "Последен запис" - преминава към последния запис в таблицата.

- “Добавяне на запис” - таблицата се поставя в режим на редактиране, вмъква се нов празен запис преди активния запис.

- “Изтриване на запис” - изтрива текущия запис, като преди това е поискано потвърждение.

- "Редактиране" - редактиране на текущия запис.

- "Отмяна на промените" - отменя промените в текущия запис, връщайки предишната му стойност.

- "Актуализация". Актуализира таблица в мрежа.

Под навигатора има Списък с обекти и бутони за изтриване и добавяне на обекти.

Списък с обекти – съдържа списък с типове обекти. Когато изберете тип от списъка, той се въвежда в текущия запис в таблицата.

Добавяне на тип обект – извиква формата за добавяне на тип. Когато го добавите, той веднага се добавя към списъка.

Изтриване на тип обект – извиква формата за изтриване на тип обект.

Добавете формуляр за тип обект

Съдържа поле за редактиране за въвеждане на текст, в което се въвежда името на новия тип.

"Добави" - добавя тип обект към списъка и таблицата без затваряне на формата.

"Ok" - ако обектът не е добавен, въвежда го в списъка и таблицата и затваря формата.

"Отказ" - затваря формулярите без добавяне.

Изтриване на формуляр за тип обект

Списък с обекти – от него потребителят избира кой обект да бъде изтрит.

"Изтриване" - изтрива избрания тип обект от таблицата и списъка.

"Изтриване на всички" - напълно изчиства таблицата с обекти и списъците.

"OK" - затваря формата.


8.4 Раздел "План".

Полето за чертане е областта, където се показва чертежа на плана.

Ленти за превъртане – появяват се, когато увеличите изображение, като щракнете върху бутона „Увеличаване“. Позволява ви да превъртате увеличеното изображение.

Таблица с разстояния – показва за всеки маршрут неговия номер и дължината на отсечките, в километри. Таблицата се вижда, ако отметката "Скриване на таблицата с разстояния" е изчистена.

"Изчистване на картата" - изчиства полето на картината.

„Нарисувай“ - чертае план.

"Цвят на фона" - позволява ви да изберете цвета на фона на картината. Когато щракнете върху този бутон, се появява диалогов прозорец за избор на цвят.

"+ Увеличи" - увеличава изображението върху плана.

"- Намаляване" - намалява изображението върху плана. Този бутон става активен, когато натиснете бутона за увеличаване.

"По подразбиране" - задава първоначалния размер на изображението.

„Начертайте линии на маршрути“ - ако е отметнато, маршрутите ще бъдат начертани на плана; ако не, ще бъдат посочени само точки.

„Показване на разстоянията на картата“ - ако квадратчето е отметнато, до всяка точка от маршрута се показва разстоянието под формата на сбор от дължините на сегментите, предхождащи тази точка. “0” се поставя близо до първата точка от маршрута.

“Показване на типа на обекта на картата” - ако квадратчето е отметнато, типът на обекта се показва до всяка точка.

„Скриване на таблицата с разстояния“ – ако отметката е поставена, таблицата с разстояния е невидима. Ако е изчистено, таблицата ще се появи отдясно на полето за чертане.

Всички квадратчета за отметка са отметнати по подразбиране.


9. ТЕСТОВ СЛУЧАЙ

Като тестов пример ще изобразим маршрутите на няколко влака от Горкинската железница.

Да вземем следните влакове:

N 497G Горки-Моск - Адлер

N 471G Горки-Моск - Новоросийск

N 431G Горки-Моск - Адлер

N 367G Горки-Моск - Самара

N 059A Горки-Моск - Санкт Петербург-Главн

N 039G Горки-Моск - Москва Курск

Нека въведем в таблицата координатите на най-големите населени места като точки на всеки маршрут. Ще използваме имена на градове като обекти.

Ориз. 9.1. Общ изглед на програмата в раздела "Таблица", въвеждане на името на обект в запис с помощта на списък.


Преди това добавихме станцията Red Knot към таблицата с обекти, но тъй като не ни е необходима, ще я изтрием.

Ориз. 9.2. Изтриване на тип обект.

При набиране на маршрута на влак 431 се нуждаем от Владимир. Тъй като не е в списъка, трябва да го добавите.

Ориз. 9.3. Добавяне на тип обект.


И така, събрахме всички маршрути, които искахме. В резултат на това получихме таблица като тази.

Ориз. 9.4. Таблица

Сега, използвайки нашия таблет, ще изградим план.

Ориз. 9.5. Изображение на плана с всички надписи.


По подразбиране показваме линии, разстояния и имена на градове.

Да видим как ще изглеждат трасетата без подписи.

Ориз. 9.6. Изображение на плана без всички надписи.

Сега нека просто погледнем разстоянията.

Ориз. 9.7. Изображение на план само с разстояния.


Всъщност те не бяха изчислени много точно, но това е така, защото не взехме предвид всички точки на тези маршрути, а също и взетите координати не бяха напълно правилни - те бяха определени от картата „на око“.

Сега нека да разгледаме нашия план само с имената на градовете.

Ориз. 9.8. Изображение на план, показващ само видовете обекти.

Ориз. 9.9. Изображение на плана под формата на точки с всички подписи.


Можете също да видите таблица с разстояния.

Ориз. 9.11. Общ изглед на програмата в раздела "План" с видима таблица с разстояния.


ЗАКЛЮЧЕНИЕ

Задачата поставена в заданието на бакалавърската работа беше успешно изпълнена. Разработената програма напълно удовлетворява началните условия, описани в постановката на задачата. По-специално, програмата реализира работа с таблици, графики и файлове.

Работата на потребителя на програмата се извършва с помощта на прост интерфейс, направен в съответствие със стандартите за програмен интерфейс на Windows.

Допълнителни подобрения и разширяване на възможностите на този проект включват добавяне на изчисляване на най-краткия маршрут, рисуване на икони на обекти, релефни изображения и възможност за зареждане на изображение на карта като фон.


БИБЛИОГРАФИЯ

1. P. Gustafson, M. Cashman, B. Swart, J. Holingworth. Borland C++ Builder 6. Ръководство за разработчици. – Уилямс, 2004 г.

2. А. Архангелски. Програмиране в C++ Builder 6. – Binom, 2002.

3. Т.А. Павловская. C/C++. Програмиране на език от високо ниво. – Петър, 2001.


ПРИЛОЖЕНИЕ ПРИЛОЖЕНИЕ E. Картографски проекции и мрежови карти

Невъзможно е да се разгъне сферична повърхност върху равнина без прекъсвания и гънки, т.е. нейното планово изображение върху равнина не може да бъде представено без изкривявания, с пълно геометрично сходство на всичките му очертания. Пълно сходство на очертанията на острови, континенти и различни обекти, проектирани върху равна повърхност, може да се постигне само върху топка (глобус). Изображението на земната повърхност върху топка (глобус) е с равен мащаб, с равен ъгъл и с еднакъв размер.

Невъзможно е едновременно и напълно да се запазят тези геометрични свойства на картата. Географска мрежа, изградена върху равнина, изобразяваща меридиани и паралели, ще има известни изкривявания, така че изображенията на всички обекти на земната повърхност ще бъдат изкривени. Естеството и степента на изкривяванията зависят от метода за изграждане на картографската мрежа, въз основа на която е съставена картата.

Показването на повърхността на елипсоид или сфера върху равнина се нарича картографска проекция. Има различни видове картографски проекции. Всеки от тях съответства на определена картографска мрежа и присъщите й изкривявания. При един вид проекция се изкривяват размерите на площи, при друг - ъгли, при трети - площи и ъгли. В същото време във всички проекции, без изключение, дължините на линиите са изкривени.

Картографските проекции се класифицират според естеството на изкривяването, вида на изображението на меридианите и паралелите (географска мрежа) и някои други характеристики. Въз основа на естеството на изкривяванията се разграничават следните картографски проекции:

Равноъгълен, запазващ равенството на ъглите между посоките на картата и в природата. Фигура E.1 показва карта на света, на която картографската мрежа запазва свойството на равноъгълност. Картата запазва сходството на ъглите, но размерите на областите са изкривени. Например площите на Гренландия и Африка на картата са почти еднакви, но в действителност площта на Африка е около 15 пъти по-голяма от площта на Гренландия.

Фиг.E.1 Карта на света в конформна проекция.

Еднакви по размер, като се запазва пропорционалността на площите на картата спрямо съответните площи на земния елипсоид. Фигура E.2 показва карта на света, начертана в равноповърхностна проекция. Той запазва пропорционалността на всички области, но сходството на фигурите е изкривено, тоест няма равноъгълност. Взаимната перпендикулярност на меридианите и паралелите на такава карта се запазва само по средния меридиан.

Еквидистантен, поддържащ постоянен мащаб във всяка посока;

Произволно, без да се запазва равенството на ъглите, пропорционалността на площите или постоянството на мащаба. Смисълът на използването на произволни проекции е по-равномерното разпределение на изкривяванията върху картата и удобството за решаване на някои практически проблеми.


Ориз. E. 2 Карта на света в равноплощна проекция.

Въз основа на вида на изображението, решетките на меридианите и паралелите на картографската проекция се разделят на конични, цилиндрични, азимутални и т.н. Освен това във всяка от тези групи могат да бъдат проекции с различно естество на изкривяване (конформни, равноплощни и т.н.). Геометричната същност на коничните и цилиндричните проекции се състои в това, че мрежа от меридиани и паралели се проектира върху страничната повърхност на конус или цилиндър с последващо разгръщане на тези повърхности в равнина. Геометричната същност на азимуталните проекции се състои в това, че решетка от меридиани и паралели се проектира върху равнина, допирателна към топката на един от полюсите или секанс по някакъв паралел. Картографската проекция, която е най-подходяща по отношение на характера, големината и разпределението на изкривяванията за конкретна карта, се избира в зависимост от предназначението, съдържанието на картата, както и от размера, конфигурацията и географското местоположение на картографираната територия. Благодарение на картографската мрежа всички изкривявания, колкото и големи да са те, сами по себе си не влияят на точността на определяне на географското положение (координати) на обектите, изобразени на картата на картата. В същото време картографската мрежа, като графичен израз на проекцията, позволява да се вземат предвид естеството, големината и разпределението на изкривяванията при извършване на измервания на картата. Следователно всяка географска карта е математически определено изображение на земната повърхност.

Лични дъщерни парцели на Агински Бурятски автономен окръг за 2005 - 2010 г.”, който е изготвен в чернови вариант. 4. Основните насоки за подобряване на дейността на държавните органи в подкрепа на личните помощни парцели на селското население в Агински Бурятски автономен окръг 4.1 Проблеми и приоритети за развитието на личните помощни парцели в Агински...

Изследването на семействата доведе до развитието на психологически, педагогически и социологически методи, които задълбочават и разширяват представите за съвременното семейство. ГЛАВА 3. СОЦИАЛНИ ПРОБЛЕМИ И ПЕРСПЕКТИВИ ЗА СОЦИАЛНА РАБОТА С МЛАДИ СЕМЕЙСТВА В СЕЛО ВОРОНОВКА 3.1 Обща характеристика Стр. Вороновка, Шегарски район, Томска област, Шегарски район се намира в южната част на Томск...




Осигуряване и подпомагане на деца; - в момента в Русия е разработен и внедрен механизъм за финансиране на целеви програми за подкрепа на майчинството и детството. 2. Финансов механизъм за прилагане на държавната политика за подкрепа на майчинството и детството 2.1 Процедурата и условията за изплащане на социални обезщетения Към днешна дата Русия е разработила доста развита система от обезщетения, ...