Delphi7做的古漢文翻譯系統

前陣子幫朋友弄了個古漢文詞字翻譯系統,首先聲明一下,本來是要弄古漢文翻譯系統的(能翻譯句子)但經仔細考慮後,感覺也只能做出個詞字翻譯系統出來.想想自己畢竟沒學習過DELPHI這門語言,我記得我們本來是上學期要教的,但最終沒交,教材也早買了,不過也沒什麼,老師叫看,最後還是碰上朋友要弄系統,才花了一週弄了個自我感覺不怎麼良好的系統出來 .

想想,其實是可以弄出古文翻譯系統出來的,怎奈自己學藝不精啊,看來以後要多加努力學習了,現在總結一下自己的學習經驗吧,以供後人(古文翻譯系統在網上沒有出現過,希望今後能有高手弄出來)畢竟我本身是學C#的,兼學習一下C++,至於JAVA嘛,因爲學校主要是教JAVA的,所以,基礎知識也還可以.之前弄個成績管理系統,也用過VB,總感覺VB和DELPHI差不多一樣,都很簡單,功能當然就比不上C++,JAVA,C#等了.想想自己出去用什麼語言呢,不知道,反正現在主功C#先吧,出去工作再說了,看需要了,要是真的需要,用JAVA或C++都不一定.

現在介紹一下古漢文詞典吧!

開發環境:XPSP2+DELPHI7.0+ACCESS2003

首先呢,是用ACCESS2003建數據庫:WZDB

建表(wenzi):

      編號(自動編號) 

        gw   文本  50

       bhw  文本 200

  主界面設計如下圖:

主界面中包含三個TToolButton,一個TImageList控件,至於具體的命名,讀者可看代碼就可知道了,畢竟這個系統不難嘛.

主界面代碼如下:

unit U_main;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs,Registry, ImgList, ComCtrls, ToolWin;

