Студопедия Главная Случайная страница Обратная связь

Разделы: Автомобили Астрономия Биология География Дом и сад Другие языки Другое Информатика История Культура Литература Логика Математика Медицина Металлургия Механика Образование Охрана труда Педагогика Политика Право Психология Религия Риторика Социология Спорт Строительство Технология Туризм Физика Философия Финансы Химия Черчение Экология Экономика Электроника

Код програми. uses crt,dos; {used modules}





Program lab4_2;

uses crt,dos; {used modules}

type rec=record {record with case variant}

author, {author of work}

title:string[20]; {name of production}

genre:string[10]; {genre of work}

case tag:integer of

1:(capacity:string[10]); {prose}

2:(poetsize:string[8]); {poetry}

3:(trend:string[10]) {painting}

end; {end of record}

var opwork:rec; {variable rec type}

f:file of rec; {file vaiable}

i,j,p, {counters}

n:byte; {number of array}

ch,srch, {symbol}

access:char; {access to file}

flag:boolean; {flag}

{------------------Input--------------------------}

procedure Input;

begin

clrscr; {clear screen}

repeat {do while user wish}

repeat {menu access to the file}

writeln('Access to file');

writeln('1. Serial');

writeln('2. Direct');

readln(access); {user answer for access}

until(access='1')or(access='2'); {possible access is matched}

{$I-} {off control intup-output}

Reset(f); {open file of records if exist}

{$I+} {on control intup-output}

if(IOResult=0)then {if file is open}

begin

if(access='1')then {serial access}

begin

while not eof(f) do {while not end of file}

begin

read(f,opwork); {reading record from file}

n:=n+1; {counting records in file}

end; {end of while}

end {end of if}

else {direct access}

begin

seek(f,filesize(f)); {put handle of file in the end of file}

n:=filesize(f); {init as number of records in file f}

end; {end of else}

end {end of if}

