文档库 最新最全的文档下载
当前位置:文档库 › Java课程设计之加密和解密

Java课程设计之加密和解密

Java课程设计之加密和解密
Java课程设计之加密和解密

课程设计(论文)任务书

软件学院软件工程专业班

一、课程设计(论文)题目加密与解密

二、课程设计(论文)工作自年月日起至年月日止。

三、课程设计(论文) 地点:

四、课程设计(论文)内容要求:

1.本课程设计的目的

(1)使学生巩固和提高Java编程技术

(2)培养学生掌握程序设计的基本思路和方法;

(3)加强学生研发、调试程序的能力;

(4)培养学生分析、解决问题的能力;

(5)提高学生的科技论文写作能力。

2.课程设计的任务及要求

1)任务:

(1)设计GUI界面的Hannoi塔,用户可以通过拖动鼠标移动各个塔上的盘子,程序

也可以自动演示盘子的移动过程。;

(2)有三个表示塔的对象,分别命名为A、B和C。A塔上有若干个盘子,盘子的大小

不等,并按着大小顺序依次摆放在A塔上,大盘在下,小盘在上。用户可以用鼠标拖

动盘子,把A 塔上的盘子全部移动到另外两个塔中的任何一个塔上。要求每次只能移

动一个盘子,在任何时候不允许大盘压在小盘的上面。

(3)用户也可以选择让程序自动演示。选择自动演示后,程序将以动画形式演示把A

塔上的盘子全部移到C塔的过程,并将移动过程以文本形式显示在一个文本区中。

2)创新要求:

在基本要求达到后,可进行创新设计,增加功能和游戏趣味性。

3)课程设计论文编写要求

(1)课程设计任务及要求

(2)需求分析

(3)设计思路--工作原理、功能规划

(4)详细设计---数据分析、算法思路、类设计、功能实现(含程序流程图、主要代码及注释)、界面等。

(4)运行调试与分析讨论---给出运行屏幕截图,分析运行结果,有何改进想法等。(5)设计体会与小结---设计遇到的问题及解决办法,通过设计学到了哪些新知识,巩固了哪些知识,有哪些提高。

(6)参考文献(必须按标准格式列出,可参考教材后面的参考文献格式)

(7) 报告按规定排版打印,要求装订平整,否则要求返工;

(8) 课设报告的装订顺序如下:封面---任务书---中文摘要---目录----正文---附录(代码

及相关图片)

(9)严禁抄袭,如有发现,按不及格处理。

4)答辩与评分标准:

(1)考勤:10分;

(2)程序检查:30分;

(3)答辩回答问题:20分

(3)课程设计报告:40分;

5)参考文献:

(1)《Java语言程序设计教程》邱桃荣机械工业出版社

(2)《Java程序设计试验指导》陈轶姚晓昆清华大学出版社

6)课程设计进度安排

内容天数地点

构思及收集资料7图书馆

编码与调试5实验室

撰写论文3图书馆、实验室

学生签名:

年月日

课程设计(论文)评审意见

(1)考勤(10分):优()、良()、中()、一般()、差();

(2)程序检查(30分):优()、良()、中()、一般()、差();

(3)答辩回答问题(20分):优()、良()、中()、一般()、差();

(4)设计报告(40分):优()、良()、中()、一般()、差();

评阅人:职称:讲师

年月日

前言 ......................................................................................................................................... - 3 -

一、题目分析................................................................................................................................ - 5 -

1.1课程设计的要求和内容(包括原始数据、技术要求、工作要求) (5)

1.2相关知识介绍 (5)

二、概要设计................................................................................................................................ - 9 -

2.1抽象数据类型的定义 (9)

2.2主程序流程 (9)

2.3各程序模块之间的层次(调用)关系 (10)

三、详细设计.............................................................................................................................. - 11 -

3.1主函数模块 (11)

3.2加密模块 (12)

3.3加密操作模块 (13)

3.4解密模块 (13)

3.5解密操作模块 (15)

3.6转换模块 (15)

3.7文件选择模块 (16)

3.8密码生成模块 (17)

四、调试分析.............................................................................................................................. - 19 -

4.1调试过程中遇到的问题 (19)

4.2对设计与实现的回顾讨论和分析 (19)

4.3算法的时空分析 (20)

4.4经验和体会 (20)

五、测试结果.............................................................................................................................. - 20 -

5.1加密 (20)

5.2解密 (22)

六、主要参考资料 ...................................................................................................................... - 23 -

七、附录 ..................................................................................................................................... - 23 -

摘要

随着网络技术的不断发展,人们的个人信息、网络间的文件传递、电子商务等方面都需要大力的保护,文件加密技术也就随之产生。文件的加密主要是由加密算法实现,加密算法有多种,常见的有RSA、DES、MD5等。本程序设计对文件的加密使用的是DES加密算法。

Java语言具有简单、安全、可移植、面向对象、健壮、多线程、体系结构中立、解释执行、高性能、分布式和动态等主要特点。利用Java语言中秘密密钥工厂对DES算法的支持,使程序实现文件加密、解密两大功能更简单。

关键词:

JAVA ; DES;加密;解密;

前言

DES ( data encryption Standard) 是一种世界标准的加密形式,已经15 年历史了,

虽然有些老,可还算是比较可靠的算法。在七十的初期, 随着计算机之间的通信发展,需要有一种标准密码算法为了限制不同算法的激增使它们之间不能互相对话。为解决这个问题, 美国国家安全局(N.S.A ) 进行招标。 I.B.M 公司开发了一种算法,称为:Lucifer。经过几年的研讨和修改, 这种算法, 成为了今天的D.E.S,1976 年11月23 日,终于被美国国家安全局采用。

D.E.S 是分块加密的,将明文分割成 64 BITS 的块, 然后它们一个个接起来。它使用56位密钥对64位的数据块进行加密,并对64bits的数据块进行16轮编码。与每轮编码时,一个48bits的“每轮”密钥值由56bits的完整密钥得出来。DES用软件进行解码需要用很长时间,而用硬件解码速度非常快,1977年,人们估计要耗资两千万美元才能建成一个专门计算机用于DES的解密,而且需要12个小时的破解才能得到结果。所以,当时DES被认为是一种十分强壮的加密方法。但今天,只需二十万美圆就可以制造一台破译DES的特殊的计算机,所以现在 DES 对要求“强壮”加密的场合已经不再适用了。

DES的唯一密码学缺点,就是密钥长度相对比较短,人们并没有放弃使用DES,而是想出了一个解决其长度问题的方法,即采用三重DES。加密成为三步,而不是一步,每一步的密钥都不一样,这样爆破就比较复杂了,这样要找三个密钥,而不是一个,每个密钥有56 BITS,那样我们就有56 乘以三,等于168 Bits。

本程序设计所采用的就是DES的变种——三重DES算法。同时利用Java的GUI编程,生成文本对话框,对文件的路径进行选择、提供密钥框、加密和解密按钮。

一、题目分析

1.1课程设计的要求和内容(包括原始数据、技术要求、工作要求)

基本要求:

1.利用某种加密算法对指定的文本文件进行加密(应判断其是否已经加密,若已加密

则结束该步骤,否则提示输入加密口令,对文件进行加密);

2.加密解密方法:可使用RSA,DES,MD5等之一加密算法。

3.还应该提供解密功能。

1.2相关知识介绍

1.2.1 DES算法描述

DES是一种分组加密算法,他以64位为分组对数据加密。64位一组的明文从算法的一端输入,64位的密文从另一端输出。DES是一个对称算法:加密和解密用的是同一个算法(除密钥编排不同以外)。

密钥的长度为56位(密钥通常表示为64位的数,但每个第8位都用作奇偶检验,可以忽略)。密钥可以是任意的56位数,且可以在任意的时候改变。

DES算法的入口参数有3个:Key,Data,Mode。其中Key为8个字节共64位,是DES 算法的工作密钥;Data也为8个字节64位,是要被加密或解密的数据:Mode为DES的工作方式,有两种:加密或解密。

DES算法的工作过程:若Mode为加密,则用Key对数据Data进行加密,生成Data的密码形式(64位)作为DES的输出结果;若Mode为解密,则用Key对密码形式的数据Data 解密,还原为Data的明码形式(64位)作为DES的输出结果。

在通信网络的两端,双方约定了一致的Key,在通信的源点用Key对核心数据进行DES 加密,然后以密码形式通过公共通信网(如电话网)传输到通信网络的终点,数据达到目的地后,用同样的Key对密码数据进行解密,便再现了明码形式的核心数据。这样便保证了核心数据(如PIN,MAC等)在公共通信网中传输的安全性和可靠性。通过定期在通信网络的源端和目的端同时改用新的Key,便能更进一步提高数据的保密性,这正是现在金融界交易网络的流行作法。

简单地说,算法只不过是加密的一种基本技术,DES基本组建分组是这些技术的一种组合,他基于密钥作用于明文,这是众所周知的轮(round)。DES有16轮,这意味着要在明文分组上16次实施相同的组合技术。

1.2.2 DES算法详述

DES算法把64位的明文输入块变为64位的密文输出块,他所使用的密钥也是64位,DES对64 位的明文分组进行操作。通过一个初始置换,将明文分组分成左半部分和右半部分,各32位长。然后进行16轮相同的运算,这些相同的运算被称为函数f,在运算过程中数据和密钥相结合。经过16轮运算后左、右部分在一起经过一个置换(初始置换的逆置换),这样算法就完成了。

