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

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. springboot/Mybatis整合

    正题 本项目使用的环境: 开发工具:Intellij IDEA 2017.1.3 springboot: 1.5.6 jdk:1.8.0_161 maven:3.3.9 额外功能 PageHelper ...

  2. SQLSERVER 聚集一个表的字段2008及以后,要求支持XML

    将以下代码中的TABLE_NAME替换成所需表名称即可. 注意 declare 和set 语句后面不要有 :否则可能执行不成功 declare @S_Column varchar(8000)set @ ...

  3. windows redis 自动启动

    start.bat D: D:\dev\redis- redis-server.exe redis.conf redis.vbs createobject( 之后,把 start.bat 放在redi ...

  4. 2018-2019-2 网络对抗技术 20165225 Exp4 恶意代码分析

    2018-2019-2 网络对抗技术 20165225 Exp4 恶意代码分析 实践目标 1.1是监控你自己系统的运行状态,看有没有可疑的程序在运行. 1.2是分析一个恶意软件,就分析Exp2或Exp ...

  5. 如何彻底禁止win10易升更新(转)

    原文:https://blog.csdn.net/qq_33075489/article/details/79755896 add by zhj: 第二步是我自己加的 Win10版本:家庭中文版64位 ...

  6. linux系统运维命令

    1.动态查看网卡流量  sar -n DEV 1 2.查看当前网卡的buffer size情况 ethtool -g eth0 3.修改当前网卡的buffer size ethtool -G eth0 ...

  7. jsp的环境搭建

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

  8. C# DataGridView改变行颜色无效问题

    有一个需求是DataGridView中不符合要求的行变为红色,这网上查到的代码是 Row.DefaultCellStyle.BackColor = Color.Red;即可 但是写完之后发现不起作用 ...

  9. python编写shell脚本

    模块 os模块和shutil模块主要用于在python中执行一些Linux相关的操作,其中 os.system(command) 可以直接运行Linux命令,如os.system('ls'). 不过, ...

  10. 搭建MHA测试

    搭建MHA:  手工切换:  masterha_master_switch --conf=/etc/masterha/app1.cnf --master_state=alive --new_maste ...