Разработка программы 'Электронный справочник маршрутов движения общественного транспорта по городу'

  • Вид работы:
    Курсовая работа (т)
  • Предмет:
    Информационное обеспечение, программирование
  • Язык:
    Русский
    ,
    Формат файла:
    MS Word
    716,45 Кб
  • Опубликовано:
    2014-03-11
Вы можете узнать стоимость помощи в написании студенческой работы.
Помощь в написании работы, которую точно примут!

Разработка программы 'Электронный справочник маршрутов движения общественного транспорта по городу'

Кафедра ПОВТиАС












Пояснительная записка к курсовой работе

по дисциплине: «Программирование»

на тему: Разработка программы “Электронный справочник маршрутов движения общественного транспорта по городу

Аннотация

электронный справочник транспорт

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

Ключевые слова: программирование, С++, функции, графический режим, маршрут.

Содержание

Введение

. Постановка задачи

.1 Анализ задачи

.2 Формальная постановка задачи

.3 Алгоритм программы

.4 Проектирование интерфейса

. Программирование задачи

. Тестирования программы

Заключение

Литература

Приложение

Введение

Программирование <#"701707.files/image001.gif"> вызвано тем, что количество станций равно 25-ти, т.е. нельзя ввести номер несуществующей станции.

.        по той же причине.

Результирующие (выходные) данные

Результатом выполнения программы является вывод сообщения - инфор0мации о том, на каком транспорте можно добраться до остановки назначения (№ автобуса и/или троллейбуса), а также информации о пересадке, если прямого маршрута не найдено (в графическом режиме через функцию outtextxy();). После ввода исходных данных нужный маршрут будет выделен другим цветом.

.3 Алгоритм программы

Рис.1. Блок-схема функции main()

Рис.5. Блок-схема функции void zast(void);

Рис.2. Блок-схема функции void linii(void);

Рис.3. Блок-схема функции void marshrut(int a,int b,int c);

Рис.4. Блок-схема функции void soobsh(int a, int b,int c);

1.4 Проектирование интерфейса

Сценарий диалога

Общая схема диалога:

·    Сцена 1 (ввод номера станции отправления).

·        Сцена 2 (ввод номера станции назначения).

·        Вывод результата. Если не найден прямой маршрут, то Сцена 3, иначе Сцена 4.

Описание сцен диалога:

Описание сцены 1 приведено в табл. 1.

Таблица 1

Алгоритм ведения диалога

Сообщения пользователя и его реакция

Вывод запроса

Введите номер станции, на которой находитесь

Ввод y1

??? <Enter>

Если y1 не входит в диапазон 1..25, то осуществляется возват к выводу запроса



Описание сцены 2 приведено в табл. 2.

Таблица 2

Алгоритм ведения диалогаСообщения пользователя и его реакция


Вывод запроса

Введите номер станции назначения

Ввод y2

??? <Enter>

Если y2 не входит в диапазон 1..25, то осуществляется возврат к выводу запроса



Описание сцены 3 приведено в табл. 3.

Таблица 3

Алгоритм ведения диалога

Сообщения пользователя и его реакция

Выделение нужного маршрута другим цветом и вывод сообщения

Вам необходимо сесть на автобус номер ??? и на станции номер ??? пересесть на троллейбус номер ???


Описание сцены 4 приведено в табл. 4.

Таблица 4

Алгоритм ведения диалога

Сообщения пользователя и его реакция

Вам необходимо сесть на автобус номер ??? пересадок не требуется


2. Программирование задачи

В программе были использованы функции, хранящиеся в заголовочных файлах. Список заголовочных файлов из стандартной библиотеки C++, используемых в программе (в описании приведены функции, использующиеся в данной программе):

§ iostream.h - в ней реализована поддержка для файлового ввода/вывода данных встроенных типов. Операции ввода/вывода выполняются с помощью классов istream (потоковый ввод) и ostream (потоковый вывод). Третий класс, iostream, является производным от них и поддерживает двунаправленный ввод/вывод.

·    cin;

·        cout .

Вывод осуществляется, как правило, с помощью перегруженного оператора сдвига влево (<<), а ввод - с помощью оператора сдвига вправо (>>).

§ iomanip.h - заголовочный файл стандартной библиотеки С++, который содержит манипуляторы ввода/вывода информации. Сами они не позволяют читать или записывать данные, манипуляторы лишь воздействуют на способ интерпретации данных при чтении и записи.

·    setw();

·        setiosflags() .

§ stdlib.h - заголовочный файл стандартной библиотеки языка С, который содержит в себе функции, занимающиеся выделением памяти, контроль процесса выполнения программы, преобразования типов и другие.

·    itoa() .

§ conio.h - объявляет несколько библиотечных функций для работы с «консольным вводом/выводом» программы, создает текстовый интерфейс пользователя.

·    clrscr();

·        getch() ;

·        textcolor() ;

·        gotoxy().

§ graphics.h - заголовочный файл стандартной библиотеки C++, который содержит прототипы функций, управляющие экраном в графическом режиме.

·    initgraph() ;

·        setcolor() ;

·        outtextxy() ;

·        setfillstyle() ;

·        line() ;

·        pieslice();

·        bar() ;

·        closegraph() .

Далее рассмотрим подробнее созданные функции:

1.   main() - главная функция. В ней запрашиваются исходные данные

и инициализируется графический режим.

В функции объявлены переменные int y1,y2,k1,k2. y1, y2 - исходные данные, которые необходимо ввести пользователю; k1, k2 - вычисляются индексы станций.

Для того, чтобы экран работал в графическом режиме, необходимо использовать специальные средства инициализации графики.

{ int y1,y2,k1,k2;

zast(); //вызов функции void zast()

l:int DRIVER=DETECT,MODE; /*позволяет без изменения переносить программы на компьютеры с другими видеоадаптерами*/

initgraph(&DRIVER,&MODE,""); /*инициализация графического режима, где &DRIVER - номер типа драйвера, который поддерживает графический режим, &MODE -номер типа графического режима, 3-ий параметр задает файл драйвера и путь к нему*/

linii();

setcolor(15); // изменение цвета прорисовки

if(y1<=25&&y1>=1) //если первое число задано правильно, программа выводит информацию до того момента, когда надо вводить второе число

{outtextxy(1,1,"Введите номер станции, на которой находитесь");

gotoxy(1,2);

cout<<y1;

goto h;} //переход к запросу номера станции назначения

outtextxy(1,1,"Введите номер станции, на которой находитесь");

gotoxy(1,2); //перевод курсора в начало второй строки

cin>>y1;

if(y1<1 || y1>25) //ограничение на исходные данные: если пользователь введет номер несуществующей станции отправления, то программа запросит ввод номера снова

{clrscr();//очистка экрана от неправильно введенных данных

goto l;} //возврат к запросу номера станции отправления

h:outtextxy(1,35,"Введите номер станции назначения");

gotoxy(1,4);

cin>>y2;

if(y2<1 || y2>25) //ограничение на исходные данные: если пользователь введет номер несуществующей станции назначения, то программа запросит ввод номера снова

{clrscr(); //очистка экрана от неправильно введенных данных

goto l;} //возврат к запросу номера станции отправления

for(i=0;i<5;i++)(j=0;j<5;j++)

{ if(A[i][j]==y1) {k1=j;}(A[i][j]==y2){k2=i;}

} //цикл для нахождения станций отправления и назначения

closegraph();//возврат в текстовый режим

return 0;

}

2.   void zast(void);

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

{ textcolor(15); /*функция управления цветом символов*/

clrscr(); /* «активизирует» текущий цвет

cout<<setw(50)<<setiosflags(ios::right)<<"ЭЛЕКТРОННЫЙ СПРАВОЧНИК\n";

/*cout - объект класса ostream, соответствующий стандартному выводу

setw(int n) - установка ширины поля в значение n

setiosflags(ios::right) - вывод с выравниванием справа*/

}

3.   void linii(void);

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

В функции объявлена переменная int k (номер транспорта) и массив char A[5], предназначенный для вывода в графическом режиме номеров автобусов и троллейбусов. Перевод данных из k в A[5] осуществляется c помощью функции itoa();