(1)初始置换

其功能是把输入的64位数据块按位重新组合,并把输出分为L0,R0两部分,每部分

各长32位,其置换规则如表1所示。

表1

58 50 42 34 26 18 10 2 60 52 44 36 28 20 12 4

62 54 46 38 30 22 14 6 64 56 48 40 32 24 16 8

57 49 41 33 25 17 9 1 59 51 43 35 27 19 11 3

61 53 45 37 29 21 13 5 63 55 47 39 31 23 15 7

即将输入的第58位换到第1位,第50位换到第2位,…,依次类推,最后一位是原来的第7位,L0,R0则是换位输出后的两部分,L0是输出的左32位,R0是右32位。例:设置换前的输入值为D1D2D3…D64,则经过初始置换后的结果为:L0=D58D50…D8;R0=D57D49…7。(2)逆置换

经过16次迭代运算后,得到L16,R16,将此作为输入进行逆置换,即得到密文输出。逆置换正好是初始置换的逆运算。例如,第1位经过初始置换后,处于第40位,而通过逆置换,又将第40位换回到第1位,其逆置换的规则如表2所示。

表2

40 8 48 16 56 24 64 32 39 7 47 15 55 23 63 31

38 6 46 14 54 22 62 30 37 5 45 13 53 21 61 29

36 4 44 12 52 20 60 28 35 3 43 11 51 19 59 27

34 2 42 10 50 18 58 26 33 1 41 9 49 17 57 25

(3)函数f(R i,K i)的计算其算法描述如图1所示。

图 1

在图1中,“扩展置换”是将32位放大成48位,“P盒置换”是32位到32位换位,其换位规则分别如表3、表4所示。

表3 扩展置换表

32 1 2 3 4 5 4 5 6 7 8 9

8 9 10 11 12 13 12 13 14 15 16 17

16 17 18 19 20 21 20 21 22 23 24 25

24 25 26 27 28 29 28 29 30 31 32 1

表4 P盒置换表

16 7 20 21 29 12 28 17 1 15 23 26 5 18 31 10

2 8 24 14 32 27

3 9 19 13 30 6 22 21

4 25

在f(Ri,Ki)算法描述图中,S1,S2...S8为选择函数,其功能是把6bit数据变为4bit数据。下面给出选择函数Si(i=1,2......8)的功能表:

选择函数Si

S1:

14,4,13,1,2,15,11,8,3,10,6,12,5,9,0,7,

0,15,7,4,14,2,13,1,10,6,12,11,9,5,3,8,

4,1,14,8,13,6,2,11,15,12,9,7,3,10,5,0,

15,12,8,2,4,9,1,7,5,11,3,14,10,0,6,13,

S2:

15,1,8,14,6,11,3,4,9,7,2,13,12,0,5,10,

3,13,4,7,15,2,8,14,12,0,1,10,6,9,11,5,

0,14,7,11,10,4,13,1,5,8,12,6,9,3,2,15,

13,8,10,1,3,15,4,2,11,6,7,12,0,5,14,9,

S3:

10,0,9,14,6,3,15,5,1,13,12,7,11,4,2,8,

13,7,0,9,3,4,6,10,2,8,5,14,12,11,15,1,

13,6,4,9,8,15,3,0,11,1,2,12,5,10,14,7,

1,10,13,0,6,9,8,7,4,15,14,3,11,5,2,12,

S4:

7,13,14,3,0,6,9,10,1,2,8,5,11,12,4,15,

13,8,11,5,6,15,0,3,4,7,2,12,1,10,14,9,

10,6,9,0,12,11,7,13,15,1,3,14,5,2,8,4,

3,15,0,6,10,1,13,8,9,4,5,11,12,7,2,14,

S5:

2,12,4,1,7,10,11,6,8,5,3,15,13,0,14,9,

14,11,2,12,4,7,13,1,5,0,15,10,3,9,8,6,

4,2,1,11,10,13,7,8,15,9,12,5,6,3,0,14,

11,8,12,7,1,14,2,13,6,15,0,9,10,4,5,3,

S6:

12,1,10,15,9,2,6,8,0,13,3,4,14,7,5,11,

10,15,4,2,7,12,9,5,6,1,13,14,0,11,3,8,

9,14,15,5,2,8,12,3,7,0,4,10,1,13,11,6,

4,3,2,12,9,5,15,10,11,14,1,7,6,0,8,13,

S7:

4,11,2,14,15,0,8,13,3,12,9,7,5,10,6,1,

13,0,11,7,4,9,1,10,14,3,5,12,2,15,8,6,

1,4,11,13,12,3,7,14,10,15,6,8,0,5,9,2,

6,11,13,8,1,4,10,7,9,5,0,15,14,2,3,12,

S8:

13,2,8,4,6,15,11,1,10,9,3,14,5,0,12,7,

1,15,13,8,10,3,7,4,12,5,6,11,0,14,9,2,

7,11,4,1,9,12,14,2,0,6,10,13,15,3,5,8,

2,1,14,7,4,10,8,13,15,12,9,0,3,5,6,11,

在此以S1为例说明其功能,我们可以看到:在S1中,共有4行数据,命名为0,1、2、3行;每行有16列,命名为0、1、2、3,......,14、15列。

现设输入为:D=D1D2D3D4D5D6

令:列=D2D3D4D5 行=D1D6

然后在S1表中查得对应的数,以4位二进制表示,此即为选择函数S1的输出。

(4)子密钥Ki(48 b)的生成算法

开始,由于不考虑每个字节的第8位,DES的密钥从64位变为48位,如表5所示,首先56位密钥被分成两个部分,每部分28位,然后根据轮数,两部分分别循环左移l或2位。

表5 密钥置换

57 49 41 33 25 17 9 1 58 50 42 34 26 18

10 2 59 51 43 35 27 19 11 3 60 52 44 36

63 55 47 39 31 23 15 7 62 54 46 38 30 22

14 6 61 53 45 37 29 21 13 5 28 20 12 4

DES算法规定,其中第8,16,…,64位是奇偶校验位,不参与DES运算。故Key实际可用位数只有56位。即:经过密钥置换表的变换后,Key的位数由64位变成了56位,此56位分为C 0,D0两部分,各28位,然后分别进行第一次循环左移,得到C1,D1,将C1(28位),D1(28位 )合并得到56位,再经过压缩置换,从而便得到了密钥K0(48位)。依次类推,便可得到K1,K 2,…,K15。需要注意的是,16次循环左移对应的左移位数要依据表6所示的规则进行。

表6 循环左移位数

轮 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16

位数 1 1 2 2 2 2 2 2 1 2 2 2 2 2 2 1

以上介绍了DES算法的加密过程。DES算法的解密过程是一样的,区别仅在于第一次迭代时用子密钥K15,第二次是K14,…,最后一次用K0,算法本身并没有任何变化。

二、概要设计

2.1抽象数据类型的定义

2.1.1 程序所需要引入的包:

import java.awt.*; //包含用于创建用户界面和绘制图形图像的所有类。 import java.awt.event.*; //提供处理由 AWT 组件所激发的各类事件的接口和类。 import javax.swing.*; //提供一组“轻量级”(全部是 Java 语言)组件,尽量让这些组件在所有平台上的工作方式都相同。

import java.io.*; //通过数据流、序列化和文件系统提供系统输入和输出。 import java.security.*; //为安全框架提供类和接口。

import javax.crypto.*; //为 cryptographic (加密)操作提供类和接口。 import javax.crypto.spec.*; // 为密钥规范和算法参数规范提供类和接口。

2.1.2 其他定义:

new FlowLayout() 对文件加密器对话框采用FlowLayout 管理器。 new ActionListener() 对文件的加密和解密设置事件监听器。

byte[] bytK1、 byte[] bytK2 、byte[] bytK3 密钥分三部分,采用字节数组保存数据。

2.2主程序流程

图2 主程序流程图

2.3各程序模块之间的层次(调用)关系

2.3.1 模块定义

主函数模块:

生成加密器框体;获取数据的输入;调用加密或解密函数。

加密模块:

判断密钥是否合法和文件是否已加密,启动加密操作,显示操作结果,并在与源文件同一文件夹下生成密文。

加密操作模块:

用DES方法加密输入的字节并返回。

解密模块:

判断密钥是否合法,启动解密操作,显示操作结果,并在指定的文件路径下生成明文。

解密操作模块:

用DES方法解密输入的字节并返回。

转换模块:

转换模块一:输入密码的字符形式,返回字节数组形式。

转换模块二:计算一个16进制字符的10进制值。

文件选择模块:

选择需要加密或解密的文件。

密码生成模块:

随机生成或用获得的密钥,用DES算法对密钥进行操作。

2.3.2层次(调用)关系

图3 层次(调用)关系

三、详细设计

3.1主函数模块

代码实现:

