zoukankan      html  css  js  c++  java
  • delphi 控制台 输入输出

    program Project1;
    
    {$APPTYPE CONSOLE}
    
    uses
      SysUtils, Classes;
    
    type
      TFriend = record
        name: string[10];
        age : integer;
      end;
      PFriend = ^TFriend;
    
    var
      FriendList    : TList;
      FriendFileName: string;
      
    //const
    //  LeftTop    = '';
    //  LeftBottom = '';
    //
    //  Level      = '';
    //
    //  RightBottom = '';
    //  RightTop    = '';
    //
    //  Cross       = '';
    //
    //  Vertical    = '';
    //
    //  Right       = '';
    //  Left        = '';
    //
    //  Bottom      = '';
    //  Top         = '';
    
    procedure LoadFriendFrmFile();
      procedure AddFriendItem(S: string);
      var
        strList: TStringList;
        P: PFriend;
      begin
        if Length(s) < 0  then exit;
        strList := TStringList.Create();
        try
          strList.Delimiter := '|';
          strList.DelimitedText := S;
    
          New(p);
          P^.name := strList.Strings[0];
          P^.age  := strToIntDef(strList.Strings[1], -1);
    
          FriendList.Add(P);
    
        finally
          strList.Free();
        end;
      end;
    var
      F: TextFile;
      S: string;
    begin
      if not FileExists(FriendFileName) then exit;
      AssignFile(F, FriendFileName);
      try
        Reset(F);
        while not Eof(F) do
        begin
          Readln(F, S);
          AddFriendItem(S);
        end;
      finally
        CloseFile(F);
      end;
    end;
    
    procedure SaveFriendToFile();
    var
      F: TextFile;
      S: string;
      I: integer;
      P: PFriend;
    begin
      if not Assigned(FriendList) then exit;
      if FriendList.Count <= 0 then
      
      AssignFile(F, FriendFileName);
      try
        ReWrite(F);
        for i := 0 to FriendList.Count - 1 do
        begin
          P := FriendList.Items[I];
          S := P^.name + '|' + IntToStr(P^.age);
          Writeln(s);
        end;
      finally
        CloseFile(F);
      end;
    end;
    
    procedure Description();
    begin
      Writeln('┏━━━━━━━━━━━━━━┓');
      Writeln('┃         好友管理           ┃');
      Writeln('┃============================┃');
      Writeln('┃1.A/a 添加新的好友。        ┃');
      Writeln('┃2.M/m 修改好友年龄信息。    ┃');
      Writeln('┃3.D/d 通过好友姓名删除好友。┃');
      Writeln('┃4.P/p 查看好友信息。        ┃');
      Writeln('┃5.F/f 查找好友信息。        ┃');
      Writeln('┃6.E/e 退出。                ┃');
      Writeln('┗━━━━━━━━━━━━━━┛');
    end;
    
    function CheckStr(S: string): boolean;
    var
      i: integer;
    const
      FLAG = '!@#$%^&*()_+-=[]{},./<>?:"|;''\0123456789';
    
    begin
      Result := false;
      for i := 1 to Length(FLAG) do
      begin
        if Pos(FLAG[i], S) > 0 then
        begin
          Result := true;
          Writeln('输入的姓名不合法!');
          break;
        end;
      end;
    end;
    
    function GetName(): string;
    var
      S: string;
    begin
      repeat
        write('请输入姓名: ');
        ReadLn(s);
      until ((Length(s) <= 10) and (not CheckStr(s)));
      Result := S;
    end;
    
    function GetAge(): integer;
    var
      S: string;
      R: integer;
    begin
      R := -1;
    
      while TRUE do
      begin
        write('请输入年龄: ');
        ReadLn(S);
        if ((not TryStrToInt(S, R)) and (R <= 0)) then
          writeln('输入的年龄不合法')
        else
          break;
      end;
    
      Result := R;
    end;
    
    procedure AddFriend();
    var
      P: PFriend;
    begin
      New(p);
      P^.name := GetName();
      P^.age  := GetAge();
      FriendList.Add(P);
    end;
    
    function GetFriendFrmName(name: string): PFriend;
    var
      I: integer;
      P: PFriend;
    begin
      Result := nil;
      for I := 0 to FriendList.Count - 1 do
      begin
        P := FriendList.Items[I];
        if P^.name = name then
        begin
          Result :=  P;
          break;
        end;
      end;
    end;
    
    procedure ModifyFriend();
    var
      P: PFriend;
    begin
      P := GetFriendFrmName(GetName());
      if Assigned(p) then
      begin
        P^.age := GetAge();
      end
      else
        Writeln('好友不存在!');
    end;
    
    procedure DeleteFriend();
    var
      P: PFriend;
      I: integer;
      name: string;
      B: boolean;
    begin
      name := GetName();
      B := false;
      for I := 0 to FriendList.Count - 1 do
      begin
        P := FriendList.Items[I];
        if P^.name = name then
        begin
          Dispose(P);
          FriendList.Delete(I);
          B := true;
          break;
        end;
      end;
    
      if B = false then
        Writeln('好友不存在!');
    end;
    
    procedure PrintTitle();
    begin
      Writeln('┏━━━━━┳━━━━━┳━━━━━┓');
      Writeln('┃index     ┃Name      ┃Age       ┃');
    end;
    
    procedure PrintBottom();
    begin
      Writeln('┗━━━━━┻━━━━━┻━━━━━┛');
    end;
    
    procedure FindFriend();
    var
      P: PFriend;
      S: string;
    begin
      P := GetFriendFrmName(GetName());
      if Assigned(P) then
      begin
        PrintTitle();
        Writeln('┣━━━━━╋━━━━━╋━━━━━┫');
        Writeln(Format('┃%-10d┃%-10s┃%-10d┃', [1, P^.name, P^.age]));
        PrintBottom();
      end
      else
        Writeln('好友不存在!');
    end;
    
    procedure PrintFriend();
    var
      I: integer;
      P: PFriend;
    begin
      if FriendList.Count > 0 then
      begin
        PrintTitle();
        for I := 0 to FriendList.Count - 1 do
        begin
          P := FriendList.Items[I];
          Writeln('┣━━━━━╋━━━━━╋━━━━━┫');
          Writeln(Format('┃%-10d┃%-10s┃%-10d┃', [I + 1, P^.name, P^.age]));
        end;
        PrintBottom();
      end;
    end;
    
    
    procedure GetInput();
    var
      s: string;
    begin
      Description();
      write('请输入命令: ');
      Readln(s);
      while true do
      begin
        s := LowerCase(s);
        case s[1] of
        'a':
          begin
            AddFriend();
          end;
        'm':
          begin
            ModifyFriend();
          end;
        'd':
          begin
            DeleteFriend();
          end;
        'p':
          begin
            PrintFriend();
          end;
        'f':
          begin
            FindFriend();
          end;
        'e':
          begin
            break;
          end;
        else
          writeln('输入的命令不存在!');
        end;
        write('请输入命令: ');
        Readln(s);
      end;
    end;
    
    procedure InitFriend();
    begin
      FriendList := TList.Create();
      LoadFriendFrmFile();
    end;
    
    procedure FreeFriend();
    var
      P: PFriend;
      I: integer;
    begin
      if FriendList.Count > 1 then
      begin
        repeat
          I := FriendList.Count - 1;
          P := FriendList.Items[I];
          Dispose(p);
          FriendList.Delete(I);
        until FriendList.Count = 0;
      end;
    
      FreeAndNil(FriendList);
    end;
    
    
    begin
      FriendFileName := ExtractFilePath(paramstr(0)) + 'friend.txt';
      InitFriend();
      GetInput();
      FreeFriend();
    end.

    // 文件的操作没有完成!!

  • 相关阅读:
    操作系统复习
    你不知道的JS(2)深入了解闭包
    剑指offer(66)机器人的运动范围
    剑指offer(65)矩阵中的路径
    剑指offer(64)滑动窗口中的最大值
    剑指offer(63)数据流中的中位数
    剑指offer(62)二叉搜索树的第K个节点
    剑指offer(61)序列化二叉树
    剑指offer(60)把二叉树打印成多行
    让 Laravel API 永远返回 JSON 格式响应!
  • 原文地址:https://www.cnblogs.com/qkhhxkj/p/2842439.html
Copyright © 2011-2022 走看看