软件工程 实验报告

合集下载

软件工程专业课实验报告(一)2024

软件工程专业课实验报告(一)2024

软件工程专业课实验报告(一)引言:软件工程专业课实验报告(一)是关于软件工程领域中的某个具体实验或项目的报告。

本文将从概述、正文内容和总结几个方面详细介绍该实验报告的内容。

概述:本实验报告旨在通过具体实验或项目,让学生深入理解软件工程的相关原理和技术,并掌握软件开发过程中常用的工具和方法。

通过实践,学生能够提高分析、设计和实现软件系统的能力。

正文内容:1. 实验目的1.1 确定实验目标和预期成果1.2 建立实验环境和所需工具1.3 设定实验计划和时间安排2. 实验过程2.1 实验前的准备工作2.1.1 研究和理解实验要求和相关文献2.1.2 熟悉软件开发过程与方法2.1.3 确定实验所需的技术和工具2.2 实验设计与实施2.2.1 进行需求分析和系统设计2.2.2 编码和测试软件系统2.2.3 进行系统部署和验证2.3 实验结果和分析2.3.1 统计和总结实验中的数据和指标2.3.2 对实验结果进行分析和解释2.3.3 探讨实验中出现的问题和改进方法3. 实验总结和反思3.1 总结实验过程和结果3.2 分析实验中遇到的问题和挑战3.3 反思实验过程中的改进和优化方向4. 实验心得和体会4.1 对软件工程知识的理解和应用4.2 对工具和方法的熟悉和运用4.3 对团队合作和沟通的重要性的认识5. 实验成果和展望5.1 展示实验的成果和效果5.2 对未来的工作和学习方向的展望5.3 提出对实验的改进和拓展建议总结:通过本次实验报告的完成,我们深入学习了软件工程领域中的具体实践和应用。

实践中,我们掌握并应用了软件开发过程中的各种工具和技术,提高了我们的软件设计和开发能力。

此外,我们也认识到团队合作和良好的沟通是软件工程中不可忽视的重要因素。

通过实验的总结与反思,我们对未来的学习和工作有了更加明确的规划和展望。

结语:软件工程专业课实验报告(一)是一个重要的实践环节,通过实践帮助我们巩固学习知识、提高实践能力。

软件工程实验报告

软件工程实验报告

软件工程实验报告一、实验目的。

本实验旨在通过对软件工程的实际操作,加深对软件工程理论知识的理解,提高学生的软件开发能力。

具体目的包括:1. 熟悉软件工程的基本概念和原理;2. 掌握软件需求分析、设计、编码、测试等基本方法和技术;3. 提高团队协作能力和项目管理能力。

二、实验内容。

本次实验内容主要包括以下几个方面:1. 软件需求分析,通过对一个实际问题的需求收集和分析,明确软件的功能和性能需求;2. 软件设计,根据需求分析的结果,进行软件系统的总体设计和详细设计;3. 软件编码,根据设计文档,进行软件的编码工作;4. 软件测试,对编码完成的软件进行测试,确保软件的质量和稳定性。

三、实验过程。

1. 软件需求分析阶段。

在软件需求分析阶段,我们小组首先进行了需求的收集和整理工作。

通过与用户的沟通和调研,我们明确了软件的功能需求和性能需求,并对其进行了详细的文档记录。

在需求分析的过程中,我们也发现了一些需求之间的冲突和不完整之处,因此进行了进一步的讨论和修正。

2. 软件设计阶段。

在需求分析阶段完成后,我们进行了软件系统的总体设计和详细设计工作。

在总体设计阶段,我们确定了软件的整体架构和模块划分,明确了各个模块之间的接口和关系。

在详细设计阶段,我们对每个模块进行了具体的设计,包括算法、数据结构、接口等方面的设计。

3. 软件编码阶段。

在软件设计完成后,我们开始了软件的编码工作。

在编码阶段,我们严格按照设计文档的要求进行编码,注重代码的规范和可读性。

在编码过程中,我们也进行了一些单元测试,确保编码的正确性和稳定性。

4. 软件测试阶段。

在软件编码完成后,我们进行了软件的测试工作。

在测试阶段,我们采用了黑盒测试和白盒测试相结合的方法,对软件进行了功能测试、性能测试、安全测试等多方面的测试。

在测试过程中,我们发现了一些问题并及时进行了修复。

四、实验总结。

通过本次实验,我们深刻地体会到了软件工程理论知识在实际项目中的应用,提高了我们的团队协作能力和项目管理能力。

软件工程试验报告

软件工程试验报告

软件工程试验报告第一篇:软件工程试验报告实验项目名称:需求分析(所属课程:软件工程概论)1.实验目的1.选择要设计的系统,使用UML进行需求分析,了解所要完成系统的功能需求,性能需求,接口需求等。

2.学习实使用Rational Rose 或其它软件工程工具绘制用例图、活动图。

2.实验内容使用Rose 绘制系统的用例图。

1.Rational Rose介绍Rational Rose是基于UML而产生的,是软件开发过程中的不可或缺的一个建模工具。

(1)Rational Rose的特点:λ支持多种语言,如Ada、CORBA、Visual Basic、Java等;λ支持模型的Internet发布;λ可以生成简单、清晰且定制灵活的文档;λ双向工程保证了模型和代码高度一致;λ支持逆向工程,建立代码框架;λ支持多种关系型数据库的建模;λ从需求分析到测试,在整个软件生命周期中,都为团队开发提供强有力的支持。

(2)Rational Rose的作用λ整个开发团队可以使用用例图,来获得一个系统高层次的视图,并且可以协商项目的范畴;λ项目经理可以使用用例图和文档,把项目分解成便于管理的多个模块;λ系统分析员和客户在看到用例规格描述文档的时候,就可以明白系统将会提供什么样的功能;λ技术编写者在看到用例规格描述文档时,就可以着手编写用户手册和培训计划;λ系统分析员和软件开发者在看到时序图和协作图时,就可以明白整个系统的逻辑流程、对象以及对象之间的消息2.安装Rational Rose ①双击Rational Rose 2007的安装程序,进入安装界面;按照系统提示一步一步完成系统的安装。

其中在选择安装产品时,选择“Rational Rose Enterprise Edition”;并且在设置创建程序位置时,选择创建一个本地的应用程序而非网络的,即选择“Desktop installation from CD”。

②安装成功,进入Rational Rose界面,如图1-1所示。

软件工程综合实验报告

软件工程综合实验报告

软件工程综合实验一、实验目的和要求通过本次实验掌握综合运用软件工程原理和技术进行项目开发与管理的知识,加深对所学书本知识的理解。

要求学生实验前认真消化书本精心准备本次实验本次实验的上机时数为 :8学时。

二、实验环境1. 硬件环境 :PC机2. 软件环境 :Windows系统,C 语言系统或Java、C++等其它语言工具三、实验有关知识1. 分析建模2. 设计建模(以下可以不做)3. 编码4. 测试方法5. 项目维护四、实验内容和要求1. 实验内容 (4 学时 )题目自拟,认真分析所选题目,进行软件需求分析、软件总体设计和详细设计,用书面文字形式描述出来,(以下可以不做)并上机实现所设计的软件程序,进行测试、调试和维护。

2. 实验要求要求使用结构化分析技术结合面向对象方法综合分析课题需求,进行分析建模。

运用模块化与结构化设计原理将分析模型转换为设计模型(面向结构)或运用面向对象设计原理(面向对象)进行设计建模,并进行详细设计。

(以下可以不做)设计测试用例对软件系统进行测试、调试和维护。

五、实验步骤1.围绕指定的题目参考现有系统进行需求分析;2.综合利用Internet网和相关书籍整理并完善需求分析;3.写出需求分析与规格说明书;4.设计软件结构或面向对象设计;5.写出软件设计说明书;6.进行软件详细设计;(以下可以不做)7.编码8.设计测试方案,系统测试与调试9 写出实验报告六、实验思考题1. 在软件工程活动中如何进行项目管理和质量控制?2. UML建模有什么优势?(注:1.必须有以下图形表示描述的模型:数据流图、模块结构框图、用例图、时序图、协作图、活动图、状态图、类图、部署图等,并辅助以文字描述。

2.以上为整个软件设计的过程,根据实际情况,编码以后阶段可以不做。

)。

软件工程实验报告材料

软件工程实验报告材料

软件工程实验报告材料一、实验目的本次软件工程实验的主要目的是通过实际项目的开发,深入理解和掌握软件工程的基本原理、方法和技术,提高软件开发的能力和质量。

具体包括以下几个方面:1、熟悉软件开发的完整生命周期,包括需求分析、设计、编码、测试和维护等阶段。

2、掌握面向对象的分析与设计方法,能够运用 UML 等工具进行系统建模。

3、学会使用一种或多种编程语言和开发工具,实现软件系统的功能。

4、培养团队合作精神,提高沟通和协调能力,共同完成项目开发任务。

5、了解软件测试的方法和技术,能够进行有效的测试用例设计和测试执行。

二、实验环境1、操作系统:Windows 102、开发工具:Visual Studio 20193、编程语言:C4、数据库管理系统:SQL Server 20195、版本控制工具:Git三、实验项目描述本次实验的项目是开发一个学生成绩管理系统,该系统主要用于学校对学生成绩的管理和统计分析。

