课程设计报告范文

                     

《计算机技术综合》

课程设计

学生姓名:                   

    号:       6103105048         

专业班级:      计算机051        

指导教师:         林振荣          

00 7 4

       

1.课程设计目的 …………………………………………………2

2.课程设计题目描述和要求 ……………………………………2

3.课程设计内容 …………………………………………………2

4.课程设计总结 …………………………………………………12

5.参考书目 ………………………………………………………12

1.课程设计目的

1.加深典型的Client/Server编程;

2.理解发送和接收数据的协议匹配;

3.学会使用线程机制来建立服务器;
4.提高综合运用所学的理论知识和方法独立分析和解决问题的能力;

2.课程设计题目描述和要求

实现文件传输功能

 主要功能:

(1)有客户端和服务器端

(2)客户端可以上传各种类型的文件

(3)服务器端可以接受很多文件上传

(4)客户端发出请求后,在服务器端应答后能将文件传到服务器上

(5)实验实现时用环回测试将本机看作客户端和服务器端

3.课程设计报告内容

3.1课程设计源程序

程序1-->Client.java

import java.awt.*;

import java.awt.event.*;

import javax.swing.*;

import java.net.*;

import java.io.*;

public class Client extends JFrame implements ActionListener{

     String str="";

     private JTextField t1;

     private JLabel l1,l2;

     private JButton Exit,Ok,Open;

     private JFileChooser choose=new JFileChooser();

     private File Myfile;

     public Client(){         

           Container c=getContentPane();

           Panel p1=new Panel();

           Panel p2=new Panel();

           Panel p3=new Panel();

           c.setLayout(new GridLayout(3,1));

           p1.setLayout(new FlowLayout());

           p2.setLayout(new FlowLayout());

           p3.setLayout(new GridLayout(2,1));          

           t1=new JTextField(35);

           l1=new JLabel("",JLabel.CENTER);

           l2=new JLabel("",JLabel.CENTER);

           Exit=new JButton("退出");

           Ok=new JButton("上传");

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

           Exit.addActionListener(this);

           Ok.addActionListener(this);

           Open.addActionListener(this);

           p1.add(t1);

           p1.add(Open);

           c.add(p1);

           p2.add(Ok);

           p2.add(Exit);

           c.add(p2);

           p3.add(l1);

           p3.add(l2);

           c.add(p3);   

           setSize(500,200);

           show();

     }

     public void actionPerformed(ActionEvent e){

           str="";

           if(e.getSource()==Exit){System.exit(0);}

           try{

              if(e.getSource()==Ok){

                  if(t1.getText()!=""){

                      this.client();

                  }

              }

           }catch(Exception t){

                 System.out.println(t.toString());

           }

           if(e.getSource()==Open){

                 this.openf();

           }

    }

        public void openf(){

        int result=choose.showOpenDialog(null);

        Myfile=choose.getSelectedFile();

        if(result==JFileChooser.APPROVE_OPTION){

            t1.setText(Myfile.getPath());

        }

        else if(result==JFileChooser.CANCEL_OPTION){

            t1.setText("");

            Myfile=null;

        }

    }

    public void client(){

        byte[] ff;

        int size;

        Socket clientSocket;

        PrintStream ps;

        String fileName;

        try{

            //创建一个上传的Socket

            clientSocket=new Socket("127.1.1.1",8765);

            ps=new PrintStream(clientSocket.getOutputStream());

            size=(int)Myfile.length();

            fileName=Myfile.getName();

            BufferedReader br=new BufferedReader(new InputStreamReader(clientSocket.getInputStream()));

            String over="\n";

            byte p[]=over.getBytes();

            byte name[]=(fileName+over).getBytes();

            System.out.println(new String(name));

            //文件名

            ps.write(name);

            ps.flush();

            String s1=br.readLine();

            String tmp=String.valueOf(size)+over;

            byte bsize[]=tmp.getBytes();

            //文件大小

            ps.write(bsize);

            ps.flush();

            String s2=br.readLine();

            str="上传结束,请选择其它文件";

            l1.setText(str);

                        str="已上传的文件为'"+s1.trim()+"';大小为"+s2.trim();

            l2.setText(str);

                        //文件内容

            FileInputStream in=new FileInputStream(Myfile);

            BufferedInputStream bf=new BufferedInputStream(in);

            ff=new byte[1024];

            int c;

            while((c=bf.read(ff))!=-1){

                ps.write(ff,0,c);

            }

            ps.close();

            bf.close();

            in.close();

            clientSocket.close();

            t1.setText("");

        }catch(Exception e){

            System.out.println(e.toString());

        }

    }

