当前位置:文档之家› 简单文本编辑器——课程设计(delphi)

简单文本编辑器——课程设计(delphi)

简单文本编辑器——课程设计(delphi)
简单文本编辑器——课程设计(delphi)

目录

1内容简介 (3)

2程序设计流程及方法 (3)

2.1 设计思路 (3)

2.2 事件响应方法 (4)

3测试结果 (5)

3.1调试方法 (5)

3.2调试过程 (5)

3.3调试结果 (6)

4分析与探讨 (8)

4.1 函数的使用 (8)

4.2 人性化设计 (9)

独立性声明 (11)

一个简单的文本编辑器

一、内容简介

为满足个人的个性需求,为此设计一个有着自己特色的文本编辑器,实现自己的特定用途。

本实例程序可以对文本进行基本的编辑;能执行基本的文件操作;同时它的状态栏具有提示信息、显示时间及当前光标位置的功能。

而重点在于熟悉Delphi中ObjectTreeView、ObjectInspector等的用法及相应的属性设置以及一些插件的使用。源代码的编写是重中之重。

开发的这个类似于“写字板”的程序,不过功能要相对简单一些。该程序的主要功能包括:

1、能执行基本的文件操作,包括新建、打开、保存一个文本文件

2、能对文本进行基本的编辑操作,包括剪切、复制、粘贴、删除、选择及查找

3、能对文本进行简单的格式化操作,包括改变文本的字体、字号、对其方式等

4、可以在状态栏显示提示信息、当前光标位置以及系统日期和时间

二、程序设计流程及方法

(一)、设计思路

基本思路:先创建一个窗体,添加菜单栏,工具栏以及状态栏,然后利用ActionManger建立一些基本指令,通过修改基本指令的属性来制作菜单和快捷键,并把它们放到菜单栏和工具栏边上。然后再添加一个ComboEx和Edit来作为字体的模式和大小的设置项,这样就建立起了一个用户界面和完成了部分功能,对于不能直接通过属性设置的功能,则通过编写时间的源代码来实现。

按照面向对象程序的设计方法,在应用程序框架下,利用VCL(Visual Compoment Library,可视化组件)进行填充,本程序将用到Delphi7提供的RichEdit、ImageList、ActionManger、ActionMainMenuBar、ActionToolBar和StatusBar组件。

在ActionManger组件中,将使用Delphi 7提供的一些标准的指令,这样可

以省去不少手工编写代码的时间。ImageList组件可以管理一系列相同尺寸的图像列表。ActionManger组件中的每一个指令都有一个ImageIndex(图像索引属性)通过为指令制定该属性值,指令变可以拥有相应的图像。这样当用指令建立菜单和工具条时,菜单和工具条上便可以显示图像,类似像Microsoft Office 风格的菜单和工具条。直接拖动ActionManger组件中的指令到菜单和指定工具条上,可以快速建立程序界面,且个菜单项和工具按钮具有相应指令的功能。

(二)事件响应方法

Windows操作系统是基于“时间驱动”的机制来运行的。事件是指外界的“激发”获状态的改变,例如,鼠标单击、移动,按下某个键等。当一个事件发生时,程序会执行相应的操作。若没有事件发生,程序会处于等待事件发生的状态。

而此程序中需要编写的事件代码如下:FileNew指令、FileOpen指令、FileSave指令、帮助文件、About指令、主窗体、ComboxEx和Edit的指令编写代码。

FileNewExecute过程中通过MessageDlg函数判断,若修改过则返回索引值6(代表Yes),清空文本,新建一个空页面。若取消则原文件保持不变。

FileSaveExecute过程中,当点击Save时,判断保存文件的后缀,再通过定义f1文件变量一写的方式打开,将所要保存的文件用writeln函数写进去。

HelpContents1Execute过程以及HelpIndexExecute过程直接调用Application.HelpCommand函数实现。其作用就是提供帮助系统。

HelpAboutExecute过程利用自带的模板并以showmodal模式显示,在上面可以加入坐着自己的个性元素。

MouseDown,KeyUp事件直接调用ShowCurpos函数显示当前的行列值,将变量取为string类型并在StatusBar1.Panels[1]上显示。

其中OnCreat事件是在程序运行后窗体显示时响应,通常使用这一事件来初始化窗体。一些属性的设置不仅可以通过ObjectInspector来设置,也可以通过代码直接设置。实例中初始化的Form完成提示信息的显示并调用GetFontNames 函数并加载字体。

三、测试结果

(一)调试方法

1、使用Project菜单中的Compile命令。该命令编译当前项目中所有修改过的文件,生成可执行的EXE文件。或使用Project菜单中的Build命令。该命令编译当前项目中的所有文件,而不管这些文件是否经过修改生成可执行的EXE 文件。而使用Run菜单中的Run命令(或按键盘上的功能键F9,或单击加速条上Run按钮),将程序编译和运行一步到位。

2、如果遇到错误,Delphi在代码编辑器的状态行报告错误,并把光标定位在包含错误代码的程序行上。改正错误后重新编译,一直到没有错误了才会生成可执行的EXE文件。

(二)调试过程

在完成了整个窗体的设计以及整体的布局之后,采用步步为营的方法,选中需要编写事件的组件,在其对应的代码编辑框输入相应代码。当编写完一个组件的响应事件代码后,及时运行与调试,若无错误,保存退出,这是就可以运行程序了。

所遇到的疑点、错误与解决方法:

1、运行后无错误,但是ToolBar上的一些图标显示不出来,检查对应图标的属性,在visible选择“True”就好了

2、运行后撤销按钮显示的是灰色,检查其Action属性为空,在Action属性下拉列表框中找对应的指令,发现没有。原来撤销指令属于Undo标准按钮。通过添加就可以得到,不需用户自行创建

3、ToolBar工具条上Separator起分割的作用,新建的Button在Action 属性上选择对应的动作,运行时将自动生效

4、RichEdit1滚动条的设置,可以通过ScrollBars属性选择,ssVertical 指设置垂直滚动条

5、若在设计界面删除控件(添加了过程),则在代码编辑器中需手动删除

6、在字体的设置中,带@的字体会使输入、显示的字体倾斜,只要选择正常显示的字体即可

7、文件的新建过程中需要对原文件进行判断,若原文件存在并修改则新建

8、在保存文件的时候,对扩展名的要求,因为是保存为文本文件,在保存

时对文件名进行判断,自动添加后缀则避免文件格式的错误

(三)调试结果

调试无误后,测试各功能的运行情况,包括文件、编辑、格式里的各项功能。部分截图如下:

四、分析与探讨

本应用程序完成了基本的文本编辑的功能,并且还实现了状态栏显示当前所在的行列数,更多的字体的设置、滚动条的设置。但是功能也不尽完善,其中也遇到了些难题,如不能撤销步骤只能是重复上一步以及更加人性化的设计等等。

(一)函数的使用

本应用程序中字库的装载通过function EnumFontsProc(var LogFont: TLogFont; var TextMetric: TTextMetric;FontType: Integer; Data: Pointer): Integer; stdcall函数实现。

Delphi中还有一个MessageDlg函数,也是一个信息对话框函数,。此函数可以根据使用的位置来设置对话框中的按钮和图标。其原型为:

Function MessageDlg(const Msg:String;DlgType:TmsDlgType;Buttons: TmsgDlgButtons;HelpCtx:Longint):Integer;其中参数Msg常量是用于输入提示信息;DlgType参数用于设置对话框的图标,此参数取值如表1;Buttons参数用于设置对话框中的按钮,此参数取值如表2;HelpCtx参数显示帮助信息,可取一整数值,如0。MessageDlg函数返回一整数值。

DlgType参数取值

表1

Buttons参数取值计函数返回值

表2

此外在Object Pascal语言中已经为文本类型的文件定义了一个标准的类型标识符TextFile,在使用时可直接用TextFile类型声明文本变量。Assignfile 函数用于建立指定的文件与文件变量之间的联系,此函数原型为AssignFile (filename,str),其中filename参数是定义的文件变量,str参数用于指导文件路径和名称的字符串变量或常量。通过AssignFile函数,文件变量filename 就可以与代码str表示的外部文件建立联系。因此在文件输入输出上Assign函数是必定存在的。而在文件的读出与写入问题上,函数的功能都不一样。Rewrite 函数用于创建新文件,并以写的方式打开。而writeln函数是往已存在的文件中追加数据。当然在读取即打开文件是,也可以使用ReadLn函数,此函数用于读取文件中某行文件。

(二)人性化的设计

快闪界面,其本质也是一个窗体,利用图片填充,再利用一个定时器实现其快闪的功能。时间参数通过Interval属性设置,当时间到点后,主窗口显示,界面隐藏,再释放所占有的资源。

ShowMessage对话框函数,用于显示一些提示信息,将所要显示的信息用单引号括起来即可。此函数的原型为:Procedure Showmessage(const Msg:srting),其中参数Msg为字符型常量,在使用时直接输入此函数,并在括号内输入要显示的信息,如实例中的“欢迎使用本软件!”,信息用单引号括起来即可显示。

在StatusBar上加入了显示系统日期与时间的功能。TimeToStr函数是将时间转换为字符串的函数,其基本形式为Function TimeToStr(const DataTime:TDateTime):string;其中DataTime参数为时间常量;TimeToStr函数返回以字符串值。DateToStr是将日期转化为字符串的函数。其原型为Function DateToStr(const DataTime:TDateTime):string; 其中DataTime参数为日期常量。因此可以直接显示在StatesBar1工具条上。因为其返回值都一样,因此可以直接赋值给StatusBar1.SimpleText。

主菜单的设计,利用ControlBar控件实现菜单栏、工具栏的移动。ControlBar控件的DragKind属性用于设置添加到该控件中的其他控件是否可以作为一个面板拖出。该属性有两个取值dkDock和dkDrag时,ControlBar控件作为一个船坞,课自由拖进和拖出改控件中的面板;当该属性值设置为dkDock 时,只能在ControlBar控件中拖动面板。

另外,菜单的设计,有两种方法,一是通过主菜单控件进行设置,二是还可以自行设计。利用主菜单控件可以实现菜单项的分隔线、建立子菜单等功能。而图标都是通过添加ImageList控件实现的。两种方法实现的过程一样。而第一种实现的过程比较简便,也为下面建立快捷菜单提供了便利。只需要在主菜单中选择所需要的功能键,而不需要重新建立。

快捷菜单的建立是利用Standard选项卡中快捷菜单控件PopupMenu,将所需要的快捷键加入到快捷菜单编辑器中,需要注意的是,在delphi中每一个可视化控件都有PopupMenu属性,因此用户只有在需要的控件属性中选择调用。快捷菜单与主菜单的区别:

1、快捷菜单的设计就像设计主菜单的下拉菜单,少了菜单栏中菜单按钮的设置。快捷菜单不能从窗体中直接看到菜单的设计情况,需程序运行后单击右键才可以看到。

2、程序运行后,快捷菜单需要在某些控件上单击右键才能弹出相应的快捷

菜单;主菜单一直显示在窗体的顶部

此外,在实例中我们清楚地认识到Delphi自带的强大功能。只有将其使用熟练,才能够充分使用到它提供给我们的便利,从而少走弯路。为使本应用程序功能更加强大,还可以加入颜色功能的设置,实现多文本的设置,同时具有图形化的工具栏,具有下拉菜单的按钮和提示功能等等。

独立性说明

本应用程序主要是实现一个简单的类似“写字板的程序”,其中不仅实现了最基本的功能外还添加了一些人性化的功能。比如操作提示对话框、快捷键的设置、系统时间的显示、版本所有权等。

本实例只是实现了单文本,但其独有的个人化设计也为多文本的设计提供可很好的基础。通过此应用程序的设计可以根据自己兴趣继续拓展其功能,也可以根据自己喜好与个性,设计属于自己独有的专用的程序。

参考文献:

1、Delphi 7.0实例入门田守瑞、李永清编著中国青年出版社

2、Delphi程序设计入门刘毅编著科学出版社

3、Delphi 7.0程序设计基础百例网冠科技编著机械工业出版社

4、Delphi函数参考大全杨华民, 梁水, 李方超编著人民邮电出版社

附件:

源代码如下:

program TextEditor;

uses

Forms,

Unit1 in 'Unit1.pas' {Form1},

About in 'About.pas' {AboutBox},

Splash in 'Splash.pas' {SplashForm};

{$R *.res}

begin

Application.Initialize;

{创建封面}

SplashForm := TSplashForm.Create(Application); SplashForm.Show;//显示封面

SplashForm.Update;//强制更新封面

{下面通过定时器来延时}

while SplashForm.Timer1.Enabled do

//让程序循环不断处理消息,知道定时器被禁止

Application.ProcessMessages ;

Application.CreateForm(Tform1, form1);

Application.CreateForm(TAboutBox, AboutBox); { 主窗口显示出来后,隐藏并释放封面}

SplashForm.Hide ; //隐藏封面

SplashForm.Free ;//释放封面占用的资源

Application.Run;

end.

主窗体代码

unit Unit1;

interface

uses

Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,

Dialogs, ActnList, XPStyleActnCtrls, ActnMan, ComCtrls, StdCtrls, StdActns, ImgList, ActnCtrls, ToolWin, ActnMenus,About, ExtActns, CustomizeDlg, Menus,StrUtils, ExtCtrls;

type

TForm1 = class(TForm)

StatusBar1: TStatusBar;

ActionManager1: TActionManager;

FileNew: TAction;

FileSave: TAction;

HelpIndex: TAction;

HelpAbout: TAction;

EditCut1: TEditCut;

EditCopy1: TEditCopy;

EditPaste1: TEditPaste;

HelpContents1: THelpContents;

FileOpen1: TFileOpen;

FileSaveAs1: TFileSaveAs;

FileExit1: TFileExit;

ImageList1: TImageList;

RichEditBold1: TRichEditBold;

RichEditItalic1: TRichEditItalic;

RichEditUnderline1: TRichEditUnderline;

RichEditStrikeOut1: TRichEditStrikeOut;

RichEditBullets1: TRichEditBullets;

RichEditAlignLeft1: TRichEditAlignLeft;

RichEditAlignRight1: TRichEditAlignRight; RichEditAlignCenter1: TRichEditAlignCenter; CustomizeDlg1: TCustomizeDlg;

EditUndo1: TEditUndo;

SearchFind1: TSearchFind;

SearchFindNext1: TSearchFindNext;

PopupMenu1: TPopupMenu;

C1: TMenuItem;

V1: TMenuItem;

X1: TMenuItem;

SaveDialog1: TSaveDialog;

ControlBar1: TControlBar;

ActionMainMenuBar1: TActionMainMenuBar;

Editor: TToolBar;

ToolBar: TToolBar;

RichEdit1: TRichEdit;

ToolButton1: TToolButton;

FileOpen: TToolButton;

ToolButton3: TToolButton;

ToolButton4: TToolButton;

ToolButton5: TToolButton;

ToolButton6: TToolButton;

ToolButton7: TToolButton;

ToolButton8: TToolButton;

Save: TToolButton;

FontSize: TEdit;

UpDown1: TUpDown;

FontName: TComboBox;

ToolButton9: TToolButton;

ToolButton11: TToolButton;

Underline: TToolButton;

Italic: TToolButton;

Bold: TToolButton;

Left: TToolButton;

Right: TToolButton;

Center: TToolButton;

ToolButton18: TToolButton;

Number: TToolButton;

ToolButton20: TToolButton;

ToolButton14: TToolButton;

procedure FileNewExecute(Sender: TObject);

procedure FileOpen1Accept(Sender: TObject);

procedure FileSaveExecute(Sender: TObject);

procedure HelpContents1Execute(Sender: TObject);

procedure HelpIndexExecute(Sender: TObject);

procedure HelpAboutExecute(Sender: TObject);

procedure FormCreate(Sender: TObject);

procedure FontNameChange(Sender: TObject);

procedure FontSizeChange(Sender: TObject);

