文档库 最新最全的文档下载
当前位置:文档库 › 源代码转html课程设计报告

源代码转html课程设计报告

源代码转html课程设计报告
源代码转html课程设计报告

华南农业大学

课程论文 ( 设计 )

课程名称面向对象程序设计

论文题目源代码自动转换程序

指导老师肖磊

所在学院信息学院

专业年级2007级计算机科学与技术(2)班提交日期2008年11月20日

华南农业大学计算机科学与技术

《面向对象程序设计》课程设计评分表

题目源代码自动转换程序

专业班级2012级计算机科学与技术(2)班提交日期2014-05-18

小组成员学号姓名工作量% 成绩

(指导老师填写)组长201230740209 何志豪50%

组员201230740224 叶炜杰30%

组员201230740219 孙常鹏20%

小组评分表

评分项目分数1.实现情况(15):完成课程设计要求的情况

2.系统分析(10):对系统的理解及分析的深入程度。

3.系统设计(20):总体设计、具体设计、数据结构设计等。

4.程序设计(30):面向对象程序设计方法与编程工具掌握水

平。

5.界面设计(15):界面美观程度、操作方式友好程度等。

6.论文撰写(10):论文撰写的规范性、合理性等等。

小组总成绩:

教师签名日期

一、系统分析

1.1问题描述

在写Blog的时候,常常需要粘贴Java及其它源代码,但是从IDE中复制过去的源码

为纯文本格式的。IDE中的高亮语法语法全部丢失,贴出去全成黑白的了。看起来很难看,也不易于阅读。源程序代码是纯文本文件,本课程设计的目标是编写一个应用程序可以将源程序文件转换为HTML的网页文件。

1.2系统功能分析

1.能够处理的源程序包括:Java源程序(扩展名.java)、C源程序(扩展名.h和.c)。鼓励能处理其他源程序代码。

2.提供一个基于Java Swing实现的GUI界面,类似Windows的资源管理器。在该界面中选择一个或多个源程序文件进行转换。

3.转换时要求按语法分色。因此需要该对转换进行设置,如:目标文件名、字体、关键字颜色等。

4.得到的HTML文件,用浏览器查看如下图所示。另外要求每行有行号。

开发平台及工具介绍:

二、系统设计

1.1系统总体结构设计

主要从语法,转换,界面三方面进行设计。

关于语法分色:

1. 为需要的处理源程序的程序设计语言定义一个配置文件,在配置文件中需要包括:

(1)该语言的关键字

(2)配色方案,如:关键字字体的颜色、大小;标识符的字体颜色、大小,......

配置文件的格式可以是:XML或Java的properties文件

2.处理时,读取配置文件和源程序文件,创建文件解剖器实现语言关键字的分析,主要用IO包与UTIL包中的“java.io.BufferedReader;java.io.File;java.io.FileReader; java.io.IOException;java.io.InputStream;java.io.InputStreamReader;java.io.Reade r;java.io.StringReader;https://www.wendangku.net/doc/7512700224.html,.URL;java.util.Hashtable;java.util.StringTokeniz er”对源文件进行解剖并与配置关键字的文件进行比对,如果存在则进行高亮操作。

3. 首先要理解HTML文件和源程序文件都是文本文件,因此使用Java的文本输入流读入,文本输出流输出。中间因为要分词,所以可能用到:Scanner、Buffer、正则表达式等。

4.输出时:首先生成如下的HTML文件结构

.......

......

格式化后的文本放置在BODY部分。

1.2界面设计:实现用Java Swing构造的GUI界面,进行图形化操作与显示。

1.综合利用各种对象如JMenuBar、JMenu、JMenuItem、JButton、JPanel、JComponent、JComboBox、JLabel、JTextField、BorderLayout、Connection、JTextArea进行界面的规划布局;

解决办法:使用BorderLayout中的null 的布局方式,对每个元件进行大小和程序界面的相对坐标定位,如:实例名称.setBounds(x,y,a,b)。

2.对界面中必要的元件实例编写事件驱动如JButton、JComboBox等;

解决办法:在该必要的元件调用方法(get + “元件名称”)中直接添加ActionListener(监

听器)方法;

