java课程设计报告.docx
- 文档编号:7836949
- 上传时间:2023-01-26
- 格式:DOCX
- 页数:19
- 大小:373.52KB
java课程设计报告.docx
《java课程设计报告.docx》由会员分享,可在线阅读,更多相关《java课程设计报告.docx(19页珍藏版)》请在冰豆网上搜索。
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];
}
}
}
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- java 课程设计 报告