文档库 最新最全的文档下载
当前位置:文档库 › List of British Monarchs

List of British Monarchs

List of British Monarchs
List of British Monarchs

List of British Monarchs

Monarchs of England

Name Reign Notes

The Saxons

Alfred the Great 878-899

Edward the Elder 899-924 Alfred's son

Ethelweard 924 Edward's son

Athelstan 925-940 Edward's son

Edmund I 939-946 Edward's son

Edred 946-955 Edward's son

Edwy 955-959 Edmund's son

Edgar the Peaceful 959-975 Edmund's son

St Edward the Martyr 975-978 Edgar's son

Ethelred II 978-1013

Edgar's son

1014-1016

Edmund II 1016 Ethelred II's son

The Danelaw For a period of time, both the Saxons and the Danish claimed the English throne.

Sweyn Forkbeard 1013-1014

Canute the Great 1016-1035 Sweyn's son

Harold I 1035-1040 Canute's illegitimate son

Harthacanute 1040-1042 Canute's son

The Saxon Restoration

St Edward the

1042-1066 Ethelred II's son

Confessor

Harold II 1066 Edward the Confessor's brother-in-law

The Normans After the Norman Conquest in 1066, numbering of kings (a French tradition applied to the Saxons only by historians) begins anew, although this affects only the Edwards.

William I 1066-1087

William II 1087-1100 William I's son

Henry I 1100-1135 William I's son

Stephen 1135-1154 William I's grandson

The Plantagenets The Royal House name changed to reflect Matilda's marriage to Geoffrey Plantagenet.

Matilda (Empress

1141 Henry I's daughter

Maud)

Henry II 1154-1189 Matilda's son

Richard I 1189-1199 Henry II's son

John 1199-1216 Henry II's son

Henry III 1216-1272 John's son

Edward I 1272-1307 Henry III's son

Edward II 1307-1327 Edward I's son

Edward III 1327-1377 Edward II's son

Richard II 1377-1399 Edward III's grandson

The House of Lancaster Henry Bolingbroke deposed Richard II, and the Royal House name came to reflect Henry's father's title, Duke of Lancaste.

Henry IV 1399-1413 Edward III's grandson

Henry V1413-1422 Henry IV's son

Henry VI 1422-1461 Henry V's son

The House of Y ork The Houses of Lancaster and Y ork had fought the War of the Roses, and the Y orkists took the throne.

Edward IV 1461-1483 Edward III's great-great-grandson

Edward V 1483 Edward IV's son

Richard III 1483-1485 Edward IV's brother

The House of T udor The Lancastrian Henry Tudor reclaimed the throne from the Y orkists.

Henry VII 1485-1509 Edward III's great-great-grandson

Henry VIII 1509-1547 Henry VII's son

Edward VI 1547-1553 Henry VIII's son

Lady Jane Grey 1553 Henry VII's great-granddaughter

Mary I 1553-1558 Henry VIII's daughter

Elizabeth I 1558-1603 Henry VIII's daughter

Monarchs of England and of Scotland In 1603, James VI of Scotland inherited the English throne upon the death of Elizabeth I. From then until 1707, England and Scotland had shared monarchs.

James I (England)

James VI (Scotland)1603-1625Henry VII of England's great-great-grandson Mary of Scotland's son

Charles I1625-1649James I's son

The Commonwealth and Protectorate There was no King between Charles I's execution in 1649 and the Restoration in 1660. The nation's rulers were known as Lords Protector.

Oliver Cromwell1653-1658

Richard Cromwell1658-1659Oliver Cromwell's son

Monarchs of England and of Scotland In 1659, Richard Cromwell abdicated. Anarchy existed until the Stuart Restoration in 1660.

Charles II

James II (England)

James VII (Scotland)

1685-1689Charles I's son

Mary II1689-1694James II's daughter Jointly with William III

William III (England)

William II (Scotland)

1689-1702Mary II's husband Jointly with his wife

Anne1702-1707James II's daughter

Monarchs of Great Britain In 1707, the Act of Union combined the Kingdom of England and the Kingdom of Scotland into the Kingdom of Great Britain.

Anne James II's daughter

The House of Hanover Under the Act of Settlement, descendants of Sophia, Electress of Hanover, as the closest Protestant relatives of Anne, became entitled to the throne, and the Royal House name was changed when George, Elector of Hanover became King.

George I1714-1727James I's great-grandson

George II1727-1760George I's son

George III1760-1801George II's grandson

Monarchs of the United Kingdom of Great Britain and Ireland In 1801, the Act of Union combined the Kingdom of Great Britain and the Kingdom of Ireland into the United Kingdom.

George III1801-1820George II's grandson

George IV1820-1830George III's son

William IV1830-1837George III's son

V ictoria1837-1901George III's granddaughter

The House of Saxe-Coburg-Gotha

The Royal House name was changed to reflect Victoria's marriage to Prince Albert of Saxe-Coburg-Gotha.

V ictoria1837-1901George III's granddaughter

Edward VII1901-1910V ictoria's son

George V1910-1936Edward VII's son

The House of Windsor The name of the Royal House changed from Saxe-Coburg-Gotha to Windsor due to anti-German sentiments during World War I.

George V1910-1936Edward VII's son

Monarchs of the United Kingdom of Great Britain and Northern Ireland In 1922, the Irish Free State left the United Kingdom. The name of the Kingdom was amended in 1927 to reflect the change.

George V1910-1936Edward VII's son Edward VIII1936George V's son George VI1936-1952George V's son Elizabeth II1952-George VI's daughter

VFP中的列表框控件(listbox)

VFP中的列表框控件(listbox) 一.列表框(listbox):主要用于选择一组指定的数据,用户从列表中选取选项,然后执行所需的操作. 二.列表框常用属性:见下表 注1(rowsourcetype属性可指定的值): 0-无,运行时使用列表框的确良additem和addlistitem方法加入 1-值,将列表框的内容在设计时直接写在该属性中 2-表别名:由columncount确定表中选择的字段.当用户选择列表框时,记录指针将自动移到该记录上 3-sql语句:见sql部分,由执行的结果产生. 4-查询文件名:见查询部分,由查询结果产生 5-数组名 6-字段名表:可用表别名作为字段前缀.当用户选择列表项时,记录指针将自动移到该记录上7-文件名描述框架,可包含"*"和"?"来描述在列表框中显示的文件名 8-结构

9-弹出式菜单,提供向后兼容. 二.列表框常用的方法:见下表 三.列表框常用事件:列表框的常用事件为click(单击)事件和dbclick(双击)事件. 四.例:列表框练习 1.新建表单,添加一个文本框text1,三个命令按钮command1~command3,三个命令按钮的caption属性依次设为"加入","移出"和"全部移出",一个列表框list1.界面如图25 2.设置属性:将表单的caption属性设为"列表框练习",autocenter属性设为.T.;将列表框list1的moverbars属性设为.T.,multiselect属性设为.T. 3.编写代码: ●"加入"命令按钮command1的click事件: qm=thisform.text1.value IF !empty(qm) no=.t. FOR i=1 to thisform.list1.listcount IF thisform.list1.list(i)=qm &&如果文本框中输入的内容和列表框中已存在的内容相同,则不添加 no=.f. ENDIF NEXT i IF no thisform.list1.additem(qm) thisform.refresh

关于WPF的listbox控件绑定问题

关于WPF的listbox控件 首先关于listbox以及datagrid 人们比较喜欢用datagrid来绑定数据,应为它的文本生成出来比listbox要整齐,相对来说listbox生成的文本可以用四个字来形容----不堪入目!下面我用2个控件做出的效果: 发现没?Listbox也能使之对齐。。详解如下: 前台绑定:XAML 其中Name;Gends;Age;Hobby 分别为实例类的属性(也是表的属性); 再看后台很简洁;

ZUC算法原理及实现过程

ZUC算法原理及实现过程 1.1 算法设计背景 ZUC算法,即祖冲之算法,是3GPP机密性算法EEA3和完整性算法EIA3的核心,为中国自主设计的流密码算法。2009年5月ZUC算法获得3GPP安全算法组SA立项,正式申请参加3GPPLT第三套机密性和完整性算法标准的竞选工作。历时两年多的时间,ZUC算法经过评估,于2011年9月正式被3GPPSA全会通过,成为3GPPLTE第三套加密标准核心算法。ZUC算法是中国第一个成为国际密码标准的密码算法。 1.2 算法原理 ZUC是一个面向字的流密码。它采用128位的初始密钥作为输入和一个128位的初始向量(IV),并输出关于字的密钥流(从而每32位被称为一个密钥字)。密钥流可用于对信息进行加密/解密 ZUC的执行分为两个阶段:初始化阶段和工作阶段。在第一阶段,密钥和初始向量进行初始化,即不产生输出。第二个阶段是工作阶段,在这个阶段,每一个时钟脉冲产生一个32比特的密钥输出。 (1)运算符说明 mod ? a|_b 3H 3L a 「:::::n k 整数模 整数比特异或 字符串a和b的连接 a二进制表示的最左16 位值 a二进制表示的最右16位值 a向左k比特的循环移位 a向右1比特的移位 l“a n —:匕山2,11|,5 a i值分配到对应b的值 (2)算法结构 ZUC有三个逻辑层,见下图。顶层为一个线性反馈移位寄存器(LFSR )的16个赛段,中间层是比特重组(BR),最下层为一个非线性函数F 。 图1 ZUC的整体结构图

(3)线性移位反馈寄存器(LFSR ) LFSR具有16个31比特的单元S0,S I,|||,S!5,每个单元S 0_i_15取值均在下面的集合中: 「123,川231-1? LFSR有两种模式的操作,即初始化模式和工作模式。在初始化模式中,LFSR接收一个31比特的输入u,u是删除非线性函数F的32位输出W最右边的位得到的。也就是说,可将初始化模式工作原理表示为:LFSRWithInitialisationMode ( u) { 〔、V=215S5 +217命+221S W +220S4 +(1 +28)s°mod(231—1 ); 31 2、s6=(V+u )mod(2 -1 ); 3、如果S!6 =0,则设$6 =231-1 ; 4(S,S2, |||,S6)T(S0,S1」II,S5 ) } 在工作模式中,LFSR不接收任何输入,它的工作原理表示为:LFSRWithWorkMode() { 仁S6 =215$5 +217S3 +221S W +220S4 +(1 + 28Js°mod(231—1 ); 2、如果% =0,则设36 =231 -1 ; 3、(s,S2,川,$6)T(S0,S1」II, S5 ); } (4)比特重组 ZUC算法的中间层是比特重组,从LFSR的单元中提取128比特的输出并形成4个32比特的字,前三个字将用于最底层的非线性F函数中,而最后一个字会在密钥流的产生中用到。 令S01S21S5,S71S91S111S14,S15是LFSR中的8个单元,则形成4个32比特字 X0.X1.X2.X3的比特重组过程如下:

ListBox控件

ListBox控件 1.功能 ListBox控件显示较长的选项列表,用户可从中选择一项或多项。如果项总数超出可以显示的项数,则自动向ListBox控件添加滚动条。ListBox控件列表中的每个元素称为项。图1所示为ListBox控件。 图1 ListBox控件 2.属性 ListBox控件常用属性及说明如表1所示。 表1 ListBox控件常用属性及说明 下面对比较重要的属性进行详细介绍。 (1)Items属性。该属性用于查看列表框中的项。 语法: public ObjectCollection Items { get; } 属性值:ListBox.ObjectCollection表示ListBox中的项。 说明: ① 该属性使用户可以获取对当前存储在 ListBox 中的项列表的引用。通过此引用,可以在集合中添加项、移除项和获得项的计数。

② 可以使用DataSource属性来操控ListBox的项。如果使用DataSource属性向ListBox 添加项,则可以使用Items属性查看ListBox中的项,但不能使用 ListBox.ObjectCollection的方法向该列表添加项或从中移除项。 (2)SelectedItem属性。该属性表示当前选中的项。 语法: public Object SelectedItem { get; set; } 属性值:表示控件中当前选定内容的对象。 说明:对于标准 ListBox,可以使用此属性确定在ListBox中选定了哪个项。如果 ListBox 的SelectionMode属性设置为SelectionMode.MultiSimple或 SelectionMode.MultiExtended(它指示多重选择ListBox),并在该列表中选定了多个项,则此属性可返回任何选定的项。 示例 把左边的文本框中的内容移到右边的文本框中 本示例主要使用Items属性向ListBox1控件添加项,然后使用SelectedItem属性将ListBox1控件中的选中项添加到ListBox2控件中。示例运行结果如图2和图3所示。 图2 ListBox1中项移动前 图3 ListBox1中项移动后 程序主要代码如下: SqlConnection con = new SqlConnection("server=ZHY\\zhy;uid=sa;pwd=;database=student"); con.Open(); SqlCommand com = new SqlCommand("select * from student",con); SqlDataReader dr = com.ExecuteReader();

新项目Checklist

New Product Development Tollgate Checklist Feasibility For Quote (stageⅠ)可行性阶段一Proto Type(stage Ⅱ)打样(阶段二) Pilot Run (stage Ⅲ)试生产(阶段三)Mass(1 Year review)(stage Ⅳ)量产(阶段四)

Continue to Next Stage继续下阶段Another Review Required and Date需重新review及时间Terminate the Project终止该项目Notice to Client通知客户 New Product Requirement Checklist Details新产品评审要求细则 #1- Drawing / Print:Need to confirm the latest revision level drawings available. Require all assembly, sub-assembly and individual component drawings are provided from customer. 图纸:需要确认并获得最新版本的图纸,要求客户提供所有组件,分部组件和子件的图纸 #2- Critical Material: Need to identify material requirements for the project to confirm availability in China and available material substitutions; this should include any supplied material as well as the manufacturer (such as steel mill, paint manufacturer or OSP) of this material. 关键材料:需要识别该项目的材料要求并确认在国内可购买以及有可用的替代材料,此要求除了制造商如钢厂,涂料厂商或外协厂商外,还需包含其它原材料及物料 #3- Customer Standards & Specifications:Acquire all customer standards, specifications and requirements for the part numbers being considered for quoting purposes. Ask for the following customer documents: Supplier Quality Manual, Specifications listed on drawing / print, PPAP, Material Certificate Requirements or any third party test requirements. 客户标准及规格:对正在评估报价的项目料号取得客户标准,规范和要求。获得客户相关文件:如供应商质量手册,列在图纸上的规范清单,PPAP,材料认证要求或任何第三方测试要求

Java中的常用容器的底层实现

关于Java中的常用容器的底层实现 1.首先介绍Collection,包含有List、Set、Queue ----1.1 List ArrayList LinkedList ----1.2 Set 常用来去重 HashSet:其允许使用null元素,HashSet的底层是通过哈希表实现的,实际就是HashMap的key的一个集合,所以hashSet不能有从重复的元素;另外hashset.add()添加元素,因为底层是HashMap的key,所有其实实质就是hashmap.put(),于是首先判断key是否存在,key 若存在的话,则修改value值,如不存在则插入;value是一个static final Object对象标识;综上,所有的对HashSet的操作实质都是底层对HashMap的操作; LinkedHashSet:其有HashSet的特点,因为他是基于链接式的HashMap实现,所有他是有序的,因为具有链表的特点,按元素的插入顺序排序; TreeSet:其底层是基于树实现的,所以他是有序的,因为是按Comparator来指定树形集中的元素顺序,所以是按字典序的,也就是自然顺序; ----1.3 Queue 2.其次介绍Map,三大实现接口HashMap、LinkedHashMap、TreeMap ----2.1 HashMap 构成:允许使用null值和null键 老版本:数组+链表 1.8版本:数组+链表+红黑树(所谓红黑树,既是二叉查找树,但是在每个节点上增加一个存储位表示节点的颜色,可以是Red\Black) 原因:为什么最新版本中要加入红黑树呢? 因为红黑树的查找时间要比链表的查找时间快,特别是链表的长度比较大时,或者超过8时,那么红黑树的查找时间O(logN)明显优于链表查找时间O(N) 所以Hash值决定在数组中存储位置,那么相同Hash值所对应的值是通过链表存储,那么当相同Hash值的元素比较多时,那么这个链表查找时间就比较长了,所以该用红黑树存储。那么Hash值是如何算的,是有key进行计算而得。 线程不安全性:所以引入了了快速失败机制 从迭代器创建之后,若想修改HashMap的结构必须用迭代器自带的remove方法,否则便抛出ConcurrentModificationException。 Map m = Collections.synchronizedMap(new HashMap(...)); HashMap工作原理: HashMap是基于 Hashing原理,put(k,v)存放键值对,他的存储过程,首先调用键的hasCode方法,计算出键的哈希码,然后对应找到 bucket位置来对应存储Entry对象,那么当获取对象时如何获取的呢,首先声明当两个对象的hashCode相同,不能代表两个对象相同,因为两个对象的hashCode相同,所以他们的bucket位置相同,于是会发生碰撞,这个时候就体现出 HashMap链表数据结构的好处,将碰撞的Entry对象存储在链

VB中ListBox的应用

https://www.wendangku.net/doc/cc10225844.html,入门——ListBox控件的使用 【字体大小:小中大】2008-02-18 19:56 来源:作者: ListBox(列表框)控件可以显示一组项目的列表,用户可以根据需要从中选择一个或多个选项。列表框可以为用户提供所有选项的列表。虽然也可设置列表框为多列列表的形式,但在缺省时列表框单列垂直显示所有的选项,如果项目数目超过了列表框可显示的数目,控件上将自动出现滚动条。这时用户可在列表中上、下、左、右滚动。ListBox控件在工具箱中的图标如图所示: 一、ListBox常用属性 1、BackColor 属性:用于显示ListBox控件中的文本和图形的背景颜色,默认为白色(Window) 2、BorderStyle 属性:控制在列表框ListBox周围绘制的边框的类型,其枚举值为下面三个: BorderStyle.None——无边框 BorderStyle.FixedSingle——单行边框 BorderStyle.Fixed3D——三维边框 默认值为BorderStyle.Fixed3D。 3、Font、ForeColor 属性:前者用于调整列表框中文本的字体,后者用于调整文本框中文本或者图形的前景色。 4、MultiColumn 属性:指示列表框中的项是否以水平的方式在列表框中显示,默认为False,此时所有的项都只显示为一列,当列表框无法显示全部的项的时候,将会出现一个垂直的滚动条;如果MultiColumn属性为True,则列表框以多列的形式来显示所有的项,如果一列无法全部显示完,则在水平位置重新显示一列,直到显示完毕为止,此时将会出现一个水平滚动条,如下图一所示:

Servlet底层原理

Servlet底层原理 从 Servlet 容器说起 要介绍 Servlet 必须要先把 Servlet 容器说清楚,Servlet 与 Servlet 容器的关系有点像枪和子弹的关系,枪是为子弹而生,而子弹又让枪有了杀伤力。虽然它们是彼此依存的,但是又相互独立发展,这一切都是为了适应工业化生产的结果。从技术角度来说是为了解耦,通过标准化接口来相互协作。既然接口是连接 Servlet 与 Servlet 容器的关键,那我们就从它们的接口说起。 前面说了 Servlet 容器作为一个独立发展的标准化产品,目前它的种类很多,但是它们都有自己的市场定位,很难说谁优谁劣,各有特点。例如现在比较流行的 Jetty,在定制化和移动领域有不错的发展,我们这里还是以大家最为熟悉 Tomcat 为例来介绍 Servlet 容器如何管理 Servlet。Tomcat 本身也很复杂,我们只从 Servlet 与 Servlet 容器的接口部分开始介绍,关于 Tomcat 的详细介绍可以参考我的另外一篇文章《 Tomcat 系统架构与模式设计分析》。 Tomcat 的容器等级中,Context 容器是直接管理 Servlet 在容器中的包装类 Wrapper,所以 Context 容器如何运行将直接影响 Servlet 的工作方式。 图 1 . Tomcat 容器模型 从上图可以看出 Tomcat 的容器分为四个等级,真正管理 Servlet 的容器是 Context 容器,一个 Context 对应一个 Web 工程,在 Tomcat 的配置文件中可以很容易发现这一点,如下: 清单 1 Context 配置参数

项目清单(project charter checklist)

项目清单(project charter checklist) 又名:任务说明检查单(mission statement checklist) 概述 项目清单用于确保整个小组明白该做的事情以及采取的方式。 适用场合 ·新成立的小组召开第一次或笫二次会议时; ·当小组获得新的或者修改过的任务时。 实施步骤 讨论下面的问题: 1是否清楚管理者对我们的期望? 2是否清楚为什么该项目对组织来说是重要的?是否清楚该项目对组织的总体目标的切入点在哪里? 3我们的项目是否仅是一个较大质量改进过程的一部分?在这个过程中,我们的项目处在什么位置?以及它应该从哪儿开始和到哪儿结束? 4项目范围的界定是否清楚?什么将超出我们的权限范围? 5目标是否现实? 6该项目是否可行?该任务是否与我们对过程或系统的了解相吻合? 7在部门内、外部,我们都需要哪些资源? 8我们小组是否有合适的人员去完成该任务? 9在我们小组以外,哪些人将对我们的工作至关重要? 10谁将支持我们?准将反对我们?谁将中立?我们怎样才能接触到这些人? 11怎样表达反对意见?我们如何确保让所有的反对意见都表达出来? 12我们将通过什么方式判断我们已经成功?其他人将通过什么方式判断我们是否已经成功? 示例 技术支持部门的一个小组被授予这样一个任务:“通过对过程步骤进行考察,改善报表准备。”该小组利用项目清单论述了各项工作,问题就变得很清楚了。这是他们讨论的一些问题:1经理所期望的提高程度是多少?他们感兴趣的改善种类是什么?应该对报表准备的所有方面给予同等的关注吗? 2报表准备是如何影响组织工作的?哪些方面正给我们或者我们的顾客带来麻烦? 3我们的工作应该致力于哪些过程?我们所涉及的只有书面报表阶段还是形成报表的整个调查过程? 4我们是否被允许到所凋查的部门内部研究导致影响报表问题的症结所在?管理者对于报表的评价是什么? 5管理者希望这个项目持续多长时间?考虑到我们的其他职责,这个时间是否足够? 6这个项目能否起作用取决于对我们某些问题的回答。 7管理层是否通知了客户部的经理:我们需要他们的员工抽出一些时间为我们提供信息?他们是否也通知了我们部门,特别是秘书?认为我们的工作拥有了合适的人选。 8我们认为拥有了合适的人选。 9关键人员:我们部门其他的报表人员——秘书以及经理。 10报表的撰写者不会去追求以不同的方式工作。如果我们可以找到减少秘书工作量的方法,就会得到他们的支持。 11要确保考虑并解决全部的报表人员提出的问题。当我们提出改革时,应该对他们进行排除自身利益的培训。 12我们如何判断我们已经获得成功?经理用何种方式判断?因为我们不清楚他们所期望的

深入了解php-底层机制

深入了解php底层机制(-) 洪定坤 摘要 作为一门动态语言,php是如何实现的,其底层机制如何,具有什么样的特点,本文深入浅出介绍了包括php设计理念、整体结构、核心数据结构和变量在内的相关底层知识,对我们更好的开发php程序,优化性能等有一定的指导意义。 TAG Php 底层机制性能优化 目录 1、概述 (1) what is php? (1) 了解它底层实现的目的? (2) 2、php的设计理念及特点 (2) 3、Php的四层体系 (2) 4、Sapi (4) 5、Php的执行流程&opcode (6) 6、HashTable -- 核心数据结构 (7) 7、Php变量 (9) 概述 (9) Zval (10) 整数、浮点数类型变量 (11) 字符串变量 (11) 数组变量 (12) 资源类型变量 (12) Php变量的作用域 (13) 1、概述 what is php? 一种适用于web开发的动态语言。具体点说:就是一个用c语言实现包含大量组件的软件框架。更狭义点看,可以把它认为是一个强大的ui框架。

了解它底层实现的目的? 动态语言要像用好首先得了解它 内存管理、框架模型值得我们借鉴 通过扩展开发实现更多更强大的功能,优化我们程序的性能 2、php的设计理念及特点 多进程模型 由于php是多进程模型,不同请求间互不干涉,这样保证了一个请求挂掉不会对全盘服务造成影响,当然,随着时代发展,php也早已支持多线程模型。 弱类型语言 和c/c++、java、c#等语言不同,Php是一门弱类型语言:一个变量的类型并不是一开始就确定不变,运行中才会确定并可能发生隐式或显式的类型转换,这种机制的灵活性在web开发中非常方便、高效,具体会在后面php变量中详述。 引擎(Zend)+组件(ext)的模式降低内部耦合 中间层(sapi)隔绝web server和php 语法简单灵活,没有太多规范。(导致风格混杂) 再差的程序员也不会写出太离谱危害全局的程序。 3、Php的四层体系 Php的核心架构如下图

DropDownList,ListBox控件

5.7 列表控件(DropDownList,ListBox) 在Web开发中,经常会需要使用列表控件,让用户的输入更加简单。例如在用户注册时,用户的所在地是有限的集合,而且用户不喜欢经常键入,这样就可以使用列表控件。同样列表控件还能够简化用户输入并且防止用户输入在实际中不存在的数据,如性别的选择等。 5.7.1 DropDownList列表控件 列表控件能在一个控件中为用户提供多个选项,同时又能够避免用户输入错误的选项。例如,在用121 户注册时,可以选择性别是男,或者女,就可以使用DropDownList列表控件,同时又避免了用户输入其他的信息。因为性别除了男就是女,输入其他的信息说明这个信息是错误或者是无效的。下列语句声明了一个DropDownList列表控件,示例代码如下所示。 1 2 3 4 5 6 7 上述代码创建了一个DropDownList列表控件,并手动增加了列表项。同时DropDownList列表控件也可以绑定数据源控件。DropDownList列表控件最常用的事件是SelectedIndexChanged,当DropDownList列表控件选择项发生变化时,则会触发该事件,示例代码如下所示。 protected void DropDownList1_SelectedIndexChanged1(object sender, EventArgs e) { Label1.Text = "你选择了第" + DropDownList1.Text + "项"; } 上述代码中,当选择的项目发生变化时则会触发该事件,如图5-14所示。当用户再次进行选择时,系统会将更改标签1中的文本,如图5-15所示。 当用户选择相应的项目时,就会触发SelectedIndexChanged事件,开发人员可以通过捕捉相应的用户选中的控件进行编程处理,这里就捕捉了用户选择的数字进行字体大小的更改。 5.7.2 ListBox列表控件

Hash底层实现原理

HashMap的底层实现原理 一、HashMap的数据结构 总述: 哈希的出现时因为传统数据结构如线性表(数组,链表等),树中,关键字与其它的存放位置不存在对应的关系。因此在查找关键字的时候需要逐个比对,虽然出现了二分查找等各种提高效率的的查找算法。但是这些并不足够,希望在查询关键字的时候不经过任何比较,一次存取便能得到所查记录。因此,我们必须在关键字和其对应的存储位置间建立对应的关系f。这种对应的关系f被称为哈希函数,按此思想建立的表为哈希表。关键在于哈希函数如何构造。 意思就是:关键字的存储位置是有关键字的内容决定的。 数据结构中有数组和链表来实现对数据的存储,但这两者基本上是两个极端。 数组: 数组存储区间是连续的,占用内存严重,故空间复杂的很大。但数组的二分查找时间复杂度小,为O(1);数组的特点是:寻址容易,插入和删除困难; 链表: 链表存储区间离散,占用内存比较宽松,故空间复杂度很小,但时间复杂度很大,达O(N)。链表的特点是:寻址困难,插入和删除容易。 哈希表: 那么我们能不能综合两者的特性,做出一种寻址容易,插入删除也容易的数据结构?答案是肯定的,这就是我们要提起的哈希表。哈希表((Hash table)既满足了数据的查找方便,同时不占用太多的内容空间,使用也十分方便。哈希表有多种不同的实现方法,我接下来解释的是最常用的一种方法——拉链法,我们可以理解为“链表的数组” 一个长度为16的数组中,每个元素存储的是一个链表的头结点。那么这些元素是按照什么样的规则存储到数组中呢。一般情况是通过hash(key)&len-1获得,也就是元素的key的哈希值对数组长度取模得到。 HashMap其实也是一个线性的数组实现的,所以可以理解为其存储数据的容器就是一个线性数组。这可能让我们很不解,一个线性的数组怎么实现按键值对来存取数据呢?这里HashMap有做一些处理。 首先HashMap里面实现一个静态内部类Entry,其重要的属性有key , value, next,从属性key,value我们就能很明显的看出来Entry就是HashMap键值对实现的一个基础bean,我们上面说到HashMap的基础就是一个线性数组,这个数组就是Entry[],Map里面的内容都保存在Entry[]里面。 Transient Entry[]table; 二、HashMap的存取实现: // 存储时: int hash = key.hashCode(); // 这个hashCode方法这里不详述,只要理解每个key的hash是一个固定的int值 int index = hash % Entry[].length; Entry[index] = value; // 取值时: int hash = key.hashCode(); int index = hash % Entry[].length; return Entry[index]; (1)Put

ZUC算法原理及实现过程

ZUC 算法原理及实现过程 1.1 算法设计背景 ZUC 算法,即祖冲之算法,是3GPP 机密性算法EEA3和完整性算法EIA3的核心,为中国自主设计的流密码算法。2009年5月ZUC 算法获得3GPP 安全算法组SA 立项,正式申请参加3GPPLTE 第三套机密性和完整性算法标准的竞选工作。历时两年多的时间,ZUC 算法经过评估,于2011年9月正式被3GPPSA 全会通过,成为3GPPLTE 第三套加密标准核心算法。ZUC 算法是中国第一个成为国际密码标准的密码算法。 1.2 算法原理 ZUC 是一个面向字的流密码。它采用128位的初始密钥作为输入和一个128位的初始向量(IV ),并输出关于字的密钥流(从而每32位被称为一个密钥字)。密钥流可用于对信息进行加密/解密。 ZUC 的执行分为两个阶段:初始化阶段和工作阶段。在第一阶段,密钥和初始向量进行初始化,即不产生输出。第二个阶段是工作阶段,在这个阶段,每一个时钟脉冲产生一个32比特的密钥输出。 (1)运算符说明 mod 整数模 ⊕ 整数比特异或 a b 字符串a 和b 的连接 H a a 二进制表示的最左16位值 L a a 二进制表示的最右16位值 n a k <<< a 向左k 比特的循环移位 1a >> a 向右1比特的移位 ()()1212,,,,,,n n a a a b b b → i a 值分配到对应i b 的值 (2)算法结构 ZUC 有三个逻辑层,见下图。顶层为一个线性反馈移位寄存器(LFSR )的16个赛段,中间层是比特重组(BR ),最下层为一个非线性函数F 。 图1 ZUC 的整体结构图

https://www.wendangku.net/doc/cc10225844.html,入门分组控件:checkedlistbox控件的使用

https://www.wendangku.net/doc/cc10225844.html,入门——分组控件:CheckedListBox控件的使用https://www.wendangku.net/doc/cc10225844.html,入门——分组控件:CheckedListBox控件的使用 在https://www.wendangku.net/doc/cc10225844.html,中,CheckBox、CheckedListBox、RadioButton 和TrackBar这四个控件的功能都是设置和获取值的,我们 称之为设置值的控件。 前面我们了解了CheckBox控件和RadioButton控件的使用,这里我们来看CheckedListBox控件的使用,CheckedListBox控件在工具箱中的图标如图所示: Windows窗体的CheckedListBox控件,扩展了ListBox控件(https://www.wendangku.net/doc/cc10225844.html,入门——ListBox控件的使用)。它几乎可以完成列表框控件(ListBox)可以完成的所有任务,并且还可以在列表中的项旁边显示复选的标记。这两种控件的其他差异是:CheckedListBox控件(也称复选列表框)只支持DrawMode.Normal,并且复选列表框只能有一项选定或者没有任何选定,选定的项在窗体上突出显示,与以选中的项区别。 一、常用属性和方法 CheckedListBox控件的属性和方法基本上都可以在ListBox

控件中找到,可以参看这里:https://www.wendangku.net/doc/cc10225844.html,入门——ListBox控件的使用。值得我们重视的是,CheckedListBox控件的CheckedItems属性,它是CheckedListBox控件中复选框选中的项的集合,我们可以通过检索该属性来获得选中的项。CheckOnClick 指示是否只要一选择项即切换复选框。默认行为是在首次单击时更改选定内容,然后让用户再次单击以应用选中标记。但在某些情况下,您可能愿意一单击项就选中它。 下面我们就直接以实例来了解和掌握CheckedListBox控件的方法和属性。 二、在CheckedListBox控件中添加、移除项 因为CheckedListBox控件控件的使用和ListBox控件相似,所以我们这里就只针对用编程的方法来对CheckedListBox 控件的操作。 1、添加项 添加一个名为“新建文件”的项,且复选框为选中状态 CheckedListBox1.Items.Add("新建文件", True) 添加一个名为“拷贝文件”的项,且复选框为未选中状态 CheckedListBox1.Items.Add("拷贝文件", False) 2、删除项

新业务项目业务案例checklist

新业务项目业务案例检查表 新业务项目在进行“业务案例”分析之前,需要明确如下问题。这些问题已被明确的程度,以及其被明确的可能性是新业务项目是否可以作为“业务案例”研究的关键。 一、市场分析 o该新业务满足了哪些市场需求? o该新业务平台将推出哪些应用服务? o该新业务的政策、行业标准、行业规定因素 o该新业务各应用的目标客户群定义 o该些目标客户群的规模以及发展趋势? o市场渗透的策略以及市场开拓的预期(市场份额发展趋势等) o客户使用各应用服务的频率,即服务使用量发展预测 二、业务分析 o各应用服务的完整业务流程描述 o该服务各应用的业务模式(上下游合作伙伴、合作方式) o该新业务各应用实现的技术方案 o该新业务提供的网络建设方案 o该新业务各应用服务推出计划(何时开始提供哪些服务) o该业务的生命周期是否有限?还是可以视为永久业务?(是否考虑项目终值) 三、收益分析(基础情景) o各应用服务的收入模型:定价方式、费率标准以及发展趋势 o各应用服务的收入预测 o各应用服务收入发展规律判断 o其它可量化收益 o其它不可量化收益 o收益发展规律 四、投资分析(基础情景) o项目预可研、可研成本 o试运行阶段的投资(前期勘测、设计费用、建安成本、网络投资、运营成本) o实现该新业务的各项应用需要对现有网络进行哪些建设、改造? o设备、硬件软件系统选型方案或参考方案及造价成本 o系统集成成本 o建安成本 o该些改造的投资规模、计划及资金来源? o该些网络投资的扩容与升级计划? o该些扩容、升级的投资规模、计划及资金来源? o其它需要资本化到该新业务上的投资规模、计划及资金来源? o各项投资的资金支付计划 o投资发展规律 五、运营成本分析(基础情景) o各应用服务提供与合作伙伴间的结算原则及成本 o网络运营维护支持计划及边际网络运营维护成本 o传输计划以及边际传输成本

MFC ListBox控件用法介绍

列表控件可以看作是功能增强的ListBox,它提供了四种风格,而且可以同时显示一列的多中属性值。MFC中使用CListCtrl类来封装列表控件的各种操作。通过调用?BOOLCreate(DWORDdwStyle,constRECT&rect,CWnd*pParentWnd,UINTnID);创建一个窗口,dwStyle中可以使用以下一些列表控件的专用风格: ?LVS_ICONLVS_SMALLICONLVS_LISTLVS_REPORT这四种风格决定控件的外观,同时只可以选择其中一种,分别对应:大图标显示,小图标显示,列表显示,详细报表显示 ?LVS_EDITLABELS结点的显示字符可以被编辑,对于报表风格来讲可编辑的只为第一列。 ?LVS_SHOWSELALWAYS在失去焦点时也显示当前选中的结点 ?LVS_SINGLESEL同时只能选中列表中一项 首先你需要设置列表控件所使用的ImageList,如果你使用大图标显示风格,你就需要以如下形式调用:? CImageList*SetImageList(CImageList*pImageList,LVSIL_NORMAL);? 如果使用其它三种风格显示而不想显示图标你可以不进行任何设置,否则需要以如下形式调用:? CImageList*SetImageList(CImageList*pImageList,LVSIL_SMALL); 通过调用intInsertItem(intnItem,LPCTSTRlpszItem);可以在列表控件中nItem指明位置插入一项,lpszItem为显示字符。除LVS_REPORT风格外其他三种风格都只需

第9章底层开发

第9章底层开发 很多程序往往需要实现和硬件打交道的功能,这种功能特别是对于那些不能开发驱动程序的语言来说,显得特别重要。这时可以采用C或者汇编语言开发一个驱动程序,通过这些程序和驱动程序通信,实现硬件的驱动。 9.1 基于WindowsNT操作系统的端口直接读写 WindowsNT/2000是一个非常出色的操作系统,凭借其安全性、可靠性、稳定性以及良好的人机交互界面,在商业高端操作系统中占据一席之地,成为工业控制计算机首选的操作系统。然而,Windows NT并不是一个实时的操作系统,出于安全稳定性考虑,它禁止用户态的应用程序直接操纵硬件,所有涉及物理内存、磁盘、中断、端口读写的操作,必须通过一个内核态的WDM驱动程序完成,否则就会出现一个特权指令异常的消息,系统提示用户要么终止、要么调试这个出现异常的应用程序。即便用户在WindowsNT的控制台窗口进行端口读写,IO操作要么被忽略,要么被一个叫做VDD 的虚拟设备驱动程序实现,尽管没有出现任何例外,但是用户并没有获得真正的IO口直接读写。通过编写WDM驱动程序,用户态应用程序可以借助与WDM程序的通信(利用CreateFile、CloseHandle、DeviceIOControl),实现IO读写,直接存取硬件。然而,一个CPUIO指令大约只需要30多个指令周期,然而调用驱动程序再要花费6000到12000个时钟周期,这将使系统的实时性和灵敏度大打折扣。端口指令允许所有的80X86CPU与系统中的其他硬件设备通信,从而实现对硬件设备的直接低层次控制。在C语言中提供了类似于汇编语言的端口操作指令,允许用户实现端口的读写。然而在WindowsNT/2000环境下,直接运行这些操作函数,将导致特权指令异常,并给出终止或者调试出错应用程序的选择。如果在WindowsNT/2000控制台窗口中运行16位的DOS应用程序进行端口操作,这时这些IO操作要么被忽略,要么通过WindowsNT/2000虚拟设备驱动程序仿真实现。尽管没有任何异常,但是用户得不到真正的IO操作。这是因为WindowsNT/2000的安全机制不允许用户态的应用程序直接访问硬件,从而摧毁和搞垮WindowsNT/2000无懈可击的稳定性。WindowsNT/2000规定用户态程序所有的IO操作必须借助于DeviceIOControl函数和内核驱动程序进行通信实现,然而和内核的通信势必会造成大量的时钟周期浪费和开销。 WindowsNT/2000只允许内核态的应用程序存取所有端口,对于用户态的程序,它通过设置IOPL实现了对IO操作的屏蔽。为了实现在用户态的直接IO操作,用户必须通过编写驱动程序去掉对读写端口的屏蔽。我们知道WindowsNT实现IO读写保护是有原因的,一方面它使系统异常的稳定,用户再也不必为Windows9x下的蓝屏和异常而苦恼了。用户可以放心大胆地调试应用程序,即便程序出现死锁,系统也会干脆利落地把它杀死,而不会波及到整个系统。IO读写保护与Windows98保护8253定时器端口是一样道理,它的目的就是防止用户使用简单的in/out指令,从而把系统搞垮。但是,对于大量的信号采集的系统而言,应用程序开发人员会更关心系统的实时性,更习惯于在程序中直接使用in/out指令实现信号采集。因此必须打破WindowsNT环境下的IO瓶颈,使得用户态的应用程序拥有IO读写权限,实现实时控制。 弄清楚如何把IO存取权授权给用户态的应用程序,用户必须了解WindowsNT环境下IO保护是如何实现的。WindowsNT本身并不能实现IO保护,由于CPU能够捕捉尝试的IO存取,WindowsNT利用了80x86这一特征。80x86采用了特权级别系统,它总共定义了0、1、2、3四个级别,即我们所说的Ring环。出于对ALPHA平台的兼容性,80x86仅使用了权限最高的Ring0和最低的ring3,CPU的当前运行权限级(CPL)保存在CS代码段寄存器的两位中。IO权限并不是由CPU静态定义的。CPU在处理器的标志寄存器Eflags的某两位定义了当前的IO权限级别(IOPL),通过比较当前的IO权限级和CPU的当前运行权限级,来决定IO指令能否自由使用。由于当前的IO权限级总是大于等于0,因此运行在Ring0环的内核模式的设备驱动程序,总是可以直接对IO端口进行存取。而运行在用户态的应用程序,工作在Ring3环,WindowsNT 把当前的IO权限级设置为0,因此,用户态的程序尝试端口存取时,必须经过保护机制。判断CPL>IOPL,仅仅是保护机制的第一步,I/O保护要么全有,要么全无。处理器采用了更为灵活的机制,使得操作系统能够根据任务的不同,对端口的任何子集进行授权。CPU是采用了一个位屏蔽矩阵(IOPM)实现这一步的。这个矩阵由0,1组成,每一个二进制位对应一个输入输出端口。这样,65536个端口共需要8192个字节,如果某一二进制位值为0,那么程序对该端口的读写就会不加阻拦。当然用户不能对一个只读端口进行写操作,只能对端口进行读操作。位屏蔽矩阵(IOPM)保存在主存的任务状态段结构中,我们可以通过NTOSKRNL库提供的一些内核模式设备驱动例程,实现对该位屏蔽矩阵进行读写,以便对某些端口进行授权。注意这些服务例程,在DDK帮助文档中并没有说明,并不能保证下个版本是否支持。我们可以通过VisualStudio提供的ViewDependcy工具打开windows/system32/driver/videoprt.sys,发现它调用了ntoskrnl.exe中的几个未见文档的服务例程。尽管没有说明,但顾名思义,我们也可以看出这些函数要干什么。 extern"C"{ void Ke386SetIoAccessMap(int,NTPORT*);//复制位图影像到NTPORT结构指针中 //int:1复制缓冲区,0用0xff填充 voidKe386QueryIoAccessMap(int,NTPORT*);//查询当前IOPM void Ke386IoSetAccessProcess(PEPROCESS,int);}}//int:1允许I/O,0禁止I/O PsGetCurrentProcess() //获得当前进程 设备驱动程序的加载是一个非常麻烦的事情。对于一个不是硬件的虚拟设备,用户不得不创建一个安装程序,或者编写一个.inf文件,利用控制面板中的添加新硬件功能,加入一个其它设备,或者直接编辑注册编辑表,把驱动程序复制到WINNT系统目录的Drivers32子目录中,有时还需要用户重新启动计算机。而用户需要的功能仅仅是一次(也许是最后一次)辅助驱动用户的小程序。正因为这个原因,本程序提供了一个设备驱动程序加载工具,实现设备驱动程序的动态加载,用户不用做任何添加新硬件的操作,也不用编辑注册表和重新启动计算机。驱动程序不一定位于系统目录中,但要求和程序提供的NTPORT.dll文件位于同一目录。本程序参考了NumegaDriveStudio提供的loaddrv例子程序。 下面简要介绍一下程序调用的有关API函数。 (1)首先使用OpenSCManager函数与指定服务控制管理器建立联系,打开指定的服务控制管理数据库。 schSCManager=OpenSCManager(NULL,NULL,SC_MANAGER_ALL_ACCESS); (2)利用CreateService函数创建一个服务对象,并把它加入到指定的服务控制管理数据库中。 SC_HANDLEschService=CreateService(SchSCManager,DriverName,DriverName,SERVICE_ALL_ACCESS, SERVICE_KERNEL_DRIVER,SERVICE_DEMAND_START,SERVICE_ERROR_NORMAL,ServiceExe,NULL,NULL,NULL,NULL,NULL); 具体参数请参考MSDN。 (3)用函数StartService启动一个服务,启动前用OpenService打开服务。

相关文档
相关文档 最新文档