网络课程设计实验报告--QQ聊天实现

网络课程设计实验报告--QQ聊天实现
网络课程设计实验报告--QQ聊天实现

计算机网络课程设计报告

设计选题网络聊天室

姓名马继鸣

学号 0909090630

完成时间 2012-1-12 一、需求分析

聊天工具大多数由客户端程序和服务器程序外加服务器端,本程序采用客户机/服务器架构模式。通过Java提供的Socket类来连接客户机和服务器并使客户机和服务器之间相互通信,由于聊天是多点对多点的而Java提供的多线程功能。用多线程可完成多点对多点的聊天。

主要有两个应用程序,分别为服务器程序和客户端程序。服务器应用程序主要用于消息转发,以及向所有用户发送系统消息等;客户端应用程序主要用于客户聊天记录的显示和信息输入。采用Client/Server(C/S)体系结构,即客户机/服务器体系结构。聊天服务器专门用于监控用户状态和转发消息,客户端负责接收消息的用户序列和消息文本发送到服务器。该聊天系统实现群聊,用户登陆,退出聊天系统等功能。

二. 设计

1.设计思想:

课程设计中利用JAVA实现基于C/S模式的聊天程序。聊天室共分为服

务器端和客户端两部分,服务器端程序主要负责侦听客户发来的消息,客

户端登录到服务器端才可以实现正常的聊天功能。

2.功能设计

(1)服务器端的主要功能如下。

在特定端口上进行侦听,等待客户端连接。用户可以配置服务端的侦听端口,默认端口为10000.

当停止服务时,断开所有用户连接。

(2)客户端的主要功能如下。

连接到已经开启聊天服务的服务端。

当服务器端开启的话,用户可以随时登录与注销。

用户可以向所有人发送消息。

3.详细设计

聊天室服务器端设计

聊天室服务器中主要的功能文件的功能如下:

MyButLis.java

主要用于添加事件侦听和动作处理,具体是服务器按钮中的“终止”“发送”的处理。

public class MyButLis implements ActionListener

private MyServe server;

private JTextField filed1;

public void actionPerformed(ActionEvent e)

MyChatSet.java

服务器的线程队列,运行的方法,新增一个用户,则增加一个线程,并可以返回应答消息,给其余用户发送上下线信息,发送聊天信息(群聊私聊虽然已写,但是不知为何没有实现),发送用户列表。关键在于除了线程之外,还定义了传输数据时的协议内容,如何分辨不同的信息,如聊天信息,登陆信息,上下线信息,并把信息完整准确的传递。

public static ArrayList servers=new ArrayList();//线程队列

public static void addThread(MyserThread th) //增加一个服务器线程对象

public static void sendReMess(String type,String state,String s,MyserThread myth)//返回应答信息

public static void SendOSMess(String type,String user)//其他用户上下线信息

public static void SendChatMess(String type,String sender,String reciver,String Mess)//聊天信息

public static void SendList//用户列表

MyCheckTool.java

保存用户的登陆信息,在其中建立一个码表,并且可以判断登陆信息是否合法。

//建立码表,用以保存用户信息

private static Map maps=new HashMap();

public static boolean CheckUser(MyUserInfo user)// 验证用户名

MyFrame.java

建立服务器的主界面,关联侦听器。并启动线程。

MyFrame my=new MyFrame();

my.ShowUI();// 显示UI界面

public void ShowUI()

server.SetUP();

MyserThread.java

服务器线程类,定义输入输出流,发送读取信息,获取信息中相应标签的信息,用以判断用户名,密码,并可以中断连接。

this.socket=socket;

output=socket.getOutputStream();

input=socket.getInputStream();

public void SendMess(String s)//发送信息

public String ReadMess() //读取信息

public boolean ReadFirst()//将第一条信息读出来

public String GetValue(String type ,String Mess)

public void Pocess()//用以判断用户名、密码

public void run()//线程开始

public MyUserInfo getUser()//获得该线程中的用户信息

MyServe.java

建立服务器,并启动该线程。

server=new ServerSocket(inport);

Socket sc=server.accept();//获得socket对象

MyserThread th=new MyserThread(sc);

th.start(); //启动线程

客户端中主要的功能文件概述如下:

MyButLis.java

主要用于添加事件侦听和动作处理,具体是在客户端中的登陆注册发送等的处理。

public MyButLis(MySocketChat socket,JTextArea area1,JTextArea area2,MyLoginUI loginUI,JComboBox box)

public void actionPerformed(ActionEvent e) //设置动作监听器MyChatFrame.java

客户端的图形界面。关联侦听器。并启动线程。

socket.setArea(area1);

socket.start()

MyLoginUI.java

登陆界面

MySocketChat.java

构建连接,截取字符串,发送登陆,注册,聊天信息,读取信息并判断设置启动线程方法。

public MySocketChat(JTextField field1,JTextField field2,JTextArea area)//重写构造函数

public String GetValue(String type ,String Mess) //截取字符串

public void SendMess(String type)// 发送登陆或者注册信息

public void SendChat(String getter,String chat)// 发送聊天消息

public String ReadMess ()//读入的信息

public void CheckMess(String Mess) //判断是什么消息

public void run()//设置启动方法

三. 调试及测试

1、调试过程中遇到的主要问题及解决方法

在对于群聊和私聊的处理中,只实现了群聊,私聊虽有写,但是还没有实现,由于时间仓促,只能在寒假的其余时间努力完成。

还有就是如何在服务器与客户端的信息交互过程中,让他们能分辨是哪种信息并准确的读出来。如果不能准确的分析,则数据的交换只能完成一种粗略的互换,而不能提取聊天内容等用户希望得到的信息。为此,我专门看了很多相关的资料,在很多方法里面选取了一种自己容易理解的方法,我就定义了几种方式,分别辨认登陆注册聊天列表等信息:

""+type+""+""+user+""+""+pwd+"

wd>";

//第一个与最后一个msg是标示一整句话的标示符 type标示数据类型,两个中间的type即为需求数据,两个之间的是用户名称,两个之间的pwd指的是密码

"chat"+""+user+""+""+gett er+""+""+chat+"";

//其中sender,reciever,content分别指发送者、接受者、内容。

一些语法问题,在随着写程序的过程中,也慢慢纠正。在服务器组建中,由于java对于网络连接强有力的支持和丰富的代码,让我没有遇到太难的问题。

2、对设计和编码的回顾讨论和分析

在获取系统时间这一块上,还是做得比较好。

Calendar ca=Calendar.getInstance();

Date da=new Date();// 注意是在java.util.Date

SimpleDateFormat format=new SimpleDateFormat("HH:mm:ss");//设置时间格式

da=ca.getTime();

time=format.format(da);

处理保存的注册信息时,可能做得不是很好,将hashmap写入文件,这样不能长期保存注册信息,只能在服务器不关闭的状态下,保存注册信息。这个也会继续改进

3、程序运行的时空效率分析

本程序应用了线程对端口进行侦听。线程一直后台开启,长期占用系统资源,但又能及时的实现端口监听和消息的收发。

4、测试数据集

服务器端程序主界面:

可以记录用户名,账号,IP地址,并可以发送系统消息客户登陆注册界面

注册成功提示框

客户端运行界面

用户端测试界面

中间的(全部)按钮,点击后可以显示当前在线的好友列表,并选择聊天对象

四、经验和体会。

这是我第一次做java项目,只是这个学期选修了面向程序设计,每周一节课,很浅显的学习了java语言,在综合性如此强的项目设计中,感觉力不从心。

