当前位置:文档之家› 《Java程序设计》实训报告——文档编辑器

《Java程序设计》实训报告——文档编辑器

《Java程序设计》实训报告——文档编辑器
《Java程序设计》实训报告——文档编辑器

《Java程序设计》实训报告

——《文档编辑器》

一、实训任务及要求:

1.1、实训的任务

《Java程序设计实训》是计算机专业一门重要的专业技术基础实践课程。为了能够较好的完成实训任务,学生应具备软件开发技术的基础知识,实训的主要目的在于将理论与实际应用相结合,使用程序设计语言java,以及相关软件设计开发知识完成软件的设计开发任务。本实训课程将为整个专业的学习以及软件设计水平的提高打下良好的基础,提高学生项目分析、设计、编写、调试和测试的能力,并培养基本的、良好的团队合作能力。

1.2、实训的要求

实训中要求综合运用所学知识,上机解决一些与实际应用结合紧密的、规模较大的问题,通过分析、设计、编码、调试等各环节的训练,使学生深刻理解、牢固掌握软件开发技术,提高分析、解决实际问题的能力

本次实训要求在学生能够较熟练使用java程序设计语言进行软件代码的编写,同时还要具备较好的项目分析的能力,加深对相关课程基本内容的理解。同时,在程序设计方法以及上机操作等基本技能和科学作风方面受到比较系统和严格的训练

二、需求分析:

参考系统附件中的记事本,设计实现一个文本编辑器。通过此系统可以实现如下功能:

1)可进行文件的新建、打开、保存、编辑等基本功能。

2)支持复制、剪切、撤销和粘贴等操作

3)可进行查找和替换操作,字体格式颜色的更换。

4)支持自动换行、状态栏改变等操作

三、详细设计:

3.1、系统模块设计

根据系统自带的文档编辑器的特征设计,包括如下的功能模块:

一、整体结构框架包括:菜单栏快捷菜单栏状态栏文档编辑区

二、每个框架分别包含不同的子框架,各个模块的具体框架:

菜单栏:文件编辑格式查看帮助

菜单栏中各个子菜单功能

文件:新建打开保存另存为打印退出

编辑:撤销剪切复制删除粘贴查找查找下一个替换转到全选时间/日期

格式:自动换行字体颜色查看:状态栏帮助:帮助关于 状态栏中包含的子菜单:时间当前光标所在行数打开的文件的信息

子菜单功能的实现主要的几个功能介绍

1)查找和替换:查找内容查找下一个替换全部替换区分大小写方向

(向上向下)取消

2)字体格式:字体字形大小示例确定取消

3)颜色设置:背景颜色字体颜色(调用系统内部的色板)

4)打开与另存为:两个窗体调用系统函数直接利用,注意格式的选择

文本编辑区

监视文本内容是否改变、文本的创建时间文本的行数监听光标所在位置

3.2、记事本结构设计

1.程序设计E—R图

整体框架图

菜单栏结构图

文件结构图

编辑、帮助、查看、格式结构图

2. 程序设计过程中结构图:

整体结构图 快捷菜单结构图

主要功能设计框架图字体框架设计图

其余部分控件的实现主要功能实现图

四、运行调试与分析讨论:

4.1对文档编辑区进行测试

a)打开文档时,文本没有修改可以直接关闭,没有提示,如果对文本进行了操

作就会有提示,保存或者直接跳过不保存,或者直接撤销对关闭事件的处理。

b)字体的显示,开始的时候不做任何操作的时候显示的默认值,通过修改字体

的属性来修改字体。

c)对文本事件进行监听,如果文本编辑窗口中如果有事件触发,关闭时能够有

必要的信息提示。

d)状态栏的可以正常显示文本的状态信息(文本的位置、时间、文本的鼠标位

置)

4.2打开与另存为测试

打开与另存为运行截图:

另存为截图打开截图

运行与测试基本功能:

a)打开文件不是txt类文档的时候显示的是乱码,能够正常的打开文本文

档。

b)另存为文档时,当文档为txt文档时能正常的用系统自带的记事本打开,

当保存为doc文档时,利用word打开时部分正常的显示文本(对文本的

解码了解较少)。

c)默认打开和另存为的地址为“我的文档”。

4.3新建、粘贴、剪切、复制等功能的测试

初始运行时的功能实现新建功能的实现

粘贴前粘贴后

粘贴和复制剪切等功能都能正常的实现,上图为复制功能的实现过程,复制利用剪切板中的信息内容,不在同一个文本中的信息,直接可以把剪切板中的信

息复制到文本中。菜单栏的功能与快捷菜单栏的功能一样。但是撤销功能稍微复杂一点,必须有必要的监听事件,还要利用剪切板的内容。

状态栏的显示状况:

修改前的状态栏

修改之后状态栏

光标所在的位置发生了变化,实现了功能。

跳转功能的实现:跳转的行有最大值的限制,当超出最大值时软件提示出现错误。

4.4查找和替换功能的测试

查找和替换功能的实现过程:当查找内容没有输入内容,进行查找时有必要的信息提示,当查找的内容不能找到时,有提示信息,查找的内容替换时计数被替换的数目。替换可以一个个的替换,也可以全部一次性的替换,查找功能和替换的功能集成在一起,可以向上和向下不同方式的查询,也可以按照字符的大小写查询。不论是查询失败还是查询成功都有必要的信息提示。

特殊情况的处理:

查找内容时不输入内容的时候的提示和找不到输入的内容时的必要提示信息。

4.5字体的类型大小等功能的测试

