java课程设计报告.docx

上传人:b****6 文档编号:7836949 上传时间:2023-01-26 格式:DOCX 页数:19 大小:373.52KB
下载 相关 举报
java课程设计报告.docx_第1页
第1页 / 共19页
java课程设计报告.docx_第2页
第2页 / 共19页
java课程设计报告.docx_第3页
第3页 / 共19页
java课程设计报告.docx_第4页
第4页 / 共19页
java课程设计报告.docx_第5页
第5页 / 共19页
点击查看更多>>
下载资源
资源描述

java课程设计报告.docx

《java课程设计报告.docx》由会员分享,可在线阅读,更多相关《java课程设计报告.docx(19页珍藏版)》请在冰豆网上搜索。

java课程设计报告.docx

java课程设计报告

课程设计报告

 

设计题目:

图书管理系统

学院、系:

电子与信息工程学院

专业班级:

计算机102班

学生姓名:

王喜龙

指导教师:

龙艳彬

成绩:

2012年-2013年第一学期第10周

 

摘要

随着网络技术的不断发展,人们的个人信息、网络间的文件传递、电子商务等方面都需要大力的保护,文件加密技术也就随之产生。

文件的加密主要是由加密算法实现,加密算法有多种,常见的有RSA、DES、MD5等。

但是这些算法虽然原理简单,但具体实现起来却非常繁琐复杂,故而本程序设计对文件的加密使用的是最基础方法。

Java语言具有简单、安全、可移植、面向对象、健壮、多线程、体系结构中立、解释执行、高性能、分布式和动态等主要特点。

Java是一门很优秀的编程语言,是目前软件设计中极为健壮的编程语言。

Java不仅可以用来开发大型的应用程序,而且特别适合于Internet的应用开发。

Java确实具备了“一次写成,处处运行”的特点,所以,Java已经成为网络时代最重要的编程语言之一。

本程序充分利用Java语言的特点,针对当下社会比较重视的文件加密,设计了本程序。

使用本程序可以对txt,word等多种文件进行加密解密,使用便捷实用,功能完善,满足了用户对文件安全性的需求。

关键词:

JAVA;加密;解密;

 

一、设计目的

《java程序设计》是一门实践性很强的计算机专业基础课程,课程设计是学习完该课程后进行的一次较全面的综合练习。

其目的在于通过实践加深学生对java面向对象程序设计的理论、方法和基础知识的理解,掌握使用Java语言进行面向对象设计的基本方法,提高运用面向对象知识分析实际问题、解决实际问题的能力,提高学生的应用能力。

课程设计为学生提供了一个既动手又动脑,独立实践的机会,将课本上的理论知识和实际有机的结合起来,锻炼学生的分析解决实际问题的能力。

提高学生适应实际,实践编程的能力。

与此同时还培养学生在项目开发中团队合作精神、创新意识及能力。

二、设计目的与意义

目的:

保密性:

防止用户的文档或数据被他人随意读取。

广泛性:

可以对所有形式的文件进行加密解密,如:

文档,可执行文件等等。

数据完整性:

防止数据被更改,加密解密后不改变原数据。

意义:

随着计算机的广泛应用,计算机信息的保密问题显得越来越重要。

数据保密变换,或密码技术,是对计算机信息进行保护的最实用最可靠的方法。

设计本系统可以对电脑中的任意文件进行加密,保证了计算机中信息的安全性、完整性。

通过加密自己想加密的文件,防止他人偷窥,有利的保护了个人隐私。

三、设计内容

3.1需求分析

3.1.1问题描述

(1)给定任意一个文本文件,进行加密,生成另一个文件。

(2)对加密后的文件还原。

3.1.2基本要求

采用图形用户界面,建立菜单。

3.2总体设计

3.2.1包的描述

导入了java.awt;java.awt.event;java.io;javax.swing等包。

3.2.2类的描述

Jiami类:

