Компьютерный форум OSzone.net  

Компьютерный форум OSzone.net (http://forum.oszone.net/index.php)
-   Программирование и базы данных (http://forum.oszone.net/forumdisplay.php?f=21)
-   -   паскаль задача с меню и открытием файла нужна помощь (http://forum.oszone.net/showthread.php?t=156731)

DiGer911 11-11-2009 17:03 1267624

паскаль задача с меню и открытием файла нужна помощь
 
нужно сделать программу чтобы при выборе строчки открывался файл с текстовой информацией.
я начал делать вот что получилось

Код:

uses crt;
type mas = array [1..9] of string[20];
const stor: mas = ('1','2','3','4','5','6','7','8','9' );
var i,k: byte;
kod: char;
begin
clrscr;
writeln(' название программы');
Kod:=' ';
while kod<>#27 do
begin
for i:=1 to 9 do begin
if I=K then begin
textbackground(1);
textcolor(0);
end
else begin
textbackground(0);
textcolor(15)
end;
gotoxy(1,i+1);
write(stor[i]);
end;

kod:=readkey;
if kod=#0 then
begin
kod:=readkey;
if kod=#72 then
if k>1 then k:=k-1 else k:=9;
if kod=#0 then
end;
end;
end.
c:=readkey;
if c=#80 then
begin
gotoXY(10,whereY-1);
write(s);
end;
if c=#72 then
begin
gotoXY(10,whereY+1);
write(s);
end;


нужно связать это меню с текстовыми файлами,хотябы помогите чтобы прога реагировала на нажатие клавиши enter при выборе строчки

lxa85 11-11-2009 17:58 1267680

DiGer911. Я тут вашему коду некую читаемость придал.
Расставьте пожалуйста комментарии к программе.
В частности - какой end; что закрывает.
Какой скан код, к какой кнопке относится.
Напишите логику ее работы.
Код:

uses crt;
type
        mas = array [1..9] of string[20];
const
        stor: mas = ('1','2','3','4','5','6','7','8','9' );
var
        i,k: byte;
        kod: char;
begin
        clrscr;
        writeln(' название программы');
        Kod:=' ';
        while kod<>#27 do
        begin
                for i:=1 to 9 do
                begin
                        if I=K then
                        begin
                                textbackground(1);
                                textcolor(0);
                        end
                else
                begin
                        textbackground(0);
                        textcolor(15)
                end;
                gotoxy(1,i+1);
                write(stor[i]);
        end;

        kod:=readkey;
        if kod=#0 then
        begin
                kod:=readkey;
                if kod=#72 then
                        if k>1 then
                        k:=k-1
                                else
                        k:=9;
        if kod=#0 then
        end;
       
        end;
end.


c:=readkey;
if c=#80 then
begin
gotoXY(10,whereY-1);
write(s);
end;
if c=#72 then
begin
gotoXY(10,whereY+1);
write(s);
end;

Вместо множественных if _ then используйте конструкцию case _ of.

DiGer911 11-11-2009 18:43 1267710

Код:

type mas = array [1..9] of string[20];
const stor: mas = ('1','2','3','4','5','6','7','8','9' );
      var
      i,k: byte;
      n,kod: char;
    begin
        clrscr;
        writeln('  название  ');
        Kod:=' ';
        while kod<>#27 do
          begin
              for i:=1 to 9 do
                                  begin
                                if I=K then begin
                                              textbackground(5);
                                              textcolor(0);
                                  end
                                  else
                                  begin
                                              textbackground(0);
                                              textcolor(15)
                                  end;
                                gotoxy(1,i+1);
                                write(stor[i]);
          end;

kod:=readkey;{передвижение клавишей вверх}
if kod=#0 then
          begin
              kod:=readkey;
              if kod=#72 then
              if k>1 then k:=k-1 else k:=9;
              if kod=#27 then
          end;
kod:=readkey;
if kod=#0 then
          begin
                  kod:=readkey;{передвижение клавишей вниз}
                  if kod=#80 then
                  if k>1 then k:=k+1 else k:=k-1;
                  if kod=#27 then
          end;
    end;
end.

вот обновил немного код,пока что работает только перемещение,т.е перемещение для выбора нужной строчки,но тоже с проблемами,только снизу вверх и нужно нажимать 2раза на клавишу вверх или вниз.проверьте в паскале сами поймете что к чему.
я сам с трудом понимаю как работает,т.к взял половину изходника из другой задачи,но решить както это надо!нам это ничего непреподавали а сделать надо!вот и хожу по форумам
помогите чем можете пожалуста

lxa85 11-11-2009 18:58 1267724

сейчас оттрассировать не успею. В воскресенье в лучшем случае.

DiGer911 11-11-2009 20:14 1267813

люди,переделал прогу!теперь проблема в том что неоткрывает файл!никаких ошибок невыдает!а содержимое непоказывает!
текстовый файл создал но хз в чем проблема!помогите блин завтра надо сдать
Код:

Uses CRT;
Const MaxMenuItem = 4;
Var Ret : Byte;
  f: text;
  s: string;

Function MainMenu(R_Select:Byte):Byte;
Type TMenu = record
        X,Y : Byte;
          S : String[20];
    End;
Var
    Menu : Array [0..MaxMenuItem] Of TMenu;
    Run : Boolean; {ўлЎа** Їг*Єв ¬Ґ*о}
    Sel : Byte;
    TC, TB : Byte; {color}
    Procedure DrawMenu;
    Var I : Byte;
    Begin
        For I := 0 To MaxMenuItem Do
        Begin
              GotoXY(Menu[i].X, Menu[i].Y);
              Write(Menu[i].S);
        End;
    End;
Procedure Select (I:Byte);
    Begin
        TextBackground(TC); TextColor(TB);
        GotoXY(Menu[i].X, Menu[i].Y);
        Write(Menu[i].S);
        TextBackground(TB); TextColor(TC);
    End;
    Procedure DeSelect (I:Byte);
    Begin
    GotoXY(Menu[i].X, Menu[i].Y);
        Write(Menu[i].S);
            End;
Begin
    Menu[0].S := 'item 0'; Menu[0].X := 5; Menu[0].Y :=  4;
    Menu[1].S := 'item 1'; Menu[1].X := 5; Menu[1].Y :=  5;
    Menu[2].S := 'item 2'; Menu[2].X := 5; Menu[2].Y :=  6;
    Menu[3].S := 'item 3'; Menu[3].X := 5; Menu[3].Y :=  7;
    Menu[4].S := ' exit '; Menu[4].X := 5; Menu[4].Y :=  8;
    ClrScr;
    TC := TextAttr mod 16;
    TB := TextAttr div 16;
    DrawMenu;
    Sel := R_Select;
    Select(Sel);
    Run := False;
    While Not Run Do Begin
          Case ReadKey Of
                #13 : Run := True;
                #27 : Begin
                          Run := True;
                          Sel := MaxMenuItem;
                      End;
                #0 : Case ReadKey Of
                          #72 : Begin
                                      DeSelect(Sel);
                                      If Sel = 0
                                      Then Sel := MaxMenuItem
                                      Else Sel := Sel - 1;
                                      Select(Sel);
                                End;
                          #80 : Begin
                                      DeSelect(Sel);
                                      If Sel = MaxMenuItem
                                      Then Sel := 0
                                      Else Sel := Sel + 1;
                                      Select(Sel);
                                End;
                      End;
          End;
    End;
    MainMenu := Sel;
    ClrScr;
End;
Begin
    ClrScr;
    Ret := 0;
    Repeat
          Ret := MainMenu(Ret);
          Case Ret Of
              0: Begin
              WriteLn('‚лЎа** Їг*Єв: ', Ret);
                  assign(f,'c:\A.txt');
                  reset(f);
                  close(f);
                  ReadLn;
                  End;

              1: Begin
                      WriteLn('‚лЎа** Їг*Єв: ', Ret);
                      ReadLn;
                  End;
              2: Begin
                      WriteLn('‚лЎа** Їг*Єв: ', Ret);
                      ReadLn;
                  End;
              3: Begin
                      WriteLn('‚лЎа** Їг*Єв: ', Ret);
                      ReadLn;
                  End;
              Else Begin
                      WriteLn('‚л室 Ё§ Їа®Ја*¬¬л');
                      ReadLn;
                    End;
          End; {case Ret}
    Until Ret = MaxMenuItem;
End.
var
  f: text;
  s: string;
begin
  assign(f,'filename');
  reset(f);
  readln(f,s);
  close(f);
end;


Alan85 11-11-2009 20:49 1267849

Цитата:

Цитата DiGer911
assign(f,'c:\A.txt'); reset(f); close(f); »

а почему он должен что-то показать - ты его открываешь и тут же закрываешь ничего не сделав.

DiGer911 11-11-2009 21:45 1267894

Alan85,
да,я уже понял в чем ошибка=)ступил я=)


Время: 10:42.

Время: 10:42.
© OSzone.net 2001-