Задача: автоматизиране на работата на диспечер

I. Условие
Задача 24: Да се автоматизира дейността на диспечер на градския транспорт в град София.

II. Анализ
Диспечерът в автотранспорта има широко поле за реализация и практически може да работи във всяка фирма (предприятие), извършваща пътнически превози – в градския транспорт (диспечер в главен диспечерски пункт, крайна спирка, станция или гараж); в таксиметрови, междуселищни, туристически и международни превози; в товарни превози (вътрешни и международни).
Диспечерът организира, контролира, координира и ръководи автотранспортната дейност, като участва в разработването на графици и транспортни схеми, в изготвянето на оперативна информация; следи за изпълнението на заложените графици на движение, попълването на основните транспортни документи и състоянието на превозните средства; следи и води на отчет работното време и почивките на водачите.
Предметите и средствата на труда, с които работи диспечерът, са:
транспортни документи;
транспортни и маршрутни схеми;
график с работното време и почивките на водачите;
информационни бази данни;
табла на автопарка;
каса за съхраняване на пътни листове;
товарителници и тахографни листове.
Диспечеризирането е процес, изискващ непрекъснати контакти с водачи, колеги и ръководители на предприятието (фирмата), с клиенти – заявители и потребители на автотранспортни услуги.
Дейността на диспечера предполага работа в закрито пространство. Работното място е в офиса на фирмата (канцелария на предприятието), със съответното офис оборудване и технически средства за събиране и обработка на информацията.

Описание на системните изисквания
Да се разработи система, която да автоматизира част от работата на диспечер. Системата трябва да съхранява във текстови файлове информация за всички водачи (Код, Име, ЕГН, Адрес и Телефон) и курсовете, които те правят (Код, Дата, МПС №, Маршрут, Кормуване и Почивки). Код – представлява цяло положително число. Име – Име Презиме и Фамилия на водача. ЕГН – Единен Граждански Номер на водача. Адрес – домашният адрес на водача. Телефон – домашният телефон на шофьора, на който може да бъде намерен извън работно време. Дата – датата, на която е извършен курсът. МПС № – регистрационен номер на Моторното Превозно Средство. Маршрут – линията, по която се движи шофьорът. Кормуване – броят часове, които водачът е прекарал зад волана. Почивки – броят часове, в които водачът е почивал. Системата трябва да предлага възможност за добавяне на нов шофьор и нов курс. По зададен код на шофьор системата трябва да изведе информация за курсовете, които е извършил дадения шофьор.

Процедурен проект
Модули:
Име на модула: Shofior
Предназначение: Въвеждане на информация за шофьор
Вход: Няма входни данни
Изход: Shofior.txt
Собствени данни: Код, Име, ЕГН, Адрес и Телефон
Описание чрез псевдокод:
void Shofior()
while (Kod<=0 || Kod>=100) cin>>Kod;
cin>>Ime;
while (EGN.length() != 10) cin>>EGN;
if ((a*2+b*4+c*8+d*5+e*10+f*9+g*7+h*3+i*6)%11) == j) cout<<”Валиден ЕГН”;
//където a, b, c, d, e, f, g, h, i, j са съответно позициите на всяка цифра от ЕГН
cin>>Adres;
cin>>Tel;
SaveS();

Граф на протичане на модул Shofior

E = 18
N = 16
V(G) = E – N + 2 = 18 – 16 + 2 = 4

Име на модула: Kurs
Предназначение: Въвеждане на информация за курс
Вход: Kod – от файл Shofior.txt
Изход: Kurs.txt
Собствени данни: Код, Дата, МПС №, Маршрут, Кормуване и Почивки
Описание чрез псевдокод:
void Kurs()
while (NKod<=0 || NKod>=100) cin>>NKod
open sh00.cpp
if (NKod == Kod)
cin>>MPS;
while (D<=0 || D>=32 || M<=0 || M>=13 || Y<=1900 || Y>=2900) cin>>D; cin>>M; cin>>Y;
switch (M)
case 1: case 3: case 5: case 7: case 8: case 10: case 12:
if (D>=1 && D<=31 && Y>=1900 && Y<=2900) cout<<”Валидна дата”<<endl;
else cout<<”Невалидна дата”<<endl; break;
case 4: case 6: case 9: case 11:
if (D>=1 && D<=30 && Y>=1900 && Y<=2900) cout<<”Валидна дата”<<endl;
else cout<<”Невалидна дата”<<endl; break;
case 2:
if ((Y%400==0) || (Y%4==0) && (Y%100!=0) && (D>=1 && D<=29 && Y>=1900 && Y<=2900)) cout<<”Валидна дата”<<endl;
else if (D>=1 && D<=28 && Y>=1900 && Y<=2900) cout<<”Валидна дата”<<endl;
else cout<<”Невалидна дата”<<endl; break;
cin>>Marshrut;
cin>>Kormuvane;
cin>>Pochivki;
else cout<<”Няма шофьор с такъв номер”;
SaveK();

