简易聊天工具详细设计报告

简易聊天工具详细设计报告
简易聊天工具详细设计报告

简易聊天工具总体设计报告

班级:网络工程10-1班

姓名:

学号: 08103609

指导老师:

目录

一、引言 (1)

设计聊天工具的背景及意义 (1)

课题现状 (1)

开发平台介绍 (1)

二、需求分析 (2)

编写目标 (2)

可行性分析 (2)

分析需求 (2)

2.3.1 功能需求分析 (2)

2.3.2 数据需求分析 (2)

2.3.3 性能需求分析 (3)

2.3.4系统运行需求 (3)

本系统的主要功能部分组成: (3)

2.4.1服务器端模块 (3)

2.4.2客户端模块 (3)

数据流图 (4)

2.5.1 顶层数据流图 (4)

2.5.2一层数据流图 (4)

2.5.3二层数据流图 (5)

三、概要设计 (6)

系统总模块图 (6)

模块功能之间的关系 (7)

3.2.1服务器端模块 (7)

3.2.1.1用户上下线识别及显示模块 (7)

3.2.1.2信息识别转发模块 (7)

3.2.2客户端模块 (7)

3.2.2.1用户注册模块 (7)

3.2.2.2用户登陆模块 (7)

3.2.2.3用户密码修改模块 (7)

两大模块工作流程 (8)

系统数据结构设计 (9)

3.4.1数据逻辑设计 (9)

3.4.2数据字典 (9)

四、详细设计与编码实现 (10)

服务器端详细设计 (10)

4.1.1服务器界面设计 (10)

4.1.2服务器程序类 (11)

4.1.3服务器端连接用户的线程设计 (12)

4.1.4服务器端线程的管理 (13)

客户端的详细设计 (13)

4.2.1界面包的设计(view包) (14)

4.2.1.1用户登录界面 (14)

4.2.1.2用户好友列表界面 (15)

4.2.1.3用户聊天界面 (18)

4.2.2模块包的设计(model包) (19)

4.2.2.1客户端连接服务器类 (19)

4.2.2.2客户检查使用者类 (20)

4.2.3用户端工具包的设计(tools包) (21)

4.2.3.1客户端连接服务器线程类 (21)

4.2.3.2管理客户端连接服务器线程类 (22)

4.2.3.3管理用户的聊天界面的类 (23)

4.2.3.4管理好友列表、黑名单界面类 (23)

公共包的详细设计 (23)

4.3.1User类 (23)

4.3.2包的种类定义类 (24)

4.3.3传输包定义类 (24)

五、运行测试 (26)

1.首先开启服务器 (26)

2.进行用户登录 (26)

3.用户之间聊天 (28)

六、结束语 (29)

参考文献 (30)

一、引言

设计聊天工具的背景及意义

随着计算机科学技术的飞速发展,网络越来越深刻的改变着人们生活方方面面。各种基于网络的应用技术在人们的政治、经济、生活等的各个方面都发挥着重要的作用。例如QQ,MSN等基于Internet的即时聊天工具。这些工具通过网络这个新兴的媒介进行信息交流相比其他传统媒介具有数据量大,实时性强,操作简单,成本低廉等优点。不仅如此即时聊工具还具备许多传统媒介不具备的强大功能,它们能传送文字、声音、影像和文档,而且能更加人性化的显示联络人的名单和通信状态。因而它们在现实生活中受到了广泛的欢迎,这是有目共睹的。目前基于Internet的即时聊天工具已经做的非常完美,然而基于局域网的即时聊天工具却不如人意。而在高等教育方面,网络展现出不可替代的作用。为了适应现代信息化,教学局域网就应运而生。而教学局域网内的即时通信能力则显得尤为重要。所以对于学校和公司内部网络等机构,局域网即时聊天的应用还是相当重要的。一个好的局域网通信软件将对学校和公司的运作产生积极的影响。

课题现状

基于局域网的即时通信软件的核心技术其实与基于Internet的即时通信软件的设计技术是一样的,只是规模较小。基于Internet的通信工具一般是采用UDP或TCP协议来实现的,开发技术已经非常成熟。比如QQ、MSN等等,它们都是基于Internet的即时通信软件,它们不仅实现了即时聊天、文件传输等功能,而且还能够实现网络即时视频、语音聊天功能。它们的功能正在不断扩充,使其更加人性化,满足人们更多的需求。这类软件其实都是在下层协议的基础之上,通过网络通信接口进行设计的软件产品。在局域网内,这类软件的设计比在Internet中设计更为简单。因为Internet是网络的网络,结构更为复杂,碰到的状况比在局域网中要多。而局域网中事情就简单的多了,所以局域网聊天工具在实现即时通信时就相对容易些了。

开发平台介绍

这次课题设计主要用Java语言,所以就选择相应的开发平台和工作、测试环境为MyEclipse。MyEclipse 是一个十分优秀的用于开发Java, J2EE的 Eclipse 插件集合,MyEclipse的功能非常强大,支持也十分广泛,尤其是对各种开源产品的支持十分不错。MyEclipse目前支持Java Servlet,AJAX, JSP, JSF, Struts,Spring, Hibernate,EJB3,JDBC 数据库链接工具等多项功能。可以说MyEclipse几乎囊括了目前所有主流开源产品的专属eclipse开发工具。

二、需求分析

编写目标

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

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

可行性分析

经济可行性: 由于本系统的主要背景是课程设计,不注重直接的经济效益和其后的发展方向,只在注重自身水平和能力的提高,对自身的经济要求也不高,只要有一台能运行Java软件的电脑便可,所以不用考虑到经济问题。

技术可行性: 使用Java作为系统开发的开发环境,它提供完善的指令控制语句、类与对象的支持及丰富的数据类型,给开发高性能系统提供的保障为开发满足客户要求的系统,保证了代码的模块化要求,而代码模块化的提高,非常有利于以后对新系统的扩展与修改。

运行可行性: 本系统为一个小型的局域网聊天系统,所耗费的资源非常的小,现在一般的电脑无论是硬件还是软件都能够满足条件,因此,本系统在运行上是可行的。

综上所述,本系统的设计与开发在技术上和硬件设备上的条件都是满足的,因此,它在技术上是可行的

分析需求

2.3.1 功能需求分析

程序要实现的功能:程序启动之后要能够知道局域网内哪些用户在线,并可以与之通信;一旦某个网内用户上线或离线,需要立即更新信息,并通知所有在线用户;当双击用户

列表中某个列表项时,要能够弹出信息发送框,并可以编辑要发送的信息,然后发送。

2.3.2 数据需求分析

对于局域网内的用户需要具体的数据信息来表示,服务器则需要一个保存所有用户信息数据表,其基本内容应包括用户ID,用户名,密码,状态,及IP地址。

2.3.3 性能需求分析

实用性:为局域网聊天提供方便,有效进行作业管理。

操作简单:本系统应该适用于不同水平的使用者,包括事业单位和企业单位,同时系统不应太复杂和烦琐,因此要求系统的操作尽可能简单易行。

技术先进:产品的系统设计和开发应紧跟着整个计算机发展潮流,采用当时最先进的设计思想,利用最新的开发技术和开发工具。使系统能够无论在功能设计上,还是在技术实现上,都处于同行业的领先地位。

安装使用简便:服务器端的安装简洁明了,客户机无需再装任何软件就可以直接注册登陆聊天。

适应性:应该能广泛应用于不同类型的企事业单位。系统采用模块化设计,用户可以根据自己的实际情况自行组合,使系统在不同的硬件环境下都能得以应用。

代码可读性好:文中的代码将尽可能简洁,易懂。

2.3.4系统运行需求

运行环境:Windows 9x、2000、xp、2003,Linux

必要环境:JDK 以上

硬件环境:CPU 400MHz以上,内存64MB以上

本系统的主要功能部分组成:

2.4.1服务器端模块:

服务器启动,进行监听

功能:转发用户传播的信息

服务器自动更新用户状态信息

2.4.2客户端模块:

登陆服务器

列出当前在线用户信息;

