案例分析软件开发.ppt_第1页
案例分析软件开发.ppt_第2页
案例分析软件开发.ppt_第3页
案例分析软件开发.ppt_第4页
案例分析软件开发.ppt_第5页
已阅读5页,还剩34页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

人事工资管理系统,案例分析,随着我国市场经济的快速发展,人事工资管理系统在企业的日常管理中发挥着越来越重要的作用.通过人事工资管理系统可以进行档案管理,奖罚管理和工资管理等.方便企业处理内部员工的相关工资信息.另外,更方便地查看员工的工资信息,还可以通过水晶报表对工资信息进行打印.,本章的主要内容,Sql语句的应用 公共类的设计 Mdi窗体技术 动态设置水晶报表的数据源 将图片保存到数据库中 控制文本框中输入的数据 Time 组件实现时钟功能 通过hasrows 属性判断登陆用户的用户名和密码是否正确,3.1 开发背景,企业在发展中不断的壮大,员工也随之增加.对于人士管理部门来说,迫切需要一个操作方便功能简单实用,可以满足企业对员工的档案和工资信息进行管理的系统.在企业选择人事工资管理系统时,主要存在以下几个方面的要求,1 对企业员工的档案进行管理 2 系统的功能要符合企业的基本情况 3 系统的功能操作要简单实用 操作方便,不要出现复杂的操作 4 可以方便地对工资信息进行打印,3.2 需求分析,良好的人机界面 方便的添加修改数据功能 方便的数据打印功能 在相应的窗体中可方便的删除数据 数据计算自动完成,尽量减少人工干预,3.3 系统设计,系统目标 界面友好,操作方便 可以对员工档案进行管理,增删改查. 实现奖罚管理,调动管理和考评管理 实现考勤津贴和工资总结 方便的实现部门管理和数据备份 可以使用操作员管理修改口令和更改操作员系统运行稳定,安全可靠.,系统的功能结构,业务流程图,程序运行环境 系统开发平台 vs2008 语言 C# 3.5 数据库管理系统软件 SQL 2005 运行平台XP 2003 WIN7 运行环境 .net sdk v3.5 分辨率 最佳效果 1024 768,数据库设计,数据库的最初雏形据说源自美国一个奶牛场的记账薄,里面记录的是该奶牛场的收支账目,程序员在将其整理、录入到电脑中时从中受到启发。当按照规定好的数据结构所采集到的数据量大到一定程度后,出于程序执行效率的考虑,程序员将其中的检索、更新维护等功能分离出来,做成单独调用的模块,这个模块后来就慢慢发展、演变成现在我们所接触到的数据库管理系统(DBMS)程序开发中的一个重要分支。,C#编写简单的聊天程序,程序的分析与设计 1、明确程序的功能 我们的任务是了解程序需要做什么,而不是如何去做。,1.1请求客户提供更详细信息 可以登录聊天程序,登录的时候能够通知其他在线用户,然后与在线的用户进行对话,如果不想对话了,就注销或者直接关闭,有了上面这段话,我们就又可以得出下面几个需求: 程序可以进行登录。 登录后可以通知其他在线用户。 可以与其他用户进行对话。 可以注销或者关闭。,1.2对于用户需求进行提问,并进行总结 经常会有这样的情况:可能客户给出的需求仍然不够细致,或者客户自己本身对于需求就很模糊,此时我们需要做的就是针对用户上面给出的信息进行提问。接下来我就看看如何对上面的需求进行提问,我们至少可以向经理提出以下问题:,登录时需要提供哪些内容?需不需要提供密码? 允许多少人同时在线聊天? 与在线用户聊天时,可以将一条消息发给一个用户,还是可以一次将消息发给多个用户? 聊天时发送的消息包括哪些内容? 注销和关闭有什么区别? 注销和关闭对对方需不需要给对方提示?,登录时只需要提供用户名称就可以了,不需要输入密码。 允许两个人在线聊天。(这里我们只讲述这种简单情况,允许多人聊天需要使用多线程) 因为只有两个人,那么自然是只能发给一个用户了。 聊天发送的消息包括:用户名称、发送时间还有正文。 注销并不关闭程序,只是离开了对话,可以再次进行连接。关闭则是退出整个应用程序。 注销和关闭均需要给对方提示。,上面的这些属于业务流程,除非你对它已经非常熟悉,或者程序非常的小,那么可以对它进行编码,但是实际中,我们最好再编写一些用例,这样会使程序的流程更加的清楚。,1.3编写用例 通常一个用例对应一个功能或者叫需求,它是程序的一个执行路径或者执行流程。编写用例的思路是:假设你已经有了这样一个聊天程序,那么你应该如何使用它?我们的使用步骤,就是一个用例。用例的特点就每次只针对程序的一个功能编写,最后根据用例编写代码,最终完成程序的开发。我们这里的需求只有简单的几个:登录,发送消息,接收消息,注销或关闭,上面的分析是对这几点功能的一个明确。接下来我们首先编写第一个用例:登录。,在开始之前,我们先明确一个概念:客户端,服务端。因为这个程序只是在两个人(机器)之间聊天,那么我们大致可以绘出这样一个图来:,我们期望用户A和用户B进行对话,那么我们就需要在它们之间建立起连接。尽管“用户A”和“用户B”的地位是对等的,但按照约定俗称的说法:我们将发起连接请求的一方称为客户端(或叫本地),另一端称为服务端(或叫远程)。所以我们的登录过程,就是“用户A”连接到“用户B”的过程,或者说客户端(本地)连接到服务端(远程)的过程。在分析这个程序的过程中,我们总是将其分为两部分,一部分为发起连接、发送消息的一方(本地),一方为接受连接、接收消息的一方(远程)。,这里我们的用例名称为登录和连接,但是后面我们又打了一个括号,写着“本地”,它的意思是说,登录和连接是客户端,也就是发起连接的一方采取的动作。同样,我们需要写下当客户端连接至服务端时,服务端采取的动作。,用例只能为你提供一个操作步骤的指导,在实现的过程中,因为技术等方面的原因,可能还会有少量的修改。如果修改量很大,可以重新修改用例;如果修改量不大,那么就可以直接编码。这是一个迭代的过程,也没有一定的标准,总之是以高效和合适为标准。,2.分析与设计,我们已经很清楚地知道了程序需要做些什么,尽管现在还不知道该如何去做。我们甚至可以编写出这个程序所需要的接口,以后编写代码的时候,我们只要去实现这些接口就可以了。这也符合面向接口编程的原则。另外我们注意到,尽管这是一个聊天程序,但是却可以明确地划分为两部分,一部分发送消息,一部分接收消息。另外注意上面标识为自动的语句,它们暗示这个操作需要通过事件的通知机制来完成。,2.1消息Message 首先我们可以定义消息,前面我们已经明确了消息包含三个部分:用户名、时间、内容,所以我们可以定义一个结构来表示这个消息:,2.2消息发送方IMessageSender 从上面我们可以看出,消息发送方主要包含这样几个功能:登录、连接、发送消息、注销。另外在连接成功或失败时还要通知用户界面,发送消息成功或失败时也需要通知用户界面,因此,我们可以让连接和发送消息返回一个布尔类型的值,当它为真时表示连接或发送成功,反之则为失败。因为登录没有任何的业务逻辑,仅仅是记录控件的值并进行显示,所以我不打算将它写到接口中。,public interface IMessageSender bool Connect(IPAddress ip, int port); / 连接到服务端 bool SendMessage(Message msg); / 发送用户 void SignOut(); / 注销系统 ,2.3消息接收方IMessageReceiver 而对于消息接收方,从上面我们可以看出,它的操作全是被动的:客户端连接时自动提示,客户端连接丢失时显示自动提示,侦听到消息时自动提示。注意到上面三个词都用了“自动”来修饰,在C#中,可以定义委托和事件,用于当程序中某种情况发生时,通知另外一个对象。在这里,程序即是我们的IMessageReceiver,某种情况就是上面的三种情况,而另外一个对象则为我们的用户界面。因此,我们现在首先需要定义三个委托:,public delegate void MessageReceivedEventHandler(string msg); public delegate void ClientConnectedEventHandler(IPEndPoint endPoint); public delegate void ConnectionLostEventHandler(string info);,我们注意到接收方需要侦听消息,因此我们需要在接口中定义的方法是StartListen()和StopListen()方法,这两个方法是典型的技术相关,而不是业务相关,所以从用例中是看不出来的,可能大家现在对这两个方法是做什么的还不清楚,没有关系,我们现在并不写实现,而定义接口并不需要什么成本,我们写下IMessageReceiver的接口定义:,public interface IMessageReceiver event MessageReceivedEventHandler MessageReceived; / 接收到发来的消息 event ConnectionLostEventHandler ClientLost; / 远程主动断开连接 event ClientConnectedEventHandler ClientConnected; / 远程连接到了本地 void StartListen(); / 开始侦听端口 void StopListen(); / 停止侦听端口 ,2.4主程序Talker 而我们的主程序是既可以发送,又可以接收,一般来说,如果一个类像获得其他类的能力,以采用两种方法:继承和复合。因为C#中没有多重继承,所以我们无法同时继承实现了IMessageReceiver和IMessageSender的类。那么我们可以采用复合,将它们作为类成员包含在Talker内部:,public class Talker private IMessageReceiver receiver; private IMessageSender sender; public Talker(IMessageReceiver receiver, IMessageSender sender) this.receiver = receiver; this.sender = sender; ,我们的程序大体框架已经完成,接下来要关注的就是如何实现它,现在让我们由设计走入实现,看看实现一个网络聊天程序,我们需要掌握的技术 。,编写程序代码 我们采用的是三个模式中开发起来难度较大的一种,无服务器参与的模式。还有就是我们没有使用广播消息,所以需要提前知道连接到的远程主机的地址和端口号。,1.实现IMessageSender接口 2.实现IMessageReceiver接口 3.实现Talker类 Talker类是最平庸的一个类,它的全部功能就是将操作委托给实际的IMessageReceiver和IMessageSender。定义这两个接口的好处也从这里可以看出来

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

最新文档

评论

0/150

提交评论