TDS-Java主控编写文档
使用Javadoc注释你的代码生成规范的文档

使用Javadoc注释你的代码生成规范的文档Javadoc是一种用于生成规范的Java代码文档的工具。
它不仅提供了代码的注释和解释,还可以生成HTML格式的代码文档。
在这篇文章中,我将解释如何使用Javadoc注释你的代码,并生成规范的文档。
首先,我们需要创建一个包含Java代码的项目。
在代码中,我们需要使用特殊的注释格式来为每个类、方法和字段提供相关的文档。
这些注释应该包含关于代码用途、功能、参数和返回值的详细说明。
这些注释将成为Javadoc生成文档的基础。
以下是一个示例代码来说明如何使用Javadoc注释:```/***这是一个计算两个数之和的方法*/public static int add(int a, int b)return a + b;```在代码中使用了Javadoc注释后,我们需要使用Javadoc工具来生成文档。
我们可以通过在命令行使用`javadoc`命令来执行此操作。
以下是一个使用Javadoc工具生成文档的示例命令:```javadoc -d docs -author -version src/```当我们执行上面的命令后,Javadoc工具将会解析所有的源代码文件,并生成HTML格式的代码文档。
生成的文档将会包含每个类、方法和字段的Javadoc注释。
我们可以在浏览器中打开生成的`index.html`文件来查看文档。
总结起来,Javadoc是一个非常有用的工具,可以帮助我们生成规范的Java代码文档。
通过使用特殊格式的注释,我们可以详细解释代码的功能和用法。
生成的文档可以有效地帮助其他开发人员了解代码的用途和使用方式。
因此,在开发Java项目时,我们应该养成良好的Javadoc注释习惯,并使用Javadoc工具生成规范的文档。
这样不仅可以提高代码的可读性和可维护性,还可以促进团队合作和知识共享。
JAVA开发规范文档

Java 开发规范文档一:目的使本组织能以标准的,规范的方式设计和编码。
通过建立编码规范,以使每个开发人员养成良好的编码风格和习惯;并以此形成开发小组编码约定,提高程序的可靠性,可读性,可修改性,可维护性和一致性等,增进团队间的交流,并保证软件产品的质量。
二:代码组织与风格1:长度:为便于阅读和理解,单个函数的有效代码长度当尽量在100行以内(不包括注释行),当功能模块过大时往往采用使用子函数将相应的功能抽取出来,这也有利于提高代码的重用度。
2:单个类不宜过大,当出现此类过大时当将相应功能的代码重构到其他类中,通过组合等方式来调用,建议单个类的长度包括注释行不超过1500行。
尽量避免使用大类和长方法。
3:间隔:类,方法及功能块间等应以空行相隔,以增加可读性,但不得有无规则的大片空行。
操作符两端应当各空一个字符以增加可读性。
三:注释1:注释应该增加代码的清晰度。
代码注释的目的时要使代码更易于被其他开发人员等理解。
2:保持注释的简洁。
3:注释信息应该包括代码的功能。
4:除变量定义等较短语句的注释使用行尾注释外,其他注释当避免使用行尾注释。
5:JavaDoc规范对类,方法,变量等注释需要符合javadoc规范,对每个类,方法都应详细说明其功能条件,参数等。
类注释中应当包含版本和作者信息。
1)类,接口注释在类,接口定义之前当对其进行注释,包括类,接口的目的,作用,功能,继承于何种父类,实现的接口,实现的算法,使用方法,示例程序等。
2)方法注释以明确该方法功能,作者,各参数含义以及返回值等。
3)其他注释应对重要的变量及不易理解的分支条件表达式加以注释,以说明其含义等。
四命名规范1:对变量,类,接口及包的命名应该使用英文。
严禁使用汉语拼音及不相关单词命名。
更不可以使用汉字来进行命名。
采用大小写混合,提高名字的可读性。
一般应该采用小写字母,但时类和接口的名称的首字母,以及任何中间单词的首字母应该大写。
包名全部小写。
教你用JAVA写文本编辑器(一)

教你⽤JAVA写⽂本编辑器(⼀)⽬录前⾔思路分析:具体实现总结前⾔这⾥⽤swing ,awt写的。
我们⼤概要做成⼀个电脑的记事本那样的⼀个编辑器。
可以调整字体,字号,颜⾊。
能够打开、保存⽂件,新建窗⼝,点击退出,还有⼀个关于介绍的窗⼝。
整体看起来功能不是很多,只要⼀部分⼀部分的去完成就很好办了。
思路分析:⼀、⾸先我们的⽬标模型就是电脑的记事本,打开编辑器可以看到结构:1、标题显⽰在窗⼝的title。
2、下⾯⼀⾏是⼀个⼯具栏,⾥⾯有⽂件、编辑、格式、查看、帮助。
这⾥我们就选⽂件、格式、帮助来做,⼤致的情况都差不多。
3、再下⾯就是⼀个屏占⽐超⾼的 TextArea了,他还有个特点是有滚动条。
⼆、⽂件菜单栏:这⾥有新建窗⼝,打开⽂件,保存⽂件,还有⼀个退出按钮。
其中的难点主要在打开和保存⽂件上,为什么呢。
因为我们点开打开和保存两个按钮,都会跳出⼀个⽂件选择的Dialog。
这东西是不是要⾃⼰画,如果要⾃⼰画,那就相当⿇烦了,要对磁盘进⾏遍历,然后贴到窗⼝中什么的。
所幸我们有封装好的⼯具JFileChooser。
三、格式菜单:弹出⼀个窗⼝,有⽂字的各种形式的属性选择,中间⼀个展⽰⽤的⽂本区域,下⾯两个按钮,确定即保存格式,修改主窗⼝的属性。
取消则关闭窗⼝,不改变属性。
四、帮助菜单:这个是最简单的,因为只有⼀个弹窗,⽤于显⽰⽂本,所以我们打算从这⾥开始做。
OK,对每个部分分析了⼀下感觉清晰了很多。
接下来我们来第⼀步,把主窗⼝画出来。
具体实现画主窗⼝,并把菜单栏按照各⾃的关系建好:这⾥⽤到JMenuBar,JMenu、JMenuItem。
顾名思义⼀个是菜单栏,⼀个是菜单,⼀个事菜单项。
下⾯看代码:public class test5 extends JFrame{private JMenuBar menuBar;//菜单栏private JMenu menu_File,menu_Edit,menu_Help,menu_Format;//菜单栏内的菜单private JMenuItem item_new,item_open,item_save,item_exit;//对于file菜单的⼦项private JMenuItem item_undo,item_cut,item_copy,item_stick,item_delete;//对于edit菜单的⼦项private JMenuItem item_about;//对于help菜单的⼦项private JMenuItem item_word_format;public test5() {initMenuBar();this.setJMenuBar(menuBar);this.setSize(800,600);this.setTitle("⾃定义⽂本编辑器");this.setVisible(true);this.setLocationRelativeTo(null);this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);}/*** 对menubar进⾏初始化,这⾥有⼀些⼩的快捷⽅式的设置* ⼤家可以考虑对所有的组件都设置⼀下* 两种形式:* menu_File.setMnemonic('f'); 对menu* item_word_format.setAccelerator(KeyStroke.getKeyStroke('F',java.awt.Event.CTRL_MASK,false)); 对item*/public void initMenuBar() {menuBar = new JMenuBar();menu_File = new JMenu("⽂件(F)");menu_File.setMnemonic('f');//f+alt打开item_new = new JMenuItem("新建");item_open = new JMenuItem("打开");item_save = new JMenuItem("保存");item_exit = new JMenuItem("退出");menu_File.add(item_new);menu_File.add(item_open);menu_File.add(item_save);menu_File.add(item_exit);//File 菜单menu_Edit = new JMenu("编辑(E)");menu_Edit.setMnemonic('e');item_undo = new JMenuItem("撤销");item_cut = new JMenuItem("剪切");item_copy = new JMenuItem("复制");item_stick = new JMenuItem("粘贴");item_delete = new JMenuItem("删除");menu_Edit.add(item_undo);menu_Edit.add(item_cut);menu_Edit.add(item_copy);menu_Edit.add(item_stick);menu_Edit.add(item_delete);//Edit 菜单menu_Help = new JMenu("帮助(H)");menu_Help.setMnemonic('h');item_about = new JMenuItem("关于");menu_Help.add(item_about);//Help 菜单menu_Format = new JMenu("格式(O)");menu_Format.setMnemonic('o');item_word_format = new JMenuItem("字体(F)");item_word_format.setAccelerator(KeyStroke.getKeyStroke('F',java.awt.Event.CTRL_MASK,false));//给item添加快捷键menu_Format.add(item_word_format);menuBar.add(menu_File);menuBar.add(menu_Edit);menuBar.add(menu_Format);menuBar.add(menu_Help);}public static void main(String[] args) {test5 t5 = new test5();}}接下来就是菜单栏下⾯的⽂本编辑区域了,这⾥只需要⽤⼀个JTextArea就可以了,别忘了还有滚动条(JScrollPane):public class test5 extends JFrame{......private static JTextArea edit_text_area;//private JTextArea edit_text_area;//编辑区域private JScrollPane scroll_bar;//可滚动的pane ⾥⾯添加edit_text_area就可以变为⼀个可以滚动的⽂本框,JScrollPane是⼀个pane,同时可以设置⽅向public test5() {initMenuBar();initEditArea();this.setJMenuBar(menuBar);this.setSize(800,600);this.add(scroll_bar);this.setTitle("⾃定义⽂本编辑器");this.setVisible(true);this.setLocationRelativeTo(null);this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);}/*** 初始化编辑区域* ⽤scrollpane装textarea* 同时对pane设置⽅向*/public void initEditArea() {edit_text_area = new JTextArea();scroll_bar = new JScrollPane(edit_text_area);scroll_bar.setVerticalScrollBarPolicy(JScrollPane.VERTICAL_SCROLLBAR_AS_NEEDED);}public void initMenuBar() {...}public static void main(String[] args) {test5 t5 = new test5();}}为了节省篇幅,我就把重复出现的代码删除⽤...代替了,相信没有影响⼤家的观看效果。
Java编辑器模块概要设计文档

JavaEditor模块设计文档一、引言1.1编写目的本文档是为了工具开发人员能系统化地进行开发提供思路和方法,避免大量的重复工作,为测试人员能快速查阅系统的设计思路和具体功能,对系统的整体架构有大概的了解。
1.2参考资料Java编辑器源码二、任务概述2.1功能描述功能列表1.关键字都呈红色高亮显示,注释为绿色高亮,输出引号内容和声明的变量为蓝色高亮,其他内容显示常规黑色;2.左侧标尺中可右键显示行号,添加断点,根据函数行折叠代码,打开当前编辑器的属性框等;3.编写过程中不断进行语法验证,检测的错误代码带高亮下划线,得到光标时弹出提示菜单;4.编辑过程中,使用未引入的包,高亮下划线提示,获取光标提供导入包选项;5.根据左括号,回车自动添加右括号,编写代码时,根据固定格式内嵌缩进;6.双击时,自动匹配括号内容选中,如果不是在括号左右双击,则选中单词;7.在编辑区域中提供右键菜单,可实现复制、粘贴、剪切、撤销、恢复、缩进、打开、保存、运行、属性框等功能;8.保存的文件,编辑器中所有属性都能保存,再次打开与保存前的状态相一致。
包含功能:编辑、打开保存、语法高亮、内容辅助。
2.2运行环境Eclipse运行环境三、功能实现3.1 设计问题●格式化JavaEditor是怎么样将文本安排到行和列上的?文本的缩进如何按定义的规则实现,哪些对象负责执行不同的格式策略?●修饰用户界面JavaEditor的用户见面包括滚动条和边界。
这些修饰有可能随着用户界面的演化而发生变化,因此在不影响其他方面的情况下,能自由增加和除去这些修饰就十分重要了。
●用户操作用户通过不同的用户界面来控制JavaEditor 包括按钮和下拉菜单等。
●智能辅助JavaEditor定义不同关键字的颜色,如注释的颜色、字符串的颜色等。
当输入代码时,可以在提示java语法中内置对象的内容提示功能。
本项目中已包含的类:3.2 格式化内容格式化格式化就是按照特定的规则对文档重新排版使之更具可读性。
Java编辑器模块概要设计文档

JavaEditoi模块设计文档一、引言1.1 编写目的本文档是为了工具开发人员能系统化地进行开发提供思路和方法,避免大量的重复工作,为测试人员能快速查阅系统的设计思路和具体功能,对系统的整体架构有大概的了解。
1.2 参考资料Java编辑器源码二、任务概述2.1 功能描述功能列表1.关键字都呈红色高亮显示,注释为绿色高亮,输出引号内容和声明的变量为蓝色高亮,其他内容显示常规黑色;2.左侧标尺中可右键显示行号,添加断点,根据函数行折叠代码,打开当前编辑器的属性框等;3.编写过程中不断进行语法验证,检测的错误代码带高亮下划线,得到光标时弹出提示菜单;4.编辑过程中,使用未引入的包,高亮下划线提示,获取光标提供导入包选项;5.根据左括号,回车自动添加右括号,编写代码时,根据固定格式内嵌缩进;6.双击时,自动匹配括号内容选中,如果不是在括号左右双击,则选中单词;7.在编辑区域中提供右键菜单,可实现复制、粘贴、剪切、撤销、恢复、缩进、打开、保存、运行、属性框等功能;8•保存的文件,编辑器中所有属性都能保存,再次打开与保存前的状态相一致包含功能:编辑、打开保存、语法高亮、内容辅助。
2.2运行环境Eclipse运行环境三、功能实现3.1设计问题格式化JavaEditor是怎么样将文本安排到行和列上的?文本的缩进如何按定义的规则实现,哪些对象负责执行不同的格式策略?修饰用户界面JavaEditor的用户见面包括滚动条和边界。
这些修饰有可能随着用户界面的演化而发生变化,因此在不影响其他方面的情况下,能自由增加和除去这些修饰就十分重要了。
用户操作用户通过不同的用户界面来控制JavaEditor包括按钮和下拉菜单等。
智能辅助JavaEditor定义不同关键字的颜色,如注释的颜色、字符串的颜色等。
当输入代码时,可以在提示java语法中内置对象的内容提示功能。
3.2格式化内容格式化格式化就是按照特定的规则对文档重新排版使之更具可读性。
java文本编辑器实验报告

Java考核课程名称Java程序设计题目名称文本编辑器的设计与实现学生学院计算机学院专业班级计算机17(2)班学号**********学生姓名李泽豪指导教师赵锐2018 年12 月11 日一、课程题目编程实现一个文本编辑器使其具有新建、打开、保存,编辑(查找、替换、大小写转换等)、统计(字数、行数、字符数等)、格式(字体设置、字体大小、字体颜色、背景颜色等)等功能。
要求:基于JFrame窗体设计、使用菜单进行功能选择。
提示:字体颜色,背景颜色的设置,可使用javax.swing包中的JColorChooser类的静态方法showDialog()调用标准颜色对话框来完成;文件操作可通过javax.swing包中JColorChooser类中的showSaveDialog()、showOpenDialog()方法调用标准的的文件对话框来完成。
二、题目分析与设计2.1开发环境使用Eclipse开发软件2.2需求分析简单的文本编辑器提供给用户基本纯文本的文字编辑功能,能够读取计算机本地磁盘中的文本内容,将用户文本导入到磁盘中之中,以及实现基本的字体设置(字体,字号,字体颜色)简单的编辑字体的功能,以及统计(字数,行数,字符数),增强视觉体验的背景颜色功能等,简单而实用。
而网络上的各种编辑器,有的功能不足(如自带的记事本),而有些编辑器功能太繁杂,仅以日常应用方面来说,一个文本编辑器只需要简单的功能就够了。
2.3功能构架本程序要构建的文本编辑器按照题目要求,分为四个方面:(1)“文件”菜单:包括“新建”并提示是否保存已编辑内容,“打开”计算机本地磁盘的文本文件,主动“保存”自己已经编辑好的内容到电脑的磁盘或“另存为”新的文件之中,以及“退出”并提示是否保存已编辑的内容。
(2)“编辑”菜单:包括对已编辑文本的一个“查找与替换”功能,对已编辑英文文本的一个“大小写转换”功能。
(3)“格式”菜单:实现对文本的“字体”设置,“字体大小”以及“字体颜色”,还有能优化视觉体验的“背景颜色”的改变。
Java写的简单文本编辑器代码(word文档良心出品)

import java.awt.*;import java.awt.event.*;import java.io.*;public class Notepad /*implements ActionListener , MouseListener , MouseMotionListener , WindowListener , ItemListener , KeyListener, TextListener */{//成员变量private Frame mainFrame;//主框架private MenuBar mb ; //菜单条private Menu mFile , mEdit , mFormat , mHelp ; //菜单:文件,编辑,格式,帮助private MenuItem miNew , miOpen , miSave , miSaveAs , miExit ;//文件菜单项:新建,打开,保存,另存为,退出private MenuItem miCut , miCopy , miPaste , miDelete ;//编辑菜单项:剪切,复制,粘贴,删除private MenuItem miFont, miLowtoCapital, miCapitaltoLow,miEncrypt, miDisencrypt;//格式菜单项:字体private MenuItem miAboutNotepad;//帮助菜单项:关于记事本private TextArea ta;//文本区private String tempString;//临时字符串,用于存储需要复制粘贴的字符串private boolean textValueChanged = false;private int id_font ;//字体String fileName = "";//上次保存后的文件名和地址//构造函数public Notepad(){//框架mainFrame = new Frame ("Notepad v0.99 by Launching");mb = new MenuBar ();ta = new TextArea (30 ,60);ta.setFont( new Font ( "Times New Rome" , Font.PLAIN , 15));ta.setBackground(new Color(0 , 250 , 200));//菜单条mFile = new Menu ( "文件");mEdit = new Menu ( "编辑");mFormat = new Menu ("格式t");mHelp = new Menu ("帮助");//"文件"miNew = new MenuItem ("新建");miOpen = new MenuItem ("打开");miSave = new MenuItem ("保存");miSaveAs = new MenuItem ("另存为");miExit = new MenuItem ("退出");//"编辑"miCut = new MenuItem ("剪切");miCopy = new MenuItem ("复制");miPaste = new MenuItem ("粘贴");miDelete = new MenuItem ("删除");//"格式"miFont = new MenuItem ("Font");miLowtoCapital = new MenuItem("Low to Capital"); miCapitaltoLow = new MenuItem("Capital to Low"); miEncrypt = new MenuItem("Encrypt");miDisencrypt = new MenuItem("Disencrypt");//"帮助"miAboutNotepad = new MenuItem ("关于 Notepad");//添加文件菜单项mFile.add(miNew);mFile.add(miOpen);mFile.add(miSave);mFile.add(miSaveAs);mFile.add(miExit);//添加编辑菜单项mEdit.add(miCut);mEdit.add(miCopy);mEdit.add(miPaste);mEdit.add(miDelete);//添加格式菜单项mFormat.add(miFont);mFormat.add(miLowtoCapital);mFormat.add(miCapitaltoLow);mFormat.add(miEncrypt);mFormat.add(miDisencrypt);//添加帮助菜单项mHelp.add(miAboutNotepad);//菜单条添加菜单mb.add(mFile);mb.add(mEdit);mb.add(mFormat);mb.add(mHelp);//框架添加菜单条mainFrame.setMenuBar( mb );//初始字符串赋为空tempString = "";//添加文本区mainFrame.add(ta, BorderLayout.CENTER);mainFrame.setSize(800 , 500);mainFrame.setLocation( 100 ,100);// 起始位置mainFrame.setResizable(true);//不可更改大小mainFrame.setVisible(true);//mainFrame.pack();/////////////////////////增加监视器////////////////////////主框架mainFrame.addWindowListener(new WindowAdapter (){ //关闭窗口public void windowClosing(WindowEvent e) {System.exit(0);}});//文本区ta.addKeyListener( new KeyAdapter(){public void KeyTyped(KeyEvent e){textValueChanged = true ; //键盘按键按下即导致文本修改}});////////////////"文件"菜单:////////////////////////新建miNew.addActionListener( new ActionListener(){public void actionPerformed(ActionEvent e){ta.replaceRange("", 0 , ta.getText().length()) ;//清空文本区的内容fileName = "";//文件名清空}});//打开miOpen.addActionListener( new ActionListener(){public void actionPerformed(ActionEvent e) {FileDialog d=new FileDialog(mainFrame , "open file" ,FileDialog.LOAD );//打开文件对话框d.addWindowListener( new WindowAdapter(){ //关闭文件对话框窗口public void windowClosing(WindowEvent ee){System.exit(0);}});d.setVisible(true);File f = new File( d.getDirectory()+d.getFile() ); //建立新文件fileName = d.getDirectory()+d.getFile();//得到文件名char ch[] = new char [(int)f.length()];///用此文件的长度建立一个字符数组try//异常处理{//读出数据,并存入字符数组ch中BufferedReader bw = new BufferedReader( new FileReader(f) ); bw.read(ch);bw.close();}catch( FileNotFoundException fe ){System.out.println("file not found");System.exit(0);}catch( IOException ie){System.out.println("IO error");System.exit(0);}String s =new String (ch);ta.setText(s);//设置文本区为所打开文件的内容}});//保存miSave.addActionListener( new ActionListener(){public void actionPerformed(ActionEvent e) {if( fileName.equals("") ){ //如果文件没有被保存过,即文件名为空FileDialog d=new FileDialog(mainFrame , "save file" , FileDialog.SAVE );//保存文件对话框d.addWindowListener( new WindowAdapter(){ //关闭文件对话框窗口public void windowClosing(WindowEvent ee){System.exit(0);}});d.setVisible(true);String s = ta.getText();//得到所输入的文本内容try//异常处理{File f = new File( d.getDirectory()+d.getFile());//新建文件fileName = d.getDirectory()+d.getFile();//得到文件名BufferedWriter bw = new BufferedWriter( new FileWriter (f));//输入到文件中bw.write(s , 0 , s.length());bw.close();}catch(FileNotFoundException fe_){System.out.println("file not found");System.exit(0);}catch( IOException ie_){System.out.println(" IO error");System.exit(0);}}else//如果文件已经保存过{String s = ta.getText();//得到所输入的文本内容try//异常处理{File f = new File( fileName );//新建文件BufferedWriter bw = new BufferedWriter( new FileWriter (f));//输入到文件中bw.write(s , 0 , s.length());bw.close();}catch(FileNotFoundException fe_){System.out.println("file not found");System.exit(0);}catch( IOException ie_){System.out.println(" IO error");System.exit(0);}}}});//另存为miSaveAs.addActionListener( new ActionListener(){public void actionPerformed(ActionEvent e) {FileDialog d=new FileDialog(mainFrame , "save file" , FileDialog.SAVE );//保存文件对话框d.addWindowListener( new WindowAdapter(){ //关闭文件对话框窗口public void windowClosing(WindowEvent ee){System.exit(0);}});d.setVisible(true);String s = ta.getText();//得到所输入的文本内容try//异常处理{File f = new File( d.getDirectory()+d.getFile());//新建文件BufferedWriter bw = new BufferedWriter( new FileWriter (f));//输入到文件中bw.write(s , 0 , s.length());bw.close();}catch(FileNotFoundException fe_){System.out.println("file not found");System.exit(0);}catch( IOException ie_){System.out.println(" IO error");System.exit(0);}}});//退出miExit.addActionListener( new ActionListener(){ ///退出程序public void actionPerformed(ActionEvent e){System.exit(0);}});////////////////"编辑"菜单://////////////////////剪切miCut.addActionListener( new ActionListener(){public void actionPerformed(ActionEvent e){tempString = ta.getSelectedText(); ///得到要复制的内容,暂存在tempString中StringBuffer tmp = new StringBuffer ( ta.getText());//临时存储文本int start = ta.getSelectionStart(); //得到要删除的字符串的起始位置int len = ta.getSelectedText().length(); //得到要删除的字符串的长度tmp.delete( start , start+len); ///删除所选中的字符串ta.setText(tmp.toString());//用新文本设置原文本}});//复制miCopy.addActionListener( new ActionListener(){public void actionPerformed(ActionEvent e){tempString = ta.getSelectedText(); ///得到要复制的内容,暂存在tempString中}});//粘贴miPaste.addActionListener( new ActionListener(){public void actionPerformed(ActionEvent e){StringBuffer tmp = new StringBuffer ( ta.getText());//临时存储文本int start = ta.getSelectionStart(); //得到要粘贴的位置tmp.insert(start , tempString);//查入要粘贴的内容ta.setText(tmp.toString());//用新文本设置原文本}});//删除miDelete.addActionListener( new ActionListener(){public void actionPerformed(ActionEvent e){StringBuffer tmp = new StringBuffer ( ta.getText());//临时存储文本int start = ta.getSelectionStart(); //得到要删除的字符串的起始位置int len = ta.getSelectedText().length(); //得到要删除的字符串的长度tmp.delete( start , start+len); ///删除所选中的字符串ta.setText(tmp.toString());//用新文本设置原文本}});////////////////"格式"菜单://////////////////////字体miFont.addActionListener( new ActionListener(){public void actionPerformed(ActionEvent e){final Dialog d = new Dialog ( mainFrame , "Font");//新建对话框 d.setLocation( 250 ,250);// 起始位置d.setLayout( new BorderLayout());//表格布局//////////////////////////上部分面板Label l_font = new Label ("font");//font标签Panel p_1 = new Panel();p_1.add(l_font);p_1.setVisible(true);//////////////////////////中部分面板List font_list = new List (6 , false);//字体列表//添加字体项目font_list.add("Plain");///普通字体font_list.add("Bold"); ///粗体font_list.add("Italic");//斜体font_list.addItemListener( new MyItemListener_font() ); //字体增加监视器Panel p_2 = new Panel();p_2.add(font_list);p_2.setVisible(true);//////////////////////////下部分面板Button ok = new Button ("OK");ok.addActionListener( new ActionListener(){public void actionPerformed(ActionEvent e){d.dispose();}});ok.setSize( new Dimension (20 , 5) );Panel p_3 = new Panel();//下部分面板p_3.add(ok);p_3.setVisible(true);//添加三个面板d.add(p_1 , BorderLayout.NORTH);d.add(p_2 , BorderLayout.CENTER);d.add(p_3 , BorderLayout.SOUTH);d.pack();d.addWindowListener( new WindowAdapter(){ //关闭对话框窗口public void windowClosing(WindowEvent ee){d.dispose();}});d.setVisible(true);}});//小写字母转大写miLowtoCapital.addActionListener( new ActionListener(){public void actionPerformed(ActionEvent e){String s = ta.getText();//得到所输入的文本内容StringBuffer temp = new StringBuffer("");for(int i = 0 ; i<s.length() ; i++){if((int)s.charAt(i)>=97 && (int)s.charAt(i)<=122 ){temp.append((char)((int)s.charAt(i)-32));}elsetemp.append(s.charAt(i));}s = new String(temp);ta.setText(s);}});//大写字母转小写miCapitaltoLow.addActionListener( new ActionListener(){ public void actionPerformed(ActionEvent e){String s = ta.getText();//得到所输入的文本内容StringBuffer temp = new StringBuffer("");for(int i = 0 ; i<s.length() ; i++){if((int)s.charAt(i)>=65 && (int)s.charAt(i)<=90 ){temp.append((char)((int)s.charAt(i)+32));}elsetemp.append(s.charAt(i));}s = new String(temp);ta.setText(s);}});//加密miEncrypt.addActionListener( new ActionListener(){public void actionPerformed(ActionEvent e){String s = ta.getText();//得到所输入的文本内容StringBuffer temp = new StringBuffer("");for(int i = 0 ; i<s.length() ; i++){if(s.charAt(i)>=40 && s.charAt(i)<=125){if(i%2==0){temp.append((char)(s.charAt(i) + 1 ));}elsetemp.append((char)(s.charAt(i) - 1 ));}elsetemp.append(s.charAt(i));}s = new String(temp);ta.setText(s);}});//解密miDisencrypt.addActionListener( new ActionListener(){ public void actionPerformed(ActionEvent e){String s = ta.getText();//得到所输入的文本内容StringBuffer temp = new StringBuffer("");for(int i = 0 ; i<s.length() ; i++){if(s.charAt(i)>=40 && s.charAt(i)<=125){if(i%2==0){temp.append((char)(s.charAt(i) - 1 ));}elsetemp.append((char)(s.charAt(i) + 1 ));}elsetemp.append(s.charAt(i));}s = new String(temp);ta.setText(s);}});////////////////"帮助"菜单://////////////////////关于记事本miAboutNotepad.addActionListener( new ActionListener(){public void actionPerformed(ActionEvent e){final Dialog d = new Dialog ( mainFrame , "AboutNotepad");//新建对话框TextArea t = new TextArea("\nwelcome to use Notepad " + "\n\n" + "Copyright@Launching " + "\n\n" + "free software" + "\n\n" + "v0.99");//添加标签t.setSize( new Dimension ( 5 , 5));t.setEditable(false);d.setResizable(false);//不可调整大小d.add(t);d.pack();d.addWindowListener( new WindowAdapter(){ //关闭对话框窗口public void windowClosing(WindowEvent ee){d.dispose();}});d.setLocation( 100 ,250);// 起始位置d.setVisible(true);}});}class MyItemListener_font implements ItemListener { //字体监听器public void itemStateChanged(ItemEvent e) {id_font = ((java.awt.List)e.getSource()).getSelectedIndex();switch( id_font){case 0:{ta.setFont(new Font("Times New Roman",Font.PLAIN ,ta.getFont().getSize()) );//普通文字break;}case 1:{ta.setFont(new Font("Times New Roman" ,Font.BOLD ,ta.getFont().getSize()) );//粗体文字break;}case 2:{ta.setFont(new Font("Times New Roman" ,Font.ITALIC ,ta.getFont().getSize()) );//斜体文字break;}}}}//////////////////////主函数//////////////////////////////public static void main(String arg[]){Notepad test = new Notepad(); ///创建记事本}//////////////////////////////////////////////////////////////// }运行效果图:。
java代码设计文档

java代码设计文档Java代码设计文档是用于记录和描述Java程序的设计思路、功能模块、类和方法的用途以及实现细节的文档。
它旨在帮助开发人员和其他相关人员了解和理解Java程序的设计和实现过程。
本文将以一个简单的学生管理系统为例,展示如何编写Java代码设计文档。
# 1. 引言本文档旨在描述学生管理系统的设计和实现细节。
该系统用于管理学生的基本信息、课程信息和成绩信息。
# 2. 系统概述学生管理系统是一个基于Java的桌面应用程序,用于管理学生信息。
它提供了以下功能:- 添加学生信息:包括姓名、学号、性别、年龄等基本信息。
- 添加课程信息:包括课程名称、学分、教师等信息。
- 添加成绩信息:将学生与课程关联,并录入学生的成绩。
- 查询学生信息:根据学号或姓名查询学生的基本信息、课程信息和成绩信息。
- 修改学生信息:可以修改学生的基本信息、课程信息和成绩信息。
- 删除学生信息:可以删除学生的基本信息、课程信息和成绩信息。
# 3. 系统结构学生管理系统由以下几个模块组成:- 学生信息模块:用于管理学生的基本信息。
- 课程信息模块:用于管理课程的基本信息。
- 成绩信息模块:用于管理学生的成绩信息。
- 数据库模块:用于连接和操作数据库,存储和读取学生、课程和成绩信息。
# 4. 类设计## 4.1 学生类学生类表示学生的基本信息,包括姓名、学号、性别和年龄等属性。
它具有以下方法:- 构造方法:用于创建学生对象,初始化学生的基本信息。
- getter和setter方法:用于获取和设置学生的属性值。
## 4.2 课程类课程类表示课程的基本信息,包括课程名称、学分和教师等属性。
它具有以下方法:- 构造方法:用于创建课程对象,初始化课程的基本信息。
- getter和setter方法:用于获取和设置课程的属性值。
## 4.3 成绩类成绩类表示学生的成绩信息,包括学生、课程和成绩等属性。
它具有以下方法:- 构造方法:用于创建成绩对象,初始化成绩的基本信息。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
TDS Java主控开发文档(TDS 1.0)产品研发部2012年11月文档信息及修订记录项目名称项目编号文档密级内部项目经理项目总监文档主送文档抄送修订人修订日期修订说明版本号马超2011-11-25 初稿 1.0填写说明:1、项目名称、项目编号、项目经理、项目总监按照本项目实际情况填写。
2、文档密级是该文档允许扩散的范围。
对于交通银行,机密文件必须由信息科技部经理室批准方可借阅;秘密文件必须由项目负责人批准方可借阅;内部文件经一般授权后可由在项目组内部传阅;公开文件不需经过授权,可自由进行阅读。
对于棠棣公司,机密文件、秘密文件必须由银行产品事业部经理室批准方可借阅;内部文件经一般授权后可由在公司内部和项目组内部传阅;公开文件不需经过授权,可自由进行阅读。
3、文档主送是指该文档应该主送的对象,双方项目总监、项目经理是该文档必须主送的对象之一。
4、文档抄送是指该文档应该抄送的对象,项目管理组是该文档应该抄送的对象之一。
5、版本号是指该文档的版本次序号,该文档首次发布时可确定为1.0,如果在上一版的基础上有细微的调整和修改,则可在小数点后次版本号加1;如果该文档内容总体上有重大变化或增加/删除了重要章节,则小数点主版本号加1。
目录1TDS Java主控开发 (4)1.1注解使用说明 (4)1.2主控编写注意 (4)1.3主控部署说明 (5)1.3.1生成的类存放 (5)1.3.2注意事项 (12)1TDS Java主控开发TDS平台是棠棣中间业务平台的简称。
该平台主要用于银行和第三方支付相关系统的基础平台,在此基础之上可用于如下平台或系统的架构:综合前置平台、设备前置平台、通讯前置平台、中间业务平台、支付结算业务平台、第三方支付网关等。
其中中间业务平台,用于实现银行方面的代收公共事业费,代理财政支付,财政非税代收等功能;支付结算业务平台,用于实现同城电子交换业务,电子商业汇票,现代化支付系统等功能。
1.1 注解使用说明定义方式:注解1:@Data示例:@Data String phone;@Data注解表示为Etf字段注解2:@tangdi.engine.DB使用说明:在交易定义上使用,则交易可以直接进行DB数据库操作注解3:@AroundInvoke注解的方法,将在交易调用前后调用;注解4:@code(“交易码”)注解的方法,即为主控交易1.2 主控编写注意常使用的方法已经在TdAtcForJava.jar中定义过,编辑器中开发时,新建主控文件后,将会自动生成一段代码,包括import常用的jar包方法;原子函数调用,用户直接Atc.方法名即可;普通表达式的调用,引入表达式包后,即可使用静态表达式函数进行处理;用户也可以自定义自己的方法,在主控类中自由使用;1.3 主控部署说明1.3.1生成的类存放用户在IDE开发环境中,编写完成自己的Java主控后,编译器会自动生成classes文件夹,将文件夹copy到TDS实例的app应用下即可;在app.xml里配置:注意事项:1:natures里添加javaengine;2:transactions交易节点中,配置新增加的class配置用<class> </class>配置,写法:包名全路径+文件名示例:<?xml version="1.0"encoding="UTF-8"?><application name="testCluster"desc="集群测试应用"natures="base,channel,webapp,javaengine,remote"><transactions><class> service.proxyService.Proxy</class></transactions></application>package service.proxyService;import java.util.List;import javax.annotation.PreDestroy;import javax.interceptor.AroundInvoke;import javax.interceptor.InvocationContext;import ng.StringUtils;import org.dom4j.Element;import tangdi.annotations.Code;import tangdi.atc.Atc;import tangdi.engine.context.Etf;import tangdi.engine.context.Msg;import tangdi.log.ILog;@tangdi.engine.DB/*** @{# Proxy.java Create on 2012-1-10 上午9:55:46** 类功能说明:* 代理商信息管理* <p>* Copyright: Copyright(c) 2012* </p>* <p>* Company: 上海棠棣* </p>* @Version 1.0* @Author <a href="mailto:wang_lj@">王龙军</a>**/public class Proxy {@PreDestroyvoid pre() {}@AroundInvokepublic Object around(InvocationContext ic) throws Exception {Msg.dump();Object obj = ic.proceed();Msg.dump(); // <after>return obj;}/*** code 466701* 代理商信息添加* @param logger*/@Code("466701")@tangdi.interceptor.Logpublic void createRole(ILog logger) {try {String sql = "insert into PRYPROXY(AGE_MERCH_ID,AGE_PWD,AGE_NAME,ADDRESS,POST_CODE,FLAG,EM AIL,COMM_PER,TELEPHONE,IP_LIMIT,AGE_DATE,SET_PER,LAST_DATE,LAST_PER,D ESCRIPTIONS) values('"+ Etf.getChildValue("AGE_MERCH_ID")+ "','"+ Etf.getChildValue("AGE_PWD")+ "','"+ Etf.getChildValue("AGE_NAME")+ "','"+ Etf.getChildValue("ADDRESS")+ "','"+ Etf.getChildValue("POST_CODE")+ "','"+ Etf.getChildValue("FLAG")+ "','"+ Etf.getChildValue("EMAIL")+ "','"+ Etf.getChildValue("COMM_PER")+ "','"+ Etf.getChildValue("TELEPHONE")+ "','"+ Etf.getChildValue("IP_LIMIT")+ "','"+ Etf.getChildValue("AGE_DATE")+ "','"+ Etf.getChildValue("SET_PER")+ "','"+ Etf.getChildValue("LAST_SAFT_DATE")+ "','"+ Etf.getChildValue("LAST_SAFT_PER")+ "','"+ Etf.getChildValue("DESCRIPTIONS") + "')";("%s", sql);("%s", "执行数据库添加操作");int count = Atc.ExecSql(null, sql);if (count == 0) {Etf.setChildValue("MsgTyp", "N");Etf.setChildValue("RspCod", "00000");Etf.setChildValue("RspMsg", "修改成功");}if (count == 2) {Etf.setChildValue("MsgTyp", "E");Etf.setChildValue("RspCod", "P0003");Etf.setChildValue("RspMsg", "执行本函数后改变数据表记录数为0");return;}if (count == 3) {Etf.setChildValue("MsgTyp", "E");Etf.setChildValue("RspCod", "P0002");Etf.setChildValue("RspMsg", "违反数据唯一性");}} catch (Exception ex) {Etf.setChildValue("MsgTyp", "E");Etf.setChildValue("RspCod", "P0005");Etf.setChildValue("RspMsg", "数据库字段不一致");}}/*** code 466702* 代理商信息删除:伪删除* @param logger*/@Code("466702")@tangdi.interceptor.Logpublic void delPry(ILog logger) {try {String sql = "update PRYPROXY set FLAG='"+ Etf.getChildValue("FLAG") + "' where AGE_MERCH_ID='"+ Etf.getChildValue("AGE_MERCH_ID") + "'";int count = Atc.ExecSql(null, sql);if (count == 0) {Etf.setChildValue("MsgTyp", "N");Etf.setChildValue("RspCod", "00000");Etf.setChildValue("RspMsg", "修改成功");}if (count == 2) {Etf.setChildValue("MsgTyp", "E");Etf.setChildValue("RspCod", "P0003");Etf.setChildValue("RspMsg", "执行本函数后改变数据表记录数为0");return;}} catch (Exception ex) {Etf.setChildValue("MsgTyp", "E");Etf.setChildValue("RspCod", "P0005");Etf.setChildValue("RspMsg", "数据库字段不一致");}}/*** code 466703* 代理商信息修改* @param logger*/@Code("466703")@tangdi.interceptor.Logpublic void updatePry(ILog logger) {try {String sql = "update PRYPROXY set AGE_PWD='"+ Etf.getChildValue("AGE_PWD") + "',AGE_NAME='"+ Etf.getChildValue("AGE_NAME") + "',ADDRESS='"+ Etf.getChildValue("ADDRESS") + "',POST_CODE='"+ Etf.getChildValue("POST_CODE") + "',FLAG='"+ Etf.getChildValue("FLAG") + "',EMAIL='"+ Etf.getChildValue("EMAIL") + "',COMM_PER='"+ Etf.getChildValue("COMM_PER") + "',TELEPHONE='"+ Etf.getChildValue("TELEPHONE") + "',IP_LIMIT='"+ Etf.getChildValue("IP_LIMIT") + "',AGE_DA TE='"+ Etf.getChildValue("AGE_DATE") + "',SET_PER='"+ Etf.getChildValue("SET_PER") + "',LAST_DATE='"+ Etf.getChildValue("LAST_SAFT_DATE") + "',LAST_PER='"+ Etf.getChildValue("LAST_SAFT_PER") + "',DESCRIPTIONS='"+ Etf.getChildValue("DESCRIPTIONS")+ "' where AGE_MERCH_ID='"+ Etf.getChildValue("AGE_MERCH_ID") + "'";int count = Atc.ExecSql(null, sql);if (count == 0) {Etf.setChildValue("MsgTyp", "N");Etf.setChildValue("RspCod", "00000");Etf.setChildValue("RspMsg", "修改成功");}if (count == 2) {Etf.setChildValue("MsgTyp", "E");Etf.setChildValue("RspCod", "P0003");Etf.setChildValue("RspMsg", "执行本函数后改变数据表记录数为0");return;}} catch (Exception ex) {Etf.setChildValue("MsgTyp", "E");Etf.setChildValue("RspCod", "P0005");Etf.setChildValue("RspMsg", "数据库字段不一致");}}/*** code 466704* 代理商信息查询按名称,代理商商户号,启用状态查询* @param logger*/@Code("466704")@tangdi.interceptor.Logpublic void selectPry(ILog logger) {try {StringBuffer sql = new StringBuffer("selectAGE_MERCH_ID,AGE_PWD,AGE_NAME,ADDRESS,POST_CODE,FLAG,EMAIL,COMM_ PER,TELEPHONE,IP_LIMIT,AGE_DATE,SET_PER,LAST_DATE,LAST_PER,DESCRIPTIO NS from PRYPROXY where 1=1");String idname = Etf.getChildValue("AGE_MERCH_ID");String flag = Etf.getChildValue("FLAG");String agename = Etf.getChildValue("AGE_NAME");("agename=%s", agename);("idname=%s", idname);("falg=%s", flag);if (StringUtils.isNotEmpty(idname)) {if (StringUtils.isNotEmpty(flag)) {if (StringUtils.isNotEmpty(agename)) {sql.append(" and AGE_MERCH_ID='" + idname+ "' and AGE_NAME='" + agename + "' and FLAG='"+ flag + "'");} else {sql.append(" and AGE_MERCH_ID='" + idname+ "' and FLAG='" + flag + "'");}} else {if (StringUtils.isNotEmpty(agename)) {sql.append(" and AGE_MERCH_ID='" + idname+ "' and AGE_NAME='" + agename + "'");} else {sql.append(" and AGE_MERCH_ID='" + idname + "'");}}} else {if (StringUtils.isNotEmpty(flag)) {if (StringUtils.isNotEmpty(agename)) {sql = sql.append(" and AGE_NAME='" + agename+ "' and FLAG='" + flag + "'");} else {sql = sql.append(" and FLAG='" + flag + "'");}} else {if (StringUtils.isNotEmpty(agename)) {sql = sql.append(" and AGE_NAME='" + agename + "'");}}}("sql=%s", sql.toString());int result = Atc.QueryInGroup(sql.toString(), null, "10");if (result == 0) {Etf.setChildValue("MsgTyp", "N");Etf.setChildValue("RspCod", "00000");Etf.setChildValue("RspMsg", "查询成功");} else if (result == 2) {Etf.setChildValue("MsgTyp", "E");Etf.setChildValue("RspCod", "P0004");Etf.setChildValue("RspMsg", "无记录");} else {Etf.setChildValue("MsgTyp", "E");Etf.setChildValue("RspCod", "P0001");Etf.setChildValue("RspMsg", "查询失败");}} catch (Exception e) {// TODO Auto-generated catch blocke.printStackTrace();}}/*** code 466705* 代理商信息浏览* @param logger*/@Code("466705")@tangdi.interceptor.Logpublic void findPry(ILog logger) {String sql = "select AGE_MERCH_ID,AGE_PWD,AGE_NAME,ADDRESS,POST_CODE,FLAG,EMAIL,COMM_ PER,TELEPHONE,IP_LIMIT,AGE_DATE,SET_PER,LAST_DATE,LAST_PER,DESCRIPTIO NS from PRYPROXY";try {int result = Atc.QueryInGroup(sql, null, "count");if (result == 0) {Etf.setChildValue("MsgTyp", "N");Etf.setChildValue("RspCod", "00000");Etf.setChildValue("RspMsg", "查询成功");} else if (result == 2) {Etf.setChildValue("MsgTyp", "E");Etf.setChildValue("RspCod", "P0004");Etf.setChildValue("RspMsg", "无记录");} else {Etf.setChildValue("MsgTyp", "E");Etf.setChildValue("RspCod", "P0001");Etf.setChildValue("RspMsg", "查询失败");}List list = Etf.childs("ROOT");for (int i = 0; i < list.size(); i++) {("list的长度=%s", list.size());("name=%s", list.get(i));Element em = (Element) list.get(i);("values[%s]", em.element("AGE_MERCH_ID").getText());}} catch (Exception e) {// TODO Auto-generated catch blocke.printStackTrace();}}}1.3.2注意事项1java代码编译问题由于多人协作开发,在开发的过程中,可能遇到同一应用的多个人在写代码,结果有人的代码编译不通过却上传到服务器端,服务器端重新加载新的字节码文件后找不到交易或者报类找不到错误等,此时应当保证代码处于编译通过状态便可以解决相关问题.2Java主控交易未执行的问题一个主控代码的java文件中必须有一个如下的方法@AroundInvokepublic Object around(InvocationContext ic) throws Exception {return ic.proceed();}否则不会调起相关的交易,可以这样理解,上面代码里的InvocationContextr的实例ic就是你的交易代码的一次封装,如果没有调用ic对象的proceed()方法则代表着交易并未正常执行.3Java主控中引用ETF树节点为空的问题如果当前java文件中定义的类属性,但在交易执行的时候在此属性上执行相关操作却发现节点值为空,这个时候我们得首先确认ETF树上有无此节点,如果ETF树上有此节点,那么我们接下来应当确定此属性上有没有加@Data注解,如果没有此注解,平台也不会将对应的ETF树上的节点值注入些属性中.。