继承JFrame类;有构造方法jiami(),方法voidactionPerformed(ActionEventevent),方法voidjian(),方法voidshuruwenjianzhong(),方法voidqu(),主方法staticvoidmain(Stringargs[]),方法voidbaocun()。

AA类:

实现了Serializable接口,用来对象系列化,把文本内容变为二进制的数据流;有构造方法AA(Stringa),构造方法AA(),有方法intgetShu(),方法voidsetShu(intshu)。

 

四、概要设计

4.1 类的定义:

publicclassjiamiextendsJFrame;

classAAimplementsSerializable;

4.2设计内容

设计这个系统的主要目的是实现对文件的加密与解密,防止用户的标识或数据被读取,防止数据被更改,确保数据发自特定的一方。

功能模块:

设计的系统中共包括两个部分,加密模块,解密模块。

加密模块:

通过选择计算机中的需要加密的文件把其原始的数字信息(明文),按照加密算法变换成与明文完全不同的数字信息(密文)的过程。

解密模块:

是通过对已加密的文件(密文),按照解密算法把其还原成原来的数字信息(明文)的过程。

4.3模块流程图

4.4各个事件响应模块

1确定按钮的响应

queding.addActionListener(newActionListener(){

publicvoidactionPerformed(ActionEventevent){

jian();

if(xie.isSelected())

shuruwenjianzhong();

if(qu.isSelected())

qu();

}

});

2选择模块

同上个文件保存模块类似,依旧在选择菜单项“打开”后,查找读入文件,读取字符流,弹出“打开对话框”,从而可实现获取文件。

出口值:

被选文件的路径

xuanz.addActionListener(newActionListener(){

publicvoidactionPerformed(ActionEventevent){

JFileChooserfileChooser=newJFileChooser();fileChooser.setFileSelectionMode(JFileChooser.FILES_AND_DIRECTORIES);

if(fileChooser.showOpenDialog(jiami.this)==JFileChooser.APPROVE_OPTION){

StringfileName=fileChooser.getSelectedFile().getAbsolutePath();lujing.setText(fileName);

}

}

});

3加密与解密模块

解密操作模块

解密操作其实同加密操作相同,依旧首先打开加密后的文件,使其显示在文本区中,输入加密时的密码,即可得到解密后的文件,再显示到“文件浏览窗口”中。