系统的主要功能包括学生信息管理、课程信息管理、成绩录入、成绩查询、成绩统计分析等。

四、实验过程1、需求分析通过与学校管理人员和教师的沟通交流,了解他们对学生成绩管理系统的需求和期望。

对收集到的需求进行整理和分析,确定系统的功能和性能要求。

编写需求规格说明书,详细描述系统的功能、界面设计、数据存储等方面的需求。

2、设计根据需求规格说明书,进行系统的总体设计和详细设计。

运用面向对象的分析与设计方法,使用 UML 工具绘制系统的用例图、类图、时序图等。

确定系统的架构和模块划分,设计数据库表结构和数据存储方式。

3、编码根据设计文档,选择合适的编程语言和开发工具,进行系统的编码实现。

遵循编程规范和代码质量标准,编写清晰、可维护的代码。

在编码过程中,进行代码的调试和测试,确保代码的正确性和稳定性。

4、测试制定测试计划,设计测试用例,包括功能测试、性能测试、安全测试等。

对系统进行全面的测试,发现并修复存在的问题和缺陷。

软件工程实习报告(三篇)

软件工程实习报告(三篇)

软件工程实习报告一、实习概况本次实习是我在某软件公司进行的为期三个月的实习。

实习期间,我被分配到了软件开发部门,参与了一个基于Java的项目的开发工作。

在这个项目中,我主要负责了功能模块的设计、编码和测试工作。

通过这次实习,我深入了解了软件开发的流程和方法,并学习到了许多实用的技术和工具。

二、实习内容1. 需求分析与设计在项目启动前,我参与了需求分析的工作。

通过与产品部门的沟通和确认,我明确了项目的功能需求和业务逻辑。

然后,我和团队成员们一起进行了系统设计。

我们使用UML建模工具进行了类图和时序图的绘制,以明确系统的结构和交互流程。

2. 编码与调试在需求分析和设计完成后,我开始了编码和调试工作。

我们项目采用了Java作为开发语言,所以我使用了Eclipse作为开发工具。

我根据需求文档和设计图,先编写了基础代码框架,然后逐步完善各个功能模块。

在编码过程中,我遵循了代码规范和设计原则,并积极参与了代码评审和重构工作。

3. 测试与集成在编码完成后,我进行了功能测试和集成测试。

我使用Junit进行了单元测试,并通过Mockito框架进行了模拟和验证工作。

在测试中,我发现了一些潜在的问题,并及时修复了它们。

在集成测试中,我与其他成员合作,测试了系统各个模块之间的交互和兼容性。

4. 文档编写与维护在实习期间,我还负责了部分文档的编写和维护工作。

我参与了用户手册和技术文档的编写,以便使用人员和开发人员可以更好地理解项目的功能和实现细节。

我还负责了项目的版本控制和文档管理工作,确保了项目资料的安全和可追溯性。

三、实习收获1. 技术能力的提升在实习期间,我得到了大量的实践机会,提升了自己的技术能力。

我学会了使用Eclipse进行项目开发,掌握了Java语言的常用库和框架,并熟悉了常见的设计模式和软件开发方法。

我还学会了使用Git进行版本控制和团队协作,以及使用Junit和Mockito进行测试和调试。

2. 项目管理和沟通能力的提升在实习期间,我参与了团队的讨论和决策,学会了如何与他人进行有效的沟通和协作。

软件工程实验报告

软件工程实验报告

软件工程实验报告软件工程实验报告一、实验目的本次实验的目的是通过实践,熟悉软件工程的基本知识和方法,掌握软件开发的流程和规范。

通过完成一个小规模的软件开发项目,培养学生的软件开发能力和团队合作能力。

二、实验步骤2.1 需求分析,我们需要明确软件的需求,确定软件的功能和特性。

通过与项目发起人的沟通,了解他们的需求和期望,进而进行需求分析和规划。

在这个阶段,我们需要明确软件的功能模块、用户界面设计等。

2.2 技术选型根据需求分析的结果,我们需要选择合适的技术栈来实现软件的开发。

我们需要评估各种技术的优缺点,选择适合自己团队的技术。

,我们还需要评估各种开发工具和框架,选择合适的工具来提高开发效率。

2.3 设计阶段在设计阶段,我们需要进行系统设计和详细设计。

系统设计阶段确定软件的整体框架和结构,包括软件的层次结构、模块划分和接口设计等。

详细设计阶段则重点关注各个模块的实现细节,包括算法设计和数据结构设计等。

2.4 编码实现在完成系统设计和详细设计后,我们就可以开始进行编码实现了。

