C语言课程设计万年历 完整版

合集下载

C_课程设计说明书_万年历

C_课程设计说明书_万年历

数学与计算机学院课程设计说明书课程名称: 计算机科学与技术程序设计语言-课程设计课程代码: 8404091题目: 万年历系统年级/专业/班: 09级软件工程1班学生姓名: 易晓学号: 31200908061117 开始时间:2010 年12月24日完成时间:2011 年01月 06 日课程设计成绩:指导教师签名:年月日目录1 引言 (1)1.1问题的提出 (1)1.2国内外研究的现状 (1)1.3任务与分析 (1)2 程序的主要功能 (3)2.1显示功能 (3)2.2自动翻页功能 (3)2.3查询功能 (3)2.4帮助功能 (3)2.5退出功能 (3)3 程序运行平台 (4)4 总体设计图4.1流程图 (5)5 程序代码明细 (6)6 模块分析 (11)6.1系统日期模块 (11)6.2打印模块 (11)6.3闰年判断模块 (12)6.4查询模块 (12)6.5菜单模块 VOID MAIN M ENU(INT YEAR,INT MONTH,INT DAY)//主菜单 (12)6.6关键代码 (13)7 系统测试首先进入VC++6.0,打开工程PERSON.DSW,然后进入源程序,接着选择BUILD 下的EXECUTE PERSON.EXE即可,也可以不打开工程,直接双击PERSON文件夹下的DEBUG 或RELEASE子文件夹下的PERSON.EXE文件即可运行程序。

7.1 进入程序 (14)8 结论 (17)1 引言1.1 问题的提出万年历是我国古代传说中最古老的一部太阳历。

为纪念历法编撰者万年功绩,便将这部历法命名为“万年历”。

而现在所使用的万年历,实际上就是记录一定时间范围内(比如100年或更多)的具体的日期的年历,方便有需要的人查询使用。

怎样在电脑上显示万年历以便查询,是一个很普遍的需求。

附:万年历算星期几:只要随便说出公元几几年几月几日就可以马上算出是星期几。

只要计算出日的代码,月份代码,年份代码。

C语言课程设计 万年历

C语言课程设计 万年历

计算机基础课程设计C语言设计报告题目:万年历学院:电气与电子工程学院专业:自动化班级:070304姓名:于洋指导教师:周丽娟设计日期:一、设计题目及来源万年历,来自网上搜索。

二、功能isLeap()判断输入数据是否是闰年;maxDay()判断某年某月最多天数;eachYearTotal ()判断这一天是该年的第几天;week判断某年某月某日的编号;output()输出该天星期几;display()显示月历;check()检查有效性;display1()输出年历;display2()输出月历;display3()输出日历;getMenu()调菜单;三、流程图#include<stdio.h>#include<stdlib.h>int isLeap(int year);int maxDay(int year,int month);int eachYearTotal(int year,int month,int day); int week(int year,int month,int day);char *chineseWeek(int number);void output(int year,int month,int day);void display(int year,int month);int check(int year,int month,int day);void display1(int year);void display2(int year,int month);void display3(int year,int month,int day); void getMenu();void main(){int year,month,day,flag,select;while(1){getMenu();printf("shu ru xuan ze: ");fflush(stdin);scanf("%d",&select);fflush(stdin);switch(select){case 1:do{printf("shu ru nian: ");scanf("%d",&year);flag=check(year,1,1);if(flag==0){printf("shu ru wu xiao\n");}}while(flag==0);display1(year);break;case 2:do{printf("shu ru nian yue: ");scanf("%d%d",&year,&month);flag=check(year,month,1);if(flag==0){printf("shu ru wu xiao\n");}}while(flag==0);display2(year,month);break;case 3:do{printf("shu ru nian yue ri: ");scanf("%d%d%d",&year,&month,&day);flag=check(year,month,day);if(flag==0){printf("shu ru wu xiao\n");}}while(flag==0);display3(year,month,day);break;case 4:exit(0);default:printf("shu ru you wu!\n\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;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){intnumber=(year-1)+(year-1)/4-(year-1)/100+(year-1)/400+eachYearTotal(year,month,d ay);number%=7;return number;}char *chineseWeek(int number){switch(number){case 0:return "Sunday";case 1:return "Monday";case 2:return "Tuesday";case 3:return "Wednesday";case 4:return "Thursday";case 5:return "Friday";case 6:return "Saturday";default:return "error";}}void output(int year,int month,int day){int number=week(year,month,day);printf(" gong yuan%d nian%d ue%d ri%10s\n\n",year,month,day,chineseWeek(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"," Sunday "," Monday "," Tuesday "," Wednesday "," Thursday "," Friday "," Saturday ");for(i=0;i<number;i++){printf(" ");}while(j<=max){printf("%4d",j);if(i%7==6){printf("\n");}i++;j++;}printf("\n\n");}int check(int year,int month,int day){if(year<0||month<1||month>12||day<1||day>maxDay(year,month))return 0;elsereturn 1;}void display1(int year){int i;printf("\n");for(i=1;i<=12;i++){printf(" gongyuan%d nian%d yue\n\n",year,i); display(year,i);}}void display2(int year,int month){printf("\n gongyuan%d nian%d yue\n\n",year,month); display(year,month);}void display3(int year,int month,int day){printf("\n");output(year,month,day);display(year,month);}void getMenu(){printf("1.nianli\t2.yueli\t3.rili\t4.tuiqu\n");}。

