Delphi7做的古汉文翻译系统

来源:互联网 发布:c语言简单游戏源代码 编辑:程序博客网 时间:2024/05/16 18:39

前阵子帮朋友弄了个古汉文词字翻译系统,首先声明一下,本来是要弄古汉文翻译系统的(能翻译句子)但经仔细考虑后,感觉也只能做出个词字翻译系统出来.想想自己毕竟没学习过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.

 

本来想上传一下图片的,不知道为什么,老传不了,传上去的竟然的去年上传过的图片,好晕啊,不知道什么地方出错了.