procedure RichEdit1MouseDown(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer);

procedure RichEdit1KeyUp(Sender: TObject; var Key: Word;

Shift: TShiftState);

procedure ShowHint(Sender: TObject);

procedure FormClose(Sender: TObject; var Action: TCloseAction);

private

{ Private declarations }

public

{ Public declarations }

FileName:String;

procedure GetFontNames;

function CurrText: TTextAttributes;

procedure ShowCurPos;

end;

var

Form1: TForm1;

implementation

{$R *.dfm}

function EnumFontsProc(var LogFont: TLogFont; var TextMetric: TTextMetric;

FontType: Integer; Data: Pointer): Integer; stdcall;

//此函数用于列举系统安装的所有字体

begin

TStrings(Data).Add(LogFont.lfFaceName);

Result := 1;

end;

procedure TForm1.GetFontNames;

//此过程用于列举所有字体名称,并将字体加载到FontName下拉框中

var

DC: HDC;

begin

DC := GetDC(0);

EnumFonts(DC, nil, @EnumFontsProc, Pointer(FontName.Items)); ReleaseDC(0, DC);

FontName.Sorted := True;

end;

function TForm1.CurrText: TTextAttributes;

//此函数用于判断当前选择的文本属性

begin

if RichEdit1.SelLength > 0

then Result := RichEdit1.SelAttributes

else Result := RichEdit1.DefAttributes;

end;

procedure TForm1.ShowCurPos;

//此过程用于显示当前编辑位置出的行,列值及字数

var

LPos,CPos:Integer;

begin

LPos:= SendMessage(RichEdit1.Handle, EM_LINEFROMCHAR,

RichEdit1.SelStart, 0);

CPos:= SendMessage(RichEdit1.Handle, EM_LINEINDEX, LPos, 0);

CPos:=RichEdit1.SelStart-CPos;

LPos:=LPos+1;

CPos:=CPos+1;

StatusBar1.Panels[1].Text :=' 行:'+IntToStr(LPos) + ' 列:'

+IntToStr(CPos);

end;

procedure TForm1.FileNewExecute(Sender: TObject);

var

m:integer;

begin

if (RichEdit1.Modified)and(RichEdit1.Text<>'')then

begin

m:=messagedlg('文件已被修改,是否保存

?',mtConfirmation,[mbYes]+

[mbNo],0);

if m=6 then

begin

Save.Click;

RichEdit1.Clear;

StatusBar1.Panels[0].Text:='未命名文件';

end;

end;

end;

procedure TForm1.FileOpen1Accept(Sender: TObject);

begin

RichEdit1.Lines.LoadFromFile(FileOpen1.Dialog.FileName);

FileName:=FileOpen1.Dialog.FileName;

Form1.Caption := FileName;

StatusBar1.panels[0].Text :=FileName;

end;

procedure TForm1.FileSaveExecute(Sender: TObject);

var

f1:Textfile;

i : integer ;

begin

if SaveDialog1.Execute then

filename:=Savedialog1.FileName;

if Rightstr(filename,3) <> 'txt' then

filename:=filename+'.txt';

assignfile(f1,filename);

rewrite(f1);

for i:=0 to RichEdit1.Lines.Count-1 do

writeln(f1,RichEdit1.Lines[i]);

closefile(f1);

end;

procedure TForm1.HelpContents1Execute(Sender: TObject); const

HELP_TAB=15;

CONTENTS_ACTIVE=-3 ;

begin

Application.HelpCommand(HELP_TAB,CONTENTS_ACTIVE); end;

procedure TForm1.HelpIndexExecute(Sender: TObject);

const

HELP_TAB=15;

INDEX_ACTIVE=-2;

begin

Application.HelpCommand(HELP_TAB,INDEX_ACTIVE);

end;

procedure TForm1.HelpAboutExecute(Sender: TObject);

begin

with TaboutBox.Create(Self) do

try

showmodal;

finally

Free;

end;

end;

procedure TForm1.ShowHint(Sender:TObject);

begin

if Length(Application.Hint) > 0 then

begin

StatusBar1.Panels[0].Text:=Application.Hint;

end

else StatusBar1.Panels[0].Text:='欢迎使用本软件!' ; StatusBar1.Panels[2].Text:=' 日期:'+DateToStr(Date); StatusBar1.Panels[3].Text:=' 时间:'+TimeToStr(Time); StatusBar1.Panels[4].Text:=' 蚊子工作室';

end;

procedure TForm1.FormCreate(Sender: TObject);

begin

Application.OnHint :=ShowHint;

Application.HelpFile:=ExtractFilePath(Application.ExeName)+'TextEdito r.hlp';

GetFontNames;

end;

procedure TForm1.FontNameChange(Sender: TObject);

begin

https://www.doczj.com/doc/049681623.html,:=FontName.Items[FontName.ItemIndex];

end;

procedure TForm1.FontSizeChange(Sender: TObject);

begin

CurrText.Size:=StrToInt(FontSize.Text);

end;

procedure TForm1.RichEdit1MouseDown(Sender: TObject; Button: TMouseButton;

Shift: TShiftState; X, Y: Integer);

begin

ShowCurpos;

end;

procedure TForm1.RichEdit1KeyUp(Sender: TObject; var Key: Word;

Shift: TShiftState);

计算器课程设计报告

课设报告 福建工程学院软件学院 题目:汇编计算器 班级: 1301 姓名 学号: 指导老师: 日期:

目录 1、设计目的 (3) 2、概要设计 (3) 2.1 系统总体分析 (3) 2.2 主模块框图及说明 (3) 3、详细设计 (4) 3.1 主模块及子模块概述 (4) 3.2各模块详运算 (4) 4、程序调试 (7) 4.1 运行界面分析 (7) 算法分析 (7) 4.2 调试过程与分析 (9) 5、心得体会 (11) 5.1 设计体会 (11) 5.2 系统改进 (11) 附录: (11)

1、设计目的 本课程设计是一次程序设计方法及技能的基本训练,通过实际程序的开发及调试,巩固课堂上学到的关于程序设计的基本知识和基本方法,进一步熟悉汇编语言的结构特点和使用,达到能独立阅读、设计编写和调试具有一定规模的汇编程序的水平。 2、概要设计 用8086汇编语言编写一个能实现四则混合运算、带括号功能的整数计算器程序。程序能实现键盘十进制运算表达式的输入和显示(例如输入:“1+2*(3-4)”),按“=”后输出十进制表示的运算结果。 2.1 系统总体分析 在8086的操作环境下,该计算器分成输入,数据存储,运算功能,输出几个大模块,实现了使用者使用该计算器时输入一个算式,能让系统进行计算。此计算器的实现功能是基本的数学的四则运算,结果范围在0~65535。 2.2 主模块框图及说明 此流程图简要的表现出了所要实现的功能以及一些功能的大概算法,同时也是我编写的一个总体的框架。 程序流程图说明:通过流程图,可以看出程序运行时,首先输出提示语气,当用户输入后,程序根据所输入内容进行判断,通过判断的结果来决定调用哪个功能模块,首要先要要判断的是否为0-9,“+”“-”“*”“/”这些字符,若不是就会报错,实则根据运算符号调用其功能模块完成运算。最后将运算的结果显示在主频幕上,返回主程序,使用户可以重新输入。

简单计算器c++课程设计

简单计算器 1 基本功能描述 简单计算器包括双目运算符和单目运算符。双目运算符包含基本的四则运算及乘幂功能,单目运算符包含正余弦、阶乘、对数、开方、倒数等运算。可对输入任意操作数包含小数和整数及正数和负数进行以上的所有运算并能连续运算。出现错误会给出提示,同时包含清除、退格、退出功能以及有与所有按钮相对应的菜单项。 2 设计思路 如图1,是输入数据子函数的流程图。打开计算器程序,输入数据,判断此次输入之前是否有数字输入,如果有,则在之前输入的数字字符后加上现有的数字字符;如果没有,则直接使编辑框显示所输入的数字字符。判断是否继续键入数字,如果是,则继续进行前面的判断,如果否,则用UpdateData(FALSE)刷新显示。 如图2,是整个计算器的流程图。对于输入的算式,判断运算符是双目运算符还是单目运算符。如果是双目运算符,则把操作数存入数组a[z+2]中,把运算符存入b[z+1]中;如果是单目运算符,则把字符串转化为可计算的数字,再进行计算。下面判断运算符是否合法,如果合法,则将结果存入a[0],不合法,则弹出对话框,提示错误。结束程序。

输入一个数字 在之前输入的数字字符后面加上现在的数字字符。 Eg :m_str+=”9”。 直接使编辑框显示所输入的数字字符。 Eg :m_str=”9”。 pass3=1表示已有数字输入 开始 之前是否有数字输入? pass3==1? 继续键入数字? 用UpdateData(FALSE)刷新显示 图1 输入数据子函数流程图 Y N Y N

输入开始 双目运算符 是否每一个操作数都存入a[]数组? 把操作数存入a[z+2],把运算符存入b[z+1]。 单目运算符 将字符串转换 为可计算的数进行运算 运算是否合法? 将结果存入a[0] 弹出对话框提示错误 结束Y Y N N 图2 简单计算器总流程图

简单文本编辑器——课程设计(delphi)

目录 1内容简介 (3) 2程序设计流程及方法 (3) 2.1 设计思路 (3) 2.2 事件响应方法 (4) 3测试结果 (5) 3.1调试方法 (5) 3.2调试过程 (5) 3.3调试结果 (6) 4分析与探讨 (8) 4.1 函数的使用 (8) 4.2 人性化设计 (9) 独立性声明 (11) 一个简单的文本编辑器

一、内容简介 为满足个人的个性需求,为此设计一个有着自己特色的文本编辑器,实现自己的特定用途。 本实例程序可以对文本进行基本的编辑;能执行基本的文件操作;同时它的状态栏具有提示信息、显示时间及当前光标位置的功能。 而重点在于熟悉Delphi中ObjectTreeView、ObjectInspector等的用法及相应的属性设置以及一些插件的使用。源代码的编写是重中之重。 开发的这个类似于“写字板”的程序,不过功能要相对简单一些。该程序的主要功能包括: 1、能执行基本的文件操作,包括新建、打开、保存一个文本文件 2、能对文本进行基本的编辑操作,包括剪切、复制、粘贴、删除、选择及查找 3、能对文本进行简单的格式化操作,包括改变文本的字体、字号、对其方式等 4、可以在状态栏显示提示信息、当前光标位置以及系统日期和时间 二、程序设计流程及方法 (一)、设计思路 基本思路:先创建一个窗体,添加菜单栏,工具栏以及状态栏,然后利用ActionManger建立一些基本指令,通过修改基本指令的属性来制作菜单和快捷键,并把它们放到菜单栏和工具栏边上。然后再添加一个ComboEx和Edit来作为字体的模式和大小的设置项,这样就建立起了一个用户界面和完成了部分功能,对于不能直接通过属性设置的功能,则通过编写时间的源代码来实现。 按照面向对象程序的设计方法,在应用程序框架下,利用VCL(Visual Compoment Library,可视化组件)进行填充,本程序将用到Delphi7提供的RichEdit、ImageList、ActionManger、ActionMainMenuBar、ActionToolBar和StatusBar组件。 在ActionManger组件中,将使用Delphi 7提供的一些标准的指令,这样可

