Система автоматизации обмена валют AObmen (1995 год)

AObmen я писал в 1995-1996 годах, когда подрабатывал на фирме по обмену валют. Это был мой первый большой проект, его даже подавали на лицензирование в Нац Банк! Сейчас без слез на код смотреть сложно, но из песени слов не выбросишь. А псевдографика в текстовом режиме 80×25 чего стоит! 🙂

{*************************************************************************}

Procedure TValuta.DoName;
Begin
  Case Kod_Val^ of
   1   : Name^ := 'Доллар США';
   48  : Name^ := 'Марка Герм.';
   858 : Name^ := 'Рубль РФ';
   833 : Name^ := 'Карбованец';
  End;{Case Kod_Val of}
End;{Procedure TValuta.DoType}

{*************************************************************************}

Function InsertComma(PoleStr : String) : String;
    { Вставлет запятые в 'цыфровые' String'и через 3 знака (-1,908,777.6) }
    { String может содержать пробелы в начале                             }
Var
  Nom                       : Extended;
  Control,RegDec            : String;
  RegS,RegA                 : String[3];
  DecPoint,EndStr,i,m,kod   : integer;
  Znak                      : Boolean;
Begin
  InsertComma:=PoleStr;
  RegDec:='';
  Znak:=False;
{@@@@ PoleStr:=DeleteChar(PoleStr,',');   {Удаляем старые запятые ','@@@}
  PoleStr:=DeleteChar(PoleStr,' ');   {Удаляем незначащие пробелы}
  Val(PoleStr,Nom,kod);
  if (kod<>0) or (Abs(Nom) < 1000) {ничиго вставлять не нужно!}
    then Exit;

  if (PoleStr[1] = '-') then    {Если Число Отрицательное}
   begin
     Znak:=True;
     Delete(PoleStr,1,1);
   end;{if (PoleStr[i] = '-') then}
  DecPoint:=Length(PoleStr);
  for i:=1 to Length(PoleStr) do   {поиск десятичной точки}
   begin
     if (PoleStr[i] = '.') then
      begin
        DecPoint := i-1;
      end;{if (PoleStr[i] = '.') then}
   end;{for i:=1 to Length(PoleStr) do}
  EndStr := DecPoint;

  Control:=Copy(PoleStr,DecPoint-2,Length(PoleStr)-DecPoint+3);
    RegS:='';
    m:=1;
  for i := EndStr-3 downto 1 do
   begin
     RegA[4-m]:= PoleStr[i];
     Inc(m);
     if (m >= 4) {or (i = 1)} then
      begin
        RegS:=copy(PoleStr,i,3);
        Control := RegS + ',' + Control;
        m:=1;
        RegS:='';
      end;{if ... then}
   end;
  if m <> 1
   then Control := Copy(PoleStr,1,m-1) + ',' + Control;
  if Znak  {Если Число Отрицательное}
   then Control := '-' + Control;
  InsertComma := Control;
End;{Function InsertComma}

{*************************************************************************}

Procedure DoObmenOperations(IKod_Op               : integer;
                            IKassir               : String;
                            PValutaList           : PListOfValuta;
                            Var Out, Prt          : Boolean);
Label
  Beg;
Var
  D                             : PDoOperationsDialog;
  DI                            : PDialog;
  R                             : TRect;
  Control                       : Word;
  Err,ReDo,DoOper               : Boolean;
  Kod_OpS,SumkaNameS,
  PokNameS,ProdNameS,
  PokTxtS,ProdTxtS               : String;
Begin
  R.Assign(1, 1, 32, 8);
  DI := New(PDialog, Init(R,''));
  With DI^ do
   Begin
     R.Assign(0, 0, 31, 1);
     Insert(New(PStaticText, Init(R,
       'г=[i]========================¬')));
     Inc(R.A.y); Inc(R.B.y);
     Insert(New(PStaticText, Init(R,
       '¦  Обменный Пункт N°         ¦')));
     Inc(R.A.y); Inc(R.B.y);
     Insert(New(PStaticText, Init(R,
       '¦  Сегодня :                 ¦')));
     Inc(R.A.y); Inc(R.B.y);
     Insert(New(PStaticText, Init(R,
       '¦                            ¦')));
     Inc(R.A.y); Inc(R.B.y);
     Insert(New(PStaticText, Init(R,
       '¦  Работает Кассир :         ¦')));
     Inc(R.A.y); Inc(R.B.y);
     Insert(New(PStaticText, Init(R,
       '¦                            ¦ ')));
     Inc(R.A.y); Inc(R.B.y);
     Insert(New(PStaticText, Init(R,
       'L============================- ')));

     Str(IKod_Op,Kod_OpS); 
     R.Assign(21, 1, 29, 2);
     Insert(New(PStaticText, Init(R,Kod_OpS)));

     R.Assign(1, 3, 29, 4);
     Insert(New(PStaticText, Init(R,^C+DateStr)));

     R.Assign((29 + 3 - Length(IKassir)) div 2, 5, 29 ,6);
     Insert(New(PStaticText, Init(R, IKassir)));
   End;{with DI^ do}

  R.Assign(2, 10, 77, 21);
  D := New(PDoOperationsDialog, Init(R,'',PValutaList));
  With D^ do
   Begin
     Kassir := NewStr(IKassir);
     Kod_Op^ := IKod_Op;
     MakeFiles(IKod_Op,SumkaNameS,PokNameS,ProdNameS,PokTxtS,ProdTxtS,False);
     SumkaName := NewStr(SumkaNameS);
     PokName   := NewStr(PokNameS);
     ProdName  := NewStr(ProdNameS);
     PokTxt    := NewStr(PokTxtS);
     ProdTxt   := NewStr(ProdTxtS);
   End;{With D^}
   
Beg:
  Out := False;
  Prt := False;
  if D^.DC^.Valid(cmValid)
   then  DeskTop^.Insert(D^.DC);
  if DI^.Valid(cmValid)
   then  DeskTop^.Insert(DI);
  if D^.Valid(cmValid) then
   begin
     Control := DeskTop^.ExecView(D);
     if D^.DC^.Valid(cmValid)
      then  DeskTop^.Delete(D^.DC);
     if DI^.Valid(cmValid)
      then  DeskTop^.Delete(DI);
     Case Control of
      cmCancel,
      cmClose       : begin
                        GoTo Beg;
                      end;
      cmQuit        : begin
                        Prt:=False;
                        Out:=False;
                      end;
      cmPrintRiestr : begin
                        Prt:=True;
                        Out:=False;
                      end;
      cmEndSumka    : begin
                        Out:=True;
                        Prt:=False
                      end;
      Else            begin
                        GoTo Beg;
                      end;
     End;{Case Control of}
   end;{if D^.Valid(cmValid)}

   if D^.Valid(cmValid)
    then Dispose(D, Done);
   if DI^.Valid(cmValid)
    then Dispose(DI, Done);
End;

Прикольное было время: Win 3.11 был диковинкой, у всех стоял MS-DOS, компьютеры продавались без мышек!

А вообще на этом продукте я и стал настоящим программистом. Убедило меня не бросать это безнадежное дело восторги 30-40 сотрудников от моего АРМ 🙂

Система автоматизации обмена валют AObmen (1995 год): 4 комментария

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

        Нравится

Добавить комментарий

Заполните поля или щелкните по значку, чтобы оставить свой комментарий:

Логотип WordPress.com

Для комментария используется ваша учётная запись WordPress.com. Выход /  Изменить )

Google photo

Для комментария используется ваша учётная запись Google. Выход /  Изменить )

Фотография Twitter

Для комментария используется ваша учётная запись Twitter. Выход /  Изменить )

Фотография Facebook

Для комментария используется ваша учётная запись Facebook. Выход /  Изменить )

Connecting to %s