public class FileEncrypter extends JFrame{ //FileEncrypter继承JFrame类public static final int WIDTH = 550; //定义不可变的宽度值为550

public static final int HEIGHT = 200; //定义不可变的高度值为200

public static void main(String args[]) { //新建一个可见的框体

FileEncrypter fe = new FileEncrypter();

fe.show();

}

FileEncrypter(){

this.setSize(WIDTH,HEIGHT);

this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

this.setResizable(false);

Toolkit tk = Toolkit.getDefaultToolkit();

Dimension screenSize = tk.getScreenSize();

this.setLocation((screenSize.width - WIDTH)/2, (screenSize.height - HEIGHT)/2);

this.setTitle("文件加密器(TirDES)"); //以上设置新建框体的标题;框体的宽度和高度;关闭时的操作;框体大小不可变;框体在屏幕上显示的位置。

Container c = this.getContentPane(); //创建容器c

c.setLayout( new FlowLayout()); //c采用FlowLayout布局管理

final FilePanel fp = new FilePanel("文件选择");

c.add(fp); //添加名为“文件选择”面板

final KeyPanel pp = new KeyPanel("密码");

c.add(pp); //添加名为“密码”面板

JButton jbE = new JButton("加密");

c.add(jbE); //添加加密按钮

jbE.addActionListener(new ActionListener(){ //设置加密监听器

public void actionPerformed(ActionEvent event){

File file = new File(fp.getFileName());

if(file.exists())encrypt(file.getAbsoluteFile(),pp.getKey());

else JOptionPane.showMessageDialog( null,"请选择文件!","提示",JOptionPane.OK_OPTION);

}

});

JButton jbD = new JButton("解密");

c.add(jbD); //添加解密按钮

jbD.addActionListener(new ActionListener(){ //设置解密监听器

public void actionPerformed(ActionEvent event){

File file = new File(fp.getFileName());

if(file.exists())decrypt(file.getAbsoluteFile(),pp.getKey());

else JOptionPane.showMessageDialog(null,"请选择文件!","提示",JOptionPane.OK_OPTION);

}

});

}

3.2加密模块

入口参数:指定的文件和密钥

出口值:文件已加密,提示“文件已加密!”

加密成功,提示“加密成功!”并输出加密后的密文

密码长度不等于48,提示“密码长度必须等于48!”

抛出异常。

代码实现:

private void encrypt(File fileIn,String sKey){

try{

if(sKey.length() == 48){ //密钥长度等于48成立

byte[] bytK1 = getKeyByStr(sKey.substring(0,16)); //密钥前16位返回的字节数组保存到数组bytK1

byte[] bytK2 = getKeyByStr(sKey.substring(16,32));//密钥中16位返回的字节数组保存到数组bytK2

byte[] bytK3 = getKeyByStr(sKey.substring(32,48));//密钥后16位返回的字节数组保存到数组bytK3

String strPath = fileIn.getPath();

if(strPath.substring(strPath.length()-5).toLowerCase().equals(".tdes")){

//判断文件是否已加密,加密则输出信息并返回

JOptionPane.showMessageDialog(this,"该文件已加密!","提示",JOptionPane.OK_OPTION);

return;

}

else{

FileInputStream fis = new FileInputStream(fileIn);

byte[] bytIn = new byte[(int)fileIn.length()];

for(int i = 0;i< fileIn.length();i++){

bytIn[i] = (byte)fis.read();

} //加密

byte[] bytOut =

encryptByDES(encryptByDES(encryptByDES(bytIn,bytK1),bytK2),bytK3);

//反复调用加密操作模块

String fileOut = fileIn.getPath() + ".tdes"; //文件名后上“.tdes”作为密文的标记。

FileOutputStream fos = new FileOutputStream(fileOut);

for(int i = 0;i< bytOut.length;i++){

fos.write((int)bytOut[i]);

}

fos.close(); //输出密文

JOptionPane.showMessageDialog(this,"加密成功!","提示",JOptionPane.OK_OPTION); // 给出“加密成功”信息

}

}

else JOptionPane.showMessageDialog( this,"密码长度必须等于48!","错误信息",JOptionPane.ERROR_MESSAGE); //给出“密码长度必须等于48”信息

}

catch(Exception e){ // 异常处理操作

e.printStackTrace();

}

}

3.3加密操作模块

入口参数:字节数组

出口值:经DES算法加密过的字节数组

代码实现:

private byte[] encryptByDES(byte[] bytP,byte[] bytKey) throws Exception{

DESKeySpec desKS = new DESKeySpec(bytKey); //新建一个DESKeySpec对象,bytKey 位密钥

SecretKeyFactory skf = SecretKeyFactory.getInstance("DES"); //用秘密密钥工厂生成DES密钥规范。

SecretKey sk = skf.generateSecret(desKS); //根据密钥规范生成密钥

Cipher cip = Cipher.getInstance("DES"); //生成一个DES转换的Cipher对象 cip.init(Cipher.ENCRYPT_MODE,sk); //用密钥和加密模式初始化cip

return cip.doFinal(bytP);

}

3.4解密模块

入口参数:指定文件路径和密钥

出口值:不是密文,提示“不是合法的加密文件!”

解密成功,提示“解密成功”并按指定路径给出解密明文

密码长度不等于48,提示“密码长度必须等于48!”

密码错误,异常处理,提示“解密失败,请核对密码!”

代码实现:

private void decrypt(File fileIn,String sKey){

try{

if(sKey.length() == 48){ //密钥长度等于48成立

String strPath = fileIn.getPath();

if(strPath.substring(strPath.length()-5).toLowerCase().equals(".tdes")) strPath = strPath.substring(0,strPath.length()-5);

//判断指定文件是否是密文,不是则返回

else{

JOptionPane.showMessageDialog(this,"不是合法的加密文件!","提示",JOptionPane.OK_OPTION);

return;

}

JFileChooser chooser = new JFileChooser();

chooser.setCurrentDirectory(new File("."));

chooser.setSelectedFile(new File(strPath)); //用户指定要保存的文件

int ret = chooser.showSaveDialog(this);

if(ret==JFileChooser.APPROVE_OPTION){

byte[] bytK1 = getKeyByStr(sKey.substring(0,16));

byte[] bytK2 = getKeyByStr(sKey.substring(16,32));

byte[] bytK3 = getKeyByStr(sKey.substring(32,48));

FileInputStream fis = new FileInputStream(fileIn);

byte[] bytIn = new byte[(int)fileIn.length()];

for(int i = 0;i< fileIn.length();i++){

bytIn[i] = (byte)fis.read(); } //解密

byte[] bytOut =

decryptByDES(decryptByDES(decryptByDES(bytIn,bytK3),bytK2),bytK1);

//反复调用加密操作模块

File fileOut = chooser.getSelectedFile();

fileOut.createNewFile();

FileOutputStream fos = new FileOutputStream(fileOut);

for(int i = 0;i< bytOut.length;i++){

fos.write((int)bytOut[i]);

}

fos.close(); //按指定路径输出明文

JOptionPane.showMessageDialog(this,"解密成功!","提示",JOptionPane.OK_OPTION);

}

}

else JOptionPane.showMessageDialog(this,"密码长度必须等于48!","错误信息",JOptionPane.ERROR_MESSAGE);

}

catch(Exception e){

JOptionPane.showMessageDialog(this,"解密失败,请核对密码!","提示",JOptionPane.OK_OPTION); //异常处理

}

}

3.5 解密操作模块

入口参数:字节数组

出口值:经DES算法解密过的字节数组

代码实现:

private byte[] decryptByDES(byte[] bytE,byte[] bytKey) throws Exception{

DESKeySpec desKS = new DESKeySpec(bytKey);

SecretKeyFactory skf = SecretKeyFactory.getInstance("DES");

SecretKey sk = skf.generateSecret(desKS);

Cipher cip = Cipher.getInstance("DES");

cip.init(Cipher.DECRYPT_MODE,sk); //用密钥和解密模式初始话cip return cip.doFinal(bytE);

}

3.6转换模块

3.6.1 转换模块一

入口参数:密码的字符形式

出口值:字节数组形式

代码实现:

private byte[] getKeyByStr(String str){

byte[] bRet = new byte[str.length()/2]; //新建字节数组,长度为字符串的一半 for(int i=0;i< str.length()/2;i++){

Integer itg =new Integer(16*getChrInt(str.charAt(2*i))+ getChrInt(str.charAt(2*i+1))); //从0位开始,偶数位转换为10进制乘16加上奇数为转换为10进制所得的值复给itg

bRet[i] = itg.byteValue();

}

return bRet;

}

3.6.2 转换模块二

入口参数:单个字符

出口值:字符从16进制转换成的10进制数

代码实现:

private int getChrInt(char chr){

int iRet=0; //初值为0

if(chr=="0".charAt(0)) iRet = 0;

if(chr=="1".charAt(0)) iRet = 1;

if(chr=="2".charAt(0)) iRet = 2;

if(chr=="3".charAt(0)) iRet = 3;

if(chr=="4".charAt(0)) iRet = 4;

if(chr=="5".charAt(0)) iRet = 5;

if(chr=="6".charAt(0)) iRet = 6;

if(chr=="7".charAt(0)) iRet = 7;

if(chr=="8".charAt(0)) iRet = 8;

if(chr=="9".charAt(0)) iRet = 9;

if(chr=="A".charAt(0)) iRet = 10;

if(chr=="B".charAt(0)) iRet = 11;

if(chr=="C".charAt(0)) iRet = 12;

if(chr=="D".charAt(0)) iRet = 13;

if(chr=="E".charAt(0)) iRet = 14;

if(chr=="F".charAt(0)) iRet = 15;

return iRet;

}

}

3.7 文件选择模块

出口值:被选文件的路径

代码实现:

class FilePanel extends JPanel{

FilePanel(String str){

JLabel label = new JLabel(str);

JTextField fileText = new JTextField(35);

JButton chooseButton = new JButton("浏览...");

this.add(label);

this.add(fileText);

this.add(chooseButton);

clickAction ca = new clickAction(this);

chooseButton.addActionListener(ca);//在面板加入文本框,“浏览”按钮,设置按钮监听器

}

public String getFileName(){ //容器中第一个组件为文本框

JTextField jtf = (JTextField)this.getComponent(1);

return jtf.getText();

}

private class clickAction implements ActionListener{ //由类实现接口clickAction(Component c){

cmpt = c;

}

public void actionPerformed(ActionEvent event){ //触发执行操作

JFileChooser chooser = new JFileChooser();

chooser.setCurrentDirectory(new File("."));

int ret = chooser.showOpenDialog(cmpt);

if(ret==JFileChooser.APPROVE_OPTION){

JPanel jp = (JPanel)cmpt;

JTextField jtf = (JTextField)jp.getComponent(1);

jtf.setText(chooser.getSelectedFile().getPath()); //弹出文件选择框,

选择文件,返回当前文件的路径

}

}

private Component cmpt;

}

}

3.8密码生成模块

class KeyPanel extends JPanel{

KeyPanel(String str){

JLabel label = new JLabel(str);

JTextField fileText = new JTextField(35);

JButton chooseButton = new JButton("随机产生");

this.add(label);

this.add(fileText);

this.add(chooseButton);

clickAction ca = new clickAction(this);

chooseButton.addActionListener(ca);

} //返回生成的密码(48个字符长度)

public String getKey(){

JTextField jtf = (JTextField)this.getComponent(1);

return jtf.getText();

}

private class clickAction implements ActionListener{

clickAction(Component c){

cmpt = c;

}

public void actionPerformed(ActionEvent event){

try{

KeyGenerator kg = KeyGenerator.getInstance("DES"); //按DES密钥规范生成密钥生成器

kg.init(56); //初始化,密钥长度为56

Key ke = kg.generateKey();

byte[] bytK1 = ke.getEncoded();

ke = kg.generateKey();

byte[] bytK2 = ke.getEncoded();

ke = kg.generateKey();

byte[] bytK3 = ke.getEncoded();

JPanel jp = (JPanel)cmpt;

JTextField jtf = (JTextField)jp.getComponent(1);

jtf.setText(getByteStr(bytK1)+getByteStr(bytK2)+getByteStr(bytK3));

}

catch(Exception e){ //异常处理

e.printStackTrace();

}

}

private String getByteStr(byte[] byt){ //将密码转换为16进制String strRet = "";

for(int i=0;i< byt.length;i++){

strRet += getHexValue((byt[i]&240)/16);

strRet += getHexValue(byt[i]&15);

}

return strRet;

}

private String getHexValue(int s){ //转换为16进制字符形式String sRet=null;

switch (s){

case 0: sRet = "0";break;

case 1: sRet = "1";break;

case 2: sRet = "2";break;

case 3: sRet = "3";break;

case 4: sRet = "4";break;

case 5: sRet = "5";break;

case 6: sRet = "6";break;

case 7: sRet = "7";break;

case 8: sRet = "8";break;

case 9: sRet = "9";break;

case 10: sRet = "A";break;

case 11: sRet = "B";break;

case 12: sRet = "C";break;

case 13: sRet = "D";break;

case 14: sRet = "E";break;

case 15: sRet = "F";

}

return sRet;

}

private Component cmpt;

}

}

四、调试分析

4.1调试过程中遇到的问题

问题一:怎样判断一个文件是已经加密了的文件。

问题描述:在对文件加密之后,要怎样来判断这个文件是已经加密了的,不需要再进行加密操作了。

解决办法是:在生成的加密文件名后加一个“.tdes”扩展名

String fileOut = fileIn.getPath() + ".tdes";

在要对选中文件进行加密时,先判断文件名的后5为是不是“.tdes”,是就表示这个文件是已经加密了的

if(strPath.substring(strPath.length()-5).toLowerCase().equals(".tdes")){

JOptionPane.showMessageDialog(this,"该文件已加密!","提示",JOptionPane.OK_OPTION);

return;

}

问题二:DES算法设计

问题描述:要将DES算法编写成程序,步骤繁琐且复杂,非常容易出错。

解决方法:在Java帮组文档中发现有一个秘密密钥工厂类SecretKeyFactory,得知Java 本身就可以进行DES算法操作,所以调用这个类,对密钥进行操作可以省去很多步骤。

DESKeySpec desKS = new DESKeySpec(bytKey);

SecretKeyFactory skf = SecretKeyFactory.getInstance("DES");

SecretKey sk = skf.generateSecret(desKS);

Cipher cip = Cipher.getInstance("DES");

cip.init(Cipher.ENCRYPT_MODE,sk); (加密)

cip.init(Cipher.DECRYPT_MODE,sk); (解密)

4.2对设计与实现的回顾讨论和分析

在程序设计之初,一直考虑的是如何用语言来实现DES算法,发现Java对DES算法支持以后大大减少了工作量,可以说用Java语言是程序实现的一个成功之处。Java语言具有简单、安全、可移植、面向对象、健壮、多线程、体系结构中立、解释执行、高性能、分布式和动态等主要特点。我想只有在不断的使用以后菜能体会到,在发现Java拥有秘密密钥工厂后更是感受到它的强大。Java帮助文档对于使用Java编程是非常有帮助的,对Java 语言的了解也更方便。

程序利用Java图形界面设计了一个方便用户操作的窗口,使得程序运行的时候更想是个封装好的运用程序,不过我知道离这个还是有一定距离的,界面所能实现的也就几个操作而已。如果程序要再做的强大点,可以引入其他的加密算法共用户选择,还可以设计成同时对多个文件进行加密。

java课程设计之贪吃蛇

系统描述 (1) 1.1本设计的目的和意义 (1) 1.2设计的主要内容 (1) 1.3设计要达到的目标 (2) 1.4设计需要实现的功能和目标 (2) 1.5游戏设计环境 (2) 二分析与设计 (3) 2.1 游戏处理流程 (3) 2.2需求分析 (4) 2.3功能模块设计 (4) 2.4详细设计 (8) 三系统测试 (19) 四心得体会 (21) 五参考文献 (22) 六附录 (24)

基于Java的游戏“贪吃蛇”的设计和实现 内容提要: “贪吃蛇”游戏是一个经典的游戏,它因操作简单、娱乐性强而广受欢迎。本文基于Java技术和JBuilder开发环境,开发了一个操作简单、界面美观、功能较齐全的“贪吃蛇”游戏。整个游戏程序分为二个功能模块,六个类模块,实现了游戏的开始、暂停、结束。通过本游戏的开发,达到学习Java技术和熟悉软 件开发流程的目的。 一系统描述 1.1本设计的目的和意义 贪吃蛇游戏一款非常经典的手机游戏,因为它比较简单有趣,无论老少都比较适合。贪吃蛇的设计对每一个Java语言设计者进行语言提高和进阶都是一个很好的锻炼机会。 贪吃蛇游戏的设计比较复杂,它涉及面广、牵涉方面多,如果不好好考虑和设计,将难以成功开发出这个游戏。在这个游戏的设计中,牵涉到图形界面的显示与更新、数据的收集与更新,并且在这个游戏的开发中,还要应用类的继承机制以及一些设计模式。因此,如何设计和开发好这个贪吃蛇游戏,对于提高Java开发水平和系统的设计能力有极大的帮助。在设计开发过程中,需要处理好各个类之间的继承关系,还要处理各个类相应的封装,并且还要协调好各个模块之间的逻辑依赖关系和数据通信关系。 正是因为如此,本次毕业设计的目的在于学习Java程序设计基本技术,学习用JBuilder开发Java程序的相关技术,熟悉游戏“贪吃蛇”的需求,熟悉项目开发的完整过程。学会怎样进行一个项目的需求分析、概要设计、详细设计等软件开发过程,熟练地掌握Java程序设计的基本技术和方法,熟练地掌握JBuilder环境的使用方法,培养起初步的项目分析能力和程序设计能力。 1.2设计的主要内容 贪吃蛇游戏设计与实现,主要分为以下二个模块:游戏主界面模块游戏控制模块。在此只实现游戏的游戏主界面模块、游戏控制模块。并且只是实现开始、暂停、退出等功能。

Java课程设计题目2

面向对象课程设计题目 1、个人通信录管理信息系统的设计与实现 目的:通过本题目的设计,加深对面向对象程序设计技术的理解,掌握利用数据库编写小型程序的基本过程和方法。 任务: 1)利用面向对象编程技术,完成个人信息的存储管理; 2)选择系统开发平台(JAVA或.NET)和软件架构(C/S、单机版); 3)要求系统能够对联系人的系统进行录入、查询、编辑、导入和导出等。 2、个人电子相册的设计与实现 目的:掌握一种开发平台,编写出具有高交互性应用程序。 任务: 1)分析现有的电子相册的具体功能; 2)选择一种开发平台(JAVA或.NET)编写电子相册应用; 3)个人电子相册应该具备用户注册、照片浏览、创建影集、照片旋转、放大等各种基本功能。 3、音像租赁管理系统的开发与实现 目的:通过资料收集,了解音像租赁连锁店的基本业务需求,完成系统需求分析和概要设计,采用C/S架构完成一个简单的光盘租赁管理系统的开发。 任务: 1)音像租赁连锁店的基本业务需求,完成需求分析报告; 2)利用JAVA编写一个基本功能的光盘租赁管理系统,包括客户信息管理、音像资料管理、音像检索、业务统计等;