聊天好友的的选择;

发言:对输入的数据进行发送;

离开状态;

数据流图

2.5.1 顶层数据流图

顶层数据流图

2.5.2一层数据流图

用户信息数据库

一层数据流图

2.5.3二层数据流图

系统二层数据流图

三、概要设计系统总模块图

模块功能之间的关系

3.2.1服务器端模块

3.2.1.1用户上下线识别及显示模块

功能:服务器开启使用设定的端口进行监听,识别并显示用户上下线信息。

目标:当有用户请求登陆时,服务器通过套接字获取用户端的IP地址以及用户名和对应密码,识别是否一致,从而显示用户在线信息,当用户下线时,断开连接,显示用户下线信息。基本实现用户状态与信息显示一致。

3.2.1.2信息识别转发模块

功能:服务器将用户发送的信息接收、分析、存储并转发到目标用户。

目标:服务器定义一个用z于存储要求请求连接用户的端口号以及该端口客户发送的信息的数组,该数组服务器、客户端共享,服务器将发送端的基本信息存储,目的段可以读取该信息,从而实现信息转发。

3.2.2客户端模块

3.2.2.1用户注册模块

功能:实现用户账号的注册

目标:通过用户端的一个线程与服务器数据库连接,用户输入创建的用户名、密码,若通过合法性检测,则将该用户注册的信息写入后台数据库

3.2.2.2用户登陆模块

功能:实现用户登陆。

目标:用户输入用户名、密码并点击登陆,服务器端接收用户端登陆请求,存储请求信息,并进行检验,如果通过合法性检测则进入聊天主界面。

(1)群聊模块

功能:能够进行类似于qq群聊的聊天功能。

目标:客户端点击“发送信息”按钮,该客户端的ip地址、端口号以及信息内容一起打包写入服务器的存储数组,客户端通过线程可以读取该数组中的内容,从而实现群聊。

(2) 单聊模块

功能:能够进行点对点的聊天方式。

目标:客户端用户点击“开始私聊”按钮,输入对方的昵称以及ip地址,从而该用户开启端口用于监听,同时定义输入、输出流文件,客户端延迟片刻,然后与该端口取得连接。当任意一方点击“发送信息”按钮时,和群聊同一机理,通过读取共享文件内容实现私聊。

3.2.2.3用户密码修改模块

功能:用户能够修改自己账号的密码。

目标:用户输入用户名、旧密码、新密码,服务器端接收用户端密码修改请求,存储

修改信息,并进行检验,若通过合法性检测,则把修改后的信息重新写入后台数据库。两大模块工作流程

服务器端工作流程图

系统数据结构设计

3.4.1数据逻辑设计

组成(用户qq,状态,好友,分组)

用户qq(qq号码,昵称,密码,性别,年龄,好友名字,分组名称)状态(qq号码,是否在线,ip地址,端口)

好友(好友qq号码,好友名字,所在分组名字)

分组(分组ID,分组名称,所属qq号码)

3.4.2数据字典

四、详细设计与编码实现

服务器端详细设计

设计中我在服务器端建立了四个包,分别是包, 包, 包以及公用包;根据包的名称就很容易理解各个包中所包含的类的功能。View包主要是存放服务器界面设计类的,model 包中包含的是服务器各个模块设计类,tools包中包含的是服务器工作时所要用的工具设计类,最后commo包中包含的是服务器端和客户端所需共同使用的内容设计类。其实还有一个包包,是用来放置管理用户中号和密码的数据库设计类,但是最终没有设计,只是偷懒的将用户是账号和密码在客户和服务器连接的程序代码中进行固化了。

4.1.1服务器界面设计

服务器界面设计类的类名为MyServerFrame,是存放在view包中,主要是实现服务器端的控制界面,其可以实现启动服务器、关闭服务器、管理和监控服务器等功能。通过java界面设计语句设计出服务器界面的布局:整体只是由一个JPanel放在中间,JPanel 主要是有两个JButton按钮组合而成,分别为启动和关闭按钮,至于服务器界面的监督管理功能在此没有进行设计,以后会在加以补充。

此服务器界面涉及的变量如下

JPanel jpl;

JButton jbt1,jbt2;

其中对jbt1做了一个监听,当点击这个按钮时就会执行MyQqServer类中的代码,从而完成服务器开启功能。

public MyServerFrame()

{

jpl=new JPanel();

jbt1=new JButton("启动服务器");

(this);对jbt1的监听

jbt2=new JButton("关闭服务器");

(jbt1);

(jbt2);

(jpl,"Center");

(500,400);

;

(true);

}

public void actionPerformed(ActionEvent e) {

if()==jbt1)如果点击了jbt1

{

new MyQqServer();跳转到MyQqServer继续执行程序

}

}

4.1.2服务器程序类

服务器程序类类名为MyQqServer,存放在model包中,它是真正的聊天工具服务器程序,其目的是在9999端口监听等待、监听是客户端否有客户发起连接,接受客户端发来的连接请求并且检查客户输入信息的合法性,当用户名和密码对应且正确时,返回登陆成功的信息包,服务器为用户单开一个线程,让线程与该客户端保持通讯,启动客户端与服务器间的线程,并通知其其他在线的好友;

try{

quals("123456"))

{

4.1.3terator();定义一个HashMap用来存放所有用户线程

while())

{

Message m=new Message();

(iam);

;

}

1.判断用户发送的信息类型,如果是一般信息,则获取接受设的通信线程别且一会

将其转发出去

quals)

{

quals)

{

4.1.44.1.34.1.3terator();

String res="";

while())

{

res+=().toString()+" ";

}

return res;

}

客户端的详细设计

我在客户端同样建立了四个包,分别是包, . 包, . 包以及公用包;与服务器端一样,各个类根据功能目的会被放在不同的包中。View包主要是存放客户端多个界面设计类的,在其中我总共设计了三个界面类:用户登录界面类QQClientLogin、用户好友列表界面类Qqfrienlist、用户聊天界面类Qqchat。model包中包含的是用户端各个模块设计类,用户与服务器连接的实现类和用户客户端使用信息类都在其中。tools包中包含的是用户端工作时所要用的工具设计类,用户连接服务器的线程类和各个管理类都在其中。最后commo 包中的类与服务器的commo包中的内容是一样的,因为里面都是服务器端和客户端所需共同

使用的内容,所以要保持其一致性。

在设计编码实现时,刚开始设计的界面编码类是独立的,但是到后面就会将各个界面类嵌套连接起来,除此之外还会应时定义生成其他的类,所以说各个类之间都是相互联系的,绝非有独立的类存在。

4.2.1界面包的设计(view包)

4.2.1.1用户登录界面

客户端用户登录界面设计类的类名为QQClientLogin,是存放在view包中,主要是实现用户登录界面,其可以实现输入用户账号、密码进行登录功能。通过java界面设计语句设计出服务器界面的布局:整体只是由三个部分组合而成,分别是将一个JLabel放在北部。一个JPanel放在中间,中间的JPanel是由两个JLabel、两个JButton、一个JTextField、一个JPasswordField、两个JCheckBox按钮组成,并且将这个JPanel设计成3x3的网格布局。最后是南边也是一个JPanel,由两个JButton组成的一个流布局结构。这个界面中主要设计的按钮是“登录”按钮,因为要将其监听。

此用户登录界面涉及的变量如下

北部需要的变量

JLabel jbl1;

中部需要的变量

JPanel jp1;

JLabel jp1_jbl1,jp1_jbl2;

JButton jp1_jb1,jp1_jb2;

JTextField jp1_jtf;

JPasswordField jp1_jpf;

JCheckBox jp1_jbx1,jp1_jbx2;

南部需要的组件

JPanel jp2;

JButton jp2_jb1,jp2_jb2;

当用户点对于登录按钮的监听

jp2_jb1=new JButton("登陆");

rim()); 获得User对象的用户账号,是

输入框中jp1_jtf中输入的账号(new String()));获得User对象的用户

密码,就是输入框中jp1_jpf中输入的内容if(u))

{

etS().getOutputStream());

