Funktionsdiagramm und funktionaler Aufbau des Programms. Strukturierter Programmentwurf


Thema 1.3: Systemsoftware

Thema 1.4: Servicesoftware und algorithmische Grundlagen

Einführung in die Wirtschaftsinformatik

1.3. PC-Systemsoftware

1.3.1. PC-Softwarestruktur

Eine Reihe von Programmen zur Lösung von Problemen auf einem PC wird als Software bezeichnet. Die Zusammenstellung einer PC-Software wird als Softwarekonfiguration bezeichnet.

Software lässt sich in drei Kategorien einteilen:

  1. Systemsoftware (Programme für den allgemeinen Gebrauch), die verschiedene Hilfsfunktionen ausführen, z. B. das Erstellen von Kopien verwendeter Informationen, das Bereitstellen von Hilfeinformationen zum Computer, das Überprüfen der Funktionalität von Computergeräten usw.
  2. Anwendungssoftware, die die notwendigen Arbeiten am PC erledigt: Textdokumente bearbeiten, Zeichnungen oder Bilder erstellen, Informationsfelder verarbeiten usw.
  3. Werkzeugsoftware (Programmiersysteme), die die Entwicklung neuer Computerprogramme in einer Programmiersprache gewährleistet.


Reis. 1.

Systemsoftware

Diese allgemein verwendbaren Programme sind nicht an eine bestimmte PC-Anwendung gebunden und führen herkömmliche Funktionen aus: Planung und Aufgabenverwaltung, E/A-Verwaltung usw.

Mit anderen Worten, Systemprogramme führen verschiedene Hilfsfunktionen aus, z. B. das Erstellen von Kopien verwendeter Informationen, das Bereitstellen von Hilfeinformationen zum Computer, das Überprüfen der Funktionalität von Computergeräten usw.

Die Systemsoftware umfasst:

  • Betriebssysteme (dieses Programm wird beim Einschalten des Computers in den RAM geladen);
  • Shell-Programme (bieten eine bequemere und visuellere Möglichkeit zur Kommunikation mit einem Computer als die Verwendung der DOS-Befehlszeile, z. B. Norton Commander);
  • Betriebsschalen – Schnittstellensysteme, die zur Erstellung grafischer Schnittstellen, Multiprogrammierung usw. verwendet werden;
  • Treiber (Programme zur Steuerung der Ports von Peripheriegeräten, die normalerweise beim Starten des Computers in den RAM geladen werden);
  • Dienstprogramme (Hilfs- oder Dienstprogramme, die dem Benutzer eine Reihe zusätzlicher Dienste bereitstellen).

Zu den Dienstprogrammen gehören:

  • Dateimanager oder Dateimanager;
  • Mittel zur dynamischen Datenkomprimierung (ermöglichen es Ihnen, die Informationsmenge auf der Festplatte aufgrund der dynamischen Komprimierung zu erhöhen);
  • Anzeige- und Wiedergabetools;
  • Diagnosewerkzeuge; Mit Kontrolltools können Sie die Computerkonfiguration und die Leistung von Computergeräten, hauptsächlich Festplatten, überprüfen.
  • Kommunikationstools (Kommunikationsprogramme) sollen den Informationsaustausch zwischen Computern organisieren;
  • Computersicherheitstools (Backup, Antivirensoftware).

Es ist zu beachten, dass einige der Dienstprogramme im Betriebssystem enthalten sind, während der andere Teil autonom funktioniert. Der Großteil der allgemeinen (System-)Software ist im Betriebssystem enthalten. Ein Teil der allgemeinen Software ist im Computer selbst enthalten (einige der Betriebssystemprogramme und Steuerungstests sind im ROM oder PROM geschrieben, das auf der Hauptplatine installiert ist). Einige der gängigen Softwareprogramme sind eigenständige Programme und werden separat geliefert.

Anwendungssoftware

Anwendungsprogramme können unabhängig oder als Teil von Softwaresystemen oder -paketen verwendet werden.

Anwendungssoftware – Programme, die es direkt ermöglichen, die notwendigen Arbeiten am PC durchzuführen: Textdokumente bearbeiten, Zeichnungen oder Bilder erstellen, Tabellenkalkulationen erstellen usw.

Anwendungssoftwarepakete sind ein System von Programmen, die je nach Anwendungsbereich in problemorientierte, universell einsetzbare Pakete und integrierte Pakete unterteilt werden. Moderne integrierte Pakete enthalten bis zu fünf Funktionskomponenten: Test- und Tabellenkalkulationsprozessor, DBMS, Grafikeditor, Telekommunikationstools.

Zur Anwendungssoftware gehören beispielsweise:

  1. MS OFFICE-Suite mit Office-Anwendungen.
  2. Buchhaltungssysteme.
  3. Finanzanalytische Systeme.
  4. Integrierte Office-Management-Pakete.
  5. CAD – Systeme (computergestützte Konstruktionssysteme).
  6. HTML- oder Web-Editoren.
  7. Browser sind Mittel zum Anzeigen von Webseiten.
  8. Grafikeditor.
  9. Expertensysteme.

Werkzeugsoftware

Toolsoftware oder Programmiersysteme sind Systeme zur automatisierten Entwicklung neuer Programme in einer Programmiersprache.

Im allgemeinsten Fall benötigen Sie zum Erstellen eines Programms in der ausgewählten Programmiersprache (Systemprogrammiersprache) die folgenden Komponenten:

  1. Texteditor zum Erstellen einer Datei mit dem Quelltext des Programms.
  2. Compiler oder Interpreter. Der Quelltext wird mithilfe eines Compilerprogramms in Zwischenobjektcode übersetzt. Der Quellcode eines großen Programms besteht aus mehreren Module(Quelldaten). Jedes Modul wird in eine separate Datei mit Objektcode kompiliert, die dann zu einer einzigen zusammengefasst werden muss.
  3. Ein Link-Editor oder Assembler, der die Verknüpfung von Objektmodulen durchführt und eine funktionierende Anwendung als Ausgabe generiert – ausführbaren Code. Ausführbarer Code ist ein vollständiges Programm, das auf jedem Computer ausgeführt werden kann, der über das Betriebssystem verfügt, für das das Programm erstellt wurde. Die resultierende Datei hat in der Regel die Erweiterung .EXE oder .COM.
  4. In letzter Zeit sind visuelle Programmiermethoden (unter Verwendung von Skriptsprachen) weit verbreitet, die auf die Erstellung von Windows-Anwendungen abzielen. Dieser Prozess wird in Rapid-Design-Umgebungen automatisiert. Dabei kommen vorgefertigte visuelle Komponenten zum Einsatz, die mit speziellen Editoren konfiguriert werden.

Die beliebtesten Editoren (Programmiersysteme mit visuellen Werkzeugen) für visuelles Design:

  1. Borland Delphi – entwickelt, um fast jedes Anwendungsprogrammierungsproblem zu lösen.
  2. Borland C++ Builder ist ein hervorragendes Tool zum Entwickeln von DOS- und Windows-Anwendungen.
  3. Microsoft Visual Basic ist ein beliebtes Tool zum Erstellen von Windows-Programmen.
  4. Microsoft Visual C++ – mit diesem Tool können Sie beliebige Anwendungen entwickeln, die in einer Betriebssystemumgebung wie Microsoft Windows ausgeführt werden.

Eine Reihe von Programmen zur Lösung von Problemen auf einem PC wird als Software bezeichnet. Die Zusammenstellung einer PC-Software wird als Softwarekonfiguration bezeichnet. Software lässt sich in drei Kategorien einteilen (Abb. 1):

Abbildung 1. Softwareklassifizierung

    Systemsoftware (Allzweckprogramme), die verschiedene Hilfsfunktionen ausführt, wie z. B. das Erstellen von Kopien verwendeter Informationen, das Bereitstellen von Hilfeinformationen zum Computer, das Überprüfen der Funktionalität von Computergeräten usw.

    Anwendungssoftware, die die notwendigen Arbeiten am PC erledigt: Textdokumente bearbeiten, Zeichnungen oder Bilder erstellen, Informationsfelder verarbeiten usw.

    Werkzeugsoftware (Programmiersysteme), die die Entwicklung neuer Computerprogramme in einer Programmiersprache gewährleistet.

Systemsoftware ist eine Reihe von Programmen, die eine effektive Verwaltung von Computersystemkomponenten wie Prozessor, RAM, Ein-/Ausgabegeräten und Netzwerkgeräten ermöglichen und als „Zwischenschichtschnittstelle“ fungieren, auf deren einer Seite sich die Hardware befindet und auf der anderen Seite Benutzeranwendungen. Im Gegensatz zu Anwendungssoftware löst Systemsoftware keine spezifischen Anwendungsprobleme, sondern stellt lediglich den Betrieb anderer Programme sicher, verwaltet die Hardwareressourcen des Computersystems usw.

Diese allgemein verwendbaren Programme sind nicht an eine bestimmte PC-Anwendung gebunden und führen herkömmliche Funktionen aus: Planung und Aufgabenverwaltung, E/A-Verwaltung usw. Mit anderen Worten, Systemprogramme führen verschiedene Hilfsfunktionen aus, z. B. das Erstellen von Kopien verwendeter Informationen, das Bereitstellen von Hilfeinformationen zum Computer, das Überprüfen der Funktionalität von Computergeräten usw. Die Systemsoftware umfasst:

    Betriebssysteme (dieses Programm wird beim Einschalten des Computers in den RAM geladen)

    Shell-Programme (bieten eine bequemere und visuellere Möglichkeit, mit einem Computer zu kommunizieren als die DOS-Befehlszeile, zum Beispiel Norton Commander)

    Bedienschalen sind Schnittstellensysteme, die zur Erstellung grafischer Oberflächen, Multiprogramming usw. verwendet werden.

    Treiber (Programme zur Steuerung der Ports von Peripheriegeräten, die normalerweise beim Starten des Computers in den RAM geladen werden)

    Dienstprogramme (Hilfs- oder Dienstprogramme, die dem Benutzer eine Reihe zusätzlicher Dienste bereitstellen)

Zu den Dienstprogrammen gehören:

    Dateimanager oder Dateimanager

    Tools zur dynamischen Datenkomprimierung (ermöglichen es Ihnen, die Informationsmenge auf der Festplatte aufgrund der dynamischen Komprimierung zu erhöhen)

    Anzeige- und Wiedergabetools

    Diagnosewerkzeuge; Mit den Kontrolltools können Sie die Computerkonfiguration und die Funktionalität von Computergeräten, vor allem Festplatten, überprüfen

    Kommunikationstools (Kommunikationsprogramme) dienen dazu, den Informationsaustausch zwischen Computern zu organisieren

    Computersicherheitstools (Backup, Antivirensoftware).

Dienstprogramme sind Programme zur Lösung einer begrenzten Anzahl von Hilfsaufgaben.

Manchmal werden Dienstprogramme als Servicesoftware klassifiziert

Dienstprogramme werden verwendet für:

    Überwachung von Sensorindikatoren und Geräteleistung – Überwachung der Prozessor- und Videoadaptertemperaturen; Lesen von S.M.A.R.T. Festplatte;

    Geräteparameter verwalten – maximale Drehzahl des CD-Laufwerks begrenzen; Lüftergeschwindigkeit ändern.

    Überwachungsindikatoren – Überprüfung der referenziellen Integrität; Korrektheit der Datenaufzeichnung.

    Erweiterte Funktionen – Formatieren und/oder Neupartitionieren der Festplatte bei gleichzeitigem Speichern von Daten, Löschen ohne Wiederherstellungsmöglichkeit.

Arten von Dienstprogrammen:

Festplatten-Dienstprogramme

      Defragmentierer

      Festplattenscan – Suche nach Dateien und Festplattenbereichen, die falsch aufgezeichnet oder auf verschiedene Weise beschädigt wurden, und deren anschließende Entfernung für eine effiziente Nutzung des Festplattenspeichers.

      Datenträgerbereinigung – Löschen temporärer und unnötiger Dateien, Leeren des Papierkorbs.

      Unter Festplattenpartitionierung versteht man die Aufteilung einer Festplatte in logische Festplatten, die unterschiedliche Dateisysteme haben können und vom Betriebssystem als mehrere unterschiedliche Festplatten wahrgenommen werden.

      Backup – Erstellen von Sicherungskopien ganzer Festplatten und einzelner Dateien sowie Wiederherstellen von diesen Kopien.

      Festplattenkomprimierung – Komprimierung von Informationen auf Festplatten, um die Kapazität von Festplatten zu erhöhen.

      • Registrierungsdienstprogramme

        Dienstprogramme zur Geräteüberwachung

        Gerätetests

Abbildung 2. Platz von Open-Source-Software in der mehrstufigen Struktur eines Computers

Es ist zu beachten, dass einige der Dienstprogramme im Betriebssystem enthalten sind, während der andere Teil autonom funktioniert. Der Großteil der allgemeinen (System-)Software ist im Betriebssystem enthalten (Abb. 2). Ein Teil der allgemeinen Software ist im Computer selbst enthalten (einige der Betriebssystemprogramme und Steuerungstests sind im ROM oder PROM geschrieben, das auf der Hauptplatine installiert ist). Einige der gängigen Softwareprogramme sind eigenständige Programme und werden separat geliefert.

          Anwendungssoftware. Anwendungsprogramme können unabhängig oder als Teil von Softwaresystemen oder -paketen verwendet werden. Anwendungssoftware - Programme, die die Ausführung notwendiger Arbeiten am PC direkt unterstützen: Textdokumente bearbeiten, Zeichnungen oder Bilder erstellen, Tabellenkalkulationen erstellen usw. Anwendungssoftwarepakete sind ein System von Programmen, die je nach Anwendungsbereich unterteilt werden in Problemorientierte, allgemeine Pakettermine und integrierte Pakete. Moderne integrierte Pakete enthalten bis zu fünf Funktionskomponenten: Test- und Tabellenkalkulationsprozessor, DBMS, Grafikeditor, Telekommunikationstools. Zur Anwendungssoftware gehören beispielsweise:

    MS OFFICE-Suite mit Office-Anwendungen

    Buchhaltungssysteme

    Finanzanalytische Systeme

    Integrierte Office-Management-Pakete

    CAD – Systeme (Computergestützte Konstruktionssysteme)

    HTML- oder Web-Editoren

    Browser – Mittel zum Anzeigen von Webseiten

    Grafikeditor

    Expertensysteme.

          Werkzeugsoftware. Toolsoftware oder Programmiersysteme sind Systeme zur automatisierten Entwicklung neuer Programme in einer Programmiersprache. Im allgemeinsten Fall benötigen Sie zum Erstellen eines Programms in der ausgewählten Programmiersprache (Systemprogrammiersprache) die folgenden Komponenten: 1. Texteditor zum Erstellen einer Datei mit dem Quelltext des Programms. 2. Compiler oder Interpreter. Der Quelltext wird mithilfe eines Compilerprogramms in Zwischenobjektcode übersetzt. Der Quellcode eines großen Programms besteht aus mehreren Module(Quelldaten). Jedes Modul wird in eine separate Datei mit Objektcode kompiliert, die dann zu einem Ganzen zusammengefasst werden muss.3. Ein Link-Editor oder Assembler, der die Verknüpfung von Objektmodulen durchführt und eine funktionierende Anwendung als Ausgabe generiert – ausführbaren Code. Ausführbarer Code ist ein vollständiges Programm, das auf jedem Computer ausgeführt werden kann, der über das Betriebssystem verfügt, für das das Programm erstellt wurde. Die resultierende Datei hat in der Regel die Erweiterung .EXE oder .COM.4. In letzter Zeit sind visuelle Programmiermethoden (unter Verwendung von Skriptsprachen) weit verbreitet, die auf die Erstellung von Windows-Anwendungen abzielen. Dieser Prozess wird in Rapid-Design-Umgebungen automatisiert. Dabei kommen vorgefertigte visuelle Komponenten zum Einsatz, die mit speziellen Editoren konfiguriert werden. Die beliebtesten Editoren (Programmiersysteme mit visuellen Werkzeugen) für visuelles Design:

    Borland Delphi – entwickelt, um fast jedes Anwendungsprogrammierungsproblem zu lösen

    Borland C++ Builder ist ein hervorragendes Tool zum Entwickeln von DOS- und Windows-Anwendungen

    Microsoft Visual Basic ist ein beliebtes Tool zum Erstellen von Windows-Programmen

    Microsoft Visual C++ – mit diesem Tool können Sie beliebige Anwendungen entwickeln, die in einer Betriebssystemumgebung wie Microsoft Windows ausgeführt werden