4、学生综合信息管理信息系统的设计与实现 目的:通过实际编写一个学生综合信息管理软件,将所学多门课程的技能、技巧(面向对象系统分析、变量命名、软件模块设计、数据库访问等)加以综合运用,达到较大规模软件独立设计与开发的能力。 任务: 1)选择JAVA或.NET完成一个桌面架构的学生综合信息管理软件; 2)软件可以对学院大学生综合信息(姓名、学号、成绩、籍贯、家庭所在地、特长、宿舍号等)进行管理(录入、删除、修改)、统计、分析(排 序)、查询与打印 3)课程设计报告要求涵盖需求分析、概要设计、详细设计的主要内容,包括系统功能定义、模块划分、对象设计与实现的技术细节。 5、家庭财务管理信息系统设计与开发 目的:通过实际编写一个家庭财务管理软件,将所学多门课程的技能、技巧(面向对象系统分析、变量命名、软件模块设计、数据库访问、数理统计分析等)加以综合运用,达到较大规模软件独立设计与开发的能力。 任务: 1)选择者JAVA或.NET完成一个桌面架构的学生综合信息管理软件; 2)软件能够对家庭的收入、支出进行分类统计,用户可以自定义收入、指出的类别,自定义分类查询和统计的条件。系统可以按照用户定义自动 生成统计报表(月报、季报、年报)。通过财务分析,对家庭收支提出 改进建议; 3)课程设计报告要求涵盖需求分析、概要设计、详细设计的主要内容,包括系统功能定义、模块划分、对象设计与实现的技术细节。

JAVA课程设计报告

《JA V A程序设计》 课程设计报告 设计题目:学生信息管理系统学院名称:信息工程学院 专业班级:13计本1 姓名: 学号:

目录 一需求分析。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。3 二概要设计。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。3 三详细设计。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。3 3.1 数据库设计。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。3 3.2 模块及窗体设计。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。3 3.2.1 数据库模块设计。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。3 3.2.2 用户登录识别模块。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。5 3.2.3用户信息管理模块。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。6 (1)密码修改。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。6 (2)用户信息添加和删除。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。8 3.2.4 学生息管理模块。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。10 (1)添加信息。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。10 (2)信息查看。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。11 (3)信息修改。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。12 (4)删除信息。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。14 3.2.5 系统管理模块。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。15 3.2.6 主窗体菜单设计。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。15 四软件测试。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。15 五总结。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。15 参考资料:.......................................................17

java课程设计参考题目

参考题目 选题原则:所完成的系统应能够在生活、学习中使用,以实用性为主。模仿生活、学习中使用到的各种软件,做mini版本。开发的目标是自己、同学愿意使用你所开发的软件完成一些简单任务。从小功能着手,一点点的添加功能。添加一个功能就运行试试,减少越来越难于调试的可能。也可自选。jsp或java完成都可。 1.文件复制 完成一个程序,这个程序可以将指定文件夹中的内容复制到另一个文件夹中去。 设计要求: 1)实现文件夹复制; 2)程序中需要考虑输入输出异常处理; 3)用户可以指定不同的参数:用-ext指定要复制的文件的扩展名,可以 同时指定多个扩展名;用-empty指定不复制空目录;用-zip表示进行压缩; 还可以增加其它选项 4)在dos控制台窗口环境下,通过命令行参数运行程序,如: 2.图片浏览器 类似于ACDSEE的图片浏览器 设计要求: 1)可以对图片进行不同的分类,并能够按分类显示 2)备份功能,用压缩实现用户选定文件的备份,用户指定文件的方式 要多样,如在分类上、在实际文件夹上。 3)幻灯功能,通过分类、实际文件夹等多种方式指定要幻灯浏览的图 片; 3.压缩文件浏览器 仿照Winrar浏览压缩文件。 设计要求: 1)能够以图形方式显示zip、tar、jar压缩文件中的内容

2)能解压用户选定的文件到选定的目录,注意winrar中指定解压整个 目录的方式 3)能够对压缩文件增加注释 4.文件加密工具 能够对文件、文件夹进行加密,可以由用户选择加密算法。 设计要求: 1)图形界面选定加密、解密的文件。 5.提醒簿(使用数据库) 仿照雪狐提醒簿。 设计要求: 1)由用户定义时间及提醒的内容; 2)定时时间到弹出窗口提醒或使用其它方式; 3)用户可以更改、删除提醒; 4)提醒的方式中包括使用邮件; 5)可以浏览提醒,已完成和未完成使用不同的图标; 6)用户可以注册、登录,登录的显示属于自己的提醒事项; 7)可以导出、导入提醒。 6.部门员工管理系统(使用数据库) 图形界面实现对部门、员工的管理。部门可以增、删、改,员工可以增、删、改及在不同的部门间调动。部门放JComboBox中,所属员工信息用多个JTextField 或JTable显示都可。要用菜单实现不同的功能。 7.备忘录(使用数据库) 设计要求: 1)系统界面的左侧是日历,该日历可以按年份前后翻动,在某年内按 月可以前后翻动; 2)单击选定的日期,系统界面的右侧显示相应的记事,可增、删、改; 3)每日的记事可有多条。 8.学生成绩管理系统(使用数据库) 功能要求: 2

JAVA课程设计题目

Java课程设计题目 一、课程设计的目的 为了进一步巩固java程序设计课程所学到的知识,深刻把握Java语言的重 要概念及其面向对象的特性,锻炼学生熟练的应用面向对象的思想和设计方法解决实际问题的能力,开设了一周的Java程序设计课程设计。 通过此次课程设计,巩固所学java语言基本知识,增进Java语言编辑基本功,掌握JDK、Editplus、Eclipse、JCreator等开发工具的运用,拓宽常用类库的应用。使学生通 过该教学环节与手段,把所学课程及相关知识加以融会贯通,全面掌握Java语言的编程 思想及面向对象程序设计的方法,为今后从事实际工作打下坚实的基础。 二、课程设计的基本要求 1、明确题目要求,进行需求分析; 2、进行功能设计,编写设计说明; 3、进行程序设计与调试; 4、对设计过程进行系统的总结; 5、界面美观大方; 6、完成设计报告 7、课程设计建议在Editplus +JDK、JCreator +JDK、myeclipse平台上开发、调试。 8、 Java源程序应加上详尽的注释语句,对所设计的类、属性、方法说明其用途,对方法的调用说明其用意和使用参数的原因。特别是有深刻理解、有独 特见解的地方,用注释语句加以说明。 三、课程设计的主要内容 利用学到的编程知识和编程技巧,通过具体项目的分析、设计和开发,掌握开发Java大型软件项目过程中所需要的软件技术并熟悉软件。 可以以小组为单位,每组1至2名学生,在教师的指导下,每组完成一个题目。题目可由下面提供的选题中选择或学生自选经教师审核后方可。该组每个同学承担题目的不同部分,每位同学的课程设计报告必需独立完成。 题目类型大致分配如下: 1、网络通讯类,编制网络聊天(Chat)程序,以下简称“网络”类。

java课程设计贪吃蛇游戏设计

前言 Java最初被命名为Oak,目标设定在家用电器等小型系统的编程语言,来解决诸如电视机、电话、闹钟、烤面包机等家用电器的控制和通讯问题。由于这些智能化家电的市场需求没有预期的高,Sun放弃了该项计划。就在Oak几近失败之时,随着互联网的发展,Sun看到了Oak在计算机网络上的广阔应用前景。于是改造了Oak,以“Java”的名称正式发布。 Java 编程语言的风格十分接近C、C++语言。Java是一个纯的面向对象的程序设计语言,它继承了 C++ 语言面向对象技术的核心。Java舍弃了C ++语言中容易引起错误的指针(以引用取代)、运算符重载(operator overloading)、多重继承(以接口取代)等特性,增加了垃圾回收器功能用于回收不再被引用的对象所占据的内存空间,使得程序员不用再为内存管理而担忧。在 Java SE 1.5 版本中,Java 又引入了泛型编程(Generic Programming)、类型安全的枚举、不定长参数和自动装/拆箱等语言特性。 Java 不同于一般的编译执行计算机语言和解释执行计算机语言。它首先将源代码编译成二进制字节码(bytecode),然后依赖各种不同平台上的虚拟机来解释执行字节码。从而实现了“一次编译、到处执行”的跨平台特性。不过,每次的编译执行需要消耗一定的时间,这同时也在一定程度上降低了 Java 程序的运行效率。但在J2SE 1.4.2 发布后,Java 的执行速度有了大幅提升。 与传统程序不同,Sun 公司在推出 Java 之际就将其作为一种开放的技术。全球数以万计的 Java 开发公司被要求所设计的 Java 软件必须相互兼容。“Java 语言靠群体的力量而非公司的力量”是 Sun 公司的口号之一,并获得了广大软件开发商的认同。这与微软公司所倡导的注重精英和封闭式的模式完全不同。 Sun 公司对 Java 编程语言的解释是:Java 编程语言是个简单、面向对象、分布式、解释性、健壮、安全与系统无关、可移植、高性能、多线程和动态的语言。

java课程设计题目

