A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© nooooy 中级黑马   /  2013-8-25 12:21  /  1957 人查看  /  8 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

最近看书时,碰到这样一个题,计算出1999年5月10日到2006年3月8日期间一共有多少天? 根据书上的思路,该题的模型是【用户输入两个日期】-----【程序】-----【输出两个日期间的天数】。但是对于面向对象中的一些概念的模糊,写着写着,就写成了面向过程。。。始终不知道该怎么样能使程序封装起来,并且相互之间能够随意调用。希望有人能帮忙指点一下,对了,不能用系统的DateTime.

评分

参与人数 1技术分 +1 收起 理由
赵宗荣 + 1

查看全部评分

8 个回复

倒序浏览
namespace 日期问题
{
    class Program
    {
       public static  int[] yue = new int[13];
        static void Main(string[] args)
        {
            //计算出1999年5月10日到2006年3月8日期间一共有多少天?
            //【用户输入两个日期】-----【程序】-----【输出两个日期间的天数】。// 1 3 5 7 8 10 12  2 4 6
            Console.WriteLine(闰年(2000));
            
            月();
            Console .WriteLine ( 天(12));
      

           
            Console.ReadKey();

        }
       static string  闰年(int s )
         {
             string result;
             if (s % 400 == 0 || (s / 100 != 0 && s / 4 == 0))
             {
                 result = "是闰年";

             }
             else
             {
                 result = "不是闰年";
             }
             return result;

         }
        static void  月()
        {

            int[] dayue = { 1, 3, 5, 7, 8, 10, 12 };
            int[] xiaoyue = { 4, 6, 9, 11 };
            int[] eryue = { 2 };
            for (int i = 0; i < dayue.Length; i++)
            {
                yue[dayue[i]] = 1;
            }
            for (int i = 0; i < xiaoyue.Length; i++)
            {
                yue[xiaoyue[i]] = 2;
            }
            for (int i = 0; i < eryue.Length; i++)
            {
                yue[eryue[i]] = 3;
            }
           
            

           
            
        }
        static string  天( int s )
        {
            string result="";
                switch (yue[s])
                {
                    case 1:
                        result = "31天";
                        break;
                    case 2:
                        result = "30天";
                        break;
                    case 3:
                        result = "28天";
                        break;

                }
                return result;
            }

         
           

        
            
        

         
    }
}
到这还没错 还在想。。。加IF在想怎么加

评分

参与人数 1技术分 +1 收起 理由
赵宗荣 + 1

查看全部评分

回复 使用道具 举报
public static int[] yue = new int[13];
        static void Main(string[] args)
        {
            //计算出1999年5月10日到2006年3月8日期间一共有多少天?
            //【用户输入两个日期】-----【程序】-----【输出两个日期间的天数】。// 1 3 5 7 8 10 12  2 4 6
            Console.WriteLine(闰年(2000));

            月();
            Console.WriteLine(天(2000,2));
            Console.ReadKey();

        }
        static string 闰年(int s)
        {
            string result;
            if (s % 400 == 0 || (s / 100 != 0 && s / 4 == 0))
            {
                result = "闰年";

            }
            else
            {
                result = "不是闰年";
            }
            return result;

        }
        static void 月()
        {

            int[] dayue = { 1, 3, 5, 7, 8, 10, 12 };
            int[] xiaoyue = { 4, 6, 9, 11 };
            int[] eryue = { 2 };
            for (int i = 0; i < dayue.Length; i++)
            {
                yue[dayue[i]] = 1;
            }
            for (int i = 0; i < xiaoyue.Length; i++)
            {
                yue[xiaoyue[i]] = 2;
            }
            for (int i = 0; i < eryue.Length; i++)
            {
                yue[eryue[i]] = 3;
            }





        }
        static string 天(int v ,int s)
        {
            string result = 闰年(v);
            if (result == "闰年")
            {
                switch (yue[s])
                {
                    case 1:
                        result = "31天";
                        break;
                    case 2:
                        result = "30天";
                        break;
                    case 3:
                        result = "29天";
                        break;

                }

                return result;
            }
            else
            {
                switch (yue[s])
                {
                    case 1:
                        result = "31天";
                        break;
                    case 2:
                        result = "30天";
                        break;
                    case 3:
                        result = "28天";
                        break;

                }
                return result;
            } 聊天哇 白天在接着想 是你想要的那种不?
回复 使用道具 举报
  1. using System;
  2. using System.Collections.Generic;
  3. using System.Linq;
  4. using System.Text;
  5. using System.Text.RegularExpressions;

  6. namespace test5
  7. {
  8.     class Program
  9.     {
  10.         //得到字符串中的年
  11.         static int GetYear(string str)
  12.         {
  13.             List<int> list = new List<int>();
  14.             MatchCollection match1 = Regex.Matches(str, @"\d+");
  15.             foreach (Match item in match1)
  16.             {
  17.                 list.Add(Convert.ToInt32(item.Value));
  18.             }
  19.             return list[0];
  20.         }
  21.         //得到字符串中的月
  22.         static int GetMonth(string str)
  23.         {
  24.             List<int> list = new List<int>();
  25.             MatchCollection match1 = Regex.Matches(str, @"\d+");
  26.             foreach (Match item in match1)
  27.             {
  28.                 list.Add(Convert.ToInt32(item.Value));
  29.             }
  30.             return list[1];
  31.         }
  32.         //得到字符串中的天
  33.         static int GetDay(string str)
  34.         {
  35.             List<int> list = new List<int>();
  36.             MatchCollection match1 = Regex.Matches(str, @"\d+");
  37.             foreach (Match item in match1)
  38.             {
  39.                 list.Add(Convert.ToInt32(item.Value));
  40.             }
  41.             return list[2];
  42.         }
  43.         //判断是否是闰年
  44.         static bool IsYear(int num)
  45.         {
  46.             if (num % 400 == 0 || (num % 4 == 0 && num % 100 != 0))
  47.             {
  48.                 return true;
  49.             }
  50.             return false;
  51.         }
  52.         //得到当前年份的天数
  53.         static int Days(int year, int month, int day)
  54.         {
  55.             bool flag = IsYear(year);
  56.             int days = day;
  57.             for (int i = 1; i <= month; i++)
  58.             {
  59.                 switch (i-1)
  60.                 {
  61.                     case 1:
  62.                     case 3:
  63.                     case 5:
  64.                     case 7:
  65.                     case 8:
  66.                     case 10:
  67.                     case 12:
  68.                         days = days + 31;
  69.                         break;
  70.                     case 4:
  71.                     case 6:
  72.                     case 9:
  73.                     case 11:
  74.                         days = days + 30;
  75.                         break;
  76.                     case 2:
  77.                         if (flag == true)
  78.                         {
  79.                             days = days + 29;
  80.                         }
  81.                         days = days + 28;
  82.                         break;
  83.                 }
  84.             }
  85.             return days;
  86.         }        
  87.         static void Main(string[] args)
  88.         {
  89.             string str1 = "1999年5月10日";
  90.             string str2 = "2006年3月8日";
  91.             int days=0;
  92.             int startYear = GetYear(str1);
  93.             int endYear = GetYear(str2);
  94.             //得到年份之间的天数
  95.             for (var i = startYear+1; i < endYear; i++)
  96.             {
  97.                 bool flag = IsYear(i);
  98.                 if (flag == true)
  99.                 {
  100.                     days = days + 365;
  101.                 }
  102.                 else
  103.                 {
  104.                     days = days + 366;
  105.                 }
  106.             }
  107.             days =days+ Days(GetYear(str2), GetMonth(str2), GetDay(str2)) - Days(GetYear(str1), GetMonth(str1), GetDay(str1));
  108.             Console.WriteLine("{0}到{1}之间一共有{2}天",str1,str2,days);
  109.             Console.ReadKey();
  110.         }
  111.     }
  112. }
复制代码

点评

受教啦,里面有很多我要学习的东西啊,谢咯  发表于 2013-8-26 12:42
回复 使用道具 举报
天涯浪子 发表于 2013-8-26 04:56
public static int[] yue = new int[13];
        static void Main(string[] args)
        {

感觉你写的封装的还不是很完整。。{:soso_e127:} 给你提供个模块。你试试。。
  1. //封装日期信息
  2. public struct MyDate
  3. {
  4. public int Year; //年
  5. public int Month; //月
  6. public int Day; //日
  7. }
  8. //计算两个日期中的整天数

  9. static int CalculateDaysOfTwoDate(MyDate beginDate, MyDate endDate)
  10. {


  11. //…

  12. }
  13. //计算两年之间的整年天数,不足一年的去掉
  14. static int CalculateDaysOfTwoYear(int beginYear, int endYear)
  15. {


  16. //…
  17. }
  18. //根据两个日期,计算出这两个日期之间的天数,忽略中间的整年
  19. static int CalculateDaysOfTwoMonth(MyDate beginDate, MyDate endDate)
  20. {


  21. //…
  22. }
  23. //根据年数判断其是否为闰年
  24. static bool IsLeapYear(int year)
  25. {

  26. //…

  27. }
复制代码

评分

参与人数 1技术分 +1 收起 理由
赵宗荣 + 1 赶快参加入学考试吧

查看全部评分

回复 使用道具 举报
nooooy 发表于 2013-8-26 12:30
感觉你写的封装的还不是很完整。。 给你提供个模块。你试试。。 ...

想不到勒  if (time2[1] - time1[1] >= 0 && time2[2] - time1[2] >= 0)
              {
                  
                   p1=(time2 [0]-time1 [0])*12;
                   p11 = 12 - time1[1]+1;
                   p12 = time2[1]-1;
                   p = p1 + p11 + p12;
                  
              }
            else
              {
                   p1=(time2 [0]-time1 [0]-1)*12;
                   p11 = 12 - time1[1]+1;
                   p12 = time2[1]-1;
                   p = p1 + p11 + p12;
              }
              Console.WriteLine("一共有多少个{0}",p );
            int [] s=new int [p];
我想把那84个月存进去啊 我不知道该怎么样才可以存进去 我不懂什么封装 只是这么想的 哎
回复 使用道具 举报

if (time2[1] - time1[1] >= 0 && time2[2] - time1[2] >= 0)
              {
                  
                   p1=(time2 [0]-time1 [0])*12;
                   p11 = 12 - time1[1]+1;
                   p12 = time2[1]-1;
                   p = p1 + p11 + p12;
                  
              }
            else
              {
                   p1=(time2 [0]-time1 [0]-1)*12;
                   p11 = 12 - time1[1]+1;
                   p12 = time2[1]-1;
                   p = p1 + p11 + p12;
              }
              Console.WriteLine("一共有多少个{0}",p );
            int [] s=new int [p];
我想把那84个月 存进那个数组里去 可以存进去吗 可以存的话怎么存 我完全想不到勒 就卡这了
回复 使用道具 举报
晕 我终于把那题做完勒 纠结 你先把程序写好 在换成方法调用啊  这样就OK勒
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马