Kontrollfragen:

    Betriebssystem definieren.

    Welche Software gilt als Systemsoftware?

    Benennen Sie die Dienstprogrammsoftware.

    Welche Software gilt als Anwendungssoftware?

    Was ist der Zweck der Software?

    Was sind die Hauptklassen von Programmen? Nennen Sie Beispiele für Programme in jeder Klasse entsprechend ihrem Zweck.

Struktur- und Funktionsdiagramme des Programms

Ein Strukturdiagramm ist eine Reihe elementarer Verknüpfungen eines Objekts und der Verbindungen zwischen ihnen, eine der Arten grafischer Modelle. Unter einer elementaren Verbindung versteht man einen Teil eines Objekts, Steuerungssystems etc., der eine elementare Funktion ausführt. In Abb. In Abb. 2.1 zeigt das Blockdiagramm des entwickelten Programms.

Abbildung 2.1 – Programmblockdiagramm

Ein Funktionsdiagramm ist ein Dokument, das die Vorgänge in einzelnen Funktionskreisen eines Produkts (einer Anlage) oder des Produkts als Ganzes erläutert. Ein Funktionsdiagramm ist eine Erläuterung bestimmter Arten von Prozessen, die in integralen Funktionsblöcken und Schaltkreisen eines Geräts ablaufen. Abbildung 2.2 zeigt das Funktionsdiagramm des entwickelten Programms.

Abbildung 2.2 – Funktionsdiagramm des Programms

Beschreibung von Verfahren, Funktionen und Modulen

Moduldeklaration:

Jede Quelldatei muss eine Moduldeklaration enthalten. Das Wort „Einheit“ ist ein Schlüsselwort und muss daher in Kleinbuchstaben geschrieben werden. Der Modulname kann sowohl Groß- als auch Kleinbuchstaben enthalten und muss mit dem Namen übereinstimmen, den das Betriebssystem für diese Datei verwendet.

Standardmodule der Delphi-Sprache. Die Delphi-Umgebung umfasst eine Reihe hervorragender Module, deren Fähigkeiten selbst den anspruchsvollsten Programmierer zufrieden stellen. Alle Module können in zwei Gruppen unterteilt werden: Systemmodule und visuelle Komponentenmodule.

Zu den Systemmodulen gehören System, SysUtils, ShareMem und Math. Sie enthalten die am häufigsten verwendeten Datentypen in Programmen, Konstanten, Variablen, Prozeduren und Funktionen. Das Systemmodul ist das Herzstück der Delphi-Umgebung. Die darin enthaltenen Unterprogramme gewährleisten den Betrieb aller anderen Module des Systems. Das Systemmodul ist automatisch in jedem Programm enthalten und muss nicht in der use-Anweisung angegeben werden.

Visuelle Komponentenmodule (VCL – Visual Component Library) werden für die visuelle Entwicklung von voll ausgestatteten GUI-Anwendungen verwendet – Anwendungen mit einer grafischen Benutzeroberfläche (Graphical User Interface). Diese Module stellen zusammen eine objektorientierte Bibliothek auf hoher Ebene mit allen Arten von Benutzeroberflächenelementen dar: Schaltflächen, Beschriftungen, Menüs, Bedienfelder usw. Darüber hinaus enthalten die Module dieser Bibliothek einfache und effiziente Möglichkeiten, auf Datenbanken zuzugreifen. Diese Module werden automatisch verbunden, wenn Komponenten auf dem Formular platziert werden.

Beschreibung der Verfahren:

Dieser Vorgang schließt die Titelseite und die Seite und beendet das Programm.

procedure TForml.Button2Click(Sender: TObject);

Dieser Vorgang öffnet das Hauptmenü des Programms und entfernt die Titelseite vom Bildschirm.

procedure TForm2.Button1Click(Sender: TObject);

Dieser Vorgang öffnet ein Fenster mit einer Auswahl an Methoden zur Lösung des Transportproblems und entfernt das Menüfenster vom Bildschirm.

Dieser Vorgang öffnet ein Fenster mit Informationen über das entwickelte Programm und entfernt das Menüfenster vom Bildschirm.

Dieser Vorgang öffnet ein Fenster mit Hilfeinformationen zum Programm, was dem Benutzer die Arbeit erleichtert und das Menüfenster entfernt.

Dieses Verfahren öffnet ein Fenster über den Entwickler und entfernt das Menüfenster.

procedure TForm2.Button5Click(Sender: TObject);

Dieser Vorgang schließt das Menüfenster und beendet das Programm.

procedure TForm3.Button1Click(Sender: TObject);

Dieser Vorgang führt zum Hauptmenü und schließt das Fenster mit der Auswahl der Methode zur Lösung des Transportproblems:

procedure TForm3.Button3Click(Sender: TObject);

Dieses Verfahren schließt das Fenster mit Lösungen für das Transportproblem mit drei Methoden und zeigt ein Formular mit der Lösung des Problems mit der Methode der minimalen Kosten an:

Dieses Verfahren schließt das Fenster mit Lösungen für das Transportproblem mit drei Methoden und zeigt ein Formular mit einer Lösung für das Problem mit der Methode der doppelten Präferenz an:

procedure TForm2.Button2Click(Sender: TObject);

procedure TForm2.Button3Click(Sender: TObject);

procedure TForm2.Button4Click(Sender: TObject);

Mit diesen Verfahren kann der Benutzer vom Hauptmenü zu jedem Element im Programm wechseln: „Lösungsformular“, „Benutzerhandbuch“, „Entwicklerinformationen“, „Beenden“.

Vorgehensweise SCHRITT FÜR SCHRITT;

Dies ist ein Verfahren zur Durchführung schrittweiser Berechnungen im Programm. Sie können jede Phase des Ausfüllens der Tabelle verfolgen. Nach der Durchführung einer Berechnung unterbricht die Prozedur die Berechnung und wartet auf Befehle vom Benutzer.

procedure TForm4.Label2Click(Sender: TObject);

procedure TForm4.Label3Click(Sender: TObject);

procedure TForm4.Label4Click(Sender: TObject);

procedure TForm4.Label5Click(Sender: TObject);

Diese Verfahren laden das Textfeld „Memo“ mit dem Inhalt eines Textdokuments, abhängig vom ausgewählten Menüelement. Textdokumente enthalten Informationen zur Nutzung der Anwendung.

procedure TForm1.Button8Click(Sender: TObject);

Dieses Verfahren führt Berechnungen mithilfe von Formeln durch, ersetzt die eingegebenen Werte und schreibt das Ergebnis schließlich in eine Variable.

procedure TForm1.Button9Click(Sender: TObject);

Bei diesem Verfahren wird die Antwort in einem Textfeld angezeigt.

procedure TForm1.Button2Click(Sender: TObject);

Dieses Verfahren füllt die Eingabefelder entsprechend der Aufgabenstellung für das Kursprojekt mit Ausgangsdaten.

procedure TForm3.Button4Click(Sender: TObject);

procedure TForm4.Button1Click(Sender: TObject);

Diese Verfahren schließen das Fenster und zeigen ein Formular mit einer Menüelementauswahl an.

Verfahren Reinigung;

Dieses Verfahren löscht die Eingabe- und Ausgabefelder und befreit die Variablen von dem Wert, den sie enthalten.


Die Entwicklung eines Programmblockdiagramms (Architektur) ist aus folgenden Gründen einer der wichtigsten Schritte im Softwareentwicklungsprozess:

  • die falsche Wahl der Architektur birgt die Gefahr, dass das gesamte Projekt in Zukunft scheitert;

  • Diese Phase ist grundlegend für den gesamten Entwicklungsprozess.

  • Eine durchdachte Architektur ermöglicht eine einfache Anpassung des Softwareprodukts, wenn sich die Anforderungen daran ändern.
Unter Architektur versteht man eine Reihe von Programmkomponenten sowie Verbindungen und Methoden zur Organisation des Informationsaustauschs zwischen ihnen. Die erste Aufgabe, die bei der Entwicklung eines Strukturdiagramms eines Systems gelöst werden muss, ist die Identifizierung seiner Bestandteile.

Basierend auf der Analyse der Anforderungen an das System wird eine Menge aller Funktionen ermittelt, die das Programm unterstützen muss. Anschließend werden die erhaltenen Funktionen zu logisch miteinander verbundenen Gruppen zusammengefasst. Jede dieser Gruppen kann zu einer der Komponenten des Softwaresystems werden. Sie müssen damit rechnen, dass die erste Version des Komponentensatzes nicht vollständig sein wird. Während des Merkmalsanalyseprozesses und in den frühen Phasen des Architekturentwurfs können zusätzliche Merkmale identifiziert werden, die in das zu entwickelnde Programm einbezogen werden müssen. Diese Funktionen werden größtenteils zur Durchführung technologischer Prozesse erforderlich sein, um das System in einem intakten und betriebsbereiten Zustand zu halten. Es liegt nahe, davon auszugehen, dass diese Funktionsmerkmale dem Kunden des Softwaresystems und den Entwicklern in den ersten Phasen der Entwicklung noch nicht bekannt sind.

Zunächst muss die Programmarchitektur eine allgemeine Beschreibung des Systems enthalten. Ohne eine solche Beschreibung ist es ziemlich schwierig, aus vielen kleinen Details oder mindestens einem Dutzend einzelner Klassen ein zusammenhängendes Bild zu erstellen. Die Architektur sollte den Nachweis enthalten, dass während ihrer Entwicklung alternative Optionen in Betracht gezogen wurden, und die Wahl der endgültigen Systemorganisation begründen.

Die Architektur muss die Verantwortlichkeiten jeder Komponente klar definieren. Eine Komponente sollte einen Verantwortungsbereich haben und möglichst wenig über die Verantwortungsbereiche anderer Komponenten wissen. Durch die Minimierung der Informationsmenge, die Komponenten über andere Komponenten kennen, können Sie Anwendungsdesigninformationen problemlos auf einzelne Komponenten lokalisieren.

Die Architektur muss die Kommunikationsregeln zwischen Programmkomponenten klar definieren und beschreiben, welche anderen Komponenten eine bestimmte Komponente direkt nutzen kann, welche indirekt und welche sie überhaupt nicht nutzen sollte.

Die Benutzeroberfläche wird häufig während der Anforderungsphase entworfen. Ist dies nicht der Fall, sollte dies während der Architekturentwurfsphase festgestellt werden. Die Architektur sollte die Hauptelemente des Webseitenformats, der grafischen Oberfläche (GUI) usw. beschreiben. Die Benutzerfreundlichkeit der Schnittstelle kann letztendlich über die Popularität oder den Misserfolg eines Programms entscheiden.

Die Architektur des Programms ist modular, sodass die grafische Oberfläche geändert werden kann, ohne die Kernlogik des Programms zu beeinträchtigen.

Das Programm zur Bearbeitung von Fragebögen zur Studierendenbefragung lässt sich in zwei Teile mit unterschiedlichen Funktionen und Zugriffsebenen für Benutzer gliedern:


  • Studentenbefragungssystem;

  • System zur Verarbeitung von Umfrageergebnissen;

  • Steuersystem.
Alle Teile sind durch eine gemeinsame Datenbank zu einem einzigen Programm verknüpft.



Abbildung 2.1. - Systemstruktur


Das Umfragesystem beinhaltet folgende Funktionen:

  • Ausgabe einer Frage aus dem Fragebogen;

  • automatische Überprüfung der Art und Richtigkeit der eingegebenen Daten;

  • Speichern von Daten in einer Datenbank.
Das System zur Verarbeitung von Umfrageergebnissen ermöglicht Ihnen:

  • Umfrageberichte anzeigen oder ausdrucken;

  • Informationen zur Umfrage eines bestimmten Studenten anzeigen;

  • Vergleichen Sie die Ergebnisse aktueller und früherer Umfragen mit denselben Fragen.
Das Steuerungssystem ermöglicht:

  • die Durchführung der Umfrage kontrollieren;

  • Daten verwalten – hinzufügen, löschen und ändern;
Jedes der Systeme kann wiederum basierend auf der Umgebung, in der es ausgeführt wird, in zwei Subsysteme unterteilt werden:

  • Serverteil, geschrieben in der Programmiersprache PHP und ausgeführt auf dem Server;

  • der Client-Teil, der in der HTML-Auszeichnungssprache und der Programmiersprache JavaScript unter Verwendung der jQuery-Bibliothek geschrieben und im Browser des Benutzers ausgeführt wird.