else Rewrite(f); {create file if it don't exist}

with opwork do {Inputing record}

begin

repeat {do while correct record variant input}

write('input type of works: 1-prose,2-poetry,3-painting ');

readln(tag); {choose case variant}

until(tag=1)or(tag=2)or(tag=3); {possible variant of record}

case tag of {variant of record}

1:begin {start of prose}

write('author of prose: ');

readln(author);

write('title of prose: ');

readln(title);

write('genre of prose: ');

readln(genre);

write('capacity of prose: ');

readln(capacity);

end; {end of prose}

2:begin {star of poetry}

write('author of poetry: ');

readln(author);

write('title of poetry: ');

readln(title);

write('genre of poetry: ');

readln(genre);

write('poetic size of poetry: ');

readln(poetsize);

end; {end of poetry}

3:begin {start of paiting}

write('author of painting: ');

readln(author);

write('title of painting: ');

readln(title);

write('genre of painting: ');

readln(genre);

write('trend of painting: ');

readln(trend);

end; {end of paiting}

end; {end of case}

end; {end of with}

write(f,opwork); {writing in file for both accesses}

writeln('continue?[y/n]'); {possibility entering one more record}

ch:=readkey; {reading user answer to continue}

until (ch='n')or(ch='N'); {for against inputing}

close(f); {close file f}

end; {end of Input}

{------------------Search------------------------}

procedure search;

var s, {string for formating}

st:string[20]; {for searching request}

begin

clrscr; {clear screen}

repeat {pole for search}

writeln('1. author'); {pole from record}

writeln('2. title');

writeln('3. genre');

writeln('4. capacity'); {variant 1 pole of record prose}

writeln('5. poetsize'); {variant 2 pole of record poetry}

writeln('6. trend'); {variant 3 pole of record painting}

write('Your choise '); {user choise for searching}

readln(srch); {reading user answer}

until (srch>='1') and (srch<='6');{possible pole for searching record in file}

write('Searching ');

readln(st); {parameter searching}

clrscr; {clear screen}

Reset(f); {open file}

j:=0; {init number of finding records}

while not eof(f) do {circle for outputting finding record}

begin

read(f,opwork); {reding record FROM FILE}

if((st=opwork.author)and(srch='1'))or((st=opwork.title)and(srch='2'))or

((st=opwork.genre)and(srch='3'))or((st=opwork.capacity)and(srch='4'))or

((st=opwork.poetsize)and(srch='5'))or((st=opwork.trend)and(srch='6'))then

begin {condition for rearch}

j:=j+1; {increment number of finding records}

if (flag=false)then {flag for title of table}

begin

writeln(' Author of Title of Genre Capacity Poetsize Trend ');

flag:=true; {change flag}

end; {end of if}

{formating table outputing}

with opwork do {access to record pole}

case tag of {variant of record}

1: begin {start of prose}

write(tag,' ');;

s:=author;

while(length(s)<20)do

insert(' ',s,length(s)+1);

write(s);

s:=title;

while(length(s)<20)do');

insert(' ',s,length(s)+1);

write(s);

s:=genre;

while(leng

insert(' ',s,length(s)+1);

write(s);;

s:=capacity;

while(length(s)<10)do;

insert(' ',s,length(s)+1);

writeln(s);ry: ');

end; {end of prose}

2:begin {star of poetry}

write(tag,' ');

s:=author;

while(length(s)<20)do

insert(' ',s,length(s)+1);

write(s);

s:=title;

while(length(s)<20)do

insert(' ',s,length(s)+1);

write(s);

s:=genre;

while(length(s)<10)do

insert(' ',s,length(s)+1);

write(s);

s:=poetsize;

while(length(s)<8)do

insert(' ',s,length(s)+1);

gotoxy(63,j+1);

writeln(s);

end; {end of poetry}

3:begin {start of paiting}

write(tag,' ');

s:=author;

while(length(s)<20)do

insert(' ',s,length(s)+1);

write(s);

s:=title;

while(length(s)<20)do

insert(' ',s,length(s)+1);

write(s);

s:=genre;

while(length(s)<10)do

insert(' ',s,length(s)+1);

write(s);

s:=trend;

while(length(s)<8)do

insert(' ',s,length(s)+1);

gotoxy(72,j+1);

writeln(s);

end; {end of paiting}

end; {end of case}

end; {end of with}

end; {end of if}

if(flag=true) then {last string in table}

begin

writeln; {end of table}

writeln('1 - prose, 2 - poetry, 3 - painting ');

end

else writeln('No found seaching record');

readln;

flag:=false; {exchange flag value}

close(f); {close file}

end; {end of search}

{----------Printing of Current element-------------------------}

procedure CurElem(work:rec;m:integer);

var st:string; {formating string}

begin

with work do {access to record variable}

case tag of {variant}

1: begin

write(tag,' ');

st:=author;

while(length(st)<20)do

insert(' ',st,length(st)+1);

write(st);

st:=title;

while(length(st)<20)do

insert(' ',st,length(st)+1);

write(st);

st:=genre;

while(length(st)<10)do

insert(' ',st,length(st)+1);

write(st);

st:=capacity;

while(length(st)<10)do

insert(' ',st,length(st)+1);

writeln(st);

end;

2:begin

write(tag,' ');

st:=author;

while(length(st)<20)do

insert(' ',st,length(st)+1);

write(st);

st:=title;

while(length(st)<20)do

insert(' ',st,length(st)+1);

write(st);

st:=genre;

while(length(st)<10)do

insert(' ',st,length(st)+1);

write(st);

st:=poetsize;

while(length(st)<8)do

insert(' ',st,length(st)+1);

gotoxy(63,m+1);

writeln(st);

end;

3:begin

write(tag,' ');

st:=author;

while(length(st)<20)do

insert(' ',st,length(st)+1);

write(st);

st:=title;

while(length(st)<20)do

insert(' ',st,length(st)+1);

write(st);

st:=genre;

while(length(st)<10)do

insert(' ',st,length(st)+1);

write(st);

st:=trend;

while(length(st)<8)do

insert(' ',st,length(st)+1);

gotoxy(p,m+1);

writeln(st);

end;

end;

end;

{------------------Change------------------------}

procedure change;

var s, {format string}

st:string[20]; {parameter of searching}

chan:char; {user answer}

numb:integer; {number of change element}

fl:boolean; {flag}

tmpwork:rec; {temp rec variable}

ftmp:file of rec; {tempfile for serial access}

begin

clrscr;

repeat

writeln('Access to file');

writeln('1. Serial');

writeln('2. Direct');

readln(access);

until(access='1')or(access='2');

clrscr;

repeat {pole for changing}

writeln('1. author');

writeln('2. title');

writeln('3. genre');

writeln('4. capacity');

writeln('5. poetsize');

writeln('6. trend');

write('Your choise ');

readln(srch);

until (srch>='1') and (srch<='6');

write('Changing component ');

readln(st); {parameter searching}

j:=0; i:=0; {initial counters}

reset(f); {open file}

while not eof(f) do {circle for outputing}

begin

read(f,opwork); {reading record}

with opwork do

if((st=author)and(srch='1'))or((st=title)and(srch='2'))or

((st=genre)and(srch='3'))or((st=capacity)and(srch='4'))or

((st=poetsize)and(srch='5'))or((st=trend)and(srch='6'))then

begin {condition for search}

clrscr;

writeln(' Author of Title of Genre Capacity Poetsize Trend ');

j:=j+1; {number of change elements}

CurElem(opwork,j); {output current element}

write('Exchange this record?[y/n]');

readln(chan);

if(chan='y')then

begin

fl:=true; {flag}

case tag of

1:begin {start of prose}

write('author of prose: ');

readln(author);

write('title of prose: ');

readln(title);

write('genre of prose: ');

readln(genre);

write('capacity of prose: ');

readln(capacity);

end; {end of prose}

2:begin {star of poetry}

write('author of poetry: ');

readln(author);

write('title of poetry: ');

readln(title);

write('genre of poetry: ');

readln(genre);

write('poetic size of poetry: ');

readln(poetsize);

end; {end of poetry}

3:begin {start of paiting}

write('author of painting: ');

readln(author);

write('title of painting: ');

readln(title);

write('genre of painting: ');

readln(genre);

write('trend of painting: ');

readln(trend);

end; {end of paiting}

end;

if(access='2')then {end of case}

begin

seek(f,i);

write(f,opwork);

end {end of if}

else

begin

tmpwork:=opwork;

numb:=j;

end;

end;

end;

i:=i+1;

end;

if(flag=false)then

writeln('No found records to change');

if(access='1') then {serial access}

begin

i:=0;

assign(ftmp,'f1.dat'); {file variable -> physical file}

rewrite(ftmp); {open files}

reset(f);

while not eof(f)do

begin

read(f,opwork);

if(i=numb)then {if change element}

write(ftmp,tmpwork) {write it in file}

else write(ftmp,opwork);

i:=i+1;

end;

close(ftmp);

close(f);

erase(f);

rename(ftmp,'f.dat');

end;

readln;

if(access='2')then

close(f);

end; {end of change}

{------------------Delitem-----------------------}

procedure delitem;

var s, {format string}

st:string[20]; {parameter of searching}

chan:char; {user answer}

numb:integer; {number of change element}

fl:boolean; {flag}

tmpwork:rec; {temp rec variable}

ftmp:file of rec; {tempfile for serial access}

begin

clrscr;

repeat

writeln('Access to file');

writeln('1. Serial');

writeln('2. Parallel');

readln(access);

until(access='1')or(access='2');

clrscr;

repeat {pole for changing}

writeln('1. author');

writeln('2. title');

writeln('3. genre');

writeln('4. capacity');

writeln('5. poetsize');

writeln('6. trend');

write('Your choise ');

readln(srch);

until (srch>='1') and (srch<='6');

write('Deleting component ');

readln(st); {parameter searching}

j:=0;

reset(f); {open file}

i:=0;

while not eof(f) do

begin {circle for outputing}

read(f,opwork); {reading record}

with opwork do

if((st=author)and(srch='1'))or((st=title)and(srch='2'))or((st=genre)and(srch='3'))or

((st=capacity)and(srch='4'))or((st=poetsize)and(srch='5'))or((st=trend)and(srch='6'))then

begin {condition for deleting}

clrscr;

fl:=true;

writeln(' Author of Title of Genre Capacity Poetsize Trend ');

j:=j+1;

CurElem(opwork,j); {output current element}

write('Delete this record?[y/n]');

readln(chan);

if(chan='y')then

begin

if access='2' then {serial access}

begin

while not eof(f) do {while not end of file}

begin

read(f,tmpwork); {read next element}

seek(f,filepos(f)-2); {move handle back}

write(f,tmpwork); {write iin this position elem}

seek(f,filepos(f)+1); {move to next element}

end; {end of while}

seek(f,filesize(f)-1); {cut file for one record}

truncate(f);

end

else

numb:=i;{number of del element}

end; {end of if}

end; {end of if codition}

i:=i+1;

end;

if(fl=false) then

writeln('No found record to delete');

if(access='1')then {serial}

begin

i:=0;

assign(ftmp,'f1.dat');

rewrite(ftmp);

reset(f);

while not eof(f)do

begin

read(f,opwork);

if(i<>numb)then

write(ftmp,opwork);

i:=i+1;

end;

close(ftmp);

close(f);

erase(f);

rename(ftmp,'f.dat');

end;

readln;

if(access='2')then

close(f);

end;{end of delitem}

{------------------Task1-------------------------}

procedure task1;

var k,m:integer;

s:string;

begin

clrscr;

repeat

writeln('Access to file');

writeln('1. Serial');

writeln('2. Parallel');

readln(access);

until(access='1')or(access='2');

clrscr;

{$I-}

Reset(f);

{$I+}

if(IOResult=0)then

begin

if(access='1')then

begin

while not eof(f) do

begin

read(f,opwork);

n:=n+1;

end;

Reset(f);

end

else

n:=filesize(f);

end

else Rewrite(f);

if(n>0)then

begin

j:=2;

k:=2;

m:=2;

writeln('Prose Poetry Painting');

while not eof(f) do

begin

read(f,opwork);

with opwork do

case tag of

1:begin

gotoxy(1,j);

s:=author;

while(length(s)<20)do

insert(' ',s,length(s)+1);

write(s);

j:=j+1;

end;

2:begin

gotoxy(21,k);

s:=author;

while(length(s)<20)do

insert(' ',s,length(s)+1);

write(s);

k:=k+1;

end;

3:begin

gotoxy(41,m);

s:=author;

while(length(s)<20)do

insert(' ',s,length(s)+1);

write(s);

m:=m+1;

end;

end;{end of case}

end;{end of while}

end;{end of if}

readln;

close(f);

end; {end of task1}

{------------------Task2-------------------------}

procedure task2;

var s,st:string;

j:integer;

begin

clrscr;

write('Painter''s name who draws naturmort ');

readln(st);

j:=1;

clrscr;

Reset(f);

writeln(' Author of Title of Genre Trend ');

while not eof(f) do {circle fo outputing}

begin

read(f,opwork);

with opwork do

begin

if(st=author)and(genre='naturmort')then

begin

p:=54;

CurElem(opwork,j);

p:=72; j:=j+1;

end;

end;

end;

writeln;

writeln('Number of works by ',st,' in naturmort genre is ',j-1);

readln;

close(f);

end; {end of task2}

{------------------Task3-------------------------}

procedure task3;

var fl:boolean;

ftmp:file of rec;

chan:char;

tmpwork:rec;

numb:integer;

begin

clrscr;

repeat

writeln('Access to file');

writeln('1. Serial');

writeln('2. Parallel');

readln(access);

until(access='1')or(access='2');

clrscr;

clrscr;

Reset(f);

j:=1; i:=1;

writeln(' Author of Title of Genre Capacity Poetsize ');

while not eof(f) do {circle fo outputing}

begin

read(f,opwork);

with opwork do

begin

if(genre='roman')then

begin

CurElem(opwork,j);

j:=j+1;

write('Delete this record?[y/n]');

readln(chan);

if(chan='y')then

begin

if access='2' then

begin

while not eof(f) do

begin

read(f,tmpwork);

seek(f,filepos(f)-2);

write(f,tmpwork);

seek(f,filepos(f)+1);

end; {end of while}

seek(f,filesize(f)-1);

truncate(f);

end

else

numb:=i;

end; {end of if}

end; {end of if codition}

i:=i+1;

end;

end;

writeln(j-1,' records were deleted');

if(fl=false) then

writeln('No found record to delete');

if(access='1')then

begin

i:=0;

assign(ftmp,'f1.dat');

rewrite(ftmp);

reset(f);

while not eof(f)do

begin

read(f,opwork);

if(i<>numb)then

write(ftmp,opwork);

i:=i+1;

end;

close(ftmp);

close(f);

erase(f);

rename(ftmp,'f.dat');

end;

readln;

if(access='2')then

close(f);

end; {end of task3}

{------------------Output------------------------}

procedure Output;

var st:string[20];

begin

{$I-}

Reset(f);

{$I+}

if not(IOResult=0)then

Rewrite(f);

clrscr;

i:=0;

writeln(' Author of Title of Genre Capacity Poetsize Trend ');

while not eof(f) do

begin

read(f,opwork);

CurElem(opwork,i+1);

i:=i+1;

end;

writeln; {end ofcase}

writeln('1 - prose, 2 - poetry, 3 - painting ');

readln;

close(f);

end; {end of outputing}

{-------------------Menu-------------------------}

procedure menu;

begin

repeat {do while not exit}

clrscr; {clear screen}

gotoxy(21,3); writeln('MENU'); {Main menu of program}

gotoxy(15,5); writeln('1. Append item'); {Input new record and add it in file}

gotoxy(15,7); writeln('2. Change item'); {Change record from file}

gotoxy(15,9); writeln('3. Delete item'); {Delete record in file}

gotoxy(15,11); writeln('4. Search item'); {Seacrching item}

gotoxy(15,13); writeln('5. Output item'); {View all records}

gotoxy(15,15); writeln('6. Output genre'); {Output authors in gerne}

gotoxy(15,17); writeln('7. Number of naturmort''s works by author');{Output number of works}

gotoxy(15,19); writeln('8. Delete works in genre ''roman''');{Deleting roman from file}

gotoxy(15,21); writeln('9. Exit'); {Exit program}

ch:=readkey; {reading user answer}

case ch of {case of answer}

'1': input; {inputing}

'2': change; {exchange record}

'3': delitem; {deleting record}

'4': search; {searching}

'5': Output; {outputing}

'6': task1; {view genre by authors}

'7': task2; {count naturmort works}

'8': task3; {deleting romans}

'9':exit; {exit of program}

end; {end of case}

until ch='9'; {exit pressed}

end; {end of menu}

{---------Main program----------}

begin

clrscr; {clear screen}

flag:=false; {initialization flag}

n:=0; {init number of records}

p:=72; {init place for table column}

assign(f,'f.dat'); {file variable -> physical file}

menu; {main menu}

readln;

end. {end of program}


 

8. ScreenShot’s

9. Аналіз роботи

Ми бачимо виконання кожного з пунктів меню на ScreenShot’ах.

1. Меню має 9 пунктів. Користувач має вибрати один з цих варіантів. Здійснено перевірку на введення коректних пунктів меню.

2. Користувач вибрав перший пункт меню Додати запис. Відкрилось підменю доступу до файлу(послідовний або прямий) та вибору виду запису(першого - прози, другого - поезії, третього - живопису). Зациклення програми на введення можливого доступу до файлу та виду запису. Введення першого виду запису, після чого питання на продовження введення нового запису з подальшим вибором виду запису.

3. Користувач вибрав другий пункт меню Редагування запису. Вводиться параметр пошуку та ключ пошуку(запит). Якщо запис знайдений, то користувачу пропонується редагувати поточний знайдений запис.

4. Користувач вибрав третій пункт меню Видалення запису. Якщо запис знайдений, то користувачу пропонується видалити поточний знайдений запис.

5. Користувач вибрав четвертий пункт меню Пошук запису. Виводяться всі знайдені записи.

6. Користувач вибрав п’ятий пункт меню Виведення записів. Виведення здійснюється у табличному вигляді.

7. Користувач вибрав шостий пункт меню Виведення жанрів. Здійснюється виведення авторів за видом запису.

8. Користувач вибрав сьомий пункт меню Кількість робіт автора у жанрі натюрморт. Введення автора, кількість робіт якого бажає лічити користувач. За цим параметром відбувається пошук робіт автора та лічення натюрмортів.

9. Користувач вибрав восьмий пункт меню Видалення романів. Відбувається пошук романів та видалення всіх цих робіт.

10. Дев’ятий пункт меню – вихід з програми, після чого завершується її виконання.

У кожному пункті меню користувач має на вибір доступ до файлу, де це має значення.

 







Дата добавления: 2015-09-04; просмотров: 467. Нарушение авторских прав; Мы поможем в написании вашей работы!




Аальтернативная стоимость. Кривая производственных возможностей В экономике Буридании есть 100 ед. труда с производительностью 4 м ткани или 2 кг мяса...


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


Расчетные и графические задания Равновесный объем - это объем, определяемый равенством спроса и предложения...


Кардиналистский и ординалистский подходы Кардиналистский (количественный подход) к анализу полезности основан на представлении о возможности измерения различных благ в условных единицах полезности...

Методика обучения письму и письменной речи на иностранном языке в средней школе. Различают письмо и письменную речь. Письмо – объект овладения графической и орфографической системами иностранного языка для фиксации языкового и речевого материала...

Классификация холодных блюд и закусок. Урок №2 Тема: Холодные блюда и закуски. Значение холодных блюд и закусок. Классификация холодных блюд и закусок. Кулинарная обработка продуктов...

ТЕРМОДИНАМИКА БИОЛОГИЧЕСКИХ СИСТЕМ. 1. Особенности термодинамического метода изучения биологических систем. Основные понятия термодинамики. Термодинамикой называется раздел физики...

Примеры задач для самостоятельного решения. 1.Спрос и предложение на обеды в студенческой столовой описываются уравнениями: QD = 2400 – 100P; QS = 1000 + 250P   1.Спрос и предложение на обеды в студенческой столовой описываются уравнениями: QD = 2400 – 100P; QS = 1000 + 250P...

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

Педагогическая структура процесса социализации Характеризуя социализацию как педагогический процессе, следует рассмотреть ее основные компоненты: цель, содержание, средства, функции субъекта и объекта...

Studopedia.info - Студопедия - 2014-2024 год . (0.008 сек.) русская версия | украинская версия