字体修改功能的实现,第一个图是系统默认值的显示效果,第二个是系统字体修改之后的效果。字体的颜色修改,调用系统内部的颜色面板,通过三种不同的方式来修改颜色,监听鼠标事件,根据选中的内容来修改字体的颜色。字体的大小可以根据自己设定的字体情况来修改,字体的大小可以直接调用系统内部的,此次没有利用系统字体大小,随便设置了几个大小选项。

总之,字体选项的三种功能可以完美实现。

4.6自动换行功能的测试

自动换行实现取消自动换行

测试结果:自动换行能够正常的实现

五、设计体会与小结:

通过不到一周的实训,虽然实训的时间不长,但是总体上收获是很大的,我们的java课程学到的只是java和皮毛,一开始我还没有信心完成。后来看到书到有一个关于记事本的小例子,我仔细看了之后。对计事本有了一个大体的了解,在初训的实候知道自己应该做一个什么样的计事本了,在实训的过程中也遇到了不少困难,通过查API文档、上网搜索资料和看书,解决了问题,在写到字符的查找的替换时后,用到了上课时学到的知识,是通过查API文档获得的,现在我所写的计事本只实现在一些基本功能。简单的复制粘贴,字体风格的设置,还有就是查找和替换功能以及一些字体风格的保存.对文件的操作基本都用到了。

在实现记事本的功能过程中,也不是很顺利,基本的文件读写和保存文档的复制、粘贴、删除等功能还比较容易实现,但如何改变字体、字体颜色和背景颜色,就比较麻烦了,要实现字体颜色和背景颜色,首先要调用系统的调色板,再进行设置。但如何调用系统调色板?我是通过查阅帮助文档来找到其调用方法的。像自动换行、设置字体等都是通过方法来调用,给相关事件加上监听,在进行响应事件。整个程序中方法才是最关键的,也是最困难的。所以像查找、替换、转到几个功能我都不知道用什么方法,也由于时间有限,没有完成其功能。

总体的感觉是对java有了一个全新的认识,现在感觉用java做小的图形用户程序有些缺陷,但是在其的应用方面。尤其是有网络方面的应用,在整个实训我也尝试过做一个小的画图软件。但是由于时间关系还有一个是自身的知识的欠缺,最终这个事情被搁浅下来了。最后还是进行计事本的编写。由于在做画图软件时花了不了时间,所以现在的计事本的功能不是很全,如果有更多的时间,我会把这个记事体再完善一下,再把画图软件也做出来。实训的时间不长,但是我会在课外把它们的功能完善。然后再学习一下java和网络的编程,体验java的前沿技术。

在学习的过程中也体会到,遇到问题也要请教。不然的话自己一个人去做的话会花很多的时间,我在做这个记事本的时间,其中也问到过许多问题,通过同学的帮助下解决了,提高了程序的开发进程。其他的同学有问题的话我也是给他们尽量解决。我认为学习知识的过程当中就应该是相互学习相互进步的。

Java是面在的主流技术我会努力将它学好,现在我缺乏的是坚持不懈的精神,虽然学习java的路还很找,但我会继续走下去。

六、附录:

系(部):信息工程系

专业班级:软件(1)班

学生姓名:陈学烽

学号:1011302101012

完成日期:2011年12月28日

主要代码清单

附录1工具栏项的所有项目:

JMenu mFile, mEdit, mMode, mView, mHelp;

附录2每个工具栏下边的子菜单项

文件菜单:JMenuItem mFile_New, mFile_Open, mFile_Save, mFile_ASave,

mFile_Print, mFile_Exit;

编辑菜单:JMenuItem mEdit_Undo, mEdit_Cut, mEdit_Copy, mEdit_Paste, mEdit_Del, mEdit_Search, mEdit_SearchNext, mEdit_Replace,

mEdit_Turnto, mEdit_SelectAll, mEdit_TimeDate;

格式菜单:JCheckBoxMenuItem formatMenu_LineWrap;

JMenu formatMenu_Color;

JMenuItem formatMenu_Font, formatMenu_Color_FgColor,

formatMenu_Color_BgColor;

查看菜单:JCheckBoxMenuItem viewMenu_Status;

帮助菜单:JMenuItem mHelp_HelpTopics, mHelp_About;

部分程序运行截图:

部分程序代码:

mFile_New = new JMenuItem("新建(N)", 'N');//定义功能项

mFile_New.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_N, InputEvent.CTRL_MASK));

mFile_New.addActionListener(this);// 注册监听事件

mFile.add(mFile_New); //添加功能项

mFile.addSeparator();// 添加分割线

其余类似的功能依次定义实现

// 打开

if (result == JFileChooser.CANCEL_OPTION) {

statusLabel1.setText("您没有选择任何文件");return;}

saveFileName = fileChooser.getSelectedFile();