MIT
Der Serverteil des Programms entspricht in seiner Struktur der MVC- (Model-View-Controller) oder Model-View-Controller-Architektur. MVC ist eine Softwarearchitektur, bei der das Datenmodell, die Benutzeroberfläche und die Steuerlogik der Anwendung in drei separate Komponenten unterteilt sind, sodass Änderungen an einer Komponente nur minimale Auswirkungen auf die anderen Komponenten haben.
Abbildung 2.2. – Model-View-Controller-Architektur
Mit diesem Ansatz können Sie die Daten, Darstellung und Verarbeitung von Benutzeraktionen in drei separate Komponenten aufteilen.

  • Modell(Modell) - ein Modul, das dafür verantwortlich ist, etwas basierend auf den vom Benutzer empfangenen Daten direkt zu berechnen. Das von diesem Modul erhaltene Ergebnis muss an die Steuerung übergeben werden und darf nichts enthalten, was mit der direkten Ausgabe zu tun hat (d. h. es muss im internen Format des Systems dargestellt werden). Das Hauptziel besteht darin, das Modell völlig unabhängig von den anderen Teilen zu machen und so gut wie nichts über deren Existenz zu wissen, was es ermöglichen würde, sowohl den Controller als auch die Ansicht des Modells zu ändern, ohne das Modell selbst zu berühren, und sogar die Funktion mehrerer Instanzen von zu ermöglichen Ansichten und Controller mit demselben Modell gleichzeitig. Daher darf ein Modell unter keinen Umständen Verweise auf Ansichts- oder Controller-Objekte enthalten.

  • Sicht- Informationsausgabemodul. Zu den Aufgaben der Ansicht gehört die Anzeige der vom Modell empfangenen Daten. Typischerweise hat die Ansicht freien Zugriff auf das Modell und kann Daten daraus übernehmen, es handelt sich hierbei jedoch um einen schreibgeschützten Zugriff; der Ansicht ist es untersagt, irgendetwas am Modell zu ändern oder auch nur Methoden aufzurufen, die zu Änderungen in seinem internen Zustand führen. Um mit einem Controller zu interagieren, implementiert eine Ansicht normalerweise eine dem Controller bekannte Schnittstelle, sodass Ansichten unabhängig geändert werden können und mehrere Ansichten pro Controller vorhanden sind.

  • Regler- Dateneingabe- und -ausgabesteuermodul. Zu den Aufgaben des Controllers gehört es, auf externe Ereignisse zu reagieren und das Modell und/oder die Ansicht entsprechend der darin eingebetteten Logik zu ändern. Ein Controller kann je nach Situation mit mehreren Ansichten arbeiten und mit ihnen über eine bestimmte (vorbekannte) Schnittstelle interagieren, die diese Ansichten implementieren. Eine wichtige Nuance: In der klassischen Version von MVC überträgt der Controller keine Daten vom Modell an die Ansicht.

    Der Controller empfängt Daten vom Benutzer und gibt sie an das Modell weiter. Darüber hinaus empfängt es Nachrichten vom Modell und übergibt diese an die Ansicht. Es ist wichtig zu beachten, dass sowohl die Ansicht als auch der Controller modellabhängig sind. Das Modell ist jedoch weder vom Controller noch vom Verhalten abhängig. Dies ist einer der wesentlichen Vorteile einer solchen Aufteilung. Es ermöglicht Ihnen, ein Modell unabhängig von der visuellen Darstellung zu erstellen und mehrere verschiedene Darstellungen für ein Modell zu erstellen.
Die Vorteile der MVC-Architektur gegenüber dem traditionellen Modell:

  • Systemtransparenz;

  • einziger Einstiegspunkt in das System;

  • Code-Wiederverwendung;;

  • schnelle Entwicklung;

  • Verfügbarkeit vorgefertigter Lösungen;

  • einfache Unterstützung;

  • einfach Änderungen vorzunehmen.
Somit bietet der Einsatz der MVC-Architektur konkrete Vorteile bei der Konzeption und Entwicklung eines Programms zur Bearbeitung von Umfragefragebögen für Studierende des Fachbereichs, was sich sowohl auf die Geschwindigkeit der Entwicklung selbst als auch auf die Qualität des Endergebnisses positiv auswirkt.

2.Entwicklung der Programmdatenbankstruktur

Die Organisation der Datenbankstruktur basiert auf folgenden Überlegungen:

  • Angemessenheit des beschriebenen Objekts – auf der Ebene eines konzeptionellen und logischen Modells;

  • Benutzerfreundlichkeit für die Buchhaltung und Datenanalyse – auf der Ebene des sogenannten physikalischen Modells.
Gemäß dem Datenpräsentationsmodell sind die wichtigsten hierarchischen, Netzwerk- und relationalen Modelle; dementsprechend verwenden sie für die Arbeit mit jeder der oben genannten Datenbanken ihr eigenes DBMS.

In diesem Fall ist das relationale Datenmodell am besten geeignet, da sich alle Informationen problemlos in Tabellenform darstellen lassen. Das relationale Datenmodell ist ein logisches Datenmodell, das den strukturellen Aspekt, den Integritätsaspekt und den Datenverarbeitungsaspekt relationaler Datenbanken beschreibt.

Struktureller Aspekt- Daten in einer Datenbank sind eine Reihe von Beziehungen.

Integritätsaspekt- Beziehungen erfüllen bestimmte Integritätsbedingungen.

Verarbeitungsaspekt- Bwerden unterstützt.

Ein wichtiger Aspekt des Datenbankdesigns ist die Normalisierung – der Prozess der Konvertierung einer Datenbank in eine Form, die Normalformen entspricht. Die Normalisierung trägt dazu bei, Ihre Datenbank vor logischen und strukturellen Problemen, sogenannten Datenanomalien, zu schützen. Wenn beispielsweise mehrere identische Datensätze in einer Tabelle vorhanden sind, besteht beim Aktualisieren der Tabelle die Gefahr einer Verletzung der Datenintegrität. Eine normalisierte Tabelle ist weniger anfällig für solche Probleme, weil Seine Struktur umfasst die Definition von Beziehungen zwischen Daten, wodurch Datensätze mit doppelten Informationen überflüssig werden.

Als DBMS wurde das freie Datenbankmanagementsystem MySQL gewählt. Die Flexibilität des MySQL-DBMS wird durch die Unterstützung einer großen Anzahl von Tabellentypen gewährleistet: Benutzer können zwischen MyISAM-Tabellen wählen, die die Volltextsuche unterstützen, und InnoDB-Tabellen, die Transaktionen auf der Ebene einzelner Datensätze unterstützen. Dank der offenen Architektur und der GPL-Lizenzierung (GNU General Public License – eine freie Softwarelizenz, deren Zweck darin besteht, dem Benutzer die Rechte zum Kopieren, Ändern und Verteilen von Programmen zu gewähren und sicherzustellen, dass Benutzer alle abgeleiteten Programme erhalten die oben genannten Rechte), erscheinen im MySQL-DBMS ständig neue Tabellentypen.

Ein wichtiger Vorteil des MySQL-DBMS besteht darin, dass es auf eine große Anzahl von Plattformen portiert wurde, beispielsweise AIX, FreeBSD, HP-UX, GNU/Linux, Mac OS X, NetBSD, OpenBSD, Solaris und Windows. Beachten Sie, dass MySQL AB nicht nur die DBMS-Quellcodes, sondern auch vorgefertigte ausführbare Module, die für bestimmte Betriebssysteme kompiliert und optimiert wurden, zum kostenlosen Download bereitstellt.

MySQL verfügt über eine An(API) für Sprachen wie Delphi, C, C++, Java, Perl, PHP, Python und Ruby, Bibliotheken für .NET-Plattformsprachen und bietet außerdem Unterstützung für ODBC über den ODBC-Treiber (Open DataBase Connectivity ist eine Programmschnittstelle für den Zugriff auf Datenbanken) MyODBC.

Als Haupttabellentyp wurde der Typ MyISAM gewählt. MyISAM-Tabellen sind ideal für den Einsatz in Verbindung mit Webanwendungen optimiert, bei denen Leseabfragen vorherrschen. Tabellen wie MyISAM zeigen sehr gute Leistungsergebnisse bei SELECT-Abfragen. Dies ist größtenteils auf die mangelnde Unterstützung von Transaktionen und Fremdschlüsseln zurückzuführen. Beim Ändern und Hinzufügen von Datensätzen wird jedoch die gesamte Tabelle kurzzeitig gesperrt, was bei hoher Auslastung zu erheblichen Verzögerungen führen kann. Bei einem Programm zur Analyse von Umfragefragebögen stellt dies jedoch kein gravierendes Problem dar, da eine hohe Belastung des Systems nicht vorgesehen ist.

Ein weiterer Vorteil von Tabellen wie MyISAM ist die Plattformunabhängigkeit. Tabellendateien können ohne Konvertierung zwischen Computern unterschiedlicher Architektur und unterschiedlicher Betriebssysteme verschoben werden.

MyISAM-Tabellen können feste, dynamische oder komprimierte Datensätze haben. Die Wahl zwischen festem und dynamischem Format wird durch die Spaltendefinitionen bestimmt.

Die Struktur der Datenbank ist in Abbildung 2.4 dargestellt.

R

Abbildung 2.3. – Datenbankstruktur


Beziehungen zwischen in der Datenbank organisierten Tabellen ermöglichen es Ihnen, kaskadierende Löschungen und Aktualisierungen von Daten durchzuführen. Durch den Einsatz von Linktabellen konnte die Datenredundanz auf ein Minimum reduziert werden.

Die Tabelle it_students enthält Daten über Studierende, die an der Umfrage teilgenommen haben.

Tabelle 2.1 – Datentabelle „it_students“.


Feld

Typ

Länge

Beschreibung

Ausweis

Numerisch

11

Index

Num

Numerisch

11

Schüler-ID-Nummer

Name

Symbolisch

100

Name

Zweitname

Symbolisch

100

Nachname

Nachname

Symbolisch

100

Nachname

Geburt

Datum

-

Geburtsdatum

Jahr_Postupl

Jahr

-

Jahr der Aufnahme

Adresse

Symbolisch

500

Adresse

phone_h

Symbolisch

15

Haustelefon

phone_m

Symbolisch

15

Handy

Post

Symbolisch

250

E-Mail-Adresse

icq

Numerisch

10

ICQ-Nummer

Die Tabelle it_answers_var enthält Optionen zum Beantworten von Umfragefragen.

Tabelle 2.2 – Datentabelle „it_answers_var“

Die Tabelle it_questions enthält Umfragefragen.

Tabelle 2.3 – Datentabelle „it_questions“.

Die Tabelle it_tests_cfg verknüpft Umfragefragen mit einem bestimmten Fragebogen.

Tabelle 2.4 – Datentabelle „it_tests_cfg“

Die Tabelle it_tests enthält Daten zu allen Fragebögen und den Daten der Umfragen.

Tabelle 2.5 – Datentabelle „it_tests“.

Die Tabelle it_text_answers enthält Daten zu manuell eingegebenen Schülerantworten.

Tabelle 2.6 – Datentabelle „it_text_answers“

Die Tabelle it_students_answers enthält Daten zu den Antworten der Schüler.

Tabelle 2.6 – Datentabelle „it_students_answers“

3.Entwicklung eines Datenbank-Informationsflussmodells

Da das Programm zur Analyse von Fragebögen zur Studierendenbefragung auf dem MVC-Prinzip basiert, können Informationsflüsse wie folgt dargestellt werden. Wenn eine Anfrage von einem Benutzer empfangen wird, der einen Browser an den Webserver sendet, qualifiziert der Controller anhand programmierter Algorithmen die empfangene Anfrage, modifiziert sie und überträgt sie an das Modell. Das Modell, das die Verbindung zwischen dem Controller und dem DBMS darstellt, interpretiert die Anfrage, führt den entsprechenden Aufruf an das MySQL-DBMS durch und gibt die Ergebnisse an den Controller zurück.

Bemerkenswert ist, dass dem Controller verborgen bleibt, mit welchem ​​Typ oder welcher Implementierung des DBMS er arbeitet; alle Aufrufe an die Datenbank erfolgen über das Modell, dessen Hauptaufgabe darin besteht, die Arbeit mit Daten zu abstrahieren. Anstelle einer Datenbank können Sie auch eine Text- oder XML-Datei verwenden; für den Controller spielt dies keine Rolle. Parallel dazu sendet der Controller eine Anfrage an die Ansichtskomponente, die die endgültige Vorlage erstellt und an den Controller zurücksendet. Es ist auch möglich, dass der Datenaustausch direkt zwischen dem Modell und der Ansicht erfolgt. Der Controller kombiniert die Auswahl aus der Datenbank und der Ansichtsvorlage und übergibt sie an den Browser des Benutzers.



Abbildung 2.4. - Schema der Informationsflüsse der MVC-Architektur

4.Entwicklung der algorithmischen Unterstützung

Die algorithmische Unterstützung aller Programmkomponenten weist erhebliche Unterschiede auf, da sie unterschiedliche Funktionalitäten tragen.

Wenn sich ein Student zum ersten Mal beim Umfragesystem anmeldet, wird eine neue Sitzungs-ID erstellt. Eine Sitzung oder Sitzung ermöglicht es dem Server, einen Benutzer anhand einer speziellen Nummer zu identifizieren, die eindeutig ist und zugewiesen wird, wenn der Benutzer mit dem Server interagiert. Darüber hinaus ermöglichen Ihnen Sitzungen, Variablen an diesen Benutzer zu binden und diese Variablen auf dem Server zu speichern. Mit anderen Worten: Sitzungen ermöglichen es Ihnen, Variablen für alle Programmkomponenten global zu machen. Somit kann das Umfragesystem eindeutig feststellen, von welchem ​​Benutzer, der mit dem Programm arbeitet, bestimmte Daten stammen.

D
Als nächstes beantwortet der Student eine Reihe von Umfragefragen und erst nach Abschluss der Umfrage werden alle Daten in der Datenbank gespeichert. Der Algorithmus zum Betrieb des Vermessungssystems ist in Abbildung 2.5 dargestellt.

Abbildung 2.5. – Algorithmus für den Betrieb des Umfragesystems

Einer der wichtigsten Sicherheitspunkte für eine Webanwendung ist die Überprüfung aller eingehenden Daten. Daher sollten Sie die vom Benutzer in Suchformularen, beim Ausfüllen von Registrierungsfeldern usw. eingegebenen Daten immer auf das Vorhandensein „gefährlicher“ Daten überprüfen. Dabei kann es sich um bösartigen JavaScript-Code, PHP- oder PERL-Befehle oder (am gefährlichsten) Befehle an den Server handeln.

Sie sollten immer bedenken, dass absolut jeder Benutzer eine Gefahr für eine ungeschützte Webanwendung darstellt. Daher lohnt es sich immer, die vom Benutzer kommenden Anfragen und Variablen zu überprüfen.


  • Analyse von POST- und GET-Variablen und superglobalen Arrays;

  • Trennung von Variablen;

  • Filtern von String-Variablen.
Es ist unbedingt erforderlich, eingehende Variablen gleich zu Beginn des Programms zu überprüfen, um zu verhindern, dass ungeprüfte, potenziell gefährliche Daten von Benutzern mit Funktionen und Abfragen an die Datenbank arbeiten. Somit befinden sich alle zum Schutz erforderlichen Funktionen an einem bestimmten Ort oder sogar in einer bestimmten Datei. Im Fall des Programms zur Verarbeitung von Fragebögen zur Studentenbefragung erfolgt die Datenfilterung auf der Ebene des CodeIgniter-Frameworks im automatischen Modus, da die Zeile $config["global_xss_filtering"] = TRUE.

Absolut jede Variable in einem Programm muss bereits im Entwurfsstadium einen eigenen Typ haben, sei es eine Zahl oder ein String. Dieses Problem ist besonders akut bei Programmiersprachen mit schwacher oder fehlender Typisierung, zu denen PHP und JavaScript gehören. Daher werden Variablen in den kritischsten Bereichen des Programms auf Typkonformität überprüft.

Besonders gefährlich sind Textvariablen, beispielsweise ein Feld zur Eingabe einer Antwort auf eine Umfragefrage. Sie müssen lediglich auf Schadcode überprüft werden. Um die Gefahr zu beseitigen, werden einige Elemente aus dem Text entfernt oder durch andere Symbole ersetzt. Der Algorithmus zur Verarbeitung eingehender Daten im CodeIgniter-Framework ist in Abbildung 2.6 dargestellt.

R
Abbildung 2.6. – Algorithmus zur Verarbeitung eingehender Daten im CodeIgniter-Framework

2.5 Entwicklung der Programmschnittstelle