在这个类中,还提前加入了一个获取好友在线情况的函数,由于在用户登录时,用户要知道哦自己的好友在线的情况,所以就会向服务器发送一个申请好友在线情况的申请,同时会在服务器返回一个在线好友的数据流后在切换到好友列表界面。

4.2.1用户好友列表界面

客户端用户好友界面设计类的类名为Qqfrienlist,是存放在view包中,主要是实现用户好友界面的显示,其可以该用户的所有好友以及好友的状态,在线的头像就会使彩色,不在线的图像就会是保持灰色。通过java界面设计语句设计出好友列表界面的布局是一个BordeLayo布局,在这个BordeLayo布局中在进行好友列表和陌生人列表的设计。这两个列表设计是相同的,就以好友列表界面举例来说;整个界面是一个BordeLayo布局,在这个整体布局中,又分为三部分:最上方是一个只含有一个“好友列表”JButton的JPanel,最下方是含有两个JButton的JPanel,最主要的是中间的布局,它是一个JScrollPanel布局,是可以上下滚动的。

此用户好友列表界面涉及的变量如下

JPanel jphy1,jphy2,jphy3;

JButton jphy_jb1,jphy_jb2,jphy_jb3;

JScrollPane jsp1;

JLabel []list;

JScrollPanel布局的主要实现

jphy2=new JPanel(new GridLayout(20,1,4,4));

etEnabled(false);

if(list[i].getText().equals(ownerid))

{

list[i].setEnabled(true);

}

list[i].addMouseListener(this);

(list[i]);

}

jsp1=new JScrollPane(jphy2);定义变量jsp1为JScrollPane型变量

陌生人界面的设计方法和原理和用户列表是一样的,只是有一点点变化,但是要想显示用户的陌生人列表则需要点击用户的“陌生人”按钮进行一个监听,主要代码实现:jphy_jb2=new JButton("陌生人");

(this);

这个监听是在好友列表界面中实现的,因为只有在好友列表中点击“陌生人”按钮,界面才会切换到陌生人列表界面,同样理由,如果要继续增加列表界面的数量,那么在每一个列表中的JButton“陌生人”这个变量下都要进行一个监听。所以最终设列表界面数位n那么某一个界面的按钮监听数就为n-1,即除了自己界面,其他的界面都要有连接到此界面的监听。

监听的执行函数如下:用if函数,点击什么按钮就切换到相应界面

public void actionPerformed(ActionEvent e) {

4.2.1用户聊天界面

用户聊天界面类的类名为QqChat,顾名思义,这个类就是用来定义关于用户聊天的一切功能实现函数的类,在这个类中,主要实现的是用户聊天界面的设计,还有就是聊天工具中比较重要的聊天信息的发送,在上面介绍服务器端的详细设计时,就提到在服务器和客户的通信线程类SerConClientThread中实现一个功能就是服务器接受到用户的发送过来的包并且进行判断,根据不同的包执行不同的代码,实现不同的功能,那是服务器独有也是必须具备是转发功能,但是前提是服务器必须有包接受,那样才能判断。这里QqChat中第二个功能就是向服务器发送信息包,以便服务器接收判断并且转发。

1.首先实现用户聊天界面的设计,这个设计很简单,这是有基本的文本输入和显示框

架,还有一个发送按钮。

所使用的变量定义如下:

JTextArea jta; 这是文本显示域用来显示对方发来的聊天信息 JTextField jtf; 这是聊天文本的输入框

JButton jbt; 发送按钮

JPanel jpl; 底部的布局为一个JPanel布局

那些基本的定义的编码在这你就不在这里过多的阐述,布局的设计如下:(jta,"Center"); 文本显示域放置在中间

(jpl,"South"); JPanel在最底部,包括输入框和发送按钮

(ownerid+" 正在和 "+frien+" 聊天");为聊天界面命名

(new ImageIcon("image/").getImage());

为聊天界面设置一个小小的头像图片

(400,300); 设置聊天界面大小

2.用户与某好友聊天时,在输入框中输入聊天内容,并且点击发送按钮将其发送给服务器,让其转发;还有就是接受服务器转发过来的聊天好友信息数据流后在聊天界面显示域显示。

先写一个函数,让其实现显示聊天信息显示功能

public void showMessage(Message m)

{

String info=()+" 对"+()+" 说"+()+"\r\n";

显示所接受的信息

}

聊天信息显示函数写好后在实现聊天信息的发送,首先要与往常一样,在刚开始的发送按钮处进行一个监听,当用户点击发送按钮时发送输入的信息

jbt=new JButton("发送"); 定义发送按钮

(this); 对发送按钮进行监听

响应发送按钮的监听,当用户点击了发送按钮时,就将用户在输入框中输入的内容进行打包发送。首先新建一个Message,并且声明这个Message发送的是什么包,而后在定义这个Message发送包的具体内容

if()==jbt)如果用户点击了发送按钮

{

Message m=new Message(); 新建一个Message

; 定义声明这个Message

发送的包的类型为message_comm_mes包;定义这个发送包的发送者的id为本人的id

; 定义这个包的接受者id为此时聊天好友的id

()); 定义发送包的内容为聊天输入框的信息文本

(new 发送时间就是本机时间

这里只是在监听到用户点击了发送按钮时第一时间所做的事情,就是定义好将要发送的包,接受者、发送者、时间、内容等必要的组件都已将定义并且已经封装在这个发送包Message中了,现在剩下的就是将这个包发送到服务器端了。

etS().getOutputStream());

(m);}

这里的重点部分就是双斜杠加粗的部分,这个部分是一个合成语句,一步到位的,来将其拆分逐个解释,首先ObjectOutputStream oos=new ObjectOutputStream是定义一个新的对象输出流名为oos ,其中oos要调用函数将Message包发送出去,所调用的函数是ManagerClientServerThread类中的函数getClientConServerThread,调用这个函数的目的就是为了得到客户连接服务器端的线程名就是本机的用户的id,用来进行指定发送。

至上为止就已经将界面包viwe中的三个界面类用户登录界面类QQClientLogin、用户好友列表界面类Qqfrienlist、用户聊天界面类Qqchat的设计进行了具体的解释。下面就具体介绍model包中的类的详细设计和具体用途。

4.2.2模块包的设计(model包)

4.2.2.1客户端连接服务器类

这个类放在model包中就可以看出来它的重要性,客户端连接服务器类QqClientlianjie顾名思义就是用与c/s软件中连接部分的重中之重,c/s软件就是包括两个组成部分:客户端、服务器,而他们的只有在连接的基础上才能进一步设计增加其他的功能,这个类就相当于中间枢纽。类QqClientlianjie它的主要功能就是为了实现客户端与服务器连接;要实现这个总基本上是分这几步来实现的:

1.首先先通过软件使用的端口向服务器发送io流,先实现与服务器断的连接public boolean SendLoginInfoToServer(Object o) {

boolean b=false;

try {

s=new Socket("",9999);这就是服务器断的ip地址(这里服务器就

是本机)和软件在本机所使用的端口号ObjectOutputStream oos=new ObjectOutputStream());

(o); 这里就是向服务器输出一个对象流

ObjectInputStream ois=new ObjectInputStream());

Message ms=(Message)();这里是将服务器返回的对象刘进行

判断并且根据不同的结果做出相应的反映这里首先说明一下客户向服务器发送的包并非随意发送的,这个发送的信息包是将已经在用户打开登录界面,将用户名和密码输入并且点击了登录按钮后就开始定义封装,其中包括的就是客户id和密码,这个包在上面介绍用户登录界面设计中已经详细说明了。

2.对服务器端返回的数据包进行判断并作出相应的回应,如果服务器返回的信息包

的编号为“1”,那么就是表明用户输入的信息合法,用户登录成功,相应的就要

看一个线程让用户和服务器保持连接。

if().equals("1")) 如果返回的是“1”(登录成功)

{

etUserid(), ccst); 这里调用到管理线程类的函数addClientConServerThread

b=true; 将b的值改为true

}

