ajva课程设计加密与解密--大学毕设论文.doc
JAVA课程设计报告题 目加密与解密院 系班 级学 号姓 名13目录1设计分析511 设计目的51.2设计题目51.3设计任务52 设计内容62.1需求分析62.1.1问题描述62.1.2基本要求62.2程序流程73程序相关问题83.1程序解决的核心问题83.2程序源代码83.3程序执行界面124 总结与展望145参考文献151设计分析11 设计目的面向对象程序设计是一门实践性很强的计算机专业基础课程,课程设计是学习完该课程后进行的一次较全面的综合练习。其目的在于通过实践加深学生对面向对象程序设计的理论、方法和基础知识的理解,掌握使用Java语言进行面向对象设计的基本方法,提高运用面向对象知识分析实际问题、解决实际问题的能力,提高学生的应用能力。1.2设计题目采用图形用户界面,建立菜单。(1)给定任意一个文本文件,进行加密,生成另一个文件。(2)对加密后的文件还原。1.3设计任务 通过实践加深学生对面向对象程序设计的理论、方法和基础知识的理解,掌握使用java语言进行面向对象程序设计的基本方法,提高运用面向对象知识分析实际问题、解决实际问题的能力,提高学生的应用能力。2 设计内容 2.1需求分析2.1.1问题描述 通过编程,实现“加密与解密”功能。给定任意一个文本文件,进行加密,生成另一个文件。对加密后的文件还原。2.1.2基本要求采用图形用户界面,建立菜单 (1)给定任意一个文本文件,进行加密,生成另一个文件。(2)对加密后的文件还原。 2.2程序流程 开始点击浏览读取文件输入密钥密钥非空YN加/解密是否存在此文件的加/解密文件N加/解密成功NY图1 程序流程3程序相关问题3.1程序解决的核心问题利用文件的输入输出流,按字符读取文件内容,把读取的内容,注意进行处理后,在重新写入新文件,实现文件加密。用到的类:FileRead,FileWrite.添加窗体并布置面板,中间用到了,弹出对话框的事件。设计的类有,Frame,Panel,JOptionPane。文件选择器的载入。通过为按钮添加事件监听,来实现文件选择器的触发操作。用到的类为:JFileChooser。自定义异常的种类,实现异常的灵活应用。适当的调整程序的终止点或者循环点。3.2程序源代码import java.awt.*;import java.awt.event.*;import java.io.*;import javax.swing.*;class Myframe extends Frame implements ActionListener FileDialog filedialog_save, filedialog_load;Button button1, button2;Label label;MenuBar bar;Menu menu;MenuItem itemOpen, itemSave;TextArea texta;Myframe(String s) / 创建对话框super(s);texta = new TextArea(38, 160);button1 = new Button("加密");button2 = new Button("解密");menu = new Menu("文件");itemOpen = new MenuItem("打开");itemSave = new MenuItem("保存");label = new Label("文件浏览窗口");itemOpen.addActionListener(this);itemSave.addActionListener(this);button1.addActionListener(this);button2.addActionListener(this);filedialog_save = new FileDialog(this, "保存文件对话框", FileDialog.SAVE);filedialog_load = new FileDialog(this, "打开文件对话框", FileDialog.LOAD);filedialog_save.addWindowListener(new WindowAdapter() public void windowClosing(WindowEvent e) filedialog_save.setVisible(false););filedialog_load.addWindowListener(new WindowAdapter() public void windowClosing(WindowEvent e) filedialog_load.setVisible(false););Box box1 = Box.createHorizontalBox(); / 创建一个从左到右显示其组件的 box1;Box box2 = Box.createVerticalBox(); / 创建一个从上到下显示其组件的 box2;Box box3 = Box.createVerticalBox();Box boxbase = Box.createVerticalBox();Panel panel1 = new Panel();Panel panel2 = new Panel();setMenuBar(bar = new MenuBar();bar.add(menu);menu.add(itemOpen);menu.add(itemSave);panel1.add(button1);panel1.add(button2);box1.add(panel1);box2.add(label);panel2.add(texta);box3.add(panel2);boxbase.add(box1);boxbase.add(box2);boxbase.add(box3);add(boxbase);setLayout(new FlowLayout();setBounds(100, 0, 1200, 750);setVisible(true);addWindowListener(new WindowAdapter() public void windowClosing(WindowEvent e) System.exit(0);); / “关闭”窗口事件;public void actionPerformed(ActionEvent e) / 查找读入文件if (e.getSource() = itemOpen) filedialog_load.setVisible(true);texta.setText(null);String s;if (filedialog_load.getFile() != null) try File file = new File(filedialog_load.getDirectory(),filedialog_load.getFile();FileReader file_reader = new FileReader(file);/ 读取字符流BufferedReader in = new BufferedReader(file_reader);while (s = in.readLine() != null)texta.append(s + 'n');in.close();file_reader.close(); catch (IOException e1) if (e.getSource() = itemSave) / 查找写入的文件filedialog_save.setVisible(true);if (filedialog_save.getFile() != null) try File file = new File(filedialog_save.getDirectory(),filedialog_save.getFile();FileWriter tofile = new FileWriter(file); / 读取字符流BufferedWriter out = new BufferedWriter(tofile);out.write(texta.getText(), 0, (texta.getText().length();out.close();tofile.close(); catch (IOException e2) if (e.getSource() = button1) char a = texta.getText().toCharArray(); / 把text中获得的文本,进行初始化,与原字符串长度相等,并将该字符串对象的全部字符复制到该数组a中texta.setText(null);int n;char secret = ' 'for (int i = 0; i < a.length; i+) char c = (char) (secret ai); / 进行异或运算texta.append("" + c);if (e.getSource() = button2) char a = texta.getText().toCharArray();texta.setText(null);int n;char secret = ' 'for (int i = 0; i < a.length; i+) char c = (char) (secret ai); / 再次异或运算,即还原texta.append("" + c);public class E1 public static void main(String args) Myframe frame = new Myframe("加密与解密");3.3程序执行界面图 2 进入程序的主页面图2 输入内容图3 加密之后图4解密之后4 总结与展望通过这次课程设计,我学到了很多。课本的内容虽说是基础,是一切的根本,但是学习基本内容和应用编程,简直就是两个天地。一些编程的思想不是靠基础知识就能学到的,比如文件加密,开始接触到这个题目,第一反应就是,我没学过关于文件加密的内容啊,该怎么办啊。但是当我听了老师的提醒后,才恍然醒悟,加密不一定是你没学的知识,也许它就是用你已经有的知识的变形和应用。所以,知识的应用是灵活多态的。有些知识虽然我们懂了,但是真正去应用时,却会捉襟见肘。比如一个类的程序段,什么时候该用内部类什么时候该用外部类,我们怎么去权衡。什么样的变量可以在哪个部分去调用,都需要我们在实践应用中去加强认识。不只是通过死记硬背就能灵活应用的。知识的海洋是无限大的,我们手头中有的资源也是无穷无尽的每次编程,不可能一点问题都没有。总有这样和那样的难题,出现在我们思维的盲区。我们要充分利用好自己的帮助文档和网上的资源,不要太执着于自己的知识层面,出去荡荡资料,会发现原来这个问题如此简单就可以解决。这次课程设计后,我的学习目标和手段,有了新的改观,不在整天肯书本了,我要用自己学到的知识应用到生活中去编程,去实践,从而磨练自己的编程思维和手法。多看网上的使用编程实例,练习自己的编程思维,学习新方法新思路。5参考文献1 屈辉立,陈可明,石武信.JSP网站编程教程M.第1版, 北京:北京希望电子出版社,2005 2 白勇.用B/S模式构建在线考试系统J,重庆电力高等专科学校学报,2003,10(4): 100130. 3 Jiang Guo,Yuehong Liao,Behzad Parviz.A Survey of J2EE Application Performance Management SystemsJ,Proceedings of the IEEE International Conference on Web Services (ICWS'04),2004.6(5):1732.4 VB数据库管理范例: