饮水思源:金老师的自学网站

1、编写一个简单的控制台程序。

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks; namespace ConsoleApp1
{
class Program
{
static void Main(string[] args)
{
Console.Title = "my title" + DateTime.Now;
Console.ForegroundColor = System.ConsoleColor.DarkGreen;
Console.BackgroundColor = System.ConsoleColor.White; Console.WriteLine("Hello worldd 2019-04-28"); String userinput = Console.ReadLine();
Console.WriteLine("{0}这是两个占位符号{1}", userinput, userinput.Length); Console.Beep();
Console.ReadKey(); // ReadKey是Console类的另一个方法,用于接收按键
Console.ReadKey(true); // 添加true参数不回显所接收按键 // 生成的.exe文件可运行在任何具有相应版本.NET的计算机上
}
}
}

2、日期计算的结构化编程实现

结构化编程一般设计步骤:

  1. 先设计数据结构。
  2. 基于数据结构确定算法。简单的情形是,将人的计算方法转化为计算机算法,每个算法步骤用一个函数实现。
  3. 进一步细化与调整方案
  4. 将整体装配成一个函数,得到最终设计方案

PPT截图:

开发时,依据依赖关系由下至上。通常情况,避免跨层调用。

namespace CalculateDaysForSP
{
//封装日期信息
public struct MyDate
{
public int Year; //年
public int Month; //月
public int Day; //日
} }

MyDate.cs

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks; namespace CalculateDaysForSP
{
class Program
{
//存放每月天数,第一个元素为0是因为数组下标从0起,而我们希望按月份直接获取天数
static int[] months = { , , , , , , , , , , , , }; static void Main(string[] args)
{
MyDate d1, d2; //起始日期和结束日期
//1999年5月10日
d1.Year = ;
d1.Month = ;
d1.Day = ;
//2006年3月8日
d2.Year = ;
d2.Month = ;
d2.Day = ;
//计算结果
int days = CalculateDaysOfTwoDate(d1, d2); string str = "{0}年{1}月{2}日到{3}年{4}月{5}日共有天数:";
str = String.Format(str, d1.Year, d1.Month, d1.Day, d2.Year, d2.Month, d2.Day);
Console.WriteLine(str + days); //暂停,敲任意键结束
Console.ReadKey();
} //计算两个日期中的整天数
static int CalculateDaysOfTwoDate(MyDate beginDate, MyDate endDate)
{
int days = ;
days = CalculateDaysOfTwoYear(beginDate.Year, endDate.Year);
if (beginDate.Year == endDate.Year) days += CalculateDaysOfTwoMonth(beginDate, endDate, true);
else
days += CalculateDaysOfTwoMonth(beginDate, endDate, false); return days;
} //计算两年之间的整年天数,不足一年的去掉
static int CalculateDaysOfTwoYear(int beginYear, int endYear)
{
int days = ;
for (int i = beginYear + ; i <= endYear - ; i++)
{
if (IsLeapYear(i))
days += ;
else
days += ;
}
return days;
} //根据两个日期,计算出这两个日期之间的天数
static int CalculateDaysOfTwoMonth(MyDate beginDate, MyDate endDate, bool IsInOneYear)
{
int days = ;
//对于同一月,天数直接相减
if (beginDate.Month == endDate.Month)
if (IsInOneYear)
return endDate.Day - beginDate.Day;
else
if (IsLeapYear(beginDate.Year))
return + (endDate.Day - beginDate.Day);
else
return + (endDate.Day - beginDate.Day); //不同月
int i = ;
if (IsInOneYear)
{
//同一年
for (i = beginDate.Month; i <= endDate.Month; i++)
{
days += months[i];
//处理闰二月
if ((IsLeapYear(beginDate.Year) && (i == )))
days += ;
} //减去月初到起始日的天数
days -= beginDate.Day;
//减去结束日到月底的天数
days -= months[endDate.Month] - endDate.Day;
}
else
{
//不同年
//计算到年底的天数
for (i = beginDate.Month; i <= ; i++)
days += months[i]; //减去月初到起始日的天数
days -= beginDate.Day;
//从年初到结束月的天数
for (i = ; i <= endDate.Month; i++)
days += months[i]; //减去结束日到月底的天数
days -= months[endDate.Month] - endDate.Day;
}
return days;
} //根据年数判断其是否为闰年
static bool IsLeapYear(int year)
{
//如果年数能被400整除,是闰年
if (year % == )
{
return true;
}
//能被4整除,但不能被100整除,是闰年
if (year % == && year % != )
{
return true;
}
//其他情况,是平年
return false;
}
}
}

