资源描述
二○○九 ~二○一○ 学年第 二 学期
应用技术学院
课程设计报告书
课程名称: 多媒体技术
班 级: 09级网络工程
学 号:
姓 名:
指导教师:
二○一○ 年 六 月
目录
1.需求分析 2
1.1课程设计题目 2
1.2课程设计要求 2
1.3系统功能需求分析 2
2.概要设计 3
3.详细设计 4
3.1界面设计 4
3.2行程编码设计 11
4.程序调试 14
4.1源文件的压缩 14
4.2源文件的解压 15
5.总结 18
1.需求分析
1.1课程设计题目
信源与信道编/解码练习。
1.2课程设计要求
1) 要求利用程序设计软件(如VC、Java、Matlab)制作一个能完成信道编/解码(海明/CRC码),信源编/解码(如行程编码)软件。
2) 基本要求为编制软件至少能根据所输入的数据完成信源、信道编解码,其中信道编码要求能产生1-2位随机错误,且能纠1位错,最后是能读取txt文件,或者直接读取图片来完成,如能对视频完成则更佳。
3) 编写的软件编译后能直接运行,验证编/解码效果,否则无效。
1.3系统功能需求分析
Ø 操作环境(软件、硬件及条件)
Windws 9x/NT/2000/XP/2003
NetBeans IDE 6.8
Ø 系统功能
此软件是在JAVA平台下编写的 ,能根据所输入的数据完成信道(海明码)、信源编解码(行程编码),其中信道编码(海明码)能产生1位随机错误,且能纠1位错,最后是能直接读取图片或txt文件来完成。
Ø 用户操作流程
编 码:
打开(选择源文件)
保存(选择目标文件)
开始编码
校验
查看所存目标文件是否压缩成功
解 码:
打开(选择已压缩的文件)
保存(选择目标文件)
开始解码
查看所存目标文件是否解压成功
2.概要设计
系统总体框架:
压 缩
检 错
打开源文件
纠 错
得到源文件
解 压
3.详细设计
本次课程设计中我主要负责界面设计和行程编码,故作以下详细介绍。
3.1界面设计
界面设计如图3-1所示:
图3-1
界面设计代码如下:
package DMTcode;
import java.io.File;
import javax.swing.JFileChooser;
import javax.swing.JOptionPane;
public class NewJFrame extends javax.swing.JFrame {
int rndChooser;
byte targetBit;
private int i;
File f1,f2;
byte[] mybyte1,mybyte2;
public NewJFrame() {
initComponents();
this.setTitle("重庆大学 09网络工程 尹力 沈小波 多媒体课程设计");
}
@SuppressWarnings("unchecked");
private void initComponents() {
jPanel1 = new javax.swing.JPanel();
jButton1 = new javax.swing.JButton();
jLabel1 = new javax.swing.JLabel();
jTextField1 = new javax.swing.JTextField();
jLabel2 = new javax.swing.JLabel();
jTextField2 = new javax.swing.JTextField();
jButton2 = new javax.swing.JButton();
jButton4 = new javax.swing.JButton();
jButton5 = new javax.swing.JButton();
jPanel2 = new javax.swing.JPanel();
jLabel3 = new javax.swing.JLabel();
jLabel4 = new javax.swing.JLabel();
jPanel3 = new javax.swing.JPanel();
jLabel5 = new javax.swing.JLabel();
jLabel6 = new javax.swing.JLabel();
jLabel7 = new javax.swing.JLabel();
jLabel8 = new javax.swing.JLabel();
jButton3 = new javax.swing.JButton();
jLabel9 = new javax.swing.JLabel();
setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE);
jPanel1.setBorder(javax.swing.BorderFactory.createTitledBorder("行程编码文件"));
jButton1.setText("打开");
jButton1.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
jButton1ActionPerformed(evt);
}
});
jLabel1.setText("源文件:");
jTextField1.setEnabled(false);
jLabel2.setText("目标文件:");
jTextField2.setEnabled(false);
jButton2.setText("保存");
jButton2.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
jButton2ActionPerformed(evt);
}
});
jButton4.setText("开始编码");
jButton4.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
jButton4ActionPerformed(evt);
}
});
jButton5.setText("开始解码");
jButton5.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
jButton5ActionPerformed(evt);
}
});
javax.swing.GroupLayout jPanel1Layout = new javax.swing.GroupLayout(jPanel1);
jPanel1.setLayout(jPanel1Layout); jPanel1Layout.setHorizontalGroup(jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGroup(jPanel1Layout.createSequentialGroup()
.addGap(38, 38, 38)
.addGroup(jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING, false)
.addGroup(javax.swing.GroupLayout.Alignment.TRAILING, jPanel1Layout.createSequentialGroup()
.addComponent(jLabel2)
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
.addComponent(jTextField2))
.addGroup(jPanel1Layout.createSequentialGroup()
.addComponent(jLabel1)
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
.addComponent(jTextField1, javax.swing.GroupLayout.PREFERRED_SIZE, 174, javax.swing.GroupLayout.PREFERRED_SIZE)))
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED, 103, Short.MAX_VALUE)
.addGroup(jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.TRAILING)
.addComponent(jButton2)
.addComponent(jButton1))
.addGap(50, 50, 50)
.addGroup(jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addComponent(jButton5)
.addComponent(jButton4))
.addContainerGap(98, Short.MAX_VALUE))
);
jPanel1Layout.setVerticalGroup(
jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGroup(jPanel1Layout.createSequentialGroup()
.addGroup(jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGroup(jPanel1Layout.createSequentialGroup()
.addGap(17, 17, 17)
.addGroup(jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
.addComponent(jLabel1)
.addComponent(jTextField1, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
.addGap(7, 7, 7)
.addGroup(jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
.addComponent(jLabel2)
.addComponent(jTextField2, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)))
.addGroup(jPanel1Layout.createSequentialGroup()
.addContainerGap()
.addGroup(jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
.addComponent(jButton1)
.addComponent(jButton4))
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
.addGroup(jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
.addComponent(jButton5)
.addComponent(jButton2))))
.addContainerGap(11, Short.MAX_VALUE))
);
getContentPane().add(jPanel1, java.awt.BorderLayout.PAGE_START);
jPanel2.setBorder(javax.swing.BorderFactory.createTitledBorder(" 文件信息"));
jPanel2.setPreferredSize(new java.awt.Dimension(442, 40));
jLabel3.setText("源文件大小:");
jLabel4.setText("目标文件大小:");
javax.swing.GroupLayout jPanel2Layout = new javax.swing.GroupLayout(jPanel2);
jPanel2.setLayout(jPanel2Layout); jPanel2Layout.setHorizontalGroup(jPanel2Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGroup(jPanel2Layout.createSequentialGroup()
.addGap(29, 29, 29)
.addComponent(jLabel3)
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED, 268, Short.MAX_VALUE)
.addComponent(jLabel4)
.addGap(200, 200, 200))
); jPanel2Layout.setVerticalGroup(jPanel2Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGroup(jPanel2Layout.createSequentialGroup()
.addGroup(jPanel2Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
.addComponent(jLabel3)
.addComponent(jLabel4))
.addContainerGap(17, Short.MAX_VALUE))
);
getContentPane().add(jPanel2, java.awt.BorderLayout.CENTER);
jPanel3.setBorder(javax.swing.BorderFactory.createTitledBorder("海明编码信息"));
jLabel6.setText("字节二进制编码:");
jLabel7.setText("字节海明编码:");
jLabel8.setText("随机出错:");
jButton3.setText("校验");
jButton3.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
jButton3ActionPerformed(evt);
}
});
jLabel9.setText("纠正:");
javax.swing.GroupLayout jPanel3Layout = new javax.swing.GroupLayout(jPanel3);
jPanel3.setLayout(jPanel3Layout);
jPanel3Layout.setHorizontalGroup(
jPanel3Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGroup(jPanel3Layout.createSequentialGroup()
.addGap(26, 26, 26)
.addGroup(jPanel3Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGroup(jPanel3Layout.createSequentialGroup()
.addComponent(jLabel7)
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED, 321, Short.MAX_VALUE)
.addComponent(jLabel9)
.addGap(186, 186, 186))
.addGroup(jPanel3Layout.createSequentialGroup()
.addComponent(jLabel8)
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED, 278, Short.MAX_VALUE)
.addComponent(jButton3)
.addGap(232, 232, 232))
.addGroup(jPanel3Layout.createSequentialGroup()
.addGroup(jPanel3Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addComponent(jLabel6)
.addComponent(jLabel5))
.addContainerGap(531, Short.MAX_VALUE))))
);
jPanel3Layout.setVerticalGroup(
jPanel3Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGroup(jPanel3Layout.createSequentialGroup()
.addContainerGap()
.addComponent(jLabel5)
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
.addComponent(jLabel6)
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
.addGroup(jPanel3Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
.addComponent(jLabel7)
.addComponent(jLabel9))
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
.addGroup(jPanel3Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
.addComponent(jLabel8)
.addComponent(jButton3))
.addContainerGap(javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))
);
getContentPane().add(jPanel3, java.awt.BorderLayout.SOUTH);
pack();
}// </editor-fold>
private void jButton1ActionPerformed(java.awt.event.ActionEvent evt) {
// TODO add your handling code here:
JFileChooser chooser=new JFileChooser();
chooser.showOpenDialog(jLabel1);
jTextField1.setText(chooser.getSelectedFile().getPath().toString());
jLabel3.setText("源文件大小:"+chooser.getSelectedFile().length()+"字节");
f1=chooser.getSelectedFile();
}
private void jButton2ActionPerformed(java.awt.event.ActionEvent evt) {
// TODO add your handling code here:
JFileChooser chooser1=new JFileChooser();
chooser1.showSaveDialog(jLabel1);
f2=chooser1.getSelectedFile();
jTextField2.setText(chooser1.getSelectedFile().getPath().toString());
jLabel4.setText("目标文件大小:"+chooser1.getSelectedFile().length()+"字节");
}
private void jButton3ActionPerformed(java.awt.event.ActionEvent evt) {
jLabel8.setText("随机出错:"+myOp.revertAndCheckhammingCode()[0]);
jLabel9.setText("纠正:"+myOp.revertAndCheckhammingCode()[1]);
}
private void jButton4ActionPerformed(java.awt.event.ActionEvent evt) {
// TODO add your handling code here:
/*调用编码方法开始压缩文件*/
if(jTextField1.getText()==null&&jTextField2.getText()==null){
JOptionPane.showMessageDialog(null, "还没有设置文件呢!");
}else{
try{
mybyte1=myOp.importFile(f1);
mybyte2=myOp.zipCode(mybyte1);
myOp.exportFile(f2, mybyte2);
jLabel4.setText("目标文件大小:"+f2.length()+"字节");
rndChooser=(int)(Math.random()*mybyte2.length);
targetBit=mybyte2[rndChooser];
jLabel5.setText("字节值:"+String.valueOf(targetBit));
jLabel6.setText("字节二进制编码:"+myOp.hammingCode(targetBit)[0]);
jLabel7.setText("字节海明编码:"+myOp.hammingCode(targetBit)[1]);
}catch(Exception e){}
}
}
private void jButton5ActionPerformed(java.awt.event.ActionEvent evt) {
/*调用解码码方法开始解压文件*/
if(jTextField1.getText()==null&&jTextField2.getText()==null){
JOptionPane.showMessageDialog(null, "还没有设置文件呢!");
}else{
try{
mybyte1=myOp.importFile(f1);
mybyte2=myOp.unzipCode(mybyte1);
myOp.exportFile(f2, mybyte2);
jLabel4.setText("目标文件大小:"+
展开阅读全文