这个public函数一开始就是设定的类型为boolean,所以只有两种结果,就是登陆成功或者失败,成功就执行上面一个函数,开一个线程,不成功就返回提示用户账号或者密码输入错误。

4.2.2.2客户检查使用者类

这个类其实是为了减少QqClientlianjie中代码的冗余,还有就是方便其他的类中某个步骤要为了与服务器连接而调用连接函数时,从类名上就可以缺的调用的函数,进一步减少了设计者编码时的错误率。这个类中只有一个函数checkUser(User u),而他的变量就是一个User对象,这个函数的作用就是调用QqClientlianjie中的函数SendLoginInfoToServer public boolean checkUser(User u)

{

return new QqClientlianjie().SendLoginInfoToServer(u);

4.2.34.2.3客户端连接服务器线程类

这个类解释起来名字看起来很长,其实很容易理解,就是每一个用户连接服务器时的线程设计类,所以这个类的主要功能都是与用户的线程有关的。这个类的主要线程就是每时每刻检测是否从服务器有数据包发过来,没有就什么也不做,如果有的话就要作出相应的动作,也就是选判断从服务器发过来的数据包是什么类型的,然后再做出相应的反应。下面来进行分布的介绍:

1.先不停的读取从服务器端发来的信息

while(true){ 不停的检测

try {

ObjectInputStream ois=new ObjectInputStream());新建输入流

Message m=(Message)();新建一个Message包用来读取发来的信息

"读取从服务器发来的消息"+()+" 给"+()+" 说"+());这是一个输出语句

2.判断从服务器端发来的信息的种类并进行执行相应的动作

如果是普通的信息包就显示

if().equals) 普通信息包

{

quals) 在线好友包

{

String con=(); 提取信息

String friends[]=(" "); 用数组存放在线好友名单

String getter=(); 提取接受者

4.2.3管理客户端连接服务器线程类

这个类名为ManagerClientServerThread,显而易见是与上面的客户端连接服务器线程类rClientServerThread是有关联的,它的主要功能如名字一样,就是为了管理用户连接服务器后所生成的线程的。类里很简单的只定义了一个哈希表,用来存放用户线程,还有就是定义两了个函数:ManagerClientServerThread和getClientConServerThread。下面分别介绍这两个函数的功能:

函数的定义其实就是为了把创建好的用户线程放入到哈希表中

public static void addClientConServerThread(String qqid,ClientConServerThread ccst)

{

(qqid, ccst); 把创建好的用户线程放入到哈希表中

}

函数就是为了可以通过qqid取得该用户的线程,简单方便。

public static ClientConServerThread getClientConServerThread(String qqid) {

return (ClientConServerThread)(qqid);返回的就是对应用户的线程

}

这就是管理用户线程类的两大功能,简单实用同时又必不可少

4.2.3.3管理用户的聊天界面的类

ManageQqChat类要实现的功能也很简单,首先也是建立了一个哈希表用来存放聊天界面,哈希表是静态的不随函数的变化而变化,类的主要功能就是将用户聊天界面在这个哈希表中加入或者取出,从而达到管理的目的。

public class ManageQqChat {

4.2.3管理好友列表、黑名单界面类

与上面的两个管理类一样,这个类也是为了实现管理的功能,但是它是为了管理好友列表、黑名单的;如果后期还想在好友界面中加入一些卡片的话,如家人卡片、同学卡片,那么它们的管理也是要放在这个类里来实现。与管理聊天界面类一样,这个类首先也是建立了一个哈希表用来存放好友列表界面,哈希表是静态的不随函数的变化而变化,类的主要功能就是将用户好友列表在这个哈希表中加入,还有就是得到某用户好友列表这两个基本

编写一个计算器程序课程设计报告-范例

学号 《金融IT入门-程序设计》 课程设计报告 中国地质大学长城学院XX 系 2017年月 3 日 目录 一.总体概述: 二.设计目标: 三.程序流程图: 四.程序代码: 评分细则 评分项优秀良好中等差 上课出勤 上课表现 上机情况 平时作业完成情况 期末大作业: (1)书写认真程度 题目:用Python编写简易计算器程序 学号: 专业: 班级: 姓名: 指导教师: 2016-2017学年第二学期

(2)内容详实程度(3)文字表达能力(4)是否体现观点 简短教师签名: 年月日 评 分 等 级 备 注 评分等级有五种:优秀、良好、中等、及格、不及格

一、设计内容 ------------------------------------------------------------------------------------------------- - 1 - 1. 课程设计目的:-------------------------------------------------------------------------------------- - 1 - 2.课程设计任务: --------------------------------------------------------------------------------- - 1 - 3.创新要求:---------------------------------------------------------------------------------------------- - 2 - 4.设计要求: ------------------------------------------------------------------------------------------------ - 2 - 二、原理和分析 ---------------------------------------------------------------------------------------------- - 2 - 1.开发的技术及功能 ----------------------------------------------------------------------------------- - 2 - 2.设计思路------------------------------------------------------------------------------------------------ - 2 - 3.设计效果图--------------------------------------------------------------------------------------------- - 2 - 三、设计过程 ------------------------------------------------------------------------------------------------- - 3 - 1. 程序思路: -------------------------------------------------------------------------------------------- - 3 - 2.功能实现:---------------------------------------------------------------------------------------------- - 4 - 1)加减乘除求余以及指数运算----------------------------------------------------------------- - 4 - 2)其他运算 ------------------------------------------------------------------------------------------ - 4 - 3)主要方法说明------------------------------------------------------------------------------------ - 5 - 4)程序流程图 --------------------------------------------------------------------------------------- - 5 - 3.算法思路:---------------------------------------------------------------------------------------------- - 6 - 4.数据分析:---------------------------------------------------------------------------------------------- - 7 - 四、设计结果和分析------------------------------------------------------------------------------------------ - 7 - ⒈运行调试------------------------------------------------------------------------------------------------ - 7 - 1)进行加减乘除求余以及指数运算----------------------------------------------------------- - 7 - 2)求倒 ------------------------------------------------------------------------------------------------ - 9 - 3)退格 ------------------------------------------------------------------------------------------------ - 9 - 4)清零 ---------------------------------------------------------------------------------------------- - 10 - 5)求余弦、求正切、对e求幂、求平方根、求自然对数、求倒运算 ------------- - 11 - 6)连续运算(例:2*3*4=24.0)------------------------------------------------------------- - 11 - 7)异常处理(例:求倒时输入数为0) --------------------------------------------------- - 11 - 五、设计体会和小结 -------------------------------------------------------------------------------------- - 12 - 六、参考文献 ----------------------------------------------------------------------------------------------- - 13 - 七、源程序--------------------------------------------------------------------------------------------------- - 13 - 一、设计内容 1.课程设计目的: 1)掌握Java语言的程序设计方法; 2)理论联系实际,进一步提高学生的软件开发技术; 3)培养学生分析、解决问题的能力; 4)提高学生实践论文撰写能力。 2.课程设计任务:

简易计算器的设计与实现

沈阳航空航天大学 课程设计报告 课程设计名称:单片机系统综合课程设计课程设计题目:简易计算器的设计与实现 院(系): 专业: 班级: 学号: 姓名: 指导教师: 完成日期:

沈阳航空航天大学课程设计报告 目录 第1章总体设计方案 (1) 1.1设计内容 (1) 1.2设计原理 (1) 1.3设计思路 (2) 1.4实验环境 (2) 第2章详细设计方案 (3) 2.1硬件电路设计 (3) 2.2主程序设计 (7) 2.2功能模块的设计与实现 (8) 第3章结果测试及分析 (11) 3.1结果测试 (11) 3.2结果分析 (11) 参考文献 (12) 附录1 元件清单 (13) 附录2 总电路图 (14) 附录3 程序代码 (15)