type
  TF_main = class(TForm)
    CoolBar1: TCoolBar;
    ToolBar1: TToolBar;
    ToolBtn_dzb: TToolButton;
    ToolBtn_fy: TToolButton;
    ToolBtn_close: TToolButton;
    ToolButton4: TToolButton;
    ImageList1: TImageList;
    ToolButton1: TToolButton;
    procedure ToolBtn_closeClick(Sender: TObject);
    procedure ToolBtn_dzbClick(Sender: TObject);
    procedure ToolBtn_fyClick(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  F_main: TF_main;

implementation

uses   U_dzb, U_fy;

{$R *.dfm}

procedure TF_main.ToolBtn_closeClick(Sender: TObject);
begin
  close;
end;

procedure TF_main.ToolBtn_dzbClick(Sender: TObject);
begin
  //對照表
  application.CreateForm(TF_dzb,F_dzb);
  F_dzb.ShowModal;
  F_dzb.Free;
end;

procedure TF_main.ToolBtn_fyClick(Sender: TObject);
begin
  //翻譯
  application.CreateForm(TF_FY,F_FY);
  F_FY.ShowModal;
  F_FY.Free;
end;
end.

系統對應應用程序代碼如下:

program Pwww;

uses
  Forms,
  U_main in 'U_main.pas' {F_main};

{$R *.res}

begin
  Application.Initialize;
  Application.Title := '翻譯系統';
  Application.CreateForm(TF_main, F_main);
  Application.Run;
end.

添加詞庫數據文件的對照表界面設計這裏就不介紹了,其中包括兩個TLabel,兩個TEdit,四個TButton,一個TTable,一個TDatabase,一個TDatasource控件,代碼如下:

 

unit U_dzb;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, Grids, DBGrids,Registry, StdCtrls, Buttons, DB, DBTables;

type
  TF_dzb = class(TForm)
    GroupBox1: TGroupBox;
    Label1: TLabel;
    Edit1: TEdit;
    Edit2: TEdit;
    Label2: TLabel;
    Btn_Add: TBitBtn;
    Btn_del: TBitBtn;
    Btn_save: TBitBtn;
    Btn_Close: TBitBtn;
    DBGrid1: TDBGrid;
    DataSource1: TDataSource;
    Editbtn: TButton;
    Table1: TTable;
    Database1: TDatabase;
    procedure FormShow(Sender: TObject);
    procedure Btn_CloseClick(Sender: TObject);
    procedure Btn_AddClick(Sender: TObject);
    procedure EditbtnClick(Sender: TObject);
    procedure Btn_delClick(Sender: TObject);
    procedure Btn_saveClick(Sender: TObject);
    procedure FormCreate(Sender: TObject);
    procedure FormDestroy(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  F_dzb: TF_dzb;
  ps:string;

implementation

{$R *.dfm}

procedure TF_dzb.FormShow(Sender: TObject);     //初始化對照表
begin
  F_dzb.Top:=100;
  F_dzb.Left:=100;
  ps:=Table1.Bookmark;  //指針初始位置
end;

procedure TF_dzb.Btn_CloseClick(Sender: TObject);   //關閉
begin
  close;
end;

procedure TF_dzb.Btn_AddClick(Sender: TObject);     //添加
begin
   with Table1 do
   begin
   Open;
   Table1.IndexFieldNames:='古文';
   if Table1.FindKey([Edit1.Text]) then
   begin
   showmessage('詞庫中巳有該詞,請從新添加!');
   end
   else
   begin
   Edit;
   Append;
   Table1.FieldByName('古文').AsString:=Trim(Edit1.Text);
   Table1.FieldByName('白話文').AsString:=Trim(Edit2.Text);
   post;
   end;
   Table1.Bookmark:=ps;        //指針返回初始位置
   Edit1.Text:='';
   Edit2.Text:='';
 end;
 end;
procedure TF_dzb.EditbtnClick(Sender: TObject);        //修改
var
str:string;
begin
   str:=InputBox('修改','修改爲:',DBGrid1.SelectedField.AsString);
   Table1.Edit;
   DBGrid1.SelectedField.AsString:=str;
   end;
procedure TF_dzb.Btn_delClick(Sender: TObject);   //刪除
begin
if Application.MessageBox('確定要刪除此記錄嗎?','提示',MB_YESNO)=ID_Yes Then
begin
Try
Table1.Delete;
Application.MessageBox('刪除成功.','提示',64);
Except
Application.MessageBox('系統出錯,刪除失敗.','提示',64)
end;
end;
end;
procedure TF_dzb.Btn_saveClick(Sender: TObject);    //保存
begin
Table1.refresh;
Application.MessageBox('保存成功','提示',64);
end;
procedure CreateSource;  //自動註冊數據源
 var
registerTemp:TRegistry;
bData:array[0..0] of byte;
begin
registerTemp:=TRegistry.Create;
with registerTemp do
begin
RootKey:=HKEY_LOCAL_MACHINE;
if OpenKey('Software/ODBC/ODBC.INI/ODBC Data Sources',True) then
begin
WriteString('wenyanwen', 'Microsoft Access Driver (*.mdb)');
end
else
begin
showmessage('增加ODBC數據源失敗');
exit;
end;
CloseKey;
if OpenKey('Software/ODBC/ODBC.INI/wenyanwen',True) then
begin
WriteString('DBQ','C:/fyxt/WZDB.mdb');
WriteString('Description', '我的新數據源');
WriteString('Driver','C:/WINDOWS/system32/odbcjt32.dll');
WriteInteger('DriverId',25);
WriteString('FIL','Ms Access');
WriteInteger('SafeTransactions',0);
WriteString('UID','');//用戶名稱
bData[0]:=0;
WriteBinaryData('Exclusive',bData,1);
WriteBinaryData( 'ReadOnly',bData,1);
end
else
begin
showmessage('增加ODBC數據源失敗');
exit;
end;
CloseKey;
if OpenKey('Software/ODBC/ODBC.INI/wenyanwen/Engines/Jet',True) then
begin
WriteString('ImplicitCommitSync','');
WriteInteger('MaxBufferSize',2048);
WriteInteger('PageTimeout',5);
WriteInteger('Threads',3);
WriteString('UserCommitSync','Yes');
end
else
begin
showmessage('增加ODBC數據源失敗');
exit;
end;
CloseKey;
Free;
end;
end;
procedure AutoLogo;      //自定義數據庫自動登錄
var
 MyDSN:string;
 begin
 MyDSN:='wenyanwen';
 with F_dzb.Database1 do
 begin
 Params.Values['username']:='';
 Params.Values['password']:='';
 LoginPrompt:=false;
 AliasName:='MyDSN';
 end;
 with F_dzb.Table1 do
 begin
 DatabaseName:='wenyanwen';
 TableName:='wenzi';
  Open;
  Active:=True;
  end;
  end;
procedure TF_dzb.FormCreate(Sender: TObject);
begin
 CreateSource;
 AutoLogo;
end;
procedure TF_dzb.FormDestroy(Sender: TObject);
begin
Table1.close;
end;

end.

其中添加了自動註冊數據源(不過這個自動註冊數據源只能是你開發系統時在C盤開發時,纔有效,否則無效,不過要是製作成安裝程序包後,按理論,這個問題就得到解決了),還有就是自動註冊數據源,要在uses上添加Registry.

翻譯設計界面包括了三個TToolButton,一個TEdit,一個TMemon,一個TTable控件,其設計界面這裏也不介紹了,代碼如下:

unit U_fy;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, ExtCtrls, StdCtrls, ComCtrls, ToolWin, DB, DBTables;

type
  TF_FY = class(TForm)
    CoolBar1: TCoolBar;
    ToolBar1: TToolBar;
    fyBtn: TToolButton;
    ToolButton4: TToolButton;
    ToolButton5: TToolButton;
    Table1: TTable;
    Edit1: TEdit;
    Memo1: TMemo;
    ToolButton1: TToolButton;
    ToolButton2: TToolButton;
    procedure fyBtnClick(Sender: TObject);
    procedure FormCreate(Sender: TObject);
    procedure ToolButton5Click(Sender: TObject);
    procedure ToolButton1Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;


var
  F_FY: TF_FY;

implementation

uses U_main;

{$R *.dfm}

procedure TF_FY.fyBtnClick(Sender: TObject);  //翻譯
begin
  Table1.IndexFieldNames:='古文';
  if Table1.FindKey([Edit1.Text]) then
  begin
  Memo1.Text:=Table1.FieldByName('白話文').AsString
  end
  else
  Memo1.Text:=Edit1.Text;
  end;
procedure TF_FY.FormCreate(Sender: TObject);   //初始化翻譯窗口
begin
 Edit1.Height:=209;
 Edit1.Width:=249;
end;
procedure TF_FY.ToolButton5Click(Sender: TObject);  //關閉
begin
close;
end;

procedure TF_FY.ToolButton1Click(Sender: TObject);  //清空
begin
Edit1.Text:='';
Memo1.Text:='';
end;

end.

 

本來想上傳一下圖片的,不知道爲什麼,老傳不了,傳上去的竟然的去年上傳過的圖片,好暈啊,不知道什麼地方出錯了.

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章