{setcolor(7);

setfillstyle(1,7); /*устанавливает шаблон и цвет заполнения*/

line(90,100,320,100); //линия маршрута 1-го троллейбуса

line(100,85,100,315); //линия маршрута 1-го автобуса

char A[5];k=1;(int i=0;i<5;i++)(int j=0;j<5;j++)

{pieslice(100+i*50,100+j*50,0,360,2); /* рисует и закрашивает сектор круга с центром в точке (100+i*50,100+j*50) и радиусом 2. Сектор рисуется от угла 0 до угла 360*/

itoa(k,A,10); /*Функция itoa преобразует символы числа k в символьную строку, заканчивающуюся NULL-символом, и запоминает результат в A. 10 определяет основание системы счисления для k*/

outtextxy(105+j*50,90+i*50,A); /* функция отображает текст строки в указанной области*/

k++; }=1; setcolor(2);(i=0;i<5;i++){ itoa(k,A,10);(105+i*50,50,A);

k++;} //для вывода номеров автобусов

k=1; setcolor(9);(i=0;i<5;i++){ itoa(k,A,10);(55,90+i*50,A);

k++;} //для вывода номеров троллейбусов

setcolor(2);

setfillstyle(1,2);

bar(1,355,10,360); /*рисует прямоугольник и закрашивает его текущим цветом*/

4.   void marshrut(int a,int b,int c);

Функция для выделения нужного пользователю маршрута. В списке формальных параметров указаны 3 переменные int a, int b и int c. Переменная a содержит номер станции отправления, b - номер станции назначения и c - номер станции пересадки. В теле функции объявлены переменные целого типа x1, y1, x2, y2, x3, y3, предназначенные для запоминания индексов станций отправления (x1, y1), назначения (x2, y2) и пересадки (x3, y3).

{ int x1,y1,x2,y2,x3,y3;(i=0;i<5;i++)(j=0;j<5;j++){ if(A[i][j]==a) x1=i,y1=j;} //цикл для запоминания индексов станции отправления

for(i=0;i<5;i++)

for(j=0;j<5;j++){ if(A[i][j]==b) x2=i,y2=j;} //цикл для запоминания индексов станции назначения

for(i=0;i<5;i++)

for(j=0;j<5;j++){ if(A[i][j]==c) x3=i,y3=j;} //цикл для запоминания индексов станции пересадки

setcolor(4);

line(100+y1*50,100+x1*50,100+y3*50,100+x3*50); //линия окрашивает маршрут от станции отправления до станции пересадки

line(100+y3*50,100+x3*50,100+y2*50,100+x2*50);} //линия окрашивает маршрут от станции пересадки до станции назначения

5.   void soobsh(int a, int b, int c);

Данная функция предназначена непосредственно для вывода необходимой для пользователя информации. Объявлены переменные int k1,k2,k3,k4. Это индексы станций отправления (k1,k2) и назначения (k3,k4).

{char M[5]; //в массив заносится значение с

int k1,k2,k3,k4;(14);(i=0;i<5;i++)(j=0;j<5;j++){if (A[i][j]==a){k1=i;k2=j;}(A[i][j]==b){k3=i;k4=j;}}1++;k2++;k3++;k4++; //увеличиваем каждую переменную на 1, т.к. номера автобусов и троллейбусов начинаются с “1”

switch(k2) //выбираем на автобус с каким номером сесть

{

case 1:{outtextxy(200,355,"Вам необходимо сесть на автобус номер1");break;}

… }

if(k1==k3||k2==k4){outtextxy(250,365,"пересадок не требуется");} //в том случае если маршрут прямой, без пересадок

else{ switch(k3) //иначе выбираем на какой троллейбус нужно пересесть

{

case 1:{outtextxy(200,365,"и на станции номер");

itoa(c,M,10);outtextxy(350,365,M);(370,365,"пересесть на троллейбус номер 1");break;}

… }}

}

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

3. Тестирование программы

Рис.6. Заставка

Рис.7. Запрос ввода номера станции отправления

Рис.8. Запрос ввода номера станции назначения

Рис.9. Выделение маршрута красным цветом и вывод информации о необходимом транспорте и пересадке

Рис.10. Выделение маршрута красным цветом и вывод информации о необходимом транспорте и пересадке

Рис.11. В случае, если маршрут прямой и пересадки не требуется

Рис.12. В случае, если маршрут прямой и пересадки не требуется

Заключение

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

На этапе постановки задачи было принято решение о графическом отображении маршрута, о том, какие функции использовать и о создании новых функций. Проведена формальная постановка задачи: информация о входных данных, выходных данных и ограничении на входные данные. Ограничение подразумевает «защиту от дурака», т.е. если пользователем будут введены неправильные данные, программа запросит их снова. Был описан сценарий диалога с пользователем. Описание сцен приведено в таблицах 1, 2, 3, 4.

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

Пути усовершенствования программы:

.     программа выдает информацию только о том, на какой автобус сесть и на каком троллейбусе осуществляется пересадка. Т.е. первым всегда показан вертикальный маршрут, и затем, если требуется пересадка - горизонтальный. Чтобы усовершенствовать программу, необходимо добавить другой алгоритм для реализации маршрута;

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


1.      Страуструп Б. Программирование: принципы и практика использования C++, исправленное издание - М.: Вильямс <http://ru.wikipedia.org/w/index.php?title=%D0%92%D0%B8%D0%BB%D1%8C%D1%8F%D0%BC%D1%81_(%D0%B8%D0%B7%D0%B4%D0%B0%D1%82%D0%B5%D0%BB%D1%8C%D1%81%D1%82%D0%B2%D0%BE)&action=edit&redlink=1>, 2011. - 1248 с.

.        Шилдт <http://ru.wikipedia.org/wiki/%D0%A8%D0%B8%D0%BB%D0%B4%D1%82,_%D0%93%D0%B5%D1%80%D0%B1%D0%B5%D1%80%D1%82> Г. Полный справочник по C++ - 4-е изд. - М.: Вильямс <http://ru.wikipedia.org/w/index.php?title=%D0%92%D0%B8%D0%BB%D1%8C%D1%8F%D0%BC%D1%81_(%D0%B8%D0%B7%D0%B4%D0%B0%D1%82%D0%B5%D0%BB%D1%8C%D1%81%D1%82%D0%B2%D0%BE)&action=edit&redlink=1>, 2011. - 800 с.

.        <http://ru.wikipedia.org/wiki/Программирование>

.        <http://www.codenet.ru/progr/cpp/spr.php>

.        Методические указания для выполнения лабораторных работ по дисциплине «Программирование»

.        Конспект лекций по дисциплине «Программирование»

Приложение

#include<iostream.h>

#include<iomanip.h>

#include<stdlib.h>

#include<conio.h>

#include<graphics.h>[5][5]={1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,

,18,19,20,21,22,23,24,25},i,j;soobsh(int a,int b,int c);zast(void);linii(void);marshrut(int a,int b,int c);()