C语言课程设计万年历 完整版

C语言课程设计万年历  完整版

目录一引言 (2)二系统功能和数据说明 (3)一)功能简介 (3)二)程序中的数据说明 (3)三程序总体设计及流程图 (4)一)应用到的c语言 (4)二)程序的总框架 (5)四功能模块设计及调试 (5)一)算法说明 (5)1.总天数的算法 (5)2.计算输入日期是星期几 (6)3.对输入信息的汇总 (8)4..界面的控制 (10)二)调试结果 (11)五程序清单 (12)六结束语 (17)一引言通过大一上学期对C语言的学习,了解到了很多C语言的相关知识。

学习的过程有很多困惑但是当自己能够独立的看懂,能过独立的完成一个简单的程序时,心中就会收获无限的喜悦和成就感。

我可以里哟哦那个它看懂一些简单的程序,编写一些简单的计算程序,更多的是学会了一种思想——编程,它让我在去思考很多日常生活中的事物是怎么样通过一个个小小的函数实现功能的,激发我对探究的兴趣。

C语言是近年在国内外得到迅速推广应用的一种语言。

C语言功能丰富,表达能力强,使用灵活方便,应用面广,目标程序效率高,可移植性好,既具有高级语言的优点,又具有低级语言的许多特点。

因此,C语言特别适合于编写各种软件。

在这次的课程设计中我将把日常生活中最经常接触的——日期的查询利用C语言的程序编成一个简单的日历。

通过这个小小的日历可以实现很多功能。

在程序中你能看到很多熟悉的C语言关键字,同时也加入了很多自己课外了解到的一些关键字。

在不断的调试中最终才获得最为完整的程序。

接下来就是我的C 语言课程设计的具体内容来了二系统功能和数据说明(一)功能简介在我们的日常生活中能接触到很多不同类型的日历,在日历上我们通常希望它能简介明了的给我们最想要的日期信息。

在我的万年历当中,就是将日历,月历做的简单明了,很方便我们的使用。

下面是它要实现的一些基本功能:用C语言编写万年历1、输入年份,判断是否为闰年2、输入年月日,判断改日为星期几3、输入年份,打出12个月历,输入月份,打出该月的日历4、要求用多个函数实现[名称]万年历[修改]1、对输入的日期进行容错处理2、增加和修改为英文的月份和星期显示3、采用指针形式的weeks和month数组(二)程序中的数据说明①int days[12] = {31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31};这是定义的关于每个月天数的数组,根据大小月以及二月分的特殊情况将每个月的天数最为数组中的元素存入数组当中。

万年历系统——C语言完整版

万年历系统——C语言完整版

实验十九:编写一个万年历系统1.设计目的:从实验的角度来看,这次课程设计一方面可以让自己巩固并加深对C语言程序设计知识的理解,掌握和提高C语言编程和程序的基本调试的基本技能,进一步理解和运用结构化程序的思想和方法;另一方面,可以让自己在面对一个全新的问题时,学会如何思考,如何寻找问题的关键,从而提升自己的能力。