Eines der wichtigsten Themen bei der Entwicklung eines Softwaresystems ist die Entwicklung einer Benutzeroberfläche. Jedes System, das bei seinem Betrieb technische Mittel einsetzt, gehört zur Klasse der „Mensch-Maschine“-Systeme. Es wäre richtig, folgende Anforderungen an die Schnittstelle von Prüfsystemen zu stellen:


  • Die Benutzeroberfläche sollte klar, einfach und leicht zu bedienen sein

  • Der Benutzer sollte nicht durch Aktionen abgelenkt werden, die nichts mit der ausgeführten Aufgabe zu tun haben.
Die Benutzeroberfläche ist in der HTML-Markup-Sprache unter Verwendung von JavaScript und der jQuery-Bibliothek erstellt, was den Aufbau einer interaktiven Benutzeroberfläche für das Programm ermöglichte.

ZU

Beispielsweise wurde ein Textfeld zur Eingabe eines Datums mittels jQuery in einen kompakten Kalender umgewandelt, der über die Funktion verfügt, die Richtigkeit des eingegebenen Datums automatisch zu überprüfen (siehe Abbildung 2.7).

Abbildung 2.7. – Kalenderschnittstelle zur Auswahl des Geburtsdatums
Die Benutzeroberfläche, die den an der Umfrage teilnehmenden Studierenden zur Verfügung steht, ist eher minimalistisch. Dadurch werden die Schüler nicht durch schöne Grafiken abgelenkt und können sich auf das Nachdenken über die Antwort auf die Frage konzentrieren. Schnittstelle mit einem der

Umfragen ist in Abbildung 2.8 dargestellt.

Abbildung 2.8. – Schnittstelle zur Beantwortung einer Umfragefrage


Wenn ein Schüler aus irgendeinem Grund keine der Antworten auf eine Frage auswählt, sondern versucht, mit der nächsten Frage fortzufahren, zeigt das Umfragesystem automatisch eine Fehlermeldung an und bietet an, die aktuelle Frage erneut zu beantworten (siehe Abbildung 2.9).

Abbildung 2.9. - Fehlermeldung bei der Dateneingabe



Das System zur Verarbeitung von Umfrageergebnissen kann die Ergebnisse in mehreren Modi anzeigen – Text-, Grafik- und Druckmodus. Die Oberfläche zur grafischen Darstellung der Umfrageergebnisse ist in Abbildung 2.10 dargestellt.

Abbildung 2.10. – Schnittstelle zur Anzeige von Umfrageergebnissen



Ein Browser, der als Client gegenüber dem Server fungiert und ihm eine Anfrage zur Bearbeitung einer Webseite sendet, kann eine Implementierung sogenannter Thin Clients sein. Der Browser ist in der Lage, Webseiten anzuzeigen und ist in der Regel Teil des Betriebssystems. Die Aktualisierungs- und Wartungsfunktionen liegen beim Betriebssystemanbieter. Die Anwendungslogik konzentriert sich auf den Server, und die Funktion des Browsers besteht hauptsächlich darin, über das Netzwerk vom Server heruntergeladene Informationen anzuzeigen und Benutzerdaten zurückzusenden. Ein Vorteil dieses Ansatzes besteht darin, dass Clients unabhängig vom spezifischen Betriebssystem des Benutzers sind und Webanwendungen somit plattformübergreifende Dienste sind.

Ein wesentlicher Vorteil beim Erstellen von Webanwendungen zur Unterstützung der Standardbrowserfunktionalität besteht darin, dass die Funktionalität unabhängig vom Betriebssystem des Clients ausgeführt werden muss. Anstatt verschiedene Versionen für Microsoft Windows, Mac OS X, GNU/Linux und andere Betriebssysteme zu schreiben, wird die Anwendung einmal erstellt und auf jeder Plattform bereitgestellt.

3. Technologischer Abschnitt

3.1 Programmentwicklungstechnologie

3.1.1 Webserver-Grundlagen

Funktionsweise eines Webservers: Es ist bekannt, dass Webserver Informationen in Form von Textdateien, auch Seiten genannt, speichern. Zusätzlich zum Text können solche Seiten Links zu anderen Seiten (die sich auf demselben oder einem anderen Server befinden), Links zu grafischen Bildern, Audio- und Videoinformationen, verschiedene Dateneingabeobjekte (Felder, Schaltflächen, Formulare usw.) usw. enthalten sowie andere auf dem Server ausgeführte Objekte und Programme. Tatsächlich stellen Seiten eine Art Verbindungsglied zwischen Objekten verschiedener Art dar. Sie werden mithilfe einer speziellen Hypertext-Auszeichnungssprache, der HyperText Markup Language, kurz HTML, erstellt. Um auf Informationen zuzugreifen, die sich auf Webservern befinden, verwenden Benutzer spezielle Client-Programme – Browser. Derzeit gibt es Dutzende verschiedener Browser, aber nur wenige davon sind derzeit die beliebtesten:


  • Microsoft Internet Explorer;

  • Oper;

  • Mozilla Firefox

  • Google Chrome.
Jede Webserverseite verfügt über eine eigene sogenannte universelle Ressourcenadresse – Universal Resource Locator (URL). Um auf eine bestimmte Seite zuzugreifen, muss der Benutzer seine URL im Browser angeben. In der Regel verfügt jeder Webserver über eine Hauptseite, die Links zu allen anderen Seiten dieses Servers enthält. Daher beginnt die Anzeige des Inhalts eines Webservers normalerweise mit seiner Hauptseite (Indexseite).

3.1.2 Passive und aktive Webserver

Es gibt passive und aktive Webserver. Wenn Serverseiten nur statische Text- und Multimediainformationen sowie Hypertext-Links zu anderen Seiten enthalten, wird der Server als passiv bezeichnet. Wenn sich die Serverseiten ähnlich wie die Fenster gewöhnlicher interaktiver Anwendungen verhalten und mit dem Benutzer in Dialog treten, handelt es sich um einen aktiven Server.


3.1.3 Objektorientierter Ansatz

Derzeit wird die Verwendung eines objektorientierten Ansatzes bei der Entwicklung von Webanwendungen immer beliebter. Und obwohl die Vorteile dieses Ansatzes nicht so offensichtlich sind wie beispielsweise bei Programmiersprachen wie C++ oder Java, wechseln immer mehr frei verteilte Bibliotheken und Programme, die in der Programmiersprache PHP geschrieben sind, zu einer objektorientierten Schnittstelle . Dadurch zwingen sie die Entwickler, die sie verwenden, dazu, auf die objektorientierten Fähigkeiten von PHP zurückzugreifen. Die Einführung der vollständigen Unterstützung des objektorientierten Modells in der fünften Version des PHP-Interpreters steigert das Interesse an dieser Methodik weiter.

Oft führt die Verwendung eines objektorientierten Ansatzes zum Platzieren und nicht zum Platzieren zum Erfolg eines Projekts. Das Programmieren für einen Neuling im objektorientierten Programmierstil fühlt sich oft an, als würde man durch ein Minenfeld navigieren – wenn man nicht weiß, wo sich die Minen befinden, ist es unmöglich, das Ende des Projekts zu erreichen. Die objektorientierte Programmierung an sich ist kein Allheilmittel – sie ist eine funktionierende Technologie, die Ihnen Folgendes ermöglicht:


  • Erhöhen Sie den Prozentsatz des wiederverwendeten Quellcodes.

  • Arbeiten Sie beim Programmieren mit Konzepten und Objekten der realen Welt (Student, Gruppe, Kurs usw.) und nicht mit einfachen Computerbegriffen (Datei, Zeile usw.), wodurch Sie größere Projekte mit weniger Fehlern erstellen können effizientere kurze zeit.
Die Entwicklung von Programmiertechnologien wird, wie Dijkstra feststellte, von der „Teile und herrsche“-These bestimmt. Jede erfolgreiche Technologie geht davon aus, dass je kürzer der Quellcode eines Programms ist, desto einfacher ist es zu erstellen, zu debuggen und zu warten, und ein einfaches Programm ist viel weniger fehleranfällig als ein komplexes.

Zu Beginn des Computerzeitalters war ein Programm ein einzelner Thread, der eine Reihe von Daten verarbeitete. Mit der Zeit nahmen die Komplexität der Programme und die an sie gestellten Anforderungen zu, und diese Art der Datenorganisation erwies sich als inakzeptabel. Es wurde ein struktureller Ansatz vorgeschlagen, bei dem das Datenarray von überall im Programm zugänglich gemacht wurde, der Hauptablauf des Programms jedoch in mehrere Prozeduren unterteilt war. Eine separate kleine Prozedur ist, selbst wenn sie gemeinsame Daten verwendet, viel einfacher zu entwickeln als eine große Menge Quellcode.

Jede Prozedur verfügt über eine lokale Variable, deren Lebensdauer durch die Dauer der Prozedur bestimmt wird. Einige Prozeduren können andere aufrufen, aber das Datenarray im Programm bleibt gemeinsam und für alle Prozeduren zugänglich. Dieser Ansatz wird in der prozeduralen Programmierung in PHP verwendet und ermöglicht die Erstellung großer Softwarekomplexe. Die Entwicklung, Fehlerbehebung und Unterstützung von Programmen, die mit großen Datenmengen arbeiten (z. B. einer Abteilungsdatenbank), bleiben jedoch immer noch komplex und erfordern erhebliche Fähigkeiten und Erfahrung.

Die Reaktion auf die zunehmende Komplexität war die Entstehung eines objektorientierten Programmieransatzes: Ein Programm ist in mehrere Datenarrays unterteilt, von denen jedes über eigene Prozeduren sowie Prozeduren verfügt, die mit anderen Datenarrays interagieren.

Dadurch wird eine komplexe Aufgabe in eine Reihe einfacherer Unteraufgaben zerlegt, und Entwickler erhalten eine flexiblere Möglichkeit, das Projekt zu verwalten – die Bearbeitung eines riesigen monolithischen Codeblocks ist viel schwieriger als die Bearbeitung einer Sammlung kleiner, lose verbundener Blöcke.

Unabhängig von der Verbindung zu einer Programmiersprache weist der objektorientierte Ansatz eine Reihe allgemeiner Prinzipien auf, nämlich:


  • die Fähigkeit, abstrakte Datentypen zu erstellen, die es ermöglicht, neben vordefinierten Datentypen (z. B. Ganzzahl, Zeichenfolge usw.) eigene Datentypen (Klassen) einzuführen und „Variablen“ solcher Datentypen (Objekte) zu deklarieren. Durch die Erstellung eigener Datentypen operiert der Programmierer nicht mit Maschinenbegriffen (Variable, Funktion), sondern mit realen Objekten und erreicht so eine neue Abstraktionsebene;

  • Kapselung, die die Benutzerinteraktion abstrakter Datentypen nur auf deren Schnittstelle beschränkt und die interne Implementierung des Objekts verbirgt, wodurch eine Beeinflussung seines internen Zustands verhindert wird. Das menschliche Gedächtnis ist begrenzt und kann nicht alle Details eines großen Projekts enthalten, während die Verwendung der Kapselung es Ihnen ermöglicht, ein Objekt zu entwerfen und zu verwenden, ohne sich um die interne Implementierung kümmern zu müssen und nur auf eine kleine Anzahl von Schnittstellenmethoden zurückzugreifen;

  • Vererbung, die es Ihnen ermöglicht, einen vorhandenen abstrakten Datentyp – eine Klasse – zu entwickeln, indem Sie darauf basierend eine neue Klasse erstellen. In diesem Fall erhält die neue Klasse automatisch die Fähigkeiten eines vorhandenen abstrakten Datentyps. Abstrakte Datentypen sind oft zu komplex, sodass sie auf ihre sequentielle Entwicklung zurückgreifen und eine Klassenhierarchie vom Allgemeinen zum Spezifischen aufbauen.

  • Polymorphismus, der die Konstruktion ganzer Ketten und verzweigter Bäume ermöglicht, die abstrakte Datentypen (Klassen) voneinander erben. In diesem Fall verfügt der gesamte Klassensatz über eine Reihe von Methoden mit demselben Namen: Jede der Klassen in diesem Baum verfügt garantiert über eine Methode mit demselben Namen. Dieses Prinzip hilft dabei, Datensätze unterschiedlicher Art automatisch zu verarbeiten.

3.1.4 Funktionen des CodeIgniter-Frameworks

Das verwendete CodeIgniter-Framework ist mit einem objektorientierten Ansatz geschrieben. Alle vom Programmierer eingeführten Klassen von Controllern, Ansichten und Modellen erben die ursprünglichen Klassen, die im Framework selbst eingeführt wurden. Dadurch ist es möglich, kleineren Quellcode zu schreiben, da alle notwendigen Grundfunktionen sofort verfügbar sind.

Zusätzlich zu den Controller-Klassen, Ansichten und Modellen, die dem Programmierer zur Verfügung stehen, verfügt das CodeIgniter-Framework auch über Plugins und Hilfsfunktionen, die dem Programmierer zur Verfügung stehen. Helfer sollen, wie der Name schon sagt, dabei helfen, eine kleinere Funktion auszuführen. Es gibt beispielsweise Helfer zum Erstellen von Webformularen, zum Herunterladen von Dateien oder zum Arbeiten mit Sitzungen. Im Gegensatz zu allen anderen Hauptelementen des Frameworks handelt es sich bei Helfern um Sätze elementarer Funktionen, die auch ohne Verwendung eines objektorientierten Ansatzes geschrieben werden. Jede Funktion führt eine kleine, streng begrenzte Aufgabe aus. Allerdings ist das Set ziemlich groß und eine solche „Kleinigkeit“ wird bei der Arbeit sehr nützlich sein.

Plugins sind fast dasselbe wie Hilfsprogramme, mit dem Hauptunterschied: Es handelt sich nicht um eine Reihe von Funktionen, sondern um eine einzige Funktion. Darüber hinaus können Sie darauf achten, dass Helfer eher Teil des Kerns des Systems sind, während Plugins etwas Externes sind, das von Drittprogrammierern entwickelt wurde. In Wirklichkeit sieht es so aus. Sogar die Plugins, die mit dem Hauptkit geliefert werden, wurden von CodeIgniter-Benutzern in der Community geschrieben.


3.1.5 Eclipse-IDE

Bei der Entwicklung eines Programms zur Bearbeitung von Umfragefragebögen für Studierende des Fachbereichs haben wir auch ein so wichtiges und nützliches Programmiertool wie eine integrierte Entwicklungsumgebung (IDE – Integrated Development Environment) verwendet, nämlich Eclipse. Eclipse ist ein kostenloses Framework zur Entwicklung modularer plattformübergreifender Anwendungen. Entwickelt und gepflegt von der Eclipse Foundation.

Die bekanntesten Anwendungen auf Basis der Eclipse-Plattform sind die verschiedenen „Eclipse-IDEs“ für die Softwareentwicklung in verschiedenen Sprachen (z. B. die beliebteste „Java-IDE“, die ursprünglich unterstützt wurde). Dabei kamen Erweiterungen für die Programmierung in den Programmiersprachen PHP (PDT-Modul) und JavaScript (JSEclipse-Modul) sowie Layout mittels der Auszeichnungssprache HTML zum Einsatz.

3.2 Programmtesttechnologie

Beim Programmtesten handelt es sich um den Prozess der Identifizierung von Fehlern in der Software. Derzeit gibt es viele Methoden zum Testen von Programmen, sie garantieren jedoch nicht, alle Mängel und Fehler zu erkennen und zu beseitigen oder die korrekte Funktion des analysierten Programms festzustellen. Daher operieren alle existierenden Testmethoden im Rahmen eines formalen Verifizierungsprozesses für die zu erforschende oder zu entwickelnde Software.