if (saveFileName == null || saveFileName.getName().equals("")) JOptionPane.showMessageDialog(this, "不合法的文件名", "不合法的文件名", JOptionPane.ERROR_MESSAGE);else {saveFile();isNewFile = false; currentFile = saveFileName;oldValue = Text.getText();

this.setTitle(saveFileName.getName() + " - 记事本");

statusLabel1.setText("当前打开文件:"+ veFileName.getAbsoluteFile());} } else if (saveChoose == JOptionPane.NO_OPTION) {String str = null; JFileChooser fileChooser = new JFileChooser();

fileChooser.setFileSelectionMode(JFileChooser.FILES_ONLY); fileChooser.setApproveButtonText("确定");

fileChooser.setDialogTitle("打开文件");

int result = fileChooser.showOpenDialog(this);

if (result == JFileChooser.CANCEL_OPTION) {statusLabel1.setText("您没有选择任何文件");return;}

fileName = fileChooser.getSelectedFile();

if (fileName == null || fileName.getName().equals(""))

JOptionPane.showMessageDialog(this, "不合法的文件名", "不合法的文件名", JOptionPane.ERROR_MESSAGE);else {try {FileReader fr = new

ileReader(fileName);BufferedReader bfr = new BufferedReader(fr); Text.setText("");while ((str = bfr.readLine()) != null)

{// 每次读取一行,直到文件结束Text.append(str + "\15\12");}// endwhile this.setTitle(fileName.getName() + " - 记事本");

statusLabel1.setText("当前打开文件:" + fileName.getAbsoluteFile()); fr.close();isNewFile = false;currentFile = fileName;oldValue =

Text.getText();} catch (IOException ioException) {}}} else {return;}} else {String str = null;JFileChooser fileChooser = new JFileChooser(); fileChooser.setFileSelectionMode(JFileChooser.FILES_ONLY); fileChooser.setApproveButtonText("确定");fileChooser.setDialogTitle("

打开文件");int result = fileChooser.showOpenDialog(this);

if (result == JFileChooser.CANCEL_OPTION) {statusLabel1.setText("您没有选择任何文件");return;}fileName = fileChooser.getSelectedFile();

if (fileName == null || fileName.getName().equals(""))

JOptionPane.showMessageDialog(this, "不合法的文件名", "不合法的文件名", JOptionPane.ERROR_MESSAGE);

else {try {FileReader fr = new ileReader(fileName);

BufferedReader bfr = new BufferedReader(fr);

Text.setText("");while ((str = bfr.readLine()) != null)

{// 每次读取一行,直到文件结束

Text.append(str + "\15\12");}// endwhile

this.setTitle(fileName.getName() + " - 记事本");

statusLabel1.setText("当前打开文件:" + fileName.getAbsoluteFile()); fr.close();isNewFile = false;

currentFile = fileName;oldValue = Text.getText();}

catch (IOException ioException) {}}}}// "打开"处理结束

// 另存为

else if (e.getSource() == mFile_ASave ) {Text.requestFocus(); JFileChooser fileChooser = new JFileChooser();

fileChooser.setFileSelectionMode(JFileChooser.FILES_ONLY); fileChooser.setApproveButtonText("确定");

fileChooser.setDialogTitle("另存为");

int result = fileChooser.showSaveDialog(this);

if (result == JFileChooser.CANCEL_OPTION) {

statusLabel1.setText("您没有选择任何文件");

return;}saveFileName = fileChooser.getSelectedFile();

if (saveFileName == null || saveFileName.getName().equals("")) JOptionPane.showMessageDialog(this, "不合法的文件名", "不合法的文件名", JOptionPane.ERROR_MESSAGE);else {saveFile();isNewFile =

false;currentFile = saveFileName;oldValue = Text.getText();

this.setTitle(saveFileName.getName() + " - 记事本");

statusLabel1.setText("当前打开文件:" +

saveFileName.getAbsoluteFile());}}// "另存为"处理结束

附录3快捷菜单项

JPopupMenu popupMenu;

JMenuItem popupMenu_Undo, popupMenu_Cut, popupMenu_Copy,

popupMenu_Paste, popupMenu_Delete, popupMenu_SelectAll;

程序运行截图:

部分程序代码:

popupMenu = new JPopupMenu();

popupMenu_Undo = new JMenuItem("撤消(U)", 'U'); //定义新建一个撤销功能popupMenu_Undo.setEnabled(false); // 撤消选项初始设为不可用popupMenu.add(popupMenu_Undo); //向右键菜单添加菜单项和分隔符popupMenu_Undo.addActionListener(this); // 注册事件

//对鼠标进行监听