2.总体设计:1.、当前页以系统当前日期的月份为准,显示当前月的每一天(显示出日及对应的星期几);2、当系统日期变到下一个月时,系统自动翻页到下一月。

3.调试与测试:4.源程序清单和执行结果:#include <stdio.h>#include <conio.h>#include <stdlib.h>#include <time.h>int leap(int year ){if ((year %4 == 0) && (year % 100 != 0)|| (year % 400 == 0)){return 1;}return 0;}void show(int year,int month,int date,int sec,int mini,int hour) {const char month_str[][4]={"","Jan","Feb","Mar","Apl", "May","Jun","Jul","Aug","Sep","Oct","Nov","Dec"};const int month_day[]={0,31,28,31,30,31,30,31,31,30,31,30,31}; int i,j,wdays,mdays,days;for(i=1,days=0;i<year;i++){if(leap(i)){days += 366;}else{days += 365;}}for(i=1;i<month;i++){if(i==2 && leap(year)){days+=29;}else{days+=month_day[i];}}printf(" %s.%d.%d %d:%d:%d \n",month_str[month],date,year,hour,mini,sec);printf(" 一二三四五六日\n");wdays = days % 7;for( j = 0; j < wdays; j++){printf(" ");}if(month == 2 && leap(year)){mdays=29;}else{mdays= month_day[month];}for(i=1;i<=mdays;i++){if( i > 1 && days % 7 == 0 ){Printf(“\n”);printf("\n");}printf("%4d",i);days=days+1;}printf("\n---------------------------\n\n\n");}void main(){time_t rawtime;struct tm *info;int year,month,date,sec,mini,hour; char ch;time ( &rawtime );info = localtime ( &rawtime );year =info->tm_year + 1900; month =info->tm_mon + 1;date =info->tm_mday;hour =info->tm_hour;mini =info->tm_min;sec =info->tm_sec;while(1){show(year,month,date,sec,mini,hour); printf("↑......上一年\n\n");printf("↓......下一年\n\n");printf("←....前一个月\n\n");printf("→....后一个月\n\n");printf("Esc.......退出\n\n");ch=getch();switch(ch){case 27://Ecsexit(0);case -32://Navigatorch=getch();if(ch==77){//Rightyear+=(month==12)?1:0;month=month%12+1;}else if(ch==75){//Leftyear-=(month==1)?1:0;month=(month-2+12)%12+1;}else if(ch==72) {//Upyear--;}else if(ch==80) {//Downyear++;}system("cls"); }}}。

(完整版)C语言万年历

(完整版)C语言万年历
C
说明部分
在TC或VC6.0中编译程序,编译成功后,通过命令行向编译生成的可执行文件(.exe)传递参数,在命令行中输入该执行文件的路径名称,然后再输入传入的参数,回车,就会显示出运行结果,效果如图1.1所示。
图1.1万年历运行界面
代码部分
#include <stdio.h>
main(int a,char **date)
}
if (day<0||day>month)
{
printf ("\n ERROR! the entered DAY is invalid\n");
exit (0);
}
week=(dy+dm+day-1+6)%7;
if(week<0)
week+=7;
if (day>0) /***判定查看类型***/
{
if (d==-1) year=year*10+(date[1][i]-'0');
if (d==0) month=month*10+(date[1][i]-'0');
if (d==1) day=day*10+(date[1][i]-'0');
i++;
}
if (month<1||month>12)/*若月份传入错误数字*/
else
d=(year-2000)/4-(year-2000)/100+(year-2000)/400;
dy=(year-2000)+d; /***该年1月1号到2000年1月1号的"星期差" ***/

C语言课程设计 万年历

C语言课程设计 万年历

2.课程设计任务与要求:
任务 设计题目从任务书所列选题表中选取,每人 1 题。 要求: 1、在处理每个题目时,要求从分析题目的需求入手,进行合理的模块设计,定义正 确函数和自定义数据类型 (如结构体类型) 、 编制上机程序和上机调试等若干步骤完成题 目,最终写出完整的分析报告。前期准备工作完备与否直接影响到后序上机调试工作的 效率。在程序设计阶段应尽量利用已有的标准函数,加大代码的重用率。 2、设计的题目要求达到一定工作量(200 行以上代码) ,并具有一定的深度。 3、 程序设计语言推荐使用 C, 程序书写规范, 源程序需加必要的注释并且缩进一致。 4、每位同学需提交可独立运行的程序; 5、每位同学需独立提交设计报告书(每人一份) ,要求编排格式统一、规范、内容 充实,不少于 10 页(代码不算) ; 6、课程设计实践作为培养学生动手能力的一种手段,单独考核。
淮 海 工 学 院 计算机工程学院
课程设计报告
设计名称: 选题名称: 姓 名: 薛思雨 软件工程 计算机工程学院 2011.8.29~2011.9.9 软件工程实验室、教室 C 语言课程设计
万年历程序

号:
511020825 D 软件 101
专业班级: 系 (院) : 设计时间: 设计地点:
指导教师评语:
/*主函数*/
/*菜单选择 */
C 语言课程设计报告

3
页,共 14 页
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); } else system("cls"); printf(" 输入无效,重新输入!\n"); break; case 2: /*当选择为 2 显示月历*/ printf(" 月历显示:输入年月(如 2011,9):"); scanf("%d,%d",&year,&month); if(year>0&&year<10000&&month>=1&&month<=12) { display2(year,month); printf(" 提示 按←:上个月 按→:下个月 按其他键:返回菜单\n\n"); setDay2( year,month, day); } else system("cls"); printf(" 输入无效,重新输入!\n"); break; case 3: /*当选择为 3 时显示日期*/ printf(" 日期显示:输入年月日(比如 2011,9,13):"); 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); } else system("cls"); printf(" 输入无效,重新输入!\n"); break; case 4: exit(0); default: /*当输入其他数字时,输入无效,重新输入*/

C语言---万年历(大一时的课程设计)

C语言---万年历(大一时的课程设计)

#include<stdio.h>#include<stdlib.h>#include<conio.h>#include<time.h>#define leap(i) (i%400==0||i%4==0&&i%100!=0) /*判断是否为闰年*/#define main_printf printf("'S':上一月'F':下一月'E':下一年'D':上一年\n'空格键':手动输入'Backspace':返回系统时间\n'ESC':退出\t '回车键':开启日历\n")/*操作提示*/#define days(year,month)((month==4||month==6||month==9||month==11)?30:( (month!=2)?31:(year%400 ==0||year%4==0&&year%100!=0)?29:28))/*判断一个月有多少天*/#define head_place((timeinfo->tm_wday-(timeinfo->tm_mday%7-1)>=0)?(timeinfo->tm_wday -(timeinfo->tm_mday%7-1)):(timeinfo->tm_wday+(7-timeinfo->tm_mday% 7+1)))/*计算当月的头一天为星期几*/#define type_time time_t nowtime;struct tm *timeinfo;/*定义时间类型*/#define get_time (time( &nowtime ),timeinfo = localtime( &nowtime ))/*获得时间信息*/#define update_time ( now.day=timeinfo->tm_mday ,now.month=timeinfo->tm_mon+1 , now.year=timeinfo->tm_year+1900)/*更新当前时间*/struct date /*时间结构体*/{short year;short month;short day;}now, /*当前的时间*/check; /*查看的时间*/char move_relate[13]={0, 3,0,3, 2,3,2, 3,3,2, 3,2,3}; //每个月的头一天与下个月的头一天的水平距离//################################################### #################################################### ###//################################################### #################################################### ###voidinput()//----------------------------------------------------------------------------输入需要查看的月份{char inspect; //用于检查是否正确录入printf( "-----请输入需要查看的日期: '4位年份-2位月份' \n""\n""-----例如: %04d-%02d\n\n",now.year,now.month );//==================================================== ==================//====================循环,直到正确录入为止=============================while( rewind(stdin),(scanf("%4d-%2d%c",&check.year,&check.month,&inspect)!=3)||(check.year<0||check.year>10000)||(check.month<0||check.month>12)||inspect!=10)printf("请以正确的格式输入,如:%04d-%02d ( 0<=年份<=9999 , 0<月份<=12 )\n",now.year,now.month);}//################################################### #################################################### ######//################################################### #################################################### ######intcount()//---------------------------------------------------------------------------计算查看月份的头一天位置{int months= ( check.year - now.year )*12 + ( check.month - now.month ); /*月份之差*/int tally=0; /*计算两年份间的闰年数*/int i=0;int move=0; /*累计每个月头一天的偏移量*/type_time; //定义时间类型get_time; //获得时间信息//==================================================== =============================//=============================所查看日期在系统时间之后============================if(months>0){for(i=now.year;i<=check.year;i++) /*计算两年份间的闰年数*/{if(leap(i)) tally++;}if(check.month<=2&&leap(check.year)) tally--; //减去未涉及2月份的闰年if( now.month>2&&leap(now.year) ) tally--;move=(1)*(months/12) + tally; //每过一个非闰年,同一个月的头一天向后移一位for(i=0;i<months%12;i++){move+=move_relate[(i+now.month<=12)?i+now.month:i+now.month-12];//计算剩余各月份头一天的偏移总和}}//==================================================== ==============================//==============================所查看日期在系统时间之前============================else if(months<0){months=-months;for(i=check.year;i<=now.year;i++) /*计算两年份间的闰年数*/{if(leap(i)) tally++;}if(check.month>2&&leap(check.year)) tally--;//减去未涉及2月份的闰年,每包含一个闰年需向前推进一位if( now.month<=2&&leap(now.year) ) tally--;move=(-1)*(months/12) - tally; //每回移一个非闰年,同一个月的头一天向前移一位for(i=months%12;i>0;i--){move-=move_relate[ (now.month-i>=1)?now.month-i:12+(now.month-i) ];//计算剩余各月份头一天的偏移总和}}move+=head_place;move%=7;return (move>=0)?move:7+move;}//################################################### #########################################################//################################################### #################################################### #####void output(intstart_place)//-----------------------------------------------------------//输出需要查看的月份{int i,j,n,under_n;int record=7;int day=days(check.year,check.month); //判断该月所含有的天数;type_time; //定义时间类型get_time; //获得时间信息//==================================================== =======================================//======================================标题&logo========================================== system("cls");printf("万年历。