    public static void main(String args[]){

        Client app=new Client();

        app.addWindowListener(new WindowAdapter(){

            public void WindowClosing(WindowEvent e){

                System.exit(0);

            }

        });

    }

}

程序2-->Server.java

import java.net.*;

import java.io.*;

import java.util.*;

class MyThread extends Thread{

    private Socket clientSocket;

    private int counter;

    public MyThread(Socket i,int c){

        clientSocket=i;

        counter=c;

    }

    //采用同步机制

    public synchronized void run(){

        try{

            DataInputStream br=new DataInputStream(clientSocket.getInputStream());

            DataOutputStream output=new DataOutputStream(clientSocket.getOutputStream());

            //文件大小

            byte[] n=new byte[225];

            br.read(n);

            output.write(n);

            output.flush();

            //文件名

            byte[] ll=new byte[255];

            br.read(ll);

            output.write(ll);

            output.flush();

            String tmpe=new String(ll);

            int a=Integer.parseInt(tmpe.trim());

            //创建文件用于保存上传的文件

            String names=new String(n);

            File Myfile=new File("d:\\");

            String files="d:\\"+Myfile.separator+(names.trim());

            FileOutputStream out=new FileOutputStream(files);

            BufferedOutputStream bw=new BufferedOutputStream(out);

            byte ff[]=new byte[1024];

            int c=0;

            //把上传的数据输出至文件

            while((c=br.read(ff))!=-1){

                bw.write(ff,0,c);

            }

            bw.close();

            output.close();

            out.close();

            br.close();

            clientSocket.close();

        }catch(Exception e){

            System.out.println(e);

        }

    }

}

public class Server{

    private static Socket clientSocket;

    private static int counter;

    public static void main(String[] args){

        int i=1;

        ServerSocket serverSocket;

        try{

            serverSocket=new ServerSocket(8765);

            while(true){

                                System.out.println("等待客户端上传文件..");

                //监听与本socket的连接并且接受它

                clientSocket=serverSocket.accept();

                //创建线程,将上传数据写至服务器的文件中

                Thread t=new MyThread(clientSocket,i);

                t.start();

              System.out.println("上传成功!");

                i++;

            }

        }catch(Exception e){

            System.out.println(e);

        }

    }                      

}

3.2实验结果

① 测试程序结果时,要先运行服务器端程序Server.Java,让服务器端准备好接受客户端请求,然后才能运行客户端程序,如图1。

图 1 等待接受上传文件

② 运行客户端程序Client.Java,效果如图2。

图 2

③ 点击“浏览”,弹出文件对话框,如图3所示。

图 3

④ 找到某个目录下的某个文件,然后打开。我选择了D:\[国产][井冈山][国语][TVRIP-RMVB][TF]\[TF]井冈山01.Rmvb,打开后效果如图4。

图 4

⑤ 点击“上传”后,等待一段时间后Client.Java程序运行效果如图5。

图 5

⑥ 服务器端程序运行效果如图6。

图 6

⑦ 用于保存上传的文件的目录里面多了个上传的文件,如图7。

图 7

⑧ 再上传一个文件,如图8。

图 8

⑨ 点击“上传”后运行效果如图9。

图 9

⑩ 服务器端运行效果如图10。

图 10

11 用于保存上传的文件的目录里面又多了个刚上传的文件,如图11。

图 11

4.结论

在做课程设计以前,我对文件传输的理解只是停留在理论知识的水平上,是“纸上谈兵”,缺乏实际的程序设计经验。这次通过做课程设计,我基本完成了老师下达的设计任务。

这是我这个课程设计的第二次设计,之前第一次的设计报告发给老师后完全不符合老师的要求,因为上学期课程设计的老师和林老师不一样,而我是完全按照上学期的思维来写设计报告的。

在这次的设计过程中我几乎完全改了第一次的程序,在看了老师的模板后,我才知道自己的第一次的设计报告有多乱多繁琐,而且没有图形界面,没有良好的交互性。现对这次的设计几点体会总结如下:

其一,本程序我选择用java进行开发。由于之前学过java语言,所以有一定的基础,但是因为过了比较长的时间,关于java的很多知识都忘记了,很多java 组件都不知道怎么用,后来经过努力复习才记起了那些基本知识。

其二, 在接到任务后我发现自己完全不懂网络编程的知识,而这个课程设计又要用到网络编程的知识,但是经过自己到图书馆查阅很多资料,最终掌握了网络编程的技巧,并完成了这次的编程。

其三,通过这次编程,我学会了运用java语言进行网络编程,提高了自身的网络编程能力。

总之,经过这几天的努力,我最终完成了“基于java的文件传输功能实现”的设计。在整个设计过程中,我不仅巩固了java知识和网络知识, 而且也达到了锻炼自己的目的,同时进一步加深了对编程的认识和理解。此次课程设计给我提供了一个既动手又动脑、自学、独立实践的机会,使我们养成了勤翻阅各种相关资料的习惯,将书本上的理论知识和实际有机地结合起来,锻炼了实际分析问题和解决问题的能力,提高了适应实际、实践编程的能力,为今后的学习和实践打下了良好的基础。

参考书目

[1]  陈轶,姚晓昆 《Java程序设计实验指导》 机械工业出版社  2006

[2]  邱桃熔,林振荣,冯缨 《Java语言程序设计教程》 机械工业出版社  2005

[3]  谢希仁  计算机网络  大连理工大学出版社  2005

 

第二篇:课程设计报告范例3

课程设计报告范例3

JAVA2程序设计 课 程 设 计 说 明 书

题目: 购物车实现

系别: 计 算 机 工 程 系 班别: 计 0 7 1 班 姓名: 朱 其 贵 学号: 200700401032 指导老师: 罗 衡 郴 完成时间: 2010-2-27

广西工学院计算机工程系

实现环境

该课程设计是在MyEclipse 8.0上设计并运行,采用的是JSP语言;mySQL数据库软件连接数据库实现对用户、图书、用户订单、订单图书等数据的存放和传送。

一. 数据库设计

1.表的设计

在这个数据库管理系统中要建立4张数据表: 用户注册表(my_user):用于存放注册用户的信息 图书信息表(my_book):用户存放图书记录

用户-订单表(my_indent):用户存放用户下达的订单基本信息 订单_图书表(my_indentlist):用于存放订单的图书信息. 这4张数据表的字段说明如表2-1~~2-4所示。

表1-1注册用户表(my_user)

课程设计报告范例3

课程设计报告范例3

表1-2图书信息表(My_book)

课程设计报告范例3

表1 -- 4订单-商品表(my_indentlist)

课程设计报告范例3

2. 数据库连接

本系统采用数据库连接池进行数据库的统一管理,同时在数据库操作上进行了封装,方便程序开发时与数据库的交互。

2.1数据库连接池

在实现某一个功能时,首先要连接数据库。如果在每一次需要进行数据库操作前都要来加载驱动,创建连接。也可以采用如下代码的一个类统一管理数据库的连接。 public class DBConnectionManager {

private String driverName = "org.gjt.mm.mysql.Driver";

private

String

url="jdbc:mysql://localhost:3306/mycart?useUnicode=true&characterEncoding=GBK"; private String user = "root"; private String password = "root"; public Connection getConnection() {

Class.forName(driverName);

return DriverManager.getConnection(url, user, password); }

}

在此类中,有4个参数。即数据库的驱动、连接地址、用户名和密码。 2.2数据库封装

数据库已经进行连接,那么根据我们所学的知识可以知道,在每一次需要进行数据库的某种操作时,只须调用对应的JDBC的函数就可以了。但是为了提高编写代码的效率,可以封装如下的数据库操作类。 public class DataBase {

protected Connection conn = null; protected Statement stmt = null; protected ResultSet rs = null;

protected PreparedStatement prepstmt = null; boolean isConnect=true; public DataBase() {

sqlStr = "";

DBConnectionManager dcm = new DBConnectionManager(); conn = dcm.getConnection(); stmt = conn.createStatement();

}

public void close(){

//Connection接口 //Statement接口 //记录结果集

//PreparedStatement接口 //与数据库连接标识

if ( stmt != null ){

stmt.close();

stmt = null;

}

conn.close();

conn = null;

}

};