刚开始的一天里遇到了各种困难,不管是从原理上还是细节语法上,都感觉很难,索性前两天没有着手做,只是在看别人的项目制作过程去学习思路,或者是在看java中的io stream,swing,awt,net的基础原理和内容,然后的才慢慢一步一步的开始做,因为慢,所以坚持写,一共五天的时间,有两天没有睡觉。还好有些设计基础,在最后终于可以完成一些基本的目标。通过这次程序设计,进一步巩固、加深了我们所学专业课程的基本理论知识,理论联系实际,进一步培养了综合分析问题,解决问题的能力,进一步加强了JAVA的实际应用能力。在网络知识中,也许这个知识点是可以铭记终身的。在如此痛苦又快乐的第一次的后面,我想,要我继续写别的程序的话,我可以更有信息一些,一些流程已经了然于胸。不管怎么样,只有自己动手做了,才能是自己牢牢掌握的知识。所以我也会坚持去做些动手的内容,去锻炼自己。

关键段落的代码:服务器端Myserve.java

package com.javake.Server;

import java.io.IOException;

import https://www.360docs.net/doc/2e7464808.html,.ServerSocket;

import https://www.360docs.net/doc/2e7464808.html,.Socket;

public class MyServe

{

private int inport;

private ServerSocket server;

//重写构造函数

public MyServe(int inport)

{

this.inport=inport;

}

//建立服务器

public void SetUP()

{

try {

server=new ServerSocket(inport);

while(true)

{

//获得socket对象

Socket sc=server.accept();

MyserThread th=new MyserThread(sc);

//启动线程

th.start();

}

} catch (IOException e) {

// TODO Auto-generated catch block

e.printStackTrace();

}

}

public ServerSocket getServer() {

return server;

}

}

MyserThread.java

package com.javake.Server;

import java.io.*;

import https://www.360docs.net/doc/2e7464808.html,.Socket;

public class MyserThread extends Thread

