Помощь - Поиск - Пользователи - Календарь
Полная версия: 2 типизированных файла
Форум «Всё о Паскале» > Pascal, Object Pascal > Задачи
choodo
Помогите, пожалуйста, решить задачу, которую я решаю уже месяца 2..
Вот условие:
Даны 2 файла:
F1:шифр продукции; наименование
F2:№ склада; шифр продукции; количество

На одном складе может быть несколько видов продукции и продукция с одним шифром может встречаться в разных записях(т.е. в разных записях по файлу, на каждом складе в различных количествах?)

Нужно выдать ведомость для каждого склада:
[Шифр; наименование; количество(сумма)]

Значение номера склада печатать только в заголовке и подсчитать количество различных видов продукции на каждом складе.
Пример:
------№ склада 10 ----------
Шифр:56
Наименование: лампа паяльная
Количество:100
Шифр:99
Наименование: лампа керосиновая
Количество:100

------№ склада 19 ----------
Шифр:58
Наименование: лампа накаливания(220В, 150Вт)
Количество:107
Шифр:99
Наименование: лампа керосиновая
Количество:10

У меня проблемы с выводом ведомости(то наименование неправильно выводит, то суммирует не то?).

Код

uses crt;
type
table=record
     ct:word;{Cipher in Table}
     name:string[60];{naimenovanie}
     end;
storage=record
     number:byte;{nomer sklada}
     cs:word;{Cipher in Storage}
     amount:word;{kolichestvo}
     end;
