Волжский университет имени В.Н. Татищева
Кафедра «Информатика и системы управления»
Специальность: 220100 «Вычислительные машины, комплексы системы и сети»
Задание
на курсовой проект по дисциплине
«Основы технологии программирования»
Студенту________________________________________________________
Группа__________________________________________________________
Тема проекта____________________________________________________
Календарный график задания_______________________________________
Содержание задания
При продаже билетов регистрируют пассажиров.
Информацию о каждом пассажире вводится в диалоге по запросам программы.
Информация о каждом пассажире состоит из следующих полей :
-Фамилия, имя, отчество;
-Номер паспорта;
-Пункт назначения;
-Номер рейса.
Сведения о пассажирах сохраняются в файле airbase.dat ,состоящем из
отдельных записей ,где одна запись хранит всю информацию об одном
пассажире.
Программа содержит следующие процедуры и функции;
-Продажа билета (регистрирует нового пассажира);
-Найти пассажира;
-Удалить пассажира;
-Выход;
Указанные процедуры и функции выбираются из меню.
В пункте ПРОДАЖА БИЛЕТА - вводится Ф.И.О , номер паспорта , рейс, т.е
регистрируется новый
пассажир , информация о нем вносится в базу данных.
В пункте НАЙТИ - выводится информация о пассажире.
В пункте УДАЛИТЬ ПАССАЖИРА - по введенной Ф.И.О информация о данном
пассажире удаляется из базы данных.
ВЫХОД - выход из программы.
Руководитель курсовой работы
Студент
Составитель:
Старший преподаватель ___________________________Ахмедханлы Д.М.
Заведующий кафедрой ИиСУ __________________________Краснов С.В.
Декан ФииТ _________________________________________Краснов С.В.
Описание предметной области
Ввод данных в программу осуществляется в диалоге по запросам программы.
Оператор программы передвигается по пунктам меню и инициирует запуск той
или иной процедуры нажатием клавиш “Enter”, “стрелка вверх”, ”стрелка
вниз”.
Программа начинается с вывода меню на экран, меню состоит
Меню состоит из семи пунктов, расположенных в следующей последовательности:
. ОФОРМЛЕНИЕ НОГОГО ПАССАЖИРА
. ВЫВЕСТИ СПИСОК ВСЕХ ПАССАЖИРОВ
. УДАЛИТЬ ИНФОРМАЦИЮ О ПАССАЖИРЕ
. НАЙТИ ПАССАЖИРА
. ОЧИСТИТЬ СПИСОК
. ВЫХОД
Употребление процедур пунктов меню.
Процедура “ВЫВЕСТИ СПИСОК ВСЕХ ПАССАЖИРОВ” используется для просмотра всех пассажиров всех рейсов.
Процедура “УДАЛИТЬ ИНФОРМАЦИЮ О ПАССАЖИРЕ” используется для удаления пассажира. Сначала вводится фамилия пассажира, которого необходимо удалить, фамилия вводиться с клавиатуры. Если такая фамилия есть, то программа спрашивает подтверждение для удаления “Пассажир найден, удалить его д/н” если будет нажата клавиша “д”, то пассажир будет удален из базы данных, если же “н”, то удаление будет отменено.
Процедура “НАЙТИ ПАССАЖИРА” используется для удобства поиска пассажира.
Фамилия вводится с клавиатуры. При нахождении фамилии пассажира выводятся
его данные: фамилия, номер паспорта, номер рейса и направление. При не
нахождении фамилии выводится на экран сообщение “Пассажир отсутствует!”.
Процедура “ОЧИСТИТЬ СПИСОК” удаляет все фамилии из списка. При входе в эту процедуру появляется сообщение “Вы действительно хотите удалить базу данных о пассажирах (д/н)”, если будет нажата клавиша “д”, то база данных будет удалена, если же “н”, то удаление будет отменено.
Описание алгоритма задачи
Сначала, подключаем модуль crt- позволяющий проще управлять режимами
экрана, расширенными кодами клавиатуры и цветом.
Вводим константы stand – цвет невыделенного пункта меню и sel – цвет
выделенного пункта меню, а так же n – количество пунктов.
Затем идет описание записей файла «train.dat.»:pas, nomertown– переменные
Ф.И.О пассажира и номер – направление поезда, имеющие строковый тип, pasp,
nomertrain – переменные номера паспорта и номера поезда, имеющие целый тип.
Теперь идёт описание записей файла «railst.dat»:time, model, nrnap – время отхода, тип поезда, номер – направление, price, chpm – цена билета, число посадочных мест.
Глобальные переменные: массивы menu, menu1 строкового типа с
количеством элементов от 1 до n, хранят названия пунктов меню и подменю;
переменная целого типа punkt обозначает номер выделенного пункта;
символьная переменная ch выведенный символ; x и y целого типа - координаты
первой строки меню; j, j1 - параметры цикла; ff и w файловые переменные
«airport.dat» и «airbase.dat» соответственно, аналогично buf и buv –
переменные компонент файлов;dlprov, nrnap – переменная проверки и номер -
направление; mas, mas1 – массивы для “tairport.dat”, “airbase.dat”;
символьная переменная k определяет условия да/нет в операторах if…then…else
; f–флажок.
Программа содержит 14 процедур.
Две из них «menutoscr» и «menutoscr1» отвечают за вывод меню и подменю
на экран. Процедуры содержат описания одной локальной переменной i
параметра цикла. Начинаются процедуры с очистки экрана – clrscr. Далее идет
цикл for…to… do, выводящий меню на экран.
В циклах, с помощью процедуры gotoxy, курсор каждый раз перемещается на
позицию вниз, где и выводится заголовок соответствующих пунктов меню и
подменю.
Вводим переменную textattr, которая отвечает за цвет фона и символов.
Присваиваем ей значение константы sel, то есть задаем цвет выделенного
пункта и переводим курсор на текущий пункт. Выделяем его и задаем цвет
невыделенного пункта.
Процедура «new_pass» вводит нового пассажира. Начинаем процедуру с описания
локальных переменных. Обнуляем локальный флажок mozno, потом происходит
очистка экрана – clrscr. Открываем для записи данных нового пассажира файл
«airport.dat». Здесь вводиться: Ф.И.О, номер паспорта.
Процедура «maspas» - Предназначена для формирования из пассажиров массива, для последующего их удаления. Открываем уже существующий файл train.dat Присваиваем переменной j-1. А в цикле постусловия repeat…until формируем из пассажиров массив, который нужен для удаления пассажиров.
Процедура «delete_pass» начинается с очистки экрана – clrscr, обнуляем
флажок. Потом вводится фамилия, которую нужно удалить. В цикле repeat…until оператор условия if…then выполняется (пассажир найден), то происходит
удаление пассажира, если пассажир был успешно удалён, то появляется
сообщение- “Пассажир”----” был удалён!” и флажку присваивается 1. Иначе
присваивается-2. В следующем if…then файл обновляется, и массив без
пассажира записывается в файл. Далее создаётся новый файл с этим же именем.
В цикле с постусловием repeat…until переменной buf присваивается i –тое
значение элемента массива. Файл закрывается.
Когда флажок не равняется 1, то в цикле if…then печатается сообщение
“Пассажир не найден!”. Если же флажок равняется 2, то печатается сообщение
”Удаление отменено!”.Delay - используется для задержки сообщения об
удалении.
Процедура «search_pass» предназначена для поиска пассажира в базе данных. Начинаем процедуру с описания локальных переменных, потом происходит очистка экрана – clrscr. Используем оператор reset для открытия уже существующего файла. В цикле repeat…until читается информация. В условном операторе if… then читается введённые Ф.И.О, и распечатываются данные о конкретном пассажире (т.е. Ф.И.О, ном. паспорта, ном. рейса - пункт назначения). Закрываем файл. После этого флажку присваивается значение-1. Если флажок равняется -0 , то печатается сообщение “Пассажир не найден!”
Процедура «new_airbase» производит полную очистку базы данных о
пассажирах. Начинаем процедуру с очистки экрана – clrscr. В операторе
if…then задаём условие очистки базы данных. Выводим сообщение “Вы
действительно хотите очистить базу данных о пассажирах (д/н)?-”.
Соответственно, переменной k присваивается одно из значений «д» или «н».
При k= «д», с помощью процедур rewrite, данные в файлах удаляются. В
противном случае выход из процедуры. После этого выводится ее на экран
сообщение- “База Аэропорта очищена!”.
Процедура «search_base» предназначена для поиска рейса в базе данных.
Начинаем процедуру с очистки экрана – clrscr. Вводится номер рейса и
направление через тире. Используем оператор reset для открытия уже
существующего файла. В цикле repeat…until читается информация. В условном
операторе if… then читается введённый номер рейса и направление, и
распечатываются данные об рейсе (т.е номер рейса - направление, время
отхода, цена билета (в руб.), тип поезда). Закрываем файл. После этого
флажку присваивается значение-1. Если флажок равняется -0 , то печатается
сообщение “Рейс не найден!”
Процедура «new_base» производит полную очистку базы данных о рейсах.
Начинаем процедуру с очистки экрана – clrscr. В операторе if…then задаём
условие очистки базы данных о рейсах. Выводим сообщение “Вы действительно
хотите очистить базу данных расписания (д/н)?-“. Соответственно, переменной
k присваивается одно из значений «д» или «н». При k= «д», с помощью
процедур rewrite, данные в файлах удаляются. В противном случае выход из
процедуры. После этого выводится ее на экран сообщение- “База расписания
Аэропорта очищена!”.
Основная программа так же начинается с очистки экрана – clrscr.
Определяем имена файлов «Airport.dat», «Airbase.dat» и связываем их с
файловыми переменными процедурой assign.
Задаём названия пунктов меню. Переменной номера выделенного пункта
присваиваем значение единицы. Определяем координаты первой строки меню.
Переменной цвета символов и фона присваиваем значение невыделенного пункта.
Обращаемся к процедуре menutoscr. Входим в цикл передвижения по меню
repeat…until ch=chr(27) (до обращения к пункту «Выход»).
В цикле считываем код нажатой клавиши. С помощью условного оператора
входим в оператор выбора кодов клавиш. Если нажата стрелка вниз, то с
помощью процедуры gotoxy, оператора write, констант sel и stand выделяем
необходимый пункт меню. Аналогичные операции проводим при нажатии стрелки
вверх. При нажатии Enter в операторе выбора открывается процедура
необходимого пункта. В конце цикла обращаемся к процедуре Menutoscr.
Аналогичные операции выполняются и для процедуры Menutoscr1.
В конце программы закрываем файлы «Airport.dat» и «Airbase.dat».
Приложения
Листинги программы
Распечатка результатов решения задачи по данным контрольного примера
program kursovik; uses crt; type airport=record fio,city:string[30]; pasp,nomerreisa:string[6]; end; airbase=record time,model,kuda:string[15]; price,klass,numreis:integer; end; const norm=$20;цвет невыделенного пункта sel=$50; цвет выделенного пункта n=7; var menu,menu1:array[1..n] of string[30]; название пунктов меню mas:array[1..50] of airport; mas1:array[1..50] of airbase; punkt:integer;номер выделенного пункта ch:char;введенный символ j,j1:integer;переменная содержащая общее число пассажиров, число рейсов x,y,n1:integer;координаты первой строки меню procedure Menutoscr;вывод меню на экран var i:integer; begin punkt:=1; clrscr; for i:=1 to n do begin gotoxy(x,y+i); writeln(menu[i+1]); end; textattr-предопределенная переменная,отвечающая за цвет фона и символов textattr:=sel; gotoxy(x,y+punkt-1); write(menu[punkt]); выделим строку меню textattr:=norm; end; procedure Menutoscr1;вывод меню на экран var i:integer; begin punkt:=1; clrscr; for i:=1 to n1 do begin gotoxy(x,y+i); writeln(menu1[i+1]); end; textattr-предопределенная переменная,отвечающая за цвет фона и символов textattr:=sel; gotoxy(x,y+punkt-1); write(menu1[punkt]); выделим строку меню textattr:=norm; end;
procedure new_pass; var ff:file of airport; buf:airport;
ch,k:char;
begin clrscr; assign(ff,'airport.dat'); reset(ff); seek(ff,filesize(ff)); writeln(' "Оформление нового пассажира"'); writeln(' Введите фио--------------'); writeln(' Введите номер паспорта---'); writeln(' Введите пункт назначения-'); writeln(' Введите номер рейса------'); writeln(' Подтверждение д/н--------'); with buf do begin gotoxy(29,2);readln(fio); gotoxy(29,3);readln(pasp); gotoxy(29,4);readln(city); gotoxy(29,5);readln(nomerreisa); end;
gotoxy(29,6);readln(k); if (k='д') or (k='Д') then begin clrscr; write(ff,buf); gotoxy(30,12); write('Пассажир записан в базу данных!'); end else begin clrscr; gotoxy(30,12); write('Запись в базу отменена!'); end;
delay(9999); delay(5000); until (ch=chr(162)) and (ch=chr(130));
close(ff);
end; procedure print_pass; var ff:file of airport; buf:airport; ch,k:char; et:integer; begin clrscr; assign(ff,'airport.dat'); reset(ff); writeln(' Список пассажиров:'); et:=1; repeat read(ff,buf); writeln(' -',buf.fio); if et=23 then readln; et:=et+1; until eof(ff); close(ff); readln; end; procedure maspas; var buf:airport; ff:file of airport; begin assign(ff,'airport.dat'); reset(ff); j:=1; repeat read(ff,buf); mas[j]:=buf; j:=j+1; until eof(ff); j:=j-1; close(ff); end; procedure delete_pass; var ff:file of airport; i,i1,f:integer; buf:airport; k:char; name:string[30]; begin clrscr; writeln(' Удалениe информации о пассажире:'); writeln(' Введите Ф.И.О. пассажира, которого хотите удалить из базы данных'); write(' -');readln(name); i:=1; f:=0; repeat if mas[i].fio=name then begin gotoxy(30,12);write('Пассажир найден, удалить его
(д/н)-'); readln(k); if (k='д') or (k='Д') then begin for i1:=i to j-1 do mas[i1]:=mas[i1+1]; j:=j-1; gotoxy(30,12); write('Пассажир-"',name,'"-был удалён! '); f:=1; end else begin i:=j; f:=2; end; end; i:=i+1; until (i=j+1) or (f=1); if f=1 then begin assign(ff,'airport.dat'); rewrite(ff); i:=1; repeat buf:=mas[i]; write(ff,buf); i:=i+1; until i=j+1; close(ff); end else begin gotoxy(30,12); if f=0 then writeln('Пассажир не найден! '); end; if f=2 then writeln('Удаление отменено! '); delay(9999); delay(5000); end; procedure search_pass; var ff:file of airport; i,i1,f:integer; buf:airport; k:char; name:string[30]; begin clrscr; writeln(' Поиск информации о пассажире:'); writeln(' Введите Ф.И.О. пассажира, которого хотите найти'); write(' -');readln(name); i:=1; f:=0; assign(ff,'airport.dat'); reset(ff); repeat read(ff,buf); if buf.fio=name then begin clrscr; writeln(' Информация о пассажире:'); writeln(' Ф.И.О.-----------'); writeln(' Номер паспорта---'); writeln(' Пункт назначения-'); writeln(' Номер рейса------'); gotoxy(22,2);writeln(buf.fio); gotoxy(22,3);writeln(buf.pasp); gotoxy(22,4);writeln(buf.city); gotoxy(22,5);writeln(buf.nomerreisa); f:=1; readln; end; until eof(ff); close(ff); if f=0 then begin writeln('Пассажир не найден!'); delay(9999); delay(5000); end; end; procedure new_airport; var ff:file of airport; k:char;
begin clrscr; gotoxy(36,12); textbackground(red); textcolor(blink); writeln('ВНИМАНИЕ!'); textattr:=norm; gotoxy(10,13); write('Вы действительно хотите очистить базу данных о пассажирах
(д/н)?-'); readln(k); if (k='д') or (k='Д') then begin clrscr; assign(ff,'airport.dat'); rewrite(ff); gotoxy(30,12); writeln('База АЭРОПОРТА очищена!'); close(ff); delay(9999); delay(5000); end; end; procedure new_reis; var ff:file of airbase; buf:airbase; ch,k:char;
begin clrscr; assign(ff,'airbase.dat'); reset(ff); seek(ff,filesize(ff)); writeln(' "Расписание вылетов:"'); writeln(' Номер рейса--------------'); writeln(' Направление--------------'); writeln(' Время вылета(моск)-------'); writeln(' Цена билета(руб)---------'); writeln(' Тип самолета-------------'); writeln(' Класс(1 или 2)-----------'); writeln(' Подтверждение д/н--------'); with buf do begin gotoxy(29,2);readln(numreis); gotoxy(29,3);readln(kuda); gotoxy(29,4);readln(time); gotoxy(29,5);readln(price); gotoxy(29,6);readln(model); gotoxy(29,7);readln(klass); end;
gotoxy(29,8);readln(k); if (k='д') or (k='Д') then begin clrscr; write(ff,buf); gotoxy(30,12); write('Рейс записан в базу данных!'); end else begin clrscr; gotoxy(30,12); write('Запись в базу отменена!'); end;
delay(9999); delay(5000); until (ch=chr(162)) and (ch=chr(130));
close(ff);
end; procedure print_reis; var ff:file of airbase; buf:airbase; ch,k:char; et:integer; begin clrscr; assign(ff,'airbase.dat'); reset(ff); writeln(' Расписание вылетов(время московское):'); et:=1; repeat read(ff,buf); writeln(' Рейс-',buf.numreis,': Самара-',buf.kuda,'; ',buf.time,';
Стоимость билета:',buf.price,'(рублей)'); if et=23 then readln; et:=et+1; until eof(ff); close(ff); readln; end; procedure masbase; var buf:airbase; ff:file of airbase; begin assign(ff,'airbase.dat'); reset(ff); j1:=1; repeat read(ff,buf); mas1[j1]:=buf; j1:=j1+1; until eof(ff); j1:=j1-1; close(ff); end; procedure delete_base; var ff:file of airbase; i,i1,f:integer; buf:airbase; k:char; nreis:integer; begin clrscr; writeln(' Удаление рейса из расписания:'); writeln(' Введите номер рейса,который хотите удалить из расписания'); write(' -');readln(nreis); i:=1; f:=0; repeat if (mas1[i].numreis=nreis) then begin gotoxy(30,12);write('Рейс найден, удалить его (д/н)-
'); readln(k); if (k='д') or (k='Д') then begin for i1:=i to j1-1 do mas1[i1]:=mas1[i1+1]; j1:=j1-1; gotoxy(30,12); write('Рейс номер-"',nreis,'"- был удалён! '); f:=1; end else begin i:=j; f:=2; end; end; i:=i+1; until (i=j1+1) or (f=1); if f=1 then begin assign(ff,'airbase.dat'); rewrite(ff); i:=1; repeat buf:=mas1[i]; write(ff,buf); i:=i+1; until i=j1+1; close(ff); end else begin gotoxy(30,12); if f=0 then writeln('Рейс не найден! '); end; if f=2 then writeln('Удаление отменено! '); delay(9999); delay(5000); end; procedure search_base; var ff:file of airbase; i,i1,f:integer; buf:airbase; k:char; nreis:integer; begin clrscr; writeln(' Поиск рейса в расписании:'); writeln(' Введите номер рейса, который хотите найти'); write(' -');readln(nreis); i:=1; f:=0; assign(ff,'airbase.dat'); reset(ff); repeat read(ff,buf); if buf.numreis=nreis then begin clrscr; writeln(' Номер рейса--------------'); writeln(' Направление--------------'); writeln(' Время вылета(моск)-------'); writeln(' Цена билета(руб)---------'); writeln(' Тип самолета-------------'); writeln(' Класс(1 или 2)-----------'); gotoxy(29,1);writeln(buf.numreis); gotoxy(29,2);writeln(buf.kuda); gotoxy(29,3);writeln(buf.time); gotoxy(29,4);writeln(buf.price); gotoxy(29,5);writeln(buf.model); gotoxy(29,6);writeln(buf.klass); f:=1; readln; end; until eof(ff); close(ff); if f=0 then begin writeln('Рейс не найден!'); delay(9999); delay(5000); end; end; procedure new_base; var ff:file of airbase; k:char;
begin clrscr; gotoxy(36,12); textbackground(red); textcolor(blink); writeln('ВНИМАНИЕ!'); textattr:=norm; gotoxy(10,13); write('Вы действительно хотите очистить базу данных расписания
(д/н)?-'); readln(k); if (k='д') or (k='Д') then begin clrscr; assign(ff,'airbase.dat'); rewrite(ff); gotoxy(30,12); writeln('База расписания АЭРОПОРТА очищена!'); close(ff); delay(9999); delay(5000); end; end; основная программа
Begin clrscr;
menu[1]:='ОФОРМЛЕНИЕ НОВОГО ПАССАЖИРА'; menu[2]:='ВЫВЕСТИ СПИСОК ПАССАЖИРОВ'; menu[3]:='УДАЛИТЬ ИНФОРМАЦИЮ О ПАССАЖИРЕ'; menu[4]:='НАЙТИ ПАССАЖИРА'; menu[5]:='ОЧИСТИТЬ СПИСОК'; menu[6]:='ВЫХОД'; menu[7]:='ПРОСМОТР БАЗЫ';
menu1[1]:='ЗАПИСЬ НОВОГО РЕЙСА'; menu1[2]:='ПОКАЗАТЬ РАСПИСАНИЕ'; menu1[3]:='УДАЛИТЬ РЕЙС'; menu1[4]:='ПОИСК РЕЙСА'; menu1[5]:='ОЧИСТИТЬ РАСПИСАНИЕ'; menu1[6]:='ВЕРНУТЬСЯ В ГЛАВНОЕ МЕНЮ'; punkt:=1;x:=30;y:=8;textattr:=norm;n1:=6;
Menutoscr; repeat ch:=Readkey; if ch=chr(0) then begin ch:=ReadKey; case ch of chr(80): стрелка вниз if punkt