C++课程设计(日历的实现)
C语言课程设计实验报告(万年历)
C语言课程设计一、题目及功能描述题目:万年历的设计利用C语言设计出万年历,使其实现如下要求1、输入一个年份,在屏幕上输出该年的年历(包括每月的天数和所对应的星期几),并且在每月的左上角或右上角打印出相应的年份和月份,要求输出界面尽可能整齐、美观,符合年历显示规范。
假定输入的年份在1-9999年之间。
2、输入年月,输出该月的月历。
3、输入年月日,输出距今天还有多少天,是星期几,是否是公历节日。
:4、指定键盘的某些键,用于控制变换不同年、月、日的显示。
即:当前若正在显示2011年的年历,按下键盘“←”方向键后,年历变为2010年的。
二、使用的所有变量的说明变量说明:(以下均为整型变量)year 表示年份的变量month 表示月份的变量day 表示日期的变量select 表示菜单选择的变量i 表示月份的变量j 表示一个月中的某一天的变量sum 判断某天是一年中的第几天的变量number判断某天离公元1年1月1日还有几天的变量a[] 表示每月天数的数组变量year1 系统时间年份的变量month1 系统时间月份的变量day1 系统时间日期的变量三、程序清单及其说明#include "time.h" /*包含的头文件*/#include "stdio.h"#include "math.h"#include "windows.h"#include "conio.h"#define KEYNUMUp 0x48 /*宏定义*/#define KEYNUMDown 0x50#define KEYNUMLeft 0x4b#define KEYNUMRight 0x4d#define KEYNUMPageUp 0x49int eachyeartotal(int year,int month,int day); /*函数声明*/int counterdays(int year,int month,int day);int nowtime(int year,int month,int day);int week(int year,int month,int day);int maxDay(int year,int month);int isleap(int year);void whatweek(int year,int month,int day);void display(int year ,int month);void display2(int year,int month);void display3(int year,int month,int day) ;void setDay1(int year,int month,int day);void setDay2(int year,int month,int day);void setDay3(int year,int month,int day);void jieri(int month,int day);void display1(int year);void getmenu();void main() /*主函数*/{int year,month,day,select;while(1){getmenu();printf(" 请输入相应数字:"); /*菜单选择*/scanf("%d",&select);system("cls");switch(select){case 1: /*当选择为1时显示年历*/printf(" 年历显示:输入年(如2011):");scanf("%d",&year);if(year>0&&year<10000) /*显示年份从0-10000 */{display1(year); /*调用函数*/printf(" 提示按↑:上一年按↓:下一年按其他键:返回菜单\n\n");setDay1( year,month, day);}elsesystem("cls");printf(" 输入无效,重新输入!\n");break;case 2: /*当选择为2显示月历*/printf(" 月历显示:输入年月(如2011,6):");if(year>0&&year<10000&&month>=1&&month<=12){display2(year,month);printf(" 提示按←:上个月按→:下个月按其他键:返回菜单\n\n");setDay2( year,month, day);}elsesystem("cls");printf(" 输入无效,重新输入!\n");break;case 3: /*当选择为3时显示日期*/printf(" 日期显示:输入年月日(比如2011,6,23):");scanf("%d,%d,%d",&year,&month,&day);if(year>0&&year<10000&&month>=1&&month<=12&&day>=1&&day<=maxDay(year,month) ){display3(year,month,day);printf(" 提示按PageUp:前一天按PageDown:后一天按其他键:返回菜单\n\n");setDay3( year,month, day);}elsesystem("cls");printf(" 输入无效,重新输入!\n");break;case 4:exit(0);default: /*当输入其他数字时,输入无效,重新输入*/system("cls");printf(" 输入无效,重新输入!\n");}}}int isleap(int year) /*判断是否为闰年*/{if(year%4==0&&year%100!=0||year%400==0)return 1;elsereturn 0;int maxDay(int year,int month) /*每月的天数*/{int a[]={31,28,31,30,31,30,31,31,30,31,30,31}; /*每个月中的天数*/ if(isleap( year))a[1]=29; /*闰年2月份有29天*/ return a[month-1];}int eachyeartotal(int year,int month,int day) /*判断某天是一年中的第几天*/ {int i,sum=0;for(i=1;i<month;i++)sum+=maxDay(year,i);sum+=day;return sum;}int week(int year,int month,int day) /*对天数进行判断确定是星期几*/ {int number=(year-1)+(year-1)/4-(year-1)/100+(year-1)/400+eachyeartotal(year,month,day);number=number%7 ;return number;}void display(int year ,int month) /*输出年月*/{int max,number,i,j=1;max=maxDay(year,month);number=week(year,month,1);printf(" %4s %4s %4s %4s %4s %4s %4s\n","Sun","Mon","Tue","Wed", "Thu","Fri","sat");for(i=0;i<number;i++)printf(" "); /*1号前的星期补空格*/ while(j<=max){printf("%6d",j);if (i%7==6)printf("\n"); /* 每7格换一行*/i++;j++;printf("\n\n");}void display1(int year) /*输出年历*/{int i;printf("\n");for(i=1;i<=12;i++){printf("%d 年%d 月\n\n ",year,i);display(year,i);}}void display2(int year,int month) /*输出月历*/{printf("\n%d 年%d 月\n ",year,month);display(year,month);}void display3(int year,int month,int day) /*输出日历*/{whatweek( year,month,day);jieri(month,day);counterdays(year,month, day);}int counterdays(int year,int month,int day) /*判断今天距特定日期的天数*/{int year1, days0,days1,month1,days, day1;time_t timep;struct tm *p;time(&timep);p=gmtime(&timep);year1=(1900+p->tm_year) ;month1=(1+p->tm_mon) ;day1=(p->tm_mday); /*获取系统时间year1、month1、day1分别为年、月、日*/days0=(year-1)*365+(year-1)/4-(year-1)/100+(year-1)/400+eachyeartotal(year,month,day);days1=(year1-1)*365+(year1-1)/4-(year1-1)/100+(year1-1)/400+eachyeartotal(year1,month1,daydays=days0-days1; /*计算出两个日期之间的时间差*/printf("\n 今天距%d年%d月%d日还有%d天\n\n",year,month,day,days);return days;}void whatweek(int year,int month,int day) /*判断是星期几*/{int number;number=(year-1)+(year-1)/4-(year-1)/100+(year-1)/400+eachyeartotal(year,month,day); number=number%7 ;switch( number){case 0:printf( "\n %d年%d月%d日是星期日",year,month,day);break;case 1:printf( "\n %d年%d月%d日是星期一",year,month,day);break;case 2:printf( "\n %d年%d月%d日是星期二",year,month,day);break;case 3:printf( "\n %d年%d月%d日是星期三",year,month,day);break;case 4:printf( "\n %d年%d月%d日是星期四",year,month,day);break;case 5:printf( "\n %d年%d月%d日是星期五",year,month,day);break;case 6:printf( "\n %d年%d月%d日是星期六",year,month,day);break;default:system("cls");printf(" 出现错误!\n" );}}void jieri(int month,int day) /*判断是否公历节日*/{if(month==1)switch(day){case 1:printf(",这天是元旦");}if(month==2)switch(day){case 14:}if(month==3)switch(day){case 8:printf(",这天是妇女节");break;case 12:printf(",这天是植树节");}if(month==4)switch(day){case 1:printf(",这天是愚人节");}if(month==5)switch(day){case 1:printf(",这天是劳动节");break;case 4:printf(",这天是青年节");}if(month==6)switch(day){case 1:printf(",这天是儿童节");}if(month==7)switch(day){case 1:printf(",这天是建党节");}if(month==8)switch(day){case 1:printf(",这天是建军节");}if(month==9)switch(day){printf(",这天是教师节");}if(month==10)switch(day){case 1:printf(",这天是国庆节");}}void setDay1(int year,int month,int day) /*通过键盘“↑”“↓”控制年历的变换*/ { char k;getch();k=getch();switch(k){case KEYNUMUp: /*“↑”年份减小*/ if(year<2){system("cls");printf(" 警告!超出范围!\n");break;}year--;display1(year);setDay1(year,month,day);break;case KEYNUMDown:/*“↓”年份变大*/ year++;display1(year);setDay1(year,month,day);break;default:system("cls");}}void setDay2(int year,int month,int day) /*通过键盘“←”“→”控制月历的变换*/char k;getch();k=getch();switch(k){case KEYNUMLeft: /*“←”月份变小*/if(month<2){month+=12;year--;}if(year<1){system("cls");printf(" 警告!超出范围!\n");break;}month--;display2(year , month);setDay2(year,month,day);break;case KEYNUMRight:/*“→”月份变小*/if(month>11){month-=12;year++;}if(year<9999);month++;display2(year , month);setDay2(year,month,day);break;default:system("cls");;}}void setDay3(int year,int month,int day) /*通过键盘“PageUp”“PageDown”控制日期的变换*/{char k;getch();switch(k){case KEYNUMPageUp: /*“PageUp”日期变小*/ if(day<2){month--;day=maxDay(year,month);}if(month<1){month+=12;year--;}if(year<1){system("cls");printf(" 警告!超出范围!\n");break;}day--;display3(year , month,day);setDay3(year,month,day);break;case KEYNUMPageDown: /*“PageDown”日期变大*/ day++;if(day>maxDay(year,month)){day=1;month++;}if(month>12){month-=12;year++;}if(year<10000);display3(year , month,day);setDay3(year,month,day);break;default:system("cls");;}}{printf(" ************主菜单************\n\n");printf(" * 欢迎进入万年历系统*\n\n");printf(" * 1、年历显示*\n\n");printf(" * 2、月历查询*\n\n");printf(" * 3、日期查询*\n\n");printf(" * 4、退出系统*\n\n");printf(" ******************************\n\n"); }四、运行结果清单打开软件,进入如下菜单界面,输入数字进行选择1年历的显示(1)输入数字1进入年历的显示(2)输入年份2011,显示2011年的年历如下(3)按↑键盘显示上一年(2010年)的年历,显示如下(4)按↓键盘显示上一年(2012年)的年历,显示如下2、月历的显示(1)在菜单中选择2,进入月历的显示,输入2011,6,显示2011年6月份的月历,显示效果如下(2)按←键盘显示上一个月(5月)的月历,显示效果如下(3)按→键盘显示上上个月(7月)的月历,显示效果如下3、日历的显示(1)输入选择3进入日历的显示,如图输入2011,10,1显示这天的星期,是否为公历节日,距离现在还有多少天(2)按PagDown显示前一天的日历,显示如下(3)按PagUp显示后一天的日历,显示如下4 退出程序输入选择4,显示如下界面,按任意键退出程序五、总结和体会。
用c语言编写万年历思路
用c语言编写万年历思路摘要:1.编写万年历的思路2.C 语言编程基础3.实现万年历的算法4.具体编写代码5.测试与优化正文:编写万年历的思路:万年历是一种能够显示任意一年中每月每日的日历,它可以方便地帮助人们查询日期和节日。
在C 语言中编写万年历需要运用一些基本的编程知识和算法。
本文将从编写万年历的思路、C 语言编程基础、实现万年历的算法、具体编写代码以及测试与优化等方面来介绍如何用C 语言编写万年历。
C 语言编程基础:在开始编写万年历之前,我们需要了解一些C 语言的基础知识,例如变量、循环、条件语句等。
C 语言是一种高级编程语言,它可以用来编写操作系统、编译器等各种应用程序。
C 语言具有语法简单、执行效率高的特点,因此在编写万年历时,我们可以选择使用C 语言来进行编程。
实现万年历的算法:万年历的实现需要运用一些基本的算法,例如计算平年和闰年的天数、计算每个月的天数等。
我们可以通过一个数组来存储每一年的天数信息,然后根据需要输出相应的日期。
在实现万年历的过程中,我们需要注意闰年的判断,根据闰年的规则,每4 年一闰,每100 年不闰,每400 年再闰。
具体编写代码:在具体编写代码时,我们需要按照一定的逻辑顺序进行编程。
首先,我们需要输入年份,然后根据年份计算出该年的天数信息。
接着,我们可以使用循环语句来逐月输出日期。
在输出日期时,我们需要注意每个月的天数,以及每个月的日期格式。
测试与优化:在编写完万年历程序后,我们需要对其进行测试和优化。
首先,我们可以通过输入一些年份来测试程序的正确性。
在测试过程中,我们需要注意程序的运行速度和正确性。
如果发现程序存在问题,我们需要及时进行优化和修改。
总之,用C 语言编写万年历需要掌握一定的编程基础和算法知识。
在编写程序时,我们需要注意代码的逻辑性和正确性,以便能够输出正确的日期信息。
C语言课程设计--万年历
C 语言课程设计报告设计题目:万年历学生姓名:学生学号:专业班级:数学与应用数学一班学院名称:数学与计量经济学院同组人姓名:指导老师:2011年6月15 日1 需求分析1.1问题描述我们需要实现万年历的功能,那么如何实现这个功能呢?我们都很清楚,普通年份和闰年是有区别的,那么该怎么区分这种一天的差别对于万年历日期现实的影响呢?而且已知一个日期,那么我们怎么能够知道它是星期几?是不是需要一个参照物来比较呢?而且还有很多关于万年历的美化问题,占位符的考虑等等。
另外我们还必须判断输入的万年历是否合法,这也需要一个子函数来实现。
好吧,至于基础的判断闰年也是不在话下了。
1.2输入数据要求我们要考虑三种情况,这三种情况下是不能够实现这个万年历的功能的:/*如果给定的日期中年份部分为非正数*/if(date.year<=0)printf("年份不符合要求!\n"printf("请重新输入)/*如果给定的日期中月份部分为负数,为0或者大于12*/if(date.month>12||date.month<1)printf("月份不符合要求!\n");printf("请重新输入");getchar();exit(0);/*如果给定的日期中天数部分为非正数,或者大于31*/a[2]=28+leap(date.year);if(date.day>a[date.month]||date.day<1)printf("日期不符合要求!\n");printf("请重新输入");getchar();exit(0);1.3输出数据要求根据输入数据,输出数据必须严格的按照占位符进行逻辑的策划,然后得知一行万年历的日期的占位符是38个占位符,于是空格占位符和字符显示出来的那些占位符就需要有一个限定使得其不凌乱特别应该注意空格符的占位。
c语言课程设计电子日历
c语言课程设计电子日历一、课程目标知识目标:1. 理解C语言中结构体、数组、函数等基本概念及其在程序设计中的应用;2. 学会使用C语言编写具有日期计算功能的程序,掌握闰年和平年的判断方法;3. 掌握模块化编程思想,能将电子日历划分为多个功能模块并进行有效整合。
技能目标:1. 能运用C语言编写、调试简单的电子日历程序;2. 能运用结构体、数组等数据结构存储和管理日期数据;3. 能通过函数调用的方式实现日历的查询、添加、删除等功能。
情感态度价值观目标:1. 培养学生严谨、细心的编程习惯,提高问题分析和解决能力;2. 培养学生的团队合作意识,学会在团队中沟通、协作、共同完成任务;3. 激发学生对计算机编程的兴趣,培养探索精神,认识到编程在生活中的实际应用。
课程性质:本课程为实践性较强的课程,旨在让学生通过动手实践,掌握C语言编程技能,培养编程思维。
学生特点:高中生,具备一定的C语言基础,对编程有一定兴趣,但编程实践能力有待提高。
教学要求:注重理论与实践相结合,关注学生个体差异,鼓励学生积极参与,充分调动学生的主观能动性。
将课程目标分解为具体的学习成果,以便于教学设计和评估。
二、教学内容1. C语言基础知识回顾:结构体、数组、函数的定义与使用;2. 日期处理:闰年和平年的判断,日期的增加与减少;3. 电子日历功能模块设计:- 显示当前日期模块;- 查询日期模块;- 添加日程模块;- 删除日程模块;- 修改日程模块;4. 模块化编程:将电子日历划分为多个功能模块,并进行有效整合;5. 程序调试与优化:学会使用调试工具,找出程序中的错误并进行优化。
教学内容与教材关联性:1. C语言基础知识:参考教材第3章“数据类型”和第4章“控制语句”;2. 日期处理:参考教材第7章“数组”和第8章“函数”;3. 电子日历功能模块设计:结合教材第10章“结构体”和第11章“指针”;4. 模块化编程:参考教材第12章“文件操作”和第13章“模块化编程”。
C语言日历显示课程设计报告
C语言日历显示课程设计报告高级语言程序设计课程设计题目:专业计算机类班级计算机类1102学生学号指导教师_______________起止时间2012.2.13——2012.2.172012年2月目录实验报告 (4)必做题: (4)选做题: (9)题目10 写一个日历显示程序 (9)流程图:(如下) (16)工程代码: (21)心得体会 (26)实验报告必做题:(1)编一程序对2种排序方法进行比较:交换法、选择法、插入法、冒泡法四种方法选2。
具体比较方法是随机生成一组(≥300个)的100以内的整数数据,用选定的2种排序方法进行排序。
纪录排序过程中数据比较和交换的次数,输出比较结果。
#include<stdio.h>#include<stdlib.h>int main(void){int a[300],b[300];int i,j,temp,t;int s=0,p=0,s1=0,p1=0;for(i=0;i<300;i++){a[i]=rand()%100;b[i ]=a[i];}for(i=0;i<299;i++){for(j=i+1;j<300;j++){if(a[i]<a[j]){temp=a[i];a[i]=a[j];a[j]=temp;s++;}p++;}}printf("%d %d\n",s,p);printf("\n");for(i=0;i<299;i++){t=i;for(j=i+1;j<300;j++){if(b[t]<b[j])t=j;if(t!=i){temp=b[i];b[i]=b[t];b[t]=temp;s1++;}p1++;}}printf("%d %d\n",s1,p1);return 0;}运行结果:在这个题目中选择了交换法和选择法,首先要产生300个随机数,其次要懂得两种排序法的原理,然后进行编程,同时利用循环结构。
C语言课程设计报告-万年历1
课程设计题目:万年历实验题目:万年历程序的编写实验目的:综合运用所学的C语言知识解决一个比较实际的简单问题,侧重对数组、函数、指针、结构体和文件等相关内容的综合应用,使同学们能进一步熟悉掌握C语言的基本语法,进一步提升自己的编程能力并逐步培养编程思维,进而不断提高同学们解决问题的能力,并为以后的语言学习打下良好的基础。
实验要求:万年历设计主要功能包括:1、查询某年某月每一天对应星期几。
2、可以查询某年某月的上个月或是下个月的日历情况。
3、查询某年某月某日是这一年的第几天,并查询改天是星期几。
4、判断该年是闰年还是平年,判断这一年的生肖。
实现思路(要求有文字描述,并画出流程图):实现过程(要求有文字说明实现的过程,并对相应的代码添加注释):见程序(程序见后)后的解析。
运行时只要你输入年月日,你要的星系都会显示出来;如果想继续输入日期的话,只需按y就可以,祥结束按n就可以结束。
实验总结(分析程序的得与失):得:通过这次程序设计,更使我了解了编程序的严谨性,每个问题,每个不走都得有依据,不得盲目乱造,同时也让我获得了一点编写简单程序的能力,使自己平时在理论课中很多部明白的东西明白了好多,学会了好多语句的用法,比如会用‘y’ or‘ n’来决定程序是否要继续;怎么控制输出格式等等。
总之在这次程序设计中我学到了很多。
失:在编程序过程中有些函数的用法不怎么会用,偶尔会落下写简单的东西。
如‘,’‘;’等;同时在编写输出上下个情况及判断程序是否要继续的程序上花费了好多时间;函数的声明、调用既然不清楚,感到很惭愧。
实验的过失就是成功的阶梯,在过失中我也学到很多。
心得体会:我体会到了编程序的严谨性,也觉得如果我们要是熟悉课本所讲的内容,不怕麻烦,坚持不懈,我们一定可以将它实现的。
要有耐心,有时候很多的错误就是一个地方引起的,只要认真检查,一定能突破的,所以在以后的编程序是要细心,有耐心,人不断调试程序,直至最后成功。
万年历c语言课程设计
万年历 c语言课程设计一、课程目标知识目标:1. 学生能够理解万年历的基本概念,掌握日期与星期之间的转换关系。
2. 学生能够运用C语言中的数据类型、运算符和函数实现日期的计算。
3. 学生掌握结构体在C语言中的应用,并能利用结构体数组存储和管理大量日期数据。
技能目标:1. 学生能够运用所学知识,设计并编写一个简单的万年历程序,实现日期的输入、输出及查询功能。
2. 学生能够在编写程序的过程中,运用结构化编程思想,使代码具有可读性和可维护性。
3. 学生能够通过调试和修改程序,解决实际问题,提高编程解决问题的能力。
情感态度价值观目标:1. 学生培养对计算机编程的兴趣和热情,增强学习C语言的自信心。
2. 学生在团队合作中,学会互相帮助、沟通与协作,培养团队精神。
3. 学生通过编程实践,体会计算机科学在生活中的应用,认识到编程对解决实际问题的价值。
本课程针对高中年级学生,结合C语言编程知识,设计具有实用性和趣味性的万年历项目。
课程旨在让学生在实际编程过程中,掌握C语言的基本语法和编程技巧,提高解决问题的能力,同时培养团队协作和沟通能力。
通过本课程的学习,为学生奠定扎实的编程基础,激发他们对计算机科学的兴趣。
二、教学内容1. C语言基础语法复习:变量、数据类型、运算符、控制语句(条件语句、循环语句)。
2. 函数的定义与调用:重点复习函数的定义格式、参数传递、返回值。
3. 结构体的定义与应用:介绍结构体的概念、定义方法以及如何使用结构体数组。
4. 日期与星期的计算方法:讲解日期与星期之间的转换公式,引导学生理解算法。
5.万年历程序设计:a. 界面设计:设计简洁明了的用户界面,方便用户输入和查看日期。
b. 功能实现:实现日期的输入、输出、查询(按年月查询、按日期查询)。
c. 程序优化:讨论如何优化代码,提高程序运行效率。
d. 错误处理:学习如何处理用户输入错误、日期有效性验证等。
教学内容参考教材相关章节,按照以下进度安排:1. 第一课时:C语言基础语法复习,引入结构体概念。
年历c语言课程设计
年历c语言课程设计一、课程目标知识目标:1. 理解年历的基本概念,掌握C语言中结构体、数组的使用。
2. 学会使用循环、条件判断等基本控制结构完成年历的编写。
3. 掌握如何在C语言中实现日期的输入、输出和计算。
技能目标:1. 能够运用所学知识,独立完成一个简单的年历程序设计。
2. 培养学生的编程思维和问题解决能力,提高逻辑思维能力。
3. 提高学生在实际编程中调试和修改程序的能力。
情感态度价值观目标:1. 培养学生积极探究、合作交流的学习态度,增强学习兴趣。
2. 培养学生严谨、细心的编程习惯,树立正确的编程价值观。
3. 增强学生的团队协作意识,提高沟通与表达能力。
本课程针对高中年级学生,结合C语言课程特点,以年历程序设计为主题,旨在巩固学生所学C语言知识,提高编程实践能力。
课程目标具体明确,符合学生认知水平,注重培养学生的编程兴趣和团队协作能力,为后续深入学习奠定基础。
通过本课程的学习,学生将能够独立完成年历程序设计,并在实践中不断提高编程技能。
二、教学内容1. 复习C语言基本语法:变量、数据类型、运算符、控制结构(循环、条件判断)。
2. 结构体和数组的应用:介绍结构体定义和使用,数组存储日期信息。
- 结构体:定义日期结构体,包含年、月、日等信息。
- 数组:创建月份天数数组,实现日期计算。
3. 编写年历程序:- 输入年份,判断闰年和平年,输出对应月份天数。
- 使用循环和条件判断,打印出整年日历。
- 引导学生优化代码,提高程序执行效率。
4. 实践与拓展:- 学生独立完成一个年历程序设计,并进行调试和优化。
- 引导学生思考如何将年历功能进行拓展,如添加节假日信息、纪念日等。
5. 课程进度安排:- 第一课时:复习C语言基本语法,介绍结构体和数组应用。
- 第二课时:讲解年历程序设计思路,编写核心代码。
- 第三课时:学生实践,完成年历程序设计,并进行调试和优化。
- 第四课时:课程总结,拓展思考,展示优秀作品。
C语言课程设计万年历设计
C语言课程设计报告设计名称C语言课程设计专业班级姓名学号指导教师实习时间成绩目录一、设计目的 (2)二、设计内容 (3)三、详细设计说明 (4)四、软件使用说明 (6)五、设计总结(课程设计心得与体会) (10)六、附录1:参考文献 (11)七、附录2:部分程序清单(带有较详细的注释) (12)八、教师评语 (13)一、设计目的通过课程设计的实践环节的教学,可以加深学生对课堂所学基础知识的掌握与理解,提高学生对所学内容的综合运用能力;同时也可以通过查询相关资料,培养学生自学能力、接受新知识的能力,提高学习兴趣;增强学生程序设计能力,掌握编程技巧,并可培养学生实际上机调试程序的能力。
“理论与实践”相结合,使学生得到很好的锻炼,为以后学习、工作打下坚实的基础。
每个学生需要独立完成教师安排的设计题目或由学生自拟实际的设计题目,但自拟自拟题目须经指导教师批准方可生效。
二、设计内容1设计编写一个C程序—“万年历”。
2输入任一年将显示出该年的所有月份日期,对应的星期。
3 下一行显示星期,从周日到周六,中英文都可以。
4 下一行开始显示日期从1号开始,并按其是周几实际情况与上面的星期数垂直对齐。
5月份:中文英文都可以,注意闰年情况。
三、详细设计说明1判断是不是闰年(year%4!=0||year%100==0&&year%400!=0)满足条件就是平年,把一年中的所有月份分为四类(28,29,30,31)。
2求出一年中的第一天是周几(year +(year-1)/4-(year-1)/100+(year-1)/400)%7。
3 有指针数组存放十二个月的英文和星期的英文缩写。
4 用FOR循环输出各月份的日历5 界面说明四、软件使用说明1.主界面2.具体日期对应的星期3.判断是否是闰年4.输出某年全年日历五、设计总结(课程设计心得与体会)对C语言在编写程序时的用处有了更明确的认识,懂得了编写C程序的一般法方步骤。
c语言课程设计--万年历
万年历系统题目:万年历系统姓名:黄炼军学号:20070810505学院:计算机与通信学院专业:计算机科学与技术0705班指导老师:何英完成时间:2009年11月10日一、问题描述模仿Windwos的日历.1)日历显示功能。
能根据系统日期进行初始化,如果没有任何输入,则显示系统日期所在月份的月历。
2)日历查询、闰年判断功能。
输入日期进行查询,显示查询日期所在月份的月历,还将显示所在年份是否为闰年。
3)参数检查功能。
如果输入日期不合法,查询将被拒绝,并显示提示信息。
4)选做:通过键盘操作(如:光标上、下、左、右移动键,pageup、pagedown键)调整年份、月份和日期,并显示调整后的日期及月历。
二、问题分析对于要求1:难点在于判断星期,但根据蔡勒公式,可以很容易地有年月日推断出星期:nDay=year-1+(year-1)/4-(year-1)/100+(year-1)/400+nday;w=nDay%7;其中year:要查询的年份nday:从该年的一月一日起到该天的天数w:得出的星期数,w==0表示星期天。
在打印月历时,只要知道第一天的星期,就可以依次输入后面的日期,通过定长度输出日期,在遇到某天时星期六时,就换行输出,因此可以按照月历的格式输出。
对于初始输入当前月历,可以通过<time.h>中的time 和localtime函数取出系统时间进行初始化。
time_t timer;struct tm* gmt;time(&timer);gmt=localtime(&timer);gmt就是一个时间结构体,可以从中取出年月日。
对于要求2:闰年的判断,能被4整除但不能被100整除,或者能被400整除的年份为闰年,否则为平年。
日期的查询,就是直接打印改天所在月份的月历。
对于要求3:判断日期是否合法,可以先判断年月日是否有小于0的值,月和日是否有超出最大值12和31 ,如果通过此判断合法,再判断是否时闰年,如果时闰年,则判断二月份是否满足要求,闰年二月份不能超过29天,平年二月份不能超过28天。
课程设计用C语言设计一个年历系统
课程设计课程程序设计基础题目用C语言设计一个年历系统1 问题要求及任务描述1.1 题目要求用C语言设计一个年历系统1.2 主要任务年历系统首先对于输入的任一年,能够给出该年每月的日期及实际周几的对应情况,并与实际的星期数垂直对齐,如下表所示(当输入2004时显示如下):Input the year:2004The calendar of the year 2004.Januray 1 February 2============================== ==============================Sun Mon Tue Wed Thu Fri Sat Sun Mon Tue Wed Thu Fri Sat1 2 3 1 2 3 4 5 6 74 5 6 7 8 9 10 8 9 10 11 12 13 1411 12 13 14 15 16 17 15 16 17 18 19 20 2118 19 20 21 22 23 24 22 23 24 25 26 27 2825 26 27 28 29 30 31 29============================== ==============================March 3 April 4============================== ==============================Sun Mon Tue Wed Thu Fri Sat Sun Mon Tue Wed Thu Fri Sat1 2 3 4 5 6 1 2 37 8 9 10 11 12 13 4 5 6 7 8 9 1014 15 16 17 18 19 20 11 12 13 14 15 16 1721 22 23 24 25 26 27 18 19 20 21 22 23 2428 29 30 31 25 26 27 28 29 30============================== ==============================功能要求:⑴输入任一年将显示出该年的所有月份日期,对应的星期,输出的格式如上表要求(注意闰年情况);⑵输入任意日期(包括年、月、日,格式有yyy/mm/dd、dd/mm/yyyy、mm/dd/yyyy、和yyyy,mm,dd、mm,dd,yyyy、dd,mm,yyyy六种基本情况),要求能够显示出该日期是本年的哪一周,是星期几。
C语言万年历课程设计
天5小时46秒,为了使一年的天数为整数,将一年的天数定为365天,余下的时间积累起
来,四年就是23小时15分4秒,将近一天,把这一天加在某年的二月而成29天,该年称
为闰年,其它年称为平年。但四年加一天又多用了44分56秒,这个数积满400年为三天。
1600年3月1日星期几=(0+0/4+0+1+2)%7=3%7=星期三
2000年3月1日星期几=(0+0/4+0+1+2)%7=3%7=星期三
2001年3月1日星期几=(1+1/4+0+1+2)%7=4%7=星期四
2004年3月1日星期几=(4+4/4+0+1+2)%7=8%7=星期一
2008年3月1日星期几=(8+8/4+0+1+2)%7=13%7=星期六
黄河科技学院
课 题:万年历
姓 名:
学 号:
年级专业:
班 级:
指导老师:
院 系:
提交日期:2010年4月
通过C语言编程实现了一个万年历,能实现基本的万年历功能。通过本章的讲解 使读者能够明白万年历的实现原理和方法。 万年历的实现核心是要判断闰年和根据给定 的日期计算其对应的星期,并按照合适的方式输出日历•这都是本章向读者讲述的重点。 另外,还向读者讲述了怎样突出显示某个日期的方法,这会在实际应用中经常遇到。
1800年3月1日星期几=(18%4*5+0+0/4+0+1+2)%7=13%7=星期六(注意:1800年是
c课程设计年历显示
c 课程设计年历显示一、课程目标知识目标:1. 学生能理解年历显示的基本概念,掌握年、月、日之间的关系。
2. 学生能运用所学知识,自主编制简单年历,并正确显示年份、月份及日期。
3. 学生了解不同国家和文化中年历的表示方式,拓展知识视野。
技能目标:1. 学生能够运用数学运算,进行日期的计算,提高逻辑思维能力。
2. 学生通过小组合作,学会与他人沟通、协作,共同完成年历显示的设计。
3. 学生能够运用信息技术工具,如Excel等软件,进行年历的编制和展示。
情感态度价值观目标:1. 学生培养对时间管理的重视,树立珍惜时间的意识。
2. 学生在学习过程中,增强对中华传统文化的认识,培养民族自豪感。
3. 学生通过小组合作,培养团队精神,学会尊重和包容他人。
本课程针对小学四年级学生,结合数学、信息技术和传统文化等多学科知识,旨在提高学生的综合素养。
课程注重实用性,引导学生将所学知识运用到实际生活,激发学生的学习兴趣和积极性。
同时,课程充分考虑学生的年龄特点和认知水平,以生动形象的方式呈现年历知识,使学生在轻松愉快的氛围中学习。
通过本课程的学习,学生将能够掌握年历显示的基本技能,培养良好的时间观念和团队协作精神。
二、教学内容1. 年历基本知识:介绍年、月、日的关系,引导学生理解平年与闰年的区别,掌握各月份天数的规律。
2. 年历编制方法:讲解如何利用数学运算,进行日期的计算,教授简单的年历编制方法,如表格法和循环法。
3. 年历与文化:介绍中华传统文化中年历的起源、发展及特点,让学生了解不同民族的年历习俗,增强文化认同感。
4. 信息技术应用:指导学生运用Excel等软件,进行年历的编制和美化,培养学生的信息技术素养。
教学内容安排与进度:第一课时:年历基本知识,理解年、月、日关系,平年与闰年的判断。
第二课时:年历编制方法,学习表格法和循环法,进行实际操作练习。
第三课时:年历与文化,了解中华传统文化中年历的习俗,进行课堂讨论。
c语言课程设计日历
c 语言课程设计日历一、教学目标本课程的教学目标是使学生掌握C语言的基本语法、数据结构、算法和编程思想,培养学生具备基本的程序设计能力和良好的编程习惯。
具体分为以下三个部分:1.知识目标:学生能够理解并掌握C语言的基本语法、数据类型、运算符、表达式、语句、函数等基本概念;了解并掌握数组、指针、字符串、结构体等数据结构;理解并掌握基本排序算法和查找算法;了解并掌握程序设计的基本思想和方法。
2.技能目标:学生能够运用C语言编写简单的程序,解决实际问题;具备基本的程序调试和优化能力;具备良好的编程习惯和编程风格。
3.情感态度价值观目标:培养学生对计算机科学的兴趣和热情,提高学生分析问题、解决问题的能力,培养学生团队合作精神和自主学习能力。
二、教学内容教学内容主要包括C语言的基本语法、数据结构、算法和编程思想。
具体安排如下:1.C语言的基本语法:介绍C语言的基本数据类型、运算符、表达式、语句、函数等,使学生掌握C语言的基本编程结构。
2.数据结构:讲解数组、指针、字符串、结构体等数据结构的基本概念和应用,使学生能够熟练使用这些数据结构进行编程。
3.算法和编程思想:介绍基本的排序算法和查找算法,使学生掌握算法的基本原理和实现方法;讲解程序设计的基本思想和方法,培养学生具备良好的编程思维。
三、教学方法本课程采用讲授法、讨论法、案例分析法、实验法等多种教学方法,以激发学生的学习兴趣和主动性。
1.讲授法:通过讲解C语言的基本语法、数据结构、算法和编程思想,使学生掌握课程的基本知识。
2.讨论法:学生进行小组讨论,引导学生主动思考、提出问题和解决问题,培养学生的团队合作精神和沟通能力。
3.案例分析法:通过分析实际案例,使学生更好地理解C语言的应用和编程思想,提高学生的实际编程能力。
4.实验法:安排上机实验,让学生亲自动手编写程序,培养学生的实际编程能力和实验操作能力。
四、教学资源教学资源包括教材、参考书、多媒体资料和实验设备等。
c语言年历显示课课程设计
c语言年历显示课课程设计一、教学目标本课程的目标是让学生掌握C语言编程的基本技能,能够使用C语言编写简单的程序,以实现年历的显示功能。
通过本课程的学习,学生将了解C语言的基本语法和编程思想,培养逻辑思维能力和问题解决能力。
具体来说,知识目标包括:1.掌握C语言的基本语法和数据类型。
2.理解函数的定义和调用。
3.学习循环和条件语句的使用。
4.了解字符串操作和文件操作的基本方法。
技能目标包括:1.能够使用C语言编写简单的程序。
2.能够运用循环和条件语句实现年历的显示功能。
3.能够利用字符串操作和文件操作处理年历数据。
情感态度价值观目标包括:1.培养学生对编程的兴趣和热情。
2.培养学生解决问题的自信心和耐心。
3.培养学生团队合作和自主学习的意识。
二、教学内容本课程的教学内容主要包括C语言的基本语法、数据类型、函数、循环和条件语句、字符串操作和文件操作。
具体安排如下:1.第一章:C语言概述–介绍C语言的历史和发展–解释C语言的特点和优势2.第二章:基本语法和数据类型–讲解变量、常量的声明和赋值–介绍数据类型的定义和使用3.第三章:函数–讲解函数的定义和声明–演示函数的调用和返回值4.第四章:循环和条件语句–介绍循环语句的原理和用法–讲解条件语句的判断和执行5.第五章:字符串操作–讲解字符串的基本操作方法–演示字符串的输入和输出6.第六章:文件操作–介绍文件的概念和文件指针–讲解文件的读写和操作方法三、教学方法为了提高学生的学习兴趣和主动性,本课程将采用多种教学方法相结合的方式。
1.讲授法:教师通过讲解和示范,引导学生掌握C语言的基本概念和编程方法。
2.讨论法:教师学生进行小组讨论,鼓励学生提出问题和建议,促进学生之间的交流和合作。
3.案例分析法:教师提供实际的编程案例,学生通过分析和解题,培养解决问题的能力。
4.实验法:学生通过编写和运行程序,实践所学知识,巩固编程技能。
四、教学资源为了支持教学内容和教学方法的实施,我们将选择和准备以下教学资源:1.教材:《C程序设计语言》(K&R)2.参考书:《C Primer Plus》(Deitel)3.多媒体资料:教学PPT、视频教程4.实验设备:计算机、编程环境(如Visual Studio、Code::Blocks等)通过以上教学资源的使用,学生将能够更好地学习和实践C语言编程,提高编程技能和解决问题的能力。
c语言课程设计简易万年历
/**湖北师范学院信息工程1203班朱文峰**简易万年历* 1、输入年份,判断是否为闰年*2、输入年月日,判断改日为星期几*3、输入年份,打出12个月历,输入月份,打出该月的日历* 4、要求用多个函数实现*/#include<stdio.h>#include<stdlib.h>#include<windows.h>//每月的天数,闰年二月要加1int days[12]={31,28,31,30,31,30,31,31,30,31,30,31};//判断是否位闰年int isLeapYear(int year){if(year%4 == 0 && year%100 != 0 || year%400 == 0)return 1;elsereturn 0;}//判断某天为星期几int whichWeekday(int year, int month, int day){int weekday;//公式中要把1月和2月换成是上一年的13月和14月if (month == 1 || month == 2){month += 12;year -= 1;}//公式weekday=(day+2*month+3*(month+1)/5+year+year/4-year/100+year/400)%7;return weekday+1;}//打印某年某月的月历void yearMonth(int year, int month){int i,j=0;int weekday;//计算这个月第一天是星期几weekday = whichWeekday(year, month, 1);printf("\n%d年%d月\n",year,month);printf("------------------------------------------------\n");printf("星期一星期二星期三星期四星期五星期六星期天\n");if(isLeapYear(year) && month == 2)days[1] = days[1] + 1;printf("");for(i = 1; i < weekday; i ++)printf(" ");for(i = 0; i < 8 - weekday; i ++){printf("%6d", i+1);printf(" ");}printf("\n");for(i = 9-weekday; i <= days[month-1]; i ++,j++){if(j == 7){j = 0;printf("\n");}printf("%6d ", i);}printf("\n------------------------------------------------\n");}//输入年份,打出12个月历,输入月份,打出该月的日历void monthDay(int year){int i;char c;int month;for(i = 0; i < 12; i ++)yearMonth(year,i+1);printf("\n\n");printf("是否查看日历(y/n):");getchar();scanf("%c",&c);if(c == 'y'){printf("请输入月份:");scanf("%d", &month);yearMonth(year,month);}elseexit(0);}//主菜单void menu(){printf("-----------------------------------------------\n");printf(" ");printf("c语言课程设计-万年历\n\n");printf("***********************************************\n\n");printf("1、输入年份,判断是否为闰年\n");printf("2、输入年月日,判断该日为星期几\n");printf("3、输入年份,打出12个月历,输入月份,打出该月的日历\n\n");printf("***********************************************\n\n");}//判断是否继续void isContinue(){char c;printf("是否继续(y/n):");getchar();scanf("%c", &c);if(c == 'y')return;else{printf("");exit(0);}}//主函数void main(){int num;int year;int month;int day;int weekday;while(1){system("CLS");//清屏menu();printf("请输入对应操作:");scanf("%d", &num);switch(num){case 1:{printf("请输入年份:");scanf("%d", &year);if(isLeapYear(year))printf("%d年是闰年\n",year);elseprintf("%d年不是闰年\n");isContinue();break;}case 2:{printf("请输入年月日,以空格隔开:");scanf("%d%d%d", &year,&month,&day);weekday = whichWeekday(year, month, day);printf("这天是星期%d\n",weekday);isContinue();break;}case 3:{printf("请输入年份:");scanf("%d", &year);monthDay(year);isContinue();break;}default:{printf("您的输入有误");Sleep(1000);//延时一秒钟break;}}}}。
c万年历课程设计
c 万年历课程设计一、课程目标知识目标:1. 学生能够理解万年历的基本概念,掌握年、月、日的关系及换算方法;2. 学生能够运用所学的日期知识,正确编制简单的万年历;3. 学生了解我国农历及二十四节气的由来及特点。
技能目标:1. 学生通过实际操作,提高观察能力、分析能力和解决问题的能力;2. 学生能够运用万年历知识解决生活中的实际问题,如计算日期、安排活动等;3. 学生掌握基本的计算机或手工制作万年历的技能。
情感态度价值观目标:1. 学生培养对时间管理和珍惜时间的意识,树立时间观念;2. 学生在学习过程中,增强对我国传统文化的认同感和自豪感;3. 学生通过合作学习,培养团队协作能力和沟通能力,形成积极向上的学习态度。
课程性质:本课程为综合实践课程,结合数学、历史、文化等多学科知识。
学生特点:五年级学生具备一定的观察能力、分析能力和动手操作能力,对新鲜事物充满好奇心。
教学要求:教师应注重激发学生的学习兴趣,引导他们主动探究万年历知识,将理论与实践相结合,提高学生的综合运用能力。
同时,关注学生的情感态度价值观的培养,使他们在学习过程中形成正确的价值观。
通过分解课程目标为具体的学习成果,为后续的教学设计和评估提供依据。
二、教学内容1. 万年历的基本概念:介绍年、月、日的关系,引导学生理解闰年和平年的区别,掌握日期的换算方法。
教材章节:《数学》五年级下册第四章“年、月、日”2. 农历及二十四节气:讲解我国农历的起源、发展及特点,引导学生了解二十四节气的意义及农事活动。
教材章节:《传统文化》五年级下册第三章“我国的农历和节气”3. 万年历的制作:指导学生运用所学的日期知识,手工或使用计算机软件制作简单的万年历。
教材章节:《信息技术》五年级下册第四章“电子表格的应用”4. 实践活动:组织学生进行观察、记录和分析,了解日常生活中时间管理的重要性,提高珍惜时间的意识。
教材章节:《综合实践活动》五年级下册第二单元“时间管理”教学进度安排:第一课时:万年历的基本概念及换算方法第二课时:农历及二十四节气的学习第三课时:万年历制作方法的学习与实践第四课时:实践活动及成果展示教学内容注重科学性和系统性,结合教材章节,使学生在掌握万年历知识的同时,提高实践操作能力,培养正确的价值观。
c语言课程设计年历显示
c语言课程设计年历显示一、教学目标本课程的目标是让学生掌握C语言编程的基本技能,通过编写程序实现年历的显示。
学生将学习C语言的基本语法、数据类型、运算符、控制结构等知识,并能够运用这些知识解决实际问题。
通过本课程的学习,学生将培养编程思维和解决问题的能力,提高逻辑思维和团队合作能力。
具体来说,知识目标包括:1.掌握C语言的基本语法和结构。
2.理解数据类型、变量和运算符的概念及使用方法。
3.学习控制结构,能够编写循环和分支语句。
技能目标包括:1.能够使用C语言编写简单的程序。
2.能够利用控制结构实现年历的显示。
3.能够阅读和理解他人的代码,进行简单的代码调试和优化。
情感态度价值观目标包括:1.培养学生的编程兴趣,激发学习动力。
2.培养学生的问题解决能力和创新精神。
3.培养学生的团队合作意识和沟通能力。
二、教学内容本课程的教学内容主要包括C语言的基本语法、数据类型、运算符、控制结构等。
具体安排如下:1.第一章:C语言概述介绍C语言的发展历史、特点和基本语法。
2.第二章:数据类型和变量学习整型、浮点型、字符型等数据类型,以及变量的声明和赋值。
3.第三章:运算符和表达式掌握算术运算符、关系运算符、逻辑运算符等,并能够运用它们进行表达式计算。
4.第四章:控制结构学习条件语句(if-else)、循环语句(for、while)等控制结构,并能够运用它们实现年历的显示。
5.第五章:函数了解函数的定义和调用,学习常用的库函数,并能够编写简单的函数实现年历的显示。
三、教学方法本课程采用讲授法、案例分析法和实验法相结合的教学方法。
1.讲授法:教师通过讲解和示范,引导学生掌握C语言的基本语法和编程技巧。
2.案例分析法:教师通过分析典型代码案例,让学生理解控制结构的应用,并能够自己编写程序。
3.实验法:学生通过上机实验,动手编写代码,实现年历的显示,培养实际编程能力。
四、教学资源1.教材:《C语言程序设计》2.参考书:《C Primer Plus》3.多媒体资料:教学PPT、视频教程4.实验设备:计算机、编程环境(如Visual Studio、Code::Blocks等)以上教学资源将有助于学生更好地学习C语言编程,提高编程能力。
c语言课程设计桌面日历
c语言课程设计桌面日历一、教学目标本课程旨在通过学习C语言编程,使学生掌握编写桌面日历的基本技能。
具体目标如下:知识目标:使学生掌握C语言的基本语法、数据类型、运算符、控制结构等基础知识;理解面向对象编程的基本概念。
技能目标:培养学生使用C语言进行程序设计的能力,能够独立编写并调试简单的程序;培养学生使用集成开发环境进行编程的能力。
情感态度价值观目标:培养学生对编程的兴趣和热情,提高学生的问题解决能力,培养学生的创新思维。
二、教学内容本课程的教学内容主要包括C语言的基本语法、数据类型、运算符、控制结构等基础知识,以及面向对象编程的基本概念。
具体安排如下:第1-2周:C语言的基本语法、数据类型、运算符、控制结构;第3-4周:函数、数组和指针;第5-6周:面向对象编程;第7-8周:项目实践,编写桌面日历。
三、教学方法本课程将采用讲授法、案例分析法和实验法进行教学。
在讲授基础知识的同时,通过案例分析使学生理解面向对象编程的概念,并通过实验法让学生动手编写程序,巩固所学知识。
四、教学资源教材:《C程序设计语言》参考书:《C Primer Plus》多媒体资料:教学PPT、视频教程实验设备:计算机、编程环境五、教学评估本课程的评估方式包括平时表现、作业和考试三个部分,各部分所占比例分别为30%、30%和40%。
平时表现主要考察学生的课堂参与度、提问和回答问题的积极性等;作业主要考察学生对知识点的理解和应用能力;考试主要考察学生的知识掌握程度和编程能力。
评估方式客观、公正,能够全面反映学生的学习成果。
六、教学安排本课程的教学进度共分为8周,每周安排2课时,共计16课时。
教学时间和地点安排如下:第1-2周:C语言的基本语法、数据类型、运算符、控制结构;每周一下午2课时,教室101。
第3-4周:函数、数组和指针;每周二下午2课时,教室101。
第5-6周:面向对象编程;每周一下午2课时,教室101。
第7-8周:项目实践,编写桌面日历;每周二下午2课时,教室101。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
万年历的C++实现1、课程设计目的编写具有以下功能的C++程序:(1)、输入一个年份,输出是在屏幕上显示该年的日历。
假定输入的年份在1940-2040年之间。
(2)、输入年月,输出该月的日历。
(3)、输入年月日,输出距今天还有多少天,星期几,是否是公历节日。
要求该程序能提供日历的一些基本功能,且方便管理和操作,易于扩充2、需求分析现在的软件市场的确有各种各样的日历软件可供我们选择,这些软件大多含有其他的一些的功能,真正方便快捷的日历软件却并不多,因此设计一个能真正服务大家的日历程序是有必要的。
3、设计思路(1)、在屏幕上输出某一年的日历。
考虑到程序有三个主要功能模块,于是运用了类的相关知识,建立一个calendar.h的头文件。
由于程序提供1940年以后年份的服务,因此首先要确定1940年1月1号为星期几,然后以此为基准点确定该天以后的日历,对于功能(1),需要推出一个算法,如下:k的初值为2,test=((year-1940)/4*5+((year-1940)%4==0?0:((year-1940)%4+1)))%7+2;k=test%7==0?7:test%7;//k=0表示星期天,test为一中间变量,用来确定1940年以后每一年的1月1号为星期几,这样更方便输出每一年的日历,而且在程序中的循环过程也大大提供程序运行的效率。
因为在日历里面,星期是连续不断地,七天一循环,所以在整个程序里面需要定义一个变量代表星期,更加方便月与月之间的联系,由于需要用到函数,所以又把该变量定义指针变量,这样更加方便操作,在后面的程序,有许多的变量都需要通过指针来达到更加高效的操作,具体见程序源代码。
(2)、输入年月,在屏幕上输出该月的日历。
同上面一样,为了要方便输出某一月份的日历,就要先确定该月的第一天为星期几,这样才比较方便,这样有需要一个算法,如下:for(int m=1;m<*ymonth;m++)for(intj=1;j<=(m!=2?month_numble[m-1]:(*year%4==0?29:28));j++){*k=*k%7;*k+=1;}for(int h=1;h<*k;h++)cout<<"\t";以上算法是用在自定义函数里面,因此有些地方用到指针,而且在确定月份时,还要注意区别是否为闰年二月。
(3)、输入年月日,输出距今天还有多少天,星期几,是否是公历节日。
通过上面两个子程序就可以实现输入的这一天为星期几,至于是否为公历节日,只需事先录入一些公历节日的具体日期,然后再程序里通过if语句就可以实现。
输出距离今天有多少天,这就需要这就需要程序能够读取系统时间,因此要用到windows.h头文件,而且这同样需要一个算法,如下:intyear_num,ymonth_num=0,day_num=0,tyear_num,tmonth_num=0,tday_num=0,fomer_num,today_num;year_num=(*year-1940)/4*(366+365*3)+((*year-1940)%4==0?0:((*year-1940)%4*365+1));for(int i=0;i<*month1-1;i++)for(int j=1;j<=(i!=1?month_numble[i]:(*year%4==0?29:28));j++)ymonth_num+=1;for(int i=1;i<*day1;i++)day_num+=1;fomer_num=year_num+ymonth_num+day_num;//从1940年1月1号到这一天的天数tyear_num=(sys.wYear-1940)/4*(366+365*3)+((sys.wYear-1940)%4==0?0:((sys.wYear-1940)%4*365+1));for(int i=0;i<sys.wMonth-1;i++)for(int j=1;j<=(i!=1?month_numble[i]:(sys.wYear%4==0?29:28));j++)tmonth_num+=1;for(int i=1;i<sys.wDay;i++)tday_num+=1;today_num=tyear_num+tmonth_num+tday_num;//从1940年1月1号到今天的天数(具体请见程序源代码)。
在源里面为了满足功能模块的需要,选择了switch—case语句,并且采用可库函数exit(0),退出程序,是的程序更加方便操作。
为了使程序在错误输入时不会崩溃,因此在功能模块选择时采用了ASCII码。
4、运行流程5、程序源代码Calendar.h#include"iostream"#include"windows.h"//获取系统时间#include"string"void year();void ymonth();void day();万年历.cpp#include"calendar.h"using namespace std;void main(){char menu_choose();while(1){int choice=menu_choose()-48;switch(choice){case 1:year(); break;case 2:ymonth();break;case 3:day(); break;case 4:exit(0); //退出程序}}}char menu_choose(){char choice;cout<<"1.输出该年日历\n";cout<<"2.输出该年该月的日历\n";cout<<"3.输出距离今天还有多少天,为星期几,是否为公历节日\n";cout<<"4.退出程序\n";cout<<"请选择功能模块,选择数字1——4:";while(1){cin>>choice;if((choice+0)>=49&&(choice+0)<=52)break;elsecout<<"输入的数字有误,请重新输入1——4:";}return choice;}Year.cpp#include"calendar.h"//#include<iostream>using namespace std;void yue(int i,int*k,int*month_numble,int*year);void year(){int year;while(1){cout<<"请输入要查看的年份:";cin>>year;if(year>=1940){int month_numble[12]={31,29,31,30,31,30,31,31,30,31,30,31}; int month=1,k=2,test;//k=2表示对应的天为星期一,1940年1月1号为星期一,以这一天为基准确定之后的日历test=((year-1940)/4*5+((year-1940)%4==0?0:((year-1940)%4+ 1)))%7+2;k=test%7==0?7:test%7;//确定每年的第一天为星期几for(int i=0;i<12;i++){switch(month+i){case 1: yue(i,&k,month_numble,&year);break;case 2: yue(i,&k,month_numble,&year);break;case 3: yue(i,&k,month_numble,&year);break;case 4: yue(i,&k,month_numble,&year);break;case 5: yue(i,&k,month_numble,&year);break;case 6: yue(i,&k,month_numble,&year);break;case 7: yue(i,&k,month_numble,&year);break;case 8: yue(i,&k,month_numble,&year);break;case 9: yue(i,&k,month_numble,&year);break;case 10:yue(i,&k,month_numble,&year);break;case 11:yue(i,&k,month_numble,&year);break;case 12:yue(i,&k,month_numble,&year);break;}}break;}elsecout<<"输入的年份不在范围之内,请输入1940及以后的年份。
"<<endl;}}void yue(int i,int*k,int*month_numble,int*year)//函数实现输出每月的日历{cout<<"======================="<<i+1<<"月======================="<<endl<<endl;cout<<"日"<<"\t"<<"一"<<"\t"<<"二"<<"\t"<<"三"<<"\t"<<"四"<<"\t"<<"五"<<"\t"<<"六"<<endl;for(int h=1;h<*k;h++)cout<<"\t";//控制每月1号从对应的星期几开始输出for(intj=1;j<=(i!=1?month_numble[i]:(*year%4==0?29:28));j++ )//区分平年和闰年{if(j%7!=(8-*k)%7)cout<<j<<"\t";elsecout<<j<<endl;}for(intj=1;j<=(i!=1?month_numble[i]:(*year%4==0?29:28));j++ ){*k=*k%7;*k+=1;}cout<<endl<<endl<<endl;}Ymonth.cpp#include"calendar.h"void yue1(int*k,int*month_numble,int*year,int*ymonth); using namespace std;void ymonth(){int year,ymonth,k=2,test;while(1){cout<<"请输入要查看的年份:";cin>>year;if(year>=1940){int month_numble[12]={31,29,31,30,31,30,31,31,30,31,30,31}; //k=2表示对应的天为星期一,1940年1月1号为星期一,以这一天为基准确定之后的日历test=((year-1940)/4*5+((year-1940)%4==0?0:((year-1940)%4+1)))%7+2;k=test%7==0?7:test%7;//确定每年的第一天为星期几while(1){cout<<"请输入要查看的月份:";cin>>ymonth;if(ymonth>=1&&ymonth<=12){yue1(&k,month_numble,&year,&ymonth);break;}elsecout<<"输入的月份不在范围之内,请输入正确的月份。