program KURSOVAYA; uses crt; const p_menu:array [1..7] of string=('-Чтение данных из файла ', '-Просмотр входной таблицы', '-Добавление записей', '-Удаление записей ', '-Обработка и просмотр данных', '-Сохранение данных в файл', '-Выход '); type vhod_t=record {входная таблица} number:integer; FIOdir:string[15]; FIOen:string[15]; plan:real; fact:real; end; vyhod_t=record {выходная таблица} number:integer; FIOdir:string[15]; FIOen:string[15]; plan:real; fact:real; otklon:real; end; ukaz=^spisok; {список} spisok=record inf:vhod_t; next:ukaz; end; ukaz1=^spisok1; spisok1=record inf:vyhod_t; next:ukaz1; end; var file_in:file of vhod_t; {входной и выходной файлы} file_out:file of vyhod_t; NewL,nach,kon,vremen:ukaz; NewE,nach1:ukaz1; nomermenu, year:integer; vh_name, vyh_name:string[20]; vh_t:vhod_t; vyh_t,vyh_t1:vyhod_t; procedure MENU(var nomermenu:integer); var x,y,i:integer; c:char; begin x:=28; y:=1; gotoXY(x,8); textcolor(13); writeln(' Выберите пункт меню: '); textcolor(3); for i:=1 to 7 do begin gotoXY(x,i+8); writeln(p_menu[i]); end; textcolor(4); gotoXY(x,y+8); writeln(p_menu[y]); while true do begin c:=readkey; case ord(c) of 80:if y<7 then y:=y+1; 72:if y>1 then y:=y-1; 13:break; end; gotoXY(x,8); textcolor(13); writeln(' Выберите пункт меню: '); textcolor(3); for i:=1 to 7 do begin gotoXY(x,i+8); writeln(p_menu[i]); end; textcolor(4); gotoXY(x,y+8); writeln(p_menu[y]); end; nomermenu:=y; textcolor(white); end; procedure readfile(vh_name:string); begin writeln('Введите путь к входному файлу'); readln(vh_name); assign(file_in,vh_name); reset(file_in); if IOResult>0 then begin writeln('Ошибка открытия файла'); exit; end; read(file_in,vh_t); New(NewL); NewL^.inf.number:=vh_t.number; NewL^.inf.FIOdir:=vh_t.FIOdir; NewL^.inf.FIOen:=vh_t.FIOen; NewL^.inf.plan:=vh_t.plan; NewL^.inf.fact:=vh_t.fact; NewL^.next:=nil; nach:=NewL; kon:=NewL; reset(file_in); read(file_in,vh_t); while not EOF(file_in) do begin read(file_in,vh_t); New(NewL); NewL^.inf.number:=vh_t.number; NewL^.inf.FIOdir:=vh_t.FIOdir; NewL^.inf.FIOen:=vh_t.FIOen; NewL^.inf.plan:=vh_t.plan; NewL^.inf.fact:=vh_t.fact; NewL^.next:=nil; kon^.next:=NewL; kon:=NewL; end; end; procedure prosmotr_vhod(nach:ukaz); var x,y,i,n,t:integer; c:char; begin writeln('Просмотр таблицы':70); x:=1;y:=1; {gotoxy(x,y);} writeln('|--------|---------------|---------------|--------------|-----------|'); writeln('| Номер | ФИО директора | ФИО главного | израсходовано| фактически|'); writeln('| | | энергетика | тыс КВт*ч | тыс КВт*ч |'); n:=0; vremen:=nach; while vremen<>nil do begin writeln('|--------|---------------|---------------|--------------|-----------|'); writeln('|',vremen^.inf.number:6,'|',vremen^.inf.FIOdir:15,'|',vremen^.inf.FIOen:15,'|',vremen^.inf.plan:4,'|', vremen^.inf.fact:4,'|'); vremen:=vremen^.next; n:=n+1; end; writeln('|--------|---------------|---------------|--------------|-----------|'); while true do begin c:=readkey; t:=ord(c); if t= 13 then break; if t=8 then begin Delline; delline;end; if t= 72 then begin if y>1 then y:=y-2; gotoxy(x,y); if (y=1) then vremen:=nach^.next; while vremen<>nil do begin writeln('|--------|----------------|---------------|--------------|----------|'); writeln('|',vremen^.inf.number:6,'|',vremen^.inf.FIOdir:15,'|',vremen^.inf.FIOen:15,'|',vremen^.inf.plan:4,'|', vremen^.inf.fact:4,'|'); vremen:=vremen^.next; n:=n+1; end; end; if t=80 then begin if ynil then begin temp:=nach; nach:=nach^.next; dispose(temp); if nach=nil then kon:=nil; end; end; procedure obrabotka_prosmotr; var sump,sumf,sumo:real; sred:real; kon:ukaz1; begin sump:=0; sumf:=0; sumo:=0; nach1:=nil; kon:=nil; seek(file_in,0); writeln('Отклонение факта от плана (со знаком)'); writeln('|--------|---------------|---------------|--------------|-----------|-----------|'); writeln('| Номер | ФИО директора | ФИО главного | израсходовано| фактически| отклонение|'); writeln('| | | энергетика | тыс КВт*ч | тыс КВт*ч | тыс КВт*ч |'); read(file_in,vh_t); New(NewE); NewE^.inf.number:=vh_t.number; vyh_t1.number:=NewE^.inf.number; NewE^.inf.FIOdir:=vh_t.FIOdir; vyh_t1.FIOdir:=NewE^.inf.FIOdir; NewE^.inf.FIOen:=vh_t.FIOen; vyh_t1.FIOen:=NewE^.inf.FIOen; NewE^.inf.plan:=vh_t.plan; vyh_t1.plan:=NewE^.inf.plan; NewE^.inf.fact:=vh_t.fact; vyh_t1.fact:=NewE^.inf.fact; writeln('|--------|---------------|---------------|--------------|-----------|-----------|'); writeln('|',NewE^.inf.number:6,'|',NewE^.inf.FIOdir:15,'|',NewE^.inf.FIOen:15,'|', NewE^.inf.plan:4,'|',NewE^.inf.fact:4,'|',NewE^.inf.otklon:5,'|'); while not EOF(file_in) do begin read(file_in,vh_t); if((vh_t.plan>0)and(vh_t.fact>0)) then begin New(NewE); NewE^.inf.number:=vh_t.number; vyh_t1.number:=NewE^.inf.number; NewE^.inf.FIOdir:=vh_t.FIOdir; vyh_t1.FIOdir:=NewE^.inf.FIOdir; NewE^.inf.FIOen:=vh_t.FIOen; vyh_t1.FIOen:=NewE^.inf.FIOen; NewE^.inf.plan:=vh_t.plan; vyh_t1.plan:=NewE^.inf.plan; NewE^.inf.fact:=vh_t.fact; vyh_t1.fact:=NewE^.inf.fact; writeln('|--------|---------------|---------------|--------------|-----------|-----------|'); writeln('|',NewE^.inf.number:6,'|',NewE^.inf.FIOdir:15,'|',NewE^.inf.FIOen:15,'|', NewE^.inf.plan:4,'|',NewE^.inf.fact:4,'|',NewE^.inf.otklon:5,'|'); kon:=NewE; NewE^.next:=nil; while kon<>nil do begin kon^.inf.otklon:=kon^.inf.plan-kon^.inf.fact; kon:=kon^.next; sump:=sump+kon^.inf.plan; sumf:=sumf+kon^.inf.fact; sumo:=sumo+kon^.inf.otklon end; writeln('|--------|---------------|---------------|--------------|-----------|-----------|'); writeln('|',NewE^.inf.number:6,'|',NewE^.inf.FIOdir:15,'|',NewE^.inf.FIOen:15,'|', NewE^.inf.plan:4,'|',NewE^.inf.fact:4,'|',NewE^.inf.otklon:5,'|'); end; end; writeln('|--------|---------------|---------------|--------------|-----------|-----------|'); if (sump<=0) or (sumf<=0) then begin writeln('введены неверные значения');readln;exit; writeln('| | | |',sump:4:2,'|',sumf:5:2,'|',sumo:5:2,'|'); writeln('|--------|---------------|---------------|--------------|-----------|-----------|'); end; readln; end; procedure save_file(var vyh_t1,vyh_t:vyhod_t); begin assign(file_out,'d:\vyhodtable.txt'); rewrite (file_out); write(file_out,vyh_t1); write(file_out,vyh_t); end; begin nach:=nil; kon:=nil; while true do begin clrscr; menu(nomermenu); case nomermenu of 1:begin clrscr;readfile(vh_name); end; 2: begin clrscr; prosmotr_vhod(nach); end; 3: begin clrscr; dobavlenie(kon,nach);end; 4:begin clrscr;udalenie;end; 5:begin clrscr;obrabotka_prosmotr;end; 6:begin clrscr;save_file(vyh_t1,vyh_t);end; 7:break; end; end; end.