本文整理自网络,侵删。
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.
来源:https://www.cnblogs.com/qkhhxkj/archive/2013/01/02/2842439.html
相关阅读 >>
在xp/2k 下实现 win+ctrl+del 等键的屏蔽的方法
Delphi 调试ios时出现 please specify exact device preset uuid
更多相关阅读请进入《Delphi》频道 >>