阶段项目MyQQ阶段项目简介•任务:MyQQ聊天工具•系统结构:C/S,通过数据库交换聊天消息•小组形式完成•学时:24学时项目实施和课程安排课程进度描述课时第一次课项目讲解2项目准备阶段2第二次课任务讲解4第一次集中编码第三次课任务讲解4第二次集中编码第四次课任务讲解4第三次集中编码第五次课任务讲解4第四次集中编码第六次课总结和答辩4软件开发流程•比尔盖子是一名建筑工人起初只干一些比较简单的建筑工作凭个人技术和经验,不需要特别设计,可以顺利完成如同编写早期比较小的程序软件开发流程新任务:建造一间非常美丽而完整的房间工作变得复杂许多像不断发展的软件,功能越来越多,越来越复杂软件开发流程•软件复杂性–图形用户界面–客户/服务器结构–分布式应用–数据通信–超大型关系型数据库项目团队中的角色比尔想到需要更多的人手帮他终于组成了自己工作团队就像软件中的项目团队软件项目团队中的角色项目经理技术负责人软件架构师项目团队分析师设计人员开发人员测试人员项目人员构成比例例子:•微软EXCHANGE2000SERVER的开发:–项目经理:25人–开发人员:140人–测试人员:350人•WINDOWS2000:–项目经理:250人–开发人员:1700人–测试人员:3200人软件工程师的工作•项目设计与分析•编码•编写文档•测试•团队管理软件工程师的素质良好的编码能力规范化编码习惯规范意识团队精神具有软件工程的概念求知欲、进取心和学习总结的能力团队组织和管理能力软件开发过程“这次不能盲目开工,我们需要首先好好设计一下!”构想分析设计构造评估软件的制作过程也非常相似软件开发过程软件开发可行性研究与计划需求分析设计开发评估/测试维护建造房屋构想分析设计构造评估维护软件开发过程模型•软件开发需要经历几个步骤•具体如何实施,具体项目不同,有所区别•软件开发过程模型:制作具体软件时,开发步骤的具体实施方法瀑布模型瀑布模型•瀑布模型——“线性顺序模型”•将每个阶段都清楚定义了起止点•产生明确的交付成果•阶段之间通过文档进行沟通•每个阶段都必需完成全部规定的任务(文档)后才能够进入下一个阶段可行性研究与计划需求分析设计开发测试维护可行性研究报告需求说明书设计文档程序测试报告可行性研究与计划阶段•确定项目目的•了解系统中客户的期望•确定系统的规模•论证项目可行性–技术可行性–经济可行性–操作可行性–社会可行性需求分析阶段•需求是产品的根源•需求工作的优劣对产品影响最大获取需求客户同行、专家已经存在的同类软件产品行业标准、规则Internet相关资料可能遇到的问题用户说不清楚需求误解需求分析需求功能需求记录在客户需求说明书中需求分析阶段文档介绍产品功能性需求产品介绍产品应当遵循的标准和规范其他需求需求说明书产品非功能性需求需求分析阶段设计阶段•目的:根据用户的需要制定标准,划分并分配任务设计GUI标准设计数据库设计过程模块设计编码标准构建原型分配任务和监督任务设计阶段涉及的活动开发阶段开发阶段对用户界面进行最后的修改构建数据库通过添加代码使其具备功能评估/测试阶段•本阶段测试每个单元的功能测试阶段涉及的活动单元测试数据验证测试安全性测试强度测试集成测试维护阶段•为客户提供故障诊断支持–网络–电话–上门•应用程序要求的任何软件升级–版本–补丁软件开发过程比尔通过类似软件瀑布模型的方式成功完成了自己的建筑项目阶段项目需求描述及效果展示用户注册用户登录个人信息编辑查找/添加好友好友列表聊天技术实现:WinForms+ADO.NET需求分析——数据库分析•需要的数据表:–Users:用户表–Friends:好友表–Star:星座表–BloodType:血型表–FriendshipPolicy:好友策略表–Messages:消息表–MessageType:消息类型表需求分析——功能分析•主要功能:–注册与登录–好友管理–消息管理–个人设置需求分析——界面分析•需要的界面:–注册界面–登录界面–登录后的主界面–查找/添加好友界面–聊天界面–系统消息界面–个人设置界面–头像列表界面需求分析——辅助类分析•需要添加的辅助类:–DBHelper类–UserHelper类MyQQ聊天工具组长A组员B组员C注册窗体聊天窗体个人信息窗体登录后主窗体查找/添加功能编码登录窗体头像列表窗体系统消息窗体查找/添加好友界面设计、辅助功能辅助类查找/添加好友协助协助小组分工阶段划分•项目准备阶段(2学时)–项目框架、建库、建表、提交计划•第一次集中编码(4学时)–注册、登录功能•第二次集中编码(4学时)–查找/添加好友、部分聊天功能•第三次集中编码(4学时)–个人信息显示、完整聊天功能•第四次集中编码(4学时)–个人信息修改、完善整个功能•项目答辩、总结(4学时)项目准备阶段:A任务•搭建项目框架•提交小组计划项目准备阶段:B任务•建库•建表–Users–Friends–FriendShipPolicy•建关系项目准备阶段:C任务•建表–Star–BloodType–Messages–MessageType第一次集中编码:A任务•设计注册窗体界面•实现用户注册功能第一次集中编码:B任务•设计登录后主窗体•显示好友列表第一次集中编码:C任务•设计登录窗体•实现登录功能第一次集中编码:难点分析•注册功能难点//获取自动生成的Id值//查询新增加的记录的标识号的SQL语句sql=SELECT@@IdentityFROMUsers;//……//执行查询语句myQQNum=Convert.ToInt32(command.ExecuteScalar());第一次集中编码:难点分析•好友列表——第三方控件SideBarGroups属性SbGroup类型Items属性SbItem类型第一次集中编码:难点分析•SideBar//命名空间usingAptech.UI;//添加组sbFriends.AddGroup(我的好友);sbFriends.AddGroup(陌生人);//添加项SbItemitem=newSbItem((string)dataReader[NickName],(int)dataReader[FaceId]);sbFriends.Groups[0].Items.Add(item);显示的文字显示的图像索引第二次集中编码:A任务•查找/添加好友窗体设计第二次集中编码:B任务•查找/添加好友功能实现第二次集中编码:C任务•聊天窗体设计及功能实现第二次集中编码:难点分析•添加好友判断流程第二次集中编码:难点分析•操作显示查询好友结果的DataGridView//判断是否有单元格选中if(dgvBasicResult.SelectedRows.Count==0){//…}//判断选中行的第一个单元格是否有值if(dgvBasicResult.SelectedRows[0].Cells[0]!=null){//…}表示空//获得选中行的第一个单元格的值dgvBasicResult.SelectedRows[0].Cells[0].Value第三次集中编码:A任务•设计个人信息窗体•显示个人信息第三次集中编码:B任务•完善登录后主窗体,扫描未读聊天消息–利用Timer实现•控制好友头像闪烁来消息,头像闪烁第三次集中编码:C任务•头像列表窗体设计及功能实现第三次集中编码:难点分析•头像闪烁效果:–改变头像显示的图片,用Timer控制切换头像列表:ListView控件View属性:LargeIconLargeImageList属性:指定存放大头像图片的图像列表控件//判断ListView中是否有选中的项if(lvFaces.SelectedItems.Count==0){//…}//获得选中的头像的索引intfaceId=lvFaces.SelectedItems[0].ImageIndex;第四次集中编码:A任务•个人信息修改功能第四次集中编码:B任务•完善登录后主窗体:–扫描未读系统消息–右键菜单–工具条按钮功能第四次集中编码:C任务•添加好友请求窗体设计及功能实现第四次集中编码:难点分析•登录主窗体的右键菜单中–删除好友功能——从SideBar中移除一项//从SideBar中将选中的项移除sbFriends.SeletedItem.Parent.Items.Remove(sbFriends.SeletedItem);大小头像切换——SideBar的View属性//小头像sbFriends.View=SbView.SmallIcon;总结及项目答辩•教员对项目完成情况作总结•学员以小组形式按要求答辩