
Новичок
Профиль
Группа: Участник
Сообщений: 27
Регистрация: 18.12.2006
Репутация: нет Всего: нет
|
Имеется программа, написанная на Паскале, ее необходимо переделать на C#!!! | Код | Program Izdatelstvo; Uses Crt, Graph; TYPE book=record avtor :string; {Автор} name :string; {Название книги} age_g :char; {Возрастная группа} tema :char; {Тематическая группа} price :word; {Отпускная цена} tirazh:word; {Тираж} month :string; {Месяц выпуска} end; age1=array[1..3]of char; {тип - возрастные группы} them1=array[1..5]of char; {тип - тематич.группы} mec1=array[1..12]of string; {тип - месяцы} CONST age :age1=('Д','Ю','В'); them:them1=('У','Х','П','И','Н'); mec :mec1=('январь','февраль','март','апрель', 'май','июнь','июль','август', 'сентябрь','октябрь','ноябрь','декабрь');
Var i:integer; ch:char; j:integer; f:file of book; zap:book;
Procedure Start_graph; {проверка графики} Var Graphdriver: integer; GraphMode: integer; ErrorCode: integer; begin Graphdriver:= Detect; {:=0} InitGraph (graphdriver, graphmode, ' '); ErrorCode:= Graphresult; if ErrorCode <> 0 then begin Writeln ('Ошибка графики!'); Halt; end; end;
Procedure Print(x,y,shrift,style,razmer:integer; text:string); {Выводим текст в графическом режиме} begin MoveTo(x,y); SetTextStyle(shrift, style, razmer); OutText(text); end;
Procedure Welcome; {Вывод заставкb} begin Start_graph; SetFillStyle (10, 1); floodFill (40, 50, 15); Line (1, 30, 640, 30); SetFillStyle (10, 6); Print (115, 15, 0, 0, 1, 'Мурманский Государственный Технический Университет'); Circle (320, 230, 150); FloodFill (320, 220, 15); SetColor(3); Print(248,150,0,0,3,'РГЗ #2'); setcolor(15); Print(190,200,0,0,1,'Выполнила студентка группы ПиЭ-161'); SetColor(9); Print(195,240,0,0,2,'Cемерикова Ирина'); Print(212,260,0,0,2,' Анатольевна'); SetColor(15); Print(265,350,0,0,1,'Мурманск, 2007'); Line(1,440,640,440); Print(200,460,0,0,1,'Для продолжения нажмите Enter'); Readln; CloseGraph; end;
Procedure Proverka; {Проверка данных, вводимых пользователем} var ch1:char; st: string; Procedure Stroka(what:string; z:integer;var s:string); {ввод строк} var i:integer; bool:boolean; begin repeat write (what); readln(s); for i:=1 to length(s) do if (s[i] in ['А'..'Я','а'..'я']) then bool:=false else bool:=true; if bool then begin gotoxy(1,z); clreol; end; until not(bool); end; procedure Chislo(what:string; z:integer;var w:word);{Ввод чисел} var s:string; rez:word; begin repeat write(what); readln (s); val (s,w,rez); if rez<>0 then begin gotoxy (1,z); clreol; end; until (rez=0); end; Procedure a_group (what:string;z:integer;var s:char);{проверка на соотвествие введенных данных } {имеющимся возрастным группам} Var bool:boolean; i:byte; Begin repeat bool:=false; write(what); readln(s); for i:=1 to 3 do if age[i]=upcase(s) then bool:=true; if not(bool) then begin gotoxy(1,z); clreol; end; until bool; End; Procedure t_group (what:string;z:integer;var s:char);{соответствие тематическим группам} Var bool:boolean; i:byte; Begin repeat bool:=false; write(what); readln(s); for i:=1 to 5 do if them[i]=upcase(s) then bool:=true; if not(bool) then begin gotoxy(1,z); clreol; end; until bool; End; BEGIN clrscr; repeat textbackground(8); clrscr; textcolor(15); gotoxy(10,1); writeln('╔═══════════════════════════════════════════════════════╗'); gotoxy(10,3); writeln('╚═══════════════════════════════════════════════════════╝'); gotoxy(10,2); writeln('║ Введите данные ║'); textcolor(15); gotoxy(1,10); with zap do begin stroka(' Автор: ',6,avtor); stroka(' Название книги: ',7,name); a_group(' Возрастная группа: ',8,age_g); t_group(' Тематическая группа: ',9,tema); chislo(' Отпускная цена: ',10,price); chislo(' Тираж: ',11,tirazh); stroka(' Месяц выпуска: ',12,month); end; write(f,zap); gotoxy(25,19);textcolor(7); writeln('Желаете продолжить ввод? (д\н)'); gotoxy(39,21); read(ch1); until (ch1='Н')or (ch1='н'); END;
Procedure Sozdat_file; {Создание файла} Begin clrscr; assign(f,'Publish.dat'); rewrite(f); Proverka; close(f); End;
Procedure Add_file; {Дополнение файла} begin assign(f, 'Publish.dat'); reset(f); seek(f, filesize(f)); Proverka; close(f); end;
Procedure Correct_file; {Корректировка файла} var ch2:char; Procedure Stroka(what:string; z:integer;var s:string); var i:integer; bool:boolean; begin repeat write (what); readln(s); for i:=1 to length(s) do if (s[i] in ['А'..'Я','а'..'я']) then bool:=false else bool:=true; if bool then begin gotoxy(1,z); clreol; end; until not(bool); end; procedure Chislo(what:string; z:integer;var w:word); var s:string; rez:word; begin repeat write(what); readln (s); val (s,w,rez); if rez<>0 then begin gotoxy (1,z); clreol; end; until (rez=0); end; Procedure a_group (what:string;z:integer;var s:char); Var bool:boolean; i:byte; Begin repeat bool:=false; write(what); readln(s); for i:=1 to 3 do if age[i]=upcase(s) then bool:=true; if not(bool) then begin gotoxy(1,z); clreol; end; until bool; End; Procedure t_group (what:string;z:integer;var s:char); Var bool:boolean; i:byte; Begin repeat bool:=false; write(what); readln(s); for i:=1 to 5 do if them[i]=upcase(s) then bool:=true; if not(bool) then begin gotoxy(1,z); clreol; end; until bool; End; begin assign (f, 'publish.dat'); reset(f); i:=1; while not (eof(f)) do begin textbackground(8); clrscr; textcolor(15); gotoxy(10,1); writeln('╔═══════════════════════════════════════════════════════╗'); gotoxy(10,3); writeln('╚═══════════════════════════════════════════════════════╝'); gotoxy(10,2); writeln('║ Имеющиеся данные в файле ║'); read(f,zap); gotoxy(1,10);textcolor(15);textbackground(0); with zap do begin writeln(' Автор: ',avtor); writeln(' Название книги: ',name); writeln(' Возрастная группа: ',age_g); writeln(' Тематическая группа: ',tema); writeln(' Отпускная цена: ',price); writeln(' Тираж: ',tirazh); writeln(' Месяц выпуска: ',month); end; repeat textcolor(4); if i=1 then textbackground(14) else textbackground(15); gotoxy(30,17); writeln(' 1. Продолжение просмотра '); if i=2 then textbackground(14) else textbackground(15); gotoxy(30,19); writeln(' 2. Отредактировать запись '); if i=3 then textbackground(14) else textbackground(15); gotoxy(30,21); writeln(' 3. Выход в главное меню '); repeat until keypressed; ch2:=readkey; case ch2 of #72:begin i:=i-1;if i<1 then i:=3;end; #80:begin i:=i+1;if i>3 then i:=1;end; #13:case i of 1: ch2:=#30; 2: begin textbackground(8); clrscr; textcolor(15); gotoxy(10,1); writeln('╔═══════════════════════════════════════════════════════╗'); gotoxy(10,3); writeln('╚═══════════════════════════════════════════════════════╝'); gotoxy(10,2); writeln('║ Ввод данных ║'); textcolor(15); gotoxy(1,10); with zap do begin stroka(' Автор: ',6,avtor); stroka(' Название книги: ',7,name); a_group(' Возрастная группа: ',8,age_g); t_group(' Тематическая группа: ',9,tema); chislo(' Отпускная цена: ',10,price); chislo(' Тираж: ',11,tirazh); stroka(' Месяц выпуска: ',12,month); end; seek(f,filepos(f)-1); write(f,zap); end; 3: begin {Выход в главное меню} close(f); exit; end; {3} end; {case i} end; {case ch2} until ch2=#30; if filepos(f)=filesize(f) then seek(f,0); end; {while} END;
Procedure Spisok; {Список книг по запросу пользователя (по возрастной и тематической группам)} var fl:boolean; tema1,age_g1:char;
begin assign(f,'publish.dat'); reset(f); textbackground(8); clrscr; textcolor(15); gotoxy(10,1); writeln('╔═══════════════════════════════════════════════════════╗'); gotoxy(10,3); writeln('╚═══════════════════════════════════════════════════════╝'); gotoxy(10,2); writeln('║ Книги по запросу пользователя ║'); textcolor(15); gotoxy(1,10); write(' Введите возрастную группу: '); readln (age_g1); gotoxy(1,11); write(' Введите тематическую группу: '); readln (tema1); gotoxy(1,14); fl:=false; while not eof(f) do begin read (f, zap); if (zap.age_g=age_g1) and (zap.tema=tema1) then begin writeln(' Автор: ',zap.avtor,' Название книги: ',zap.name); fl:=true; end; end; if not(fl) then write(' Книг с указанной возрастной и тематической группой нет'); gotoxy(29,24);textattr:=12+1*16+128; write('Нажмите Escape'); readkey; close(f); END;
procedure Stoimost; {Стоимость тиражей для каждой тематической группы} VAR mcost:array[1..5]of longint; i: word; tm:longint; BEGIN assign(f,'publish.dat'); reset(f); textbackground(8); clrscr; textcolor(15); gotoxy(10,1); writeln('╔═══════════════════════════════════════════════════════╗'); gotoxy(10,3); writeln('╚═══════════════════════════════════════════════════════╝'); gotoxy(10,2); writeln('║ Стоимость тиражей по тематическим группам ║'); textcolor(15); for i:=1 to 5 do mcost[i]:=0; while not eof(f) do begin read(f,zap); tm:=zap.price*zap.tirazh; for i:=1 to 5 do if them[i]=zap.tema then mcost[i]:=mcost[i]+tm; end; gotoxy(1,10); for i:=1 to 5 do writeln(' Тематическая группа: ',them[i],' Стоимость тиража: ',mcost[i]:8,' руб.'); gotoxy(29,24);textattr:=12+1*16+128; write('Нажмите Escape'); readkey; close(f); END;
PROCEDURE OBIEM;{общие объемы тиражей для каждой возрастной группы} VAR v:array[1..3]of integer; i:byte; BEGIN assign(f,'publish.dat'); reset(f); textbackground(8); clrscr; textcolor(15); gotoxy(10,1); writeln('╔═══════════════════════════════════════════════════════╗'); gotoxy(10,3); writeln('╚═══════════════════════════════════════════════════════╝'); gotoxy(10,2); writeln('║ Общие объемы тиражей для каждой возрастной группы ║'); textcolor(15); gotoxy(1,10); for i:=1 to 3 do v[i]:=0; while not eof(f) do begin read(f,zap); for i:=1 to 3 do if upcase(zap.age_g)=age[i] then v[i]:=v[i]+zap.tirazh; end; for i:=1 to 3 do writeln(' Возрастная группа: ',age[i],' Объем тиража: ',v[i]:7,' экз.'); gotoxy(29,24);textattr:=12+1*16+128; write('Нажмите Escape'); readkey; close(f); END;
PROCEDURE Grafik; {график, показывающий изменения тиража книг по искусству в зависимости от месяца}
VAR i,v, x0,y0,xn,yn,ys,xs,yt,xt:integer; j:byte; y:real; st:string; trg:array[1..12]of integer; mj:array[1..4]of byte;
BEGIN Start_graph; {Построение заголовка} setcolor(3); cleardevice; settextjustify(1,2); settextstyle(0,horizdir,2); outtextxy(getmaxx div 2 ,6, 'График'); outtextxy(getmaxx div 2, 22, 'Книги по искусству'); settextjustify(1,1); {Построение осей} x0:=getmaxx div 15; xn:=getmaxx-x0; y0:=getmaxy div 6; yn:=getmaxy-y0; setcolor(15); setlinestyle(solidln,0,3); settextjustify(2,0); settextstyle(0,horizdir,1); line(x0,yn,xn,yn); line(x0,y0,x0,yn); settextjustify(0,2); outtextxy(xn+2,yn-3,'>'); outtextxy(xn-10,yn+7,' Месяц'); outtextxy(x0-3,y0-5,'^'); outtextxy(x0-10,y0-23,' Обьем'); outtextxy(x0-10,y0-13,''); {оцифровка осей} i:=x0*2;j:=1; settextjustify(1,2); while i<(xn-x0) do begin outtextxy(i,yn-3,'|'); outtextxy(i,yn+15, mec[j]); i:=x0+i; inc(j); end; i:=yn-y0;v:=25; while i>y0 do begin settextjustify(1,1); outtextxy(x0-2,i,'-'); outtextxy(x0+2,i,'-'); settextjustify(2,1); str(v,st); outtextxy(x0-8,i,st); i:=i-y0; v:=v+25; inc(j); end; assign(f,'publish.dat'); reset(f); for i:=1 to 12 do trg[i]:=0; while not eof(f) do begin read(f,zap); if upcase(zap.tema)='И' then for i:=1 to 12 do if zap.month=mec[i] then trg[i]:=trg[i]+zap.tirazh; end; {построение графика} y:=(yn-y0)/100;setcolor(9); setviewport(x0,y0,xn,yn,clipoff); xs:=x0;ys:=yn-y0-round(y*(trg[1]/100)); for i:=1 to 12 do begin xt:=x0*i;yt:=yn-y0-round(y*(trg[i]/100)); circle(xt,yt,3); line(xt,yt,xs,ys); xs:=xt;ys:=yt; end; readkey; close(f); closegraph; END;
PROCEDURE Diagram;{круговая диаграмма - процентное} {соотношени книг за указанный месяц} VAR mes:string; i: byte; xp,yp,r :integer; fill,color,x,y,nach,kon,sekt,med,x1,y1: word; st:string; m:array[1..5] of real; {кол-во книг в каждой тематич.группе} rad, n, p:real; {обшее кол-во книг}
BEGIN textbackground(8); clrscr; textcolor(15); gotoxy(10,1); writeln('╔═══════════════════════════════════════════════════════╗'); gotoxy(10,3); writeln('╚═══════════════════════════════════════════════════════╝'); gotoxy(10,2); writeln('║ Построение диаграммы "Книги по темам (в мес.)" ║'); textcolor(15); gotoxy(1,10); Write(' Введите месяц, по которому строить диаграмму: ');read(mes); start_graph; cleardevice; {заголовок} xp:=getmaxx div 2; settextjustify(1,2); setcolor(15); outtextxy(xp,25,'Круговая диаграмма '); {подсчет книг в кажд.тематич. группе} assign(f,'publish.dat'); reset(f); for i:=1 to 5 do m[i]:=0; n:=0; while not eof(f) do begin read(f,zap); if zap.month=mes then for i:=1 to 5 do if them[i]=upcase(zap.tema) then m[i]:=m[i]+1; end; for i:=1 to 5 do n:=n+m[i]; for i:=1 to 5 do m[i]:=(m[i]/n)*100; {определение координат вершины и радиуса} xp:=getmaxx div 3; yp:=getmaxy div 2; r:=getmaxy div 3; x1:=xp+r+60; y1:=yp+r+20; nach:=0;color:=9; fill:=solidfill; setcolor(15); p:=360/100; for i:=1 to 5 do begin sekt:=round(m[i]*p); if i<>5 then kon:=nach+sekt else kon:=360; setfillstyle(fill,color); pieslice(xp,yp,nach,kon,r); med:=sekt div 2 +nach; rad:=med*Pi/180; x:=xp+round(cos(rad)*r); y:=yp-round(sin(rad)*r); str(m[i]:3:1,st); if med<90 then settextjustify(0,0) else if med<180 then settextjustify(2,0) else if med<270 then settextjustify(2,2) else settextjustify(0,2); outtextxy(x,y,st+'%'); bar(x1,y1,x1+30,y1-200); settextjustify(0,1); outtextxy(x1+37,y1-190,them[i]); inc(fill); inc(color); nach:=kon; y1:=y1+2*10; end; readkey; closegraph; close(f); END;
PROCEDURE stdiagram;{столбиковая диаграмма кол-ва выпушенных} TYPE proc1=array[1..5]of string; CONST proc:proc1=('0%','25%','50%','75%','100%'); VAR {книг по кажд.тематич.группе за год} n, {кол-во людей} x,y,x0,y0,xk,yk,i: word; j: byte; m:array[1..5]of real; {массив процентов книг}
BEGIN start_graph; {заголовок} setcolor(14); cleardevice; settextjustify(1,2); settextstyle(0,horizdir,2); outtextxy(getmaxx div 2,15, 'Диаграмма'); outtextxy(getmaxx div 2, 29, '"Выпуск за год"'); {оси} x0:=getmaxx div 8; y0:=getmaxy div 7; xk:=getmaxx-x0; yk:=getmaxy-y0; setcolor(15); setlinestyle(solidln,0,normwidth); line(x0,yk,xk,yk); line(x0,y0,x0,yk); settextjustify(2,0); settextstyle(0,horizdir,1); outtextxy(x0,y0,' % '); outtextxy(x0,y0+10,' Книга '); settextjustify(1,2); outtextxy(xk,yk+10,'Тематическая группа'); {оцифровка} x:=x0; {x} settextjustify(1,2); for i:=1 to 5 do begin x:=x+x0; outtextxy(x,yk+10,them[i]); end; i:=yk;j:=1; while i>2*y0 do {y} begin if i<>yk then begin settextjustify(1,1); outtextxy(x0-2,i,'-'); outtextxy(x0+2,i,'-'); end; settextjustify(2,1); outtextxy(x0-8,i,proc[j]); i:=i-y0; inc(j); end; {создание массива, содержашего процент книг по темам} assign(f,'publish.dat'); reset(f);n:=0; for i:= 1 to 5 do m[i]:=0; while not eof(f) do begin read(f,zap); for i:=1 to 5 do if upcase(zap.tema)=them[i] then m[i]:=m[i]+1; inc(n); end; for i:=1 to 5 do m[i]:=(m[i]/n)*100; {%} {построение} x:=x0; for i:=1 to 5 do begin x:=x+x0; setfillstyle(i,6); bar(x-10,yk-round(round(y0/25)*m[i]),x+10,yk); end; readkey; closegraph; close(f); END;
procedure zaprosi; begin i:=1; repeat textbackground(1); clrscr; textcolor(15); gotoxy(15,1); writeln('╔══════════════════════════════════════════════════╗'); gotoxy(15,3); writeln('╚══════════════════════════════════════════════════╝'); gotoxy(15,2); writeln('║ Запросы пользователя ║'); textcolor(4); if i=1 then textbackground(14) else textbackground(15); gotoxy(15,7); writeln(' 1. Список книг '); if i=2 then textbackground(14) else textbackground(15); gotoxy(15,9); writeln(' 2. Стоимость тиражей '); if i=3 then textbackground(14) else textbackground(15); gotoxy(15,11); writeln(' 3. Общие обьемы тиражей для всех возрастных групп '); if i=4 then textbackground(14) else textbackground(15); gotoxy(15,13); writeln(' 4. График '); if i=5 then textbackground(14) else textbackground(15); gotoxy(15,15); writeln(' 5. Круговая диаграмма '); if i=6 then textbackground(14) else textbackground(15); gotoxy(15,17); writeln(' 6. Столбиковая диаграмма '); if i=7 then textbackground(14) else textbackground(15); gotoxy(15,19); writeln(' 7. Выход в главное меню '); repeat until keypressed; ch:=readkey; case ch of #72:begin i:=i-1; if i<1 then i:=7;end; #80:begin i:=i+1; if i>7 then i:=1;end; #13:case i of 1:Spisok; 2:Stoimost; 3:Obiem; 4:Grafik; 5:Diagram; 6:Stdiagram; 7:ch:=#27; end; end; until ch=#27; end;
Begin {Головной модуль} Welcome; i:=1; repeat textbackground(1); clrscr; textcolor(15); gotoxy(15,1); writeln('╔══════════════════════════════════════════════════╗'); gotoxy(15,3); writeln('╚══════════════════════════════════════════════════╝'); gotoxy(15,2); writeln('║ Главное меню ║'); textcolor(4); if i=1 then textbackground(14) else textbackground(15); gotoxy(28,7); writeln(' 1. Создание файла '); if i=2 then textbackground(14) else textbackground(15); gotoxy(28,9); writeln(' 2. Дополнение файла '); if i=3 then textbackground(14) else textbackground(15); gotoxy(28,11); writeln(' 3. Корректировка данных '); if i=4 then textbackground(14) else textbackground(15); gotoxy(28,13); writeln(' 4. Ответы на запросы '); if i=5 then textbackground(14) else textbackground(15); gotoxy(28,15); writeln(' 5. Выход '); repeat until keypressed; ch:=readkey; case ch of #72:begin i:=i-1; if i<1 then i:=5;end; #80:begin i:=i+1; if i>5 then i:=1;end; #13:case i of 1:Sozdat_file; {Создание файла} 2:Add_file; {Дополнение файла} 3:Correct_file; {Корректировка данных} 4:zaprosi; {Запросы пользователя} 5:ch:=#30; {Выход из программы} end; end; until ch=#30; end.
|
|