万年历系统源代码
JAVA课程设计 万年历 源代码
增加测试 案例,提 高代码稳 定性和可 靠性
增加文档 和注释, 提高代码 的可理解 性和可维 护性
随着科技的发展,万年 历的应用将更加广泛, 如智能家居、智能穿戴 设备等。
万年历可以与其他应用 相结合,如天气预报、 日程管理等,为用户提 供更全面的服务。
万年历可以结合大数据和 人工智能技术,为用户提 供个性化的服务,如根据 用户的习惯和喜好推荐相 关的信息。
测试用例设计:根据 需求文档和功能描述, 设计出能够覆盖所有 功能的测试用例
测试工具:使用JUnit 等测试框架进行单元 测试,使用Selenium 等工具进行UI测试
测试结果分析:根 据测试结果,分析 代码存在的问题, 并进行修改和优化
集成测试:验证各个模块之间的接口是否正确,数据传输是否正常 性能测试:测试系统的响应时间、吞吐量、资源利用率等性能指标
询本月的所有事件
提醒功能:系统会在事件开始 前自动提醒用户,如生日提醒、
纪念日提醒等
导出/导入功能:用户可以将事 件列表导出为文件,也可以从 文件中导入事件列表
功能描述:用户可以设置事件提醒,系统会在指定时间提醒用户
实现方法:使用Java中的Calendar类获取当前时间和指定时间,比较两者是否相等
提醒功能:用户可以设置提醒功能,在节日或假期到来之前,系统会自动提醒用户。
删除事件:用户可以删除不 再需要的事件
JAVA《万年历系统》课程设计报告附源码
2013-2014学年第二学期《面向对象程序设计》
课程设计报告
题目:万年历系统
专业:计算机科学与技术
班级:
姓名:
学号:
指导教师:
成绩:
计算机与信息工程系
2014年6月6日
目录
1 设计内容及要求 (1)
1.1设计内容 (1)
1.2设计任务及具体要求 (1)
2 概要设计 (2)
2.1程序设计思路 (2)
2.2 总体程序框图 (3)
3 设计过程或程序代码 (4)
3.1各个模块的程序流程图及运行界面 (4)
3.2对关键代码加以分析说明 (7)
4 设计结果与分析 (13)
4.1程序调试的结果 (13)
4.2程序设计分析 (13)
5 小结 (14)
致谢 (15)
参考文献 (16)
源程序 (17)
1 设计内容及要求
1.1设计内容
万年历,实际上就是记录一定时间范围内(比如100年或更多)的具体阳历或阴历的日期的年历,方便有需要的人查询使用。在我设计的万年历中主要有:(1)使用图形用户界面来查询用用户所需的日期信息,符合日常软件使用规范。
(2)按月份查询,实现了显示查询1901~2100年某月所有日期的阴阳历对照。
(3)并且添加了重大节日与星座等信息,界面采用日常的星期与月份结合的格式,方便查看与使用。
(4)编写万年历的课程设计,是为了使同学们更加了解高级程序设计语言的结构,掌握基本的程序设计过程和技巧,掌握基本的分析问题和利用计算机求解问题的能力,具备初步的高级语言程序设计能力。为后续各门计算机课程的学习和毕业设计打下坚实基础。
1.2设计任务及具体要求
利用JAVA语言编写的万年历系统采用了多种JAVA语句来实现多种功能。用户可以通过本程序的applet运行界面来查找一整年某月的农历和阳历,可以查找用户所想了解的某一天具体为星期几,并且可以看到一些重大节日的具体时间。
Java万年历源代码,可显示公历、农历、系统时间、国际时间
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import javax.swing.table.DefaultTableModel;
import java.text.DateFormat;
import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Date;
import java.util.GregorianCalendar;
import java.util.Locale;
import java.util.TimeZone;
public class wannianli extends JFrame implements ActionListener, MouseListener {
private Calendar cld = Calendar.getInstance();//获取一个Calendar类的实例对象
private String[] astr = { "星期一", "星期二", "星期三", "星期四", "星期五", "星期六", "星期日" };
private DefaultTableModel dtm = new DefaultTableModel(null, astr);
private JTable table = new JTable(dtm);
private JScrollPane sp = new JScrollPane(table);
CC++程序设计——万年历(完整代码+实验报告)
Week[0]=(n+1)%7-2
Week[0]=7-(n+1)%7
结 束
图 3-3
正文 第 3 页(共 18 页)
(3)求待求年份元旦星期函数:求出待求年份元旦距离 2005 年元旦的总天数,进而求 出待求年份元旦的星期数。 (图 3-3,其中 Week[0]代表元旦星期数)
四、程序源码
#include<iostream> #include<fstream> #include<iomanip> #include<string> using namespace std; ofstream fout("万年历_执行结果.txt"); //文件输出到“万年历_执行结果.txt 文件中” const int Year=2005; //const 符号常量,代表 2005 年 int MonNum[12]={31,28,31,30,31,30,31,31,30,31,30,31}; //储存每月的天数 void PrintWelcome(); //顶层函数,用于开始执行程序时输出欢迎信息 class Data { private: int Week[12]; //用于储存每个月 1 号为星期几 int year; //用于存放用户输入的年份 public: Data(); //类 Data 的构造函数 int Getyear(); //获取用户输入的年份 void FirstDayOfYear(int); //求出任意一年元旦的星期数 void FirstDayOfMonth(int); //求出任意年份的每个月一号的星期数 int IsLeapyear(int); //判断是否为闰年 void PrintYear(int); //显示年份图案 void PrintTitle(int); //输出每个月日历的标题部分 void PrintMonth(int); //打印月份日历 void PrintForm(int); //使日历按照每两个月并排的方式输出 void ChooseMenu(); //显示选择操作界面,实现程序的循环 void PrintThanks(); //退出程序时显示结束信息 }; void main() { static int i=0; //静态全局变量 i,控制 PrintWelcome()只输出一次 if(!i++) PrintWelcome(); //调用顶层函数,输出欢迎信息 Data data; //定义类 Data 的对象 data int yy=data.Getyear(); data.PrintYear(yy); data.FirstDayOfYear(yy); data.ChooseMenu(); } /*函数功能: 判断输入的年份是否为闰年,如果是则返回 1,否则返回 0
万年历源代码
万年历输出界面1.显示当前时间2.日期和星期的转换3.根据指定日期对N天后是星期几的计算.4.输入日期查询,显示查询日期的月日.5.闰年判断输入1:显示当前系统时间输入2:输入年月日,输出星期几输入3:输入年月日,输入n,输出“输入年月日n天后是星期几”。输入4:输入年,输入天数,计算出是该年的月份和日期。输入5:输入年,输出是否闰年。// test1.cpp : Defines the entry point for the console application.//#include //输入年份,输出年历。//---------------------------------------------------------------------------#include #include int JudgeLeapYear(int); //判断是否为闰年int MonthDay(int m,int y); //返回本月的天数void printHeader(void); //输出表头int FirstWeek(int m,int y); //返回本月一号是星期几void printMonth(int m); //输出月份表头int main(int argc, char* argv[]){int year,month,i,test,week;printf("Year:"); scanf("%d",&year);for (month=1; month<=12; month++) {test=1;printMonth(month);printHeader();week=FirstWeek(month,year);if (week <= 6){//输出每月的第一星期for (i=0; i<=week; i++) {putchar('\t');test++;}}for (i = 1; i <= MonthDay(month,year); i++,test++) {//输出每个月非第一个星期printf("%d\t",i);if (test%7==0) {putchar('\n');}}putchar('\n');system("pause");//暂停,以便观察输出}return 0;}//判断是否润年int JudgeLeapYear(int y){return (y%4==0&&y%100||y%400==0)?1:0;}//返回这月的一号是星期几int FirstWeek(int month,int year){if (month<3) {month+=12;year--;}return (1+2*month+3*(month+1)/5+year+year/4-year/100+year/400)%7;}//一月有多少天int MonthDay(int month,int year){int d;switch (month) {case 1:case 3:case 5:case 7:case 8:case 10:case 12:d=31;break;case 4:case 6:case 9:case 11:d=30;break;case 2:d=JudgeLeapYear(year)?29:28;break;}return d;}//打印日历头void printHeader(void){printf("%s\t%s\t%s\t%s\t%s\t%s\t%s\t\n","Sun","Mon","Tue","Wed","Thur","Fri","Sat");}//打印月份void printMonth(int m){switch (m) {default:case 1:puts("===January===");break;case 2:puts("===February===");break;case 3:puts("===March===");break;case 4:puts("===April===");break;case 5:puts("===May===");break;case 6:puts("===June===");break;case 7:puts("===July===");break;case 8:puts("===August===");break;case 9:puts("===September===");break;case 10:puts("===October===");break;case 11:puts("===November===");break;case 12:puts("===December===");break;}}
C++程序设计(万年历——说明书)
C++程序设计说明书
题目:万年历
班级学号:
学生姓名:
目录
一.应用程序的名称
二.应用程序的主题、设计目的
三.应用程序简介
1.程序的基本结构及内容
2。程序的运行环境
四.主要运行界面的介绍
五.程序亮点
六.课程设计中存在的问题及解决方法
一.课程设计名称
万年历
二.应用程序要求、目的
主题:万年历
目的:实现对年月的查询
三.应用程序简介
(1)基本结构:
整个程序有cls_screen(清屏)、judgement(判断是否为闰年)、
show_week(记录周几)、print_year(查询某年)、print_year_month(查询某年某月)等自定义函数,程序中涉及到switch语句、for语句、if语句等和多次函数调用语句,开头定义了day_of_month[]数组,主要目的是将12个月每个月有多少天依次排出,在后面又用if语句判断二月的天数是28还是29。在主函数中运用while 语言与switch语句的嵌套,是程序拥有了循环的功能.用fflush(stdin);语句清除输入缓存,使程序在使用过程中不会太过眼花缭乱。
万年历的编程,需要两个方面的讨论和研究,一是要在用户输入年份的时候,判断该年是否为闰年,而对于闰年的判断,能被4整除但不能被100整除,或者能被400整除的年份为闰年,否则为平年。所以会改变day_of_month[]数组中的二月份的数值。二是在用户输入年月份的时候,判断该年该月的第一天是周几,从来好排列。而对于判断周几,需要运用公式:w=(y+[y/4]+[c/4]—2c+[26(m+1)/10]+d-1)%7并用if语句使用判断。通过这两个方面的讨论和实现,才能合理的编程出万年历的基本程序代码.
万年历源代码
#includeint main(){void printMonthBody(int year, int month,int week);int getTotalNumberOfDays(int year, int month);int year,month,sum,week;printf("请输入您要查询的年份和月份,以/号分开,如1800/1:");scanf("%d/%d",&year,&month);sum=getTotalNumberOfDays(year,month);week=(sum+3)%7;printf("\n");printf("%d年%d月的日历表如下:\n",year,month);printf("\n");printMonthBody(year,month,week);return 0;}int getTotalNumberOfDays(int year, int month){int i,sum,num1=0,num2=0;for(i=1800;i{if((i%4==0&&i%100!=0)||(i%400==0)) num1++;else num2++;}sum=num1*365+num2*366;if(month==1) return sum;else if(month==2) return sum+31;else{if((year%4==0&&year%100!=0)||(year%400==0)){switch(month){case 3:sum+=59;break;case 4:sum+=90;break;case 5:sum+=120;break;case 6:sum+=151;break;case 7:sum+=181;break;case 8:sum+=212;break;case 9:sum+=243;break;case 10:sum+=273;break;case 11:sum+=304;break;case 12:sum+=334;break;}return sum;}else {switch(month){case 3:sum+=60;break;case 4:sum+=91;break;case 5:sum+=121;break;case 6:sum+=152;break;case 7:sum+=182;break;case 8:sum+=213;break;case 9:sum+=244;break;case 10:sum+=274;break;case 11:sum+=305;break;case 12:sum+=335;break;}return sum;}}}void printMonthBody(int year, int month,int week){void printline();int i,k,m;int a[50];printf("星期日 星期一 星期二 星期三 星期四 星期五 星期六\n");printline();if((year%4==0&&year%100!=0)||(year%400==0)){switch(month){case 1:case 3:case 5:case 7:case 8:case 10:case 12:{for(i=0;ifor(k=i;im=i;for(i=k;i{if(i%7==0) {printf("\n");printline();}printf("%-8d",a[i]);}printf("\n");printline();printf("\n");};break;case 2:{for(i=0;ifor(k=i;im=i;for(i=k;i{if(i%7==0) {printf("\n");printline();}printf("%-8d",a[i]);}printf("\n");printline();printf("\n");};break;case 4:case 6:case 9:case 11:{for(i=0;ifor(k=i;im=i;for(i=k;i{if(i%7==0) {printf("\n");printline();}printf("%-8d",a[i]);}printf("\n");printline();printf("\n");};break;}}else {switch(month){case 1:case 3:case 5:
基于单片机的万年历源代码程序
基于单片机的万年历源代码程序
源程序代码如下:
#include
#include
unsigned char code displaywelcome[]={" Welcome To My Lcd Timer"};//欢迎界面
unsigned char code displaywish[]={" Happy Every Day ^_^"}; //欢迎界面
unsigned char code overtemperature[]={"OVERTEMPERATURE!"};
unsigned char code digit[]={"0123456789"}; //数字代码unsigned char mode,TH,TL,TN,TD,length,tempswitch,Maxtemp=40,amode,alarmmode,minutes,hours, minutea,seconds,houra=12;
sbit SCLK=P1^0; //DS1302时钟输入
sbit DATE=P1^1; //DS1302数据输入
sbit REST=P1^2; //DS1302复位端口
sbit SET=P1^4; //DS1302设置模式选择位
sbit ADD=P1^5; //增加
sbit RED=P1^6; //减小
sbit CANL=P1^7;
void delay1ms(int i)//1毫秒延时
{
int j,k;
while(i--)
for(j=76;j>1;j--);
for(k=29;k>1;k--);
}
void delaynus(unsigned char n) //延时若干微秒
万年历源代码
{
Time->DateString[0] = '2';
Time->DateString[1] = '0';
Time->DateString[2] = Time->Year/10 + '0';
0x01 0x00
//光标闪动 //光标不闪动
void LCD_SetDisplay(unsigned char DisplayMode) {
LCD_Write(LCD_COMMAND, 0x08|DisplayMode); }
//设置输入模式************************************************************
0x80 0x82 0x84 0x8A 0x86 0x88 0x8C
// 转成 24 小时制 //时钟芯片的寄存器位置,存放时间
void DS1302InputByte(unsigned char d) {
unsigned char i; ACC = d; for(i=8; i>0; i--) {
DS1302_IO = ACC0; DS1302_CLK = 1; DS1302_CLK = 0; ACC = ACC >> 1; } }
#define AM(X) X #define PM(X) (X+12) #define DS1302_SECOND #define DS1302_MINUTE #define DS1302_HOUR #define DS1302_WEEK #define DS1302_DAY #define DS1302_MONTH #define DS1302_YEAR
万年历c语言代码讲解
万年历c语言代码讲解
摘要:
一、万年历C语言代码讲解简介
1.万年历的概念及用途
2.C语言代码讲解的重要性
二、C语言代码基础
1.C语言简介
2.C语言基本语法
3.C语言的数据类型与变量
三、万年历C语言代码实现
1.计算闰年
2.计算月份的天数
3.计算日期的星期
4.输出万年历
四、万年历C语言代码的优化与拓展
1.代码性能优化
2.功能的拓展与实现
五、总结
1.万年历C语言代码讲解的意义
2.对编程能力的提升
正文:
一、万年历C语言代码讲解简介
万年历是一种记录了公历日期的工具,它可以帮助我们快速查询公历日期对应的农历、节日、提醒等信息。C语言是一种广泛应用于计算机领域的编程语言,掌握C语言编程对于学习其他编程语言有很大的帮助。本文将详细讲解万年历C语言代码的实现过程,帮助读者更好地理解C语言编程。
二、C语言代码基础
1.C语言简介
C语言是一种高级编程语言,由丹尼斯·里奇(Dennis Ritchie)于20世纪70年代在贝尔实验室开发。C语言具有良好的性能和可移植性,被广泛应用于操作系统、嵌入式系统、硬件驱动等领域。
2.C语言基本语法
C语言的基本语法包括变量声明、数据类型、运算符、控制结构、函数等。了解这些基本语法对于编写C语言代码至关重要。
3.C语言的数据类型与变量
C语言的数据类型包括整型、浮点型、字符型等。变量是存储数据的容器,通过变量名来表示。声明变量时需要指定变量的数据类型和存储空间。
三、万年历C语言代码实现
1.计算闰年
闰年是指公历年份可以被4整除但不能被100整除的年份,或者是可以被400整除的年份。通过编写一个函数,我们可以判断一个年份是否为闰年。
C++实现万年历(原创)
C++实现万年历(原创)
任务要求
功能要求:
(1)提供菜单⽅式选择,假定输⼊的年份在1940-2040年之间。
(2)输⼊⼀个年份,输出是在屏幕上显⽰该年的⽇历。
(3)输⼊年⽉,输出该⽉的⽇历,如图2-1所⽰:
图2- 1 ⽉⽇历
(4)输⼊年份、⽉份、⽇期,计算得到的是这⼀天据今天有多少天,星期⼏。
(5)输⼊公历的年⽉⽇,输出农历年⽉⽇。
(6)输⼊农历节⽓,输出当年农历的年⽉⽇及公历年⽉⽇。可以假定只涉及年份是1940年到2040年。
总体设计
将⽂件三部分 Date.h、main.cpp、Date.cpp
1) Date.h:包括函数的声明。
2) main.cpp:包含调⽤与模拟交互界⾯的函数代码
3) Date.cpp:
//输⼊输⼊⼀个年份,输出是在屏幕上显⽰该年的⽇历。
void print_annual_calendar(int year)
//输⼊年⽉,输出该⽉的⽇历。
void print_monthly_calendar(int year,int month)
//输⼊年份、⽉份、⽇期,计算得到的是这⼀天据今天有多少天,星期⼏。
void print_number_week(int year,int month ,int day)
//输⼊公历,显⽰农历。
void gregorian_to_lunar (int year,int month,int day)
//输⼊农历节⽓,输出当年农历的年⽉⽇和公历年⽉⽇。
void solar_term(char *str)
详细设计说明
(1) 查询距今多少天,星期⼏?
java万年历源代码
int monDay;//星期几
tianshu cn=new tianshu();
cn.jsts();
int week=1+cn.totalDay%7;
//System.out.println(""+week);
if (week==7){//求当月第一天
}
for(int i=1;i<=cn.yueTian;i++){
System.out.print(i+"\t");//输出每月的号数
if((cn.totalDay + i - 1) % 7 == 5){//如果当天为周六,输出换行
System.out.println();
}ຫໍສະໝຸດ Baidu
}
}
}
package wannianli;
import java.util.*;
public class tianshu {
int totalDay;//总共的天数
int yueTian;//每月的天数
public void jsts(){
int days=0;//输入月份到当年的天数
System.out.println("*************************************欢迎使用万年历*************************************");
C++课程设计--万年历
C++课程设计--万年历
安徽省巢湖学院计算机与信息工程学院
课程设计报告
课程名称《C++语言》
课题名称万年历设计
专业计算机科学与技术
班级#**************
学号000000000
姓名非凡方法
指导教师vdnggb
目录
1、设计题目•••••••••••••••••••••• 1
2、设计要求•••••••••••••••••••••• 1
3、总体设计•••••••••••••••••••••• 1
3.1 系统功能框架••••••••••••••••• 1
3.2 系统功能说明••••••••••••••••• 2
4、详细设计•••••••••••••••••••••• 2
4.1 数据结构设计••••••••••••••••• 2
4.2 程序详细源代码••••••••••••••• 3
5、运行结果•••••••••••••••••••••• 8
1、设计题目:
万年历设计
2、设计要求:
(1)程序运行时,首先给出3个菜单选项的内容和输入提示:
1 显示一年的日历
2 显示某一天是星期几0 退出
(2)用户可以通过主菜单选择不同的选项。若选择1,则通过输入年份,显示输出该年每个月的日历。若选择2,则通过输入日期,查询这一天是星期几。
3、总体设计:
3.1系统功能框架
(流程图)
依据课程设计的要求,需要设计一个菜单功能,进入程序后,有菜单可以提供选择,
选择1,进入日期显示阶段,日期显示完毕,再次进入菜单选择。选择2,进入日期查询阶段,日期查询完毕,再次进入菜单。选择0,
退出程序。
3.2系统功能说明
(功能板块)
万年历源代码
万年历输出界面1.显示当前时间2.日期和星期的转换3.根据指定日期对N天后是星期几的计算.4.输入日期查询,显示查询日期的月日.5.闰年判断输入1:显示当前系统时间输入2:输入年月日,输出星期几输入3:输入年月日,输入n,输出“输入年月日n天后是星期几”。输入4:输入年,输入天数,计算出是该年的月份和日期。输入5:输入年,输出是否闰年。#include#include main(){int s,y=0,m=0,d=0,iWeek,day_aftern,n,sum;//定义各个变量char xq[7][10]={"星期一","星期二","星期三","星期四","星期五","星期六","星期日"};//case 3时输出的星期几?printf("\n\n 请使用万年历系统!\n");printf("\n请选择所需操作:\n"); printf("\n1 系统当前时间是:"); printf("\n2 日期跟星期转换:"); printf("\n3 给出日期计算N天后是星期几:");printf("\n4 输入年输入天数,计算出是该年的几月几日:");printf("\n5 查询是否是润年:\n"); printf("请输入代码1-5\n");scanf("%d",&s);switch(s){case 1://输入的变量是1时{ time_t T; struct tm * timenow; time ( &T ); timenow = localtime ( &T ); printf ( "现在时间和日期是: %s", asctime (timenow) ); };break; case 2://输入的变量是2时{printf("请输入日期:\n格式为:1900,1,1\n");scanf("%d,%d,%d",&y,&m,&d);if(m==1||m==2)//当输入的月份是1月或者2月时{m+=12;y--;}iWeek=(d+2*m+3*(m+1)/5+y+y/4-y/100+y/400)%7;switch(iWeek){case 0: printf("星期一\n"); break;case 1: printf("星期二\n"); break;case 2: printf("星期三\n"); break;case 3: printf("星期四\n"); break;case 4: printf("星期五\n"); break;case 5: printf("星期六\n"); break;case 6: printf("星期日\n"); break;}};break;case 3://输入变量是3时,先判断此日期是星期几,在计算n天后是星期几{printf("请输入日期和天数:\n格式为:1900,1,1;n\n");scanf("%d,%d,%d;%d",&y,&m,&d,&n);if(m==1||m==2){m+=12;y--;}iWeek=(d+2*m+3*(m+1)/5+y+y/4-y/100+y/400)%7;day_aftern=(iWeek+n%7)%7;//计算 n天后是星期几printf("n天后是:%s\n",xq[day_aftern]);//输出结果};break; case 4://输入变量是4时,先判断此年份是否是闰年,{printf("请输入年份和天数:\n");printf("例如:2011,165\n");scanf("%d,%d",&y,&sum);if(y%400==0||(y%4==0&&y%100!=0)) /*判断是不是闰年*/{ /*不是闰年*/ if(sum<=31&&sum>0) printf("一月%d号\n",sum-0); if(sum<=59&&sum>31)printf("二月%d号\n",sum-31);if(sum<=90&&sum>59)printf("三月%d号\n",sum-59);if(sum<=120&&sum>90)printf("四月%d号\n",sum-90);if(sum<=151&&sum>120)
万年历带农历源代码 非常好
} static unsigned 0x04,0xAe,0x53, 0x0A,0x57,0x48, 0x55,0x26,0xBd, 0x0d,0x26,0x50, 0x0d,0x95,0x44, 0x46,0xAA,0xB9, 0x05,0x6A,0x4d, 0x09,0xAd,0x42, 0x24,0xAe,0xB6, 0x04,0xAe,0x4A, 0x6A,0x4d,0xBe, 0x0A,0x4d,0x52, 0x0d,0x25,0x46, 0x5d,0x52,0xBA, 0x0B,0x54,0x4e, 0x0d,0x6A,0x43, 0x29,0x6d,0x37, 0x09,0x5B,0x4B, 0x74,0x9B,0xC1, 0x04,0x97,0x54, 0x0A,0x4B,0x48, 0x5B,0x25,0xBC, 0x06,0xA5,0x50, 0x06,0xd4,0x45, 0x4A,0xdA,0xB8, 0x02,0xB6,0x4d, 0x09,0x57,0x42, 0x24,0x97,0xB7, 0x04,0x97,0x4A, 0x66,0x4B,0x3e, 0x0d,0x4A,0x51, 0x0e,0xA5,0x46, 0x56,0xd4,0xBA, 0x05,0xAd,0x4e, 0x02,0xB6,0x44, 0x39,0x37,0x38, 0x09,0x2e,0x4B, 0x7C,0x96,0xBf, 0x0C,0x95,0x53, 0x0d,0x4A,0x48, 0x6d,0xA5,0x3B, 0x0B,0x55,0x4f, 0x05,0x6A,0x45, 0x4A,0xAd,0xB9, 0x02,0x5d,0x4d, 0x09,0x2d,0x42, 0x2C,0x95,0xB6, 0x0A,0x95,0x4A, 0x7B,0x4A,0xBd, 0x06,0xCA,0x51, 0x0B,0x55,0x46, char const year_code[]={ //1901 0 //1902 3 //1903 6 //1904 9 //1905 12 //1906 15 //1907 18 //1908 21 //1909 //1910 //1911 //1912 //1913 //1914 //1915 //1916 //1917 //1918 //1919 //1920 //1921 //1922 //1923 //1924 //1925 //1926 //1927 //1928 //1929 //1930 //1931 //1932 //1933 //1934 //1935 //1936 //1937 //1938 //1939 //1940 //1941 //1942 //1943 //1944 //1945 //1946 //1947 //1948 //1949 //1950 //1951 1
单片机万年历程序代码
单片机万年历程序代码
以下是一个示例单片机万年历的程序代码:
```c
#include <reg51.h>
typedef unsigned char uchar;
typedef unsigned int uint;
sbit K1 = P2^0; // 显示年份
sbit K2 = P2^1; // 显示月份
sbit K3 = P2^2; // 显示日期
uchar code year_tab[] = {31,28,31,30,31,30,31,31,30,31,30,31}; uchar code week_tab[] = {0x06,0x07,0x01,0x02,0x03,0x04,0x05}; uchar year, month, day, week;
void delay(uint ms)
{
uint i, j;
for(i=ms;i>0;i--)
for(j=110;j>0;j--);
}
uchar getKey()
{
if(K1==0) {
delay(5);
if(K1==0)
return 1;
while(!K1);
}
if(K2==0) {
delay(5);
if(K2==0)
return 2;
while(!K2);
}
if(K3==0) {
delay(5);
if(K3==0)
return 3;
while(!K3);
}
return 0;
}
void display(uchar num) {
P0 = num;
delay(1);
P0 = 0x00;
}
void init()
{
TMOD=0x01;
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
#include
#include
#include
#include
#include
#define KEYNUMUp 0x48
#define KEYNUMDown 0x50
#define KEYNUMLeft 0x4b
#define KEYNUMRight 0x4d
#define KEYNUMPageUp 0x49
#define KEYNUMPageDown 0x51
int year,month,day; //全局变量记录时间
int
daysOfMonth[2][12]={{31,28,31,30,31,30,31,31,30,31,30,31},{31,29,31,30,31,30,31, 31,30,31, 30,31}};
int runYear(int year) //判断是否是闰年
{
int flag=0;
if(year%400==0||(year%4==0&&year%100!=0))
flag=1;
return flag;
}
struct tm* getDay()//从系统取得当前时间
{
time_t timer;
struct tm* gmt;
time(&timer);
gmt=localtime(&timer);
return gmt;
}
int dayExame(int year,int month,int day)//检查日期是否正确
{
if(year<0||month<1||month>12||day<1||day>31)
return 0;
switch(month)
{
case 1:
case 3:
case 5:
case 7:
case 8:
case 10:
case 12:
if(day>31)return 0;break;
case 4:
case 6:
case 9:
case 11:
if(day>30)return 0;break;
default:
if(runYear(year)&&day>29)
return 0;
else if(runYear(year)==0&&day>28)
return 0;
}
return 1;
}
int getwDay(int year,int month,int day)//取得星期
{
int nday=0,nDay,i,w;
for(i=0;i nday+=daysOfMonth[runYear(year)][i]; nday+=day; nDay=year-1+(year-1)/4-(year-1)/100+(year-1)/400+nday; w=nDay%7; return w; } void printCalender(int year,int month,int day); void setDay(int &year,int &month,int &day)//调节日期 { printf("%c:上一年 %c:下一年\n",24,25); printf("%c:上个月 %c:下个月\n",27,26); printf("PageUp:昨天 PageDown:明天\n"); printf("其他:返回主菜单\n"); char k; getch(); k=getch(); switch(k) //通过方向键和PageUp、PageDown键来调整日期 { case KEYNUMUp: year--; if(dayExame(year,month,day)==0){year++; printf("%c",7);} //检查日期的合法性,//若错误,保持日期不变,并警告 system("cls");printCalender(year,month,day);setDay(year,month,day);break; case KEYNUMDown: year++; if(dayExame(year,month,day)==0){year--;printf("%c",7);} system("cls");printCalender(year,month,day);setDay(year,month,day);break; case KEYNUMLeft: month--; if(dayExame(year,month,day)==0){month++;printf("%c",7);} system("cls");printCalender(year,month,day);setDay(year,month,day);break; case KEYNUMRight: month++; if(dayExame(year,month,day)==0){month--;printf("%c",7);} system("cls");printCalender(year,month,day);setDay(year,month,day);break; case KEYNUMPageUp: day--; if(dayExame(year,month,day)==0){day++;printf("%c",7);} system("cls");printCalender(year,month,day);setDay(year,month,day);break; case KEYNUMPageDown: day++; if(dayExame(year,month,day)==0){day--;printf("%c",7);} system("cls");printCalender(year,month,day);setDay(year,month,day);break; default: ; } } void printCalender(int year,int month,int day)//打印月历 { int i; char wday[7][4]={"Sun","Mon","Tue","Wed","Thu","Fri","Sat"}; printf(" %d年%d月%d日\n",year,month,day); printf("***********************************\n"); for(i=0;i<7;i++) printf("%5s",wday[i]); printf("\n"); int w; int nowDay=1; w=getwDay(year,month,nowDay);//找到第一天的星期 int n; n=daysOfMonth[runYear(year)][month-1]; switch(w) //放置第一天 { case 0:printf("%5d",nowDay);break; case 1:printf("%10d",nowDay);break; case 2:printf("%15d",nowDay);break; case 3:printf("%20d",nowDay);break;