万年星期历
一目的
根据所学知识,编写指定题目的C语言程序,并规范地完成课程设计报告。通过课程设计,加深对《C语言程序设计》和《数据结构》课程所学知识的理解,熟练掌握和巩固C 语言的基本知识和语法规范,包括:数据类型(整形、实型、字符型、指针、数组、结构等);运算类型(算术运算、逻辑运算、自增自减运算、赋值运算等);程序结构(顺序结构、判断选择结构、循环结构);库函数应用等;复杂任务功能分解方法(自顶向下逐步求精、模块化设计、信息隐藏等),熟练掌握和巩固三种基本的数据结构(线性结构、树形结构、图形结构)的逻辑结构、存储结构以及相关运算和应用。
学会编制结构清晰、风格良好、数据结构适当的C语言程序,从而具备利用计算机编程分析解决综合性实际问题的初步
二需求分析
1、该程序数据由键盘以阿拉伯数字正整数的形式输入,对于输入的数据必须是正整
数,其范围不确定。
2、待程序运行完毕后,用户屏幕上将会以日历或者数据的形式输出所要结果。
3、本程序主要用于显示某年某月的日历,判断任意一个日期的星期值,判断任意一个
年份的平闰年,计算任意两个日期之间间隔的天数。
4、在用户在“信息提示”下输入数据完毕后,程序会根据用户的要求,输出用户所需
要的某一确定年月的日历,某一日期的星期值,某一年份是否闰年,某两个确定日
期的间隔天数。
三概要设计
1、全局变量说明
int aa[12]//定义一个数组用于存放平年各月份的天数。
int cc[12] //定义一个数组用于存放闰年各月份的天数。
char bb[8][8]//定义一个字符串用于存放星期值。
2、模块功能
leapyear( )用于判断平年、闰年
void nianyue( ) 用于打印日历
int getDayPerMonth( )//用于计算年份和月份的天数
int getNumDay( )//用于计算总的天数
bool legalDate( )//用于判断所输入的年份,月份,日期是否正确。
3、函数模块之间的调用关系
四详细设计
#include #include #include using namespace std; leapyear(int a)/*是否是闰年*/ { if( !(a%4)&&a%100 || !(a%400) ) return (1); else return (0); } int aa[12]={31,28,31,30,31,30,31,31,30,31,30,31};//平年各月份的天数 int cc[12]={31,29,31,30,31,30,31,31,30,31,30,31};//闰年各月份的天数 char bb[8][8]={"星期日","星期一","星期二","星期三","星期四","星期五","星期六"}; ww(int a,int b,int c)//a为日期,b为月份,c为年份 { int n=0,m=0,i,j,k=0; for(i=1;i { if(leapyear(i)==1)//整的年份的天数 m=m+366; else m=m+365; } for(j=1;j {if(leapyear(c)==1) k=k+cc[j-1]; else k=k+aa[j-1]; } n=(m+k+a)%7;// (m+k+a)为总的天数 return n;//返回星期值 void nianyue(int n,int y)/*打印某年某月的月历*/ { int i,k; if(leapyear(n)==1)//是闰年时 { cout<<" 日"<<" 一"<<" 二"<<" 三"<<" 四"<<" 五"<<" 六"< for(i=0;i { cout< } for(k=1;k<=cc[y-1];k++) { cout< if((ww(1,y,n)+k)%7==0) cout< } cout< } else //不是闰年时 { cout< for(i=0;i { cout< } for(k=1;k<=aa[y-1];k++) { cout< if((ww(1,y,n)+k)%7==0) cout< } cout< } } struct Date//结构体类型的定义 { int d,s,a;//a s d 分别被定义为年,月,日。 } ; int day[12]={ 31,28,31,30,31,30,31,31,30,31,30,31 }; int isLeap( int a ) { if( !(a%4)&&a%100 || !(a%400) ) return 1; return 0; } int getDayPerMonth( int a , int s ) { if( s==2 ) return day[1]+isLeap( a ); return day[s-1]; } igetNumD nt ay( Date D ) { int ret=0; int h;//h为具体的年份 for( h=1 ; h<=D.a ; h++ ) ret+=365+isLeap( D.a ); for( h=1 ; h ret+=getDayPerMonth( D.a , h ); ret+=D.d; return ret; } bool legalDate( Date D ) { if( D.a<0||D.a>9999 ) return false; if( D.s<1||D.s>12 ) return false; if( D.d<1||D.d>getDayPerMonth( D.a , D.s ) ) return false; return true; } void main() { Date sysDate,date; int n,m; int day,month ,year; while(1) { cout<<"***********************************:"< <<"2是否为闰年"< <<"3打印某年某月的月历"< <<"4求两个时间的间隔天数"< <<"5exit"< <<"***********************************:"< cin>>n; switch(n) { case 1:cout<<"请输入要查询的日期:"; cout<<"year:"; cin>>year; cout< cin>>month; cout< cin>>day; cout<<"星期是:"; cout< switch(ww(day,month,year)) { case 1:cout<<"星期一";break; case 2:cout<<"星期二";break; case 3:cout<<"星期三";break; case 4:cout<<"星期四";break; case 5:cout<<"星期五";break; case 6:cout<<"星期六";break; case 7:cout<<"星期日";break; } cout< case 2:cout<<"请输入要查询的年份:"; cin>>m; if(leapyear(m)==1) cout<<"是闰年"< else cout<<"不是闰年,请返回重新输入"< break; case 3:cout<<"请输入年份:"; cin>>n; cout< cin>>m; cout< nianyue(n,m);break; case 4:cout<<"请输入第一组时间:"; cin>>date.a>>date.s>>date.d; cout<<"请输入第二组时间:"; cin>>sysDate.a>>sysDate.s>>sysDate.d; cout<<"different number of days is:\n" < break; case 5:exit(0); } } } 五调试分析 1、要正确地打印一份万年星期历,最首要的问题就是如何判断平年和闰年;如何确定每个月的第一天是星期几;在得知一个日期的情况下,如何计算它是星期几;如何判断每个月有多少天等等。刚开始的时候对这些问题都产生了疑惑,但经过相关资料的查找和向老师询问,得到了正确地答案。 2、如何计算任意两个日期之间的间隔天数是这次设计上遇到的最大的问题。在这个问题上花的相当多的时间来反复进行调试。由于平年和闰年的不同,所以在计算的时候就有可能会出现误差,这个问题带来很大的困扰。后来在查找了相关的资料后,问题得到了解决。 3、本次任务涉及到相关函数的调用问题,如果熟悉掌握这方面的知识,就可以节 省很多的时间,于是必须回头复习了之前所学的知识。 六测试结果 程序运行后,每当用户输入,屏幕上会出现菜单,用户可以根据需要自行选择选项。以下为程序运行后的画面,通过菜单方式,使用户能更好的使用程序。 当用户根据自己的需要选择“1”时,用户可根据提示输入一个日期,程序将会判断该日期的星期值。如图所示: 当用户选择“2”时,用户可根据提示输入所需的年份,本程序会判断该日期是不是闰年,如图所示: 当用户选择“3”时,用户可根据提示输入所需的年份和月份,程序会打印出该年月份的日历,如图所示: 当用户选择“4”时,用户可根据提示输入所需的两组日期,程序会计算出这两个时间的时间间隔天数,如图所示: 当用户选择“5”时,程序结束本次运行操作。 七用户使用说明 该程序在VC6.0环境下进行运行,用户根据提示输入相应数字,然后敲击回车键,即可得到所需要的结果:输入1,表示判断某一日期的星期值;输入2,判断某一年份是不是 闰年;输入3,表示打印某年某月的日历;输入4,表示算两个时间的间隔天数;输入5,表示结束本次操作。 八课程设计总结 通过这次课程设计使我懂得了理论与实际相结合是很重要的,只有理论知识是远远不够的,只有把所学的理论知识与实践相结合起来,从理论中得出结论,才能真正为社会服务,从而提高自己的实际动手能力和独立思考的能力。在设计的过程中遇到问题,可以说得是困难重重,这毕竟第一次做的,难免会遇到过各种各样的问题,同时在设计的过程中发现了自己的不足之处,对一些前面学过的知识理解得不够深刻,掌握得不够牢固,比如说函数调用,函数定义……通过这次课程设计之后,我把前面所学过的知识又重新温故了一遍。 # include #include 该代码在VC++6.0编译器下运行,只要按照编译器给出的说明操作,就能将万年历显示在调试窗口中了……………………………………由于制作时间匆忙,很多注释都来不及写了,对于出学者可以慢慢看,代码很简单的,都放在了主函数里,如果有兴趣的话,可以把这些代码放在几个文件里,这样会好看点,加油了! #include printf("\t"); n++; } for(j=1;j<=31;j++){ if(n%7==0) printf("\n"); printf("%d\t",j); n++; } break; // 1 month case 2:w=(wo+31)%7; for(i=1;i 华北科技学院 课程设计报告 面向对象程序设计(Java) 班级: 电商B09-3 姓名: 周婷玉 设计题目:__________万年历________________ 设计时间: 2011-12-28 至2012-01-06 指导教师:_______ 郭慧____________ _____ 评语:_________________________________ _________________________________________ _________________________________________ _________________________________________ _________________________________________ 评阅成绩:___________评阅教师:_____________ 课程设计说明书 1、课程设计的目的 a)掌握面向对象程序设计基本要素(封装、继承、多态) b)掌握JA VA语言常用类包及其常用方法和JA VA语言基本语法 c)掌握基于AWT的图形用户界面设计 i.常用标准控件的使用,如标签、按钮、菜单、文本框、单选按钮、 滚动条等。 ii.事件处理机制 d)掌握布局、对话框的使用 e)掌握发布JA VA应用程序 2、功能模块简介和系统结构图 需求分析:本程序的要求为: 1.使用图形用户界面 2.能够实现日期与星期的查询 3.实现当日的时间备忘 功能设计: 1.能以月历形式显示日期与星期 2.支持用户自己输入年份,并提供月份的下拉形式来选择查询 3.添加当日行事历,储存与清除功能 #include"reg52.h" #define uchar unsigned char #define uint unsigned int sbit rs=P2^0; // lcd 控制端 sbit en=P2^2; // lcd 控制端 sbit all=P2^1; // lcd 控制端 sbit s0=P1^5; //时间调节 sbit s1=P1^6; sbit s2=P1^7; sbit voice=P2^7; int nt; sbit DQ=P2^6; sbit DS1302_CLK = P2^3; //实时时钟时钟线引脚sbit DS1302_IO = P2^4; //实时时钟数据线引脚sbit DS1302_RST = P2^5; //实时时钟复位线引脚sbit ACC0 = ACC^0; sbit ACC7 = ACC^7; unsigned char time; #define ads_y 0 #define ads_mo 3 #define ads_d 6 #define ads_w 9 #define ads_h 65 #define ads_m 68 #define ads_s 71 #define DS1302_SECOND 0x80 //写入ds地址宏定义 #define DS1302_MINUTE 0x82 #define DS1302_HOUR 0x84 #define DS1302_WEEK 0x8A #define DS1302_DAY0x86 #define DS1302_MONTH 0x88 #define DS1302_YEAR 0x8C /* welcome to use the WanNianLi system! */ #include 51单片机实现万年历 利用AT89S52单片机的P0口来和另外几个口来控制1602液晶的显示和P1口还有其它口来控制ds12887时钟芯片。设置四个按键,1个定义为时间设置功能键,一个定义为闹钟设置功能键,另外两个用来调节时间的增减。 原理图: pcb图: 源程序: #include void delay(uint x){ uchar i,j; for(i=x;i>0;i--) for(j=110;j>0;j--); } void didi() { beep=0; delay(1000); beep=1; delay(1000); } void write_(uchar ){ lcdrs=0; P0=; delay(5); lcden=1; delay(20); lcden=0; } void write_date(uchar date){ lcdrs=1; P0=date; delay(5); lcden=1; delay(20); lcden=0; } void write_sfm(uchar add,uchar date){ uchar shi,ge; shi=date/10; ge=date%10; write_(0x80+0x40+add); write_date(0x30+shi); write_date(0x30+ge); } void write_nyr(uchar add,uchar date){ uchar shi,ge; shi=date/10; ge=date%10; 实验十九:编写一个万年历系统 1.设计目的: 从实验的角度来看,这次课程设计一方面可以让自己巩固并加深对C语言程序设计知识的理解,掌握和提高C语言编程和程序的基本调试的基本技能,进一步理解和运用结构化程序的思想和方法;另一方面,可以让自己在面对一个全新的问题时,学会如何思考,如何寻找问题的关键,从而提升自己的能力。 2.总体设计: 1.、当前页以系统当前日期的月份为准,显示当前月的每一天(显示出日及对应的星期几); 2、当系统日期变到下一个月时,系统自动翻页到下一月。 3.调试与测试: 4.源程序清单和执行结果: #include 万年历时钟芯片代码 /******************************************************************** * 文件名: 时钟DS1302LCD.c * 描述: 该程序实现了用单片机来控制时钟芯片DS1302进行时钟的显示。时钟会在1602上显示. * 创建人:东流,2012年2月7日 * 版本号:1.0 * 杜邦线接法:P3.5接J18的1端;J3.6接J18的2端;J3.7接J18的3端。1602接到J17的排座上。 ********************************************************************* **/ #include<reg52.h> #include<intrins.h> #define uchar unsigned char #define uint unsigned int sbit ACC0 = ACC^0; sbit ACC7 = ACC^7; sbit T_CLK = P3^5; /*实时时钟时钟线引脚*/ sbit T_IO = P3^6; /*实时时钟数据线引脚*/ sbit T_RST = P3^7; /*实时时钟复位线引脚*/ //这三个引脚参考资料 sbit E=P2^7; //1602使能引脚 sbit RW=P2^6; //1602读写引脚 sbit RS=P2^5; //1602数据/命令选择引脚 /******************************************************************** * 名称: delay() * 功能: 延时,延时时间大概为5US。 * 输入: 无 * 输出: 无 ********************************************************************* **/ void delay() { _nop_(); 万年历C语言代码 #include 万年历的设计: 要求:模仿现实生活中的挂历,能够显示年历、月历、日历,并具备退出功能。当前页以系统当前日期的月份为准显示当前月的每一天(显示出日及对应的星期几)。当系统日期变到下一月时,系统自动翻页到下一月。 万年历的程序流程图: 主要程序流程图: 具体对于月份和年份的程序图如下: 上图为计算星期方法上图为打印日历程序图 万年历的设计的程序源代码: #include case 1:sum=0;break; case 2:sum=31;break; 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; default:printf("data error");break; } sum=sum+day; if(year%400==0||(year%4==0&&year%100!=0)) leap=1; else leap=0; if(leap==1&&month>2) sum++; S=(year-1+(year-1)/4-(year-1)/100+(year-1)/400+sum)%7; switch(S) 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; publicclass wannianli extends Jframe//窗体类implements ActionListener,//事件处理接口MouseListener { private Calendar cld = Calendar.getInstance();//获取一个Calendar类的实例对象 private String[] astr = { "星期一", "星期二", "星期三", "星期四", "星期五", "星期六", "星期日" }; //JPanel是Java图形用户界面(GUI)工具包swing中的面板容器类,包含在javax.swing包中,是一种轻量级容器,可以加入到JFrame窗体中。JPanel默认的布局管理器是FlowLayout,其自身可以嵌套组合,在不同子容器中可包含其他组件(component),如JButton、JTextArea、JTextField等private DefaultTableModel dtm = new DefaultTableModel(null, astr);//创建了一个表格模型 private JTable table = new JTable(dtm); private JScrollPane sp = new JScrollPane(table); private JButton bLastYear = new JButton("上一年 #include C语言实训--万年历源代码
万年历系统源代码
C语言编写的万年历代码
java课程设计 万年历 源代码
数字万年历简易C语言程序源代码
用C语言编写万年历,详细代码
51单片机实现万年历程序文件
万年历系统——C语言完整版
万年历时钟芯片代码
万年历C语言代码
万年历C语言设计
Java万年历源代码
万年历程序(不要嫌程序长,功能很齐全,而且对初学者很有帮助)
jQuery万年历日历设置代码