Dieser formale Verifizierungsprozess kann lediglich die Fehlerfreiheit der verwendeten Methode nachweisen, garantiert jedoch nicht deren völlige Abwesenheit.

Bei einem Test handelt es sich um Informationen, die aus speziell ausgewählten Anfangsdaten für das zu debuggende Programm und den entsprechenden Referenzergebnissen bestehen, die zur Überwachung des korrekten Betriebs des Programms verwendet werden.

Bei der Programmsteuerung geht es darum, Tests auszuwählen, deren Erhalt korrekter Ergebnisse den korrekten Betrieb des Programms für die übrigen Eingabedaten aus dem gesamten zulässigen Wertebereich gewährleisten würde.

Das System wurde mit mehreren Methoden getestet:


  • Belastbarkeitstest;

  • manuelles Debuggen und Programmablaufverfolgung mithilfe der XDebug-Erweiterung;

  • Unit-Test mit phpUnit.
Beim Testen von in PHP geschriebenen Programmen sollten Sie prüfen, ob die auf dem Bildschirm des Benutzers angezeigten Daten den Erwartungen entsprechen. Folgende Hauptprobleme sind möglich:

  • Auf dem Bildschirm wird nichts angezeigt oder es wird ein Systemfehler mit dem entsprechenden Code angezeigt (Autorisierungsfehler, Webserverausfall usw.);

  • Beim Arbeiten mit der Datenbank ist ein Fehler aufgetreten und es wird ein Fehlerbericht generiert.

  • Serverausfall aufgrund hoher Auslastung der Anwendung oder Datenbank;

  • Es ist ein Programmausführungsfehler aufgetreten, der dazu geführt hat, dass falsche Daten vorliegen oder ein Fehlerbericht angezeigt wird.

3.2.1 Lasttest des Programms

Einer der wichtigsten Tests ist der Lasttest, der es Ihnen ermöglicht, Engpässe im Quellcode oder bei Datenbankaufrufen zu finden.

Es gibt viele Tools, die die Aufgabe vereinfachen, die Anzahl der Anfragen zu erhöhen und mehrere Vorgänge auf dem Server aufzurufen. Der Lastgrenztest muss so konzipiert sein, dass er die erwartete Arbeitslast der Anwendung genau nachbildet.

Für den Belastungstest des Programms zur Bearbeitung von Umfragefragebögen für Studierende des Fachbereichs wurde das Programm Curl-Loader verwendet. Curl-Loader ist ein frei verteiltes Dienstprogramm zum Testen der Leistung von Webanwendungen, das in der Programmiersprache C geschrieben ist. Es ist in der Lage, Hunderte und sogar Tausende von Serveraufrufen über HTTP- und HTTPS-Protokolle zu simulieren und verwendet die libcurl-Bibliothek, mit der Sie Anwendungen einfach testen können bedürfen einer Genehmigung. Und die Unterstützung des HTTPS-Protokolls ermöglicht Ihnen die Verwendung des Curl-Loader-Dienstprogramms zum Testen der Auslastung von Webanwendungen, die über die verschlüsselten Transportmechanismen SSL (Secure Sockets Layer) und TLS (Transport Layer Security) arbeiten.

3.2.2 Debuggen mit integrierten PHP-Tools

Das Standardverhalten einer in PHP geschriebenen Anwendung, wenn ein Fehler im Code auftritt, hängt stark von den Konfigurationseinstellungen ab. In der Regel werden sie in der Konfigurationsdatei php.ini eingestellt:

  • Der Parameter display_errors, der auf „on“ oder „off“ gesetzt ist, gibt an, ob Fehlermeldungen dem Benutzer angezeigt oder ausgeblendet bleiben sollen.

  • Der Parameter log_errors, der auf „on“ oder „off“ gesetzt ist, veranlasst den PHP-Interpreter, Meldungen in die Ereignisprotokolldatei zu schreiben.

  • Die error_reporting-Direktive legt fest, in welchen Fällen eine Warnung generiert werden soll und in welchen Fällen diese ignoriert werden kann.
Wenn Sie ein Programm auf einem Testserver entwickeln und debuggen, müssen Sie den Parameter display_errors aktivieren und den Parameter log_errors deaktivieren. Dadurch kann der Programmierer schnellstmöglich auf das Auftreten einer Fehlersituation reagieren und die Anzahl der „Fensterwechsel“ minimieren.

In einer funktionierenden Version des Programms hingegen sollten Sie den Parameter display_errors deaktivieren, log_errors jedoch aktivieren. Dies erschwert einerseits das Leben von Angreifern, da diese keine Debugging-Informationen mehr einsehen können. Andererseits hilft es Ihnen, in einer kritischen Situation zu verstehen, was genau passiert ist, und den Fehler zu beheben, auch wenn er in der Testumgebung nicht reproduzierbar ist.

In beiden Fällen ist es praktisch, den Parameter error_reporting auf den detailliertesten Status – E_ALL – zu setzen, wodurch PHP gezwungen wird, die kleinsten Fehler im Code zu melden.

3.2.3 Debuggen eines Programms mit XDebug

Während sich mit der Programmiersprache PHP Befehlszeilenskripte für Aufgaben wie die Systemadministration und die traditionelle Datenverarbeitung erstellen lassen, zeigt sich die Leistungsfähigkeit der Sprache besonders bei Webanwendungen.

Aufgrund der kurzen Laufzeit von Webanwendungen und ihres mehrschichtigen Designs (Clientanwendung, Netzwerk, Webserver, Anwendungscode und zugrunde liegende Datenbank) kann es schwierig sein, Fehler im Quellcode zu erkennen. Selbst wenn wir davon ausgehen, dass alle Schichten bis auf den PHP-Code einwandfrei funktionieren, kann die Rückverfolgung auf einen Programmfehler schwierig sein, insbesondere wenn die Anwendung viele Klassen verwendet.

Der PHP-Echo-Ausdruck und Funktionen wie var_dump(), debug_zval_dump() und print_r() sind gängige und sehr beliebte Debugging-Tools, die bei der Lösung verschiedener kleinerer Probleme helfen können. Als Test- und Debugging-Tools sind diese Ausdrücke (und noch zuverlässigere Tools, zum Beispiel das PEAR Log-Paket) jedoch wenig hilfreich und nicht immer hilfreich.

Darüber hinaus handelt es sich bei dieser Art des Debuggens um einen Brute-Force-Ansatz. Wenn die erforderlichen Informationen fehlen, müssen Sie den Quellcode wiederholen, die vorherigen Schritte wiederholen und erneut mit der Fehlersuche beginnen. Eine wesentlich effektivere Strategie besteht darin, die Anwendung während der Ausführung zu testen. Sie können Abfrageparameter katalogisieren, den Stapel von Prozeduraufrufen anzeigen und den Wert jeder Variablen oder jedes Objekts ermitteln. Sie können die Ausführung der Anwendung vorübergehend unterbrechen und Benachrichtigungen über Änderungen des Werts einer Variablen erhalten

Diese „live“ oder interaktive Erkundung wird von einer speziellen Anwendung namens Debugger bereitgestellt. Ein Debugger wird ausgeführt oder an einen Prozess angeschlossen, um ihn zu manipulieren und seinen Speicher zu untersuchen. Bei interpretierten Sprachen kann der Debugger den Code auch direkt interpretieren. Ein typischer moderner Debugger kann Quellcode indizieren und anzeigen, komplexe Datenstrukturen in lesbarer Form anzeigen und gleichzeitig den Programmstatus, den Aufrufstapel, die Programmausgabe und die Werte aller Variablen anzeigen. Beispielsweise ist es üblich, dass ein Debugger die Eigenschaften und Methoden einer Klasse katalogisiert und anzeigt.

Anstatt verschiedene Debug-Ausgabefunktionen manuell hinzuzufügen, können Sie mit XDebug ein Trace-Protokoll erstellen. Das Trace-Protokoll ist eine Liste von Aufrufen von Funktionen und Methoden einer Klasse während der Ausführung des Programms. Sein Vorteil besteht darin, dass absolut jeder Anruf im Protokoll widergespiegelt wird.

Das Ablaufverfolgungsprotokoll variiert normalerweise von Lauf zu Lauf, da es von den eingehenden Daten abhängt, die von Anfrage zu Anfrage unterschiedlich sind.

Das Verfolgen des Protokolls hilft Ihnen zu verstehen, wie ein Programm ausgeführt wird. Allerdings ist es sehr schwierig, alle möglichen Verzweigungen zu visualisieren, es sei denn, das Programm ist sehr einfach. Aus diesem Grund ist das Testen großer Programme ziemlich schwierig: Es gibt zu viele verschiedene Entwicklungspfade und jeder einzelne muss getestet werden.

Das Anwendungs-Debugging-Tool XDebug bietet, wie der Name schon sagt, mehrere Funktionen zur Anzeige des Programmstatus und ist ein sehr wertvolles Recherchetool. Nach der Installation greift XDebug ein, um unendliche Rekursionen zu verhindern, fügt Stack- und Funktions-Trace-Informationen zu Fehlermeldungen hinzu, überwacht die Speicherzuweisung und führt mehrere andere Funktionen aus. Xdebug enthält außerdem eine Reihe von Funktionen, die dem Quellcode hinzugefügt werden können, um Laufzeitdiagnosedaten zu erhalten.

Die Ergebnisse des XDebug-Moduls können mit dem Programm KCachegrind angezeigt werden, mit dem Sie die im Quellcode ablaufenden Prozesse visualisieren können (siehe Abbildung 3.1).

Zusammenfassend lässt sich sagen, dass XDebug ein kleines, aber sehr nützliches Tool für den PHP-Entwickler ist und auf jedem PHP-Interpreter installiert werden sollte, der für die Entwicklung verwendet wird. Sie sollten XDebug jedoch nicht auf Produktionsservern verwenden, da dies die Leistung erheblich beeinträchtigt.
R

Abbildung 2.1. – KCachegrind-Programmschnittstelle

3.2.4 Unit-Tests mit phpUnit

Unit-Testing ist ein Prozess in der Programmierung, der es Ihnen ermöglicht, einzelne Module des Quellcodes eines Programms auf Korrektheit zu überprüfen. Die Idee besteht darin, Validierungstests für jede nicht triviale Funktion oder Methode zu schreiben. Dadurch können Sie schnell überprüfen, ob die nächste Codeänderung zum Auftreten von Fehlern in bereits geschriebenen und getesteten Programmteilen geführt hat, und auch das Erkennen und Beheben solcher Fehler erleichtern. Der Zweck des Unit-Tests besteht darin, einzelne Teile eines Programms zu isolieren und zu zeigen, dass diese Teile einzeln funktionieren.

Beim Debuggen und Testen des Programms zur Verarbeitung von Umfragefragebögen für Studierende des Fachbereichs wurde das phpUnit-System verwendet, das Unit-Tests von Webanwendungen ermöglicht, die in der Programmiersprache PHP geschrieben sind.

Um eine minimale Reihe von Tests mit phpUnit zu schreiben, müssen Sie:


  • die PHPUnit.php-Bibliothek einschließen;

  • Erstellen Sie eine Unterklasse der TestCase-Basisklasse.

  • Fügen Sie eine beliebige Anzahl von Testmethoden hinzu, deren Namen mit „test“ beginnen. Vorbekannte Parameter werden als Eingabe bereitgestellt und das Ergebnis wird mithilfe der Assert-Funktionsfamilie, die von der Testklasse von der TestCase-Basisklasse geerbt wurde, mit dem Referenzergebnis verglichen.

  • Erstellen Sie die Klasse PHPUnit_TestSuite und übergeben Sie ihr den Namen der Klasse mit einer Reihe von Tests als Parameter.

  • Führen Sie eine Reihe von Tests durch und überprüfen Sie das Ausführungsergebnis.

6 (?). Liste des Bildmaterials

6.1 Problemstellung

6.2 Programmblockdiagramm


3. STRUKTURDIAGRAMM DES PROGRAMMS

Die Hauptfunktionen, die in unserem Programm implementiert werden müssen, ergeben sich aus der Formulierung und Analyse des Problems:

1) Benutzerdaten in Tabellenform anzeigen und damit arbeiten.

2) Objekttypen hinzufügen und löschen.

3)Grafische Darstellung des Plans mit der Möglichkeit zur Skalierung.

4) Mit Dateien arbeiten und Ergebnisse drucken.

5) Komfortable Benutzeroberfläche.

Nachfolgend finden Sie ein Funktionsblockdiagramm des Programms, dargestellt in Form von Hauptmodulen und Verbindungen zwischen ihnen. Es stellt die Umsetzung der oben genannten Anforderungen im Programm klar dar.

Reis. 3.1. Funktionsstruktur des Programms.

Der Hauptteil des Programms ist das Steuerungs- und Schnittstellengenerierungsmodul. Es stellt das Hauptformular dar, auf dem sich Steuerelemente befinden, die die Ausführung anderer Funktionen ermöglichen und auch die Benutzeroberfläche bilden.


4. GRUNDLEGENDE ALGORITHMEN

Der wichtigste ist der Algorithmus zum Erstellen eines Bildes basierend auf Daten aus der Haupttabelle, implementiert in Form der plandraw()-Methode.

Nachfolgend finden Sie das Blockdiagramm und die Beschreibung.

4.1 Beschreibung des Algorithmus

Wenn die Registerkarte mit unserem Planbild nicht aktiviert ist, aktivieren wir sie.

Wir erstellen eine Entfernungstabelle und bereinigen diese von früheren Einträgen.

Wir legen die Hintergrundparameter (Farbe) fest und zeichnen es. Anschließend legen wir die Stiftparameter (Linienstärke und -stil) fest, die die Anzeige der Routenlinien in der Zeichnung bestimmen. Zu Beginn ist die Linienstärke gleich eins – zum Zeichnen eines Koordinatengitters.

Mithilfe der Tabelleneigenschaft RecordCount ermitteln wir die Anzahl der Zeilen in der Haupttabelle.

Wir setzen den aktuellen Datensatzzeiger auf den ersten und organisieren einen Zyklus zum Durchgehen aller Tabellendatensätze, in dem wir die Anzahl der Routen zählen.

Ganz am Anfang des Zyklus bereiten wir die Anzeige des Maßstabs vor – wir weisen der Maßstabsvariablen einen Vergrößerungsfaktor (in ganzen Einheiten) zu und bestimmen für beide Bildlaufleisten den Maximalwert, der vom Vergrößerungsgrad und dem abhängt Größe des Bildes.

Wenn die Routennummer Null ist, dann ist die Bedingung zum Zeichnen eines Koordinatengitters – Meridiane und Parallelen – erfüllt. Zuerst wird ein Zyklus zum Zeichnen der Meridiane durchgeführt – wir gehen in Schritten von 0 bis 360 Grad, je nach Vergrößerungsgrad (15, 6, 3 oder 1 Grad), und in der Nähe jedes Meridians wird der entsprechende Längengrad (östlich) signiert Längengrad – mit einem „+“-Zeichen), westlicher – mit einem „-“-Zeichen). Der Nullmeridian ist schwarz dargestellt. Ähnliche Aktionen werden im Zyklus des Parallelziehens ausgeführt, der einzige Unterschied besteht darin, dass der Zyklus von 0 bis 180 Grad läuft. Das „+“-Zeichen gibt den nördlichen Breitengrad an, das „-“-Zeichen den südlichen Breitengrad.