C语言课程设计 简单计算器程序

课程设计名称:C语言课程设计课程设计题目:简单计算器程序

目录 第1章需求分析 (1) 1.1设计要求 (1) 1.2任务 (1) 第2章总体设计 (2) 2.1设计简介及设计方案论述 (2) 2.2功能模块层次图 (2) 第3章详细设计 (3) 3.3由(后缀)逆波兰表达式计算中缀表达式原理 (8) 3.3.1算法描述 (8) 第4章调试分析 (10) 4.1程序设计中所遇到的错误及犯错的原因 (10) 4.2错误的解决方法 (10) 第5章用户手册 (11) 总结 (15) 参考文献 (16) 附录(程序清单) (17)

第1章需求分析 1.1 设计要求 (1)用 C 语言数据结构实现程序设计; (2)利用结构体、栈、进行相关信息处理; (2)系统的各个功能模块要求用函数的形式实现; (4)界面简单,可操作性高。 1.2任务 (1)定义一个结构体类型数组,输入0~9 及+、--、*等符号的信息,将其信息存储起来; (2)输入简单的加减乘除算术计算式,并在屏幕上显示逆波兰(后缀式)表达式和计算结果; (3)编写代码; (4)程序分析与调试。 说明: 本课程设计将实现一个简单计算器。在功能上尽量模仿windows 的计算器。系统界面不做牵制要求。该程序能实现标准型中+、-、*、/、(、)、.、的混合运算表达式(一般意义上的中缀表达式),将其转换成逆序波兰表达式(后缀表达式)并计算输出结果。在进行运算后可以选择继续运算或者结束当前运算。即时准确地获得需要的计算的结果,充分降低了数字计算的难度和节约了时间,对人们的生活有一定的帮助。

第2章 总体设计 2.1设计简介及设计方案论述 逆波兰表达式又叫做后缀表达式。在通常的表达式中,二元运算符总是置于与之相 关的两个运算对象之间,所以,这种表示法也称为中缀表达式。波兰逻辑学家 J.Lukasiewicz 于 1929 年提出了另一种表示表达式的方法。按此方法,每一运算符都置 于其运算对象之后,故称为后缀表达式。 后缀表达式的优点是显而易见的, 编译器在处理时候按照从左至右的顺序读取逆波 兰表达式,遇到运算对象直接压入堆栈,遇到运算符就从堆栈提取后进的两个对象进行计算,这个过程正好符合了计算机计算的原理。后缀表达式比前缀表达式更加易于转换,并且它的最左面一定为数字,这一点在实 际编程的时候就会体会到它的好处了。 逆波兰表达式有一个更大的优点,就是拆括号,根据运算符的级别将中缀表达式转 换成逆波兰表达式后,运算顺序就已经替代了运算符的级别,这样也避免了括号提高运 算级别的特殊处理。 2.2功能模块层次图 将算术表达式转化为逆波兰表达式 计算逆波兰表达式的值 简单计算器 表 达 式 格 式 转 换 系统 求 值 计 算 系 统

单片机计算器的课程设计报告

目录 一、设计任务和性能指标 (1) 1.1设计任务 (2) 1.2性能指标 (2) 二、设计方案 (2) 3 3 4 5 5 6 6 7 7 20 20 20 20 21 参考文献 (21) 附录1、系统硬件电路图 (22) 附录2、硬件实物图 (23) 附录3、器件清单 (24)