java课程设计题目 设设HoMEWORK2012-02-2819:23 要求设明, 1.人一设~每设设设设一设目~如果列出多版本~只需要完成其中一版本两个个个即 可 2.由设委设设设设设各设设及其设目~下周以设子模式提交设目列表名设学档 3.每设必设完成相设的UML设;至少需要包括用例设、设设、设序设或者设作设,~UML 设可有Visio或者Rose或者StarUML或其他设似的工具完成 4.第六周设始机抽设设大家演示设述从随 设目列表如下, 1.打字游设(JavaGUI本地版/JSP版本/Javascript) 2.设文件设行明文加密(JavaGUI本地版) 3.在设设店设设站网(WEB版本) 4.5子棋游设(设版网/WEB版) 5.俄设斯方设(设版网/WEB版) 6.音设播放器(JavaGUI本地版) 7.设子相册(JavaGUI本地版) 8.多人聊天室((JavaGUI本地版/WEB版)9.模设考设系设(WEB版) 10.克游设扑(JavaGUI本地版/WEB版) 设设设明, 1.打字游设(JavaGUI本地版/JSP版本/Javascript)

设设背设设和打字速度, 可根据一片文章自设设入设设 整设设下落或者淡入淡出个 同设多设设出设个 设设入设设的设设分析设设功能 设分 2.设文件设行明文加密(JavaGUI本地版) DEC加解密,需要密设~可以解密 3.在设设店设设站网(WEB版本) 设设目的目的是设设一设合站~设设《在设设店》的基本功能~如管理设设~上设个网网 售网设设等功能。要求站能设布到Internet上。设站采用网 Jsp+JavaBean+JDBC+MySql|SQLServer等技设架~服设器端采用框Tomcat服设器。 4.5子棋游设(设版网/WEB版) 设设程序~完成下述功能,在大于9设的方形格棋设上~放置黑白色棋子条网两~两网弈两条人各设一色~通设设设~可以在任何设的交点上放置棋子~同色棋子~先同行、同列或者同设角设上5设设成一设者设设。条 5.俄设斯方设(设版网/WEB版) 设设程序~完成下述功能, 完成一可以人通设设设设的俄设斯方设游设~每一方都可以在自己的幕个两个网屏 上看到设方的前游设~游设先设束的一方设失设者当状况 6.音设播放器(JavaGUI本地版)

2013级JAVA课程设计题目

Java课程设计题目 一、课程设计总体要求: 本次课程设计是对前面学过的所有面向对象的编程思想以及编程方法的一个总结、回顾和实践,因此,开始设计前学生一定要先回顾以前所学的内容,明确本次作业设计所要用到的技术点并到网上搜索以及查阅相关的书籍来搜集资料。通过编写一个基于JA V A的应用系统综合实例,来掌握Java语言编程技巧。 重要说明日程说明: 1、4月21日前分组选题,查询资料,21-27日程序设计以及上机调试。最多2人一组。 2、设计报告打印一份,并将电子版以”13信算xx班第XX组报告.rar”的压缩包发到邮 箱:325822013@https://www.wendangku.net/doc/4410799450.html,邮箱。 3、压缩包里包含:设计报告的word版,word名称参考说明2,程序源代码文件。 注意:4月27日23点59分之后不再接收电子以及纸质稿,逾期成绩一律按不及格计算,联系方式qq:325822013,TEL:670705。 机房开放安排说明: 1.机房地点:求中502、503 2.时间安排共开放2.5天: 21日(周一):1-2节信算1、2班/ 3-4节数学1、2班/ 5-6节信算3班 23日(周三)全天,25日(周五)上午自由开放 二、参考题目及要求: 1、编写一个记事本程序(2人) 要求:用图形用户界面实现。 能实现编辑、保存、另存为、查找替换等功能。 提示:使用文件输入输出流。 2、ATM柜员机模拟程序(3人) 要求:使用图形用户界面。当输入给定的卡号和密码(初始卡号和密码为123456)时,系统能登录ATM柜员机系统,用户可以按照以下规则进行: 1、查询余额:初始余额为10000元 2、A TM取款:每次取款金额为100的倍数,总额不超过5000元,支取金额不允许透支。 3、A TM存款:不能出现负存款。 4、修改密码:新密码长度不小于6位,不允许出现6位完全相同的情况,只有旧密码正确,新密码符合要求,且两次输入相同的情况下才可以成功修改密码。 3、超市收银系统(3人) 要求:使用图形用户界面。 由收银员输入顾客的会员卡卡号(若有卡)、所购商品的货号等。从数据库中取出有关价格信息,再把这些信息返回给收银台。同时把该收银台的销售总量和有关种类商品的剩余量以及该持卡顾客的消费情况交数据库存储以供查询。 另外,对没有卡的消费情况不记录该顾客的消费情况等个人信息。如果一个未持卡顾客一次购物满200元,可为其发放一张会员卡,以后在该商场购物可向9折优惠。

Java课程设计之贪吃蛇

Java课程设计之贪吃蛇 安阳工学院计算机学院 JAVA课程设计报告 专业班级: 学生姓名: 学生学号: 小组成员: 指导教师姓名: 宋强 目录 一选题目的与系统概述 (1) 1.1选题目的 (1) 1.2系统概述.................................................................................1 二系统可行性分析与相关技术背景分析 (2) 2.1系统可行性分析 (2) 2.2相关技术背景分析.....................................................................2 三系统设计与关键技术 (3) 3.1系统设计 (3) 3.2关键技术.................................................................................5 四系统测试与操作实施方法.........................................................9 五系统设计总结与回顾 (11) 六参考文献 (12) 一、选题目的与系统概述 1.1 选题目的 贪吃蛇游戏是一款非常经典的游戏,因为它比较简单有趣,无论老少都比较适合。贪吃蛇的设计对每一个Java语言设计者进行语言提高和进阶都是一个很好的锻炼机会。

在这个游戏的设计中,牵涉到图形界面的显示与更新、数据的收集与更新,并且在这个游戏的开发中,还要应用类的继承机制以及一些设计模式。因此,如何设计和开发好这个贪吃蛇游戏,对于提高Java开发水平和系统的设计能力有极大的帮助。在设计开发过程中,需要处理好各个类之间的继承关系,还要处理各个类相应的封装,并且还要协调好各个模块之间的逻辑依赖关系和数据通信关系。 正是因为如此,本次设计的目的在于学习Java程序设计基本技术,学习用Netbeans开发Java程序的相关技术,熟悉游戏“贪吃蛇”的需求,熟悉项目开发的完整过程。学会怎样进行一个项目的需求分析、概要设计、详细设计等软件开发过程,熟练地掌握Java程序设计的基本技术和方法,熟练地掌握Netbeans环境的使用方法,培养起初步的项目分析能力和程序设计能力。 1.2 系统概述 1.2.1 设计的主要内容 贪吃蛇游戏设计与实现,主要分为以下二个模块:游戏主界面模块和游戏控制模块。在此只实现游戏的游戏主界面模块、游戏控制模块。可实现开始、暂停、改变速度,更换颜色等功能。 1.2.2 设计要达到的目标 本次设计要达到的目标分别从以下模块进行阐述: 游戏主界面模块: 游戏的主界面是进入游戏后,能够给玩家第一感官的部分,主要包括游戏场景、状态栏、颜色设置、网格模式、及相关提示信息等。从很大程度上决定了玩家对游戏的兴趣问题,因此,游戏的主界面应该力求美观,爽心悦目。 游戏控制模块: 这个模块是游戏的中心环节,主要完成控制游戏的开始、暂停等功能。为了能

java课程设计要求与题目

《面向对象程序设计》综合实验指导书一.课程设计的目的和任务 《面向对象程序设计》课程设计是软件工程专业本科学生在学习完《面向对象程序设计》课程之后的一个重要的实践环节。要求学生在教师的指导下,综合运用在《面向对象程序设计》课程中学过的面向对象程序设计思想与Java编程技巧,独立完成一项较为完整、并具有一定难度的课程设计任务,加深对面向对象程序设计思想的理解,掌握利用Java语言编写具体的应用程序。培养学生的团队合作精神、良好的程序设计风格以及了解应用程序的设计开发过程和Java程序编程与测试的能力。二.总体要求: 1、每个班分若干个组,每组2-3人(自由组合)课程设计题目由任 课老师指定; 2、人员分工:组长1人、组员1到2人。组长可由小组人员自行选出 或自荐,组长的职责是负责与老师交流,合理安排分配本组的各项任务,任务有:系统总体设计、编码、测试、写文档。 3、程序编码总体要求: 编程工具统一使用Eclipse。 统一使用Java的AWT组件进行GUI编程(或Applet编程), 必须有登录界面,登录的用户名和密码为组长的名字的全 拼;非Applet程序要求有一个框架窗口,关闭窗口时要注意 处理窗口事件退出程序。 程序编码时,必须严格遵守Java程序标识符的一般约定,并 要加适量的注释。 4、程序编码完成后,一定要进行严密的测试工作。 5、文档内容要求: 封面(见封面文件)。以下每个内容为一章; 项目计划(内容是:小组人员名单与所负责的工作)。 程序详细功能描述(描述你的程序能完成什么功能)。要求 200字左右。 程序使用说明(对程序的每个操作步骤的屏幕画面进行载 图,并加以文字说明)。 此次课程设计的编程心得。要求每人50字以上。 文档的字体与大小,统一采用“宋体五号字”;要将以上内容 合写成一篇完整的文档;文档头要加入标题和目录索引。 6、程序完成后,要提交文档与程序(包括源码,每组提交一份),

java贪吃蛇课程设计

1设计目的 1.1背景 近年来,Java作为一种新的编程语言,以其简单性、可移植性和平台无关性等优点,得到了广泛地应用,特别是Java与万维网的完美结合,使其成为网络编程和嵌入式编程领域的首选编程语言。JBuilder是Borland公司用于快速开发Java应用的一款优秀的集成开发环境,它以其友好的开发界面、强大的组件支持等优点,得到广大程序员的接受和认可。 “贪吃蛇”游戏是一个经典的游戏,它因操作简单、娱乐性强而广受欢迎。本文基于Java技术和JBuilder开发环境,开发了一个操作简单、界面美观、功能较齐全的“贪吃蛇”游戏。整个游戏程序分为二个功能模块,六个类模块,实现了游戏的开始、暂停、结束。通过本游戏的开发,达到学习Java技术和熟悉软件开发流程的目的。 本文在介绍Java相关技术和国内外发展现状的基础上,对“贪吃蛇”游戏的整个生命周期的各个开发阶段进行了详细地介绍。首先,分析了开发本游戏软件的可行性,重点分析本设计所采用的技术的可行性。其次,从游戏主界面等几方面,分析了本游戏的功能需求;从可使用性和安全性方面分析了属性需求。然后,进行了游戏的概要设计和详细设计,这也是本文的重点。概要设计给出二个功能模块的主框架以及六个类模块的函数调用关系;详细设计介绍了Java2标准运行环境的配置,重点给出各个类模块的程序流程图以及UML图,列表介绍了各个类包含的变量、使用的方法,展示了游戏的界面。为了保证程序代码的正确性和功能实现的可靠性,本文还介绍了游戏软件的程序调试过程和功能测试结果。 1.2目标 本软件是针对贪吃蛇小游戏的JAVA程序,利用方向键来改变蛇的运行方向,空格键暂停或继续游戏,并在随机的地方产生食物,吃到食物就变成新的蛇体,碰到壁或自身则游戏结束,否则正常运行。 2 总体设计 2.1 设计思路 本系统主要是完成贪吃蛇游戏的基本操作。用户可以自己练习和娱乐。本系统需要满足以下几点要求: (1) 利用方向键来改变蛇的运行方向。 (2) 空格键暂停或继续游戏,并在随机的地方产生食物。 (3) 吃到食物就变成新的蛇体,碰到壁或自身则游戏结束,否则正常运行。 2.2 设计说明 本系统共包括1个java源文件和7个类文件。

java课程设计实验报告

Java课程设计实验报告实验题目:打字游戏小程序 专业:计算机科学与技术系 班级:1202班 成员:

Java课程设计(打字游戏小程序) 一、课程设计目的 经过一学期的java学习,能灵活运用书中和实验中所学习的各类知识和技巧,并且能在程序开发中得以很好的运用和发挥。在以后的学习和工作中,可以从中获取很好的经验,并且锻炼自己开发程序和创新的意识。 二、课程设计内容 1.课程设计简介 设计的是一个打字的小游戏,屏幕上不断地有英文字母下落,键盘输入字母,屏幕上与输入的字母形同的就会消失,并计分,如果有没有消去的字母掉到屏幕底,将扣分。 2.设计说明 因为要进行键盘操作,所以引用了event包,还要注册事件监听。字母是随机产生的,又要用。注册了线程。还要对窗口定义坐标,防止字母出现在同一位子。并且通过一位数组来给随机出现的字母做坐标定义。主要通过一位数组来控制字母的坐标,并且通过字母坐标的改变来对整个游戏的流程进行控制。 3.设计流程图 4.实现功能 随机产生字母,运用了键盘操作当按对屏幕中出现的字母时,该字母全部消失,并且在分数上相应的增加或减少。 5.详细设计(源代码) 1) packageDownCharGame; import import import /** *下落的字母实体类 *@authorshenbf * */ publicclassCharEntity{ raw(g); } etY()>=480){ etX((int)()*580)+30); chs[i].setY(0);

