编程教学
落单枫叶
嘉善县文化市场行政执法队
展开
-
关于密码的正则表达式
关于密码的正则表达式原创 2022-09-04 22:25:39 · 182 阅读 · 0 评论 -
Blazor Server 的登录与退出(二)
注意:Key要求有一定的长度,建议复制新生成的Guid.NewGuid().ToString();上篇已经实现了登录与退出的主服务类,其他还需要一些具体的东西。1、引用Blazored.LocalStorage包;7、登录Razor组件(略)。注意:需要注册服务。...原创 2022-08-26 11:16:22 · 1936 阅读 · 0 评论 -
Blazor Server 的登录与退出(一)
如果自学Blazor ,因为增加了许多知识点,有许多问题会是一头雾水,难以理清。Blazor Server 的登录与退出就是一个非常难以理清的问题,因为我有强迫症,既然用了Blazor,我难道又要退回去用Razor Page?新建立的Blazor Server程序,使用Identity的个人标识账户,它的登录与退出默认使用的是Razor Page,因为它能非常清晰地得到ClaimsPrincipal 的User,和不支持Razor组件,特别是所以想抛开Razor Page,它的登录与退出只能另想办法,好像一原创 2022-07-08 17:39:46 · 5413 阅读 · 2 评论 -
第十五课代码复用——C#计算器编程教学
新手和老手的区别之一,就是看代码的简洁程度。简洁的办法之一就是代码复用。看着我前面围绕等于写了至少5个方法,其实这其中有方法也由另外的方法调用,这就达到了复用的目的。举个例子,上节课讲到的取反,它的代码就用到了SetCaclLists方法。我不能在caclString上直接取反,那样做代码不是一般的长,也可能不可行。那么怎样实现呢?答案是:收到取反命令,先把已经接收到的输入串也就是cacl原创 2016-05-04 16:04:54 · 513 阅读 · 0 评论 -
第十六课程序的测试和修改——C#计算器编程教学
为了编好这个程序,我点击运行几百次。从中找出的差错满箩筐。可能我写这一节课有点多余,因为大家都会这样做。但是我觉得还是要细说一下。测试程序,首要的目的是检验解决问题思路的正确性,不正确就要及时换思路。其次,检验程序逻辑的正确性,尤其是各种循环代码,它的初始值,它的验证值,以及它是否超出了范围而报错。第三,编程的期望和运行的实际是否相同,是否出现了预期的结果。第四测试用例要想周到,很多错误在于用原创 2016-05-04 16:06:09 · 645 阅读 · 0 评论 -
第十七课预期策略选择——C#计算器编程教学
编程的一个难题是,方法我可以穷尽,但有些结果并非是用户的选择或期望,换个说法,有些表达具有二义性,可以这样,也可以那样,或者因为表达不够完整,因而结果是什么可能也有二义性。那么我们生成哪个结果呢?本程序有很多这样的情况。比如,用户输入了计算式,他再按开根号,你是给他当前项的根号值,还是给算式结果的根号值?用户输入了不完整的算式,你怎样处理?反正这都考验的不是编程能力,而是策略选择能力。一方原创 2016-05-04 16:08:07 · 409 阅读 · 0 评论 -
第十八课程序容错能力——C#计算器编程教学
支持键盘输入,不可控因素增加,必须具有很强的容错能力。一是中文习惯的乘除符号,与键盘及程序语言是不同的,所以,你要在SwitchString方法中添加对键盘乘除符号的支持。二是对错误输入进行过滤。三就是上面说的预期策略选择。四是对计算构造try一catch语句,把出错原因摆在明面上。第十八课结语。允许用户犯错,自己千万别犯错是程序员编程的最高原则。原创 2016-05-04 16:10:54 · 836 阅读 · 0 评论 -
第十九课关于记忆存取——C#计算器编程教学
这个编程其实难度不高,无非就是反算式保存在memoryString里,读取时返回给caclString。如果增加点功能,无非就是把记忆的算式添加到新算式上。比如: private void MemoryRecall() { if (HaveMemory) { if (isOPA原创 2016-05-04 16:13:40 · 1143 阅读 · 0 评论 -
C#计算器编程教学课程前言
最近完成C#计算器编程,模仿WIN7的基本型,但有所超越。除了完成90%的功能,还添加了多项式,支持键盘输入,算式保留,根据中国人习惯作了改进。程序运用了C#的基本功能,包括接口、绑定、面向对象、事件、字段封装、多种循环、集合操作、操作符重载、string的多种操作等,同时实现先乘除后加减的功能,但还没实现带括号的计算。这次是WinForm的计算器,下次是WPF的。先上图所谓90%原创 2016-05-03 17:19:29 · 665 阅读 · 0 评论 -
第二十课先乘除后加减——C#计算器编程教学
不少人念念不忘四则运算的运算符优先级,而Windows7的计算器基本型也没有实现它。其实根据我的算式运算解决思路,其实就查找有乘除的项,先加好(对象加),然后做加减。代码修改如下: private string RunCaclLists() { for (int i = 0; i < CaclLists.Count; i++)原创 2016-05-04 16:28:21 · 2824 阅读 · 0 评论 -
用C#创建应用程序桌面快捷方式
private void CreateShortcutOnDesktop() { //添加引用 (com->Windows Script Host Object Model),using IWshRuntimeLibrary; String shortcutPath = Path.Combine(Environment.GetFold原创 2018-01-04 12:00:41 · 9264 阅读 · 1 评论 -
使用MvvmLight如何向ViewModel传递参数
MvvmLight是个很好的编程框架,使用方便,但如果不熟练也会有许多难以解决的问题。就比如不知道如何向ViewModel传递参数。在网上也有不少这样的问题,解答往往是使用它提供的Messenger,有方便之处,也有不便之处。比如,我要根据参数来获取数据库数据,那么势必要先做清空,再获取新数据,可能有别的绑定或私有字段进行相应的更改,造成不少麻烦,也有可能弄不好。不同类型的数据使用同一个View,...原创 2018-02-22 17:01:20 · 4062 阅读 · 1 评论 -
第十四课功能键之取反——C#计算器编程教学
编写取反的功能我曾经想换成求阶乘,因为是太麻烦了。我又不得不跟括号打交道。没办法啊,你不这样,算式表示就有问题。然而加上括号,好几个方法说我还没有对括号进行处理的代码,所以遇到括号我会忽略哦!说明一点,本程序没有实现括号功能,但是为了实现取反,在表示上可能有括号(当数字为负),其他的就不是括号的意思,只是表示本项为负数而已。所以因为这个功能,好多代码必须增加判别功能,工作量加得不是一般的大。原创 2016-05-04 16:01:39 · 1848 阅读 · 0 评论 -
第十三课功能键之开根号——C#计算器编程教学
首先说明一点,这里实现的是整个算式结果开根号,而不是输入项数的开根号。所以,先计算,再开根号。代码如下: private void Square() { try { if (noStringAdded) {原创 2016-05-04 15:59:40 · 7054 阅读 · 0 评论 -
第二课用循环简化编程——C#计算器编程教学
上节课讲到,有完整功能版的接口和基本功能的接口。为啥会这样呢?这其实就是为了少写代码,用个循环解决输入的问题。你可以数字1的点击事件是输入1,就是每个按钮做一段程序。这当然没问题。简化版的接口是根据按钮的Text值来判断执行哪个功能,程序原本20多块,可以省略成2块。这里说一下,建立项目和添加控件等基本动作不讲了。实际编程,要多考虑将重复的过程用循环来简化编程。第一步,建立操作类,Ca原创 2016-05-04 11:55:28 · 1167 阅读 · 0 评论 -
第三课输入和显示——C#计算器编程教学
首先完成输入功能。前面讲到了那个语句cacl.EnterString(key);那么,方法EnterString(string str)是必须有的,而且是public。最先想到的循环语句是什么呢?想想界面上的Button的Text,都是不同的,但有只是输入的,有功能键的,所以要有判断,判断的循环有while和switch case,这里当然是swich case了。代码如下:原创 2016-05-04 12:21:59 · 1337 阅读 · 0 评论 -
第四课输入时的细节处理——C#计算器编程教学
第一课中讲到,算式是有规矩的,不能任何输入都作有效输入,所以判断是否有效输入,这是第三课讲到了AddCaclString方法的负责处理。今天就专门讲这个方法。先上代码: private void AddCaclString(bool isDecimal, bool isOP, string str) { if (!isDecimal原创 2016-05-04 15:10:30 · 928 阅读 · 0 评论 -
第五课等于之解决思路——C#计算器编程教学
输入了就要计算,这是计算器的功能要求。本程序要解决多项式的运算,难度不是一般的大,甚至有人怀疑使用了Eval。已经说过了,当然不是这样的。先分析算式特点,我们看到,算式其实是有规律的,一个数字加一个运算符,再加一个数字加一个运算符,如此循环而已。可能最后没有运算符只有数字了。程序员同志,你想到解决办法了没有?这就是一个List啊!所以第一步,设计List泛型的原型是当务之急。原型其原创 2016-05-04 15:15:20 · 593 阅读 · 0 评论 -
第六课等于之对象相加——C#计算器编程教学
到第五课为止,只是解决了思路问题。具体办法还要多想想。List是一个集合,集合里面是对象,对象之间怎么运算?答案是:操作符重载。这里当然是+重载。代码如下: public static CaclList operator +(CaclList a, CaclList b) { string result = "";原创 2016-05-04 15:18:44 · 895 阅读 · 0 评论 -
第七课等于之算式还原——C#计算器编程教学
导入了List集合,它是一个个对象,本程序还用到了算式还原,熟悉C#编程的朋友一定知道类里可以重写ToString方法,这里就用到了这个方法。代码如下: public override string ToString() { string op = ""; switch (TypeOp)原创 2016-05-04 15:25:18 · 561 阅读 · 0 评论 -
第八课等于之集合对象的操作——C#计算器编程教学
在Cacl类中,添加集合字段:IList caclLists = new List();或者可以这样写,以保证对象不为空: private IList caclLists; private IList CaclLists { get { if (caclList原创 2016-05-04 15:33:44 · 445 阅读 · 0 评论 -
第九课等于之关键调用——C#计算器编程教学
前几节课围绕等于花了很多心思,但这不是白花的,这是计算器的根本功能!但心思还没花完,只是构建了可以生成操作的集合方法,可以并非真的生成了,关键如何调用,今天就说说这个。真的生成可以操作的集合,先取名。取好方法、属性、事件、结构等名称是基本功和良好习惯,可以少很多说明文档。我把生成集合的方法命名为SetCaclLists()。生成集合,作为程序员,应先想到初始化生成环境,这是基本要求原创 2016-05-04 15:36:50 · 481 阅读 · 0 评论 -
第十课等于之调用关键调用——C#计算器编程教学
操作集合生成方法加调用生成方法,还没有真的进行等于操作。这节课就是本程序的“等于”的代码如何写?先期做了很多基本功,都是围绕它来做的基础工作。完成了基础工作,总体工作就容易多了,不就是再次调用吗?不全对。你考虑过计算吗?还有一个计算方法,这是核心!集合真的生成了,接着其实就是通过集合进行计算。所以等于之前还有个计算方法。计算方法代码: private string原创 2016-05-04 15:43:22 · 394 阅读 · 0 评论 -
第十一课私有变量——C#计算器编程教学
前几节讲到了7个私有变量,分别是:private int i = 0;private IList caclLists = new List();private string caclString = "";private string result;private bool haveDecimal = false;private bool noStringAdded = true;原创 2016-05-04 15:46:57 · 582 阅读 · 0 评论 -
第十二课通知界面变更接口——C#计算器编程教学
前面说了,这个接口微软的FrameWork库里的名称叫INotifyPropertyChanged,在System.ComponentModel名称空间里。前面也说过了,CaclString属性实现了这个接口,你们是否举一反三,Result属性也实现了这个接口呢?没有?那你的学习能力有问题。(哈)凡是要和界面打交道的公有属性必须实现这个接口,这是我说过的界面和程序编写分离的编程模式的要求。原创 2016-05-04 15:56:36 · 490 阅读 · 0 评论 -
第一课程序框架的构建——C#计算器编程教学
程序再小,它也要运行的相关功能要求,或者还有扩展需求。比如,算式中有括号怎么办?你们不要被图片中的括号诱导,其实我没实现算式中有括号的功能,那只是取反。 选择了项目,当然第一步是确定功能需求。本计算器是模仿Win7的基本型,这上面的每一个按钮基本可代表一个功能,分析也简单,英语单词不会查百度。主要功能其实是三个,输入、输出和记忆,也可以考虑可扩展等因素,编写完整实现功能暴露。原创 2016-05-04 08:52:59 · 1079 阅读 · 0 评论