第1章总体设计方案 1.1 设计内容 本设计是基于51系列的单片机进行的十进制计算器系统设计,可以完成计算器的键盘输入,进行加、减、乘、除1位无符号数字的简单四则运算,并在6位8段数码管上显示相应的结果。 设计过程在硬件与软件方面进行同步设计。硬件方面从功能考虑,首先选择内部存储资源丰富的8751单片机,输入采用4×4矩阵键盘。显示采用6位8段共阳极数码管动态显示。软件方面从分析计算器功能、流程图设计,再到程序的编写进行系统设计。编程语言方面从程序总体设计以及高效性和功能性对C语言和汇编语言进行比较分析,最终选用汇编语言进行编程,并用protel99se涉及硬件电路。 1.2 设计原理 在该课程设计中,主要用到一个8751芯片和串接的共阳数码管,和一组阵列式键盘。作为该设计的主要部分,下面将对它们的原理及功能做详细介绍和说明。 1)提出方案 以8751为核心,和数码管以及键盘用实验箱上已有的器件实现计算器的功能。 2) 总体方案实现 (1)要解决键值得读入。先向键盘的全部列线送低电平,在检测键盘的行线,如果有一行为低电平,说明可能有按键按下,则程序转入抖动检测---就是延时10ms再读键盘的行线,如读得的数据与第一次的相同,说明真的有按键按下,程序转入确认哪一键按下的程序,该程序是依次向键盘的列线送低电平,然后读键盘的行线,如果读的值与第一次相同就停止读,此时就会的到键盘的行码与列码

简易电子时钟的设计

单片机课程设计报告设计题目:简易电子时钟的设计 院别: 专业班级: 学号:

姓名: 指导教师: 摘要 通过一学期单片机的学习,对其已经有了初步的了解,但是随着社会的不断发展,单片机的应用正在不断地走向深入,它特别适合于与控制有关的系统,越来越广泛地应用于自动控制,智能化仪器,仪表,数据采集,军工产品以及家用电器等各个领域,单片机往往是作为一个核心部件来使用,在根据具体硬件结构,以及针对具体应用对象特点的软件结合,以作完善。我们也借此课程设计的机会,对单片机有更深一步的了解与学习。 本次课程课程设计的目的是设计一个简易的电子时钟,通过一个8位共阴极数码管进行时、分、秒的显示,另外设置7个按键,一个用来调整小时,一个用来调整分钟,一个开关控制是否调整时间。 关键词:AT89C51,数码管,按键,DS1303时钟芯片

1.概述 本设计是锻炼我们的自学能力合作能力,依靠团队的力量去完成一项具体的任务系统的训练了所学知识,设计的过程必将是难忘的,这也将是大学向社会工作过度的一个重要阶段。 本阶段过后要去能够熟练的运用单片机中的计数器、定时器、中断、数码管显示等参考教材或者相关资料,采用C语言实现数字时钟功能,在数码管上实时显示,并运用Protues软件绘制电路原理图,并进行仿真验证和误差分析。 2.系统总体方案设计 2.1系统方案的确定 用6位数码管,可以显示出时、分、秒;用P2端口控制位选,由定时器进行时间的控制(秒);当总按键按下时可以进行时间调整; 2.2方案分析 2.3系统总框图 图2.1

3.系统硬件系统设计 3.1复位电路 单片机复位电路就好比电脑的重启部分,当电脑在使用中出现死机,按下重启按钮电脑内部的程序从头开始执行。单片机也一样,当单片机系统在运行中,受到环境干扰出现程跑飞的时候,按下复位按钮内部的程序自动从头开始执行。 复位电路的工作原理: 在单片机系统中,系统上电启动的时候复位一次,当按键按下的时候系统再次复位,如果释放后再按下,系统还会复位。所以可以通过按键的断开和闭合在运行的系统中控制其复位。单片机复位电路如下图 图3.1 3.2时钟电路 单片机运行需要时钟支持——就像计算机的CPU一样,如果没有时钟电路来产生时钟驱动单片机,那单片机就不能执行程序。 单片机可以看成是在时钟驱动下的时序逻辑电路。 以5l单片机为例随明:51单片机为l2个时钟周期执行一条指令。也就是说单片机运行一条指令,必须要用r2个时钟周期。没有这个时钟,单片机就跑不起来了,也没有办法定时和进行和时间有关的操作。 时钟电路是微型计算机的心脏,它控制着计算机的二个节奏。CPU就是通过复杂的时序电路完成不同的指令功能的。51的时钟信号可以由两种方式产生:一种是内部方式,利用芯片内部的振荡电路,产生时钟信号:另一种为外部方式,时钟信号由外部引入。

AT89C51单片机简易计算器的设计

AT89C51单片机简易计算器的设计 单片机的出现是计算机制造技术高速发展的产物,它是嵌入式控制系统的核心,如今,它已广泛的应用到我们生活的各个领域,电子、科技、通信、汽车、工业等。本设计是基于51系列单片机来进行的数字计算器系统设计,可以完成计算器的键盘输入,进行加、减、乘、除六位数范围内的基本四则运算,并在LCD上显示相应的结果。设计电路采用AT89C51单片机为主要控制电路,利用MM74C922作为计算器4*4键盘的扫描IC读取键盘上的输入。显示采用字符LCD静态显示。软件方面使用C语言编程,并用PROTUES仿真。 一、总体设计 根据功能和指标要求,本系统选用MCS-51系列单片机为主控机。通过扩展必要的外围接口电路,实现对计算器的设计。具体设计如下:(1)由于要设计的是简单的计算器,可以进行四则运算,为了得到较好的显示效果,采用LCD 显示数据和结果。 (2)另外键盘包括数字键(0~9)、符号键(+、-、×、÷)、清除键和等号键,故只需要16 个按键即可,设计中采用集成的计算键盘。 (3)执行过程:开机显示零,等待键入数值,当键入数字,通过LCD显示出来,当键入+、-、*、/运算符,计算器在内部执行数值转换和存储,并等待再次键入数值,当再键入数值后将显示键入的数

值,按等号就会在LCD上输出运算结果。 (4)错误提示:当计算器执行过程中有错误时,会在LCD上显示相应的提示,如:当输入的数值或计算得到的结果大于计算器的表示范围时,计算器会在LCD上提示溢出;当除数为0时,计算器会在LCD 上提示错误。 系统模块图: 二、硬件设计 (一)、总体硬件设计 本设计选用AT89C51单片机为主控单元。显示部分:采用LCD 静态显示。按键部分:采用4*4键盘;利用MM74C922为4*4的键盘扫描IC,读取输入的键值。 总体设计效果如下图:

Java计算器课程设计报告 - 副本

JAVA课程设计 小型计算器 学生姓名: 指导教师:李明江 系别:计算机科学系 专业:计算机科学与技术 年级:2008 应用2班 提交时间:2010年 12 月 22日学号:

目录 一概述 (3) 二总体方案设计 (4) 三详细设计 (6) 四程序的调试与运行结果说明.. 10 五课程设计总结 (19) 六附录...... 错误!未定义书签。

一设计任务书 1.程序具备的功能: (1)使用图形用户界面:一个文本框;0-9数字按钮;加、减、乘、除运算符;“等于”符号;复位按钮; (2)完成整数、实数的四则运算(加、减、乘、除); (3)通过按钮点击实现数据的复位(清零);(4)实数运算中小数位的精度一致。 2.课程设计的主要设计思想 对于此计算器程序,首先要设计其GUI 界面,总体界面有一个文本框,18个按钮,总体界面用BorderLayout布局。 文本框放置在最NORTH,然后0到9以及+,-,*,/的按钮放置到一个面板Panel 中,添加到整体布局的CENTER,界面设计

完成。 布局设计好后再添加按钮事件。对于此程序要考虑到点击加、减、乘、除按钮时是否有点击数字按钮,如果是第一次点击数字按钮或者是点击数字按钮前点击了加、减、乘、除按钮则直接把数字按钮的数值设置到文本框中,否则则应把文本框中的内容加上你所点击按钮的数值设置到文本框中。 在进行加、减、乘、除计算时要把点击加、减、乘、除按钮之前的数值保存下来,运算时是这个被保存下来的数值和文本框中的数值加、减、乘、除。 二总体方案设计 1.界面设计 界面设计要求用GUI,界面设计中有用到swing组件的TextField和Button,用到awt 中的BorderLayout和GridLayout布局管理方

简单计算器设计报告

简单计算器设计报告 045 一、基本功能描述 通过文本编辑框实现基本整数的加减乘除运算 二、设计思路 如下图是整个程序进行的流程图,基本方法是在ItemText文本编辑框输入字符,程序对字符进行判断,若输入不是数字则提示错误。输入正常时,通过下拉框ComboBox_InsertString 选择相应运算符。点击等号IDC_OK,即可得出运算结果。操作简便,算法简单。 三、软件设计 1、设计步骤 打开Microsoft Visual C++ 6.0,在文件中点击新建,在弹出框内选择MFC AppWizard[exe]工程,输入工程名zhoutong及其所在位置,点击确定 1

将弹出MFC AppWizard-step 1对话框,选择基本对话框,点击完成 MFC AppWizard就建立了一个基于对话窗口的程序框架

四、主要程序分析 1、字符判定函数 BOOL IsInt(TCHAR*str) { int i=atoi(str); TCHAR strtemp[256]; wsprintf(strtemp,"%i",i); if(strcmp(str,strtemp)!=0) { return FALSE; } Else { return TRUE; } } 该函数通过atoi把文本编辑框读取的字符转换为数字,再通过wsprintf把转换数字转换为字符,通过strcmp比较原字符和转换得来的字符。如相同返回true,不通则返回false. 3、运算符选择程序 BOOL Main_OnInitDialog(HWND hwnd, HWND hwndFocus, LPARAM lParam) { HWND hwndComboOP=GetDlgItem(hwnd,IDC_COMBOOP); ComboBox_InsertString(hwndComboOP,-1,TEXT("+")); ComboBox_InsertString(hwndComboOP,-1,TEXT("-")); ComboBox_InsertString(hwndComboOP,-1,TEXT("*")); ComboBox_InsertString(hwndComboOP,-1,TEXT("/")); return TRUE; } 3

简易电子闹钟的设计报告

编号:基础工程设计说明书 题目:LED强度可调驱动电路设计 院(系):电子工程与自动化学院 专业:光电信息科学与工程 学生姓名:李朝庭 学号: 指导教师:彭智勇 职称:高级实验师 2017年1 月1日

摘要 目前,LED 灯的亮度可调通过有两种可行方案:第一种是通过占空比电压来输出不同的电压,从而实现亮度可调;第二种通过控制数模转换器来输出不同的电流,然后经过放大器来进行发大,从而实现输出不同的电压,来实现亮度可调。对于第一种方案,优点是设计简单,且使用的电子器件类较少,造价成本低,其集成度低,电路原理不复杂,适于现代社会发展的需求。对于第二种方案,它设计图复杂,其集成度不高,且使用了数模转换器,因此和第一种设计方案相比略高。所以本设计采用了第一种方案。本设计的结果是设计制作一种路LED光强独立可调的 led 调光电路;自动调光时可使等在熄灭、微亮、较量及最亮四种状态中不断循环;实现灯光的循环调节功能(循环时间分别为为 2s、4s、6s、8s、10s、12s);关键词:LED;色温;RGB;驱动;调光 Abstract At the end of twentieth Century, the electronic technology has developed rapidly. In the promotion, the modern electronic products have penetrated almost all areas of the society. It has greatly promoted the development of social productive forces and the improvement of social information. Time is always so valuable to people, the work of the busy and complicated and easy to make people forget the current time. Forget to do, when it is not very important, this not hurt the important essentials. Simple electronic alarm clock is a used to after a certain period of time through the alarm sounds and wakes up the user a simple electronic circuit and is used to prevent nap sleep overdo the instrument from time to time to wake up the user's role. This system mainly consists of 555 timer square wave signal generator and the input control through the key input control of the two bit counter timing circuit can be input to the input of a time of the electronic clock, simulation and time interval can be within 99 seconds of continuous adjustable. Key words: timing circuit; 555 timer; multi harmonic oscillator; time clock 目录

基于LabVIEW的简易计算器设计

第1章绪论 1.1 虚拟仪器简介 虚拟仪器(virtual instrument)是基于计算机的仪器。计算机和仪器的密切结合是目前仪器发展的一个重要方向。粗略地说这种结合有两种方式,一种是将计算机装入仪器,其典型的子就是所谓智能化的仪器。随着计算机功能的日益强大以及其体积的日趋缩小,这类仪器功能也越来越强大,目前已经出现含嵌入式系统的仪器。另一种方式是将仪器装入计算机。以通用的计算机硬件及操作系统为依托,实现各种仪器功能。虚拟仪器主要是指这种方式。上面的框图反映了常见的虚拟仪器方案。 虚拟仪器实际上是一个按照仪器需求组织的数据采集系统。虚拟仪器的研究中涉及的基础理论主要有计算机数据采集和数字信号处理。目前在这一领域内,使用较为广泛的计算机语言是国NI公司的LabVIEW。 虚拟仪器的起源可以追溯到20世纪70年代,那时计算机测控系统在国防、航天等领域已经有了相当的发展。PC机出现以后,仪器级的计算机化成为可能,甚至在 Microsof t公司的 Windows 诞生之前,NI公司已经在Macintosh计算机上推出了LabVIEW2.0 以前的版本。对虚拟仪器和 LabVIEW [2]长期、系统、有效的研究开发使得该公司成为业界公认的权威。目前LabVIEW 的最新版本为 LabVIEW2011,LabVIEW 2009 为多线程功能添加了更多特性,这种特性在1998 年的版本 5 中被初次引入。使用 LabVIEW 软件,用户可以借助于它提供的软件环境,该环境由于其数据流编程特性、LabVIEW Real-Time 工具对嵌入式平台开发的多核支持,以及自上而下的为多核而设计的软件层次,是进行并行编程的首选。 普通的 PC 有一些不可避免的弱点。用它构建的虚拟仪器或计算机测试系统性能不可能太高。目前作为计算机化仪器的一个重要发展方向是制定VXI 标准,这是一种插卡式的仪器。每一种仪器是一个插卡,为了保证仪器的性能,又采用了较多的硬件,但这些卡式仪器本身都没有面板,其面板仍然用虚拟的方式在计算机屏幕上出现。这些卡插入标准的 VXI 机箱,再与计算机相连,就组成了一个测试系统。VXI仪器价格昂贵,目前又推出了一种较为便宜PXI 标准仪器。 1.2 LabVIEW简介 LabVIEW是一种程序开发环境,由美国国家仪器(NI)公司研制开发,类似于C 和BASIC开发环境,但是LabVIEW与其他计算机语言的显著区别是:其他计算机语

数字电子钟实验报告

咸阳师范学院物理与电子工程学院 课程设计报告 题目: 班级: 姓名: 学号: 指导教师: 成绩: 完成日期:年月

目录 第一章概述 3 第二章数字电子钟的电路原理 4 第三章电路调试与制作11 第四章总结与体会12 第五章附录13

第一章概述 数字钟是采用数字电路实现对.时,分,秒.数字显示的计时装置,广泛用于个人家庭,车站, 码头办公室等公共场所,成为人们日常生活中不可少的必需品,由于数字集成电路的发展和石英晶体振荡器的广泛应用,使得数字钟的精度,运运超过老式钟表, 钟表的数字化给人们生产生活带来了极大的方便,而且大大地扩展了钟表原先的报时功能。诸如定时自动报警、按时自动打铃、时间程序自动控制、定时广播、自动起闭路灯、定时开关烘箱、通断动力设备、甚至各种定时电气的自动启用等,所有这些,都是以钟表数字化为基础的。因此,研究数字钟及扩大其应用,有着非常现实的意义。 虽然市场上已有现成的数字集成电路芯片出售,价格便宜,使用方便,这里所制作的数字电子可以随意设置时,分的输出,是数字电子中具有体积小、耗电省、计时准确、性能稳定、维护方便等优点。 课程设计目的 (1)加强对电子制作的认识,充分掌握和理解设计个部分的工作原理、设计过程、选择芯片器件、电路的焊接与调试等多项知识。 (2)把理论知识与实践相结合,充分发挥个人与团队协作能力,并在实践中锻炼。 (3)提高利用已学知识分析和解决问题的能力。 (4)提高实践动手能力。

