【JAVA 课程设计 之 万年历】「建议收藏」

距离2017年还有30多个小时~转眼间2016只剩一个尾巴了,大学生活也过了快一半了,自己却依旧那么笨手笨脚,不会的知识永远那么多,该看的书永远没机会去看,2017愿一切如昨天抽的签:远方不一定有诗,但有更好的自己~明天你好,请多关照~2017希望我的家人们,小伙伴们,以及所有帮助过我的朋友们都能健健康康,万事如意~Java课设远没有自己想的难,万年历,不用做显示面~也算2016JAVA的最后一

大家好,又见面了,我是你们的朋友全栈君。

万年历:输入要查看的年份,输出该年份的日历

实现代码:

package CJF;

import java.util.*;

public class ks {

	public static void main(String[] args) {
          int x = 3,n,m,y,r,k;
          System.out.println("******您好,2016年华人款万年历,枫枫为您服务******");
          System.out.println("**********************请输入查找年份********");
          System.out.println();
          Scanner input = new Scanner(System.in);
          n = input.nextInt(); 
          int cut = 365 * 3 + 366;
          if(n >= 1997){
        	  m = n - 1997;
        	  int a = m / 4;
        	  int b = m % 4;
        	  x = (x + cut * a + b * 365) % 7;
          }
          else{
        	  m = 1996 - n;
        	  x =(366 - x + 2) % 7; // 先转换为1996年为基准年份
        	  int a = m / 4;
        	  int b = m % 4;
        	  cut = (cut * a + b * 365) % 7;
        	  x = (x - cut + 7) % 7; 

          }
          if(x == 0) x = 7;
          for(y = 1 ; y <= 12 ; y++){
            	  if(y == 1 || y == 3 || y == 5 || y == 7 || y == 8 || y == 10 || y == 12)
            		  k = 31;
            	  else if(y == 2){
            		  if(n % 400 == 0 || (n % 4 == 0 && n % 100 != 0))
            			  k = 29;
            		  else 
            			  k = 28;
            	  }
            	  else
            		  k = 30;
            	  System.out.println();
            	  System.out.println("********** " + n + " 年  " + y + " 月  " + "**********");
            	  System.out.println("Mon  Tue  Wen  Thu  Fri  Sat  Sun");
            	  for(int i = 1 ; i < x ; i++)
            		  System.out.print("     ");
            	  for(r = 1; r <= k; r++,x++){
            		  if(r <= 9)
            		      System.out.print(r + "    ");
            		  else
            			  System.out.print(r + "   ");
            		  if(x % 7 == 0){
            			  System.out.println();
            		      x = 0;
            		  }
            	  }
            	  System.out.println();
              }
          System.out.println("******本次服务到处结束,枫枫期待与您的下次会面******");
          }
	}

对JAVA来讲一个main方法写下了总感觉不太合适,把代码格式稍微改下层次和结构更清晰了点~

实现代码:

package CJF;

import java.util.*;

public class ks {

    public static void main(String[] args) {
          System.out.println("******您好,2016年华人款万年历,枫枫为您服务******");
          System.out.println("**********************请输入查找年份********");
          System.out.println();
          Scanner input = new Scanner(System.in);
          int n = input.nextInt(); 
          int x = Nf(n); // 确认该年第一天是星期几
          if(x == 0) x = 7;
          for(int y = 1 ; y <= 12 ; y++){
              int k = Yf(n,y); // 判断该年该月有多少天
                  System.out.println();
                  System.out.println("********** " + n + " 年  " + y + " 月  " + "**********");
                  System.out.println("Mon  Tue  Wen  Thu  Fri  Sat  Sun");
                  x = R(x,k); // 调整日的输出格式
              }
          System.out.println("******本次服务到处结束,枫枫期待与您的下次会面******");
    }
    public static int Nf(int n){ // 确认该年第一天是星期几
        int m,x = 3;
        int cut = 365 * 3 + 366;
        if(n >= 1997){
            m = n - 1997;
            int a = m / 4;
            int b = m % 4;
            x = (x + cut * a + b * 365) % 7;
        }
        else{
            m = 1996 - n;
            x =(366 - x + 2) % 7; // 先转换为1996年为基准年份
            int a = m / 4;
            int b = m % 4;
            cut = (cut * a + b * 365) % 7;
            x = (x - cut + 7) % 7; 
        }
        return x;
    }
    public static int Yf(int n,int y){ // 判断该年该月有多少天
        int k = 0;
            if(y == 1 || y == 3 || y == 5 || y == 7 || y == 8 || y == 10 || y == 12)
                k = 31;
            else if(y == 2){
                if(n % 400 == 0 || (n % 4 == 0 && n % 100 != 0))
                    k = 29;
                else 
                    k = 28;
            }
            else
                k = 30;
        return k;
    }
    public static int R(int x,int k){ // 调整日的输出格式
        for(int i = 1 ; i < x ; i++)
            System.out.print("     ");
        for(int r = 1; r <= k; r++,x++){
            if(r <= 9)
                System.out.print(r + "    ");
            else
                System.out.print(r + "   ");
            if(x % 7 == 0){
                System.out.println();
                x = 0;
            }
        }
        System.out.println();
        if(x == 0) x = 7;
        return x;
    }
}
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/127925.html原文链接:https://javaforall.net