Text.addMouseListener(new MouseAdapter() {

public void mousePressed(MouseEvent e) {

checkForTriggerEvent(e); }

public void mouseReleased(MouseEvent e) {

checkForTriggerEvent(e); }

附录4文本编辑区域

static JTextArea Text;

container.add(scroll, BorderLayout.CENTER); //向容器中添加文本编辑器this.pack();

this.setSize(500,500);

this.setVisible(true);

checkMenuItemEnabled();

Text.requestFocus();

this.addWindowListener(new WindowAdapter() {

public void windowClosing(WindowEvent evt) {

checkText();}});

Clock clock = new Clock();

clock.start();

程序运行截图:如上图

附录5状态栏标签(1.代表状态 2.代表时间 3.代表操作行)

JLabel statusLabel1, statusLabel2, statusLabel3;

JToolBar statusBar;

程序运行截图:如下图

部分程序代码:

statusBar = new JToolBar();

statusBar.setLayout(new FlowLayout(FlowLayout.LEFT));

statusLabel3 = new JLabel(" 当前光标所在行数" + getlineNumber()); statusBar.add(statusLabel3);

container.add(statusBar, BorderLayout.SOUTH);

statusBar.setVisible(true);

// 设置状态栏可见性

else if (e.getSource() == viewMenu_Status) {

if (viewMenu_Status.getState())

statusBar.setVisible(true);else

statusBar.setVisible(false);}

附录6其它变量(文件是否被动过当前操作的文件名字编辑区的文本……) boolean isNewFile = true; // 是否新文件(未保存过的)

File currentFile; // 当前文件名

String oldValue; // 存放编辑区原来的内容,用于比较文本是否有改动

JButton fontOkButton; // 字体设置里的"确定"按钮

字体程序运行截图:

字体设计模块查找和替换

部分程序代码:

public void mySearch() {

final JDialog findDialog = new JDialog(this, "查找与替换", true); Container con = findDialog.getContentPane();

con.setLayout(new FlowLayout(FlowLayout.LEFT));

JLabel searchContentLabel = new JLabel("查找内容(N) :");

JLabel replaceContentLabel = new JLabel("替换为(P) :");

final JTextField findText = new JTextField(22);//注意文档的大小

final JTextField replaceText = new JTextField(22);

final JCheckBox matchcase = new JCheckBox("区分大小写");

ButtonGroup bGroup = new ButtonGroup();

//查找分光标所在位置的上下查找

final JRadioButton up = new JRadioButton("向上(U)");

final JRadioButton down = new JRadioButton("向下(D)");

down.setSelected(true);bGroup.add(up);bGroup.add(down);

JButton searchNext = new JButton("查找下一个(F)");

JButton replace = new JButton("替换(R)");

final JButton replaceAll = new JButton("全部替换(A)");

searchNext.setPreferredSize(new Dimension(110, 22));

replace.setPreferredSize(new Dimension(110, 22));

replaceAll.setPreferredSize(new Dimension(110, 22));

// "替换"按钮的事件处理

replace.addActionListener(new ActionListener() {

public void actionPerformed(ActionEvent e) {if

(replaceText.getText().length() == 0 && Text.getSelectedText() != null) Text.replaceSelection("");

if(replaceText.getText().length() > 0 && Text.getSelectedText() != null) Text.replaceSelection(replaceText.getText());}});

// "查找下一个"按钮事件处理

searchNext.addActionListener(new ActionListener() {

public void actionPerformed(ActionEvent e)

{int a = 0, b = 0;

int FindStartPos = Text.getCaretPosition();

String str1, str2, str3, str4, strA, strB;

str1 = Text.getText();

str2 = str1.toLowerCase();

str3 = findText.getText();

str4 = str3.toLowerCase();

//创建查找和替换的对话框

JPanel bottomPanel = new JPanel();JPanel centerPanel = new JPanel(); JPanel topPanel = new JPanel();JPanel direction = new JPanel(); direction.setBorder(BorderFactory.createTitledBorder("方向 ")); direction.add(up);direction.add(down);

direction.setPreferredSize(new Dimension(170, 60));

JPanel replacePanel = new JPanel();

replacePanel.setLayout(new GridLayout(2, 1));

replacePanel.add(replace);

replacePanel.add(replaceAll);

topPanel.add(searchContentLabel);

topPanel.add(findText);

topPanel.add(searchNext);

centerPanel.add(replaceContentLabel);

centerPanel.add(replaceText);

centerPanel.add(replacePanel);

bottomPanel.add(matchcase);

bottomPanel.add(direction);

bottomPanel.add(cancel);

con.add(topPanel);con.add(centerPanel);

con.add(bottomPanel);

附录7设置编辑区默认字体和编辑文本的时间

protected Font defaultFont = new Font("宋体", Font.PLAIN, 12); GregorianCalendar time = new GregorianCalendar();

int hour = time.get(Calendar.HOUR_OF_DAY);

int min = time.get(Calendar.MINUTE);

int second = time.get(Calendar.SECOND);

File saveFileName = null, fileName = null;

//插入时间

else if (e.getSource() == mEdit_TimeDate ) {Text.requestFocus(); SimpleDateFormat currentDateTime = new SimpleDateFormat("HH:mm yyyy-MM-dd");

Text.insert(currentDateTime.format(new Date()),

Text.getCaretPosition());

//字体的设置部分代码

class MyFont implements ActionListener {

final JDialog fontDialog;

final JTextField tfFont, tfSize, tfStyle;

final int fontStyleConst[] =

{ Font.PLAIN, Font.BOLD, Font.ITALIC, Font.BOLD + Font.ITALIC }; final JList listStyle, listFont, listSize;

JLabel sample;JPanel pane1, pane2, pane3, pane4;

// 构造函数MyFont

public MyFont() {

fontDialog = new JDialog(Notepad4.this, "字体设置", true); Container con = fontDialog.getContentPane();

con.setLayout(new BoxLayout(con, BoxLayout.Y_AXIS));

pane1 = new JPanel();……

Font currentFont = Text.getFont();

JLabel lblFont = new JLabel("字体(F):");……

lblStyle.setHorizontalAlignment(SwingConstants.CENTER);

lblFont.setPreferredSize(new Dimension(91, 20));……

tfFont = new JTextField(13);

tfFont.setText(currentFont.getFontName());

tfFont.selectAll();

tfFont.setPreferredSize(new Dimension(200, 20));

tfStyle = new JTextField(10);

if (currentFont.getStyle() == Font.PLAIN)

tfStyle.setText("常规");

tfSize.setPreferredSize(new Dimension(200, 20));

final String fontStyle[] = { "常规", "粗体", "斜体", "粗斜体" }; listStyle = new JList(fontStyle);

GraphicsEnvironment ge =

GraphicsEnvironment.getLocalGraphicsEnvironment();

final String fontName[] = ge.getAvailableFontFamilyNames();

int defaultFontIndex = 0;

for (int i = 0; i < fontName.length; i++) {

if (fontName[i].equals(currentFont.getFontName())) { defaultFontIndex = i;break;}}

listFont = new JList(fontName);

listFont.setSelectedIndex(defaultFontIndex);

listFont.setSelectionMode(ListSelectionModel.SINGLE_SELECTION); listFont.setFixedCellHeight(20);……

listFont.addListSelectionListener(new ListSelectionListener() { public void valueChanged(ListSelectionEvent event) {

tfFont.setText(fontName[listFont.getSelectedIndex()]); updateSample();}});

listStyle.setSelectionMode(

ListSelectionModel.SINGLE_SELECTION);

if (currentFont.getStyle() == Font.PLAIN)

listStyle.setVisibleRowCount(7);

listStyle.addListSelectionListener(

new ListSelectionListener() {

public void valueChanged(ListSelectionEvent event) {

tfStyle.setText(fontStyle[listStyle.getSelectedIndex()]); tfStyle.requestFocus();

tfStyle.selectAll();updateSample();}});

// 更新示例显示的字体和风格大小等

public void updateSample() {

Font sampleFont = new Font(tfFont.getText(),

fontStyleConst[listStyle.getSelectedIndex()],

Integer.parseInt(tfSize.getText()));

sample.setFont(sampleFont);

}// End method updateSample

// 设置文本编辑区的字体

public void actionPerformed(ActionEvent e) {

if (e.getSource() == fontOkButton) {

Font tempFont = new Font(tfFont.getText(),

fontStyleConst[listStyle.getSelectedIndex()],

Integer.parseInt(tfSize.getText()));

Text.setFont(tempFont);fontDialog.dispose();

}}// End method actionPerformed}/* End of class MyFont */

编译总结:

各个功能项的实现方法:

1)实现功能的步骤:定义功能项注册监听事件实际添加功能项

2)菜单栏的项目的功能实现方法一致

文本编辑器使用使用说明

文本编辑器使用说明书

目录 1文本编辑器结构 (1) 1.1功能操作按钮栏 (1) 1.2内容栏 (1) 2功能分解 (1) 2.1功能操作按钮栏第一排 (1) 2.1.1全屏编辑 (2) 2.1.2预览 (2) 2.1.3粘贴 (2) 2.1.4粘贴为无格式文本 (2) 2.1.5从MS Word 粘贴 (2) 2.1.6撤销 (3) 2.1.7重做 (3) 2.1.8插入/编辑图像 (3) 2.1.9插入/编辑表格 (4) 2.1.10插入水平线 (4) 2.1.11插入/编辑超链接 (4) 2.1.12取消超链接 (5) 2.1.13查找 (5) 2.1.14替换 (5) 2.1.15全选 (5) 2.1.16清除格式 (5) 2.2功能操作按钮栏第二排 (5) 2.2.1格式 (6) 2.2.2字体 (6) 2.2.3大小 (6) 2.3功能操作按钮栏第三排 (6) 2.3.1空格 (6) 2.3.2加粗 (6) 2.3.3倾斜 (7) 2.3.4下划线 (7) 2.3.5删除线 (7) 2.3.6左对齐 (7) 2.3.7居中对齐 (7) 2.3.8右对齐 (7) 2.3.9两端对齐 (7) 2.3.10插入/删除编号列表 (8) 2.3.11插入/删除项目列表 (8) 2.3.12文本颜色 (8) 2.3.13背景颜色 (8) 2.3.14下标 (8) 2.3.15上标 (8) 2.3.16源代码 (9)

1文本编辑器结构 文本编辑器大体结构可以分为两部分,分别为:功能操作按钮栏和内容栏。 1.1功能操作按钮栏 功能操作按钮栏:用于对内容进行编辑。 1.2内容栏 内容栏:用于显示输入的内容。 2功能分解 在功能操作按钮栏中功能按钮分为三排,下面将分别按照每排的顺序进行逐一介绍。 2.1功能操作按钮栏第一排 功能操作按钮栏第一排中共包含16个功能按钮,如下图所示。 图2-1-1 功能操作按钮栏第一排

Java程序设计在线作业-单选题2

Java程序设计在线作业2 一、单选题(共 10 道试题,共 30 分。) 1. 下列程序的输出结果是import java.io.*; public class abc { public static void main(String args[]) { String s1="Hello!"; String s2=new String("World!"); System.out.println(s1.concat(s2)); } } A. false B. Hello! C. Hello!Wofld! D. 12 2. 在浏览器中执行applet 程序,以下选项中的哪个方法将被最先执行()。 A. init() B. start() C. destroy() D. stop() 3. Java语言的类型是() A. 面向对象语言 B. 面向过程语言 C. 汇编程序 D. 形式语言 4. 下列哪一项不属于Awt布局管理器?() A. GridLayout B. CardLayout C. BorderLayout D. BoxLayout

5. 下面代码的执行结果是什么?( )<% x=3; %><% int x=5; %><%! int x=7; %> x = <%=x%>, <%=this.x%> A. x = 3, 5 B. x = 3, 7 C. x = 5, 3 D. x = 5, 7 6. Java Applet 源程序文件的扩展名为()。 A. .java B. .class C. .html D. .exe 7. 在Java Applet程序用户自定义的Applet子类中,一般需要重载父类的()方法来完成一些画 图操作。() A. start() B. stop() C. init() D. paint() 8. 阅读下面的代码,第10行的语句将调用哪个方法?() 1. class Person { 2. public void printValue(int i, int j) {/*…*/ } 3. public void printV alue(int i){/*...*/ } 4. } 5. public class Teacher extends Person { 6. public void printValue() {/*...*/ } 7. public void printValue(int i) {/*...*/} 8. public static void main(String args[]){ 9. Person t = new Teacher(); 10. t.printValue(10); 11. } 12. } A. 行2 B. 行3 C. 行6

操作系统文件管理实验报告

操作系统实验报告实验名称:文件管理 专业班级:网络工程1301 学号: 姓名: 2015 年6 月16 日

实验一文件管理 一、实验目的 文件管理是操作系统的一个非常重要的组成部分。学生应独立用高级语言编写和调试一个简单的文件系统,模拟文件管理的工作过程。从而对各种文件操作命令的实质容和执行过程有比较深入的了解,掌握它们的实施方法,加深理解课堂上讲授过的知识。 二、预备知识 1.VS2010的使用 2.C#的学习 3.文件主目录与子目录的理解 三、实验容与步骤 用高级语言编写和调试一个简单的文件系统,模拟文件管理的工作过程。要求设计一个10 个用户的文件系统,每次用户可保存10 个文件,一次运行用户可以打开5 个文件。系统能够检查打入命令的正确性,出错时能显示出错原因。对文件必须设置保护措施,例如只能执行,允许读等。在每次打开文件时,根据本次打开的要求,在此设置保护级别,即有二级保护。文件的操作至少有Create、delete、open、close、read、write 等命令。 所编写的程序应采用二级文件目录,即设置主文件目录和用户文件目录。前者应包含文件主及它们的目录区指针;后者应给出每个文件占有的文件目录,即文件名,保护码,文件长度以及它们存放的位置等。另外为打开文件设置运行文件目录(AFD),在文件打开时应填入打开文件号,本次打开保护码和读写指针等。 程序流程图:

逻辑设计: 使用线性数组表表示MFD,泛型数组表示UFD,每个元素包括用户ID、保存的文件数、再使用线性表表示文件信息,每个元素包括文件名,文件属性(保护码),文件的状态等信息。 物理设计: //主目录 private FileUser[] mfd; //当前用户 private FileUser currentuser; ///

/// 文件 /// public class FileObject { public string filename; public int size=20; public int read=0; public int write = 0; public string author; } /// /// 文件系统用户 /// public class FileUser { public string username;

简单文本编辑器——课程设计(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# Windows程序设计学年第_ _学期第周月日教学内容备注 项目一:文本编辑器的设计与实现 【项目背景】 文本编辑器有两类:单文档和多文档文本编辑器。单文档文本编辑器一次只能打开一个文件,如果要打开另一个文件,必须关闭当前打开的文件,微软的写字板程序就是单文档字处理程序。多文档文本编辑器允许同时打开多个文件,每个文件占用一个子窗口,微软的Word程序就是多文档字处理程序。本项目主要介绍建立单文档文本编辑器的方法,通过分析现有文本编辑器的功能与操作过程,利用C#开发一个新的文本编辑器。 【主要内容与技能要求】 (1)会进行复杂窗口设计 (2)会对常见的文本编辑功能进行分析与编码实现 (3)会设计多文档窗口 一、预备知识 本项目主要利用RichTextBox控件来构成文本编辑区域。 1、RichT extBox控件的主要属性 属性SelectedText、SelectionLength、SelectionStart: 属性SelectionFont: 属性SelectionColor: 属性Lines: 属性Modified: 事件SelectionChange: 事件TextChanged: 2、RichT extBox控件的主要方法 方法Clear(): 方法Copy()、Cut()、Paste(): 方法SelectAll(): 方法Find(): 方法SaveFile()和LoadFile():

课程: C# Windows程序设计学年第_ _学期第周月日教学内容备注方法Undo(): 方法Redo(): 二、功能设计与实现 1、剪贴板功能 放RichTextBox控件到窗体。属性Name=richTextBox1,Dock=Fill,Text=""。 private void menuItemEditCut_Click(object sender,EventArgs e) { richTextBox1.Cut(); } //剪切 private void menuItemEditCopy_Click(object sender,EventArgs e) { richTextBox1.Copy(); } //拷贝 private void menuItemEditPaste_Click(object sender,EventArgs e) { richTextBox1.Paste(); } //粘贴 private void menuItemEditUndo_Click(object sender,EventArgs e) { richTextBox1.Undo(); } //撤销 private void menuItemEditRedo_Click(object sender,EventArgs e) { richTextBox1.Redo(); } //恢复 2、存取文件功能 文本编辑器都应具有文件存取功能,菜单顶级菜单项“文件”的弹出菜单中一般包括如下菜单项:新建、打开、关闭、保存和另存为等。需要用到打开文件对话框(OpenFileDialog控件)和保存文件对话框(SaveFileDialog控件)。和 两个对话框的常用属性和方法: 属性Filter:例如Filter=“纯文本文件(*.txt)|*.txt|所有文件(*.*)|*.*” 属性FilterIndex: 属性FileName: 属性InitialDirectory: 属性DefaultExt: 方法ShowDialog(): 存取文件功能实现如下:

档案管理实训报告

档案管理实训报告 班级:中文文秘111 姓名:瞿晨智 学号:1101022001

一、实训目的 档案管理学是我们文秘班的专业课,为了加深我们对于这部分知识的掌握,档案管理实训活动要将我们的理论付诸实践。通过对本课程的学习,要求掌握档案分类、整理、档案登记与估计以及计算机管理档案的基本方法和工作程序。从而提高档案管理的操作技能和理论素养。 这次实训,我们要能了解并且初步掌握档案管理工作的一般过程和基本方式方法,提高独立操作能力。树立热爱档案管理工作的专业思想,全心全意服务于工作单位,提高本专业同学的操作技能和分析能力;从具体实践上加深对档案学基础知识和操作流程的认识;培养我们认真踏实、实事求是的态度与作风。 二、实训时间 2014年3月26日 三、实训单位 南通大学文学院文秘实训基地 四、主要内容 (一)、熟悉文件样式;公文收发登记样式;类目样式等等。 1、在实训课上我们所熟悉的文件样式是国务院的一份红头文件,内容如下: 国务院文件 国发﹝2010﹞10号 国务院关于坚决遏制部分城市房价过快上涨的通知各省、自治区、直辖市人民政府,国务院各单位、各直属机构: 正文 国务院 2010年4月17日说明:1、《国家行政机关公文格式》(GB/T9704-1999) 2、《国务院办公厅关于实施<国家行政机关中文处理办法>涉及的几个具体问题的处理意见》(国办函﹝2001﹞1号) 这是一份具体的国务院下发的通知,课件上还详细注明了边距、要素名称,对于公文的格式又再一次的深入学习和复习了。 2、公文收发样式: 公文收发样式这一块的实践确实是我们比较欠缺的,而实训中所展示色则是一份文件办

简易文本编辑器说明书

中北大学 课程设计说明书 学院、系: 专业: 班级: 学生姓名:学号: 设计题目:简易文本编辑器 起迄日期: 2016年12月16日~2016年12月29日指导教师: 日期: 2016年12月29日

1 设计目的 通过用户调查分析及实际需求,开发出一个文本编辑器,可以方便用户对文本进行编辑。系统需要实现如下基本功能: (1)具有图形菜单界面; (2)查找,替换(等长,不等长),插入(插串,文本块的插入)、块移动(行块,列块移动),删除;(3)可正确存盘、取盘; (4)正确显示总行数。 2 任务概述 要设计一简易的文本编辑器,要求有图形菜单界面,也就是菜单选择的界面,要实现的功能有对文本进行存盘,取盘,在某一个盘中新建一个TXT的文件,在里面输入内容,对这个文件进行取盘,显示出文本内容,并在显示的时候显示行数,具有对文本进行查找、替换、插入、移动、删除等功能。 为实现数据的有序存储,该编辑器应该用顺序表来存储输入的信息。顺序表是数据结构中线性表的一种,它是用一块地址连续的存储空间依次存储线性表的元素。其特点为:在顺序表上逻辑关系相邻的两个元素在物理位置上也相邻;在顺序表上可以随即存取表中的元素。在编辑器的主界面中应有如下提示信息: ⑴显示当前文本信息:从文件中读出文本,在某一个盘中创建一个文本文件,所以要读出来, 显示到显示器上,并统计出行数。 ⑵查找文本信息:因为在下面做插入,删除,移动之类的都需用到查找,在查找的时候,也要 调用一个字符匹配模式的程序,来判断查找的内容是否符合所要查找的内容。 ⑶删除文本信息:首先在数组中查找要删除的信息,查找的时候调用匹配模式的子函数,如果 找到该信息,提示是否确认删除该信息,通过确认来删除信息,如果未找到要删除的信息,提示未找到该信息; ⑷插入文本信息:首先调用字符匹配模式的子函数找到插入点,如果找到该插入点,提示输入 插入信息,确认插入信息后,选择是否在这个位置插入,如果是的话执行插入,不是的话再往下查找下一个插入点。 ⑸替换文本信息:首先在数组中查找要被替换的信息,如果找到该信息,提示输入要替换的 信息内容,否则提示未找到要被替换的信息; ⑹保存文本信息:在这里使用文件写入读出的功能,把你修改完的内容保存到你所建立的文 本中。 ⑺显示文本内容:读出文件中的所有字符,显示到显示器上。 ⑻退出 3 模块划分 (1)系统主要包含主程序模块和其他操作模块。其调用关系如图(一)所示。

文档管理实训报告doc

文档管理实训报告 通过两周的文档管理实训,不仅仅是巩固了课堂的理论知识,弄清模糊知识点,扩充知识;而且提高了文书文书处理,档案整理等档案工作的日常工作实操能力;更重要的是通过实训培养自身严谨细致的工作作风和良好的沟通合作能力。为了总结经验,现将本次实训报告如下: 一、实训任务 ①判断所给材料是否应该归档,如何分类组卷 ②档案材料装订练习 ③电子文档工作介绍及档案信息系统操作 ④整理学生档案案卷及小组间交换检查 ⑤企业文档工作调查及汇报 ⑥整理专门档案及汇报交流 ⑦撰写实训总结及交流 ⑧参观学院档案室及广东省档案馆 二、经验 (一)杂乱无章到有条不紊 工作阅历浅、认识面窄、理论与实际存在差别等等各种因素给我们实训期间的档案整理工作有一定的难度,但是通过指导老师所给指导意见、所给的材料进行训练及纠正,更好地判断归档与不归档的材料、掌握较好的分类标准、分类

方法以及熟悉一些材料的组合案卷的工作程序。当把那些一堆堆的文件整理成井然有序的档案室,就会有一种一种不由而生的成就感,自豪感。即使是在这段过程当中,会有文件涉及范围广,无法精确分类归档;任务多,时间安排不合理;理论知识不扎实;焦头烂额,因在某些问题上存在着一定程度的偏见而吵架的时候,我们也能够进行很好的沟通和讨论,最后展现我们小组的劳动成果。 (二)做调查、做整理的认识 从企业文档工作调查的后,了解到了如何做调查也是一门艺术,如何调查能达到有一定的预期效果。调查企业的文档,发现与课本理论知识有着一定的差别。每个公司都会有一定的分类标准、分类类目、归档的范围,同时也了解了一些文档的不同保存形式,虽然调查并不能像我们拥有工作的经验一样,但是我们却能从中知道目前一些企业的文档工作的相关情况。 同时,我们也会有电子文档、专门档案整理的项目。在电子文档的实训中,掌握了一定的电子文档工作的操作方法,如软件的文件录入、文件整理、文件的分发、文件的传递、档案全宗的管理、档案的检索、档案的提供利用等等一系列的操作。这其中必定少不了严谨细致的工作态度,切记文件录入的错误等等,如果有错,这将会给以后的工作造成一定的影响。

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算法用于实践中去,模拟出页面调度算法得出缺页率。 具体实验程序流程图如下:

使用文本编辑器

文本编辑器使用 Visual C++6.0开发环境中包含了一个功能强大的文本编辑器,使用它可以管理、编辑及打印源代码文件。虽然该文本编辑器和其他基于Windows文本编辑器软件(如Windows 98的记事本)的大多数功能是相同的,但它是集成在Visual C++6.0开发环境中,一旦文档窗口中的源代码文件被打开,就可以使用了,且增加许多帮助快速键入代码、提高可读性的功能,例如在文本编辑器中用不同的颜色表示不同的语法结构(蓝色表示关键字,浅绿色表示注释)。 使用文本编辑器,用户可以实现以下功能: ·通过在线弹出的列表框选择所需要的类成员、参数或值来完成相应的语句。 ·使用文本编辑器的宏操作。 ·可以为不同的编程语言产生相应的代码源文件,包括C/C++、SQL及HTML。 ·为源文件中相应的字、词或语法定制不同的颜色以及文本编辑器的外规定制等。 ·在单个或多个源文件中进行多种条件的漫游、查找和替换。 ·用书签标记源文件中要处理的代码行。 ·管理源文件窗口,在多个窗口之间进行拖放操作。 ·支持SQL脚本的处理、切换等操作。 1 选定文本 在文本编辑过程中常常需要选定所需要的文本,并进行剪切、复制、删除、增加或减少缩进等操作。在选择时,可以选定文本中的一行、多行或文本块,其相应的操作过程如下: (1)选定一行 将鼠标移至要选定的行的最左边,当鼠标箭头变成反向时,单击鼠标左键。 (2)选定多行 将鼠标移至要选定内容的开始处,按下左键并拖动,在选定内容的结尾处释放鼠标。 (3)选定文本块 将鼠标移至要选定内容的开始处,按下鼠标左键之前按住ALT键不放并拖动,在选定内容的结尾处释放鼠标和ALT键。 另外,若双击鼠标左键,则鼠标所在位置的整个单词被选定。

《java程序设计》作业答案

《JA V A程序设计》作业答案 一、选择题 1、编译HelloWorld.java的正确命令是: C) javac HelloWorld.java 2、正确运行HelloWorld.java的正确命令是: A)java HelloWorld 3、下面程序代码,使用多行注释正确的是: C)/* int k=9; int j=8; k = k + j; */ 4、long型的取值范围是: D)-263~263-1 5、下面不属于Java保留字的是: C)malloc 6、下面属于非法的Java标识符的是: D) abc-d 7、对与System.out.println()语句解释合理的是: C)执行后输出一个空行 8、阅读下面的代码,回答问题, for( m = 0 ; m > -2 ; m -- ){….} For循环执行多少次: C)2 9、阅读下面的代码,回答问题, for( m = 0; m < 5; m++ ) { System.out.print( m + "," ); if( m == 3 ) break; } 执行结果是: C)0,1,2,3, 10、阅读下面的代码,回答问题, public class Ex { int x = 1; void m() { int x = 3; System.out.print( "x= " + x); } public static void main( String[] args ) { Ex ex = new Ex();

ex.m(); } } 执行结果是: B)x=3 11、下面语句在编译时不会出现错误信息的是: a) float f = 1.3; b) char c = "a"; c) byte b = 257; d) boolean b = null; e) int i = 10; 12、编译和运行下面的代码,会有什么结果产生: public class MyClass { public static void main(String arguments[]) { amethod(arguments); } public void amethod(String[] arguments) { System.out.println(arguments); System.out.println(arguments[1]); } } a) 错误,静态方法不能直接引用非静态方法b) 错误,主方法有错误 c) 错误,数据定义有错误d) 方法amethod必须被声明为String型 13、编译期间会出错的是: a) import java.awt.*; package Mypackage; class Myclass {} b) package MyPackage; import java.awt.*; class MyClass{} c) /*This is a comment */ package MyPackage; import java.awt.*; class MyClass{} 14、byte型的变量的表示范围为: a) -128 to 127 b) (-2 power 8 )-1 to 2 power 8 c) -255 to 256 d) 依赖Java虚拟机而定 15、在命令行运行命令:java myprog good morning 会有什么结果显示出来: public class myprog{ public static void main(String argv[]) { System.out.println(argv[2]) } } a) myprog b) good c) morning

文件系统存储空间管理模拟实验报告

课程名称计算机操作系统实验名称文件系统存储空间管理模拟姓名学号 专业班级实验日期 成绩指导老师 一、实验目的 根据提出的文件分配和释放请求,动态显示磁盘空闲空间的 态以及文件目录的变化,以位示图和索引分配为例:每次执行请求后要求显示或打印位示图的修改位置、分配和回收磁盘的物理块地址、更新的位示图、目录。 二、实验原理 用数组表示位示图,其中的每一位对应磁盘一个物理块的状态,0表示、空闲,1表示分配;当请求分配一个磁盘块时,寻找到数组中为0的位,计算相对磁盘块号,并计算其在磁盘中的物理地址(柱面号、磁道号、物理块号),并将其状态由0变到1。当释放某一物理块时,已知其在磁盘中的物理地址,计算其相对磁盘块号,再找到位示图数组中的相应位,将其状态由1变为0。 三、主要仪器设备 PC机(含有VC) 四、实验容与步骤 实验容:1. 模拟文件空间分配、释放过程,可选择连续分配、链式分配、索引分配法;2. 文件空闲空间管理,可采用空白块链、空白目录、位示图法; 步骤如下: 1. 输入磁盘基本信息参数,计算位示图大小,并随机初始化位示图; (1)磁盘基本信息:磁盘柱面数m, 每柱面磁道数p, 每磁道物理块数q; (2)假设采用整数数组存放位示图,则数组大小为: Size= ceil((柱面数*每柱面磁道数*每磁道物理块数)/(sizeof(int)*8))(3)申请大小为size的整数数组map,并对其进行随机初始化。 例如:假设m=2, p=4, q=8, 共有64个磁盘块,若sizeof(int)=2, 则位示图大小为4,map[4]如下: 地址到高地址位上。即map[0]的第0位到第15位分别对应0号磁盘块到15号磁盘块的状态,map[1]的第0位到第15位对应16号磁盘块到31号磁盘块的状

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

文本编辑器应用总结 一.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文本编辑器