第二章数字电子钟的电路原理 数字电子钟的设计与制作主要包括:数码显示电路、计数器与校时电路、时基电路和闹铃报时电路四个部分。 1.数码显示电路 译码和数码显示电路是将数字钟的计时状态直观清晰地反映出来。显示器件选用FTTL-655SB双阴极显示屏组。在计数电路输出信号的驱动下,显示出清晰的数字符号。 2.计数器电路 LM8560是一种大规模时钟集成电路它与双阴极显示屏组可以制成数字钟钟控电路。 3.校时电路 数字钟电路由于秒信号的精确性和稳定性不可能做到完全准确无误,时基电路的误差会累积;又因外部环境对电路的影响,设计产品会产生走时误差的现象。所以,电路中就应该有校准时间功能的电路。通过手动调节按键,达到校准的目的。 4.定时报警电路 当调好定时间后并按下开关K1(白色键),显示屏右下方有红点指示,到定时时间有驱动信号经R3使VT1工作,即可定时报警输出。 芯片资料 LM8560是一种大规模时钟集成电路它与双阴极显示屏组可以制成数字钟钟控电路。作为时钟,它准确醒目;作为控制开关,它动作无误;在1小时59分钟或59分钟内,能任意暂停,使用十分方便。 仔细观察从0-9的每个数字并比较图1所示的笔段。内部电路参看图2, LM8560各脚功能,参看图3。

第02讲 简易计算器的设计

第02讲计算器 2.1 计算器简介 大家都知道,计算器是日常生活中不可缺少的一个工具,在Microsoft的Windows操作系统中,附带了一个计算器程序,有标准型和科学型两种模式。Windows XP下的标准型和科学型计算器程序分别如图2-1和图2-2所示。 图2-1 Windows XP下的标准型计算器 图2-2 Windows XP下的科学型计算器 Windows操作系统下附带的计算器程序功能相当的强大,本课我们将模仿Windows的计算器,使用Visual C# 2005开发平台开发一个功能相对简单的计算器应用程序,它能完成加、减、乘、除运算。 接下来详细的介绍简易计算器的设计方法和步骤。

2.2 界面设计及属性设置 用户界面设计是软件开发中非常重要的一个部分,用户界面的好坏直接影响软件的质量,本节将介绍如何设计简易计算器的用户界面以及界面上各控件的属性设置。 2.2.1 界面设计 打开Visual Studio 2005开发工具,新建一个Windows应用程序,然后在窗体上依次放置1个TextBox和17个Button控件,如图2-1所示(设置好属性后)。 图2-1 计算器用户界面 2.2.2 属性设置 窗体和各控件的属性设置如表2-1所示。 表2-1 窗体和各控件的属性

2.3 编写代码 本程序需要用到一些公共变量,例如用来接收操作数、运算结果,判断输入的是否为小数等,因此首先在代码的通用段声明以下变量: //****************************************************************** double num1, num2, result; // 操作数及运算结果 bool decimalFlag = false; // 判断输入的是否为小数 string myOperator; // 操作类型 //******************************************************************

LABVIEW计算器设计报告

虚拟仪器大作业——模拟计算器 班级:电1004 姓名: 学号:20102389

一、设计思想: .创建3个字符串显示控件num1,num2,num3,其中: 1、第一个输入数据存储在num1中 2、第二个输入数据存入num2中 3、将其赋给 num3,并使num2为空,以便输入的数据存入num2 4、所有的运算是在num1和 num3间进行 5、运算结果都赋给result,同时赋给num1,用于下一次的运算 .创建4个布尔开关按钮change,change1,change2,change3,其中: 1、Change的真假用来判断是第一个数据还是第二个数据 2、change1的功能是在输入=,运算完后,不需要初始化即可进行下一次运算 3、change2用来去掉数据小数末尾的0 4、change3用来保证backspace键仅对输入的数据有效,对运算结果无效 .创建2个数值显示控件type1,type2,并分别在其后面板的属性——数据类型——表示法中选择U8其中: 1、type1用来存储运算符号 2、type2用来保证连续“+、-、*、/”的正确性 3、所有的运算结果都赋给result 4、result经过去零处理后得到result1,将数据显示在前面板上。 二、实现过程 1、面板按键的设计及感应 首先,在前面板上建立一个簇 然后在簇中再建立布尔量,复制20个以满足键的需求(0--9十个数字键,一个小数点键,一个等号键,四则运算键,一个开方键,一个平方键,一个倒数键,一个反号键,一个清零键及一个退出键并注意按键的顺序)。 将按键给值并作适当的美化处理

在后面板中通过将簇中元素按产生的顺序组成一个一维数组,这样就实现了每个键与数字(0--20)之间的对应。每次按下一个键时,通过 查找出对应的键并把结果(对应的数字)连接到一个case结构,然后执行对应case结构中的程序,至此就完成了对一个键的感应过程。 2、数字的键入(0~8键入1~9数字) 由于第一个输入和第二个输入所存放的地方不同(第一个存于num1,第二个存于num2→mun3再清空num2),所以有必要对此分开处理。创建2分支(真、假)的case结构。 用change控制分支的选择:在处创建局部变量并转换为读入。由于数字的键入是数据输入,change3用来保证backspace键仅对输入的数据有

简易计算器设计实验报告

简易计算器设计实验报告 一.设计任务及要求 1.1实验任务: 根据计算器的原理设计一个具有加减乘除功能的简易计算器。如:5+3*4/8=4。 1.2 实验基本要求: (1)实现最大输入两位十进制数字的四则运算(加减乘除)。 (2)能够实现多次连算(无优先级,从左到右计算结果)。 如:12+34*56-78/90+9=36 (3)最大长度以数码管最大个数为限,溢出报警。 二.实验设计方案 (1)用QuartusII的原理图输入来完成系统的顶层设计。 (2)用VHDL编写以及直接拖模块来各功能模块。 (3)通过2个脉冲分别实现个位数和十位数的输入。 (4)通过选择每次的输出数值,将输出值反馈到运算输入端 (4)通过除法运算实现十六进制到十进制的转换输出。 其具体实现流程图如下:

三系统硬件设计 FPGA: EP2C5T144C8目标板及相应外围硬件电路。(从略) 四系统软件设计 1.数据输入模块 原理:用VHDL创建模块,通过两个脉冲分别对两个数码管进行输入控制,再通过相应运算模块将两个独立数据转化成两位十进制数字。 2.运算模块 原理:用VHDL创建模块,四种运算同步运行,通过按键加、减、乘、除选择输出对应的计算结果,当按键等号来时,将所得结果反馈给运算模块输入端。具体实现代码见附录二。 3.输出模块 原理:用VHDL创建模块,通过按键等号来控制显示运算对象还是运算结果,当等号按下时,输出计算结果,否则显示当前输入的数据,并且通过除法模块将十六进制转化为十进制。当输出结果溢出是LED0亮,同时数码管显示都为零。部分实现见附录二。 五实验调试 输入数据12,再按加法键,输入第二个数字25,按等号键,数码管显示37;按灭加法、等号键,输入第二个数据2,依次按等号键,减法键,数码管显示35;同上,按灭减法键、等号键,输入第三个数据7,依次按等号键,除法键,数码管显示5;按灭除法键、等号键,输入第四个数据99,依次按等号键,乘法键,数码管显示495,按灭乘法键、等号键,当前显示为99,依次按等号键、乘法键,数码管显示49005,同上进行若干次之后,结果溢出,LED0亮,同时数码管显示都为零。当输出为负数时,LED0灯变亮,同时数码管显示都为零。六实验结论 本实验基本实现了计算器的加减乘法运算功能,但是存在一个突出的缺陷,就是当输出结果时,必须先按等号键导通数据反馈,再按运算键选择输出结果。这与实际应用的计算器存在很大的差距。但是,本设计可以通过等号键实现运算对象和运算结果之间的切换。