在编码实现阶段,我们需要按照事先确定的设计进行代码编写,并进行代码的和调试。

,我们还需要关注代码的质量和可读性,使用一些良好的编码规范和设计模式。

2.5 阶段在编码实现完成后,我们需要对软件进行,确保软件的功能和性能都符合要求。

阶段包括单元、集成和系统等。

我们需要编写用例,并执行用例进行,发现并修复软件中的bug。

2.6 部署与维护在通过后,我们可以将软件部署到目标机器上进行运行。

在部署之前,我们需要进行一些配置和优化工作,确保软件能够在目标环境中正常运行。

,我们还需要进行软件的维护工作,及时修复bug和优化性能。

三、实验结果经过团队的共同努力,我们成功完成了本次实验的软件开发项目。

我们按照软件工程的流程和规范进行开发,保证了软件的质量和可维护性。

软件具备了项目发起人的需求,功能和性能都符合要求。

四、实验通过本次实验,我们对软件工程的基本知识和方法有了更深入的理解。

软件工程实验报告总结

软件工程实验报告总结
3
4
4
4
等边三角形
条件2“真”条件3“真”
4
3
4
5
直角三角形
条件3“假”
条件4“真”
5
2
4
5
一般三角形
条件4“假”
(3)条件覆盖
对于第一个判断:条件0<a<200取真为T1,取假为F1;
条件0<b<200取真为T2,取假为F2;
条件0<c<200取真为T3,取假为F3;
对于第二个判断:条件a<b+c取真为T4,取假为F4;
总结 :经过一学期的软工实验,深刻感到其重要性的同时也学到了不少的东西 ,将对我在今后的软件开发过程中起极大的作用。
篇二
实验一软件工程标准化文档
一、实验目的
1.了解国家标准GB/T8567-2006
2.熟悉软件产品开发文件的基本内容
二、实验内容
1.搜索和下载国家标准GB/T8567-2006。
2.通过阅读国家标准GB/T8567-2006,将以下文字填写完整:
软件工程实验报告总结(3篇)
经过这学期软件工程实验的学习,深深感到用户需求对软件的重要性。成功的软件产品是建立在成功的需求基础之上的,而高质量的需求来源于用户与开发人员之间有效的沟通与合作。当用户有一个问题可以用计算机系统来解决,而开发人员开始帮助用户解决这个问题,沟通就开始了。
需求获取可能是最困难、最关键、最易出错及最需要沟通交流的活动。对需求的获取往往有错误的认识:用户知道需求是什么,我们所要做的就是和他们交谈从他们那里得到需求,只要问用户系统的目标特征,什么是要完成的,什么样的系统能适合商业需要就可以了,但是实际上需求获取并不是想象的这样简单,这条沟通之路布满了荆棘。首先需求获取要定义问题范围,系统的边界往往是很难明确的,用户不了解技术实现的细节,这样造成了系统目标的混淆。
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

院系:计算机科学学院专业:计算机科学与技术年级: 2013级课程名称:软件工程组员:司少武(1135)兰少雄(1136)张宇(1133)纳洪泽(1132)指导教师:刘卫平2015年 12月 26 日聊天室1 前言即时消息系统的研究现状即时消息系统[1](Instant Messenger,IM)是一种在后 PC 时代兴起的,以Internet 网络为基础的,允许交互双方即时地传送文字、语音、视频等信息,能够跟踪网络用户在线状态的网络应用软件。

即时消息系统产生有着深刻的社会原因:人们都有渴望社交,获得社会尊重、实现自我的需求,这正是即时消息软件风行的原动力,而物质文明的日益发达所带来副作用,又使得人们习惯与周围的人保持距离,以致人们更愿意对陌生人敞开心扉,在网络中可以跨越年龄、身份、行业、地域的限制,达到人与人、人与信息之间的零距离交流。

从这点上讲,即时消息系统的出现改变了人们的沟通方式和交友文化,大大拓展了个人生活交流的空间。

本工程的主要内容随着互联网逐步普及,人们的生活和工作也越来越离不开信息网络的支持,而聊天室是人们最常见,最直接的网上交流的方式。

本聊天系统以聊天交流为主,为广大用户提供一个借助网络进行人际交往的平台,也是网络与现实最贴近的实用型网站。

本文所介绍的网络聊天系统是基于开放的JAVA应用程序开发设计的,其主要特性是能动态、实时的完成信息的传递,且具有高效的交互性,更有效的处理客户请求,且具有脱离数据库技术方法,易于维护和更新的特点。