chs[i].setColor(newColor((int)()*256), (int)()*256),(int)()*256))); chs[i].setCh((char)(65+(int)()*26))); } chs[i].down(); } repaint();tart(); } publicvoidkeyTyped(KeyEvente){ } publicvoidkeyPressed(KeyEvente){ } publicvoidkeyReleased(KeyEvente){ etCh()||key==chs[i].getCh()+32){ etY()

计算器设计的java课程设计报告

计算器设计的java 课程设计报告

华东交通大学课程设计课程设计题目:计算器设计 课程: Java程序设计 题目:计算器设计 年级:级 专业:信息一班 学号: 姓名: 组员: 指导教师:

课程设计(论文)任务书 基础学院信息与计算科学专业—1班 一、课程设计(论文)题目计算器的设计 二、课程设计(论文)工作自年 6 月23日起至年6月27日止。 三、课程设计(论文) 地点: 计算机中心 四、课程设计(论文)内容要求: 1.本课程设计的目的 (1)使学生掌握系统各功能模块的基本工作原理; (2)掌握Java的基本编程原理和基本的编程方法; (3)使学生学会系统调试; (4)培养学生分析、解决问题的能力; (5)提高学生的软件文档写作能力和团队合作精神。 2.课程设计的任务及要求 1)基本要求: (1)分析系统各功能模块的工作原理; (2)提出系统的设计方案; (3)对所进行编程、调试、修改。 2)创新要求: 在基本要求达到后,可进行创新设计,如:用虚函数,文件流,重载流插入运算符等。

3)课程设计论文编写要求 (1)要按照书稿的规格打印誊写设计论文; (2)论文包括目录、摘要、正文、总结等; (3)毕业论文装订按学校的统一要求完成。 4)答辩与评分标准: (1)达到课程设计的目的与要求,程序的可读性较好,并调试正确,60分; (2)能正确回答老师所提问题,可增加10分; (3)课程设计报告书写规范整齐,可增加10分; (4)心得体会认真总结,可增加10分; (5)程序有创新性,可增加10分; 成绩评定实行优秀、良好、中等、及格和不及格五个等级。不及格者需重做。 5)参考文献: (1)丁振凡.《J ava语言程序设计》清华大学出版社 (2)丁振凡.《J ava语言程序设计实验指导与习题解析》清华大学出版社 (3)http:/ /https://www.wendangku.net/doc/4410799450.html, 6)课程设计进度安排 内容天数地点

java课程设计贪吃蛇大学论文

课程设计说明书 课程名称:Java语言程序设计 设计题目:学生成绩管理系统 院系:计算机科学与信息工程学院 学生姓名:肖文 学号:14031010141 专业班级:计算机科学与技术(14嵌入) 指导教师:张阳 2015 年12月27 日

课程设计任务书 设计题目贪吃蛇小游戏程序 学生姓名肖文所在院系计科专业、年级、班14计科嵌入 设计要求: 1. 贪吃蛇游戏是大家很常见的小游戏,在生活工作之余大家可以玩它,已达到放松 各种压力的目的。 2. 游戏可以进行升级,也就是增加吃食物的难度,以便使大家更有挑战性,不觉得 太无趣。 3. 游戏界面大小可以任意指定,数据从文件读入。 4. 利用swing实现良好的GUI界面。 学生应完成的工作: 1. 贪食蛇的前移算法主要是蛇身结点前移,后面的覆盖前面的蛇身结点。依靠的调 用编写的成员方法实现。 2. 在贪吃蛇中蛇头来控制蛇的移动方向,依靠的调用编写的成员方法实现。 3. 要求用户界面采用图形用户界面,影响方向键的控制。 4. 重复的调用paint()函数来实现对界面的重绘和食物的重置。 5. 源程序中要有充分的注释,报告中要有详细的流程图。 6. 运行的结果以及图形用户界面要进行屏幕拷贝,插入报告中。 幕拷贝,插入报告中。 参考文献阅读: 1. 《Java语言程序设计》(美)Y·Daniel Liang 机械工业出版社 2. 赵毅主编.跨平台程序设计语言——Java.西安:西安电子科技大学出版社,2006 3. 王路群.Java高级程序设计.北京:中国水利水电出版社,2006 工作计划: 1,12月21日,选择该课题,然后分析结构。 2,12月21日至25日开始编写各个模块。 3,12月28日至29日,对设计的系统进行测试以及进行修改。 4,12月30日,贪吃蛇完成。 任务下达日期:2015 年12月10 日 任务完成日期:2015 年12月24 日 指导教师(签名):学生(签名):

java课程设计2013级大纲以及设计报告

珠海学院课程教学大纲 课程名称:java程序课程设计 适用专业: 2013级计算机科学与技术 课程类别:专业基础课 制订时间:2014年12月 计算机科学与技术系制

目录 1java程序课程设计教学大纲 2 java程序课程设计说明书 3 java程序课程设计报告(模板) 4 java程序课程设计成绩评定表 java程序课程设计教学大纲 (2011年制订,2014年修订) 一、课程编号: 二、前修课程:java程序设计 三、学分:2学分 四、学时: 32学时 五、课程性质与任务: 1.课程性质:《java程序课程设计》是吉林大学珠海学院计算机科学与技术系为本科生各专业开设的专业实践课。计算机科学与技术系本科生在完成《java 程序设计》课程学习后,通过本课程进入专业实践训练环节,其主要目的是使学生深入理解并实践在《java程序设计》课程中所学的有关知识,通过课程设计增强学生的实践动手能力,提高学生独立分析和解决实际问题的能力。培养学生配合完成任务的能力,为学生毕业后的实际工作打好基础。 课程设计是培养学生综合运用所学知识锻炼实践能力的重要环节,是对学生实际工作能力的具体训练和考察过程。Java语言的应用十分广泛,例如大型信息系统、通信、网络控制等。java课程设计对增强学生对基础知识的掌握和综合运用是非常必要,对后续许多专业课程的学习和实践训练都具十分重要的意义。 2.课程任务:本课程要求学生在学习了java基础编程的相关技术后,将课本中多个章节的编程技术灵活运用到一些复杂的综合例题中去,使学生了解应用问题