Program.cs

3、日期计算机面向对象编程实现

MyDate.cs同上,但命名空间改为CalculateDaysForOO

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks; namespace CalculateDaysForOO
{
/// <summary>
/// 用于完成日期计算
/// </summary>
public class DateCalculator
{ //存放每月天数,第一个元素为0是因为数组下标从0起,而我们希望按月份直接获取天数
private int[] months = { , , , , , , , , , , , , }; //计算两个日期中的整天数
public int CalculateDaysOfTwoDate(MyDate beginDate, MyDate endDate)
{
int days = ;
days = CalculateDaysOfTwoYear(beginDate.Year, endDate.Year);
if (beginDate.Year == endDate.Year) days += CalculateDaysOfTwoMonth(beginDate, endDate, true);
else
days += CalculateDaysOfTwoMonth(beginDate, endDate, false); return days;
} //计算两年之间的整年天数,不足一年的去掉
private int CalculateDaysOfTwoYear(int beginYear, int endYear)
{
int days = ;
for (int i = beginYear + ; i <= endYear - ; i++)
{
if (IsLeapYear(i))
days += ;
else
days += ;
}
return days;
} //根据两个日期,计算出这两个日期之间的天数
private int CalculateDaysOfTwoMonth(MyDate beginDate, MyDate endDate, bool IsInOneYear)
{
int days = ;
//对于同一月,天数直接相减
if (beginDate.Month == endDate.Month)
if (IsInOneYear)
return endDate.Day - beginDate.Day;
else
if (IsLeapYear(beginDate.Year))
return + (endDate.Day - beginDate.Day);
else
return + (endDate.Day - beginDate.Day); //不同月
int i;
if (IsInOneYear)
{
//同一年
for (i = beginDate.Month; i <= endDate.Month; i++)
{
days += months[i];
//处理闰二月
if ((IsLeapYear(beginDate.Year) && (i == )))
days += ;
} //减去月初到起始日的天数
days -= beginDate.Day;
//减去结束日到月底的天数
days -= months[endDate.Month] - endDate.Day;
}
else
{
//不同年
//计算到年底的天数
for (i = beginDate.Month; i <= ; i++)
days += months[i]; //减去月初到起始日的天数
days -= beginDate.Day;
//从年初到结束月的天数
for (i = ; i <= endDate.Month; i++)
days += months[i]; //减去结束日到月底的天数
days -= months[endDate.Month] - endDate.Day;
}
return days;
} //根据年数判断其是否为闰年
private bool IsLeapYear(int year)
{
//如果年数能被400整除,是闰年
if (year % == )
{
return true;
}
//能被4整数,但不能被100整除,是闰年
if (year % == && year % != )
{
return true;
}
//其他情况,是平年
return false;
}
}
}

DateCalculator.cs

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks; namespace CalculateDaysForOO
{
class Program
{
static void Main(string[] args)
{
MyDate d1, d2; //起始日期和结束日期 //1999年5月10日
d1.Year = ;
d1.Month = ;
d1.Day = ;
//2006年3月8日
d2.Year = ;
d2.Month = ;
d2.Day = ; string str = "{0}年{1}月{2}日到{3}年{4}月{5}日共有天数:";
str = String.Format(str, d1.Year, d1.Month, d1.Day, d2.Year, d2.Month, d2.Day); //创建类CalculateDate的对象,让变量obj引用它
DateCalculator obj = new DateCalculator();
//调用对象obj的CalculateDaysOfTwoDate方法计算
int days = obj.CalculateDaysOfTwoDate(d1, d2); Console.WriteLine(str + days); //暂停,敲任意键结束
Console.ReadKey();
}
}
}

Program.cs

4、直接应用已有组件

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks; namespace CalculatorDaysUseDotNet
{
class Program
{
static void Main(string[] args)
{
DateTime d1 = new DateTime(, , );
DateTime d2 = new DateTime(, , );
//计算结果
double days = (d2 - d1).TotalDays; string str = "{0}年{1}月{2}日到{3}年{4}月{5}日共有天数:";
str = String.Format(str, d1.Year, d1.Month, d1.Day, d2.Year, d2.Month, d2.Day);
Console.WriteLine(str + days); //暂停,敲任意键结束
Console.ReadKey();
}
}
}

C sharp #001# hello world的更多相关文章

  1. swift 001

    swift 001  = 赋值是没有返回值的 所以 int a=10; int b=20; if(a=b){ printf("这个是错误的"); } swift  中的模运算 是支 ...

  2. 16 On Large-Batch Training for Deep Learning: Generalization Gap and Sharp Minima 1609.04836v1

    Nitish Shirish Keskar, Dheevatsa Mudigere, Jorge Nocedal, Mikhail Smelyanskiy, Ping Tak Peter Tang N ...

  3. [SDK2.2]Windows Azure Virtual Network (4) 创建Web Server 001并添加至Virtual Network

    <Windows Azure Platform 系列文章目录> 在上一章内容中,笔者已经介绍了以下两个内容: 1.创建Virtual Network,并且设置了IP range 2.创建A ...

  4. 《zw版·Halcon-delphi系列原创教程》 Halcon分类函数001·3D函数

    <zw版·Halcon-delphi系列原创教程> Halcon分类函数001·3D函数 为方便阅读,在不影响说明的前提下,笔者对函数进行了简化: :: 用符号“**”,替换:“proce ...

  5. Android 开发错误信息001

    Error:Execution failed for task ':app:dexDebug'. > com.android.ide.common.process.ProcessExceptio ...

  6. python解无忧公主的数学时间编程题001.py

    python解无忧公主的数学时间编程题001.py """ python解无忧公主的数学时间编程题001.py http://mp.weixin.qq.com/s?__b ...

  7. php大力力 [005节] php大力力简单计算器001

    2015-08-22 php大力力005. php大力力简单计算器001: 上网看视频,看了半天,敲击代码,如下: <html> <head> <title>简单计 ...

  8. php大力力 [001节]2015-08-21.php在百度文库的几个基础教程新手上路日记 大力力php 大力同学 2015-08-21 15:28

    php大力力 [001节]2015-08-21.php在百度文库的几个基础教程新手上路日记 大力力php 大力同学 2015-08-21 15:28 话说,嗯嗯,就是我自己说,做事认真要用表格,学习技 ...

  9. Web前端学习笔记(001)

    ....编号    ........类别    ............条目  ................明细....................时间 一.Web前端学习笔记         ...

随机推荐

  1. VS2017 未找到编译器可执行文件 csc.exe

    vs2017 网站报错 原因Web.config是中下面这段:注释就可以了 <!--<system.codedom> <compilers> <compiler l ...

  2. Thymeleaf常用th标签

    https://www.jianshu.com/p/f9ebd23e8da4 关键字 功能介绍 案例 th:id 替换id <input th:id="'xxx' + ${collec ...

  3. USACO Section 1.3 题解 (洛谷OJ P1209 P1444 P3650 P2693)

    usaco ch1.4 sort(d , d + c, [](int a, int b) -> bool { return a > b; }); 生成与过滤 generator&& ...

  4. 实现promise

    // 判断变量否为function  const isFunction = variable => typeof variable === 'function'  // 定义Promise的三种 ...

  5. c# 存储过程取output 值

    DataAccess da = new DataAccess(); da.sqlPath = Config.Get("System", "dataCntString&qu ...

  6. 扩展视图之xpath用法

    在视图扩展中,需要定位扩展字段需要显示的位置,通过xpath来实现定位 odoo 视图函数 在整个项目文件中,结构并不是十分明显,虽然它也遵循MVC设计,类比django的MTV模式,各个模块区分的十 ...

  7. 软件工程第二次作业-VSTS单元测试

    一.选择开发工具 开发工具选择 Visual studio 2017 社区版,开发语言为C 由于之前已经安装完毕,所以不上传安装过程,主界面如下: 二.练习自动单元测试 使用的测试工具是VSTS,具体 ...

  8. 通过Ajax方式上传文件(input file),使用FormData进行Ajax请求

    <script type="text/jscript"> $(function () { $("#btn_uploadimg").click(fun ...

  9. 64IE无法显示网页

    1.碰到如下图情况ie浏览器打开之后显示不了网页,但是试了下电脑上其他的浏览器都可以正常的打开网页. 2.解决办法为:打开浏览器-选择“工具”-“Internet选项”-“高级”-重置,重启浏览器后能 ...

  10. Linux协议栈-netfilter-conntrack

    原文连接:https://blog.csdn.net/jasonchen_gbd/article/details/44874321?utm_source=blogxgwz8