(0)
上一篇 2022年4月10日 下午9:00
下一篇 2022年4月10日 下午9:20


相关推荐

  • java.lang.NoSuchMethodException异常解决

    java.lang.NoSuchMethodException异常解决首先 这个错误必然是运行期间的 网上说了一堆 检查类有没有这个方法 我觉得都是废话 没有这个方法 能通过编译 下面我分享一个我项目运行报错 java lang NoSuchMethod 情景第一 我保证自己项目绝对有这个类和这个方法 且有一个 第二 其他什么形参也都正确 从服务器拿包下来 反编译 class 文件也都没问题 阿 这 反复打包反复发布到生产都不行 但是奇葩的是 测试环境并没有报错 于是玄学了一天 本来完全肯定是有同包同名的另一个 class 类存在 而这个类没有我要得方

    2026年3月16日
    2
  • 夜深人静写算法(四十三)- 线段树

    夜深人静写算法(四十三)- 线段树线段树 对数时间完成更新 查询的数据结构

    2026年3月26日
    2
  • 关于微软应用商店无法联网 错误代码:0x80072EFD的问题终于解决了

    关于微软应用商店无法联网 错误代码:0x80072EFD的问题终于解决了关于微软应用商店无法联网错误代码 0x80072EFD 的问题 系统更新也显示错误 更新服务都是开启的 就是不能更新 折腾了两天试了百度很多方法 一 修改 dns 无效 二清理商店缓存 wsreset 无效 重新安装商店 重置商店都无效 三 用抓包软件 Fiddler 修改无效 因为看到网上说用过代理就出这个错误代码 四 还原 internet 高级设置无效 五重置 IE 无效 六 修改国家区域无效 七 覆盖安装系统无效 后来用微软更新修复脚本报错搜索报错代码关键词偶然发现的这个方法搞定 以前一直搜的是 0x8

    2026年3月17日
    1
  • pycharm最新激活码2021【2021.8最新】

    (pycharm最新激活码2021)好多小伙伴总是说激活码老是失效,太麻烦,关注/收藏全栈君太难教程,2021永久激活的方法等着你。IntelliJ2021最新激活注册码,破解教程可免费永久激活,亲测有效,下面是详细链接哦~https://javaforall.net/100143.htmlS32PGH0SQB-eyJsaWNlbnNlSW…

    2022年3月26日
    49
  • matlab中随机矩阵函数,matlab怎么生成随机矩阵 Matlab如何生成随机矩阵?

    matlab中随机矩阵函数,matlab怎么生成随机矩阵 Matlab如何生成随机矩阵?matlab 中怎么产生一个随机矩阵 matlab 中通过 rand 函数产生的是介于 0 到 1 不包括 1 之间的伪随机数 更多信息请在 matlab 命令窗口输入 helprand 获得帮助信息 用法 1 rand n 表示产生一个 n n 的随机矩阵 n 必须是整数 否则会报错 2 rand m n 或 rand mn 产生 m n 均匀分布的随机矩阵 元素取值在 0 0 1 0 3 X rand 1 10 产生 10 个

    2026年3月18日
    1
  • C面试题整理(带答案)

    C面试题整理(带答案)C 面试题整理 带答案 1 维护数据库的完整性 一致性 你喜欢用触发器还是自写业务逻辑 为什么 答 尽可能用约束 包括 CHECK 主键 唯一键 外键 非空字段 实现 这种方式的效率最好 其次用触发器 这种方式可以保证无论何种业务系统访问数据库都能维持数据库的完整性 一致性 最后再考虑用自写业务逻辑实现 但这种方式效率最低 编程最复杂 当为下下之策 2 什么是事务 什么是锁 答 事务

    2026年3月27日
    2

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号