一、设计任务和性能指标 1.1设计任务 自制一个单片机最小系统,包括复位电路,采用外部小键盘输入数据,能够实现加法、乘法及一个科学计算,计算结果显示在四位一体的数码管上。 要求用Protel 画出系统的电路原理图(要求以最少组件,实现系统设计所要 显 位 监测模块采用二极管和扬声器(实验室用二极管代替)组成电路。 键盘电路采用4*4矩阵键盘电路。 显示模块采用4枚共阳极数码管和74ls273锁存芯片构成等器件构成。 整个单片机的接口电路: P0用于显示输出; P1用于键扫描输入; P2用于数码管位选控制; P3用于键盘扩展(部分运算符输入);

三.系统硬件设计 3.1单片机最小系统 单片机最小系统就是支持主芯片正常工作的最小电路部分,包括主控芯片、复位电路和晶振电路。 主控芯片选取STC89C52RC芯片,因其具有良好的性能及稳定性,价格便宜应用方便。 扩展键:“log”,“ln”,“x^2”“小数点”,“开方” 共计25个按键,采用4*4矩阵键盘,键盘的行和列之间都有公共端相连,四行和四列的8个公共端分别接P1.0~P1.7,这样扫描P1口就可以完成对矩阵键盘的扫描,通过对16个按键进行编码,从而得到键盘的口地址,对比P1口德扫描结果和各按键的地址,我们就可以得到是哪个键按下,从而完成键盘的功能。 以下为键盘接口电路的硬件电路图

android简单计算器课程设计.

摘要 Android是当今最重要的手机开发平台之一,它是建立在Java基础之上的,能够迅速建立手机软件的解决方案。Android的功能十分强大,成为当今软件行业的一股新兴力量。Android基于Linux平台,由操作系统、中间件、用户界面和应用软件组成,具有以下5个特点:开放性、应用程序无界限、应用程序是在平等条件下创建的,应用程序可以轻松的嵌入网络、应用程序可以并行运行。而简单计算器又是手机上必备的小程序,所以此次创新实践很有意义。并且具有很强的使用性。 关键字:Android Java基础计算器

目录 第1章开发工具与环境 (1) 1.1 Android平台 (1) 1.2 Java开发环境 (1) 1.3 Eclipse (1) 1.4 Android程序基础—Android应用程序的构成 (2) 第2章系统分析与设计 (4) 2.1系统的可行性分析 (4) 2.2 系统的需求分析 (4) 2.3 系统的优势 (4) 2.4 系统的流程图 (5) 第3章系统详细设计 (6) 3.1 动作Activity (6) 3.2 布局文件XML (6) 3.3 Activity的详细设计 (7) 3.2 布局文件XML的详细设计 (21) 3.2 系统的运行结果 (24) 结论 (25) 参考文献 (26)

第1章开发工具与环境 1.1 Android平台 1.谷歌与开放手机联盟合作开发了Android, 这个联盟由包括中国移动、摩托罗拉、高通、宏达和T-Mobile在内的30多家技术和无线应用的领军企业组成。 2.Android是一个真正意义上的开放性移动设备综合平台。通过与运营商、设备制造商、开发商和其他有关各方结成深层次的合作伙伴关系,来建立标准化、开放式的移动电话软件平台,在移动产业内形成一个开放式的生态系统,这样应用之间的通用性和互联性将在最大程度上得到保持。 3.所有的Android应用之间是完全平等的。 4.所有的应用都运行在一个核心的引擎上面,这个核心引擎其实就是一个虚拟机,它提供了一系列用于应用和硬件资源间进行通讯的API。撇开这个核心引擎,Android的所有其他的东西都是“应用”。 5.Android打破了应用之间的界限,比如开发人员可以把Web上的数据与本地的联系人,日历,位置信息结合起来,为用户创造全新的用户体验。 1.2 Java开发环境 Java技术包含了一个编程语言及一个平台。Java编程语言具有很多特性,如面向对象、跨平台、分布式、多线程、解释性等等。Java编程语言起源于Sun公司的一个叫“Green”的项目,目的是开发嵌入式家用电器的分布式系统,使电气更加智能化。1996年1月发布了JDK1.1版本,一门新语言自此走向世界。之后,1998年12月发布了1.2版本,2002年2月发布1.4版本,2004年10月发布1.5版本(5.0),2006年12月发布1.6(6.0)版本,这是目前的最新版本。Java1.2版本是一个重要的版本,基于该版本,Sun将Java技术分为J2SE、J2ME、J2EE,其中J2SE为创建和运行Java程序提供了最基本的环境,J2ME与J2EE 建立在J2SE的基础上,J2ME为嵌入式应用(如运行在手机里的Java程序)提供开发与运行环境,J2EE为分布式的企业应用提供开发与运行环境。 1.3 Eclipse

OPT算法和简单文本编辑器

通达学院 专业课程设计I 题目1 OPT算法模拟实现 题目2 文本编辑器 专业 学生姓名 班级学号 指导教师 指导单位计算机学院、软件学院日期

OPT算法模拟实现(OS类) 一、课题内容和要求 内容:学习虚拟存储机制中页面调度算法,通过编程模拟实现页面调度的OPT算法,进一步理解页面调度的OPT算法的概念及含义,提高对OPT页面调度算法的认识,同时提高自己动手实践的能力。加深对主存与辅助存储器统一管理、逻辑地址与物理地址转换、页序列走向的装入和替换问题的理解,同时有利于对存储技术的理解。 要求:利用C语言或是C++设计编程,完成OPT算法的设计,表示页序列走向的装入和替换,算出缺页中断率。 二、概要设计 OPT算法即最佳优先算法,实质是通过调页功能和页面置换功能,陆续把即将要运行的页面调入内存,并且把暂时不运行的页面从内存在删除,置换时以页面为单位,算出缺页次数和缺页率,缺页数用diseffect 表示,页面序列数m,初始值diseffect=0,缺页率= diseffect /m。 用C语言设计OPT算法的程序,可以模拟实现算法,在理论联系实际的基础上,分析各个OPT页面置换算法的直接访问或是缺页中断,然后替换的过程。为了能实现OPT请求调页和置换功能,在VC++6.0上编程模拟实现。该算法选择永不使用的或是在最长时间内不再被访问的页面进行置换,这是理想化算法,具有最好的性能,淘汰访问串中将来再也不出现的或者是在离当前最远的位置上出现的页,这样淘汰掉该页将不会造成因需要访问该页又立即把它调入的现象。这种算法难以实现,因为它要求必须预先知道每一个进程的访问串。实验中在对操作系统的整体把握上,将操作系统的OPT算法用于实践中去,模拟出页面调度算法得出缺页率。 具体实验程序流程图如下:

科学计算器课程设计报告C课程设计修订稿

科学计算器课程设计报告C课程设计 集团标准化工作小组 [Q8QX9QT-X8QQB8Q8-NQ8QJ8-M8QMN]

计算机科学与技术学部 C++课程设计 题目科学计算器 学部计算机科学与技术 班级计科1103 指导教师李军 姓名刘明 学号 2012年6月27日

摘要 计算器的产生和发展是建立在电子计算机基础之上的。硬件方面,自1946年第一台电子计算机诞生以来,计算机技术的发展可谓日新月异,从庞大的只能在实验室里供研究使用的计算机到如今能适应不同环境满足不同需求的各种各样的计算机;运算速度从每秒几千次到每秒几百亿次;处理器从焊有上百万个电子管的大的惊人的电子板到只有指甲大小的集成电路;现在计算机在硬件方面的发展已达到了每三个月更新换代一次的惊人速度。软件方面,也已从机器语言、汇编语言、高级语言发展到现如今的第四代语言——非结构化、面向对象、可视化的语言。 在这个计算器里面,我们实现了简单的四则运算以及更高功能的科学计算,它的外观简洁美观,使人们能快捷简单的操作。能准确的得到计算结果,大大减少了数字计算所需要的时间,为人们的生活带来便利。此系统在Windows 7环境下,使用VC++ 进行编写。 简单计算器包括双目运算和单目运算功能,双目运算符包含基本的四则运算及乘幂功能,单目运算符包含正余弦,对数,开方,阶乘,倒数,进制转换等运算。可对其输入任意操作数,包括小数和整数及正数和负数进行以上的所有运算并能连续运算。并且包含清除,退格功能等。我们所做的计算器其功能较Windows 7下的计算器还是很不够多,没有其菜单的实现功能项,没有其小巧的标准计算器。 关键词:计算器;运算;VC++等

简易计算器课程设计

评阅教师评语:课程设计成绩 考勤成绩 实做成绩 报告成绩 总评成绩指导教师签名: 课程设计报告 论文题目基于ARM的简易计算器设计 学院(系):电子信息与自动化学院 班级:测控技术与仪器 学生姓名:同组同学: 学号:学号: 指导教师:杨泽林王先全杨继森鲁进时间:从2013年 6 月10 日到2013年 6 月28 日 1

目录 1、封面—————————————————————P1 2、目录—————————————————————P2 3、前言—————————————————————P3 4、关键字————————————————————P3 5、原理与总体方案————————————————P3 6、硬件设计———————————————————P6 7、调试—————————————————————P10 8、测试与分析——————————————————P11 9、总结—————————————————————P13

10、附件—————————————————————P14 前言 近几年,随着大规模集成电路的发展,各种便携式嵌入式设备,具有十分广阔的市场前景。嵌入式系统是一种专用的计算机系统,作为装置或设备的一部分。通常,嵌入式系统是一个控制程序存储在ROM中的嵌入式处理器控制板。事实上,所有带有数字接口的设备,如手表、微波炉、录像机、汽车等,都使用嵌入式系统,有些嵌入式系统还包含操作系统,但大多数嵌入式系统都是是由单个程序实现整个控制逻辑。在嵌入式系统中,数据和命令通过网络接口或串行口经过ARM程序处理后,或显示在LCD上,或传输到远端PC上。 本文通过周立功的LPC2106芯片完成的简易计算器,正是对嵌入式应用的学习和探索。 一、摘要: 计算器一般是指“电子计算器”,是能进行数学运算的手持机器,拥有集成电路芯片。对于嵌入式系统,以其占用资源少、专用性强,在汽车电子、航空和工控领域得到了广泛地应用。本设计就是先通过C语言进行相应程序的编写然后在ADS中进行运行最后导入PROTUES进行仿真。最后利用ARM中的LPC2106芯片来控制液晶显示器和4X4矩阵式键盘,从而实现简单的加、减、乘、除等四则运算功能。 关键字:中断,扫描,仿真,计算 二、原理与总体方案: 主程序在初始化后调用键盘程序,再判断返回的值。若为数字0—9,则根据按键的次数进行保存和显示处理。若为功能键,则先判断上次的功能键,根据代号执行不同功能,并将按键次数清零。程序中键盘部分使用行列式扫描原理,若无键按下则调用动态显示程序,并继续检测键盘;若有键按下则得其键值,并通过查表转换为数字0—9和功能键与清零键的代号。最后将计算结果拆分成个、十、百位,再返回主程序继续检测键盘并显示;若为清零键,则返回主程序的最开始。 电路设计与原理:通过LPC2106芯片进行相应的设置来控制LCD显示器。 而通过对键盘上的值进行扫描,把相应的键值通过MM74C922芯片进行运算从而

几种常用网页文本编辑器总结

文本编辑器应用总结 一.lhgeditor文本编辑器 lhgeditor组件文件结构: 1. lhgeditor.js:组件的核心JS文件 2. lhgeditor.css:组件的样式表文件 3. images:组件所需的图片都在此文件夹中 以上三个文件为组件所必须的三个文件,组件包中其它以“_”开头的文件为示例的演示文件,实际使用中不需要这些文件。当然框架核心文件lhgcore.js是每个组件都必须用到的文件,记得加载组件前先要加载此文件。 lhgeditor组件使用说明: 1. 在调用组件的页面加载lhgcore.j s和lhgeditor.js两个文件。 2. 在window.onload函数里加入J.editor.add(编辑器的id).init(); 例:

二.nicEdit文本编辑器