C语言课程设计报告-万年历1

C语言课程设计报告-万年历1

课程设计题目:万年历实验题目:万年历程序的编写实验目的:综合运用所学的C语言知识解决一个比较实际的简单问题,侧重对数组、函数、指针、结构体和文件等相关内容的综合应用,使同学们能进一步熟悉掌握C语言的基本语法,进一步提升自己的编程能力并逐步培养编程思维,进而不断提高同学们解决问题的能力,并为以后的语言学习打下良好的基础。

实验要求:万年历设计主要功能包括:1、查询某年某月每一天对应星期几。

2、可以查询某年某月的上个月或是下个月的日历情况。

3、查询某年某月某日是这一年的第几天,并查询改天是星期几。

4、判断该年是闰年还是平年,判断这一年的生肖。

实现思路(要求有文字描述,并画出流程图):实现过程(要求有文字说明实现的过程,并对相应的代码添加注释):见程序(程序见后)后的解析。

运行时只要你输入年月日,你要的星系都会显示出来;如果想继续输入日期的话,只需按y就可以,祥结束按n就可以结束。

实验总结(分析程序的得与失):得:通过这次程序设计,更使我了解了编程序的严谨性,每个问题,每个不走都得有依据,不得盲目乱造,同时也让我获得了一点编写简单程序的能力,使自己平时在理论课中很多部明白的东西明白了好多,学会了好多语句的用法,比如会用‘y’or‘n’来决定程序是否要继续;怎么控制输出格式等等。

总之在这次程序设计中我学到了很多。

失:在编程序过程中有些函数的用法不怎么会用,偶尔会落下写简单的东西。

如‘,’‘;’等;同时在编写输出上下个情况及判断程序是否要继续的程序上花费了好多时间;函数的声明、调用既然不清楚,感到很惭愧。

实验的过失就是成功的阶梯,在过失中我也学到很多。

心得体会:我体会到了编程序的严谨性,也觉得如果我们要是熟悉课本所讲的内容,不怕麻烦,坚持不懈,我们一定可以将它实现的。