Граф на протичане на модул Kurs

E = 23
N = 20
V(G) = E – N + 2 = 23 – 20 + 2 = 5

Име на модула: Proverka
Вход: Kod – от файл Kurs.txt
Изход: Няма изходни данни
Собствени данни: NKod
Описание чрез псевдокод:
void Proverka()
cin>>NKod;
if (NKod == Kod)
cout<<”Има шофьор с код: “<<NKod;
cout<< Kod, Ime, MPS, D.M.Y, Marshrut, Kormuvane, Pochivki;
else cout<<”Няма такъв шофьор”;

Граф на протичане на модул Proverka

E = 7
N = 7
V(G) = E – N + 2 = 7 – 7 + 2 = 2

IV. Разработване на прототип
Shofior.cpp
#include <fstream>
#include <iostream>
#include <string>
#include <sstream>
#include <ctype.h>
using namespace std;

class Dispecher {
public:
int Kod;
char Ime[21];
string EGN;
char Adres[21];
char Tel[9];
void Shofior();
void SaveS();
};
Dispecher Disp;
ofstream outfs; ifstream infs; fstream iof;

void Dispecher::Shofior()
{
while (Kod<=0 || Kod>=100) {
cout<<”Код: “; cin>>Kod;
}
cin.ignore();
cout<<”Име на шофьора: “; cin.getline(Ime,21);
while (EGN.length() != 10) {
cout<<”ЕГН: “; cin>>EGN;
}
stringstream ss1(EGN.substr(0,1));
int a;
ss1>>a;
stringstream ss2(EGN.substr(1,1));
int b;
ss2>>b;
stringstream ss3(EGN.substr(2,1));
int c;
ss3>>c;
stringstream ss4(EGN.substr(3,1));
int d;
ss4>>d;
stringstream ss5(EGN.substr(4,1));
int e;
ss5>>e;
stringstream ss6(EGN.substr(5,1));
int f;
ss6>>f;
stringstream ss7(EGN.substr(6,1));
int g;
ss7>>g;
stringstream ss8(EGN.substr(7,1));
int h;
ss8>>h;
stringstream ss9(EGN.substr(8,1));
int i;
ss9>>i;
stringstream ss10(EGN.substr(9,1));
int j;
ss10>>j;
int ost = (a*2+b*4+c*8+d*5+e*10+f*9+g*7+h*3+i*6)%11;
if (ost < 10 && j == ost) cout<<”Валиден ЕГН!”<<endl;
else cout<<”Невалиден ЕГН”<<endl;
cin.ignore();
cout<<”Адрес: “; cin.getline(Adres,21);
cout<<”Телефон: “; cin>>Tel;
}

void Dispecher::SaveS()
{
outfs.open(“Shofior.txt”, ios::app);
outfs<<Kod<<endl;
outfs<<Ime<<endl;
outfs<<EGN<<endl;
outfs<<Adres<<endl;
outfs<<Tel<<endl;
outfs.close();
cout<<”Файлът е запазен”<<endl;
}

void main()
{
system (“chcp 1251″);
Disp.Shofior();
Disp.SaveS();
}

Kurs.cpp
#include <fstream>
#include <iostream>
#include <string>
#include <sstream>
#include <ctype.h>
using namespace std;

class Dispecher {
public:
int Kod;
int NKod;
char Ime[21];
string EGN;
char Adres[21];
char Tel[9];
char MPS[9];
int D;
int M;
int Y;
char Marshrut[21];
char Kormuvane[4];
char Pochivki[4];
void Kurs();
void SaveK();
};
Dispecher Disp;
ofstream outfs; ifstream infs;
ofstream outfk; ifstream infk; fstream iof;