{ int y1,y2,k1,k2;();:int DRIVER=DETECT,MODE;(&DRIVER,&MODE,"");();(15);(y1<=25&&y1>=1)

{outtextxy(1,1,"Введите номер станции, на которой находитесь");

gotoxy(1,2);<<y1;h;}(1,1,"Введите номер станции, на которой находитесь");

gotoxy(1,2);>>y1;(y1<1 || y1>25)

{clrscr();

goto l;}

h:outtextxy(1,35,"Введите номер станции назначения");

gotoxy(1,4);>>y2;(y2<1 || y2>25)

{clrscr();l;}(i=0;i<5;i++)(j=0;j<5;j++)

{ if(A[i][j]==y1) {k1=j;}(A[i][j]==y2){k2=i;}

}();per=A[k2][k1];(y1,y2,per);(y1,y2,per);();();0;

}linii()

{setcolor(7);(1,7);(90,100,320,100);(90,150,320,150);(90,200,320,200);(90,250,320,250);(90,300,320,300);(100,85,100,315);(150,85,150,315);(200,85,200,315);(250,85,250,315);(300,85,300,315);A[5];k=1;(int i=0;i<5;i++)(int j=0;j<5;j++)

{pieslice(100+i*50,100+j*50,0,360,2);(k,A,10);(105+j*50,90+i*50,A);k++; }=1; setcolor(2);(i=0;i<5;i++){ itoa(k,A,10);(105+i*50,50,A);++;}=1; setcolor(9);(i=0;i<5;i++){ itoa(k,A,10);(55,90+i*50,A);++;}(2);(1,2);(1,355,10,360);(15);(15,355,"номера автобусов");(9);(1,9);(1,365,10,370);(15);(15,365,"номера тро ллейбусов"); }marshrut(int a,int b,int c)