Ändern Sie die Linienstärke auf 2, um Routenlinien anzuzeigen.

Wir erstellen drei Arrays, in die wir die Indizes der aktuellen Routendatensätze und Koordinaten eingeben. Als nächstes organisieren wir eine Schleife, in der wir die Tabelleneinträge durchgehen und diese Arrays für die aktuelle Route füllen. Darüber hinaus werden bereits skalierte Werte in die Koordinatenfelder eingetragen. Im gleichen Zyklus zählen wir die Anzahl der Routenpunkte.

In der nächsten Schleife sortieren wir den Inhalt des Index-Arrays, um dann die Wegpunkte in der Reihenfolge zeichnen zu können, in der sie in der Tabelle erscheinen.

Stellen Sie die Farbe der Linie abhängig von der Routennummer ein. Und wir organisieren eine Schleife, die Linien zieht.

Im Strichzeichnungszyklus machen wir Folgendes: Unter Berücksichtigung der Positionen der Bildlaufleisten wird die Position des Fensters im Verhältnis zur Karte berechnet und die Koordinaten des Punktes im Fenster werden im Verhältnis zu dieser Position berechnet. Wenn dies unser erster Durchgang ist, bewegen wir den Cursor einfach auf den Punkt mit den berechneten Koordinaten; andernfalls zeichnen wir eine Linie vom vorherigen Punkt zu diesem Punkt, wenn das Flag zum Zeichnen von Linien aktiviert ist. Wenn das Kontrollkästchen deaktiviert ist, werden nur Punkte auf der Karte platziert.

Dann wird die Entfernung zwischen Punkten auf dem Globus berechnet, deren Projektionen wir gerade auf unserer Karte dargestellt haben. Entfernungen werden in Kilometern berechnet, der Erdradius wird mit 6371 km angenommen. Der Abstand wird berechnet, wenn i ungleich 0 ist und dies nicht der erste Durchlauf durch den Zyklus ist. Diese Bedingung ist notwendig, da wir die Koordinaten des vorherigen Punkts verwenden, um die Entfernung zum aktuellen Punkt zu ermitteln.

Da die Erdoberfläche kugelförmig ist, müssen wir die Länge des Bogens berechnen. Das Hauptproblem hierbei besteht darin, den Winkel zu finden, in dem der Bogen ruht.

Es werden drei Fälle betrachtet:

1) Wenn die Punkte auf demselben Längengrad liegen, ist der Winkel leicht zu bestimmen – er entspricht der Differenz zwischen dem größeren und dem kleineren Breitengrad.

2) Wenn sich die Punkte auf demselben Breitengrad befinden, ist die Bestimmung ebenfalls nicht schwierig – sie entspricht der Differenz zwischen dem größeren und dem kleineren Längengradwert, multipliziert mit dem Korrekturwert cos(f), wobei f der aktuelle Breitengrad ist.

3) Wenn sich die Punkte auf unterschiedlichen Breiten- und Längengraden befinden, ist dieser Fall der Winkelbestimmung komplexer. Schauen wir es uns im Detail an.

Zuerst ermitteln wir den Längenunterschied der Punkte, als ob sie auf dem gleichen Breitengrad wären, multiplizieren ihn mit dem Korrekturwert cos(f) und berechnen den linearen Abstand zwischen ihnen mithilfe des Kosinussatzes (die anderen beiden Seiten des Dreiecks sind). die Radien der Erde). Auf die gleiche Weise berechnen wir den Abstand zwischen Punkten, als ob sie auf demselben Längengrad wären. Wir bezeichnen diese Abstände als l1 und l2.

Jetzt haben wir ein rechtwinkliges Dreieck mit den Schenkeln l1, l2, dessen Hypotenuse den Abstand l3 hat. Wir berechnen es mit dem Satz des Pythagoras. Unser Ziel ist es, den Winkel a zu finden. Mit dem Kosinussatz ermitteln wir den Kosinus dieses Winkels. Nachdem wir daraus den Arkuskosinus berechnet haben, erhalten wir den Winkel! Nachfolgend finden Sie eine erläuternde Zeichnung.


Reis. 4.1. Erläuterung der Entfernungsberechnungen auf verschiedenen Breiten- und Längengraden.

Nachdem wir den Winkel ermittelt haben, berechnen wir die Länge des Bogens und tragen die resultierende Entfernung zusammen mit der Nummer der aktuellen Route in die Entfernungstabelle ein.

Hinweis: Da die Funktionen Kosinus und Arkuskosinus mit im Bogenmaß angegebenen Winkeln arbeiten, rechnet das Programm Bogenmaß in Grad um und umgekehrt. All diese Berechnungen führen zu einer Anhäufung von Fehlern.

Alle genannten Formeln sind im Anhang E aufgeführt.

Nachdem wir die Entfernung berechnet haben, zeigen wir sie auf dem Plan neben dem aktuellen Punkt an, wenn die entsprechende Flagge aktiviert ist. Darüber hinaus zeigt die Abbildung aufgrund der Bedingung zur Schätzung der Streckenlänge nicht die Länge eines Abschnitts, sondern die Summe der Längen der Abschnitte vor diesem Punkt. Die Längen der einzelnen Segmente kann der Benutzer in der Distanztabelle einsehen.

Die Karte zeigt auch den Objekttyp für einen bestimmten Punkt an, wenn das Kontrollkästchen „Objekttyp anzeigen“ aktiviert ist.

Wenn das Kontrollkästchen „Distanztabelle nicht anzeigen“ deaktiviert ist, machen Sie es sichtbar.

Nachdem alle Routen gezeichnet wurden, geben wir den für die Index- und Koordinatenarrays zugewiesenen Speicher frei.


4.2 Algorithmus-Flussdiagramm

Reis. 4.2. Flussdiagramm des Planzeichnungsalgorithmus.


5. SOFTWARE-IMPLEMENTIERUNG 5.1 Auswahl einer Programmentwicklungsumgebung

Wie bereits in der „Problemstellung“ erwähnt, wurde für die Erstellung dieses Programms die Entwicklungsumgebung Borland C++Builder 5 ausgewählt. Diese Entscheidung ist auf die Tatsache zurückzuführen, dass darin der Prozess der Erstellung einer Schnittstelle selbst für einen Programmierer nicht schwierig ist ist Builder zum ersten Mal begegnet und sie funktionieren gut mit Datenbanken und Grafiken, was genau das ist, was wir für die Entwicklung unseres Programms benötigen.

Der Nachteil ist meiner Meinung nach der große ausführbare Code des Programms. Damit es auf einem Computer funktioniert, auf dem Builder nicht installiert ist, müssen alle darin verwendeten Bibliotheken einbezogen werden, weshalb die Größe des Programms zu groß ist Programm wird um ein Vielfaches größer.

Darüber hinaus ist das Gute am Builder, dass Komponenten über viele Eigenschaften verfügen, die nicht nur während der Konstruktion, sondern auch während der Programmausführung geändert werden können, was die Arbeit mit ihnen flexibler macht.

5.2 Arbeiten mit Tabellen

Als Datenbanktreiber nutzen wir Paradox. Dieser Datenbanktyp wurde zunächst ausgewählt, weil der Builder über integrierte Tools für die Arbeit mit Paradox-Tabellen verfügt, wie z. B. die Borland Database Engine, und außerdem über das Database Desktop-Programm verfügt. Zweitens besteht der Vorteil von Paradox darin, dass der Datenbankname als Pfad zum Verzeichnis angegeben werden kann, in dem sich die Tabellendatei befindet, und alle Tabellen in separaten Dateien gespeichert werden. Drittens nehmen sie wenig Platz ein und sind die einfachsten lokalen Tische. Viertens ermöglichen Ihnen Paradox-Tabellen die Erstellung von Schlüsselfeldern.

Um die Arbeit mit der Tabelle zu gewährleisten, haben wir folgende Komponenten auf dem Formular installiert:

Ein DBGrid, mit dem wir Daten in eine Tabelle einfügen, löschen oder bearbeiten oder sie einfach anzeigen können.

Eine DBComboBox-Liste, mit der wir Daten aus der Objekttabelle in den aktuellen Datensatz der Haupttabelle einfügen können. Bevor diese Liste verwendet werden kann, muss sie mit Werten aus der Objekttabelle gefüllt werden. Dazu gehen wir beim Programmstart alle Datensätze durch und tragen deren Inhalt in das Feld „Items“ dieser Liste ein.

Navigator DBNavigator – damit können Sie Datensätze in der Tabelle löschen, hinzufügen, bearbeiten und auch durch sie navigieren. Wir verbinden es mit dem Raster, in dem unsere Tabelle angezeigt wird.

Alle diese Komponenten sind über die DataSourse mit der Tabelle verbunden, in deren Eigenschaften wir ihren Namen angeben. Darüber hinaus wird auch die Tabelle selbst als Komponente Table dargestellt, bei der drei Eigenschaften größtes Augenmerk gelegt werden sollte:

1)Aktiv – zeigt an, ob die Tabelle aktiv ist. Wenn Sie versuchen, darauf zuzugreifen, wenn diese Eigenschaft deaktiviert ist, generiert das Programm die Fehlermeldung „Dieser Vorgang kann für den geschlossenen Datensatz nicht ausgeführt werden“. Während des Tests wurden alle möglichen Situationen, die zu diesem Fehler führen könnten, verfolgt und behandelt.

2) Datenbankname – der Name der Datenbank; als Pfad wird der Pfad zu dem Verzeichnis verwendet, aus dem die Tabelle geöffnet oder erstellt wurde.

3) TableName – der Name der Tabelle – eine Datei mit der Erweiterung .db, in der die Tabelle gespeichert ist.

Alle diese Eigenschaften ändern sich während der Programmausführung.

Wir benötigen die Table-Komponente, um die Spezifikation loszuwerden. Unter dem Deckmantel einer Tabelle können wir jede bestimmte Tabelle öffnen und nur die Eigenschaften der Tabelle ändern, ohne andere Komponenten zu beeinflussen. Wenn wir beispielsweise eine Tabelle öffnen, schließen und deaktivieren wir die vorherige, während der Datenbankname und der Tabellenname in den Eigenschaften der Tabellenkomponente gelöscht werden, und wir öffnen und aktivieren eine neue, indem wir neue Verzeichnis- und Dateinamen in DatabaseName schreiben und TableName beim Öffnen. (Siehe die Methoden TBOpenFileClick und TBCloseFileClick in Anhang A).

Die DataSourse- und Table-Komponenten befinden sich im Formular, sind jedoch nur sichtbar, wenn Sie mit dem Programm in Builder arbeiten.

5.3 Arbeiten mit Grafiken

Um den Plan zu zeichnen, verwenden wir die Bildkomponente. Dieses Objekt hat zwei wichtige Eigenschaften:

1)Bild – ist ein Objekt der TPicture-Klasse, die ein Container für Grafiken jeglicher Art ist. Diese. Diese Komponente kann Bitmap-Grafiken, Symbole oder andere benutzerdefinierte Grafiken speichern. Auf dem Bild befindet sich unsere Zeichnung. Mit seiner Hilfe speichern wir die resultierende Zeichnung in einer Datei. (Siehe Anhang A, TBSaveFileClick-Methode). Bitte beachten Sie auch, dass die Bild- und Bildgrößen möglicherweise nicht identisch sind. Auf dieses Problem wird weiter unten noch näher eingegangen.

2) Leinwand – Leinwand. Der gesamte Zeichenvorgang wird auf der Leinwand der Bildkomponente ausgeführt. Mit Canvas können Sie die Parameter von Stift, Pinsel und Schriftart festlegen, Objekte wie Linien, Rechtecke und Ellipsen zeichnen und auch Text anzeigen.

In unserem Programm verwenden wir das Zeichnen von Linien mithilfe der Konturmethoden „MoveTo“ und „LineTo“, das Zeichnen von Punkten mithilfe von „Ellipse“ und die Textausgabe mithilfe der Methode „TextOut“. (Siehe Anhang A, Planzeichnung).

Diese. Canvas ermöglicht es uns, mit Windows-GDI-Funktionen zu arbeiten, ohne direkt darauf zuzugreifen, was die Arbeit mit Grafiken erheblich erleichtert.


5.4 Schnittstellenentwicklung

Besonderes Augenmerk sollte auch auf die Entwicklung der Benutzeroberfläche gelegt werden, da diese benutzerfreundlich gestaltet werden muss. Die Builder-Tools erleichtern die Implementierung der Schnittstelle in Windows-Standards.

Die Hauptelemente der Standard-Windows-Programmoberfläche:

1) Menüs – bieten Benutzern eine einfache Möglichkeit, logisch gruppierte Befehle auszuführen.

Das Hauptmenü wird mit der MainMenu-Komponente erstellt und ist beim Erstellen eines Programms sehr praktisch, um es zu bearbeiten, da Sie es nicht ausführen müssen, um es zu überprüfen – der gesamte Inhalt wird bereits im Formular angezeigt.

2) Symbolleiste – enthält Werkzeugschaltflächen, die den Elementen im Menü des Programms entsprechen und dem Benutzer einen direkteren Zugriff auf seine Befehle ermöglichen.

Die Symbolleiste wird mithilfe der ToolBar-Komponente implementiert, mit der Sie schnell Schaltflächen hinzufügen und platzieren können. Alle Werkzeugschaltflächen in der Symbolleiste haben die gleiche Breite und Höhe.

Für jede Schaltfläche können Sie ein Symbol festlegen, das die von ihr implementierte Aktion anzeigt, indem Sie die Symbolnummer aus den in der ImageList-Komponente gespeicherten Bildern auswählen. Dies ist praktisch, da Sie das Symbol problemlos ändern können, ohne jedes Mal ein Symbol aus einer Datei laden zu müssen.

Entsprechend dem Windows-Standard habe ich auf dem Panel Schaltflächen erstellt, die den Menüpunkten „Neu“, „Öffnen“, „Speichern“, „Drucken“ entsprechen.

3) Schaltflächen – mit ihrer Hilfe startet der Benutzer die Ausführung der dieser Schaltfläche zugewiesenen Aktion.

Normalerweise werden Schaltflächen gemäß dem Windows-Schnittstellenstandard fast nie verwendet, um das Programmfenster nicht zu überladen. Stattdessen werden Symbolleisten und Menüs verwendet.

Da unser Programm aber nicht sehr viele Aktionen ausführt, können wir auch Schaltflächen verwenden. Dies ist insofern praktisch, als sie sich im Gegensatz zu Menüs neben dem Element befinden, für das die von ihnen aufgerufene Aktion ausgeführt wird (z. B. befinden sich Schaltflächen zum Hinzufügen und Löschen von Objekten neben der Objektliste und Zoomschaltflächen daneben zum Bild), was für den Benutzer natürlich praktisch ist.

Darüber hinaus können Sie sie mit Unterschriften versehen, die ihren Zweck erläutern, was ebenfalls praktisch ist.

