Версия для печати темы

Нажмите сюда для просмотра этой темы в обычном формате

Форум «Всё о Паскале» _ Задачи _ Информационная система спортивной олимпиады

Автор: NoM 29.04.2006 17:08

Помогите кто может т.к. я в Паскале полнейший кипятильник

Создать одну из подсистем информационного обеспечения Олимпийских игр.
Информация, обрабатываемая в системе, должна храниться в текстовом или типизированном файлах.
Данные, которые должны быть отражены в системе: страна-участница, фамилия и имя участника, возраст, вид спорта, результат участия (достижение и награда).
В системе должны решаться следующие задачи:
1.Создание файла.
2.Дополнение файла.
3. Корректировка данных в файле.
4. Формирование ответов на запросы пользователя:
4.1. Для заданной страны вывести список команды с указанием
фамилии спортсмена и вида спорта;
4.2. Для заданного вида спорта вывести список спортсменов-участников с указанием
страны в порядке возрастания результата;
4.3. Вывести таблицу стран-участниц с указанием количества золотых, серебряных и
бронзовых наград. Таблицу выводить в порядке убывания общего количества наград;
4.4. Для заданного вида спорта построить график изменения средних результатов от
возраста участников;
4.5. Построить круговую диаграмму для заданного вида спорта, иллюстрирующую
количественный состав по странам;
4.6. Построить столбиковую диаграмму, отражающую количественный состав команд.

Автор: NoM 29.04.2006 17:36

Скоро попытаюсь выложить что у меня получаеться с дополнением и корректировкой

Автор: NoM 29.04.2006 18:21

Вот что у меня получилось

Код
uses crt,graph;
type zap=record
      voz,dost:integer;
      fio,cou,vid:string{[30]};
      med:char;
     end;
label menu;
var ch:char;
    yk:byte;
    f:file of zap;
    v:zap;
    i,driver,mode:integer;
    dl_f:longint;
    pr_kor:boolean;

procedure kursor(yk:byte);
procedure stir(ys:byte);
  begin
   textcolor(0);gotoxy(11,ys);write('   ');
  end;
begin
      textcolor(2);gotoxy(11,yk);write('-->');
      if ord(ch)=80 then
        if yk=8 then stir(15)
                else stir(yk-1);
      if ord(ch)=72 then
        if yk=15 then stir(8)
                 else stir(yk+1);
end;

procedure dopolnenie;
var n:char;
label korrect;
   procedure provmed(var med:char);
         begin
          repeat
           write('Введите награду (З,С,Б,-): ');
           readln(med);
          until (med='-')or(med='з')or(med='З')or(med='с')or(med='С')or(med='Б')or(med='б');
         end;
   procedure prov4isl(var voz,dost:integer);
         procedure prov(w:string;var z:integer);
          var s:string;
              rez:integer;
          begin
           repeat
            write(w);
            readln(s);
            val(s,z,rez);
           until (rez=0);
          end;
   begin
       repeat
         prov('Введите возраст: ',voz);
       until (voz<100)and(voz>10);
       repeat
         prov('Введите достигнутое место: ',dost);
       until (dost>=1)and(dost<1000);
    {   repeat
         prov('Vvedite den postanovki na y4et: ',d);
       until (d<=31)and(d>0);
       repeat
         prov('Vvedite god rozdenia: ',groz);
       until (groz<2100)and(groz>1800);
       repeat
         prov('Vvedite staz raboti: ',staz);
       until (staz>=0)and(staz<=100);   }
      end;

begin
textmode(co80);
if pr_kor=true then goto korrect;
assign(f,'baza.txt');
{$I-}
reset(f);
if ioresult<>0 then rewrite(f);
{$I+}
dl_f:=filesize(f);seek(f,dl_f);
korrect:textcolor(15);
gotoxy(1,1);
repeat
  with v do
    begin
      clrscr;
      write('Введите фамилию и имя: '); readln(fio);
      prov4isl(voz,dost);
      write('Введите страну : ');readln(cou);
      write('Введите вид спорта: ');readln(vid);
      provmed(med);
    end;
  if pr_kor then break;
  write(f,v);
  write('Вести еще ? (y/n): ');readln(n);
until (n='n') or (n='N');
textcolor(0);
if pr_kor=false then close(f);
end;