要有耐心,有时候很多的错误就是一个地方引起的,只要认真检查,一定能突破的,所以在以后的编程序是要细心,有耐心,人不断调试程序,直至最后成功。

#include<stdio.h>struct //定义包含年月日数组结构体{int year;int month;int day;}date;int main() //主函数{void print(int,int); //函数的声明int dobb(int); //函数的声明int date1(int,int,int); //函数的声明int rili(); //函数的声明rili(); //函数的调用return 0;}int rili() //定义函数{int days; //定义整型变量int a,b; //定义整型变量char z; // 定义字符变量printf("+++++++++++++++++++++++++++++++++++++++++++++++++++++\n \n"); // 输出头的格式printf(" 万年历\n\n");printf("+++++++++++++++++++++++++++++++++++++++++++++++++++++\n ");printf("功能有:\n"); printf("\t");printf("1.查询某年某月某天对应星期几;\n\t2.查询某年某月上下个月情况;\n\t3.显示该日子是该年的第几天,并查询改天星期几;\n\t4.判断该年是平年还是闰年以及生肖等。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

目录一引言 (2)二系统功能和数据说明 (3)一)功能简介 (3)二)程序中的数据说明 (3)三程序总体设计及流程图 (4)一)应用到的c语言 (4)二)程序的总框架 (5)四功能模块设计及调试 (5)一)算法说明 (5)1.总天数的算法 (5)2.计算输入日期是星期几 (6)3.对输入信息的汇总 (8)4..界面的控制 (10)二)调试结果 (11)五程序清单 (12)六结束语 (17)一引言通过大一上学期对C语言的学习,了解到了很多C语言的相关知识。

学习的过程有很多困惑但是当自己能够独立的看懂,能过独立的完成一个简单的程序时,心中就会收获无限的喜悦和成就感。

我可以里哟哦那个它看懂一些简单的程序,编写一些简单的计算程序,更多的是学会了一种思想——编程,它让我在去思考很多日常生活中的事物是怎么样通过一个个小小的函数实现功能的,激发我对探究的兴趣。

C语言是近年在国内外得到迅速推广应用的一种语言。

C语言功能丰富,表达能力强,使用灵活方便,应用面广,目标程序效率高,可移植性好,既具有高级语言的优点,又具有低级语言的许多特点。

因此,C语言特别适合于编写各种软件。

在这次的课程设计中我将把日常生活中最经常接触的——日期的查询利用C语言的程序编成一个简单的日历。

通过这个小小的日历可以实现很多功能。

在程序中你能看到很多熟悉的C语言关键字,同时也加入了很多自己课外了解到的一些关键字。

在不断的调试中最终才获得最为完整的程序。

接下来就是我的C 语言课程设计的具体内容来了二系统功能和数据说明(一)功能简介在我们的日常生活中能接触到很多不同类型的日历,在日历上我们通常希望它能简介明了的给我们最想要的日期信息。

在我的万年历当中,就是将日历,月历做的简单明了,很方便我们的使用。

下面是它要实现的一些基本功能:用C语言编写万年历1、输入年份,判断是否为闰年2、输入年月日,判断改日为星期几3、输入年份,打出12个月历,输入月份,打出该月的日历4、要求用多个函数实现[名称]万年历[修改]1、对输入的日期进行容错处理2、增加和修改为英文的月份和星期显示3、采用指针形式的weeks和month数组(二)程序中的数据说明①int days[12] = {31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31};这是定义的关于每个月天数的数组,根据大小月以及二月分的特殊情况将每个月的天数最为数组中的元素存入数组当中。

其中days[1]=28,是将闰年二月的天数28天作为初始元素存入。

在经过theWeek函数后就可以给days[1]中存入正确的月天数。

②char *weeks[7] ={"Sunday", "Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday"};char *months[12] = {"January", "February", "March", "April", "May", "June", "July", "August", "September", "October", "November","DeCember"};这两组数据都设计利用了指针定义的。

这两个数组的作用是存入每个月,每个星期的地址。

利用指针可以提高程序的可读性,可以更方便使用。