Eine Schaltfläche wird erstellt, indem eine Schaltflächenkomponente in einem Formular platziert wird. Bei der Entwicklung eines Programms wird seine Caption-Eigenschaft verwendet – die Beschriftung auf der Schaltfläche, und zur Laufzeit wird die Enabled-Eigenschaft verwendet, um die Schaltfläche inaktiv zu machen oder im Gegenteil zu aktivieren. (Siehe Anhang A, HideButtons() und ShowButtons()). Wenn wir beispielsweise eine Tabelle öffnen, aktivieren wir die Schaltflächen zum Zeichnen eines Plans, und wenn wir sie schließen, deaktivieren wir sie.

4) Dropdown-Listen – werden verwendet, um dem Benutzer die Auswahl eines Elements aus einer Liste zu ermöglichen. Dies ist wesentlich komfortabler als die manuelle Eingabe.

In diesem Programm wird ein Kombinationsfeld verwendet, um einen Objekttyp in die Tabelle einzugeben (DBComboBox, oben erläutert) und um einen Objekttyp aus der Objekttabelle zu entfernen (ComboBox).

Der Unterschied zwischen DBComboBox und ComboBox besteht darin, dass die erste einem Tabellenfeld zugeordnet ist und die zweite eine einfache Liste ist. Durch die Verwendung einer einfachen ComboBox-Liste können Sie die Probleme der Interaktion mit der Tabelle und der DBComboBox lösen, die beim Löschen eines Objekts aus der Tabelle auftreten.

5) Bildlaufleisten – implementiert mit der ScrollBox-Komponente; in unserem Fall sind sie notwendig, um das Planbild beim Vergrößern zu scrollen. Das Programm ändert den Max-Parameter, der je nach Maßstab den maximalen Scrollbetrag bestimmt.

6) Kontrollkästchen (Schalter) – bestimmen, ob die von ihnen dargestellte Option aktiviert oder deaktiviert ist.

Im Builder ist dies die CheckBox-Komponente.

Im Programm bestimmen Kontrollkästchen, ob die folgenden Funktionen aktiviert oder deaktiviert sind:

Routenlinien zeichnen;

Anzeige der Entfernung im Plan;

Anzeige des Objekttyps auf dem Plan;

Distanztabelle anzeigen.

Die Kontrollkästchen befinden sich normalerweise im Einstellungsmenü. Aufgrund der Einfachheit unseres Programms werden sie jedoch auf dem Panel neben dem Zeichenfeld angezeigt, was für den Benutzer sehr praktisch ist.

7) Registerkarten – in diesem Programm befinden sich die Tabelle und die Planzeichnung auf verschiedenen Registerkarten. Ich glaube, dass dies für den Benutzer komfortabler ist, da das gesamte Programm in einem Fenster enthalten ist und gleichzeitig sowohl der Tabellenbereich als auch der Zeichenbereich nicht nachteilig voneinander angeordnet sind.

Es gibt zwei Arten von Registerkarten im Builder: TabControl und PageControl.

Das Programm verwendet PageControl, da diese Komponente im Gegensatz zur ersten Komponente heterogene Steuerelemente auf Registerkarten enthalten kann. In TabControl sind alle Seiten gleich.

8) Dialoge sind ein sehr praktisches Werkzeug, das dabei hilft, Dialoge mit dem Benutzer wie Speichern, Öffnen einer Datei, Drucken und Auswählen einer in diesem Programm verwendeten Farbe zu implementieren.

Alle notwendigen Dialoge werden auf dem Formular platziert, bleiben aber für den Benutzer unsichtbar. Sie werden vom Programm aufgerufen und implementieren die Standard-Explorer-Schnittstelle.

Über die Dialoge OpenDialog und SaveDialog erhält das Programm den Namen der Datei und des Verzeichnisses, die der Benutzer auswählt. Über den PrintDialog werden Druckeinstellungen aufgerufen. Und ColorDialog hilft Ihnen bei der Auswahl einer Farbe (wird verwendet, um die Hintergrundfarbe des Bildes auszuwählen).

Der Zweck jeder für den Benutzer sichtbaren Schnittstellenkomponente wird im Benutzerhandbuch beschrieben.

Es ist erwähnenswert, dass jedes Schnittstellenobjekt über eine Eigenschaft namens Align verfügt. Damit können Sie ein Steuerelement rechts, links, oben oder unten an einem Formular und Panel ausrichten und das Steuerelement bleibt dort, auch wenn die Größe des Formulars geändert wird. Beispielsweise wird das Bedienfeld mit den Schaltflächen neben dem Bild nach rechts ausgerichtet, die Abstandstabelle wird nach links ausgerichtet und das Bildfeld wird nach alClient ausgerichtet, das den gesamten freien Platz zwischen der Tabelle und dem Bedienfeld einnimmt . Wenn Sie das Formular dehnen, werden auch diese Steuerelemente gedehnt, bleiben aber an Ort und Stelle.

Die Verwendung der Eigenschaft „Ausrichten“ ist praktisch, da Sie die Komponenten in der Entwurfsphase nach Bedarf anordnen können und ihre Größe dann nicht jedes Mal manuell festlegen müssen, wenn sich die Form ändert.

5.5 Einige Merkmale der Algorithmen

Zeichenalgorithmus

Da es bereits ausführlich beschrieben wurde, möchte ich nur eine Anmerkung zu seiner Entwicklung hinzufügen: Es zeichnet eine Karte in einer konformen Projektion. Diese wahren die Winkelgleichheit zwischen den Richtungen auf der Karte und in der Natur. Gleichzeitig werden die Dimensionen der Territorien verzerrt.

Diese Art der Projektion wurde gewählt, weil es am einfachsten ist, dafür ein Koordinatengitter zu zeichnen, da es aus geraden Linien besteht. (Weitere Informationen zu Kartenprojektionen und Gitterkoordinaten finden Sie in Anhang E.)

Entfernungen werden in realen Größen berechnet.

Algorithmus zur Entfernungsberechnung.

Es wird auch ausführlich in der „Beschreibung des Algorithmus“ beschrieben. Es ist Teil des Zeichenalgorithmus.

Es wurde vom Autor des Programms abgeleitet, da seine Analoga nirgendwo gefunden wurden. Seine Besonderheit besteht darin, dass die Krümmung der Erdoberfläche berücksichtigt und die Länge des Bogens berechnet werden muss. Dies ist besonders schwierig, wenn die Punkte auf dem gleichen Breiten- und Längengrad liegen.

Als Form der Erdoberfläche wird eine Kugel angenommen. Dies kann zu Fehlern führen, da die Form der Erde eigentlich ein Ellipsoid ist, vereinfacht aber die Berechnungen erheblich. Der durchschnittliche Erdradius wird mit 6371 km angenommen. Dies ergibt einen Fehler von etwa 0,3 %.

Es ist auch zu beachten, dass zur Berechnung der Entfernung, insbesondere im komplexesten Fall, mehrere aufeinanderfolgende Berechnungen verwendet werden, wodurch sich der Fehler akkumuliert. Die Größe des Fehlers wird auch durch die Umrechnung des Gradmaßes eines Winkels in Bogenmaß und umgekehrt beeinflusst. Aber mit der modernen Genauigkeit von Computerberechnungen wird dieser Fehler gering sein, und außerdem gab die Aufgabe nicht an, dass die Routenschätzung genau sein sollte.

Eine Tabelle erstellen

Hier muss gesagt werden, dass ich in keinem Buch, das ich habe, einen Algorithmus zum programmgesteuerten Erstellen einer Tabelle gefunden habe. In der gesamten Literatur wurde von der Erstellung von Tabellen in DatabaseDesktop gesprochen, was für den Benutzer unpraktisch wäre, wenn er ein noch größeres Programm installieren müsste, nur um das Problem der Erstellung neuer Tabellen zu lösen.

Dennoch wurde dieser Algorithmus in der Builder-Hilfe gefunden, obwohl er dort Fehler enthielt.

Das Programm präsentiert auch ein funktionierendes Beispiel dafür (siehe Anhang A, TBNewFileClick).

Als Besonderheit dieses Algorithmus ist zu beachten, dass Sie vor dem Aufruf der Tabellenerstellungsprozedur CreateTable() alle Felder initialisieren und deren Namen, Typ, Länge (falls erforderlich) und den erforderlichen Wert (ob erforderlich) angeben müssen oder nicht). Nach der Initialisierung der Felder deklarieren wir ein Schlüsselfeld und rufen erst dann die Tabellenerstellungsprozedur auf. Anschließend müssen Sie die neue Tabelle an die Tabellenkomponente binden, damit Sie mithilfe des Rasters und des Navigators damit arbeiten können. Mit SaveDialog wird der Dateiname der neuen Tabelle abgefragt.

Problem mit der Grafikgröße

Während der Entwicklung des Programms trat beim Zeichnen eines Bildes ein ziemlich ernstes Problem auf: Beim Ändern der Größe des Formulars hätte sich die Größe des Bildes ändern sollen, was jedoch nicht geschah.

Der Grund dafür war, dass sich die Größe der Bildkomponente weiterhin änderte, die Größe des Bildes jedoch gleich blieb. In diesem Zusammenhang wurde die ResizeForm-Prozedur erstellt (siehe Anhang A), die auf Änderungen in der Größe des Formulars reagierte und die Größe des Bildes entsprechend der geänderten Größe der Bildkomponente änderte.

5.6 Testen

Während des gesamten Entwurfs des Programms wurde es getestet und debuggt. Besonderes Augenmerk wurde auf zwei Punkte gelegt – die korrekte Arbeit mit Tabellen und die korrekte Erstellung eines Plans.

Bei der Arbeit mit Tabellen bestand der erste Schritt darin, etwaige Probleme beim Öffnen, Erstellen von Tabellen und Zeichnen aufzuspüren. Wenn Sie beispielsweise die Zeichenschaltflächen nicht deaktivieren, kann es zu einem Fehler kommen, wenn Sie darauf klicken, während die Tabelle nicht geöffnet ist. Um diesen Fehler zu beheben, werden die Schaltflächen deaktiviert, wenn keine offene Tabelle vorhanden ist.

Ein weiterer wichtiger Fehler, der behoben wurde, ist das Problem mit der Grafikgröße (siehe oben).

Außerdem musste sichergestellt werden, dass beim Deaktivieren/Aktivieren von Kontrollkästchen und Ändern der Formulargröße kein Bild gezeichnet wird, wenn der Benutzer noch nicht auf die Schaltfläche „Zeichnen“ geklickt hat. Diese Nachverfolgung im Programm erfolgt über das Zeichenflag, das gesetzt wird, wenn der Benutzer auf die Schaltfläche „Zeichnen“ klickt, und gelöscht wird, wenn auf die Schaltfläche „Löschen“ geklickt wird. Während des Testprozesses wurden alle Situationen, in denen die Überprüfung dieses Flags erforderlich war, überwacht und debuggt.

Der wichtigste Aspekt des Tests war die Überprüfung der Funktionalität des Programms auf einem Computer, auf dem Builder nicht installiert ist. Dies hat dazu beigetragen, Folgendes festzustellen:

1) Beim Kompilieren eines Programms müssen Sie alle verwendeten Bibliotheken einbinden. Dies wird erreicht, indem zwei Optionen in den Compiler-Einstellungen deaktiviert werden. Gleichzeitig wird der ausführbare Code des Programms größer, es kann aber auch auf einer Maschine ohne Builder funktionieren.

2) Das Programm erfordert die Borland Database Engine. Wenn es nicht auf Ihrem Computer vorhanden ist, müssen Sie es installieren.


6. PROGRAMMBESCHREIBUNG

Das Programm soll eine Informationsunterstützung für die Erstellung eines Lageplans bieten. Es ermöglicht Ihnen, Daten zu Planpunkten in einer Tabelle zu speichern, sie grafisch anzuzeigen, eine neue Tabelle zu erstellen, Objekttypen hinzuzufügen und zu löschen, Entfernungen zu berechnen und die Länge einer Route abzuschätzen, mehrere Routen zu zeichnen, die Ergebnisse in einer Datei zu speichern oder drucken.

Das Programm wurde für das Windows-Betriebssystem erstellt und verfügt über eine standardisierte und benutzerfreundliche Oberfläche. Dazu gibt es ein Beispiel in Form einer Tabelle mit Zugstrecken.


7. INSTALLATIONSANLEITUNG

Um das Programm zu installieren, müssen folgende Voraussetzungen erfüllt sein: Prozessor 233 MHz oder höher, RAM 16 MB, Betriebssystem Windows98 oder höher.

Um das Programm zu installieren, müssen Sie Folgendes tun:

1) Erstellen Sie einen neuen Ordner für das Programm.

2) Kopieren Sie es von dem Medium, auf dem sich das Programmarchiv befindet (Diskette oder Diskette), in diesen Ordner.

3) Entpacken Sie das Archiv in diesen Ordner.

4) Stellen Sie sicher, dass sich die Dateien „objects.db“ und „rasst.db“ im selben Ordner wie das Programm befinden.

5) Stellen Sie sicher, dass das Attribut „Schreibgeschützt“ für diese Dateien deaktiviert ist. Wenn nicht, entfernen Sie es.

6) Entpacken Sie das Archiv mit den Bibliotheken in den Windows-Ordner.

7) Jetzt können Sie das Programm starten und verwenden.


8. BEDIENUNGSANLEITUNG 8.1 Hauptmenü „Datei“-Menü

Um mit der Arbeit im Programm beginnen zu können, müssen Sie eine Datei mit einer Tabelle öffnen oder eine neue erstellen. Dies kann über die Menüpunkte Datei, Öffnen und Neu erfolgen.

„Öffnen“ – eine bestehende Tabelle öffnen. Ruft einen Dialog auf, in dem der Benutzer eine Datei mit der Erweiterung .db auswählen muss.

„Neu“ – Erstellen einer neuen Tabelle. Es wird ein Dialog aufgerufen, in dem der Benutzer den Namen der neuen Tabelle angibt.

„Drucken“ – druckt je nach geöffneter Registerkarte ein Bild oder eine Tabelle. Wenn Sie dieses Element auswählen, wird das Dialogfeld für die Druckeinstellungen geöffnet. Nach dem Klicken auf die Schaltfläche „OK“ wird der Auftrag zum Drucken gesendet.

Tischmenü

„Plan erstellen“ – wenn die Tabelle geöffnet ist, wird die Registerkarte „Plan“ aktiviert und ein Plan erstellt.

„Objekttyp hinzufügen“ – ruft das Formular zum Hinzufügen eines Objekttyps auf.

„Objekttyp löschen“ – ruft das Formular zum Löschen eines Objekttyps auf.

Hilfemenü

„Über das Programm“ – zeigt den Namen des Programms und Informationen zum Autor an.


8.2 Schnelltastenfeld

Die Aktionen dieser Schaltflächen ähneln den gleichnamigen Elementen im Menü „Datei“.

- „Neu“ – Erstellen einer neuen Tabelle.

- „Öffnen“ – öffnet eine vorhandene Tabelle.

- „Drucken“ – ein Bild oder eine Tabelle drucken.

8.3 Registerkarte „Tabelle“.

Tabellenraster – die Tabelle wird darin geladen. Mithilfe dieses Rasters kann der Benutzer Tabelleneinträge bearbeiten und anzeigen.

Navigator – befindet sich unter dem Raster und ermöglicht Ihnen das Bearbeiten und Anzeigen der Tabelle.

Navigatortasten

- „Erster Datensatz“ – wechselt zum ersten Datensatz in der Tabelle.

- „Vorheriger Datensatz“ – wechselt zum vorherigen Datensatz in der Tabelle.