即:

实例.addActionListener(new ActionListener() {

public void actionPerformed(ActionEvent e) { //事件触发执行代码

}

3.实现用Java Swing构造的GUI界面,进行图形化操作与显示,通过按钮设置事件驱动,还有监听器对象。程序提供界面能够读取文件的信息,采用简单人性化的操作界面图形

窗口的生成使用各种的方法,调用方便。

4.用JFileChooser创建文件读取与保存对话框。其中的文件选择器的设计较为重要。

JFileChooser chooser = new JFileChooser(currentDirectory);

//JFileChooser chooser2 = new JFileChooser();

chooser.setDialogTitle("Open Source Code");

chooser.setFileFilter(new FileFilter() {

public String getDescription() {

return "*.java && *.c && *.h && *.cpp && *.cs";

}

public boolean accept(File f) {

return f.isDirectory() || f.getName().toLowerCase().endsWith(".java")||

1.3系统各个类及类之间关系设计

1.4数据存储的设计(文件等) 基本数据存储说明:

支持代码格式:包括java ,c ,c++,c#等四种源代码文件。(原理上可以更多) 输入:以*.java ,*.c ,*.h ,*.cs 文件存储的源代码 输出:文件格式为*.html

语言关键字:利用hashmap 分类型存储关键字。

三、系统实现

系统运行事务过程可以用以下关系表示

}

主界面程序代码片段(主要是面板与面板之间,面板与组件之间的嵌套,监听器的实现):

public class Java2HtmlApplication {

private final JFrame frame;

private final JButton bExit;

private final Java2HtmlOptionsPanel optionsPanel = new Java2HtmlOptionsPanel();

public Java2HtmlApplication() {

final JTabbedPane tabbedPane = new JTabbedPane();

tabbedPane.addTab("File Conversion", new FileConversionPanel(optionsPanel).getContent()); tabbedPane.addTab("Direct Text Conversion", new DirectTextConversionPanel( optionsPanel,

程序主界面

输入设定 配置文件选取

源代码文件选取 代码转换 输出html 文件 方框输出 关键字高亮 与着色 行号输出

public void setStatistics(JavaSourceStatistic statistic) {

//nothing to do

}

}).getContent());

bExit = new JButton("Exit");

bExit.addActionListener(new ActionListener() {

public void actionPerformed(ActionEvent evt) {

System.exit(0);

}

});

final JPanel southPanel = new JPanel(new FlowLayout(FlowLayout.RIGHT));

southPanel.add(bExit);

final JPanel pOptions = GuiTools.createBorderedPanel("Options");

pOptions.setLayout(new BorderLayout());

pOptions.add(optionsPanel.getContent(), BorderLayout.CENTER);

JPanel p = new JPanel(new BorderLayout());

p.add(pOptions, BorderLayout.NORTH);

p.add(Box.createVerticalGlue(), BorderLayout.CENTER);

frame = new JFrame(Version.getJava2HtmlConverterTitle());

frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

frame.getContentPane().setLayout(new BorderLayout(4, 4));

frame.getContentPane().add(p, BorderLayout.EAST);

frame.getContentPane().add(tabbedPane, BorderLayout.CENTER);

frame.getContentPane().add(southPanel, BorderLayout.SOUTH);

}

……

……

……

文件读取代码片段(用FileReader读取源文件,JFileChooser创建读取文件对话框,文件选择器的应用较为关键):

JFileChooser chooser = new JFileChooser(currentDirectory);

//JFileChooser chooser2 = new JFileChooser();

chooser.setDialogTitle("Open Source Code");

chooser.setFileFilter(new FileFilter() {

public String getDescription() {

return "*.java && *.c && *.h && *.cpp && *.cs";

}

public boolean accept(File f) {

return f.isDirectory() || f.getName().toLowerCase().endsWith(".java")||

f.getName().toLowerCase().endsWith(".c")||

f.getName().toLowerCase().endsWith(".h")

|| f.getName().toLowerCase().endsWith(".cpp")

}

});

int result = chooser.showOpenDialog(content);

if (result != JFileChooser.APPROVE_OPTION) {

return;

}

File selectedFile = chooser.getSelectedFile();

currentDirectory = selectedFile.getParentFile();

fileListModel.addElement(selectedFile);

}

……

……

代码转换代码片段(主要是用自编的文件解剖类把源文件进行解剖,然后与存在hashmap 中的关键字进行比对,存在则对关键字进行高亮与着色):

……

……

FileInputStream file;

StreamTokenizer st;

String htmlFile = args[1];

boolean isVar=false;

putHtml puthtml = new putHtml();

boolean firstOfComment=false;

int b = 8;

int a = 10 / b;

try

{

file = new FileInputStream(args[0]);

Reader r = new BufferedReader(new InputStreamReader(file));

st = new StreamTokenizer(r);

st.eolIsSignificant(true);

st.ordinaryChar('\"');

st.ordinaryChar('/');

st.ordinaryChar('\\');

st.ordinaryChar('.');

st.ordinaryChar('\'');

prHtml(START);

prHead(START);

prTitle(args[0]);

prHead(END);

prBody(START);

while(st.nextToken() != StreamTokenizer.TT_EOF)

{

switch(st.ttype)

{

case StreamTokenizer.TT_WORD:

if(firstOfComment)

{

}

firstOfComment=false;

if(primitives.contains(st.sval))

{

prPrimitive(st.sval);

isVar=true;

backslash=false;

break;

}

if(flow.contains(st.sval))

{

isVar=false;

……

……

……

Html文件输出代码片段(用File创建指定目录文件,用JFileChooser创建保存文件对话框,用FileReader进行文件输出):

JFileChooser chooser2 = new JFileChooser();

chooser2.setApproveButtonText("Save");

chooser2.setDialogTitle("Save File");

int result2=chooser2.showSaveDialog(content);

if (result2 == JFileChooser.APPROVE_OPTION) {

File file2 = null;

file2 = chooser2.getCurrentDirectory();

String path =chooser2.getSelectedFile().toString(); ;//+file2.toString()+"\\"

file2 = new File(path);

try{

file2.createNewFile();

}

catch(IOException ex){

ex.printStackTrace();

}

try{

FileWriter output=new FileWriter(path);

output.write(writer.getBuffer().toString());

output.close();

}

catch(IOException ex){

ex.printStackTrace();

}

四、系统测试

模块测试:本程序有两个模块,一个是直接输出模块,另一个是文件输出模块。

直接输出模块测试:

1:功能介绍

2:测试

目前程序支持四种源代码转换,有java,c,c++,c#。我们先测试java的,其他的一样。我们先打开一个名为test1的java源文件,并把其内容复制到“源代码粘贴区”。

代码会进行自动转换,转换完成后代码会出现在“html代码输出区”。

我们把转换后的html代码输入到一个我们创建的名为test1.html的文件中。

打开test1.html文件,查看效果如何。

看来效果图非常美观,故此模块没有问题,本模块测试完毕。

文件输出模块测试:

1.功能图示:

我们先打开一个名为test2.h的C源代码文件

点convert后出现保存对话框

然后程序弹出信息统计窗口

我们打开文档看看名为test2.html的文件是否存在

存在则打开看效果

效果图很漂亮,此模块没有问题,本模块测试结束。

系统测试:系统测试则为测试各模块的功能是否正确到位及模块与模块之间的联系是否正常,由于本程序的模块基本独立及由上面的描述可知模块上没有问题,故省略之。

五、系统运行界面

1.

六、总结。

组员1:吴博诚

承担工作:代码转换思想,数据存储的设计,关键字代码方法。

体会:第一次看到这个源代码自动转换程序时,心里还挺紧张的,因为觉得这似乎对于我来说太难了,不敢想像自己能不能有这个能力。但事实证明,只要你有心,只要你用心去学习,用心去思考,还是可以做出一点成绩来。现在,看着自己把这个源代码自动转换程序做出来了,虽然做的很简陋,说明自己在算法和实现的方面还做的不好,仍需要继续努力,还是很开心的呢。对于java的基础知识有了进一步的了解。在编写过程中,遇到了好多困难,比如如何编写代码装换的代码还有语言关键字的设置,如何去实现数据存储的操作。其间,和组队的同学们的交流,发现个人的力量挺薄弱的,想的算法也不是很好,交流后才发现原来算法是很深奥的。在编写中,让我认识到自己所学的java知识有多浅,还有很多需要我去研究和学习,还有觉得自己在学习过程中培养了自己的动手能力,可以更好地接触java。开始的时候,推荐实现GUI,但本人对于这个并不是很懂,所以更多留意的是如何实现源代码自动转换程序的实际功能,对于每个语言,关键字和配置文件,输入html文件三层之间的关系,开始时被如何分配这关系的分类搞的好迷惑,难以入手。后来更因为关键字和语言等联系关系,如何处理代码,如何分析而陷入困境。对于这个源代码自动转换程序,对于我个人的理解,贯穿这系统的主线应该是语言关键字的配置文件和转换高亮在这个系统中的主要成员,文件读取和存储作为属性来支配,这样主线就会很明显,也方便理清编程思维。从这个程序的接受到分析,我主要是从大到少,一步一步拆分。此次程序设计让我受益匪浅!}

组员2:何华

承担工作:行号输出,代码加亮设计过程,程序调试,实例测试。

体会:刚开始着手做这个JA V A程序时,思绪很混乱,根本无从下手。我们组的三个成员就

理清了思路,画出了流程图,开始分工合作。虽然学习JA V A有一个学期了,但是要我做这么一个全新的东西还是有点难度的。幸亏做上次的课程设计教会了我如何使用API,这一次遇到没学过的类时,我都是通过API查找并学习那些类的调用实例。在这次的实验中,我深刻的发现自己的算法能力十分需要加强,不少算法思想和实现都需要去图书馆查找资料。特别是代码加亮的算法设计和实现。我看了很多设计思想还是一知半解,于是就向同样做这一实验的同学请教,才顺利完成了代码的编写。一边学习,一边编程,过程虽然有点痛苦,却让我受益匪浅。通过这一次实验,我再一次认识到团队的力量是强大的,一个人的努力是完不成大项目的。遇到问题,与别人交流是最直接最有效的方法,有交流才会获得新的思想。我的编程能力也在这次实验中得到了进步,对算法的理解能力也得到一定的提升,更主要的是我对自己充满了信心,相信以后会作出更完善的程序。

组长:谭瑞翔

承担工作:本程序的全面修改与调试及课程设计报告的修改,润色及排版。

体会:在刚开始接到课程题目列表时,本人一眼闪过,接着眼光停留在“源代码转html”这个题目,当时本人的第一感觉是“此乃小case”,于是拍拍胸口,十分豪气地对学习委员说:“我就选它了!”以本人的懒人性格,当然是毫不犹豫上百度搜搜有那位“前辈”曾做过此类研究工作,好让小的“学习学习”。无奈百度出来的结果实在让本人“好伤心”,竟没有完整的源代码!所幸找到了基本的原理分析说明。乍一看,本人顿时觉得头晕晕的,貌似是“大工程”啊!后悔是没有任何意义的,只好硬着头皮上了。几经波折,按原理分析说明加上自已的理解做出一个小程序,但出来的效果图实在让本人抓狂,实在是“不堪入目”啊,只好上网看看有没有更佳的设计方案。好在天无绝人之路,本人在一次偶然间在开源社区https://www.wendangku.net/doc/7512700224.html,发现一个现成的开源程序java2html converter能基本上满足课程设计要求,而且出来的效果图十分之美。只是这个程序仅支持java源代码的转换,只

开源程序,可供人按实际需要进行修改(不算抄吧?开源哦?),但基于对原作者劳动成果及版权的尊重,本人尽量在保持程序原有面貌的同时,添加了文件输出及增加了对c,c++,c#的支持,并没有对原程序名,作者信息等涉及版权的地方进行任何改动。在对程序源代码的研究当中,本人被原作者严谨的态度,细腻的作风所折服。看作者的源代码,感觉到的是一种美,是一种艺术上的享受。作者把功能模块分得十分细致,功能模块之间条理清晰,既有联系又相对独立,让人很容易看懂程序的工作原理。至此,本人感到自己与原作者之间巨大的差距,心中难免有几分失落,但一想到写程序原来并不烦燥,也是能写出美,也是能写出艺术的,心中的激情又难以平伏,不时升起一种渴望向作者学习的热情。经几天的研究,本人由于对此程序有了一定的理解,所以很顺利地完成了修改工作,不过还是有一个小小的遗憾,那就是对程序不支持中文注释的问题尚没有解决方案,本来网上有一种不完整的解决方案,但方案涉及到复杂的编码原理,本人目前水平有限,所以是有心无力啊。

备注:

原程序名:java2html converter

原作者:Markus Gebhard(美国人)

下载于:http:\\https://www.wendangku.net/doc/7512700224.html,

本人会把程序的说明文档及UML类图和源代码及报告等一起打包发给肖老师您的了。

HTML代码大全

HTML(HyperText Mark-up Language)即超文本标记语言或超文本链接标示语言,是目前网络上应用最为广泛的语言,也是构成网页文档的主要语言。HTML文本是由HTML命令组成的描述性文本,HTML命令可以说明文字、图形、动画、声音、表格、链接等。HTML的结构包括头部(Head)、主体(Body)两大部分,其中头部描述浏览器所需的信息,而主体则包含所要说明的具体内容。 编辑本段HTML代码大全 1.结构性定义 文件类型 (放在档案的开头与结尾) 文件主题 (必须放在「文头」区块内) 文头 (描述性资料,像是「主题」) 文体 (文件本体) (由浏览器控制的显示风格) 标题 (从1到6,有六层选择) 标题的对齐 区分

区分的对齐
引文区块
(通常会内缩) 强调 (通常会以斜体显示) 特别强调 (通常会以加粗显示) 引文 (通常会以斜体显示) 码 (显示原始码之用) 样本 键盘输入 变数 定义 (有些浏览器不提供) 地址
大字 小字 与外观相关的标签(作者自订的表现方式) 加粗 斜体 底线 (尚有些浏览器不提供) 删除线 (尚有些浏览器不提供) 下标 上标 打字机体 (用单空格字型显示) 预定格式
 (保留文件中空格的大小) 预定格式的宽度 
(以字元计算) 向中看齐 
(文字与图片都可以) 闪耀 (有史以来最被嘲弄的标签) 字体大小 (从1到7) 改变字体大小

网页设计试题及html代码

2.2.3 字型设置标记 功能:设置文字的风格,如黑体、斜体、带下划线等,这是一组标记,它们可以单独使用,也可以混合使用产生复合修饰效果。常用的标记有以下一些: :文字以粗体显示。 :文字显示为斜体。 :显示下划线。 :删除线。 :使文字大小相对于前面的文字增大一级。 :使文字大小相对于前面的文字减小一级。 :使文字成为前一个字符的上标。 :使文字成为前一个字符的下标。 :使文字显示为闪烁效果。 :以等宽体显示西文字符。 :输出引用方式的字体,通常是斜体。 :强调文字,通常用斜体加黑体。 :特别强调的文字,通常也是斜体加黑体。 注:有些标记的效果必须在动态环境下才能显示,例如 标记。 【例2-4】字型设置标记的应用。 例如单标记


表示在文档当前位置画一条水平线,一般是从窗口中当前行的最左端一直画到最右端,它可以带这么一些属性:
。 功能:设置网页中普通文字的显示效果。 格式:文字。 格式:标题内容。 属性:n 表示标题字号的级别,可以是1~6之间的任意整数,数字越小,字号越大。 段落标记 功能:设置文章段落的开始和结束。浏览器在解释HTML文档时,会自动忽略文档中的回车、空格以及其他一些符号,所以在文档中输入回车,并不意味着在浏览器内将看到一个不同的段落,当需要在网页中插入新的段落时,可以使用段落标记,它可以将标记后面的内容另起一段。格式:

。 强制换行标记 功能:另起一行显示文字。 格式:
插入水平线标记 功能:在页面上画横线,可用于页面上内容的分割。 格式:
1.无序列表 功能:设置无序列表。 格式: