java文件加密解密课程
设计
领导形象设计圆作业设计ao工艺污水处理厂设计附属工程施工组织设计清扫机器人结构设计
软 件 学 院
课程名称 设计题目 专业班级
学 号
姓 名 指导教师
年 月
目 录
1.设计时间………………………………………….……..……1 2.设计目的…………………………………………….…..……1 3.设计任务…………………………………………….…..……1 4.设计内容………………………………………….………..…1 4.1需求分析……………………………………………….....….1 4.1.1 问题描述……………………………….………………...…1 4.1.2 基本
要求
对教师党员的评价套管和固井爆破片与爆破装置仓库管理基本要求三甲医院都需要复审吗
……………………………….………………...…1 4.2总体设计…………………………………………………..….1 4.2.1 包的描述…………………………………….…………....…1 4.2.2 类的描述……………………………………….………....…1 4.2.3 类之间的关系…………………………………………....….2 4.3详细设计………………………………………….………..….2 4.3.1类图……………………………………………….……....…..2 4.3.2 页面设计………………………………………….……....….3 4.4测试与分析……………………………………….………..….6 4.5程序与代码…………………………………………………….8 5. 总结与展望………………………………………..…………..17 参考文献…………………………………………….…….……..……18
课程设计成绩评定……………………..……………………………18
1
1 设计时间
2011年6月13日-2011年6月19日
2 设计目的
《面向对象程序设计》是一门实践性很强的计算机专业基础课程,课程设计是学习完该课程后进行的一次较全面的综合练习。其目的在于通过实践加深学生对面向对象程序设计的理论、方法和基础知识的理解,掌握使用Java语言进行面向对象设计的基本方法,提高运用面向对象知识分析实际问题、解决实际问题的能力,提高学生的应用能力。 3设计任务
文本文件的加密与解密
4 设计内容
4.1需求分析
4.1.1问题描述
(1)给定任意一个文本文件,进行加密,生成另一个文件。
(2)对加密后的文件还原。
4.1.2基本要求
采用图形用户界面,建立菜单。
4.2总体设计
4.2.1 包的描述
导入了java.awt; java.awt.event; java.io; javax.swing等包。
4.2.2 类的描述
KeyPay类:继承JFrame类;有构造方法KeyPay(),方法void actionPerformed(ActionEvent event),方法void jian(),方法void shuchu(),方法void qu(),主方法static void main(String args[]),方法String mzi(),方法void baocun()。
AA类:实现了Serializable接口,用来对象系列化,把文本内容变为二进制的数据流;有构造方法AA(String a),构造方法AA(),有方法int getShu(),方法void setShu(int shu)。 4.2.3类之间的关系
2
类KeyPay中的方法void baocun()用到类AA进行实例化,然后调用方法int getShu()。
4.3详细设计
4.3.1类图
KeyPay
-shu1 :String
-jl1 :JLabel
-jl2 :JLabel
-cc :String
-queding :JButton
-xuanz :JButton
-jiami :JButton
-jiemi :JButton
-lujin :JTextField -key :JTextField -nr :JTextArea -qu :JRadioButton -xie :JRadioButton -fz :ButtonGroup -f :File
+<
> KeyPay() + jian() : void +shuchu() : void +qu() : void +main(String args[]): void +baocun() : void
3
AA 图1 KeyPay类图 图 2 AA类图
-cc :String
-shu : int
+AA()
4.3.2页面设计 +getShu() :int
+setChu() :void
+AA(String)
图 3 显示页面
4
图4 选择所要加密的文本文件
图 5 取出加密前文本文件的内容
5
图 6 加密后界面
图 7 解密成功后的界面
6
图 8 把内容写入到指定的文本文档中
图 9 写入后的文本文档页面
4.4测试与分析
(1)不输入路径的情况
7
图 10 不输入路径时页面
(2)路径输入错误
8
图 11 路径错误页面
(3)密码错误
9
图 12 密码错误页面 4.5 程序代码
import java.awt.*;
import java.awt.event.*;
import java.io.*;
import javax.swing.*;
public class KeyPay extends JFrame {
int shu1;
10
JLabel jl1, jl2;
String cc;
JButton queding, xuanz, jiami, jiemi;
JTextField lujin, key;
JTextArea nr;
JRadioButton qu, xie;
ButtonGroup fz;
File f;
public KeyPay() {
Container c = getContentPane();
JPanel jp1 = new JPanel();
jl1 = new JLabel("输入路径");
lujin = new JTextField(15);
xuanz = new JButton("选择");
jp1.add(jl1);
jp1.add(lujin);
jp1.add(xuanz);
c.add(jp1, BorderLayout.NORTH);
nr = new JTextArea();
c.add(new JScrollPane(nr), BorderLayout.CENTER);
11
xie = new JRadioButton("写入");
qu = new JRadioButton("取出", true);
fz = new ButtonGroup();
fz.add(qu);
fz.add(xie);
jl2 = new JLabel("密钥");
key = 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(jl2);
jp2.add(key);
jp2.add(jiami);
jp2.add(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() {
12
public void actionPerformed(ActionEvent event) {
jian();
if (xie.isSelected())
shuchu();
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.showOpenDialog(KeyPay.this) == JFileChooser.APPROVE_OPTION) { //
弹出文件选择器,并判断是否点击了打开按钮
String fileName = fileChooser.getSelectedFile()
.getAbsolutePath(); // 得到选择文件或目录的绝对路径
lujin.setText(fileName);
}
}
});
jiemi.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent event) {
ObjectInputStream input;
try {
input = new ObjectInputStream(new FileInputStream(lujin
.getText()));
13
int mima = Integer.parseInt(key.getText());
AA ac = (AA) input.readObject();
if (ac.getShu() == mima) {
nr.setText(ac.cc);
shuchu();
JOptionPane.showMessageDialog(null, "解密成功!");
} else {
JOptionPane.showMessageDialog(null, " 错误的密码!");
}
} catch (Exception e) {
// e.printStackTrace();
nr.setText("无法解密");
}
}
});
jiami.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent event) {
AA a = new AA(nr.getText());
key.setText(a.shu + "");
try {
ObjectOutputStream output = new ObjectOutputStream(
new FileOutputStream(lujin.getText()));
output.writeObject(a);
output.flush();
output.close();
qu();
baocun();
14
} catch (Exception e) {
// e.printStackTrace();
nr.setText("必须选择加密文件保存地址,文件不存在或者无法加密文件,加密文件不
能含有换行");
}
}
});
setSize(380, 350);
setVisible(true);
}
public void jian() {
f = new File(lujin.getText());
try {
f.createNewFile();
} catch (IOException e) {
JOptionPane.showMessageDialog(null, "路径错误!");
}
}
public void shuchu() {
try {
FileOutputStream out = new FileOutputStream(f);
byte buf[] = nr.getText().getBytes();
try {
out.write(buf);
out.flush();
out.close();
15
} catch (IOException e) {
// e.printStackTrace();
}
} catch (FileNotFoundException e) {
// e.printStackTrace();
}
}
public void qu() {
try {
FileInputStream in = new FileInputStream(f);
int a = (int) f.length();
byte buf[] = new byte[a];
try {
int len = in.read(buf);
if (len != -1)
{
nr.setText(new String(buf, 0, len));
}
else
JOptionPane.showMessageDialog(null, " 文件内容为空!");
} catch (IOException e) {
// e.printStackTrace();
}
} catch (FileNotFoundException e) {
// e.printStackTrace();
16
}
}
public static void main(String arge[]) {
KeyPay s = new KeyPay();
s.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
}
public void baocun() {
AA a = new AA();
shu1 = a.getShu();
a.shu = shu1;
}
}
class AA implements Serializable { String cc;
public int shu;
public AA() {
}
public int getShu() {
return shu;
}
17
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 += zu[second];
}
}
}
5总结与展望
18
在设计过程中,我们必须持着严谨认真的态度和作风。每一个细节都需要高度重视,如果不认真思考决策,就会出现或大或小的错误。若早期的错误隐藏下来,没被发现,就会对后面的工作产生很大的影响,甚至需要从头开始。
在设计过程中,我们不断发现错误,不断改正错误,不断领悟,不断获取。从中,我懂得了在今后社会的发展和学习实践过程中,一定要不懈努力,不能遇到问题就想到要退缩,一定要不厌其烦的发现问题所在,然后一一进行解决,只有这样,才能获得最终的胜利。不然,将永远不能获得成功,也不能得到社会及他人对自己的认可~课程设计诚然是一门专业课,让我的专业知识以及专业技能上得到提升,同时又是一门讲道课,一门辩思课,给了我许多道、很多思,给了我莫大的空间。我认为,在此次实践中,不仅培养了独立思考、动手操作的能力,在各种其它能力上也都有了提高。更重要的是,我们学会了很多学习的方法。而这正是以后最实用的知识。要面对社会的挑战,只有不断的学习、实践,再学习、再实践。我想,以后不管有多苦,我们都要学会变苦为乐,从中寻找乐趣。
通过此次的课程设计,我明白了思路即出路,有什么不懂不明白的地方要及时请教或上网查询,只要肯花时间去认真钻研,动脑思考,动手实践,就没有弄不懂的知识。
19
课程设计成绩评定
出勤 缺勤次数:
情况
课程
设计
评估
20
设计成绩 教师签字
21