2 需求分析本系统所要实现的主要功能是当用户聊天时,将当前用户名、聊天对象、聊天内容、聊天语气和是否私聊进行封装,然后与服务器建立Socket连接,再用对象输出流包装Socket的输出流将聊天信息对象发送给服务器端当用户发送聊天信息时,服务端将会收到客户端用Socket传输过来的聊天信息对象,然后将其强制转换为Chat对象,并将本次用户的聊天信息对象添加到聊天对象集Message中,以供所有聊天用户访问。

接收用户的聊天信息是由多线程技术实现的,因为客户端必须时时关注更新服务器上是否有最新消息,在本程序中设定的是3秒刷新服务器一次,如果间隔时间太短将会增加客户端与服务器端的通信负担,而间隔时间长就会让人感觉没有时效性,所以经过权衡后认为3秒最佳,因为每个用户都不可能在3秒内连续发送信息。

当每次用户接收到聊天信息后将会开始分析聊天信息然后将适合自己的信息人性化地显示在聊天信息界面上。

业务需求1. 与聊天室成员一起聊天。

2. 可以与聊天室成员私聊。

3. 可以改变聊天内容风格。

4. 用户注册(含头像)、登录。

5. 服务器监控聊天内容。

6. 服务器过滤非法内容。

7. 服务器发送通知。

8. 服务器踢人。

9. 保存服务器日志。

10.保存用户聊天信息。

系统功能模块服务器端1.处理用户注册2.处理用户登录3.处理用户发送信息4.处理用户得到信息5.处理用户退出客户端1.用户注册界面及结果2.用户登录界面及结果3.用户发送信息界面及结果4.用户得到信息界面及结果5.用户退出界面及结果性能需求运行环境:Windows All必要环境:JDK 以上硬件环境:CPU 400MHz以上,内存64MB以上3数据结构数据结构此系统数据库中储存信息采用字符指针储存,将用户的信息用字符的形式进行处理并储存。

逻辑结构逻辑结构:用户向服务器发送请求,服务器获取对方IP,若获取成功,用户向其发送消息,服务器将其处理并将其记录,然后将消息发给另一用户。

其E—R图如下所示:2将E-R图转化为关系模型,建立关系模型为:消息(内容,时间);记录信息(内容,储存信息);服务器(服务器IP);3功能模块划分结构框图程序流图(1)整个系统流程图如下:模块功能分析及外部设计模块功能分析:(1)发送消息:用户选择好友,如果好友在线,服务器便获取其IP地址,用户打开消息盒编辑需要发送的消息,然后发送,服务器接受此消息,并处理记录到记录表中,然后将其发送给好友。

(2)接收消息:好友发送的信息通过服务器处理并发送到本用户,如果设置为接收消息,则系统提示并可以打开查看此消息,否则服务器不将此消息发送到本用户。

(3)消息记录查询:用户向服务器发送查询请求,服务器作出响应并将最近消息记录发送到此用户。

外部设计:交互设计是面向最终用户的设计,是软件的外部设计,交互设计要求在研究软件技术问题的同时对人加以研究。

用户是什么样的人?用户怎样与新的计算机系统进行交互?用户怎样解释系统产生的信息?用户对系统有哪些期望?这些问题仅仅是需要在用户交互设计时必须询问和回答的问题。

作为点对点的聊天系统,作为服务使用者得用户和提供服务的聊天系统有着互动和交换信息的过程,用户有请求,系统就必须有应答,需要双方参与。

(1)当用户选择好友向其发送消息时,点击好友,向服务器发送请求,如果好友在线,服务器自动获取好友IP并建立双方的连接,进行聊天。

否则应该提示好友不在,不能聊天或发送离线信息。

(2)用户查询聊天信息时,向服务器发送查询请求,服务器作出响应并将相应记录发送到此用户界面。

通过对产品的界面和行为进行交互设计,让产品和它的使用者之间建立一种有机关系,从而可以有效的达到使用者的目标,而好的交互设计会使系统和使用者之间更好的交互,达到“愉悦地合作”,这是交互设计的最终目的。

4 详细设计类定义为客户端程序启动类,负责客户端的启动和退出。

为客户端程序登录界面,负责用户帐号信息的验证与反馈。

为客户端程序注册界面,负责用户帐号信息的注册验证与反馈。

为客户端程序聊天室主界面,负责接收、发送聊天内容与服务器端的亲密合作。

Windowclose 为的内部类,负责监听聊天室界面的操作,当用户退出时返回给服务器信息。

为客户端程序的一个小程序,实现的一个石英钟功能。

主要模块内部设计此点对点聊天系统主要包括以下模块:(1)发送消息;(2)接收消息;(3)查询消息记录。

每个模块的主要执行功能函数及算法如下。

