курсач. Бд проката автомобилей
Скачать 0.97 Mb.
|
5. Разработка алгоритмов5.1 Алгоритм программы на Pascal5.2 Алгоритм чтения из файла 5.3 Алгоритм вывода на экран 5.4 Алгоритм записи в файл 5.5 Алгоритм добавления новой записи 5.6 Алгоритм удаления записи 5.8. Алгоритм работы Фильтра 3Остальные фильтры работают аналогично. 6. Разработка программ6.1 Текст программы на языке Pascal:Основной файл program BD_Prokata_avtomobiley; uses crt, menu, rd, viv, wr, add, del,fil1,fil2,fil3,fil4,fil5; var p: byte; //номер текущей строки в меню sp: byte; //номер текущей строки в подменю c: char; //считанный символ begin read_tables; p:=0; textbackground(15); textcolor(0); main_menu(p); repeat repeat c:=readkey; //считывание символа until c in [#13,#38,#40,#27]; case c of #38: //стрелка вверх begin if (p = 0) then continue; p:=p-1; main_menu(p); end; #40: //стрелка вниз begin if (p = 11) then continue; p:=p+1; main_menu(p); end; #13: //enter begin case p of 0..6: //работа с подменю для таблиц begin sp:=0; sub_menu(sp); repeat repeat c:=readkey; //считывание символа until c in [#13,#38,#40,#08,#27]; case c of #38: //стрелка вверх begin if (sp = 0) then continue; sp:=sp-1; sub_menu(sp); end; #40: //стрелка вниз begin if (sp = 3) then continue; sp:=sp+1; sub_menu(sp); end; #13: //enter begin case sp of 0: print_table(p); //вывод таблицы на экран 1: add_record(p); //добавление записи 2: delete_record(p); //удаление записи 3: write_table(p); //запись таблицы в файл end; sub_menu(sp); end; #27: exit; //выход из программы end; until (c = #08); //backspace end; 7: f1; 8: f2; 9: f3; 10: f4; 11: f5; end; main_menu(p); end; end; until (c = #27); //end end. Модуль меню unit menu; interface procedure main_menu(pm:integer); //выводит основное меню на экран procedure sub_menu(sm: integer); //выводит подменю на экран implementation uses crt; procedure main_menu(pm:integer); //выводит основное меню на экран type am = array [0..11] of string; const items: am=('Сотрудники','Должности','Марки автомобилей','Дополнительные услуги','Автомобили','Клиенты','Прокат','Фильтр 1','Фильтр 2','Фильтр 3','Фильтр 4','Фильтр 5'); var i: byte; //счетчик begin clrscr; for i:= 0 to 11 do begin if (i = pm) then textcolor(12); writeln(items[i]); if (i = pm) then textcolor(0); end; end; procedure sub_menu(sm: integer); //выводит подменю на экран type asub = array [0..3] of string; const sub_items: asub=('Вывод на экран','Добавление записи','Удаление записи','Запись в файл'); var i: byte; //счетчик begin clrscr; for i:= 0 to 3 do begin if (i = sm) then textcolor(12); writeln(sub_items[i]); if (i = sm) then textcolor(0); end; end; end. Модуль типов unit types; //структуры interface type sotrudniki=record nosot: byte; fio: string[45]; age: byte; pol: string[1]; adres: string[50]; phone: string[13]; pasport: string[11]; nodol: byte; end; doljnosti=record nodol: byte; dolname: string[20]; oklad: integer; obyazanosti: string[30]; trebovaniya: string[30]; end; markiavto=record nomark: byte; markname: string[10]; techchar: string[30]; opisanie: string[30]; end; dopuslugi=record nousl: byte; uslname: string[10]; opisanie: string[30]; uslcena: string[10]; end; avtomobili=record noavto: byte; nomark: byte; regnum: string[10]; cuznum: string[10]; dvignum: string[10]; godvip: string[4]; probeg: string[10]; avtcena: string[10]; daycena: string[10]; dto: string[10]; nosot: byte; specmark: string[30]; vozv: string[5]; end; clients=record nocli: byte; fio: string[45]; pol: string[1]; dr: string[10]; adres: string[25]; phone: string[13]; pasport: string[11]; end; prokat=record datavid: string[10]; srok: string[10]; datavoz: string[10]; noavto: byte; nocli: byte; nousl1: byte; nousl2: byte; nousl3: byte; price: longint; oplata: string[5]; nosot: byte; end; var sotmas: array [0..9] of sotrudniki; //массив с данными таблицы Сотрудники sot: byte; //текущее кол-во записей в таблице Сотрудники dolmas: array [0..4] of doljnosti; //массив с данными таблицы Должности dol: byte; //текущее кол-во записей в таблице Должности markmas: array [0..4] of markiavto; //массив с данными таблицы Марки автомобилей mark: byte; //текущее кол-во записей в таблице Марки автомобилей uslmas: array [0..4] of dopuslugi; //массив с данными таблицы Дополнительные услуги usl: byte; //текущее кол-во записей в таблице Дополнительные услуги avtomas: array [0..9] of avtomobili; //массив с данными таблицы Автомобили avto: byte; //текущее кол-во записей в таблице Автомобили climas: array [0..4] of clients; //массив с данными таблицы Клиенты cli: byte; //текущее кол-во записей в таблице Клиенты prokmas: array [0..9] of prokat; //массив с данными таблицы Прокат prok: byte; //текущее кол-во записей в таблице Прокат implementation end. Модуль чтения файлов unit rd; interface procedure read_tables; //считывание таблиц implementation uses types,crt; var FILE1: file of sotrudniki; FILE2: file of doljnosti; FILE3: file of markiavto; FILE4: file of dopuslugi; FILE5: file of avtomobili; FILE6: file of clients; FILE7: file of prokat; procedure read_tables; //считывание таблиц begin sot:=0; dol:=0; mark:=0; usl:=0; avto:=0; cli:=0; prok:=0; if FileExists('Сотрудники.txt') then begin assign(FILE1,'Сотрудники.txt'); reset(FILE1); while not eof(FILE1) do begin read(FILE1,sotmas[sot]); sot:=sot+1; end; close(FILE1); end; if FileExists('Должности.txt') then begin assign(FILE2,'Должности.txt'); reset(FILE2); while not eof(FILE2) do begin read(FILE2,dolmas[dol]); dol:=dol+1; end; close(FILE2); end; if FileExists('Марки автомобилей.txt') then begin assign(FILE3,'Марки автомобилей.txt'); reset(FILE3); while not eof(FILE3) do begin read(FILE3,markmas[mark]); mark:=mark+1; end; close(FILE3); end; if FileExists('Дополнительные услуги.txt') then begin assign(FILE4,'Дополнительные услуги.txt'); reset(FILE4); while not eof(FILE4) do begin read(FILE4,uslmas[usl]); usl:=usl+1; end; close(FILE4); end; if FileExists('Автомобили.txt') then begin assign(FILE5,'Автомобили.txt'); reset(FILE5); while not eof(FILE5) do begin read(FILE5,avtomas[avto]); avto:=avto+1; end; close(FILE5); end; if FileExists('Клиенты.txt') then begin assign(FILE6,'Клиенты.txt'); reset(FILE6); while not eof(FILE6) do begin read(FILE6,climas[cli]); cli:=cli+1; end; close(FILE6); end; if FileExists('Прокат.txt') then begin assign(FILE7,'Прокат.txt'); reset(FILE7); while not eof(FILE7) do begin read(FILE7,prokmas[prok]); prok:=prok+1; end; close(FILE7); end; end; end. Модуль сохранения таблиц unit wr; interface procedure write_table(n: byte); //запись таблицы в файл implementation uses types,crt; var FILE1: file of sotrudniki; FILE2: file of doljnosti; FILE3: file of markiavto; FILE4: file of dopuslugi; FILE5: file of avtomobili; FILE6: file of clients; FILE7: file of prokat; procedure write_table(n: byte); //запись таблицы в файл var i:integer; begin clrscr; writeln('Данные записываются...'); case n of 0: begin assign(FILE1,'Сотрудники.txt'); rewrite(FILE1); for i:=1 to sot do write(FILE1,sotmas[i-1]); close(FILE1); end; 1: begin assign(FILE2,'Должности.txt'); rewrite(FILE2); for i:=1 to dol do write(FILE2,dolmas[i-1]); close(FILE2); end; 2: begin assign(FILE3,'Марки автомобилей.txt'); rewrite(FILE3); for i:=1 to mark do write(FILE3,markmas[i-1]); close(FILE3); end; 3: begin assign(FILE4,'Дополнительные услуги.txt'); rewrite(FILE4); for i:=1 to usl do write(FILE4,uslmas[i-1]); close(FILE4); end; 4: begin assign(FILE5,'Автомобили.txt'); rewrite(FILE5); for i:=1 to avto do write(FILE5,avtomas[i-1]); close(FILE5); end; 5: begin assign(FILE6,'Клиенты.txt'); rewrite(FILE6); for i:=1 to cli do write(FILE6,climas[i-1]); close(FILE6); end; 6: begin assign(FILE7,'Прокат.txt'); rewrite(FILE7); for i:=1 to prok do write(FILE7,prokmas[i-1]); close(FILE7); end; end; clrscr; writeln('Данные записаны, нажмите любую клавишу для продолжения'); readkey; end; end. Модуль удаления записи unit del; interface procedure delete_record(n: byte); //удаление записи implementation uses types,crt; procedure delete_record(n: byte); //удаление записи var x: byte; //номер записи подлежащей удалению i: byte; //счетчик begin clrscr; write('Введите номер записи, которую желаете удалить: '); readln(x); case n of 0: begin if (x<=sot) and (x>0) then begin if (x = sot) then sot:=sot-1 else for i:= x to sot do sotmas[i-1]:=sotmas[i]; sot:=sot-1; writeln('Запись удалена, нажмите любую клавишу для продолжения'); end else writeln('Записи с таким номером не существует'); end; 1: begin if (x<=dol) and (x>0) then begin if (x = dol) then dol:=dol-1 else for i:= x to dol do dolmas[i-1]:=dolmas[i]; dol:=dol-1; writeln('Запись удалена, нажмите любую клавишу для продолжения'); end else writeln('Записи с таким номером не существует'); end; 2: begin if (xand (x>0) then begin if (x = mark) then mark:=mark-1 else for i:= x to mark do markmas[i-1]:=markmas[i]; mark:=mark-1; writeln('Запись удалена, нажмите любую клавишу для продолжения'); end else writeln('Записи с таким номером не существует'); end; 3: begin if (x begin if (x = usl) then usl:=usl-1 else for i:= x to usl do uslmas[i-1]:=uslmas[i]; usl:=usl-1; writeln('Запись удалена, нажмите любую клавишу для продолжения'); end else writeln('Записи с таким номером не существует'); end; 4: begin if (x begin if (x = avto) then avto:=avto-1 else for i:= x to avto do avtomas[i-1]:=avtomas[i]; avto:=avto-1; writeln('Запись удалена, нажмите любую клавишу для продолжения'); end else writeln('Записи с таким номером не существует'); end; 5: begin if (x begin if (x = cli) then cli:=cli-1 else for i:= x to cli do climas[i-1]:=climas[i]; cli:=cli-1; writeln('Запись удалена, нажмите любую клавишу для продолжения'); end else writeln('Записи с таким номером не существует'); end; 6: begin if (x and (x>0) then begin if (x = prok) then prok:=prok-1 else for i:= x to prok do prokmas[i-1]:=prokmas[i]; prok:=prok-1; writeln('Запись удалена, нажмите любую клавишу для продолжения'); end else writeln('Записи с таким номером не существует'); end; end; readkey; end; end. Модуль добавления записи unit add; interface procedure add_record(n: byte); //добавление записи implementation uses types,crt; procedure add_record(n: byte); //добавление записи begin clrscr; |