的分析方法和设计解决实际问题的具体过程,掌握应用java进行程序设计的基本规范和技巧,掌握面向对象编程的设计思想,重点掌握java的基本语法规则、输入输出方法、网络编程、多线程编程、小应用程序、数据库编程的综合应用。通过编程掌握调试java程序的基本技巧、模块化应用程序和测试运行复杂应用程序的基本流程。 六、课程教学基本要求提供足够多的程序设计选题,题目应覆盖面较为广泛,部分题目要具有开放性,要求每个学生根据自己的实际情况选择题目,经教师批准后即可进入实际工作阶段。 课程设计结束对每个学生进行验收,要求每个学生提交合格的课程设计报告,还要保证程序能够运行,能够讲清楚自己的工作。老师在检查过程中可针对程序提出问题,学生回答,若程序无法运行得到结果并且具有大量编译错误,而且对程序的内容无法正确解释,则实践老师可以根据实际情况给予评分为不及格,若程序可以运行,但完成的界面以及方法不够完善,则酌情扣分,若程序运行无问题,则提问回答不好的也要相应扣分。课程设计课程集中安排在第十一周。每个同学都要提交初期、中期和最后的文档,提交课程设计报告,要求在规定时间内提交文档。最后验收时,若文档不全,成绩受到一定影响。 七、学时分配表 2011年 12 月8日 java程序课程设计说明书

JAVA课程设计题目及要求.

Java课程设计题目及要求 一、课程设计总体要求: 本次课程设计是对前面学过的所有面向对象的编程思想以及编程方法的一个总结、回顾和实践,学生确定设计题目后,要明确本次课程设计所要用到的技术点,回顾之前学习的这些知识点,或者到网上搜索以及查阅相关的书籍来搜集资料。通过编写一个基于JAV A的应用系统综合实例,来掌握Java语言编程技巧。 二、参考题目及要求: 学生可选择下面题目或者自定题目,但要求具有一定难度和复杂度,是一个较为完整的应用程序。 1、编写一个记事本程序 要求: 用图形用户界面实现。 能实现编辑、保存、另存为、查找替换等功能。 提示:使用文件输入输出流。 2、编写一个计算器程序 要求: 界面模拟Windows中的计算器程序。 实现基本数学运算、函数等功能:加、减、乘、除、阶乘、正弦、余弦和指数运算。 实现要点:添加相关组件并进行按钮事件处理和键盘事件处理。

3、模拟龟兔赛跑 要求: 用图形用户界面实现。 能设置比赛时间,马匹的数量等等。 在任意时间段内马匹的速度是随机的。 开始比赛之后以动画显示赛马过程。 提示:使用多线程,赛马也可换成其他。 4、学生信息管理系统 要求: 使用图形用户界面 用数据库建立1或2个学生信息表。(不限使用哪种数据库能连接数据库并实现查询、增、删、改等功能。 5、图书信息管理系统 要求: 使用图形用户界面 用数据库建立1或2个图书信息表。(不限使用哪种数据库能连接数据库并实现查询、增、删、改等功能。 6、ATM柜员机模拟程序

要求:使用图形用户界面。当输入给定的卡号和密码(初始卡号和密码为123456时,系统能登录ATM柜员机系统,用户可以按照以下规则进行: (1、查询余额:初始余额为10000元 (2、ATM取款:每次取款金额为100的倍数,总额不超过5000元,支取金额不允许透支。 (3、ATM存款:不能出现负存款。 (4、修改密码:新密码长度不小于6位,不允许出现6位完全相同的情况,只有旧密码正确,新密码符合要求,且两次输入相同的情况下才可以成功修改密码。 7、超市收银系统 要求:使用图形用户界面。 由收银员输入顾客的会员卡卡号(若有卡、所购商品的货号等。从数据库中取出有关价格信息,再把这些信息返回给收银台。同时把该收银台的销售总量和有关种类商品的剩余量以及该持卡顾客的消费情况交数据库存储以供查询。 另外,对没有卡的消费情况不记录该顾客的消费情况等个人信息。如果一个未持卡顾客一次购物满200元,可为其发放一张会员卡,以后在该商场购物可向9折优惠。 8、电话号码查询系统。 要求:有电话录入,修改,增加,删除,按姓名查询,按电话号码查询,按部门查询,按部门显示,显示所有电话号码信息,打印等功能。 三、整体要求: 建议使用Eclipse开发环境完成作业,界面友好,代码的可维护性好,有必要的注释。

计算器设计的java课程设计报告

】 · ( 华东交通大学课程设计 课 程: Java 程序设计 题 目: 计算器设计 年 级: 2010级 专 业: 信息一班 * 学 号: 姓 名: 组 员: 指导教师: 课程设计题目:计算器设计

课程设计(论文)任务书 基础学院信息与计算科学专业2010—1 班 一、课程设计(论文)题目计算器的设计 二、课程设计(论文)工作自2013 年 6 月23日起至2013 年6月27日止。 三、课程设计(论文) 地点: 计算机中心 · 四、课程设计(论文)内容要求: 1.本课程设计的目的 (1)使学生掌握系统各功能模块的基本工作原理; (2)掌握Java的基本编程原理和基本的编程方法; (3)使学生学会系统调试; (4)培养学生分析、解决问题的能力; (5)提高学生的软件文档写作能力和团队合作精神。 2.课程设计的任务及要求 ' 1)基本要求: (1)分析系统各功能模块的工作原理; (2)提出系统的设计方案; (3)对所进行编程、调试、修改。 2)创新要求: 在基本要求达到后,可进行创新设计,如:用虚函数,文件流,重载流插入运算符等。3)课程设计论文编写要求 (1)要按照书稿的规格打印誊写设计论文; > (2)论文包括目录、摘要、正文、总结等; (3)毕业论文装订按学校的统一要求完成。 4)答辩与评分标准: (1)达到课程设计的目的与要求,程序的可读性较好,并调试正确,60分; (2)能正确回答老师所提问题,可增加10分; (3)课程设计报告书写规范整齐,可增加10分; (4)心得体会认真总结,可增加10分; (5)程序有创新性,可增加10分; [ 成绩评定实行优秀、良好、中等、及格和不及格五个等级。不及格者需重做。 5)参考文献:

java课程设计报告-万年历

山西大学Java课程设计报告 题目:万年历 班级:14 班 学号: 姓名:

2016年12月 目录 1 绪论 (1) 1.1选题目的及意义 (1) 1.2 系统概述 (1) 1.3 人员组成及分工 (1) 2 需求分析 (1) 3 总体设计 (1) 4 详细设计 (1) 5 系统实现 (2) 5.1 开发环境 (3) 5.2 关键技术 (3) 6.运行结果 (6) 7.软件测试 (7) 8.总结 (7)

9 参考文献 (8) 1.绪论 1.1选题目的及意义 选题目的:本次课程设计为课本后设计题目任选一题进行设计。思考一段时间后,我们组决定做一个万年历的设计。主要考虑到以前时间少课程内容多,JAVA课程基础内容掌握并不是很抓实,而对于设计一个万年历程序,由于其功能简单设计也相对较易,对于我们每个人的学习情况比较合适,并且通过设计这样的一个日历小组件,也能使自己对JAVA 的一些基础知识掌握的更加牢固。 1.2 系统概述 随着电子技术的不断发展,人们的不断创新,万年历已经不再局限于书本形式,而是以电脑软件或者电子产品的形式出现。让其更加便捷。在学习了JAVA课程后,将以JAVA 形式编译出一个简易的万年历。 1.3 人员组成及分工 :负责搜集查找资料 :调试程序 最后进行程序的编写与修改

2.需求分析 本程序的要求为:1.使用图形用户界面; 2.本程序能够实现日期与星期的查询。 3.可以添加或者删除日志 3.总体设计 (1)可以通过图形界面显示日历。 (2)能以月历形式显示日期与星期。 (3)支持用户自己输入年份,可以通过上一年,下一年等按钮来选择年份和月份。(4)可以添加或者删除并且点击对应日期显示日志。 4.详细设计 1. 总天数的算法:首先用if语句判断定义年到输入年之间每一年是否为闰年,是 闰年,该年的总天数为366,否则,为365。然后判断输入的年是否为定义年,若是,令总天数S=1,否则,用累加法计算出定义年到输入年之间的总天数,再把输入年的一月到要输出的月份之间的天数累加起来,若该月是闰年中的月份并且该月还大于二月,再使总天数加1,否则,不加,既算出从定义年一月一日到输出年的该月一日的总天数。 2. 输出月份第一天为星期几的算法:使总天数除以7取余得几既为星期几,若是 0,则为星期日。 3. 算出输出月份第一天为星期几的算法:算出输出月份第一天为星期几后,把该 日期以前的位置用空格补上,并总该日起一次输出天数直到月底,该月中的天数加上该月一日为星期几的数字再除以7得0换行,即可完整的输出该月的日历。 4. 查询年份必须为四位有效数字,否则不予显示。 5.显示系统时间。 6.流程图

相关文档
相关文档 最新文档