void Dispecher::Kurs()
{
while (NKod<=0 || NKod>=100) {
cout<<”Код на шофьор: “; cin>>NKod;
}
infs.open(“Shofior.txt”,ios::in);
for (int i=0;i<100;i++) {
infs>>Kod;
infs>>Ime;
infs>>EGN;
infs>>Adres;
infs>>Tel;
if (infs.eof() || NKod == Kod) break;
}
if (NKod == Kod) {
cin.ignore();
cout<<”МПС №: “; cin.getline(MPS,9);
while (D<=0 || D>=32 || M<=0 || M>=13 || Y<=1900 || Y>=2900) {
cout<<”Въведете днешна дата\n”;
cout<<” – Въведете ден: “; cin>>D;
cout<<” – Въведете месец: “; cin>>M;
cout<<” – Въведете година: “; cin>>Y;
}
switch (M) {
case 1: case 3: case 5: case 7: case 8: case 10: case 12:
if (D>=1 && D<=31 && Y>=1900 && Y<=2900) cout<<”Валидна дата”<<endl;
else cout<<”Невалидна дата”<<endl; break;
case 4: case 6: case 9: case 11:
if (D>=1 && D<=30 && Y>=1900 && Y<=2900) cout<<”Валидна дата”<<endl;
else cout<<”Невалидна дата”<<endl; break;
case 2:
if ((Y%400==0) || (Y%4==0) && (Y%100!=0) && (D>=1 && D<=29 && Y>=1900 && Y<=2900)) cout<<”Валидна дата”<<endl;
else if (D>=1 && D<=28 && Y>=1900 && Y<=2900) cout<<”Валидна дата”<<endl;
else cout<<”Невалидна дата”<<endl; break;
}
cin.ignore();
cout<<”Маршрут: “; cin.getline(Marshrut,21);
cout<<”Кормуване(в часове): “; cin>>Kormuvane;
cout<<”Почивки(в часове): “; cin>>Pochivki;
Disp.SaveK();
}
else cout<<”Няма шофьор с такъв номер”<<endl;
infs.close();
}

void Dispecher::SaveK()
{
outfk.open(“Kurs.txt”, ios::app);
outfk<<”\n”<<NKod<<endl;
outfk<<Ime<<endl;
outfk<<MPS<<endl;
outfk<<D<<” “<<M<<” “<<Y<<endl;
outfk<<Marshrut<<endl;
outfk<<Kormuvane<<endl;
outfk<<Pochivki;
outfk.close();
cout<<”Файлът е запазен”<<endl;
}

void main()
{
system (“chcp 1251″);
Disp.Kurs();
}

Proverka.cpp
#include <fstream>
#include <iostream>
#include <string>
#include <sstream>
#include <ctype.h>
using namespace std;

class Dispecher {
public:
int Kod;
int NKod;
char Ime[21];
char NIme[21];
string EGN;
char Adres[21];
char Tel[9];
char MPS[9];
int D;
int M;
int Y;
char Marshrut[21];
char Kormuvane[4];
char Pochivki[4];
void Shofior();
void Kurs();
void SaveS();
void SaveK();
void Proverka();
};
Dispecher Disp;
ofstream outfs; ifstream infs; fstream iof;
ofstream outfk; ifstream infk;

void Dispecher::Proverka()
{
while (NKod<=0 || NKod>=100) {
cout<<”Въведете код на шофьор: “; cin>>NKod;
}
infs.open(“Kurs.txt”,ios::in);
for (int i=0;i<100;i++) {
infs>>Kod;
infs>>Ime;
infs>>MPS;
infs>>D>>M>>Y;
infs>>Marshrut;
infs>>Kormuvane;
infs>>Pochivki;
if (NKod == Kod)
{
cout<<”Има шофьор с код: “<<NKod<<endl;
cout<<”Име: “<<Ime<<endl;
cout<<”МПС №: “<<MPS<<endl;
cout<<”Дата: “<<D<<”.”<<M<<”.”<<Y<<endl;
cout<<”Маршрут: “<<Marshrut<<endl;
cout<<”Кормуване: “<<Kormuvane<<endl;
cout<<”Почивки: “<<Pochivki<<endl;
}
if (infs.eof()) break;
}
infs.close();
}

