unit unitfunc;
inte***ce
uses
windows, messages, sysutils, classes;
type
tfunc = class(tpersistent)
private
obj_name: string;
obj_desc: string;
obj_type: string;
in_list: tstrings;
out_list: tstrings;
dispose: string;
cs: tstrings;
procedure init;
procedure clear;
function getpkg(): tstrings;
procedure comment(const ct: widestring);
procedure paramater(const ct: widestring);
function gettype(const ct: widestring): boolean;
function getpc(const ct: widestring): string;
public
constructor create;
destructor destroy; override;
function getsamplepkg(mm: tstrings): tstrings;
end;
function singlefunc(): tfunc;
resourcestring
cmt = '%s
%s';
implementation
varffunc: tfunc;
function singlefunc(): tfunc;
begin
if not assigned(ffunc) then
ffunc := tfunc.create;
result := ffunc;
end;
constructor tfunc.create;
begin
init;
end;
destructor tfunc.destroy;
begin
in_list.free;
out_list.free;
cs.free;
inherited;
end;
function tfunc.getsamplepkg(mm: tstrings): tstrings;
vari: integer;
bool: boolean;
str: string;
begin
clear;
bool := false;
for i := 0 to mm.count - 1 do
begin
str := uppercase(mm[i]);
if pos(':', str) > 0 then comment(str);
if not bool then
bool := gettype(str);
if bool then paramater(str);
end;
result := getpkg;
end;
function tfunc.getpkg: tstrings;
begin
result := tstringlist.create;
result.add('');
result.add(format(cmt, ['物件名稱', obj_type + obj_name]));
result.add(format(cmt, ['物件描述', obj_desc]));
result.add(format(cmt, ['輸入', in_list.text]));
result.add(format(cmt, ['輸出', out_list.text]));
result.add(format(cmt, ['處理', self.dispose]));
result.add('');
end;
procedure tfunc.comment(const ct: widestring);
varp: integer;
ls, rs: widestring;
begin
p := pos(':', ct);
ls := uppercase(trim(copy(ct, 5, p - 5)));
rs := trim(copy(ct, p + 1, length(ct)));
if sametext(ls, 'name') then
obj_name := rs
else if sametext(ls, 'description') then
obj_desc := rs;
end;
procedure tfunc.init;
begin
in_list := tstringlist.create;
out_list := tstringlist.create;
cs := tstringlist.create;
cs.add('name=物件名稱');
cs.add('description=物件描述');
cs.add('dispose=處理');
end;
procedure tfunc.clear;
begin
obj_name := '';
obj_desc := '';
obj_type := '';
in_list.clear;
out_list.clear;
end;
function tfunc.gettype(const ct: widestring): boolean;
begin
result := pos('procedure', ct) > 0;
if result then
obj_type := '過程'
else if (pos('function', ct) > 0) then
begin
result := true;
obj_type := '函式';
end;
end;
procedure tfunc.paramater(const ct: widestring);
varl, p: integer;
begin
p := pos(' in ', ct);
if (p > 0) then
begin
l := pos('(', ct) + 1;
in_list.add(trim(copy(ct, l, p - l)) + getpc(ct) + '
');end
else begin
p := pos(' out ', ct);
if (p > 0) then
out_list.add(trim(copy(ct, 1, p)) + '
');end;
end;
function tfunc.getpc(const ct: widestring): string;
varp: integer;
begin
p := pos('--', ct);
if p = 0 then
result := ''
else
result := ' ' + trim(copy(ct, p + 2, length(ct)));
end;
end.
介面文件生成詳細教程
介面文件是乙個專案開發中必需的說明文件,但時介面文件編寫起來比較費事費力。本文為大家推薦一款特別好用的介面文件生成工具 apipost apipost是一款國產的介面測試和介面文件生成的工具。其中它介面文件生成的功能特別強大。開啟apipost編寫乙個登入的介面請求 它這裡有兩個功能,成功響應示例及...
詳細設計文件
如上圖,可以看到詳細設計文件是,瀑布模型 中承上啟下的乙個關鍵環節,在做好需求分析和軟體架構之後,寫好詳細設計文件就意味可以進行編碼了。由此,可以看到詳細設計文件有三個作用 1,為具體編碼環節做好鋪墊與設計,從而指導編碼工作 2,提供測試所需文件參考 3,可作為理解編碼的參考文件。詳細設計的主要任務...
詳細設計文件
如何寫詳細設計文件是乙個很頭疼的話題,簡單的說是需求文件的昇華,也可以說是開發人員開發程式的依據,當然根據詳細設計文件的粒度進行。好的詳細設計文件是需求人員和開發人員之間的橋梁,不過目前好多程式開發都是先開發後,然後為了應付審核,公司制度,文件規範,開發完成後後續補上該文件。如果這樣的方式,詳細設計...