- „Nächster Datensatz“ – wechselt zum nächsten Datensatz in der Tabelle.

- „Letzter Datensatz“ – wechselt zum letzten Datensatz in der Tabelle.

- „Datensatz hinzufügen“ – die Tabelle wird in den Bearbeitungsmodus versetzt, ein neuer leerer Datensatz wird vor dem aktiven Datensatz eingefügt.

- „Eintrag löschen“ – löscht den aktuellen Eintrag nach vorheriger Bestätigung.

- „Bearbeiten“ – Bearbeiten Sie den aktuellen Eintrag.

- „Änderungen abbrechen“ – macht Änderungen am aktuellen Datensatz rückgängig und gibt den vorherigen Wert zurück.

- "Aktualisieren". Aktualisiert eine Tabelle in einem Raster.

Unterhalb des Navigators befindet sich eine Liste von Objekten und Schaltflächen zum Löschen und Hinzufügen von Objekten.

Liste der Objekte – enthält eine Liste der Objekttypen. Wenn Sie einen Typ aus der Liste auswählen, wird dieser in den aktuellen Datensatz der Tabelle eingetragen.

Objekttyp hinzufügen – ruft das Formular zum Hinzufügen eines Typs auf. Wenn Sie es hinzufügen, wird es sofort zur Liste hinzugefügt.

Objekttyp löschen – ruft das Formular zum Löschen eines Objekttyps auf.

Objekttypformular hinzufügen

Enthält ein Bearbeitungsfeld zur Texteingabe, in das der Name des neuen Typs eingetragen wird.

„Hinzufügen“ – fügt einen Objekttyp zur Liste und Tabelle hinzu, ohne das Formular zu schließen.

„Ok“ – wenn das Objekt nicht hinzugefügt wurde, wird es in die Liste und Tabelle eingetragen und das Formular geschlossen.

„Abbrechen“ – schließt die Formulare ohne Hinzufügen.

Objekttypformular löschen

Liste der Objekte – daraus wählt der Benutzer aus, welches Objekt gelöscht werden soll.

„Löschen“ – löscht den ausgewählten Objekttyp aus der Tabelle und Liste.

„Alle löschen“ – löscht die Objekttabelle und -listen vollständig.

„OK“ – schließt das Formular.


8.4 Registerkarte „Plan“.

Das Zeichenfeld ist der Bereich, in dem die Planzeichnung angezeigt wird.

Bildlaufleisten – erscheinen, wenn Sie ein Bild vergrößern, indem Sie auf die Schaltfläche „Vergrößern“ klicken. Ermöglicht das Scrollen des vergrößerten Bildes.

Entfernungstabelle – zeigt für jede Route die Anzahl und die Länge der Abschnitte in Kilometern an. Die Tabelle ist sichtbar, wenn das Kontrollkästchen „Abstandstabelle ausblenden“ deaktiviert ist.

„Karte löschen“ – löscht das Bildfeld.

„Zeichnen“ – zeichnet einen Plan.

„Hintergrundfarbe“ – ermöglicht Ihnen die Auswahl der Hintergrundfarbe des Bildes. Wenn Sie auf diese Schaltfläche klicken, wird ein Dialogfeld zur Farbauswahl angezeigt.

„+ Vergrößern“ – vergrößert das Bild auf dem Plan.

„- Verkleinern“ – verkleinert das Bild auf dem Plan. Diese Schaltfläche wird aktiv, wenn Sie die Erhöhungstaste drücken.

„Standard“ – legt die anfängliche Bildgröße fest.

„Routenlinien zeichnen“ – wenn diese Option aktiviert ist, werden Routen auf dem Plan gezeichnet; wenn nicht, werden nur Punkte angezeigt.

„Entfernungen auf der Karte anzeigen“ – wenn das Kontrollkästchen aktiviert ist, wird neben jedem Routenpunkt die Entfernung in Form der Summe der Längen der diesem Punkt vorausgehenden Segmente angezeigt. „0“ wird in der Nähe des ersten Punktes der Route platziert.

„Objekttyp auf der Karte anzeigen“ – wenn das Kontrollkästchen aktiviert ist, wird der Objekttyp neben jedem Punkt angezeigt.

„Distanztabelle ausblenden“ – wenn das Kontrollkästchen aktiviert ist, ist die Distanztabelle unsichtbar. Wenn diese Option deaktiviert ist, wird die Tabelle rechts neben dem Zeichenfeld angezeigt.

Alle Kontrollkästchen sind standardmäßig aktiviert.


9. TESTFALL

Als Testbeispiel stellen wir die Strecken mehrerer Züge der Gorki-Eisenbahn dar.

Nehmen wir folgende Züge:

N 497G Gorki-Mosk – Adler

N 471G Gorki-Mosk – Noworossijsk

N 431G Gorki-Mosk – Adler

N 367G Gorki-Mosk - Samara

N 059A Gorki-Mosk - St. Petersburg-Glavn

N 039G Gorki-Mosk – Moskau Kursk

Tragen wir in die Tabelle die Koordinaten der größten besiedelten Gebiete als Punkte auf jeder Route ein. Wir werden Städtenamen als Objekte verwenden.

Reis. 9.1. Gesamtansicht des Programms auf der Registerkarte „Tabelle“, Eingabe des Namens eines Objekts in einen Datensatz über eine Liste.


Zuvor haben wir die Red Knot-Station zur Objekttabelle hinzugefügt, aber da wir sie nicht benötigen, werden wir sie löschen.

Reis. 9.2. Löschen Sie einen Objekttyp.

Wenn wir die Route des Zuges 431 wählen, brauchen wir Vladimir. Da es nicht in der Liste enthalten ist, müssen Sie es hinzufügen.

Reis. 9.3. Hinzufügen eines Objekttyps.


Also haben wir alle Routen zusammengestellt, die wir wollten. Das Ergebnis war ein Tisch wie dieser.

Reis. 9.4. Tisch

Jetzt erstellen wir mit unserem Tablet einen Plan.

Reis. 9.5. Bild des Plans mit allen Inschriften.


Standardmäßig zeigen wir Linien, Entfernungen und Städtenamen an.

Mal sehen, wie die Strecken ohne Signaturen aussehen.

Reis. 9.6. Bild des Plans ohne alle Inschriften.

Schauen wir uns nun einfach die Entfernungen an.

Reis. 9.7. Bild des Plans nur mit Entfernungen.


Tatsächlich wurden sie nicht sehr genau berechnet, aber das liegt daran, dass wir nicht alle Punkte dieser Routen berücksichtigt haben und auch die ermittelten Koordinaten nicht ganz korrekt waren – sie wurden aus der Karte „nach Augenmaß“ ermittelt.

Schauen wir uns nun unseren Plan nur mit den Namen der Städte an.

Reis. 9.8. Bild des Plans, das nur Objekttypen zeigt.

Reis. 9.9. Bild des Plans in Form von Punkten mit allen Unterschriften.


Sie können auch eine Entfernungstabelle sehen.

Reis. 9.11. Gesamtansicht des Programms auf der Registerkarte „Plan“ mit sichtbarer Entfernungstabelle.


ABSCHLUSS

Die in der Bachelorarbeit gestellte Aufgabe wurde erfolgreich abgeschlossen. Das entwickelte Programm erfüllt die in der Problemstellung beschriebenen Ausgangsbedingungen vollständig. Insbesondere implementierte das Programm die Arbeit mit Tabellen, Grafiken und Dateien.

Die Arbeit des Programmbenutzers erfolgt über eine einfache Schnittstelle, die nach den Windows-Programmschnittstellenstandards erstellt wurde.

Weitere Verbesserungen und Erweiterungen der Fähigkeiten dieses Projekts umfassen die Hinzufügung der Berechnung der kürzesten Route, das Zeichnen von Symbolen von Objekten, Reliefbildern und die Möglichkeit, ein Kartenbild als Hintergrund zu laden.


REFERENZLISTE

1. P. Gustafson, M. Cashman, B. Swart, J. Holingworth. Borland C++ Builder 6. Entwicklerhandbuch. – Williams, 2004.

2. A. Archangelsky. Programmierung in C++ Builder 6. – Binom, 2002.

3. T.A. Pawlowskaja. C/C++. Programmieren in einer Hochsprache. – Peter, 2001.


ANHANG ANHANG E. Kartenprojektionen und Rasterkarten

Es ist unmöglich, eine Kugeloberfläche auf einer Ebene ohne Brüche und Falten zu entfalten, d. h. ihr Planbild auf einer Ebene kann nicht ohne Verzerrungen mit vollständiger geometrischer Ähnlichkeit aller ihrer Umrisse dargestellt werden. Eine vollständige Ähnlichkeit der Umrisse von Inseln, Kontinenten und verschiedenen Objekten, die auf eine ebene Fläche projiziert werden, kann nur auf einer Kugel (Globus) erreicht werden. Das Bild der Erdoberfläche auf einer Kugel (Globus) hat den gleichen Maßstab, den gleichen Winkel und die gleiche Größe.

Es ist unmöglich, diese geometrischen Eigenschaften gleichzeitig und vollständig auf der Karte beizubehalten. Ein auf einer Ebene aufgebautes geografisches Gitter, das Meridiane und Parallelen darstellt, weist bestimmte Verzerrungen auf, sodass die Bilder aller Objekte auf der Erdoberfläche verzerrt sind. Art und Ausmaß der Verzerrungen hängen von der Methode zur Erstellung des kartografischen Rasters ab, auf dessen Grundlage die Karte erstellt wird.

Die Darstellung der Oberfläche eines Ellipsoids oder einer Kugel auf einer Ebene wird als Kartenprojektion bezeichnet. Es gibt verschiedene Arten von Kartenprojektionen. Jeder von ihnen entspricht einem bestimmten kartografischen Raster und den ihm innewohnenden Verzerrungen. Bei einer Art von Projektion werden die Abmessungen von Flächen verzerrt, bei einer anderen - Winkeln, bei einer dritten - Flächen und Winkeln. Gleichzeitig sind in ausnahmslos allen Projektionen die Längen der Linien verzerrt.

Kartografische Projektionen werden nach der Art der Verzerrung, der Art der Darstellung von Meridianen und Parallelen (geografisches Gitter) und einigen anderen Merkmalen klassifiziert. Aufgrund der Art der Verzerrungen werden folgende Kartenprojektionen unterschieden:

Gleichwinklig, wobei die Winkelgleichheit zwischen den Richtungen auf der Karte und in der Natur gewahrt bleibt. Abbildung E.1 zeigt eine Weltkarte, auf der das kartografische Gitter die Eigenschaft der Gleichwinkeligkeit behält. Die Karte behält die Ähnlichkeit der Ecken bei, die Größen der Bereiche sind jedoch verzerrt. Beispielsweise sind die Flächen von Grönland und Afrika auf der Karte fast gleich, aber in Wirklichkeit ist die Fläche Afrikas etwa 15-mal so groß wie die Fläche Grönlands.

Abb.E.1 Weltkarte in konformer Projektion.

Gleiche Größe, wobei die Proportionalität der Flächen auf der Karte zu den entsprechenden Flächen auf dem Erdellipsoid gewahrt bleibt. Abbildung E.2 zeigt eine Weltkarte, die in einer flächentreuen Projektion erstellt wurde. Dabei bleibt die Proportionalität aller Flächen erhalten, die Ähnlichkeit der Figuren wird jedoch verzerrt, d. h. es liegt keine Gleichwinkeligkeit vor. Die gegenseitige Rechtwinkligkeit von Meridianen und Parallelen auf einer solchen Karte bleibt nur entlang des Mittelmeridians erhalten.

Äquidistant, wobei in jeder Richtung ein konstanter Maßstab beibehalten wird;

Willkürlich, ohne Wahrung der Winkelgleichheit, der Proportionalität der Flächen oder der Maßstabskonstanz. Der Sinn der Verwendung willkürlicher Projektionen besteht in einer gleichmäßigeren Verteilung der Verzerrungen auf der Karte und in der Bequemlichkeit, einige praktische Probleme zu lösen.


Reis. E. 2 Weltkarte in flächentreuer Projektion.

Je nach Bildtyp werden die Gitter der Meridiane und Parallelen einer kartografischen Projektion in konische, zylindrische, azimutale usw. unterteilt. Darüber hinaus kann es innerhalb jeder dieser Gruppen Projektionen unterschiedlicher Verzerrungsart (konform, flächentreu) geben , usw.). Das geometrische Wesen konischer und zylindrischer Projektionen besteht darin, dass ein Gitter aus Meridianen und Parallelen auf die Mantelfläche eines Kegels oder Zylinders projiziert wird und diese Flächen anschließend in eine Ebene entfaltet werden. Das geometrische Wesen azimutaler Projektionen liegt in der Tatsache, dass ein Gitter aus Meridianen und Parallelen auf eine Ebene projiziert wird, die an einem der Pole tangential zur Kugel verläuft oder entlang einer Parallele sekante. Abhängig vom Zweck, dem Inhalt der Karte sowie der Größe, Konfiguration und geografischen Lage des kartierten Gebiets wird die kartografische Projektion ausgewählt, die hinsichtlich Art, Ausmaß und Verteilung der Verzerrungen für eine bestimmte Karte am besten geeignet ist. Dank des kartografischen Rasters haben alle Verzerrungen, egal wie groß sie auch sein mögen, keinen Einfluss auf die Genauigkeit der Bestimmung der geografischen Position (Koordinaten) der auf der Karte abgebildeten Objekte. Gleichzeitig ermöglicht das kartografische Raster als grafischer Ausdruck der Projektion, bei Messungen auf der Karte die Art, das Ausmaß und die Verteilung von Verzerrungen zu berücksichtigen. Daher ist jede geografische Karte ein mathematisch ermitteltes Abbild der Erdoberfläche.

Persönliche Nebengrundstücke des Aginsky Buryat Autonomous Okrug für 2005 - 2010“, das in einer Entwurfsfassung erstellt wurde. 4. Die Hauptrichtungen zur Verbesserung der Aktivitäten staatlicher Stellen bei der Unterstützung persönlicher Nebengrundstücke der Landbevölkerung im Autonomen Kreis Aginsky Buryat 4.1 Probleme und Prioritäten für die Entwicklung persönlicher Nebengrundstücke im Aginsky...

Die Erforschung von Familien hat zur Entwicklung psychologischer, pädagogischer und soziologischer Methoden geführt, die die Vorstellungen über die moderne Familie vertiefen und erweitern. KAPITEL 3. SOZIALE PROBLEME UND PERSPEKTIVEN DER SOZIALEN ARBEIT MIT JUNGEN FAMILIEN IM DORF WORONOVKA 3.1 Allgemeine Merkmale p. Woronowka, Bezirk Shegarsky, Region Tomsk, Bezirk Shegarsky liegt im südlichen Teil von Tomsk...




Versorgung und Unterstützung für Kinder; - Derzeit wurde in Russland ein Mechanismus zur Finanzierung gezielter Programme zur Unterstützung von Mutterschaft und Kindheit entwickelt und umgesetzt. 2. Finanzmechanismus zur Umsetzung der staatlichen Politik zur Unterstützung von Mutterschaft und Kindheit 2.1 Verfahren und Bedingungen für die Zahlung von Sozialleistungen Bis heute hat Russland ein recht entwickeltes Leistungssystem entwickelt, ...