void main()
{
system (“chcp 1251″);
Disp.Proverka();
}

Menu.cpp
#include <iostream.h>
#include <stdio.h>
#include <stdlib.h>

void main()
{
system (“chcp 1251″);
char KodOp;
do {
cout<<”\nМЕНЮ НА ИЗПЪЛНЯВАНИТЕ ОПЕРАЦИИ:\n”;
cout<<”   1 – Въвеждане на данни за шофьор\n”;
cout<<”   2 – Въвеждане на информация за курсове\n”;
cout<<”   3 – Проверка на шофьор\n”;
cout<<”Изберете операция или 0 за край: “; cin>>KodOp;
switch (KodOp) {
case ‘0′ :break;
case ‘1′ :system (“Shofior.exe”); break;
case ‘2′ :system (“Kurs.exe”); break;
case ‘3′ :system (“Proverka.exe”); break;
default: cout<<”ГРЕШЕН КОД НА ОПЕРАЦИЯ!\n”; break;
}
} while (KodOp!=’0′);
}

V. Тестване
Test.cpp
#include <fstream>
#include <iostream>
#include <string>
#include <sstream>
#include <ctype.h>
using namespace std;

class Dispecher {
public:
int Kod;
int NKod;
char Ime[21];
string EGN;
char Adres[21];
char Tel[9];
string MPS;
int D;
int M;
int Y;
string Marshrut;
string Kormuvane;
string Pochivki;
void Kurs();
void SaveK();
};
Dispecher Disp;
ofstream outfs; ifstream infs;
ofstream outfk; ifstream infk; fstream iof;

void Dispecher::Kurs()
{
NKod = 1;
infs.open(“TestShofior.txt”,ios::in);
for (int i=0;i<100;i++) {
infs>>Kod;
infs>>Ime;
infs>>EGN;
infs>>Adres;
infs>>Tel;
if (infs.eof() || NKod == Kod) break;
}
if (NKod == Kod) {
MPS = “P_3242_A”;
D = 18;
M = 12;
Y = 2008;
Marshrut = “T.Gara”;
Kormuvane = “4:30″;
Pochivki = “1:15″;
SaveK();
}
else cout<<”Няма шофьор с такъв номер”<<endl;
infs.close();
}

void Dispecher::SaveK()
{
outfk.open(“TestKurs.txt”, ios::app);
outfk<<NKod<<endl;
outfk<<Ime<<endl;
outfk<<MPS<<endl;
outfk<<D<<” “<<M<<” “<<Y<<endl;
outfk<<Marshrut<<endl;
outfk<<Kormuvane<<endl;
outfk<<Pochivki<<endl;
outfk.close();
}

void main()
{
system (“chcp 1251″);
Disp.Kurs();
cout<<”Teстът е завършен, отворете TestKurs.txt”<<endl;
system(“TestKurs.txt”);
system(“PAUSE”);
}

TestShofior.txt
1
John
8704175603
Marica10
0866/65819

Сходни статии:

  1. Търсене на числа от поредица автор: Веселин Димитров Програмата е създадена с цел намирането на числа от поредица такива, които са по-големи от сбора на всички предхождащи го числа. Програмата позволява да се четат числа...
  2. Програмиране от по-висок ред в C++ Функция, някои формални параметри на която са функции, се нарича функция от по-висок ред. В езика C++ е възможно формален параметър на функция да е указател към функция, а също...
  3. Стандартни функции в програмирането Не е необходимо да се пишат програмите с всичките им подроб-ности. С++ предлага множество стандартни функции. Тяхното из-ползване повишава продуктивността и пести програмистко време. Не е необходимо да се пише...
  4. Пример за обектно ориентирана реализация на свързан стек Ще се възползваме от тясната връзка между св. списъци и стекове чрез повторно използване на класа на списъците. Ще приложим 2 разновидности на повторното използване. Отначало ще реализираме класа на...
  5. Тестване работата на РОР3 сървъри Post Office Protocol e протокол за извличане на получена електронна поща от e-mail сървър върху клиентски компютър. Текущата версия на протокола е 3 и затова често той се обозначава със...

Новини за технологии и джаджи – Актуална информация за най-яките лаптопи, компютри, телфони и фотоапарати
Comments are closed.