csdn博客:http://blog.csdn.net/lhc1105
经过几天的缝缝补补,自己的个人版终于OK了,!也许是因为有第一次的机房收费系统的经验,这次做,感觉非常亲切。 在业务逻辑方面,沿袭以前的逻辑,做了一点升级,但是改动不大。
什么是设计模式? 每一类编程语言都具有其自身的特性,就像是面向对象的语言,其特性就是封装,继承,多态,抽象. 同时,使用每一类编程语言开发软件时也都有一些设计准则,这些准则保证了软件的质量,即具有良好的设计. 而设计模式则是广大软件开发人员总结出的开发经验技巧,它们利用编程语言的特点,实现这些准则.因此,可以想象,当我们对设计模式熟悉到一定程度后,在设计系统时,我们眼里就会变得没有设计模式,只有设计准则,真正达到手中无剑,心中有剑的境界。
在做机房收费系统中,涉及到多张表的查询时,用到了join,感觉很不错,学习了下join,顺便复习了下高中数学。 现在,用机房收费系统中学生信息表和学生上机表做个小DEMO~ ,如图: 表A:学生信息表: 表B:学生上机表: 1,inner join 从结果看出,select的结果为表A和表B的交集。
做重构已经有一段时间了,在这段时间里面学了很多新东西,感觉自己的鸡窝做得越来越好了。这里,写下一些小Tips,记录下一些自己感觉很有意思的东西。 一,还是分层的问题 在上下机加完模式后,总感觉很诡异,我的上下机是加完模式后的,第一次这么做,还有点儿生疏,看了半天,才发现我上下机的逻辑居然在U层,如图: 三个类定义在了U层: 然后在下机的时候调用: 虽然能实现下机,但是具体的逻辑还是在U层里面,因为我是在U层定义在U层引用的。
有句话叫做no zuo no die,我大概就是这种人吧。why?做机房收费系统的时候,按照一般方法也能实现,但这次做上下机的时候,总感觉这么做对自己来说,没什么提高,然后就停下来,重新想想上下机还能怎么做? 后来,大致采用的思路是这样的:将上下机的读写数据的过程写成两个存储过程,负责读取和更改数据。
周六周日写了些查询的窗体,感觉没什么新鲜的东西,都是一堆select,后来写的到了注册,上下机等,在一个方法里面,包含了多个增删改查的过程,可能上一个访问数据库的过程返回的结果又是下一个访问数据库读取数据的参数。
昨天找坤哥看到我的一段代码,如下: 稍微解释下,这段代码时D层查询结束后,将datatable查询到的结果赋值给实体对象的属性,然后返回实体的过程,坤哥看了之后问我,如果实体有500多个属性,难道也要这样一条一条的写吗?如果返回多个实体时怎么办?这时,我才意识到自己的代码时非常有问题的,原来设计的是每个方法最多返回一个实体,但是当遇到查询到多条记录的时候,就又冒着破坏三层结构的事返回Datatable去了,真的是很有问题啊。
机房收费系统进行有一段时间了,但是始终有些历史遗留问题。比如,如何MDI子窗体如何显示在上层的问题和MDI子窗体实例化的问题。 对于如何显示在上层的问题,这次采用的还是SetParent函数,在模块里面添加: '定义一个用来设置子...
最近两天在重装系统,今天好不容易把各种东西都装齐全了,再打开我的机房收费系统,就提示如下错误: 看到这个问题,我感觉很熟,因为以前也遇到过两次这个问题,都是改了下D层的编译路径,改到了U层的bin\Debug文件夹下。
机房收费系统的重构已经开始很久了,最近两天才感到有了一点儿头绪。 对这次重构,刚开始计划的是先做数据库,然后优化下,列出每个窗体对表的访问关系,抽出常用的访问作为存储过程,然后把访问数据库的常用方法封装成SqlHelper.这部分就是数据库的部分。
最近学了两个项目管理的软件,一个是SVN,用来进行版本的控制和资料的上传和下载,是用于开发过程中的软件。另一个就是禅道,相比SVN,禅道比较宏观,它主要是围绕产品需求,对整个项目进行管理。
昨天和今天都在忙着写禅道测试的使用文档,这个文档主要是给10期,11期的看,然后教他们使用禅道的测试部分。 到现在,关于禅道的文档已经写了两遍,第一遍的时候,由于太注重软件的使用流程,结构一头扎进了使用步骤里面,写了一份操作手册出来: 给师哥看过之后,师哥说缺少规范,而且步骤这方面,写的太难懂。
从下午开始做库的合并,刚开始一直将路径弄错,后来纠结至死的时候,finally and finally,succeed~ 库合并是这样子的: 现在,我要把项目1这个库合并到部门1的项目1文件夹中,为了方便看合并后的效果,我在项目1库中放了一个txt的文件夹。
一,基础知识 在使用ADO.NET访问数据的时候,有两种方法: 1,使用Connection+Command+DataReader方法 使用ADO.NET的Datareader对象能从数据库中检索数据。
一,关于两个对象的基础知识 1,Command Command对象主要用于对数据源执行SQL命令并返回结果。 ADO.NET提供了Connection来连接数据库,同时也提供了Command对象来查询数据库。
在ADO.NET对象模型中,Connection对象代表了与数据源之间的连接。 .NET框架中有两个Connection对象:一个是OleDbConnection,用于大多数的数据库连接,一个是SqlConnection,是MS开发的专门用于针对SQLServer的连接。
之前看过很多关于三层的博客,所以这次自己重学三层之前,就给自己提了几个问题:一,三层指的是哪三层,每层的作用是什么? 二,为什么要分三层? 三,三层结构的优缺点? 四,如何分层? 下面,让我们来逐一回答这些问题。
在快速阅读中,最基本,也是最核心的部分,就是要将我们传统的点式阅读变成组块阅读.这里的组块可以是词组,半行,整行,整段,整页. 不要觉得整段甚至是整页的阅读是不可能的,从生理上看,作为高等动物的我们完全做的到。
学完VB.NET,很大的一个感受就是,以前觉得台湾话挺好玩儿的,但是,现在,只想说:爸比,一点儿都不酷啊~。。Just kidding~~~ VB.NET主要分为两部分,一部分是我看的懂的部分,一部分是看不懂的。
一,what? 快速阅读,简称快读或速读,就是用比平常人快几倍,几十倍,甚至上百倍的速读进行阅读,还能获得不亚于传统阅读甚至更好的理解记忆效果的一种阅读方法.平常说的"一目十行,过目不忘"就是说的这种方法,它是一种从文本中快速摄取有用信息和知识的一种高效的学习方法和工作方法. 没有经过训练的人,是一种经由大脑甚至嘴巴发音的"复述"式阅读,也就是每个字,每个词都要逐个发音,从而在发音中获得理解,而没有发音的字,往往不能理解或理解的很差.这种方法的阅读速度一般在200到300字/分钟左右。
操作系统对主存的管理,主要强调的是如何合理利用主存空闲区的问题,之后,提出了一系列增加利用率的策略。 无论是固定分区存储管理还是可变分区存储管理,这两种为作业分配主存的方式都是按照一定算法,将全部作业装入主存。
管理经济学主要是用于企业的决策的。更准确的说,是用来科学的决策的(都是用数据说话的)。整本书共九章: 1,生产分析 生产分析主要是确定产品需要生产多少和影响需求的因素对需求量的影响。
1, 从 For循环说起 在几乎所有的编程语言中,都有3大结构:顺序,选择,循环。它们就像是3种框架,用来搭建不同的模型。在这3种结构中,最为独特的,要当属循环结构了。其实,我觉得叫它“懒人结构”更好。
什么是设计模式? 设计模式的每一个模式描述了一个在我们周围不断重复发生的问题,以及该问题的解决方案的核心.这样,你就能一次又一次地使用该方案而不必做重复劳动. 设计模式让我们站在了巨人的肩膀上,告诉我们不是解决任何问题都是要从头开始的。
今天下午从考场出来,感觉顿时轻松了。 总觉得一件事拖的越长,心里就越不踏实。过还是不过给一个字,我心里就踏实了(理解下吧~)。 回想起对于C++的学习,我认为这是一件值得纪念的事。
组合模式将对象组合成树形结构以表示“部分-整体”的层次结构。组合模式使得用户对单个对象和组合对象的使用具有一致性。 组合模式结构 组合模式非常好的解决了一个整体与部分可以被一致对待的问题。
引言 以前有位巨人常常强调备份的重要性。也许,只有经历过当文件找不到的悲哀才体会到吧。 为了做一个淡定的人,对于重要的文件,我们要留有副本。 一般为系统备份,我们都会选电脑运行的非常流畅,各种软件配备齐全的时候。
适配器模式将一个类的接口转换成客户希望的另外一个接口。Adapter模式使得原本由于接口不兼容而不能一起工作的那些类可以一起工作。 适配器模式结构图 本模式要解决的问题: 需要的东西就在面前,但却不能使用,而短时间又无法改造它,于是就要想办法适配它。
状态模式:当一个对象的内在状态改变时运行改变其行为,这个对象看起来像是改变了其类。 状态模式结构 状态模式主要解决的是当控制一个对象状态转换的条件表达式过于复杂时的情况。
在创建型模式中,有3中关于工厂的模式,分别是:简单工厂模式,工厂方法模式,抽象工厂模式。这3中模式既有各自的优点,同时,这3中模式又可以逐步演化:如,简单工厂可以演化成工厂方法,工厂方法可以演化成抽象工厂。
观察者模式定义了一种一对多的依赖关系,让多个观察者对象同时监听某一个主题对象.这个主题对象在状态发生变化时,会通知所有观察者对象,使它们能够自动更新自己. 模式结构 观察者模式的好处: 观察者模式所做的工作其实就是在解除耦合,让耦合的双方都依赖于抽象,而不是依赖于具体。
建造者模式是将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示。 模式结构 建造者模式的好处: 建造者模式可以将一个产品的内部表象与产品的生产过程分割开来,从而可以使一个建造过程生成具有不同的内部表象的产品对象。
外观模式为子系统中的一组接口提供一个一致的界面,此模式定义了一个高层接口,这个接口使得这一子系统更加容易使用。 模型 其中,所定义的外观类需要了解所有子系统的方法和属性,并将子系统的方法和属性组合,以备外界调用。
模板方法定义一个操作中的算法的骨架,而将一些步骤延迟到子类中。模板方法使得子类可以不改变一个算法的结构即可重定义该算法的某些特定步骤。 结构 AbstractClass是抽象类,其实也就是一个抽象模板,定义并实现了一个模板方法。
模型 工厂方法模式(factory method):定义一个用于创建对象的接口,让子类决定实例化哪一个类。工厂方法是一个类的实例化延迟到其子类。 工厂方法和简单工厂方法看起来大部分是一样的,只是在工厂这里,简单工厂是通过Switch语句进行选择然后实例化对象,而在工厂方法里面,对工厂进一步抽象,定义了一个工厂接口,让每一类产品对应一个工厂接口,在实例化具体产品的时候,要通过实现工厂接口的类进行。
代理模式模型 为其它对象提供一种代理以控制对这个对象的访问. 示例 在高中的时候,有很多害羞的孩纸们有了暗恋的对象后,如果自己不好意思给自己的女神或者男神送礼物的话,通常都会找一个跟自己暗恋者关系比较好的,托它帮自己送东西,这种恋爱的方式就是代理模式。
在起初的设计中,当系统需要新功能的时候,是向旧的类中添加新的代码,这些新加的代码通常装饰了原有类的核心职责或主要行为。但这种做法的问题在于,在主类中加入了新的字段,新的方法和新的逻辑,从而增加了主类的复杂度。
策略模式分析 它定义了算法家族,分别封装起来,让它们之间可以相互替换,此模式让算法的变化,不会影响到使用算法的客户。 策略模式的结构图: 在策略模式中,核心代码为: 在此模式中,主要通过对Context创建时,传入一个具体的策略,再通过Context的ContextInterface()方法中调用具体策略的算法,实现对具体策略的选择和创建的 (如下:客户端代码)。
简单工厂模式的核心,就是用一个单独的类,来完成创造实例的过程。 简单工厂模式示例 例如,现在有一个CPU的工厂,它们目前生产3款CPU,型号分别为:8086,880,8085,具体生产那种型号的CPU,要看顾客怎么下单,如果顾客要求生产8086型号的CPU,那么,工厂接到单子后,就马上生产处一批8086的CPU,在这个过程中,顾客根本不用知道这款CPU是怎么生产的,它只要提供一个型号,然后就拿到指定型号的CPU。
Mrs_Hudson想要出租她在Baker 211B的房子,于是她找到了中介公司;而Sherlock想要租一套房子,他也找了相同的中介公司,并且相中了Baker 211B的房子,于是他决定租下它。
在C++中,有两种重载,一种是函数的重载,另一种是运算符的重载。 C++的重载最早出现在基本运算符上。例如,加法操作只有一个运算符+,但是它却可以实现整数,浮点数,指针的加法运算。
一个面向对象的系统常常要求一组具有相同基本语义的方法能在同一接口下为不同的对象服务,这就是多态性(polymorphism). 通俗的来说,多态就是在一个方法在不同基类的派生类中表现出不同的实现形式。
在派生类中对基类成员的访问应该是唯一的.但是,在多继承情况下,可能造成对基类中某个成员的访问出现了不一致的情况,这时就称对基类成员的访问产生了二义性. 原因之一: 派生类在访问基类成员函数时,由于基类存在同名的成员函数,导致无法确定访问的是哪个基类的成员函数,因此出现了二义性错误。
静态成员 对于非静态成员,一个类的每个对象都自己存有一个副本,每个对象根据自己拥有的非静态的数据成员来区别于其他对象。而静态成员则解决了同一个类的多个对象之间数据和函数的共享问题。 静态数据成员 静态数据成员的作用是:实现同一类的不同对象之间的数据共享。
类属于一种用户自定义的数据类型,在声明一个对象的时候,编译程序要为对象分配存储空间,进行必要的初始化,这些工作是由构造函数来完成的.简单理解,构造函数就是用来对数据成员进行初始化的。
参数的传递方式有两种:传值和传地址。 传值 传值方式是将实参的值复制到形参中,因此实参和形参是两个不同的变量,各有各的存储空间,函数形参可以看做是函数的局部变量。
指针 指针是用来操纵地址的特殊类型变量,它可以作为函数参数来传递数组变量,也可以用来访问和操作内存空间。 在指针中,有两种特殊运算符:& 和 *;其中,&运算符是用来去地址的,而*运算符则是用来取值和声明指针的。
以前学习C语言的时候,就觉得break语句和continue语句很像,但是那时候,you know,考试就那么过了。。现在在学习C#的时候,又碰到了,什么都不说了,还是好好学习吧~同学们~ break break语句主要是用在switch,which,do...while,for或foreach等语句中,用来中断当前的选择或循环,并跳出当前的选择或循环语句。
今天在写一个很简单的输入一个整数的时候,发现C#的类型转换控制的确实很严,有些可以在VB中可以隐式转换的现在不行了:比如,在不会发生数值丢失或溢出时,也不会将返回的字符型的值转换给double这些小数。
写了几天的C#程序,程序总会先声明一个名称空间: namespace test 跟C++里名称空间一样,只是声明方法不同: using namespace std; 名字空间是用来按照逻辑,对类进行划分,增强了程序的可读性,而且减少了命名的冲突。