模块1设计模块算法模块一:发送消息:发送消息函数:send messages(char *p,InetAdrress);发送消息后自动执行储存函数:memory messages(InetAdrress,char *p);流程图4.2.2模块2设计模块算法模块二:接收消息:接收消息消息函数: *receive messages(InetAdrress,char *p);接收消息后自动执行储存消息函数:memory messages(InetAdrress,char *p);流程图:4.2.3模块3设计模块算法模块三:消息记录查询:执行发送请求函数:*check notes(InetAdrress,char *p);删除记录函数:delete notes(InetAdrress);自动执行接收消息函数:*receive messages(InetAdrress,char *p);流程图:5 测试分析与截图在实现本系统的同时每设计一个模块,就实现模块测试,使其能实现该函数需要实现的功能,此阶段为白盒测试。

此阶段将此模块作为单独的一个实体来测试,而且比较容易实际检验模块正确性的测试方案,保证每个模块单元的正确运行,来确定编码和详细设计的错误。

然后集成测试。

集成测试阶段,先将单元测试成功的模块放在一起形成一个子系统来测试,以解决模块间的协调和通信问题。

然后将子系统测试通过的模块放在一起形成一个完整的系统测试,检验功能,来发现需求报告中的错误。

测试用例为了检验此系统的正确性,设计了以下的一些测试用例:(1)登录注册(2)发送和接收消息A:你好B:你好(3)保存聊天记录(4)保存聊天记录(5)保存服务器日志(6)服务器踢人不同的测试数据发现程序错误的能力差别很大,为了提高测试效率低测试成本,应该选择高效的测试用例,数据尽量少,做到尽可能完备的测试就可以了。

测试结果登录界面注册界面服务器聊天室聊天对所有人,私人聊天,系统提示信息。

聊天记录保存服务器日志保存服务器踢人时钟6 结束语Java面向对象程序设计是一门应用广泛并且实用性极强的高级程序设计语言。

通过本次课程设计,我们对面向对象的基本思想有了进一步的理解,对项目的各个阶段的任务也有了一定的了解。

设计开始阶段必须明确设计的目的与需求分析,总体设计要全面分析聊天室系统的架构。

通过这次设计,使我们认识到体系的架构是最重要的,只有准确的系统设计、很好的定义各个模块及模块之间的关系,才能在编码阶段更轻松的的实现。

通过这次课程设计,对我们的逻辑思维能力是一个很大的锻炼,它不仅加强了我们的系统思考问题的能力,而且还改变了我们以前不好的编程习惯,虽然花费了不少的时间,但是我们学到了丰富的知识。

另外,此次课程设计也提高了我们的团对合作精神,让我们明白不是不能一个人能单独完成,而是要集思广益,结合更多的人的创意思维。

让我们大家深刻的体会到理论与实际相结合的重要性与微妙之处。

对于不同的想法我们都会集中讨论并对好的意见加以借鉴,在这个讨论的过程中,还更正了不少我们各自自身对于某个知识点的误区。

这次程序设计也是一个毅力的考验过程。

有时候往往只是一个小小的错误,却要花出几小时甚至是一两天的时间才可能发现它。

所以在这个过程不能过于急躁,要很有耐心将程序反复调试。