const
end_menu:boolean=false;
var
f1:file of table;
f2:file of storage;
work1:table;
work2:storage;
{/////////////////}
procedure ioe;
begin
textcolor(4);
writeln;
writeln('Ћ??ЃЉЂ ‚‚Ћ„Ђ! ЏЋЏђЋЃ“‰’… ‘ЌЋ‚Ђ!');
writeln;
writeln('ЌЂ†Њ?’… ‹ћЃ“ћ Љ‹Ђ‚??“...');
textcolor(10);
readkey;
end;
{/////////////////}
procedure inputintable;
var
c:byte;
aonr,i:word;
begin
clrscr;
reset(f1);
writeln('1-‚‚…‘’? …„?Ќ?—Ќ“ћ ‡ЂЏ?‘њ');
writeln('2-‚‚…‘’? Ќ…‘ЉЋ‹њЉЋ ‡ЂЏ?‘…‰');
write('>');
readln(c);
case c of
    1:with work1 do
           begin
           seek(f1,filesize(f1));
           write('??”ђ ЏђЋ„“Љ–??:');
           readln(ct);
           write('ЌЂ?Њ…ЌЋ‚ЂЌ?…:');
           readln(name);
           write(f1,work1);
           end;
    2:begin
      seek(f1,filesize(f1));
      write('‚‚…„?’… ЉЋ‹?—…‘’‚Ћ ЌЋ‚›• ‡ЂЏ?‘…‰:');
      readln(aonr);
      for i:=1 to aonr  do
          begin
          clrscr;
          writeln('‡ЂЏ?‘њ ь (ЌЋ‚Ђџ) ',i);
          with work1 do
               begin
               write('??”ђ ЏђЋ„“Љ–??:');
               readln(ct);
               write('ЌЂ?Њ…ЌЋ‚ЂЌ?…:');
               readln(name);
               write(f1,work1);
               end;
          end;
      end;
  end;
close(f1);
end;
{////////////////////////////////////////////}
procedure inputinstorage;
var
c:byte;
aonr,i:word;
begin
clrscr;
reset(f2);
writeln('1-‚‚…‘’? …„?Ќ?—Ќ“ћ ‡ЂЏ?‘њ');
writeln('2-‚‚…‘’? Ќ…‘ЉЋ‹њЉЋ ‡ЂЏ?‘…‰');
write('>');
readln(c);
case c of
    1:with work2 do
           begin
           seek(f2,filesize(f2));
           write('ь ‘Љ‹Ђ„Ђ:');
           readln(number);
           write('??”ђ ЏђЋ„“Љ–??:');
           readln(cs);
           write('ЉЋ‹?—…‘’‚Ћ:');
           readln(amount);
           write(f2,work2);
           end;
    2:begin
      seek(f2,filesize(f2));
      write('‚‚…„?’… ЉЋ‹?—…‘’‚Ћ ЌЋ‚›• ‡ЂЏ?‘…‰:');
      readln(aonr);
      for i:=1 to aonr do
          begin
          clrscr;
          writeln('‡ЂЏ?‘њ ь (ЌЋ‚Ђџ)',i);
          with work2 do
               begin
               write('ь ‘Љ‹Ђ„Ђ:');
               readln(number);
               write('??”ђ ЏђЋ„“Љ–??:');
               readln(cs);
               write('ЉЋ‹?—…‘’‚Ћ:');
               readln(amount);
               write(f2,work2);
               end;
          end;
      end;
  end;
close(f2);
end;
{/////////////////}
procedure bordereau;
var
i,j,k,l,m,fnumber,lnumber,fct,lct:word;
sum:longint;
cstring:string[60];
cond:boolean;
begin{1}
clrscr;
writeln('---------------------------BEDOMOCTb---------------------------------');
reset(f1);
reset(f2);
{vychisljaem nomera zanesennyh v basu skladov}
fnumber:=65535;{first storage}
lnumber:=0;    {last storage}
for i:=1 to filesize(f2) do
   begin{2}
   read(f2,work2);
   if work2.number<fnumber then fnumber:=work2.number;
   if work2.number>lnumber then lnumber:=work2.number;
   end;{2}
{vychisljaem shifry zanesennyh v basu tovarov}
fct:=65535;{first ciphertable}
lct:=0;    {last  ciphertable}
for i:=1 to filesize(f1) do
   begin{3}
   read(f1,work1);
   if work1.ct<fct then fct:=work1.ct;
   if work1.ct>lct then lct:=work1.ct;
   end;{3}
{!}
{dalee nachalis' problemy :))}
seek(f1,0);
seek(f2,0);
sum:=0;
for i:=fnumber to lnumber do
   begin{4}
   for j:=fct to lct do
       begin{5}
       read(f2,work2);
       if ((work2.number=i) and (work2.cs=j)) then
          begin{6}
          seek(f2,0);
          for k:=1 to filesize(f2) do
              begin{7}
              read(f2,work2);
              if ((work2.number=i) and (work2.cs=j)) then sum:=sum+work2.amount;
              end;{7}
          for l:=1 to filesize(f1) do
              begin{8}
              read(f1,work1);
              if work1.ct=j then
                 begin{9}
                 cstring:=work1.name;{cstring-CipherString}
                 break;
                 end;{9}
              end;{8}
          end;{6}
       writeln('storage # ',i);
       writeln('cipher: ',j);
       writeln('name: ',cstring);
       writeln('amount: ',sum);
       writeln('--------------------------');
       seek(f1,0);
       seek(f2,0);
       sum:=0;
       end{5}
   end;{4}
readkey;
end;{1}
{/////////////////}
procedure menu;
var
code:char;
pstn,c:integer;
cnd:boolean;
begin{!}
cnd:=false;
while cnd<>true do
     begin{while}
     clrscr;
     writeln('і=============KOHTOPA==============і');
     writeln('і1-‚Ќ…‘…Ќ?… „ЂЌЌ›• ‚ ЃЂ‡“ "table"  і');
     writeln('і2-‚Ќ…‘…Ќ?… „ЂЌЌ›• ‚ ЃЂ‡“ "storage"і');
     writeln('і3-‚›„Ђ’њ ‚…„ЋЊЋ‘’њ                і');
     writeln('і4-‚›•Ћ„                           і');
     write  ('ЉЋ„ ЋЏ…ђЂ–??:');
     readln(code);
     val(code,c,pstn);
     if pstn=0 then
        begin
        case c of
             1:inputintable;
             2:inputinstorage;
             3:bordereau;
             4:end_menu:=true;
        end;
     cnd:=true;
     end
     else ioe;
     end;{while}
end;{!}
{///////////////////////}
{/////main_program//////}
begin
clrscr;
{\\\\\\\\\\\\\\\\\\\\}
assign(f1,'table.dat');
{$I-}
reset(f1);
{$I+}
if ioresult<>0 then
  begin
  textcolor(4);
  writeln('”Ђ‰‹ "table.dat" Ќ… ЌЂ‰„…Ќ. Ѓ“„…’ ‘Ћ‡„ЂЌ ЌЋ‚›‰ ”Ђ‰‹');
  readkey;
  rewrite(f1);
  end;
{\\\\\\\\\\\\\\\\\\\\}
assign(f2,'storage.dat');
{$I-}
reset(f2);
{$I+}
if ioresult<>0 then
  begin
  textcolor(4);
  writeln('”Ђ‰‹ "storage.dat" Ќ… ЌЂ‰„…Ќ. Ѓ“„…’ ‘Ћ‡„ЂЌ ЌЋ‚›‰ ”Ђ‰‹');
  readkey;
  rewrite(f2);
  end;
close(f1);
close(f2);
textcolor(10);
{/////////////////////}
repeat menu until end_menu;
end.

volvo
Ну и что это за файл? Может лучше приаттачить PAS?
GoodWind
очень советую посмотреть в Russian SWAG, там есть про это что-то....
Это текстовая версия — только основной контент. Для просмотра полной версии этой страницы, пожалуйста, нажмите сюда.