jiemi.addActionListener(newActionListener(){

publicvoidactionPerformed(ActionEventevent){

ObjectInputStreaminput;

try{

input=newObjectInputStream(newFileInputStream(lujing.getText()));

intmima=Integer.parseInt(password.getText());

AAac=(AA)input.readObject();

if(ac.getShu()==mima){

area.setText(ac.cc);

shuruwenjianzhong();

JOptionPane.showMessageDialog(null,"解密成功!

");

}

else{

JOptionPane.showMessageDialog(null,"错误的密码!

");

}

}catch(Exceptione){

area.setText("无法解密");

}

}

});

加密操作模块

本程序采用简单的加密方法,即把从文本区域获得的文本文件,初始化,存放到一个对象的cc属性中,然后用ObjectOutputStream.writeObject()方法把一个实例的对象以文件的形式保存到文件上,以实现加密的效果。

jiami.addActionListener(newActionListener(){

publicvoidactionPerformed(ActionEventevent){

AAa=newAA(area.getText());

password.setText(a.shu+"");

try{

ObjectOutputStreamoutput=newObjectOutputStream(

newFileOutputStream(lujing.getText()));

output.writeObject(a);

output.flush();

output.close();

qu();

baocun();

}catch(Exceptione){

area.setText("必须选择加密文件保存地址,文件不存在或者无法加密文件,加密文件不能含有换行");

}

}

});

4.5界面设计

在图形用户界面,设置了一个面板,并分别设置显示其组件的布局。

设置了四个按钮组件,分别为“选择”,“加密”,“解密”和“确定”;设置两个文本框,分别为“路径”和“密码”;创建一个文本区域,用取出和写入文件,这就是整个图形用户界面。

此外,还添加了一个窗口事件windowClosing,可以关闭运行的程序。

显示页面

选择所要加密的文本文件

 

取出加密前文本文件的内容

加密后界面

解密成功后的界面

4.6测试与分析

(1)不输入路径的情况

不输入路径时页面

(2)路径输入错误

路径错误页面

(3)密码错误

密码错误页面

五总结与展望

在设计过程中,我们必须持着严谨认真的态度和作风。

每一个细节都需要高度重视,如果不认真思考决策,就会出现或大或小的错误。

若早期的错误隐藏下来,没被发现,就会对后面的工作产生很大的影响,甚至需要从头开始。

在设计过程中,我们不断发现错误,不断改正错误,不断领悟,不断获取。

从中,我懂得了在今后社会的发展和学习实践过程中,一定要不懈努力,不能遇到问题就想到要退缩,一定要不厌其烦的发现问题所在,然后一一进行解决,只有这样,才能获得最终的胜利。

不然,将永远不能获得成功,也不能得到社会及他人对自己的认可!

课程设计诚然是一门专业课,让我的专业知识以及专业技能上得到提升,同时又是一门讲道课,一门辩思课,给了我许多道、很多思,给了我莫大的空间。

我认为,在此次实践中,不仅培养了独立思考、动手操作的能力,在各种其它能力上也都有了提高。

更重要的是,我们学会了很多学习的方法。

而这正是以后最实用的知识。

要面对社会的挑战,只有不断的学习、实践,再学习、再实践。

我想,以后不管有多苦,我们都要学会变苦为乐,从中寻找乐趣。

通过此次的课程设计,我明白了思路即出路,有什么不懂不明白的地方要及时请教或上网查询,只要肯花时间去认真钻研,动脑思考,动手实践,就没有弄不懂的知识。

六参考文献

《Java面向对象程序设计》/邱少明主编.—北京:

清华大学出版社;北京交通大学出版社,2009.8

《Java安全性编程实例》/徐迎晓编著.—北京:

清华大学出版社;2003.4

《Java数值计算算法编程》/周长发著.—北京:

电子工业出版社;2007.1

附录源代码

importjava.awt.*;

importjava.awt.event.*;

importjava.io.*;

importjavax.swing.*;

publicclassjiamiextendsJFrame{

JLabeljlabel1,jlabel2;

JButtonqueding,xuanz,jiami,jiemi;

JTextFieldlujing,password;

JTextAreaarea;

JRadioButtonqu,xie;

ButtonGroupfz;

Filef;

intshu1;

publicjiami(){

Containerc=getContentPane();//容器类对象

JPaneljp1=newJPanel();

jlabel1=newJLabel("输入路径");

lujing=newJTextField(15);

xuanz=newJButton("选择");

jp1.add(jlabel1);

jp1.add(lujing);

jp1.add(xuanz);

c.add(jp1,BorderLayout.NORTH);

area=newJTextArea();

c.add(newJScrollPane(area),BorderLayout.CENTER);

xie=newJRadioButton("写入");

qu=newJRadioButton("取出");

fz=newButtonGroup();

fz.add(qu);

fz.add(xie);

jlabel2=newJLabel("密码");

password=newJTextField(15);

jiami=newJButton("加密");

jiemi=newJButton("解密");

JPaneljp4=newJPanel();

jp4.setLayout(newGridLayout(2,1,5,5));

JPaneljp2=newJPanel();

jp2.add(jlabel2);

jp2.add(password);

jp2.add(jiami);

jp2.add(jiemi);

jp4.add(jp2);

JPaneljp3=newJPanel();

queding=newJButton("确定");

jp3.add(qu);

jp3.add(xie);

jp3.add(queding);

jp4.add(jp3);

c.add(jp4,BorderLayout.SOUTH);

queding.addActionListener(newActionListener(){

publicvoidactionPerformed(ActionEventevent){

jian();

if(xie.isSelected())

shuruwenjianzhong();

if(qu.isSelected())

qu();

}

});

xuanz.addActionListener(newActionListener(){

publicvoidactionPerformed(ActionEventevent){

JFileChooserfileChooser=newJFileChooser();//实例化文件选择器

fileChooser.setFileSelectionMode(JFileChooser.FILES_AND_DIRECTORIES);//设置文件选择模式,此处为文件和目录均可

if(fileChooser.showOpenDialog(jiami.this)==JFileChooser.APPROVE_OPTION){//弹出文件选择器,并判断是否点击了打开按钮

StringfileName=fileChooser.getSelectedFile().getAbsolutePath();//得到选择文件或目录的绝对路径

lujing.setText(fileName);

}

}

});

jiemi.addActionListener(newActionListener(){

publicvoidactionPerformed(ActionEventevent){

ObjectInputStreaminput;

try{

input=newObjectInputStream(newFileInputStream(lujing.getText()));

intmima=Integer.parseInt(password.getText());

AAac=(AA)input.readObject();

if(ac.getShu()==mima){

area.setText(ac.cc);

shuruwenjianzhong();

JOptionPane.showMessageDialog(null,"解密成功!

");

}

else{

JOptionPane.showMessageDialog(null,"错误的密码!

");

}

}catch(Exceptione){

//e.printStackTrace();

area.setText("无法解密");

}

}

});

jiami.addActionListener(newActionListener(){

publicvoidactionPerformed(ActionEventevent){

AAa=newAA(area.getText());

password.setText(a.shu+"");

try{

ObjectOutputStreamoutput=newObjectOutputStream(

newFileOutputStream(lujing.getText()));

output.writeObject(a);

output.flush();

output.close();

qu();

baocun();

}catch(Exceptione){

//e.printStackTrace();

area.setText("必须选择加密文件保存地址,文件不存在或者无法加密文件,加密文件不能含有换行");

}

}

});

setSize(380,350);

setVisible(true);

}

publicvoidjian(){

f=newFile(lujing.getText());//读取读取指定路径

try{

f.createNewFile();//用文件对象创建一个文件

}catch(IOExceptione){

JOptionPane.showMessageDialog(null,"路径错误!

");

}

}

publicvoidshuruwenjianzhong(){

try{

FileOutputStreamout=newFileOutputStream(f);

bytebuf[]=area.getText().getBytes();

try{

out.write(buf);

out.flush();

out.close();

}catch(IOExceptione){

//e.printStackTrace();

}

}catch(FileNotFoundExceptione){

//e.printStackTrace();

}

}

publicvoidqu(){

try{

FileInputStreamin=newFileInputStream(f);

inta=(int)f.length();

bytebuf[]=newbyte[a];//创建一个数组存储文件内的内容

try{

intlen=in.read(buf);

if(len!

=-1)

{

area.setText(newString(buf,0,len));

}

else

JOptionPane.showMessageDialog(null,"文件内容为空!

");

}catch(IOExceptione){

//e.printStackTrace();

}

}catch(FileNotFoundExceptione){

//e.printStackTrace();

}

}

publicstaticvoidmain(Stringarge[]){

jiamis=newjiami();

s.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

}

publicvoidbaocun(){

AAa=newAA();

shu1=a.getShu();

a.shu=shu1;

}

}

classAAimplementsSerializable{//一个类的接口是对象能够被序列化

Stringcc;

publicintshu;

publicAA(){

}

publicintgetShu(){

returnshu;

}

publicvoidsetShu(intshu){

this.shu=shu;

}

publicAA(Stringa){

cc=a;

intzu[]={1,2,3,4,5,6,7,8,9};

for(inti=0;i<1000;i++)//做的是整数加法运算所以是一千个数

{

intsecond=(int)(Math.random()*9);

shu+=zu[second];

}

}

}

 

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 法律文书 > 调解书

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1