1、java课程设计报告课程设计报告 设计题目: 图书管理系统 学院、系: 电子与信息工程学院 专业班级: 计算机102班 学生姓名: 王喜龙 指导教师: 龙艳彬 成 绩: 2012年-2013年第一学期 第10周摘 要随着网络技术的不断发展,人们的个人信息、网络间的文件传递、电子商务等方面都需要大力的保护,文件加密技术也就随之产生。文件的加密主要是由加密算法实现,加密算法有多种,常见的有RSA、DES、MD5等。但是这些算法虽然原理简单,但具体实现起来却非常繁琐复杂,故而本程序设计对文件的加密使用的是最基础方法。Java语言具有简单、安全、可移植、面向对象、健壮、多线程、体系结构中立、解释执行、
2、高性能、分布式和动态等主要特点。Java是一门很优秀的编程语言,是目前软件设计中极为健壮的编程语言。Java不仅可以用来开发大型的应用程序,而且特别适合于Internet的应用开发。Java确实具备了“一次写成,处处运行”的特点,所以,Java已经成为网络时代最重要的编程语言之一。本程序充分利用Java语言的特点,针对当下社会比较重视的文件加密,设计了本程序。使用本程序可以对txt,word等多种文件进行加密解密,使用便捷实用,功能完善,满足了用户对文件安全性的需求。关键词:JAVA ; 加密; 解密;一、设计目的java程序设计是一门实践性很强的计算机专业基础课程,课程设计是学习完该课程后进
3、行的一次较全面的综合练习。其目的在于通过实践加深学生对java面向对象程序设计的理论、方法和基础知识的理解,掌握使用Java语言进行面向对象设计的基本方法,提高运用面向对象知识分析实际问题、解决实际问题的能力,提高学生的应用能力。课程设计为学生提供了一个既动手又动脑,独立实践的机会,将课本上的理论知识和实际有机的结合起来,锻炼学生的分析解决实际问题的能力。提高学生适应实际,实践编程的能力。与此同时还培养学生在项目开发中团队合作精神、创新意识及能力。二、设计目的与意义目的: 保密性:防止用户的文档或数据被他人随意读取。广泛性:可以对所有形式的文件进行加密解密,如:文档,可执行文件等等。数据完整性
4、:防止数据被更改,加密解密后不改变原数据。 意义: 随着计算机的广泛应用,计算机信息的保密问题显得越来越重要。数据保密变换,或密码技术,是对计算机信息进行保护的最实用最可靠的方法。设计本系统可以对电脑中的任意文件进行加密,保证了计算机中信息的安全性、完整性。通过加密自己想加密的文件,防止他人偷窥,有利的保护了个人隐私。三、设计内容3.1需求分析3.1.1问题描述(1)给定任意一个文本文件,进行加密,生成另一个文件。(2)对加密后的文件还原。3.1.2基本要求采用图形用户界面,建立菜单。3.2总体设计3.2.1 包的描述导入了java.awt; java.awt.event; java.io;
5、javax.swing等包。3.2.2 类的描述Jiami类:继承JFrame类;有构造方法jiami(),方法void actionPerformed(ActionEvent event),方法void jian(),方法void shuruwenjianzhong(),方法void qu(),主方法static void main(String args),方法void baocun()。AA类:实现了Serializable接口,用来对象系列化,把文本内容变为二进制的数据流;有构造方法AA(String a),构造方法AA(),有方法int getShu(),方法void setShu(
6、int shu)。四、概要设计4.1类的定义:public class jiami extends JFrame ; class AA implements Serializable;4.2设计内容 设计这个系统的主要目的是实现对文件的加密与解密,防止用户的标识或数据被读取,防止数据被更改,确保数据发自特定的一方。功能模块:设计的系统中共包括两个部分,加密模块,解密模块。加密模块:通过选择计算机中的需要加密的文件把其原始的数字信息(明文),按照加密算法变换成与明文完全不同的数字信息(密文)的过程。解密模块:是通过对已加密的文件(密文),按照解密算法把其还原成原来的数字信息(明文)的过程。4.3
7、模块流程图4.4各个事件响应模块1确定按钮的响应 queding.addActionListener(new ActionListener() public void actionPerformed(ActionEvent event) jian(); if (xie.isSelected() shuruwenjianzhong(); if (qu.isSelected() qu(); );2 选择模块同上个文件保存模块类似,依旧在选择菜单项“打开”后,查找读入文件,读取字符流,弹出“打开对话框”,从而可实现获取文件。 出口值:被选文件的路径 xuanz.addActionListener(n
8、ew ActionListener() public void actionPerformed(ActionEvent event) JFileChooser fileChooser = new JFileChooser(); fileChooser.setFileSelectionMode(JFileChooser.FILES_AND_DIRECTORIES); if (fileChooser.showOpenDialog( jiami.this) = JFileChooser.APPROVE_OPTION) String fileName = fileChooser.getSelected
9、File().getAbsolutePath(); lujing.setText(fileName); );3 加密与解密模块解密操作模块解密操作其实同加密操作相同,依旧首先打开加密后的文件,使其显示在文本区中,输入加密时的密码,即可得到解密后的文件,再显示到“文件浏览窗口”中。 jiemi.addActionListener(new ActionListener() public void actionPerformed(ActionEvent event) ObjectInputStream input; try input = new ObjectInputStream(new File
10、InputStream(lujing.getText(); int mima = Integer.parseInt(password.getText(); AA ac = (AA) input.readObject(); if (ac.getShu() = mima) area.setText(ac.cc); shuruwenjianzhong(); JOptionPane.showMessageDialog(null, 解密成功!); else JOptionPane.showMessageDialog(null, 错误的密码!); catch (Exception e) area.setT
11、ext(无法解密); );加密操作模块本程序采用简单的加密方法,即把从文本区域获得的文本文件,初始化,存放到一个对象的cc属性中,然后用ObjectOutputStream.writeObject()方法把一个实例的对象以文件的形式保存到文件上,以实现加密的效果。 jiami.addActionListener(new ActionListener() public void actionPerformed(ActionEvent event) AA a = new AA(area.getText(); password.setText(a.shu + ); try ObjectOutputS
12、tream output = new ObjectOutputStream( new FileOutputStream(lujing.getText(); output.writeObject(a); output.flush(); output.close(); qu(); baocun(); catch (Exception e) area.setText(必须选择加密文件保存地址,文件不存在或者无法加密文件,加密文件不能含有换行); );4.5界面设计在图形用户界面,设置了一个面板,并分别设置显示其组件的布局。设置了四个按钮组件,分别为“选择”,“加密”,“解密”和“确定”;设置两个文本
13、框,分别为“路径”和“密码”;创建一个文本区域,用取出和写入文件,这就是整个图形用户界面。 此外,还添加了一个窗口事件windowClosing,可以关闭运行的程序。 显示页面选择所要加密的文本文件 取出加密前文本文件的内容 加密后界面 解密成功后的界面4.6测试与分析(1)不输入路径的情况 不输入路径时页面(2)路径输入错误 路径错误页面(3)密码错误 密码错误页面五 总结与展望在设计过程中,我们必须持着严谨认真的态度和作风。每一个细节都需要高度重视,如果不认真思考决策,就会出现或大或小的错误。若早期的错误隐藏下来,没被发现,就会对后面的工作产生很大的影响,甚至需要从头开始。在设计过程中,我
14、们不断发现错误,不断改正错误,不断领悟,不断获取。从中,我懂得了在今后社会的发展和学习实践过程中,一定要不懈努力,不能遇到问题就想到要退缩,一定要不厌其烦的发现问题所在,然后一一进行解决,只有这样,才能获得最终的胜利。不然,将永远不能获得成功,也不能得到社会及他人对自己的认可!课程设计诚然是一门专业课,让我的专业知识以及专业技能上得到提升,同时又是一门讲道课,一门辩思课,给了我许多道、很多思,给了我莫大的空间。我认为,在此次实践中,不仅培养了独立思考、动手操作的能力,在各种其它能力上也都有了提高。更重要的是,我们学会了很多学习的方法。而这正是以后最实用的知识。要面对社会的挑战,只有不断的学习、
15、实践,再学习、再实践。我想,以后不管有多苦,我们都要学会变苦为乐,从中寻找乐趣。通过此次的课程设计,我明白了思路即出路,有什么不懂不明白的地方要及时请教或上网查询,只要肯花时间去认真钻研,动脑思考,动手实践,就没有弄不懂的知识。六 参考文献Java面向对象程序设计/邱少明主编.北京:清华大学出版社;北京交通大学出版社,2009.8Java安全性编程实例/徐迎晓编著.北京:清华大学出版社;2003.4Java数值计算算法编程/周长发著.北京:电子工业出版社;2007.1附录 源代码import java.awt.*;import java.awt.event.*;import java.io.*
16、;import javax.swing.*;public class jiami extends JFrame JLabel jlabel1, jlabel2;JButton queding, xuanz, jiami, jiemi;JTextField lujing, password;JTextArea area;JRadioButton qu, xie;ButtonGroup fz;File f;int shu1;public jiami() Container c = getContentPane();/容器类对象 JPanel jp1 = new JPanel(); jlabel1
17、= new JLabel(输入路径); lujing = new JTextField(15); xuanz = new JButton(选择); jp1.add(jlabel1); jp1.add(lujing); jp1.add(xuanz); c.add(jp1, BorderLayout.NORTH); area = new JTextArea(); c.add(new JScrollPane(area), BorderLayout.CENTER); xie = new JRadioButton(写入); qu = new JRadioButton(取出); fz = new Butt
18、onGroup(); fz.add(qu); fz.add(xie); jlabel2 = new JLabel(密码); password = new JTextField(15); jiami = new JButton(加密); jiemi = new JButton(解密); JPanel jp4 = new JPanel(); jp4.setLayout(new GridLayout(2, 1, 5, 5); JPanel jp2 = new JPanel(); jp2.add(jlabel2); jp2.add(password); jp2.add(jiami); jp2.add(
19、jiemi); jp4.add(jp2); JPanel jp3 = new JPanel(); queding = new JButton(确定); jp3.add(qu); jp3.add(xie); jp3.add(queding); jp4.add(jp3); c.add(jp4, BorderLayout.SOUTH); queding.addActionListener(new ActionListener() public void actionPerformed(ActionEvent event) jian(); if (xie.isSelected() shuruwenji
20、anzhong(); if (qu.isSelected() qu(); ); xuanz.addActionListener(new ActionListener() public void actionPerformed(ActionEvent event) JFileChooser fileChooser = new JFileChooser(); / 实例化文件选择器 fileChooser.setFileSelectionMode(JFileChooser.FILES_AND_DIRECTORIES); / 设置文件选择模式,此处为文件和目录均可 if (fileChooser.sh
21、owOpenDialog( jiami.this) = JFileChooser.APPROVE_OPTION) / 弹出文件选择器,并判断是否点击了打开按钮 String fileName = fileChooser.getSelectedFile().getAbsolutePath(); / 得到选择文件或目录的绝对路径 lujing.setText(fileName); ); jiemi.addActionListener(new ActionListener() public void actionPerformed(ActionEvent event) ObjectInputStre
22、am input; try input = new ObjectInputStream(new FileInputStream(lujing.getText(); int mima = Integer.parseInt(password.getText(); AA ac = (AA) input.readObject(); if (ac.getShu() = mima) area.setText(ac.cc); shuruwenjianzhong(); JOptionPane.showMessageDialog(null, 解密成功!); else JOptionPane.showMessag
23、eDialog(null, 错误的密码!); catch (Exception e) / e.printStackTrace(); area.setText(无法解密); ); jiami.addActionListener(new ActionListener() public void actionPerformed(ActionEvent event) AA a = new AA(area.getText(); password.setText(a.shu + ); try ObjectOutputStream output = new ObjectOutputStream( new F
24、ileOutputStream(lujing.getText(); output.writeObject(a); output.flush(); output.close(); qu(); baocun(); catch (Exception e) / e.printStackTrace(); area.setText(必须选择加密文件保存地址,文件不存在或者无法加密文件,加密文件不能含有换行); ); setSize(380, 350); setVisible(true);public void jian() f = new File(lujing.getText();/读取读取指定路径 t
25、ry f.createNewFile();/用文件对象创建一个文件 catch (IOException e) JOptionPane.showMessageDialog(null, 路径错误!); public void shuruwenjianzhong() try FileOutputStream out = new FileOutputStream(f); byte buf = area.getText().getBytes(); try out.write(buf); out.flush(); out.close(); catch (IOException e) / e.printS
26、tackTrace(); catch (FileNotFoundException e) / e.printStackTrace(); public void qu() try FileInputStream in = new FileInputStream(f); int a = (int) f.length(); byte buf = new bytea;/创建一个数组存储文件内的内容 try int len = in.read(buf); if (len != -1) area.setText(new String(buf, 0, len); else JOptionPane.showM
27、essageDialog(null, 文件内容为空!); catch (IOException e) / e.printStackTrace(); catch (FileNotFoundException e) / e.printStackTrace(); public static void main(String arge) jiami s = new jiami(); s.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);public void baocun() AA a = new AA(); shu1 = a.getShu(); a.shu
28、 = shu1;class AA implements Serializable /一个类的接口是对象能够被序列化String cc;public int shu;public AA() public int getShu() return shu;public void setShu(int shu) this.shu = shu;public AA(String a) cc = a; int zu = 1, 2, 3, 4, 5, 6, 7, 8, 9 ; for (int i = 0; i 1000; i+) /做的是整数加法运算所以是一千个数 int second = (int) (Math.random() * 9); shu += zusecond;
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1