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

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. 最大流sap

    带当前弧优化 gap优化的sap 甚至省去了开始的bfs分层 虽然花了一些时间了解原理 但是感觉不亏 现在能完全独立靠原理写出具体实现了 #include<cstdio> #include ...

  2. Java中的字符串截取(substring)的使用

    import java.util.*; public class ZiFu { public static void main(String args[]){ System.out.println(& ...

  3. raycast 一小段距离碰撞到的poly

    dtNavMeshQuery::raycast(dtPolyRef startRef, const float* startPos, const float* endPos, const dtQuer ...

  4. LeetCode 871 - 最低加油次数 - [贪心+优先队列]

    汽车从起点出发驶向目的地,该目的地位于出发位置东面 target 英里处. 沿途有加油站,每个 station[i] 代表一个加油站,它位于出发位置东面 station[i][0] 英里处,并且有 s ...

  5. Codeforces 1154D - Walking Robot - [贪心]

    题目链接:https://codeforces.com/contest/1154/problem/D 题解: 贪心思路,没有太阳的时候,优先用可充电电池走,万不得已才用普通电池走.有太阳的时候,如果可 ...

  6. 校园服务nabcd需求分析

    我们的团队是敲啥都队 口号是敲啥都队敲啥都对 1.你的创意解决了用户的什么需求?(N) 我们校园服务1主要为了节省学生所浪费的没必要的时间.当你还是大一新生的时候,你是否对大学的规划一无所知,你是否迷 ...

  7. 源码编译vim

    目录 获取最新版 vim 源码 1 git仓库clone 2, 源码包下载,里面有各个版本的vim压缩包 vim 配置选项 配置示例 参考文章 tip 获取最新版 vim 源码 1 git仓库clon ...

  8. java script基本数据类型与数组

    基本数据类型 1.undefined  (var a;) 2.null   (var a=null); 3.String  (var a=" " or ' '); 4.boolea ...

  9. asp.net 使用rabbitmq事例

    本例asp.net 使用rabbitmq需求背景:为了提升用户体验,用户点击下单按钮,后台先做一些简单必要的操作,返回给用户一个友好提示(比如提示处理中,或者订单状态为处理中),然后发通过发消息给队列 ...

  10. jsp的环境搭建

    JSP : 动态网页 一.静态和动态的区别: 1.是否会随着时间.地点.用户操作的改变而改变. 2.动态网页需要使用服务器端的脚本语言(JSP) 二.BS CS 1.CS:QQ.微信.CS游戏. 缺点 ...