procedure korrektirovka;
label kor;
var poz,str:integer;


     procedure tablica;
        var q:integer;
        begin
         textcolor(3);
         gotoxy(2,1);write('N');
         gotoxy(6,1);write('Страна');
         gotoxy(20,1);write('Фамилия');
         gotoxy(40,1);write('Возраст');
         gotoxy(49,1);write('Вид спорта');
         gotoxy(61,1);write('Достижение');
         gotoxy(73,1);write('Медаль');
         {gotoxy(74,1);write('POL');}
         gotoxy(1,22);
         textcolor(11);
         for q:=1 to 80 do write('-');
         gotoxy(12,23);write('Выберите запись которую вы хотите изменить и нажмите Enter');
         gotoxy(17,24);write('Для передвижения по записям используйте - '+#24#25+'');
         gotoxy(22,25);write('Для выхода в меню нажмите Esc');
         textcolor(15);
        end;
     procedure zamena;
        begin
         pr_kor:=true;
         dopolnenie;
         pr_kor:=false;
         seek(f,(str-1)*20+yk-3);write(f,v);
        end;

begin
textmode(co80);clrscr;
assign(f,'baza.txt');
{$i-}
reset(f);
if ioresult<>0 then
   begin
    write('File not found');
    readln;halt;
   end;
{$i+}
i:=1;poz:=2;str:=1;yk:=3;
ch:=#80;
kor:if ch=#80 then
      begin
       textcolor(2);gotoxy(1,3);write('>');textcolor(15);
      end;
    if ch=#72 then
      begin
       textcolor(2);gotoxy(1,22);write('>');
      end;
seek(f,i-1);
ch:=#0;
while not eof(f) do
    begin
      read(f,v);
      tablica;
      inc(poz);
      if (i>=str*20-20)and(i<=str*20) then
        begin
         textcolor(15);
         gotoxy(2,poz);write(i,'.');
         gotoxy(6,poz);write(v.cou);
         gotoxy(20,poz);write(v.fio);
         gotoxy(40,poz);write(v.voz);
         gotoxy(49,poz);write(v.vid);
         gotoxy(61,poz);write(v.dost);
         gotoxy(73,poz);write(v.med);
         {gotoxy(74,poz);write(v.pol);}
         inc(i);
        end;
    end;
repeat
if keypressed then
         begin
          ch:=readkey;
          if ch=#13 then
             begin
               zamena;clrscr;
               poz:=2;i:=str*20-19;
               textcolor(2);
               gotoxy(1,yk);write('>');
               goto kor;
             end;
          if ch=#0 then
             begin
              ch:=readkey;
              case ord(ch) of
                 80: if yk=22 then
                        begin
                         clrscr;
                         textcolor(0);gotoxy(1,yk);write(' ');
                         poz:=2; yk:=3; str:=str+1;goto kor;
                        end
                     else
                        if (str-1)*20+yk-2<>filesize(f) then
                           begin
                            textcolor(0);gotoxy(1,yk);write(' ');
                            inc(yk);
                           end;
                 72: if ((str-1)*20+yk-2<>1) then
                         if yk<>3 then
                           begin
                             textcolor(0);gotoxy(1,yk);write(' ');
                             yk:=yk-1;
                           end
                         else
                        begin
                          clrscr;
                          textcolor(0);gotoxy(1,yk);write(' ');
                          poz:=2; yk:=22; str:=str-1;i:=(str-1)*20+1;goto kor;
                        end;
              end; {end of case}
             end; {end of ch=0}
          textcolor(2);gotoxy(1,yk);write('>');
         end;{end of keypressed}
until ch=#27;
close(f);
end;

procedure grafik2;
begin
{driver:=detect;initgraph(driver,mode,'');
cleardevice;setcolor(4);
outtextxy(100,100,'fuck off');
rectangle(200,100,400,250);
readln;
closegraph;}
end;




begin
menu:clrscr;
textmode(co40);
textcolor(14);gotoxy(19,5);write('Меню');
textcolor(15);gotoxy(14,8);write('Просмотр и корректировка');
gotoxy(14,9);write('Создание и дополнение');
gotoxy(14,10);write('Запрос-1');
gotoxy(14,11);write('Запрос-2');
gotoxy(14,12);write('Запрос-3');
gotoxy(14,13);write('Диаграмма-1');
gotoxy(14,14);write('Диаграмма-2');
gotoxy(14,15);write('График-1');
textcolor(11);
gotoxy(1,20);
for i:=1 to 40 do write('-');
gotoxy(7,21);write('Для передвижения используйте - '+#24#25+'');
gotoxy(8,22);write('Для выбора нажмите Enter');
gotoxy(9,23);write('Для выхода нажмите Esc');
yk:=8;kursor(yk);
ch:=#0;
repeat
  if keypressed then
   begin
     ch:=readkey;
     if ch=#13 then
        case yk of
          8:begin korrektirovka;goto menu;end;
          9:begin dopolnenie;goto menu;end;
          10:;
          11:;
          12:;
          13:;
          14:begin grafik2;goto menu;end;
          15:;
        end;
     if ch=#0 then
        begin
          ch:=readkey;
          case ord(ch) of
            80: if yk=15 then yk:=8
                else inc(yk);
            72: if yk=8 then yk:=15
                else yk:=yk-1;
          end;
          kursor(yk);
        end;
   end;
until ch=#27;
textmode(co80);
end.

Автор: volvo 29.04.2006 20:45

Замечание: при корректировке данных о спортсмене лучше сделать так, что при нажатии на Enter без введения информации поле остается без изменения (иногда необходимо изменить только, скажем, одну цифру в данных, и ради этого придется перенабирать всю информацию)...

Автор: Гость 29.04.2006 21:34

Хорошо постараюсь
И как организовать поиск по стране ???

Автор: NoM 2.05.2006 19:00

Помогите пожалуйста я не могу найти ошибку в файле ОТСНЕТ должен выводиться список по заданной стране


Прикрепленные файлы
Прикрепленный файл  RGZ_2.rar ( 3.5 килобайт ) Кол-во скачиваний: 67

Автор: NoM 4.05.2006 22:21

Ну помогите хоть 1 диаграмму сделать мне завтра здавать!!! mega_chok.gif