{

private Socket socket;

private MyUserInfo useIn; //用户对象

private InputStream input;

private OutputStream output;

public MyserThread(Socket socket) //建立构造函数

{

this.socket=socket; //传入管道

try {

output=socket.getOutputStream();

input=socket.getInputStream();

} catch (IOException e) {

// TODO Auto-generated catch block

e.printStackTrace();

}

}

public void SendMess(String s)

{

byte[] b=s.getBytes();

try {

output.write(b);

output.flush();

} catch (IOException e) {

// TODO Auto-generated catch block

e.printStackTrace();

}

}

public String ReadMess()

{

StringBuffer buff=new StringBuffer();

String s="";

boolean end=false;

int i=0;

try { //循环

while(!end)

{

i = input.read();

char c=(char)i;

buff.append(c);

s=buff.toString().trim();

if(s.endsWith(""))

{

s=new String(s.getBytes("ISO-8859-1"),"GBK").trim();

break;

}

}

} catch (IOException e) {

// TODO Auto-generated catch block

e.printStackTrace();

}

return s;

}

//将第一条信息独立出来

public boolean ReadFirst()

{

String Mess=ReadMess();

String flag=GetValue("type", Mess); //截取标记

if(flag.equals("reg")) //判断是否为注册信息

{

String name=GetValue("name", Mess); //获得注册的用户

String pwd=GetValue("pwd", Mess);

MyUserInfo user=new MyUserInfo();

user.setName(name);

user.setPassWord(pwd);

if( MyCheckTool.SetUser(user)) //验证注册是否成功

{

https://www.360docs.net/doc/2e7464808.html,eIn=user;

MyChatSet.sendReMess("regResp", "1", "欢迎来到进入聊天室", this);

return true; }

else

{ MyChatSet.sendReMess("regResp", "0","用户已存在,注册失败" , this);

return false; }

}

if(flag.equals("login")) //判断是否为登陆用户

{ String name=GetValue("name", Mess); //获得注册的用户

String pwd=GetValue("pwd", Mess);

String IP=GetValue("IP", Mess);

MyUserInfo user=new MyUserInfo();

user.setName(name);

user.setPassWord(pwd);

user.setIPaddress(IP);

if( MyCheckTool.CheckUser(user)) //验证登陆是否成功

{ https://www.360docs.net/doc/2e7464808.html,eIn=user;

MyChatSet.sendReMess("loginResp", "1", "欢迎来到进入聊天室", this);

MyChatSet.SendOSMess("onLine", https://www.360docs.net/doc/2e7464808.html,eIn.getName());//发送用户上线消息

MyChatSet.addThread(this); //将线程加入队列

MyChatSet.SendList();//发送用户队列

return true; }

else

{ MyChatSet.sendReMess("loginResp", "0","用户名或账号错误" , this); }

}

return false;

} //否则返回登陆失败

public String GetValue(String type ,String Mess)

{

int i=Mess.indexOf("<"+type+">")+type.length()+2;

int j=Mess.indexOf("");

String s= Mess.substring(i,j); //获得截取的信息

return s;

}

public void Pocess()//用以判断用户名、密码

{

if(ReadFirst()) //登陆或注册成功

{

String str=ReadMess();

String tp=GetValue("type", str);

while(tp!="offLine")

if(tp.equals("chat")){//获得类型标签

{

String sender=GetValue("sender", str); //获得内容

String getter=GetValue("reciver", str);

String content=GetValue("content", str);

MyChatSet.SendChatMess("chat", sender, getter, content); //发送消息} else if(tp.equals("offline")) //判断是否为下线消息

{

String user=GetValue("user", str);

MyChatSet.SendOSMess("offline", user);

}

else if(tp.equals("login")) //注册后可能发来登陆消息

{

String name=GetValue("name", str); //获得注册的用户

String pwd=GetValue("pwd", str);

String IP=GetValue("IP", str);

MyUserInfo user=new MyUserInfo();

user.setName(name);

user.setPassWord(pwd);

user.setIPaddress(IP);

if( MyCheckTool.CheckUser(user)) //验证登陆是否成功

{

https://www.360docs.net/doc/2e7464808.html,eIn=user;

MyChatSet.sendReMess("loginResp", "1", "欢迎来到进入聊天室", this);

MyChatSet.addThread(this);

System.out.println("二次注册或登录成功");

MyChatSet.SendList();

MyChatSet.SendOSMess("onLine", https://www.360docs.net/doc/2e7464808.html,eIn.getName());//发送用户上线消息

}

else //将线程加入队列//发送用户队列

{

MyChatSet.sendReMess("loginResp", "0","用户名或账号错误" , this);

}

}

str=ReadMess();

tp=GetValue("type", str);

}

}

try { //关闭socket

socket.close();

} catch (IOException e) {

// TODO Auto-generated catch block

e.printStackTrace();

}

}

public void run()//线程开始

{

Pocess();

}

//获得该线程中的用户信息

public MyUserInfo getUser() {

return useIn;

}

}

MyButLis.java

package com.javake.Server;

import java.awt.event.*;

import java.io.IOException;

import javax.swing.JTextField;

public class MyButLis implements ActionListener{

private MyServe server;

private JTextField filed1;

public MyButLis(MyServe server,JTextField filed1)

{

this.server=server;

this.filed1=filed1;

}

@Override

public void actionPerformed(ActionEvent e) {

String s=e.getActionCommand();

System.out.println("服务器在运行");

if(s.equals("终止"))

{

System.out.println("在进行中");

try {

server.getServer().close();

} catch (IOException e1) {

// TODO Auto-generated catch block

e1.printStackTrace();

}

}

else if(s.equals("发送"))

{

MyUserInfo user=new MyUserInfo();

user.setName("服务器");

String Mess=filed1.getText();

MyChatSet.SendChatMess("chat", user.getName(), "", Mess);

filed1.setText("");

}

}

}

MyChatSet.java

package com.javake.Server;

import java.util.ArrayList;

import javax.swing.SwingUtilities;

import com.javake.Server.MyFrame;

public class MyChatSet

{ public static ArrayList servers=new ArrayList();//线程队列

public static void addThread(MyserThread th) //增加一个服务器线程对象

{

servers.add(th);

SwingUtilities.updateComponentTreeUI(MyFrame.table);

System.out.println("有"+servers.size()+"在线上");

}

public static void sendReMess(String type,String state,String s,MyserThread myth)

{

myth.SendMess(""+type+""+""+state+""+""+s+""+"");

}

public static void SendOSMess(String type,String user)

{

for(int i=0;i

{

MyserThread myth=servers.get(i); //获得线程类

myth.SendMess(""+type+""+""+user+""+"");

}

}

public static void SendChatMess(String type,String sender,String reciver,String Mess)

{

if(reciver.equals(""))//如果获得的接受者为“”就是群发

{

for(int i=0;i

{

MyserThread myth=servers.get(i); //获得线程类

myth.SendMess(""+type+""+""+sender+""+""+reciver +""+""+Mess+""+"");

}

}

else //发送给某个对象

{

for(int i=0;i

{

//获得线程类

MyserThread myth=servers.get(i);

if(myth.getUser().getName().equals(reciver))

{

myth.SendMess(""+type+""+""+sender+""+""+re civer+""+""+Mess+""+"");

}

}

}

}

public static void SendList()

{

String list="budyList全部,";

for(int i=0;i

{

MyserThread ser=servers.get(i);

String name=ser.getUser().getName();

list=list+name+",";

}

list=list+"";

for(int i=0;i

{

MyserThread ser=servers.get(i);

ser.SendMess(list); //给每个在线用户发送列表

}

}

}

客户端:

MySocketChat.java

package com.javake.MySocket;

import java.io.*;

……..

{

private Socket socket;

private String IP="localhost";

private InputStream input;

private OutputStream output;

private JTextField field1;

private JTextField field2;

private String user;

private JTextArea area;

private boolean end=false;

private MyChatFrame my;

public MySocketChat(JTextField field1,JTextField field2,JTextArea area) {

this.field1=field1;

this.field2=field2;

this.area=area;

//建立socket

try {

socket=new Socket(IP,10000);

input=socket.getInputStream();

output=socket.getOutputStream();

} catch (UnknownHostException e) {

e.printStackTrace();

} catch (IOException e) {

e.printStackTrace();

}

}

public String GetValue(String type ,String Mess) //截取字符串

{

int i=Mess.indexOf("<"+type+">")+type.length()+2;

int j=Mess.indexOf("");

String s= Mess.substring(i,j); //获得截取的信息

return s;

}

public void SendMess(String type)

{

user=field1.getText();//账号

String pwd=field2.getText();//密码

String Mess="";

if(type.equals("reg"))

{

Mess=""+type+""+""+user+""+""+pwd+"";

}else

{

Mess=""+type+""+""+user+""+""+pwd+""+socket.ge tRemoteSocketAddress().toString().trim()+"";

}

byte[] b=Mess.getBytes();//获得字符

try {

output.write(b); //输出

output.flush();

} catch (IOException e) {

// TODO Auto-generated catch block

e.printStackTrace();}

}

public void SendChat(String getter,String chat)

{ String

str="chat"+""+user+""+""+getter+""+""+chat+"";

byte[] b=str.getBytes();

try { output.write(b);

output.flush();

} catch (IOException e) {

// TODO Auto-generated catch block

e.printStackTrace();}

}

public String ReadMess () throws IOException

{ StringBuffer buff=new StringBuffer();

String s="";

int i=0;

boolean flag=false;

while(!flag) //循环

{ i = input.read();

char c=(char)i;

buff.append(c);

s=buff.toString().trim();

if(s.endsWith(""))

{

s=new String(s.getBytes("ISO-8859-1"),"GBK").trim();

break;

}

}

return s;

}

public void CheckMess(String Mess) //判断是什么消息

{

String time;

Calendar ca=Calendar.getInstance();

SimpleDateFormat format=new SimpleDateFormat("HH:mm:ss");

java.util.Date da=new java.util.Date();

String type=this.GetValue("type", Mess);

da=ca.getTime();

time=format.format(da);

if(type.equals("chat"))

{//当读入的类型是chat

String sender=this.GetValue("sender", Mess);

String content=this.GetValue("content", Mess);

area.append(time+"\r\n"+sender+"说: "+content+"\r\n");

}

else if(type.equals("offLine")) //上下线信息

{

String name=this.GetValue("user", Mess);

String show=name+" 下线了";

area.append(time+"\r\n"+show+"\r\n");

end=true;

}

else if(type.equals("onLine"))

{

String user=GetValue("user", Mess);

area.append(time+"\r\n"+user+"上线了\r\n");

}

else if(type.equals("budyList"))

{

System.out.println("------->用户列表已收到");

String users=this.GetValue("users", Mess);

StringTokenizer toke=new StringTokenizer(users,",");

JComboBox box=MyChatFrame.box;

box.removeAllItems();

程序设计课程设计实验报告

《程序设计》课程设计姓名: 学号: 班级:软件工程14班 指导教师: 成绩:

1.消除类游戏 【问题描述】 消除类游戏是深受大众欢迎的一种游戏,游戏在一个包含有n行m列的游戏棋盘上进行,棋盘的每一行每一列的方格上放着一个有颜色的棋子,当一行或一列上有连续三个或更多的相同颜色的棋子时,这些棋子都被消除。当有多处可以被消除时,这些地方的棋子将同时被消除。 【基本要求】 现在给你一个n行m列的棋盘(1≤n,m≤30),棋盘中的每一个方格上有一个棋子,请给出经过一次消除后的棋盘。 请注意:一个棋子可能在某一行和某一列同时被消除。 输入数据格式: 输入的第一行包含两个整数n,m,用空格分隔,分别表示棋盘的行数和列数。接下来n行,每行m 个整数,用空格分隔,分别表示每一个方格中的棋子的颜色。颜色使用1至9编号。 输出数据格式: 输出n行,每行m个整数,相邻的整数之间使用一个空格分隔,表示经过一次消除后的棋盘。如果一个方格中的棋子被消除,则对应的方格输出0,否则输出棋子的颜色编号。 【测试数据】 为方便调试程序,可将输入数据先写入一个文本文件,然后从文件读取数据处理,这样可避免每次运行程序时都要从键盘输入数据。 测试数据一 输出说明: 棋盘中第4列的1和第4行的2可以被消除,其他的方格中的棋子均保留。 测试数据二 输出说明: 棋盘中所有的1以及最后一行的3可以被同时消除,其他的方格中的棋子均保留。 【功能实现】 #include #include<> usingnamespacestd;

{ intm,n,i,j; inttemp; cin>>n>>m; temp=m; m=n; n=temp; int*map=newint[m*n]; int*mark=newint[m*n]; int*tmap=map; int*tmark=mark; intdif=0; ount=0; } p rintf("请输入要输入数的个数\n"); s canf("%d",&n);/*输入要输入数的个数*/ f or(i=0;idata1[j+1].number)

计算机网络课程设计说明书-综合布线

山东建筑大学 课程设计说明书 题目:徐州市卫生防疫站工程弱电 结构化综合布线系统 课程:计算机通信与网络原理 院(部):信息与电气工程学院 专业:电子信息工程 班级: 学生姓名: 学号: 指导教师:于海鹰 完成日期:2012年6月

目录 摘要 (3) 1.前言 (4) 1.1 综合布线系统概述 (4) 1.2 结构化综合布线设计的要点 (5) 2.工程概况及用户需求分析 (6) 2.1 工程概况 (6) 2.1.1 工程简介 (6) 2.1.2 建筑与结构形式 (6) 2.4 系统需求配置 (7) 2.5 设计规范及相关标准 (7) 2.5.1 设计相关的标准 (7) 2.5.2 设计规范 (7) 3.方案选型 (9) 3.1 综合布线传统方案 (9) 3.2 方案设计概述 (9) 3.2.1 工作区子系统 (10) 3.2.2 水平布线子系统 (10) 3.2.3管理区子系统 (10) 3.2.4 设备间子系统 (11) 4.总体方案说明 (13) 4.1 布线设计说明 (13) 4.1.1 工作区子系统 (13) 4.1.2 水平子系统 (13) 4.1.2 设备间子系统 (14) 4.1.4 建筑群子系统 (14) 4.2 综合布线管线的设计 (14) 4.2.1 水平线子系统的布线方案 (15) 4.2.1 垂直干线子系统的布线设计 (15)

4.3 设备电源管线方案 (16) 总结 (17) 致谢 (18) 参考文献 (19)

摘要 本课程设计根据GB/T50311-2007《建筑与建筑群综合布线系统工程设计规范》和建设方对布线系统的要求,对集办公、实验、会议场所于一体的徐州市卫生防疫站综合办公楼,进行完整的综合布线系统设计。 “计算机通信与网络原理课程设计”是电子信息工程和通信工程专业的主要实践性教学环节。在学习了“通信原理”、“计算机通信与网络原理”以及“智能建筑技术”等课程的基础上,设计一个实际工程的综合布线系统与计算机网络系统,旨在使学生加深对建筑物及建筑群弱电布线和计算机通信工程相关知识的理解,初步掌握综合布线系统的基本设计方法,提高进行工程设计的基本技能及分析、解决实际工程问题的能力。关键词:计算机通信与网络原理;综合布线技术;GB/T50311-2007

贪吃蛇游戏程序设计实验报告

Windows编程大作业贪吃蛇设计与实现 学校:武汉轻工大学 院系: 班级: 姓名: 学号: 2015年12月16日

目录 一、题目介绍 二、设计目的 三、详细设计 3.1贪吃蛇本体设计 3.2贪吃蛇食物设计 3.3游戏界面设计 3.3.1游戏初始化 3.3.2游戏开始 3.3.3游戏暂停 3.3.4游戏退出 3.3.5游戏总界面 3.3.6游戏区域与背景 3.3.7关于SNAKE 3.4玩法规则设计 3.5核心设计 四、功能测试 五、总结 六、参考文献

一、题目介绍: 编写一个基于MFC的小游戏。 基本要求: 1、实现一个小游戏 2、实现基本游戏控制功能 3、具有游戏数据保存功能 4、界面布局合理、美观; 二、设计目的: 通过使用vc++6.0实现一个小游戏的课程设计,进一步掌握MFC的高级使用方法和锻炼自己动手写程序的能力。了解游戏设计的整个过程,通过熟练使用MFC来设计游戏。程序主要包括:游戏界面设计,游戏菜单栏设计,游戏初始化,游戏控制等。培养和锻炼开发游戏的能力。 三、详细设计 3.1贪吃蛇的本体设计 贪吃蛇的头部拥有一个坐标(x,y),蛇体有一个长度len,蛇有一个运动方向direct,故定义一个结构体如下: struct Snake { int x,y; int len; int direct; }Snake[50]; 3.2贪吃蛇食物设计 贪吃蛇的食物有一个坐标(x,y),此食物有一个标志isfood,当isfood为0时,表示食物还没被吃,为1时,表示被吃。 struct Food { int x; int y; int isfood; }Food; 3.3游戏界面设计 3.3.1游戏初始化 游戏初始蛇体长度为3,颜色为灰色,食物标志为1,因为此时没有显示出食物,需要随机生成后,才置为0;

计算机网络课程设计报告书

《计算机网络》 课程设计报告书 专业:计嵌 班级:计嵌151 学号: 姓名:张耀 目录 一、设计题目 二、设备选型 三、IP地址规划 四、拓扑图设计 五、主要技术 六、配置清单 七、总结 一、设计题目 1、课设目的 巩固《计算机网络》和《网络通信》两门课程的知识,在本次课程设计中充分利用前面所学的知识,熟练应用所有技术,系统掌握一个较为复杂的网络配置过程。在课设中有少量需要的技术教学过程中没有涉及,请自己查阅CCNA资料。 2、课设内容 项目背景:某中小型企业有两个部门,销售部(vlan 10)与行政部(vlan 20)。要求同部门之间采用二层交换网络相连;不同部门之间采用单臂路由方式互访。企业有一台内部web服务器,承载内部网站,方便员工了解公司的即时信息.局域网路由器启用多种路由协议(静态路由、动态路由协议),并实施路由控制、负载均衡、链路认证、访问限制等功能.企业有一条专线接到运营

商用以连接互联网,采用HDLC封装,由于从运营商只获取到一个公网IP地址,所以企业员工上网需要做NAT网络地址转换,具体拓扑结构如上图所示。 二、设备选型 三、IP地址规划 四、拓扑图设计 五、主要技术 Trunk:在路由/交换领域,VLAN的中继端口叫做trunk。trunk技术用在交换机之间互连,使不同VLAN通过共享链路与其它交换机中的相同VLAN通信。交换机之间互连的端口就称为trunk端口。trunk是基于OSI第二层数据链路层(DataLinkLayer)的技术。

Vlan:在计算机网络中,一个二层网络可以被划分为多个不同的广播域,一个广播域对应了一个特定的用户组,默认情况下这些不同的广播域是相互隔离的。不同的广播域之间想要通信,需要通过一个或多个路由器。这样的一个广播域就称为VLAN。 单臂路由:在计算机网络中,一个二层网络可以被划分为多个不同的广播域,一个广播域对应了一个特定的用户组,默认情况下这些不同的广播域是相互隔离的。不同的广播域之间想要通信,需要通过一个或多个路由器。这样的一个广播域就称为VLAN。 默认路由:默认路由是一种特殊的静态路由,指的是当路由表中与包的目的地址之间没有匹配的表项时路由器能够做出的选择。如果没有默认路由,那么目的地址在路由表中没有匹配表项的包将被丢弃,默认路由在某些时候非常有效,当存在末梢网络时,默认路由会大大简化路由器的配置,减轻管理员的工作负担,提高网络性能。 动态路由:动态路由是指路由器能够自动地建立自己的路由表,并且能够根据实际情况的变化适时地进行调整。 (RIP、OSPF) ACL:访问控制列表(Access Control List,ACL)是路由器和交换机接口的指令列表,用来控制端口进出的数据包。 帧中继:帧中继(Frame?Relay)是一种用于连接计算机系统的面向分组的通信方法。它主要用在公共或专用网上的局域网互联以及广域网连接。大多数公共电信局都提供帧中继服务,把它作为建立高性能的虚拟广域连接的一种途径。 NAT:NAT(Network Address Translation,网络地址转换)是1994年提出的。当在专用网内部的一些主机本来已经分配到了本地IP地址(即仅在本专用网内使用的专用地址),但现在又想和因特网上的主机通信(并不需要加密)时,可使用NAT方法。 六、配置清单 一、基本配置 1、按上面的拓扑结构搭建仿真网络硬件 2、给路由器和交换机命名(可以自己选择命名) -->为Router5命名(其他设备操作相同) ->所有设备重新命名后 3、配置和启动交换和路由的接口,配置终端设备的IP地址和默认网关。 -->配置PC1的IP地址和默认网关(其他设备操作相同) -->开启并配置Router1的Fa0/0接口,并为其配置IP地址等属性(其他设备操作相同) 二、交换机配置 1、配置Etherchanne,捆绑Sw1与Sw2的F0/11,F0/12接口.要求使用Cisco PAGP协议中的主动协商模式。 -->配置Sw1和Sw2 2、配置VTP,在Sw1与Sw2上配置VTP, 域名为作为Server;Sw2作为Client,设置密码为student。 -->配置Sw1 -->配置Sw2 -->在Sw1上创建Vlan -->在Router1上做ACL访问控制 4、单臂路由配置。单臂路由:vlan 10以R1的F0/作为出口网关;vlan 20以R3的F0/作为

贪吃蛇游戏课程设计实验报告全解

辽宁科技大学课程设计说明书 设计题目:基于C#的贪吃蛇游戏 学院、系:装备制造学院 专业班级:计算机科学与技术 学生姓名:叶佳佳 指导教师:丁宁 成绩: 2015年12月12日

目录 一、概述 (1) 1、用C#实现该设计的方法 (1) 2、贪吃蛇游戏说明 (1) 二、实验目的及设计要求 (1) 1、实验目的 (1) 2、实验要求 (2) 三、课程设计具体实现 (2) 1、概要设计 (2) 1.1、设计思想 (2) 1.2、主模块实现 (2) 1.3、主函数流程图 (4) 2、详细设计 (5) 2.1、设计思想 (5) 2.2、具体模块实现: (5) 四、调试过程及运行结果 (10) 1、调试过程 (10) 2、实验结果 (11) 五、实验心得 (12) 六、参考资料 (13) 七、附录:源代码 (13)

一、概述 1、用C#实现该设计的方法 首先应该了解设计要求,然后按照功能设计出实际模块,每个模块都要完成特定的功能,要实现模块间的高内聚,低耦合。设计模块是一个相当重要的环节,模块的数量不宜太多,也不宜太少,要是每个模块都能比较简单的转换成流程图。模块设计完成后,就该给每个模块绘制流程图。流程图要尽可能的简单且容易理解,多使用中文,补一些过长的代码,增加理解难度。此外,流程图应容易转换成代码。 根据流程图编写好代码后在WindowsXP操作系统,https://www.360docs.net/doc/2e7464808.html,2008开发环境下进行运行测试,检查错误,最终设计出可行的程序。 2、贪吃蛇游戏说明 游戏操作要尽可能的简单,界面要尽可能的美观。 编写程序实现贪吃蛇游戏,贪吃蛇游戏是一个深受人们喜欢的游戏:一条蛇在密闭的围墙内,在围墙内随机出现一个食物,通过键盘上的四个光标键控制蛇向上下左右四个方向移动,蛇头撞到食物,则表示食物被吃掉,这时蛇的身体长一节,同时计10分;接着又出现食物,等待被蛇吃掉,如果蛇在移动过程中,撞到墙壁、障碍物或身体交叉(蛇头撞到自己的身体),则游戏结束。游戏结束时输出相应得分。 具体要求有以下几点: (1)对系统进行功能模块分析、控制模块分析正确,符合课题要求,实现相应功能;可以加以其他功能或修饰,使程序更加完善、合理; (2)系统设计要实用,采用模块化程序设计方法,编程简练、可用,功能全面; (3)说明书、流程图要清楚; 二、实验目的及设计要求 1、实验目的 .NET课程设计是教学实践环节中一项重要内容,进行此课程设计旨在掌握基础知识的基础上,进一步加深对VC#.NET技术的理解和掌握; 提高和加强学生的计算机应用及软件开发能力,使学生具备初级程序员的基本素质; 培养学生独立分析问题、解决问题、查阅资料以及自学能力,以适应信息管理行业日新 1

游戏C语言实验报告

嘉应学院计算机学院 实验报告 课程名称: C程序设计 开课学期: 2015—2016学年第1学期 班级:计算机1505 指导老师:陈广明 设计题目:游戏2048 学生姓名(学号):第3组:钟瞻宇

目录 一、实验目的和要求 .................................................................................................................................................... 二、实验环境、内容和方法 ........................................................................................................................................ 三、程序设计 ................................................................................................................................................................ 四、源代码 .................................................................................................................................................................... 五、调试与运行结果.................................................................................................................................................... 六、总结........................................................................................................................................................................

图书馆计算机网络课程设计报告

计算机网络课程设计报告 ――图书馆局域网络设计 组号: 班级:软工153班 专业:软件工程 时间:2017年7月9号 贵州大学计算机科学与技术学院

目录 1.设计目的 (3) 2.需求分析 (3) 3.方案设计 (5) 3.1 网络拓扑结构设计 (5) 3.2 网络设备的比较和选型 (6) 3.3 综合布线系统 (6) 3.4 IP地址分配 (7) 4.方案实现 (7) 5. 网络应用部署 (16) 6. Web网站设计 (17) 7.总结与展望 (17) 8.参考文献 (18) 附录: (18)

1.设计目的 现代信息技术的发展已经进入了网络化的时代。它主要由计算机网、通信网和信息资源网三种网络组成,其中计算机网是核心,它利用通信网络担负了信息在整个网络中的存贮和传递的重要作用。而图书馆拥有大量丰富的信息资源,也必须借助现代化信息技术手段,才能发挥其传递、交流信息的重要枢纽作用。因此,图书馆计算机网络化是图书馆未来发展的必然趋势。 图书馆局域网主要有这样几个特点:具有极高的可靠稳定性、可扩展性、可管理性,具有高速度和高带宽,满足流介质媒体、远程学习等对带宽和数据敏感的实时应用。 组建图书馆局域网,加快图书馆自动化建设和网络化进程,提高图书馆自动化管理水平和图书馆工作效率,是为了更好更快更准确地为读者提供阅读信息;组建图书馆局域网,实现对全馆文献资源的采购、编目、流通、借阅等方面的自动化管理;建设以图书馆文献为基础的图书馆基础数据库和具有本馆藏书的特色书籍数据库;提高图书馆采编、流通效率,合理地对全馆文献资源进行分类、编目、分区管理。利用共享通信网络资源进入其他计算机网络,实现网络互连。相互独立又相互统一于图书馆网络服务器,能联机进行传统文献的采集与编目,能使图书馆总体工作协调一致更方便的进行传统型文献的流通、阅览、检索;为教师和学生提供各种网络阅读体验。而且便于图书文献资料的管理和维护,减少人工管理的成本。 2.需求分析 2.1 网络概况 图书馆采用专线接入方式,光纤铺设到大楼,并且分配有6个C类地址202.114.88.40~202.114.88.45。大楼内布线系统比较完善。 图书馆办公大楼共有5层

计算机网络课程设计实验报告

校园网的组建与应用 摘要: 本文针对实验室的设备环境,对校园网的组网方式进行了研究和模拟,并最终提出了一套完整的校园网组网方案。 实验中我们对路由器、交换机等组网基础设备进行了认真的研究。关于路由器,我们实现了本地基本配置,并分别使用路由器的串口和以太网口实现了不同网段的网络互联,对路由器静态及动态路由机制进行了探究。关于交换机,我们实现了VLAN的划分以及不同VLAN间的相互通信,对广播风暴现象的产生原理及解决方案进行了特定的实验。综合两者的功能,我们对多种网络拓扑结构进行了分析,讨论和改进。最后通过实验和模拟提出了一套完整的校园网组建方案。 在此方案中,我们在实现了网络互通的情况下,我们进行了IP地址的划分,IP地址利用DHCP进行自动分配。并根据模拟实际,对不同的主机进行VLAN划分,同时保证不同VLAN间的相互访问与特定VLAN的保护与单向访问。同时构建内部防火墙保证校园网与外部的安全访问。构建了完整可靠的网络之后,依据校园网的功能和服务需求,我们搭建了FTP服务器,用于提供基础的网络服务。 限于实验室条件的限制,我们的方案并不是完全能够适用于现实的。但是,通过实验使我们对校园网乃至更大的网络有了更加深刻的了解。

目录

一、前言 随着信息的调整膨胀,全球信息已经进入以计算机网络为核心的时代。作为科技先导的教育行业,计算机校园网已是教育进行科研和现代化管理的重要手段。近几年、校园网已经取得很大的发展,中国教育科研网投入运营,全国多所高校校园网络开通联网。 随着学校教育手段的现代化,很多学校已经逐渐开始将学校的管理和教学过程向电子化方向发展,校园网的有无以及水平的高低也将成为评价学校及学生选择学校的新的标准之一,此时,校园网上的应用系统就显得尤为重要。一方面,学生可以通过它在促进学习的同时掌握丰富的计算机及网络信息知识,毫无疑问,这是学生综合素质中极为重要的一部分;另一方面,基于先进的网络平台和其上的应用系统,将极大的促进学校教育的现代化进程,实现高水平的教学和管理。 学校目前正加紧对信息化教育的规划和建设。开展的校园网络建设,旨在推动学校信息化建设,其最终建设目标是将建设成为一个借助信息化教育和管理手段的高水平的智能化、数字化的教学园区网络,最终完成统一软件资源平台的构建,实现统一网络管理、统一软件资源系统,并保证将来可扩展骨干网络节点互联带宽为10G,为用户提供高速接入网络,并实现网络远程教学、在线服务、教育资源共享等各种应用;利用现代信息技术从事管理、教学和科学研究等工作。最终达到在网络方面,更好的对众多网络使用及数据资源的安全控制,同时具有高性能,高效率,不间断的服务,方便的对网络中所有设备和应用进行有效的时事控制和管理。 二、综述 2.1 概述 从物理意义上来说,校园网就是一种局域网。校园网是各类型网络中一大分支,有着非常广泛的应用及代表性。作为新技术的发祥地,学校、尤其是高等院校,和网络的关系是密不可分的。作为“高新技术孵化器”的高校,是知识、人才的高地,资源十分丰富,比其他行业更渴求网络新技术、网络新应用,

Java程序设计实验报告2(弹球游戏)[1]1

《Java语言程序设计》课程设计 实习报告 题目: 班级: 学号: 姓名: 同组人员: 指导老师:张彬

一、实验目的 1、掌握Swing图形用户界面编程以及事件处理等,掌握java绘图技术。 2、掌握多线程编程的基本原理,能使用Runnable、ExecutorService等接口进行 线程的创建、启动等工作。 3、培养独立查找资料,并解决问题的能力。 二、实验任务 1、设计并编程实现弹球游戏: 用户能通过GUI组件指定生成小球的数量,每个小球将从随机的位置出现,并具有随机颜色,随机速度以及随机的运动方向,小球沿初始方向匀速运动,当碰到窗口边缘时,小球将依据受力原理改变运动方向(可简化考虑,受力只改变小球的运动方向,小球仍按照初始速度匀速运动,且不考虑小球之间的碰撞)。 鼠标在界面中显示为方块状,玩家需按住鼠标来回移动以避开运动的小球及屏幕四周,如果鼠标碰到任一小球或者窗口四周,则游戏结束。 程序需提供计时功能,并最终显示玩家能坚持多少秒。 2、程序要求: (1)具备相应界面,并通过事件编程,实现相应的GUI组件功能。 (2)使用多线程技术,在程序窗口区域绘制小球,并以线程控制小球的移动,实现动画效果。 (3)实现鼠标与屏幕四周,以及与小球的碰撞检测。 三、开发工具与平台 1.开发工具:Eclipse默认是一个和Jbuilder类似的Java开发工具,但它不仅仅只

是Java开发工具,只要装上相应的插件,eclipse也可作为其它语言的开发工具。如C/C++插件(CDT)。 2.开发平台:JDK1.5 四、设计思路 1.界面设计 (1)制作一个简单的面板JFrame,文件保存为bollFrame.java 其中为一public的类bollFrame,其构造方法为: bollFrame(int n){ super(); setTitle("我的弹球小游戏"); setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); Dimension dimension = Toolkit.getDefaultToolkit().getScreenSize();//得到电脑屏幕大小 setSize(450,450); setLocation((dimension.width-game.getWidth())/2-250, (dimension.height-game.getHeight())/2-250);//设置面板显示基中; this.n = n; myBollPanel = new bollPanel(n);//构造一个画板; add(myBollPanel);//将画板放入JFrame createMenu();//创建菜单; setJMenuBar(bar); } (2)构造画板类,文件保存为bollPanel.java 其构造函数如下: bollPanel(int n){ this.n = n; // executorThread = Executors.newCachedThreadPool();//创建线程池; mouse = new mouseThread(mxNow,myNow,groupThread,this);//启动鼠标线程; this.setIsOver(false);//游戏开始线程条件的判断; for(int i =0 ;i

计算机网络课程设计报告书

南通大学计算机科 学 与技术学院 《计算机网络》课程设计报告书 二零一四年九月 目录 一、课题要求 二、设备选型 三、IP地址分配表 四、配置方案 五、配置代码分析 六、总结 一、课题要求 一、题目

图1某学校校园网拓扑 设备接口IPv4地址 R2 s0/0/0 23、1、1、2/24s0/0/1 24、1、1、2/24 fa0/012、1、1、2/24 R3s0/0/0 34、1、1、3/24 s0/0/1 23、1、1、3/2 4 fa0/0 212、1、1、1/24 R4 s0/0/0 24、1、1、4/ 24 s0/0/1 34、1、1、4/24 某学校校园网拓扑如图1所示。为了缓解IP地址不足得问题,PC6与PC4使用IPv4私网地址;PC11、PC 12、PC21及PC22使用IPv4公网地址。校园网通过路由器R1接入Internet,R2、R3与R4模拟因特网中得网云,其中R2为ISP得接入路由器。最右侧为Web服务器。具体得设备连接与IP地址配置如图1所示.图中没有特殊说明得,子网掩码均默认为255、255、255、0。利用思科Packet Tracer组建如图所示网络,并实现以下功能: 1、VLAN10网关地址为210、28、10、1/24;VLAN20网关地址为210、28、20、1/24 VLAN10与VLAN20网关均设在路由器R1上.要求PC11、PC 12、PC 21及PC 22能互相ping通,且都能ping通Web Server

2、使用NAT配置, PC4与PC6使用IPv4私网地址能ping通Web Server 3、设置ACL,最后使得VLAN20所属主机不能通过WEB方式访问Web Serv er(但可以ping通Web Server),其她主机流量没有任何限制。 4、R1上配置静态路由,在路由器R2、R3及R4上配置动态rip路由。(除此以外,可在R1、R2、R3及R4可根据需要自行配置默认路由或某条路由。)二、设计要求 (1)培养一定得自学能力与独立分析问题、解决问题得能力.包括学会自己分析解决问题得方法,对设计中遇到得问题,能通过独立思考、查阅工具书、参考文献,寻找解决方案。 (2)初步掌握计算机网络分析与设计得基本方法.通过分析具体设计任务,确定方案,画出具体得网络拓扑结构图,并写出具体配置步骤情况,提交正式课程设计总结报告打印及电子稿一份;?(3)课程设计报告要求独立完成,不得有相互抄袭现象。 报告内容包括: ?①具体设计任务;?②基本思路及所涉及得相关理论;?③方案设计(主要网络设备、网络拓扑结构设计图);?④网络具体配置步骤;?⑤调试过程中出现得问题及相应解决办法; ?⑥个人体会及建议;?⑦参考资料。 三、《计算机网络》课程设计进度表

专业计算机网络课程设计报告任务及要求

2014春计算机网络课程设计任务与要求 一、课程目标 深入理解计算机网络基本原理,将书本上抽象的概念与具体的实现技术相结合,体会网络协议的设计与实现过程,以及专业技术人员所使用的基本方法和技巧;熟悉相关应用开发工具,掌握网络协议应用开发技术;进一步熟悉网络设备,学习组网技术,掌握网络规划与设计的基本方法;培养一定的自学能力和独立分析问题、解决问题的能力;对设计中遇到的问题,能通过独立思考、查阅资料、参考文献,寻求解决方案。 二、设计题目说明 设计题目设置上,采取了分类、分级的形式。 分5个类别,分别是:网络协议或算法、网络服务、组网设计、网络应用编程、理论与应用研究。 分3个级别,从高至低分别是A、B、C。题目的级别综合依据创新性、综合性、实用性、难度等因素,不同级别,成绩起评分数有别。 A级题目(良-优):较难;综合性强、有明显或突出的创新、探究性较强、实际课题或项目的一部分(实用性);工作量非常饱满;富有建设性;有很强的分析问题与解决问题的能力。 B级题目(中-良):难度适中;工作内容侧重于设计或研究或较高水平应用;有一定综合性、有一定创新、有一定实用性;工作量饱满;有较强的分析问题与解决问题的能力。 C级题目(及格-中):难度不大或偏小;工作内容侧重于验证或学习或简单应用;基本上无创新;工作量不大;有一定的分析问题与解决问题的能力。 三、任务完成形式 (1)交付课程设计说明书(纸质+电子版) (2)通过现场验收或答辩 (3)交付完整的设计作品(或能体现自己工作的视频课件)、 工作量、掌握程度: 有效代码行数:600行以上 对于第一、四类题目,必须交付设计作品,设计作品指的是完整的源程序代码、相关数据文件; 对于第三类题目,必须交付设计作品,设计作品指的是网络拓扑文件、网络仿真配置文件; 对于第二、五类题目,必须交付能体现自己工作的视频课件,要求有一定的文字或声音解说。 课程设计说明书(纸质+电子版),对于对于第一、四类题目,内容包括:设计任务、系统分析、总体设计、详细设计(相应地给出关键的代码)、设计总结(评价/遇到的问题/体会/建议等)、使用说明等。 四、工作计划与进度安排 根据所选题目,合理安排进度计划,总体上需要50个小时以上(不包含查资料时间)。 以下仅供参考:

计算机网络课程设计实验报告

中南大学课程设计报告 课程:计算机网络课程设计 题目:基于Winpcap的网络流量统计分析 指导教师:张伟 目录 第一章总体设计 一、实体类设计 --------P3 二、功能类设计 --------P3 三、界面设计 --------P3

第二章详细设计 一、实体类实现 --------P4 二、功能类实现 --------P4 三、界面实现 --------P5 第三章源代码清单及说明 一、CaptureUtil.java --------P7 二、MyPcapPacketHandler.java --------P9 三、PacketMatch.java --------P9 四、Windows.java --------P13 第四章运行结果 --------P19 第五章心得体会 --------P21 第一章总体设计 一、实体类设计 TCP、UPD、ICMP、ARP、广播数据包五个包的数据结构设计 二、功能类设计 (1)网卡获取 (2)包的抓捕

(3)包的处理 三、界面设计 (1)布局 (2)按钮功能连接 第二章第二章详细设计 一、实体类实现 TCP、UPD、ICMP、ARP、广播数据包五个包的数据结构设计。 本程序采用Java编写,基于win10pcap。Win10pcap是winpcap在win10系统上的适用版本。Java对于winpcap使用jnetpcap进行支持。对于TCP、UPD、ICMP、ARP、广播数据包五种类型的包,在jnetpcap的jar包中大部分已经封装好了相关的实体类型。对应如下:ARP 实体类:https://www.360docs.net/doc/2e7464808.html,work.Arp; UPD 实体类:https://www.360docs.net/doc/2e7464808.html,work.Icmp;

无线网络综合课程设计报告-图书馆

学院 计算机科学与技术系无线网络课程设计 2014 ~2015 学年第1学期 课程无线网络 课程设计名称无线局域网络综合课程设计--图书馆 专业班级 指导教师 小组成员 2015 年1 月

图书馆无线局域网络综合课程设计 1、课程设计目的 通过“无线局域网络综合课程设计”的环节,以系统集成项目的调研、规划与实施为主线,根据所掌握的无线局域网络知识,完成无线局域网络基础架构、无线局域网络系统的安装与配置、无线局域网络安全及网络管理等无线局域网络技术的综合设计与应用。 通过课程设计,使学生进一步巩固在计算机无线局域网络课程中学到的专业知识,深入掌握计算机局域网络工程的设计与施工、无线局域网络系统的安装与配置技术,掌握有线无线一体化局域网络设计与实施的方式方法,了解无线局域网络系统建设各部分之间的相互关系,提高学生计算机网络技术的综合运用和实际动手能力,培养学生的分工协作的团队精神。 2、课程设计名称及内容 名称:某省立图书馆无线网络集成项目规划与实施 学院背景描述及需求内容:图书馆随着业务规模的不断扩大,对图书馆提高运营效率的要求也不断提升,随着WIFI技术的不断发展,使其能更加稳定高效的承载图书馆应用。很多图书馆在有线网络的基础上扩展无线网络来进行日常业务的开展,甚至很大一部分图书馆在新建覆盖场所时,考虑建设的成本和传统网络的繁琐,也希望可以通过WIFI接入技术实现他们的目的。该省立图书馆建筑面积4万平方米,5层,要求实现无线网络无缝覆盖,所有上网用户的带宽不得低于8Mbps,图书馆用户通过无线网络可以访问图书馆提供的电子资源(WEB形式),这些电子资源只能由通过认证的用户访问。 3、实验过程 3.1需求分析 3.1.1建设背景 在信息迅猛发展的今天,国内所有省立图书馆均实现了有线企业的建设。但随着设施的完善,越来越多的便携式计算机终端进入了图书馆,越来越多的读者和员工也开始拥有了带有无线网卡的计算机终端。读者对无线网的依赖性相当之高,“随时随地获取信息”已成为读者的新需求。但是,传统的有线网存在着诸多“网络盲点”,比如在仓库、食堂等许多不宜网络布线的场馆设施如何联网?这就需要我们在现有网络的基础上充分扩展和利用无线网络来解决。

计算机网络课程设计报告-组建小型企业局域网

《计算机网络》课程设计说明书 组建小型企业局域网 学院:计算机与信息科学学院 学生姓名: 王正喜 专业: 软件工程 班级:1401 完成时间: 2016年12月

目录 一、课程设计得目得及要求 (1) 二、课程设计得内容(分析与设计) (2) 三、绘制拓扑结构图 (3) 四、详细步骤 (3) 五、路由器或交换机配置得代码………………………………、6 六、显示最总得结果 (8) 七、课程设计总结 (9)

一、课程设计得目得及要求 课程设计目得 作为网络工程专业得学生,通过本次得计算机网络课程设计,就是对本专业得一次很好得学习机会,进一步熟悉使用网络拓扑结构图,了解并使用子网划分、交换机划分vlan、IP地址得分配、各种协议得使用. 课程设计要求 要求能根据实际问题绘制拓扑结构图,拓扑结构图可以就是树形、星形、网状形、环状形及混合形结构得之一,清晰得描述接口,进行路由器或交换机得命令配置实现,并且每个方案得需有以下几部分得内容: 1、需求分析; 2、设计原则; 3、方案设计与实施: (1)方案设计 1)设备选型; 2)综合布线设计; 3)拓扑结构图;?4)IP地址规划(子网划分与CIDR技术)。 (2)方案实施 1)路由协议得选择; 2)路由器配置; 3)交换机得配置。 现有50台计算机,设计一个小型企业网络方案,要求: 1。资源共享,网络内得各个桌面用户可共享数据库、共享打印机,实现办公自动化系统中得各项功能; 2。通信服务,最终用户通过广域网连接可以收发电子邮件、实现Web应用、接入互联网、进行安全得广域网访问; 3。划分网段; 4.选择路由协议,配置路由,并为路由器设置密码。 二、课程设计得内容(分析与设计)

网络课程设计实验报告--QQ聊天实现

计算机网络课程设计报告 设计选题网络聊天室 姓名马继鸣 学号 0909090630 完成时间 2012-1-12 一、需求分析

聊天工具大多数由客户端程序和服务器程序外加服务器端,本程序采用客户机/服务器架构模式。通过Java提供的Socket类来连接客户机和服务器并使客户机和服务器之间相互通信,由于聊天是多点对多点的而Java提供的多线程功能。用多线程可完成多点对多点的聊天。 主要有两个应用程序,分别为服务器程序和客户端程序。服务器应用程序主要用于消息转发,以及向所有用户发送系统消息等;客户端应用程序主要用于客户聊天记录的显示和信息输入。采用Client/Server(C/S)体系结构,即客户机/服务器体系结构。聊天服务器专门用于监控用户状态和转发消息,客户端负责接收消息的用户序列和消息文本发送到服务器。该聊天系统实现群聊,用户登陆,退出聊天系统等功能。 二. 设计 1.设计思想: 课程设计中利用JAVA实现基于C/S模式的聊天程序。聊天室共分为服 务器端和客户端两部分,服务器端程序主要负责侦听客户发来的消息,客 户端登录到服务器端才可以实现正常的聊天功能。

2.功能设计 (1)服务器端的主要功能如下。 在特定端口上进行侦听,等待客户端连接。用户可以配置服务端的侦听端口,默认端口为10000. 当停止服务时,断开所有用户连接。 (2)客户端的主要功能如下。 连接到已经开启聊天服务的服务端。 当服务器端开启的话,用户可以随时登录与注销。

用户可以向所有人发送消息。 3.详细设计 聊天室服务器端设计 聊天室服务器中主要的功能文件的功能如下: MyButLis.java 主要用于添加事件侦听和动作处理,具体是服务器按钮中的“终止”“发送”的处理。 public class MyButLis implements ActionListener private MyServe server; private JTextField filed1; public void actionPerformed(ActionEvent e) MyChatSet.java 服务器的线程队列,运行的方法,新增一个用户,则增加一个线程,并可以返回应答消息,给其余用户发送上下线信息,发送聊天信息(群聊私聊虽然已写,但是不知为何没有实现),发送用户列表。关键在于除了线程之外,还定义了传输数据时的协议内容,如何分辨不同的信息,如聊天信息,登陆信息,上下线信息,并把信息完整准确的传递。 public static ArrayList servers=new ArrayList();//线程队列 public static void addThread(MyserThread th) //增加一个服务器线程对象 public static void sendReMess(String type,String state,String s,MyserThread myth)//返回应答信息 public static void SendOSMess(String type,String user)//其他用户上下线信息 public static void SendChatMess(String type,String sender,String reciver,String Mess)//聊天信息 public static void SendList//用户列表 MyCheckTool.java 保存用户的登陆信息,在其中建立一个码表,并且可以判断登陆信息是否合法。 //建立码表,用以保存用户信息 private static Map maps=new HashMap(); public static boolean CheckUser(MyUserInfo user)// 验证用户名

《程序设计课程设计》实验报告材料

《程序设计》课程设计 姓名: 学号: 班级:软件工程14 班 指导教师: 成绩:

1.消除类游戏 1.1【问题描述】 消除类游戏是深受大众欢迎的一种游戏,游戏在一个包含有n行m列的游戏棋盘上进行,棋盘的每一行每一列的方格上放着一个有颜色的棋子,当一行或一列上有连续三个或更多的相同颜色的棋子时,这些棋子都被消除。当有多处可以被消除时,这些地方的棋子将同时被消除。 1.2【基本要求】 现在给你一个n行m列的棋盘(1≤n,m≤30),棋盘中的每一个方格上有一个棋子,请给出经过一次消除后的棋盘。 请注意:一个棋子可能在某一行和某一列同时被消除。 输入数据格式: 输入的第一行包含两个整数n, m,用空格分隔,分别表示棋盘的行数和列数。接下来n行,每行m个整数,用空格分隔,分别表示每一个方格中的棋子的颜色。颜色使用1至9编号。 输出数据格式: 输出n行,每行m个整数,相邻的整数之间使用一个空格分隔,表示经过一次消除后的棋盘。如果一个方格中的棋子被消除,则对应的方格输出0,否则输出棋子的颜色编号。 1.3【测试数据】 为方便调试程序,可将输入数据先写入一个文本文件,然后从文件读取数据处理,这样可避免每次运行程序时都要从键盘输入数据。 测试数据一 输出说明: 棋盘中第4列的1和第4行的2可以被消除,其他的方格中的棋子均保留。 棋盘中所有的1以及最后一行的3可以被同时消除,其他的方格中的棋子均保留。 1.4【功能实现】 #include #include using namespace std;

int main() { int m, n, i ,j; int temp; cin >> n >> m; temp = m; m = n; n = temp; int * map = new int[m * n]; int * mark = new int[m * n]; int * tmap = map; int * tmark = mark; int dif = 0; //输入 for ( i = 0 ; i < m ; i++ ) for (j = 0; j < n; j++) cin >> *(tmap + i * n + j); for (i = 0; i < m; i++) for (j = 0; j < n; j++) { //横行 if ((tmap + 2 - map) % n != 0 || (tmap + 1 - map) % n != 0) if (*(tmap) == *(tmap + 1) && * (tmap + 1) == *(tmap + 2)) { dif = tmap - map; *(tmark + dif) = 0; *(tmark + dif + 1) = 0; *(tmark + dif + 2) = 0; } //竖列 if (tmap + 2 * n - map < m * n || tmap + n - map < m * n) if (*(tmap) == *(tmap + n) && * (tmap + n) == *(tmap + 2 * n)) { dif = tmap - map; *(tmark + dif) = 0; *(tmark + dif + n) = 0; *(tmark + dif + 2 * n) = 0; } tmap = map + (j+1) + i * n; } //输出 cout << endl; tmap = map; for (i = 0; i < m; i++)

相关文档
最新文档