三程序总体设计及流程图(一)应用到的C语言头文件:stdio.h /**/conio.h /**/stdlib.h /**/采用指针形式定义了*weeks和*months两组数组指针变量在程序中运用了大量的自定义函数,都涉及为了使程序更简介明了。

其中有:isLeap/*判断是否为闰年*/theLeap/*输入输出改年是否为闰年的信息*/Zeller/*判断星期的自定义函数*/theWeek()/*对于输入的日期输出该天是星期几*/printCalendar()/*输出日期详情及表格*/details /*月历详情函数*/theCalendar/*打开相应的详情*/Menu()/*程序的主菜单*/Select()/*按键的控制函数*/这些函数的定义极其相应的内部程序共同构筑起了这个万年历总程序。

其中的isLeap函数是用来判断输入的年份是否为闰年,实现了预计功能的第一个方面;theWeek函数则是为了实现判断星期而编写的;printCalendar , details ,theCalendar这三个函数的共同使用就能够完成第三个功能。

(二)程序的总框架四功能模块函数设计和调试一).算法说明1. 总天数的算法:isLeap和theLeap函数的共同使用,一起判断出了输入年份是否为闰年的信息。

判断一年是否为闰年的方法是:该年分而能被四整除但不能被100整除,或者是能被400整除。

流程图二:是否为闰年的判断2. 计算输入日期是星期几:利用Zeller函数可以判断出星期,然后对于输入的日期可以通过theWeek()函数对Zeller进行一次调用然后就可以输出相应的星期数。

①int Zeller(int year, int month, int day) //by theWeek(); printCalendar();/*判断星期的函数*/{int C, y, m, d, w;if( month < 3) { year -= 1; month += 12; }c = year / 100;y = year % 100;m = month;d = day;w = y + y/4 + C/4 - 2*C + 26*(m+1)/10 + d - 1;w %= 7;return (w >= 0 ? w : w+7);}②void theWeek() //by Select();/*对于输入的日期输出该天是星期几*/{int year, month, day, w;printf("\n");do{printf("Please input the date(YYYY-MM-DD): ");scanf("%d-%d-%d", &year, &month, &day);if( isLeap( year ) ) days[1] = 29; //是否闰年else days[1] = 28;}while(!( (month > 0 && month < 13) && (day > 0 && day <= days[month - 1]) ) );w = Zeller(year, month, day);printf("\nThis day %d-%02d-%02d is %s.", year, month, day,weeks[w]);getch();}3. 对输入信息的汇总:theCalendar/*打开相应的详情*/ ,details /*月历详情函数*/ ,printCalendar /*输出日期详情及表格*/,通过这三个函数可以将输入数据的具体信息通过完整日历的形式表示出来。

①void printCalendar(int year, int month) //by details(); theCalendar();/*输出日期详情及表格*/{int w, d;w = Zeller(year, month, 1);printf("%28s", months[month - 1]);printf("\n -%02d-\n", month);printf(" SUN MON TUE WED THU FRI SAT\n");for(d = 0; d < w; d++) { printf(" "); }for(month--, d = 1; d <= days[month]; d++){printf("%4d", d);if( (d + w)%7 == 0 && d != days[month]) printf("\n");}printf("\n============================\n");}例:1946, JanuarySUN MON JUE WED THU FRI SAT1 2 3 4 56 7 8 9 10 11 1213 14 15 16 17 18 1920 21 22 23 24 25 2627 28 29 30 31============================================②void details(int year) //by theCalendar();/*月历详情函数*/{int month;while(true){do{system("cls");printf("Press '0' to exit.\n");printf("Please input the month: ");scanf("%d", &month);}while(!(month >=0 && month <= 12));if(month != 0){printf("\n");printf("Calendar %d\n", year);printCalendar(year, month);if( getch() == '0') break;}else break;}}③void theCalendar() //by Select();{int year, month;printf("\nPlease input the year: "); scanf("%d", &year);if( isLeap( year ) ) days[1] = 29; //是否闰年 else days[1] = 28; system("cls");printf("Calendar %d\n", year); for(month = 1; month <= 12; month++) {printCalendar(year, month); }printf("More details of each month ?[Y/N]"); if( tolower(getch()) == 'y' ) details( year ); }4.界面的控制:主要体现在主菜单的选择功能上。

相关文档
最新文档