单片机课程设计--简易电子钟.doc

单片机课程设计报告设计课题:简易电子时钟的设计 专业班级:07通信1班 学生姓名:黎捐 学号:0710618134 指导教师:曾繁政 设计时间:2010.11.5—2010.12.20

一、设计任务与要求 (1)设计任务: 利用单片机设计并制作简易的电子时钟,电路组成框图如图所示。 (2)(2) 设计要求:1)制作完成简易的电子时钟,时间可调整。 2)有闹钟功能。 二、方案设计与论证 简易电子时钟电路系统由主体电路和扩展功能电路两主题组成,总体功能原理是以STC89C52单片机为主要的控制核心,通过外接4个独立式键盘作为控制信号源,八个七段数码管作为显示器件,蜂鸣器作为定时器件,单片机实时的去执行相应的功能。在数码管上显示出来,此时通过不同的按键来观看和调节各种数据。CPU 控制原理图如图1所示。 图1. CPU 控制原理图 三、硬件系统的设计 3.1 STC89C52控制模块 STC89C52是一个低功耗高性能单片机,40个引脚,32个外部双向输入/输出(I/O )端口,同时内含2个外中断口,2个16位可编程定时计数器,2个全双工串行通信口,STC89C51可以按照常规方法进行编程,也可以在线编程。其将通用的微处理器和Flash 存储器结合在一起,特别是可反复擦写的Flash 存储器可有效地降低开发成本。 MCS-52单片机内部结构 8052单片机包含中央处理器、程序存储器(ROM)、数据存储器(RAM)、定时/计数器、并行接口、串行接口和中断系统等几大单元及数据总线、地址总线和控制总线等三大总线,现在我们分别加以说明: 中央处理器: 中央处理器(CPU)是整个单片机的核心部件,是8位数据宽度的处理器,能处理8位二进制数据或代码,CPU 负责控制、指挥和调度整个单元系统协调的工作,完成运算和控制输入输出功能等操作。 数据存储器(RAM): 8052内部有128个8位用户数据存储单元和128 个专用寄存器单元,它们是统一编 时间显示显示 主控器(51单片机) 时间 调整 声音报 时 (选做)

单片机设计简易计算器

简易计算器 Simply Calculator 1 设计思想 此计算器有键盘部分、单片机、显示部分三部分组成,键盘部分主要完成输入功能;单片机主要完成数据处理功能,包括确定按键,完成运算,以及输出数据;显示器部分主要完成单片机输出的显示。 本设计的思路是利用单片机性能好,稳定性强的优点来实现系统的运行。设计大致可以分为三个步骤:第一步,硬件的选取和设计;第二步,程序的设计和调试;第三步,Protues 系统仿真。 硬件是设计的骨骼,不仅关系到设计总体方向的确定,还要综合考虑节能,环保,以及稳定性和经济性等各种因素。因此需要花费大量的时间。硬件的选取最为重要,包括选用的芯片,显示设备的选取,输入设备的选取等。本设计是通过单片机来实现的,因此选用了ATMEGA16单片机作为主体,输入设备选用矩阵键盘。程序是硬件的灵魂,是实现设计的中心环节。本设计使用的程序语言是C语言,在“ICC AVR”中运行,调试,直到运行出正确结果,然后输出后缀名为.HEX格式的文件,以备在Protues中仿真使用。程序是设计的关键,程序的调试需要大量的时间,耐心,还够要有足的细心才能成功。本设计中就出现了大量的错误,经过认真修改,最终才能运行出正确结果。最后的系统仿真是设计是否成功的验证,是设计不可缺少的重要环节。这就要求能掌握Protues的一些基本操作。2原理分析 2.1矩阵键盘的扫描 图2.1 矩阵键盘图

如图2.1所示,单片机的8个I/O口和矩阵键盘相连,用8个I/O口来控制矩阵键盘的16个按键是非常有意思的,首先我们设置单片机的PD0—PD7为输出,且PD0—PD3依次设置为低电平,而PD4—PD7设置为高电平,然后我们设置PD4—PD7为输入,而PD0—PD3仍然为输出,假如此时M1键按下,则PD0与PD4相连,因为PD0是低电平,而PD4是输入,所以PD4会被拉为低电平,同理,如果M2被按下,则PD5会被拉低,M3按下,PD6会被拉低,M4按下,PD7被拉低。这是判断有无键盘按下的过程,当我们判断是那一个键盘按下时,我们首先设置8个I/O口为输出,输出为FE,即,PD0为低电平,其他全为高电平,然后我们设置PD4—PD7为输入,如果M1被按下,则PD4会比被拉为低电平,此时会变成EE,同理可以知道M2被按下时会变为DE,M3被按下时会变为BE,M4被按下时会变为7E。同理我们可以设置8个I/O口输出FD来检测M5—M8是否被按下,设置8个I/O口输出FC来来检测M9—M12,设置8个I/O口输出F7来检测M13—M16,如果M1—M4没有被按下,就继续检测M4—M8,一次类推,就可以检测出16个按键了。在这次设计中,16个按键M1—M16所对应检测值分别为:EE,DE,BE,7E,ED,DD,BD,7D,EB,DB,BB,7B,E7,D7,B7,77。 2.2 数字显示与计算 本次设计选用的显示器是1602液晶显示器,此液晶显示器能显示32个字符,VSS接地,VDD接电源正极,E为时使能信号,R/W为读写选择端(H/L),RS为数据/命令选择端(H/L),D0—D7为数据I/O口。 首先我们初始化液晶显示器,然后显示出第一个被按下的数,并且使光标右移,如果有第二个数按下,则据继续显示,以此类推,然后把所有显示出来的数换算成一个数,如果按下“+”号,则显示出“+”,并且同理显示出“+”号后面按下的数字,然后调用加子程序,运算出结果,如果按下的是“-”,则调用减子程序,如果按下“*”,则调用乘子程序,如果按下“/”,则调用除子程序。然后再调用显示结果子程序,显示出结果。

简易计算器课程设计报告

《C++程序设计》(MFC)课程设计报告 设计题目:简易计算器 班级: 姓名: 学号: 指导教师: 时间:2010年6月30日

目录 1.设计目标…………………………………………………………… 2.设计内容…………………………………………………………… 3.设计思想…………………………………………………………… 4.设计说明…………………………………………………………… 5.设计步骤…………………………………………………………… 6.主要成员函数关系图……………………………………………… 7.程序主要代码……………………………………………………… 8. 难点分析…………………………………………………………… 9. 总结…………………………………………………………………

简易计算器(MFC) 1.设计目标 了解Windows应用程序的结构与DOS程序的不同,掌握应用MFC类库编写Windows应用程序的基本模式。 2.设计内容 以简易计算器为例,通过对简单应用软件计算器的设计,编制、调试,实现简单的加,减,乘,除等运算,以学习应用MFC库类编写对话框的原理,加深对C++类的学习及应用。 3. 设计思想 基于MFC库类对对话框界面的设计,通过创建类成员函数成员变量,编辑控件创建消息映射,调用消息函数完成数据的输入输出,实现计算功能。生成简单的应用软件。 4.设计说明 (1)包含的功能有:加、减、乘、除运算,开方、平方等功能。 (2)计算器上数字0—9为一个控件数组,加、减、乘、除为一个控件数组,其余为单一的控件。 (3)输入的原始数据、运算中间数据和结果都显示在窗口顶部的同一个标签中。 (4)计算功能基本上是用系统内部函数。 (5)程序可以能自动判断输入数据的正确性,保证不出现多于一个小数点、以0开头等不正常现象。 (6)“CE”按钮可以清除所有已输入的数据从头计算 5. 设计步骤 (1)选择FileNewlProject命令,选择MFC AppWizard(exe)创建Project名为Caa,按确定。在弹出界面选择创建对话框,单击Finish按钮 (2)在生成的设计界面中加入控件,得到计算器应用界面。如图:

相关文档
最新文档