Appimport .*;import .*;import .*;public class AppServer extends Thread {private ServerSocket serverSocket;private ServerFrame sFrame;private static Vector userOnline = new Vector(1, 1);private static Vector v = new Vector(1, 1);public AppServer() {sFrame = new ServerFrame();try {serverSocket = new ServerSocket(1001);.");(); dd(pnlLogin);lblServer = new JLabel("服务器(S):");lblUserName = new JLabel("用户名(U):");lblPassword = new JLabel("口令(P):");txtServer = new JTextField(20);("");txtUserName = new JTextField(20);pwdPassword = new JPasswordField(20);btnLogin = new JButton("登录(L)");("登录到服务器");('L');btnRegister = new JButton("注册(R)");("注册新用户");('R');btnExit = new JButton("退出(X)");("退出系统");('X');(null);(new Color(52, 130, 203));(50, 100, 100, 30);(150, 100, 120, 25);(50, 130, 100, 30);(150, 130, 120, 25);(50, 160, 100, 30);(150, 160, 120, 25);(50, 200, 80, 25);(130, 200, 80, 25);(210, 200, 80, 25);Font fontstr = new Font("宋体", , 12); (fontstr);(fontstr);(fontstr);(fontstr);(fontstr);(fontstr);(fontstr);(fontstr);(fontstr);;;;;;(lblServer);(txtServer);(lblUserName);(txtUserName);(lblPassword);(pwdPassword);(btnLogin);(btnRegister);(btnExit);Icon logo1 = new ImageIcon("images\\"); lblLogo = new JLabel(logo1);(0, 0, 340, 66);(lblLogo);setResizable(false);setSize(340, 260);setVisible(true);scrnsize = ();setLocation / 2 - () / 2,/ 2 - () / 2);Image img = ("images\\");setIconImage(img);(this);(this);(this);@SuppressWarnings({ "deprecation", "static-access" })public void actionPerformed(ActionEvent ae) {Object source = ();if (btnLogin)) {if ().equals("")|| ().equals("")) {JOptionPane op1 = new JOptionPane();(null, "用户名或密码不能为空");} else {strServerIp = ();login();}}if (btnRegister)) {strServerIp = ();();new Register(strServerIp);}if (source == btnExit) {(0);}}@SuppressWarnings("deprecation")public void login() {Customer data = new Customer();= ();= ();try {Socket toServer;toServer = new Socket(strServerIp, 1001);ObjectOutputStream streamToServer = new ObjectOutputStream(toServer .getOutputStream());((Customer) data);BufferedReader fromServer = new BufferedReader(new InputStreamReader()));String status = ();if ("登录成功")) {new ChatRoom((String) , strServerIp);();();();();} else {(null, status);();();();}} catch (ConnectException e1) {(null, "未能建立到指定服务器的连接!");} catch (InvalidClassException e2) {(null, "类错误!");} catch (NotSerializableException e3) {(null, "对象未序列化!");} catch (IOException e4) {(null, "不能写入到指定服务器!");}}public static void main(String args[]) {new Login();}}import *;public class Register extends JFrame implements ActionListener {private JComboBox comboBox;private static final long serialVersionUID = 902180L;JPanel pnlRegister;JLabel lblUserName,lblGender,lblAge;JLabel lblPassword,lblConfirmPass,lblEmail,logoPosition;JTextField txtUserName,txtAge,txtEmail;JPasswordField pwdUserPassword,pwdConfirmPass;JRadioButton rbtnMale,rbtnFemale;ButtonGroup btngGender;JButton btnOk,btnCancel,btnClear;String strServerIp;final JLabel headLabel = new JLabel();Dimension scrnsize;Toolkit toolkit=();public Register(String ip){super("[HappyChat]聊天室注册窗口");strServerIp=ip;pnlRegister=new JPanel();().add(pnlRegister);lblUserName=new JLabel("用户名:");lblGender=new JLabel("性别:");lblAge=new JLabel("年龄:");lblPassword=new JLabel("口令:");lblConfirmPass=new JLabel("确认口令:");lblEmail=new JLabel("电子邮件:");txtUserName=new JTextField(30);txtEmail=new JTextField(30);txtAge=new JTextField(10);pwdUserPassword=new JPasswordField(30);pwdConfirmPass=new JPasswordField(30);rbtnMale=new JRadioButton("男",true);rbtnFemale=new JRadioButton("女");btngGender=new ButtonGroup();btnOk=new JButton("确定(O)");('O');("保存注册信息");btnCancel=new JButton("返回(B)");('B');("返回登录窗口");btnClear=new JButton("清空(L)");('L');("清空注册信息");(null);(new Color(52,130,203));(30,80,100,30);(110,85,120,20);(30,141,100,30);(110,146,120,20);(30,166,100,30);(110,171,120,20);(30,191,100,30);(110,196,60,20);(190,196,60,20);(30,216,100,30);(110,221,120,20);(30,241,100,30);(110,246,120,20);(246,166,80,25);(246,201,80,25);(246,241,80,25);Font fontstr=new Font("宋体",,12);(fontstr);(fontstr);(fontstr);(fontstr);(fontstr);(fontstr);(fontstr);(fontstr);(fontstr);(fontstr);(fontstr);(fontstr);(fontstr);;;;;lblConfirmPass .setForeground;;;;;;;;;(false);(false);(lblUserName);(lblGender);(lblPassword);(lblConfirmPass);(lblEmail);(lblAge);(txtAge);(txtUserName);(txtEmail);(pwdUserPassword);(pwdConfirmPass);(btnOk);(btnCancel);(btnClear);(rbtnMale);(rbtnFemale);(rbtnMale);(rbtnFemale);Icon logo = new ImageIcon("images\\");logoPosition = new JLabel(logo);(0, 0, 360,78);(logoPosition);(360,313);(true);(false);scrnsize=();()/2,()/2);Image img=("images\\");(img);btnOk .addActionListener(this);(this);btnClear .addActionListener(this);final JLabel label = new JLabel();("头像:");(30, 120, 60, 15);(label);comboBox = new JComboBox();(true);(new DefaultComboBoxModel(new String[] {"1", "2", "3"}));(110, 116, 47, 23);(new ItemListener() {public void itemStateChanged(ItemEvent arg0) {Icon logo = new ImageIcon("face\\"+().toString()+".jpg");(logo);}});(comboBox);;oString();if {(null,"用户名不能为空");return;}if {(null,"密码不能为空");return;}if(! {(null,"密码两次输入不一致,请重新输入");return;}if {(null,"年龄不能为空");return;}int age=());if (age<=0||age>100){(null,"年龄输入不合法");return;}int Found_flag=0;for (int i=0;i< {if'@'){Found_flag++;}}if(Found_flag!=1){(null,"电子邮箱格式不正确,请重新输入");return;}try{Socket toServer;toServer = new Socket(strServerIp,1001);ObjectOutputStream streamToServer=new ObjectOutputStream ());((Register_Customer)data);BufferedReader fromServer=new BufferedReader(new InputStreamReader()));String status=();JOptionPane op=new JOptionPane();(null,status);if+"注册成功")){("");("");("");("");("");}();();}catch(InvalidClassException e1){(null,"类错误!");}catch(NotSerializableException e2){(null,"对象未序列化!");}catch(IOException e3){(null,"不能写入到指定服务器!");}}public static void main(String args[]){new Register("");}}public ChatRoom(String name, String ip) {dd(pnlChat);Font fntDisp1 = new Font("宋体", , 12);String list[] = { "所有人" };btnCls = new JButton("清屏(C)");btnExit = new JButton("退出(X)");btnSend = new JButton("发送(N)");btnSave = new JButton("保存(S)");btnTimer = new JButton("时钟(T)");lblUserList = new JLabel("【在线用户列表】");lblUserMessage = new JLabel("【聊天信息】");lblSendMessage = new JLabel("聊天内容:");lblChatUser = new JLabel("你对:");lblUserTotal = new JLabel("在线人数:");lblCount = new JLabel("0");lstUserList = new txtMessage = new JTextField(170);cmbUser = new JComboBox(list);etScreenSize();Dimension fra=();if>{=;}if>{=;}( show();i nt delay = 1000;A ctionListener taskPerformer = new ActionListener(){public void actionPerformed(ActionEvent evt){repaint();}};n ew Timer(delay, taskPerformer).start();}public void actionPerformed(ActionEvent e){();}public void paint( Graphics g ){Insets insets = getInsets();int L0 = /2, T0 = /2;int hh,mm,ss;String st;h=getSize().height;;(L0+30,T0+30,h-60,h-60);(L0+32,T0+32,h-64,h-64);r=h/2-30;x0=30+r-5+L0;y0=30+r-5-T0;ang=60;for (int i=1; i<=12; i++){x=(int)((r+10)*(RAD*ang)+x0);y=(int)((r+10)*(RAD*ang)+y0);(""+i,x,h-y);ang-=30;}x0=30+r+L0; y0=30+r+T0;Calendar now=();hh=;mm=;ss=;;(L0,T0,60,28);;if (hh < 10) st="0"+hh; else st=""+hh;if (mm < 10) st=st+":0"+mm; else st=st+":"+mm;if (ss < 10) st=st+":0"+ss; else st=st+":"+ss;(st,L0,T0+25);sdo=90-ss*6;mdo=90-mm*6;hdo=90-hh*30-mm/2;if (old_X > 0){(getBackground());(x0,y0,old_X,(h-old_Y));} else{old_M=mdo;old_H=hdo;};x=(int)((r-8)*(RAD*sdo)+x0);y=(int)((r-8)*(RAD*sdo)+y0)-2*T0;(x0,y0,x,(h-y));old_X=x;old_Y=y;if (mdo != old_M){line(g,old_M,(int)(r*,getBackground());old_M=mdo;}if (hdo != old_H){line(g,old_H,(int)(r*,getBackground());old_H=hdo;}line(g,mdo,(int)(r*,;line(g,hdo,(int)(r*,;}public void line(Graphics g, int t, int n, Color c) {int [] xp = new int[4];int [] yp = new int[4];xp[0]=x0;yp[0]=y0;xp[1]= (int)((n-10)*(RAD*(t-4))+x0);yp[1]=h-(int)((n-10)*(RAD*(t-4))+y0);xp[2]= (int)( n *(RAD* t )+x0);yp[2]=h-(int)( n *(RAD* t )+y0);xp[3]= (int)((n-10)*(RAD*(t+4))+x0);yp[3]=h-(int)((n-10)*(RAD*(t+4))+y0);(c);(xp,yp,4);}public static void main(String args[]){new Clock();}}。

相关文档
最新文档