{ int x1,y1,x2,y2,x3,y3;(i=0;i<5;i++)(j=0;j<5;j++){ if(A[i][j]==a) x1=i,y1=j;}(i=0;i<5;i++)(j=0;j<5;j++){ if(A[i][j]==b) x2=i,y2=j;}(i=0;i<5;i++)(j=0;j<5;j++){ if(A[i][j]==c) x3=i,y3=j;}(4);(100+y1*50,100+x1*50,100+y3*50,100+x3*50);(100+y3*50,100+x3*50,100+y2*50,100+x2*50);}soobsh(int a, int b,int c)

{char M[5];k1,k2,k3,k4;(14);(i=0;i<5;i++)(j=0;j<5;j++){if (A[i][j]==a){k1=i;k2=j;}(A[i][j]==b){k3=i;k4=j;}}++;k2++;k3++;k4++;(k2)

{

case 1:{outtextxy(200,355,"Вам необходимо сесть на автобус номер1");break;}

case 2:{outtextxy(200,355,"Вам необходимо сесть на автобус номер 2");break;}

case 3:{outtextxy(200,355,"Вам необходимо сесть на автобус номер 3");break;}

case 4:{outtextxy(200,355,"Вам необходимо сесть на автобус номер 4");break;}

case 5:{outtextxy(200,355,"Вам необходимо сесть на автобус номер 5");break;}

}

if(k1==k3||k2==k4){outtextxy(250,365,"пересадок не требуется");}

else{ switch(k3)

{case 1:{outtextxy(200,365,"и на станции номер");

itoa(c,M,10);outtextxy(350,365,M);(370,365,"пересесть на троллейбус номер 1");break;}

case 2:{outtextxy(200,365," и на станции номер ");

itoa(c,M,10);outtextxy(350,365,M);(370,365,"пересесть на троллейбус номер 2");break;}

case 3:{outtextxy(200,365," и на станции номер ");

itoa(c,M,10);outtextxy(350,365,M);(370,365,"пересесть на троллейбус номер 3");break;}

case 4:{outtextxy(200,365," и на станции номер ");

itoa(c,M,10);outtextxy(350,365,M);(370,365,"пересесть на троллейбус номер 4");break;}

case 5:{outtextxy(200,365," и на станции номер ");

itoa(c,M,10);outtextxy(350,365,M);(370,365,"пересесть на троллейбус номер 5");break;}

} }}zast(void)

{ textcolor(15);clrscr();<<setw(50)<<setiosflags(ios::right)<<"ЭЛЕКТРОННЫЙ СПРАВОЧНИК\n";<<setw(65)<<"МАРШРУТОВ ДВИЖЕНИЯ ОБЩЕСТВЕННОГО ТРАНСПОРТА ПО ГОРОДУ\n\n";

cout<<"\tАвтор: ст-ка гр. У-125 ФКТВТиЭ Магомедова З.Б.\n\n";

cout<<"\tПрограмма для курсовой работы по дисциплине \"Программирование\"\n\n";

cout<<"\n\tДля того, чтобы выяснить, транспорт с каким номером Вам нужен и \nинформацию о пересадке, необходимо ввести номер станции, на которой Вы \nнаходитесь в данный момент и номер станции назначения.";

cout<<"\n\nДля перехода к окну маршрутов нажмите любую клавишу.\n";

getch();}

Похожие работы на - Разработка программы 'Электронный справочник маршрутов движения общественного транспорта по городу'

 

Не нашли материал для своей работы?
Поможем написать уникальную работу
Без плагиата!