您好,欢迎访问三七文档
当前位置:首页 > 商业/管理/HR > 经营企划 > 2009年全国高考辽宁省试题答案(文数)
面向对象程序设计之姓名:咸麻锐学号:12009242518指导老师:郭辉一、系统设计1.1、系统功能结构局域网内部通信系统信息通信系统升级系统设置用户搜索访问公公资源访问对方主机图1.1局域网内部通讯系统功能机构图1.2、局域网内部通信系统的E-R图头像用户名提示文本主机名IP地址图1.2用户实体E-R图数据库设计三、公共模块设计数据库操作类系统工具类四、系统托盘模块设计4.1、系统托盘模块设计概述4.2、系统托盘设计技术分析4.3、系统托盘模块实现过程4.1、系统托盘模块设计概述系统托盘模块用于定义系统蓝图标。局域网内部通信系统的主要窗体时继承对话窗体编写的,该窗体在系统任务栏中不会显示相应的任务标题,主窗体最小化后将会隐藏,这时必须使用快捷建或者系统托盘中的图标执行显示窗体的命令。4.2、系统托盘设计技术分析系统托盘模块使用了JDK6.0提供的新功能,其中包含SystemTray类和TrayIcon类,他们分别用与创建系统托盘和系统图标对象。另外,系统蓝图标试用了弹出菜单技术,为局域网内部同性系统提供了部分快捷操作。创建弹出菜单和菜单项由PopuMenu类和MenuItem类实现。一个PopuMenu对象可以使用add()方法添加多个MenuItem对象。每个MenuItem对象必须使用addActionListener()方法添加实现指定的菜单项业务逻辑的监听器,其监听的实现和普通按钮相同。4.3、系统托盘模块实现过程在程序主类中创建SystemTrayInitial()方法,该方法用于初始化托盘。创建createMenu()方法,该方法用于创建系统蓝图标的弹出菜单。包括打开,退出,访问服务器3个菜单项。创建SysTrayActionListener内部类,用于实现ActionListener接口,是系统蓝图标的双击事件监听器,用于用户在双击系统图标后,激活监听器将主窗口的显示事件实现。五、系统工具设计5.1、系统工具模块概述5.2、系统工具模块分析5.3、系统工具模块实现过程使用的数据表是:tb_users5.1、系统工具模块概述局域网内部通信系统工具模块起到维护的作用,包括用户搜索,更新程序外观(未实现),系统升级(未实现)。在程序启动时系统将会主动搜索内部网络中所有的主机或路由器,并使用计算机的信息创建用户对象,然后将该用户对象保存到数据库中。5.2、系统工具模块分析系统工具模块使用了Java的lookAndFeel外观技术,每个LookAndFeel外观技术会包含不同的空间的UI界面,不同的外观中控制外观也会不同,例如Windows系统的“Window经典样式”和“WindowXP样式”外观按钮,列表,表格,菜单,工具栏甚至窗体的外观都不会相同。使用UImanager类的setLookAndFeel()方法可以设置不同的LookAndFeel外观。其中本系统默认的外观时Java默认的“Swing”默认的外观。而使用getSystemLookAndFeelClassName()方法用于获取“当前系统”的外观名称,然后调用setLookAndFeel()方法将外观名称设置为“默认外观”。必须在创建窗体和空间之前使用UIManager类中的setLookAndFeel()方法设置外观,否则会出现bug.5.3、系统工具模块实现过程在程序珠泪中编写createSysToolPanel()方法,用于创建系统工具选项卡。在该选项卡中包含界面选择,用户搜索,系统操作(程序更新)3个部分。createSysToolPanel()方法需设置好该界面的布局和初始化工作。在createSysToolPanel()方法中创建界面选择部分,该部分用以列出空间显示的两种外观选择,当用户选择其中一个外观并单击“确定”时后,该外观会保存,然后提示用户创新运行软件,改外观才会被使用。在createSysToolPanel()方法中创建用户搜索部分。在createSysToolPanel()方法中创建系统的操作部分(未实现)。创建搜索新用户的方法:使用按钮事件监听器SearchUserActionListener类,该监听器中调用Resource工具类中的searchUsers()方法搜索指定IP范围的所有用户的计算机信息。(在这会出现死锁现象,大概是因为线程逻辑使用不当导致的,目前我无法解决,所以只能将ip的范围缩小到x.x.x.0-x.x.x.10这么个网段的范围内!)。六、用户管理模块设计6.1、用户管理模块概述6.2、用户管理模块技术分析6.3、用户管理模块实现过程6.4、单元测试6.1、用户管理模块概述用户管理模块类似于聊天工具的好友列表,其中包括用户信息,另外在用户名单上单击鼠标,在但出的快捷菜单中提供了“更名”,“添加用户”,“删除用户”,“发送信息”等功能。6.2、用户管理模块技术分析用户管理模块主要用于显示用户列表,这个用户列表时使用JTree树空间实现的。其中TreeCellRenderer接口用于创建自定义的图标的树单元格,(通俗的将就是加个头像,让他更像专业的东东)。TreeCellRenderer接口之定义了一个getTreeCellTendererComponent()方法,该方法将关于树节点的全部信息作为参数,在实现自己饿树单元格时,可以忽略不要的参数,也可以直接访问value参数6.2.1、getTreeCellRendererComponent()方法的参数说明参数名称描述TreeJTree数对象Value当前数单元格的值Select数单元格(树节点)数否被选中Expanded节点是否展开Leaf是否时树的叶节点Row当前的节点所在行号HasFocus当前节点是否有焦点6.3、用户管理模块实现过程创建UserTreeRanderer类,该类继承JPanel类成为一个面板空间,同时该类也实现了TreeCellRenderer接口成为树节点的渲染器。该类的构造方法中接受了3个图标参数,分别用于打开,关闭,和叶节点的图标。在UserTreeRanderer类中重写父类的getTreeCellRendererComponent()方法,他负责渲染界面样式。用于获取主窗体的宽度,并使用该宽度设置节点的宽度,世界店与窗体同款。当某个节点(用户被选中时)被选中时,该方法会使用指定的颜色绘制节点便捷,以突出被选中效果(显得更专业一些)。创建ChatTree类,该类继承JTree类实现了自定义的树控件,并且试用了之前的UserTreeRanderer树节点渲染器,在构造方法初始化类的属性,在调用sortUsers()方法添加并且显示用户列表。在ChatTree类编写sortUsers()方法,该方法的主题是一个内部线程,其首先获取本地的IP地址(localhostIp),使用该地址从数据库中获取本地用户的对象,并将用户显示在用户列表的首位,然后从数据库中获取所有用户对象,将除自己以外的用户分别添加到用户列表中。最后是第一个用户处于被选择的状态,并更新状态蓝标签中显示的用户数量。在ChatTree类中编写delUser()方法,用于删除当前用户列表中被选中的用户的对象。该方法首先获取选择的树节点,从该节点中获取绑定的用户对象,然后以对话框的形式提示用户是否确认删除,如果确认,将会调用delUser()方法,从数据库中删除用户的信息,最后调用根节点的remove()方法,删除该用户节点。6.4、单元测试用户管理模块中定义了封装用户信息的User类,该类除了封装用户的IP,hostName,Name等属性以外,还提供了获取用户的头像的getIconImg()方法,此方法返回的时Icon类的实例。可以直接添加到相应的空间中。(如果User类中出现故障,整个用户列表界面都将会被破坏)七、通信系统设计7.1、通信模块概述7.2、通信模块技术分析7.3、通信模块实现过程7.1、通信模块概述通信模块是局域网内部通信系统的核心模块。用于不同计算机之间的通信。这种通信方式能够实现多泰计算机之间的通信,而不存在类似电话占线的问题(但是本系统的出现了只能允许两台计算机之间的通信的尴尬局面,这不是设计的初衷,应该还是线程逻辑的问题,目前我无法解决)。7.2、通信模块技术分析Java中对UDP数据报的发送和连接时通过DatagramSocket类实现的,DatagramPacket类表示UDP数据包,他封装了数据报的属性和数据,两个类的工作流程如下所示:通信模块使用基于UDP协议的数据报可套接字事先计算机之间的信息通信。UDP协议十一中无连接的协议,在用该协议进行数据传输时,发送放只需要知道对方的IP地址和端口号即可,不需要连接,当连接的远程主机端口号处于监听状态时,UDP自然会处于连接状态。7.2.1、DatagramSocket类和DatagramPacket类的工作流程图7.1.1DatagramSocket类和DatagramPacket类的工作流程DatagramSocket端口、1234DatagramSocket端口、1234DatagramPacket目的:host4321DatagramPacket目的:host4321DatagramPacket目的:host4321DatagramPacket目的:host4321DatagramSocket端口、4321DatagramSocket端口、43217.3、通信模块实现过程创建TelFrame类,该类必须继承JFrame类实现Swing的窗体,在类的空间声明代码中定义各种窗体需要的所有空间,例如接受信息的文本框,输入信息的文本框,发送按钮,信息按钮以及各种滚动条,另外,还需要定义访问数据库的Dao实例,在通信窗口右侧显示的用户信息需要使用Dao实例从数据库中获取。编写getInstance()方法,用于获取唯一的窗体的实例,该方法创建的所有窗体实例都会保存到Map的实例中。除非退出局域网内部痛心系统,否则窗体实例对象会一直保存在这个集合类中。当用户再次打开已存在的窗体时,将直接从集合类总获取,不再创建窗体实例。在构造方法中初始化TelFrame类的所有控件属性。该构造方法接受DatagramSocket,DatagramPacket和ChatTree类的3个参数,他们分别时数据Socket服务,数据报和用户列表的实例对象,在痛心窗体中需要使用它们。编写receiveInfo()方法,该方法用于接受其他用户发送来的信息。首先会从数据报中获取发送信息的用户IP地址,然后从数据库中获取该IP地址的用户姓名,同时将这些用户信息显示在信息文本框中,最后将数据报的通信信息追加到信息文本框中。创建发送按钮事件监听器“sendActionListener类”他是一个内部类,并且该类实现了ActionListener接口。拥有处理按钮时间的功能,他在actionPerformed()方法中获取数据报的通信信息。八、开发过程中的难点分析和JDK6.0新增的系统托盘技术资源路径问题:URLpath=EQ.class.getResource(“/NEWFACE/”+faceNum+”.png”);ImageIconimg=newImageIcon(path);使用JDK6.0新增的系统托盘功能:在jdk6中awt新增了SystemTray类和TrayIcon类,他们可以在系统托盘区创建一个托盘程序。SystemTray类表示桌面右下角的系统托盘,系统托盘由运行在桌面上的说有应用程序共享。可以使用getSystemTray()方法获取系统托盘对象,该方法总是对每个应用程序返回形同的实例。其语法如下:SystemTray.getSystemTray()并不是所有的操作都能支持系统托盘,当操作系统不存在或者不支持系统托盘时,getSystemTray()方法将会抛出UnsupportedOpenratio
本文标题:2009年全国高考辽宁省试题答案(文数)
链接地址:https://www.777doc.com/doc-3091536 .html