二.系统的总体流程

课程设计报告范例3

三.界面设计与代码实现

3.1 用户注册模块设计与实现

购物车系统是用来买卖图书的,那么购物者就是一般用户。根据设计可知一般用户要求使用该系统来下订单,需要进行注册,来记录自己的个人信息到系统里,以便进行工作。

用户注册界面对应的数据表是用户表My_user,根据这个表的字段信息,可知注册界面中需要填入的用户信息包括登录用户名、密码和确认密码(以便保证用户两次输入的密码都一样)、联系地址、联系邮编、联系电话和电子邮件。

用户注册的页面是reg.jsp,在该界面中可知,注册用户时需在填写用户的基本信息,如

用户名,密码等,在用户单击“提交”按钮保存填入的数据时,页面需要将这些页面的表单取出来。在本页面的处理时,将jsp页面的提交对象request作为对象,传进userop.java类中。在执行添加新用户之前,需要检验新输入的用户名是否在系统中存在,一旦存在则不允许添加,因为用户名标志一个用户的惟一信息,然后在根据表My_user组合INSERT语句。 public boolean insert(HttpServletRequest req) throws Exception {

if (getRequest(req)) { sqlStr = "select * from My_user where username = '" + user.getUserName()

rs = stmt.executeQuery(sqlStr); if (rs.next()) { message = message + "该用户名已经存在!"; rs.close(); return false; = "insert into my_user +"'"; } sqlStr

(username,password,Address,Phone,Post,Email) values ('";

sqlStr = sqlStr + strFormat.toSql(user.getUserName()) + "','"; sqlStr = sqlStr + strFormat.toSql(user.getPassWord()) + "','";

sqlStr = sqlStr + strFormat.toSql(user.getAddress()) + "','"; sqlStr = sqlStr + strFormat.toSql(user.getPhone()) + "','"; sqlStr = sqlStr + strFormat.toSql(user.getPost()) + "','"; sqlStr = sqlStr + strFormat.toSql(user.getEmail()) + "')"; try { stmt.execute(sqlStr); sqlStr = "select max(id) from My_user where username = '" +user.getUserName()+ "'";

rs = stmt.executeQuery(sqlStr);

while (rs.next())

} } { { userid = rs.getLong(1); } rs.close(); return true; catch (SQLException sqle) return false; } } else { } return false;

3.2 用户在线购物模块设计与实现

用户登录后,主要的工作就是在线购书了。在线购书时,首先需要查看货架上有哪些图书。图书内容包括图书的基本信息有书名、出版社、作者、定价。此界面只是展示数据表My_book中的基本数据,因此在此不再介绍界面的设计,每一种图书还需要提供“购买”按钮,以便用户能够方便的购买。

单击 “购买”按钮,就可以供用户进行购买操作。与实际的购物过程相似,在购买操作中,需要填写的是购买该图书的数量。因此在该界面中设计了填写购书数量的文本框架和“提交”购书的按钮。到此,用户购物的操作界面设计完成了,接下来的就是如何来处理这些购物——购物车的功能了。

在线购书,主要功能就是添加图书到自己的购物车。单击“购买”按钮跳转到purchase.jsp页面,在该页面中允许用户输入购买的数量,单击“购买”时候提交到数据库。要提交时将选择图书的ID和图书的数量通过request传递到purchase.java中。

此部分工作的流程如下:

(1) 判断用户输入的购买数量是否合法,如不合法,则不执行。

(2) 查看该用户在这次购书中(即购物车)是否已经购买了该图书,如果是第一次购买,

则往购物车中添加该数量的该图书,否则将购物车中该图书的数量累加。

(3) 将重新计算的购物车的图书列表添加到用户的session中。

3.3 用户购物车管理模块设计与实现

当用户完成购书后,需要提交购物结算。首先,就是要查看自己的购物车里自己已选购了哪些图书,以及图书的数量。

购物车操作界面中要实现如下5个方面功能。

显示选购图书的列表:包括选购的图书的名称、出版社、作者、定价、总数量和总价格。 修改选购的某一种图书数量:需要提供修改数量的文本框。

删除选购的某一种图书。

清空购物车:取消此次购书。

提交购物车:提交购物车下订单给管理员并选择结账方式。

另外,为了方便使用,还需要提供“继续购物”的操作链接。购物对应的数据表为用户-订单表(My_Indent)和订单-图书表(My_IndentlList)。

用户购书完成后,应该进入管理购物车流程。在该界面中,可以进行的工作包括查看购物图书,修改购物车图书的数量,从购物车删除图书,清空购物车,提交购物车。

查看购物车图书页面是cartlist.jsp ,即是从session缓存中取出用户刚才购买的图书列表。由于这些信息存储在session中,因此这里只须从session中直接提取,保存在Vector类型的变量shoplist中.

修改购物车图书数量的页面也是cartlist.jsp,单击“修改”按钮调用类purchase.java中修改函数mokiShoper()即可。此步中,只须从session取出商品的记录shoplist,用用户填入的数量来替换原有的数量,然后再将shoplist 保存在session中即可。

从购物车删除图书的页面也是cartlist.jsp,单击“删除”按钮调用类purchase.java中的删除函数delShoper()即可。此步中,与修改操作相似,即是从session中取出商品记录shoplist,将变量中刚才用户选择的图书的id对应的图书删除,再将shoplist保存在session中。清空购物车的页面也是cartlist.jsp,单击“清空购物车”按钮直接从session中清空该用户的记录即可。提交购物车的页面也是cartlist.jsp,单击“提交购物车”按钮调用类purchase.java中的提交函数payout()函数即可。此步中,要进行如下的流程。

(1) 从session中取出购物车中的图书列表,保存在purchaselist中。

(2) 如果purchaselist为空,则表示购物车为空不执行,否则继续。

(3) 取得用户的id,购物总价格等参数,提交到订单数据表My_indent中,生成一个新

的订单。

(4) 将购物车中的所有图书,添加到订单-图书数据表达式My_indentlist中。

3.4 用户订单查看模块设计与实现

用户提交完购物车后,系统就自动生成了订单。订单提交给系统管理员进行管理,用户也需要随时查看自己下达的订单的信息。为此,需要设计订单查看界面,此界面要体现的信息包括订单的编号(用户每提交一次购物车就会生成一个订单),总金额(一次购书总金额)。订单对应的数据表为My_Indent。

用户查看订单的页面是indent.jsp。该功能要求提取当前用户的所有订单列表,调用类purchase.java的函数getIndent。该类根据用户的id查找订单表My_indent组合SELECT语句进行查找,结果保存在Vector类型变量my_indent中,代码如下:

public boolean getIndentList(String nid) {

sqlStr = "select * from my_indentlist where IndentNo = '" + nid + "'"; try { rs = stmt.executeQuery(sqlStr); indent_list = new Vector(); while (rs.next()) { indentlist identlist = new indentlist(); identlist.setId(rs.getLong("Id")); } identlist.setIndentNo(rs.getString("IndentNo")); identlist.setBookNo(rs.getLong("Bookid")); identlist.setAmount(rs.getInt("Amount")); indent_list.addElement(identlist); rs.close(); return true; } catch (SQLException e) { } } return false;

四.结论

本系统在功能上相对完整,设计了购物车的常用功能块。系统的关键部分主要集中在用户查看新书,用户添加购物车,查看订单上。由于我们对html方面的知识不是很了解,本系统的界面设计并不是很美观。

因为学的《java课程设计》这门课程只是粗略的学习,没能熟练地运用。本次的设计只是很简单的一个购物车。虽然不是什么大系统,但是通过这次的课程设计,让我对Java程序设计语言有了进一步的了解。为日后的学习提供了良好的的基础。由于是刚刚开始学习,在做这个课程设计时自己也遇到了一些的问题。不过在同学的帮助下得到了解决,这些经验可以让我在日后的学习中,让我少走弯路。也锻炼了自己的动手能力。

参考文献:

[ 1 ] 陈帆,和红杰,周荣辉. Java 2程序设计实用教程. 机械工业出版社,2005

[ 2 ] 施伯乐,丁宝康,汪卫. 数据库系统教程(第2版). 高等教育出版社,2003

[ 3 ] 王国辉,李文立,杨亮. JSP数据库系统开发完全手册. 人民邮电出版社,2006

[ 4 ] 刘中兵,李伯华,邹晨. JSP数据库项目案例导航. 清华大学出版社,2006

相关推荐