C语言 年历设计最终稿件
C语言课程设计报告之万年历毕业设计(论文)word格式

万年历一、目的根据所学知识,编写指定题目的C语言程序,并规范地完成课程设计报告。
通过课程设计,加深对《C语言程序设计》课程所学知识的理解,熟练掌握和巩固C语言的基本知识和语法规范,包括:数据类型(整形、实型、字符型、指针、数组、结构等);运算类型(算术运算、逻辑运算、自增自减运算、赋值运算等);程序结构(顺序结构、判断选择结构、循环结构);库函数应用(时间函数、绘图函数以及文件的读写操作函数等);复杂任务功能分解方法(自顶向下逐步求精、模块化设计、信息隐藏等)。
学会编制结构清晰、风格良好、数据结构适当的C语言程序,从而具备利用计算机编程分析解决综合性实际问题的初步能力。
二、需求分析1、程序运行之前,给出友好菜单界面,包括菜单项和输入提示。
2、对于要求一:用户输入一个四位数,代表的是输入年份,则根据要求输出该年份对应的年历信息。
3、对于要求二:用户输入某一个6位的数字,代表输入的是年份和月份,则根据要求输出该月份对应的月历信息。
4、对于要求三:用户输入某一个8位的数字,代表输入的是年份、月份和日期,则根据要求输出这一天是星期几,距离今天有多少天。
三、概要设计1.本程序包含八个模块:(1)主程序模块:main(){定义以及初始化;获得系统时间并用全局变量记录下来;调用菜单等函数;对输入的数字进行判断,并将之转换成相应的代表的年月日然后进行判断用户的具体要求。
}(2)菜单函数模块:void caidan(){这是一个返回值为空的函数,主要进行打印的任务。
}(3)打印月历的函数之一:void print_yueli_1(int year,int month){返回值为空类型的有两个参数的函数;这里的year接收主函数输入的number转换而来的年份,month接收主函数number 转换而来的月份;函数主要是打印日历中的月历。
}(4)打印月历的函数之二:void print_yueli_2(int year,int month){同样是返回值为空类型的有两个函数入口的函数;接收的值来源和类型和上一个函数一样,之所以设置两个打印月历的函数是因为任务书要求分为两部分打印,故有了两个答应月历的函数。
C语言万年历设计报告

C语言课程设计报告题目:编写万年历系统年级:专业:班级:姓名:学号:目录第1章设计目的第2章需求分析第3章概要设计第4章源程序清单第5章执行结果1)登陆界面2)显示当前日月历3)显示具体日期信息第6章程序问题调试与课程设计心得第1章设计目的设计目的(实验要求):1.模仿现实生活中的挂历.2.当前页以系统当前日期的月份为准显示当前月的每一天(显示出日及对应的星期几).3.当系统日期变到下一月时,系统自动翻页到下一月.第2章需求分析(1)程序运行时,首先给出菜单选项和输入提示:(2)用户可以通过主菜单选择不同选项。
输入1,通过输入当前日期可显示当前月的日历;输入2,通过输入具体日期(中间以空格分开)可显示该日具体信息;输入3,则退出查询系统。
第3章概要设计1.菜单选择界面可通过下面所示函数时现;主要思路:通过while语句与swich…case以及if条件语句实现菜单的循环功能和不同选项的功能实现。
闰年与平年的判断:代码如下:void main(){int year,month,day,a,b;while(1){printf("\n\n\n\n");printf("**********************************************************\n\n");printf(" * * \n");printf(" Welcome to enter calendar system \n");printf(" * * \n\n");printf("**********************************************************\n\n\n");printf(" 1 The month of current date 2 Date 3 Exit\n");printf(" please import your choose<1~3>,press Enter to define: ");scanf("%d",&b);switch(b){case 1:printf("\n Please import the year,month and day which you want tocheck,the year,month and day separation by blank space: ");scanf("%d%d%d",&year,&month,&day);a=x3(year,month,1);if(a==0){printf("Error!Please import again.\n");break;}yueli(year,month,day);break;case 2:printf("\n Please import the year,month and day which you want to check,the year,month and day separation by blank space: ");scanf("%d%d%d",&year,&month,&day);a=x3(year,month,day);if(a==0){printf("Error!Please import again.\n");break;}rili(year,month,day);break;case 3:exit(0);default:printf("Error!Please import again.\n\n");}}2.闰年的判断:计算所输入的年份是否可被4整除,若不能被整除,为平年。
万年历C语言报告范文1

万年历C语言报告范文1万年历实验报告---软件工程老师:班级:学号:姓名:-1-实验题目:编制一个万年历程序要求:输入一个年份(1-3000),然后显示12个月的月历,如屏幕显示不下,则应提供翻页功能。
一.实验目的通过实例使同学们掌握结构化数据流分析技术。
二.实验内容软件需求分析:1.总体而言,根据老师的要求来做一个万年历的C程序,要求分页输出每个月的月历,首先输入想要知道日历的年份,然后可按ENTER键逐月显示日历,这样就可以达到要求了。
3.求出一年中的第一天是周几(year+(year-1)/4-(year-1)/100+(year-1)/400)%7。
4.用FOR循环输出各月份的日历。
数据流图:软件设计与编码:实验完整代码:#include\longintf(intyear,intmonth){if(month<3)returnyear-1;elereturnyear;}longintg(intmonth){if(month<3)returnmonth+13;elereturnmonth+1;}longintn(intyear,intmonth,intday){return1461L某f(year,month)/4+153L某g(month)/5+day;}intw(intyear,intmonth,intday){return(int)((n(year,month,day)%7-621049L%7+7)%7);}intdate[12][6][7];intday_tbl[][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}};main(){intw,leap,i,j,k,wd,day;intyear;chartitle[]=\printf(\请输入您想要知道万年历的年份:\输入年某/canf(\输入年份值和掠过值后的回车某/w=w(year,1,1);for(k=0;k<7;k++)date[i][j][k]=0;/某日期表置0某/for(i=0;i<12;i++)/某一年十二个月某/-3-for(wd=0,day=1;day<=day_tbl[leap][i];day++){/某将第i+1月的日期填入日期表某/date[i][wd][w]=day;w=++w%7;/某每星期七天,以0至6计数某/if(w==0)wd++;/某日期表每七天一行,星期天开始新的一行某/}printf(\年的年历===========|\\n\for(i=0;i<12;i++){/某先测算第i+1月的最大星期数某/for(wd=0,k=0;k<7;k++)/某日期表的第六行有日期,则wd!=0某/wd+=date[i][5][k]+date[i+6][5][k];wd=wd6:5;put(\printf(\月%|\\n|\for(j=0;jprintf(\\for(k=0;k<7;k++)if(date[i][j][k])printf(\eleprintf(\\printf(\\printf(\}put(\canf(\键入回车输出下一个月的日历某/}put(\put(\按任意键退出...\getch();}截图:-4--5-三.总结1.实验内容总结经过运行和调试得到了想要的结果——“万年历”,任意输入一个年份能按当初设计的格式输出每个月份的日历。
C语言程序设计报告《万年历》

《“万年历”》—C语言程序设计报告专业:计算机科学与技术班级:姓名:指导教师:年月日目录1.设计的任务 (3)2.对问题的分析理解 (3)3. 采用的算法(流程图) (5)4. 算法中涉及的知识点 (6)5.设计用的计算机环境 (6)6 结论 (6)7.源代码 (7)1.设计的任务1.1设计编写一个C程序—“万年历”。
1.2输入任一年将显示出该年的所有月份日期,对应的星期。
1.3 下一行显示星期,从周日到周六,中英文都可以。
1.4 下一行开始显示日期从1号开始,并按其是周几实际情况与上面的星期数垂直对齐。
1.5 月份:中文英文都可以,注意闰年情况。
2.对问题的分析理解2.1 要输入任一年显示出该年的所有月份日期,应该先设计具体的输出格式,如下:the calendar of the year2008.JanuarySun Mon Tue 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 31FebruarySun Mon Tue Wed Thu Fri Sat1 23 4 5 6 7 8 910 11 12 13 14 15 1617 18 19 20 21 22 2324 25 26 27 28 29=============================================…………2.2 判断是不是闰年 (year%4!=0||year%100==0&&year%400!=0)满足条件就是平年,把一年中的所有月份分为四类(28,29,30,31)。
2. 3 求出一年中的第一天是周几(year +(year-1)/4-(year-1)/100+(year-1)/400)%7。
2.4 有指针数组存放十二个月的英文和星期的英文缩写。
2.5 用FOR循环输出各月份的日历3. 采用的算法(流程图)开始定义整型变year,i=0,j=0,a,n,m=1,k=0和函数judge 定义一个指针变量**p定义两个字符型数组,month,week输入年份,yeara=(year+(year-1)/4-(year-1)/100+(year-1)/400)%7i++,i<4n=judge(year,i+1),p=month+i输出月份回车Nj++,j<7输出星期回车k++,k<a输出六个空格m++,m<3输出占六个字节的天数(a+m)%7==0YY N输出回车n==2&&m==28YYn==3&&m==29break,退出本次循环break,退出本次循环n==4&&m==30break,退出本次循环Na=(a+m)%7回车输出”==============”结束NYYY Y4.算法中涉及的知识点4.1 定义整型,字符型,指针变量,字符型数组和指针数组。
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语言完整版

实验十九:编写一个万年历系统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"); }}}。
(2023)C语言万年历设计报告(一)

(2023)C语言万年历设计报告(一)C语言万年历设计报告这份报告是针对 2023 年度 C 语言万年历设计而准备的。
设计目的该万年历的设计目的是为了让用户能够快速地查看任意公历年份的日历,同时还能够显示节气、万年历和日历信息。
设计思路该万年历的主要思路是通过用户输入任意公历年份,在程序中计算并显示该年的日历信息。
具体实现思路如下:1.用户输入年份信息。
2.程序判断该年份是否为闰年,并计算该年的总天数。
3.根据该年第一天是星期几,排列该年每个月的天数。
4.标记国历节日,如元旦、劳动节等。
5.计算并标记该年的节气,如立春、清明等。
6.计算并标记该年的重要万年历信息,如“三伏”、“四季”等。
设计要点在实现该万年历的过程中需要注意以下几个要点:1.为了代码的可维护性,尽量将每个功能模块拆分成函数的形式。
2.程序中需要处理日期的加减运算,可以使用标准库中的<time.h>。
3.节气和万年历的计算应该基于一些公式而不是硬编码。
设计结果经过实现,该万年历已经能够正常运行,并能够正确地显示各种信息。
用户输入任意公历年份后,程序可以迅速计算并展示该年的万年历、节气和重要节日信息。
结论通过本次 C 语言万年历的设计,我们不仅深入地了解了日期处理等相关知识,还提升了编码的能力。
在日常开发中,我们也可以根据这些基础知识,设计更为实用的应用程序。
可改进之处尽管该万年历已经能够满足基本的需求,但仍有一些改进空间。
例如:1.目前仅支持公历,可以添加其他历法的支持,如农历、阴阳历等。
2.界面可以进一步美化,增加更多交互性的组件,如按钮、下拉菜单等。
3.可以添加更多的功能,如查询特定日期的天气、星座运势等。
总结本次 C 语言万年历设计,使我们更好地理解了日期处理的相关知识,提高了我们的编码水平。
同时,我们也意识到在实际项目中,需要更多的功能和优化,才能更好地服务于用户的需求。
通过持续不断的学习和实践,我们可以不断提升自己的编程技能。
c语言--年历程序设计

南京航空航天大学金城学院《C语言程序设计》课程设计实验报告题目:年历显示。
班级:20110222学号:2011022222姓名:任天翼成绩:指导老师:谢金国完成日期:2012年2月17日#include<stdio.h>#include<string.h>#include<time.h>//#include<conio.h>#include<stdlib.h>#include<windows.h>int isleapyear(int year) //判断该年是闰年还是平年{if((year%4==0&&year%100!=0) || (year%400==0) ) //判断该年是闰年return 1;elsereturn 0;}int firstdayofyear(int year) //一年中的第一天是星期几{return (year+(year-1)/4+(year-1)/400-(year-1)/100)%7;}void main(){char *monthname[13]={" ","一月份","二月份","三月份","四月份","五月份","六月份","七月份","八月份","九月份","十月份","十一月份","十二月份"};int numday_month[13]={0,31,28,31,30,31,30,31,31,30,31,30,31}; //一个月的总天数按平年来算平年的二月是28天,闰年的二月是29天int firstday_month[13]; // 存放每个月的第一天是星期几int workarray[13];int year;char cha;int k,m,n;int i,j,x,y;char p[20],ch;char temp[20];srand(time(0)); //随便产生一个数for(i=0;i<3;i++){system("cls");j=0;x=rand()%10000+1000; //产生的是一个大于1000的数printf("*万年历系统*/n/n/n/n");printf(" 验证码:%d/n",x);printf("/n/n 请输入验证码(还有%d次机会):",3-i);while(j<20&&(ch=getchar())!='/r'){p[j++]=ch;putchar('*');}p[j]='\0';itoa(x,temp,10); //把X数按十进制数转换为字符串存储在temp[20]中if(strcmp(p,temp)==0){goto good;}if(i>=3){printf("/n/n/n 输入次数超过限制,退出系统!/n/n");exit(0);}good:for(y=0;y<3;y++){system("cls");printf("/n/n/n/n/n/n 请稍后");Sleep(1000);printf(".");Sleep(1000);printf(".");Sleep(1000);printf(".");}do{system("cls");printf("/n");printf("/n");printf(" 欢迎进入万年历查询系统/n");printf("/n");printf(" 请输入待查询的年份:");scanf("%d",&year);if(isleapyear(year)) //如果是闰年那么第二个月的总天数是29天numday_month[2]=29;firstday_month[1]=firstdayofyear(year); //第一个月的第一天也就是第一年的第一天for(k=2;k<=12;k++)firstday_month[k]=(firstday_month[k-1]+numday_month[k-1])%7; //第二个月的第一天=(前一个月的第一天是星期几+前一个月的总天数)%7for(k=1;k<=12;k++)workarray[k]=-firstday_month[k];printf("%34s"," ");printf("year %d/n",year);for(k=1;k<=12;k++) //一年有12个月{printf("/n");printf("%32s/n/n",monthname[k]);printf("星期日/t星期一/t星期二/t星期三/t星期四/t星期五/t星期六/n");for(m=1;m<=6;m++) //一个月最多有6行{for(n=1;n<=7;n++) //一个星期有7天{workarray[k]++;if(workarray[k]>0&&workarray[k]<=numday_month[k])printf("%d/t",workarray[k]);elseprintf("/t");}printf("/n");}system("pause");}printf("/n是否要继续请按Y/y,按其它键退出系统:"); scanf(" %c",&cha);}while(cha=='Y'||cha=='y');}}。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
信息学院课程设计题目:年历处理程序的设计学号201412150135姓名杨浩頔专业软件开发课程程序设计基础(C)指导教师黄超2015年01月05日课程设计任务书及成绩评定题目年历处理程序设计课程设计的任务及要求多输入一个年份,输出实在屏幕上的该年的日历,假定输入的年份在1900-2099年之间;输入年月,输出该月的日历;输入年月日,输出距今还有多少天,星期几,是否为公历节日等。
课程设计所需的软件、硬件等软件:WIN-TC硬件: CPU>=1GHz内存>=256M硬盘>=20G课程设计进度计划2014年12月上旬,进行可行性研究,完成选题.2014年12月下旬,根据选题查阅资料、进行概要设计,确定设计方案.2014年1月上, 详细设计,实施设计方案,编写程序、调试程序.2014年1月中,完成课程设计(任务书)的撰写。
任课教师评语成绩:教师签名:日期:目录一、课程设计问题描述 (1)1.课程设计题目 (2)2.设计任务要求 (2)二、总体设计..................................................................................................................1.总体思路 (2)2.遇到的问题 (2)3.问题的解决 (2)三、详细设计..................................................................................................................1.显示输入年份的日历 (3)2.显示所查询月份的日历 (3)3.判断当天是星期几,是否为法定假日 (3)四、运行结果测试与分析 (4)1.输出结果 (4)2.分析 (5)五、结论与心得 (7)课程设计问题描述1.课程设计题目年历显示2.设计任务要求功能要求(1)输入一个年份,输出是在屏幕上显示该年的日历。
假定输的年份在 1 900-2099年之间。
(2)输入年月,输出该月的日历。
(3)输入年月日,输出距今天还有多少天,星期几,是否是公历节日。
二、总体设计1.总体思路拿到题目,首先判断是否是闰年,利用一个if语句即可判断,同时注意2月份的天数不一样。
2.遇到的问题(1)函数的调用与套用,具体来说就是如何在一个构造的函数中调用另一个构造函数。
(2)把每月的日历设计的美观,如何让星期和下面的数字对齐。
(3)如何把握日历的前几天的空格,使每月的第一天正好对在它应该的星期下。
(4)对于输入错误的年份时怎么样重新输入年份。
3.问题的解决第一个问题我通过查书,需要先把调用的函数在该构造函数中声明。
至于第二和第三个问题还有第四个问题,都是通过反复调试,反复修改,最后基本达到了要求。
三、详细设计1.显示输入年份的日历当我们输入年份任意公元后的年份year时,可以通过一个for语句,算出从公元一年到year-1年的总天数,这其中要注意平年与闰年的区别,平年365天,闰年是366天,把这一部分用how()函数表示。
算出总天数Z后,用Z除以7,余数是d,则year这一年的一月一日便是星期d。
如此则一月的日历可表示出来。
然后把Z加上一月的天数tian得到的新值赋给Z,再用Z除以7,重新得到新的余数d,如此可知二月的第一天是星期几,可表示出二月的日历。
依次循环,用for(i=0;i<12;i++)语句可表示出该年的日历。
注意闰年二月是29天,平年是28天。
2.显示所查询月份的日历当我们输入year和month时,同上,用how()函数算出公元一年一月一日到year-1年的总天数Z,再用一个for(i=1;i<month;i++)依次加上1月到month-1月的天数赋值给Z,用Z除以7得余数d,那本月的第一天便是星期几,便可表示出本月的日历。
3.判断当天是星期几,是否为法定假日当我们输入year,month和day,同上,算出从公元一年一月一日到month-1月以前的总天数Z,再加上day赋值给Z, 用Z除以7得余数d,那本天便是星期d。
调用when()函数,可判断本日是否是法定假日。
四、运行结果测试与分析1.输出结果同时,我们为了提醒同学们注意输入数据的范围,特意添加了判断。
2.分析在测试的过程中,基本都是一些语法上的缺陷,没有什么太大的逻辑错误,根据系统的提示,较易容易改正。
还有就是在调试过程中,月份不够美观,基本是前后左右不能对齐,中间的空格不易把握。
不过,在反复的调试与修改之后,最终实现了上面的效果。
虽说不是太完美,也不至于太难看。
但还是与课本要求有一定的差异。
五、结论与心得当我第一次看到这个程序问题时,感觉比较容易,就选择了它。
可当我仔细研究这个问题时,却傻了眼,没有我想象的那么简单。
首先使我困惑的是每年的第一天是星期几怎么计算,这使我郁闷了很久,一度没有头绪。
后来,当我和同学交流时,知道了公元一年一月一日是星期一,这才恍然大悟。
后来思路就有了,整个的过程也就想明白了。
剩下的就是程序的编写与测试的过程了。
在实际的编写过程中,也遇到了很多麻烦。
不过,在一次次的调试与修改后,这些问题也一一克服。
要说我编写的这个代码,也有许多不尽如人意处。
最大的问题是我是按照三个问题依次编下去,也就是说三个问题是连续的,如果你想要知道第三个问题,必须从第一个问题开始做下去,一直到第三个问题,不能直接出现第三个问题的结果。
我一直在寻找一个办法,能够把三个问题分开,可很遗憾,直到现在,也未能成功。
通过这次编写这个代码,我知道了思考的重要性,也明白了做任何事都不能轻易放弃,也不能轻易否决自己,多想想,多问一问,问题也许就解决了。
附录一:系统的实现一:主流程图:开始输入你查询的年份输入年月输入年月日和当前日期判断所输入的年份是否为闰二:判断是否为闰年how(),where() how(),where()how(),where(),why(),when()输出该年的日历 输入所查询月份的日历结束开始 输入year S=0,i=1是否为闰年S=S+366YS=S+365Ni++i<=year输出s结束三:判断是否为公历法定节日附录二:源代码#include <stdio.h>#include <stdlib.h>#include <stdio.h>int how(int A){int i,s=0,day;for (i=1;i<=A-1;i++){if (i%4==0 && i%100!=0 || i%400==0) day=366;elseday=365;s=s+day;}return s;}int where(int B,int C){int tian;switch(C){ case 1: tian=31;break;case 2:if (B%4==0 && B%100!=0 || B%400==0) tian=29;elsetian=28;break;case 3: tian=31;break;case 4: tian=30;break;case 5: tian=31;break;case 6: tian=30;break;case 7: tian=31;break;case 8: tian=31;break;case 9: tian=30;break;case 10: tian=31;break;case 11: tian=30;break;case 12: tian=31;break;}return tian;}void why(int E){switch(E){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;case 7: printf("该日星期日\n");break;}}void when(int F,int G){if (F==1 && G==1 || F==5 && G==1 || F==10 && G==1) printf ("当天为法定节日");elseprintf ("当天不是法定节日");}void main(){int year,d,j,Z,di,did,m,n,D,x,y,z,h,k,l,jian,Z1;loop:printf ("输入你所查寻日历的年份(1900~2099):");scanf ("%d",&year);if (year<1900||year>2099)printf("输入数据有误请重新输入!\n");if (year<1900||year>2099)goto loop;Z=how(year);for (j=1;j<=12;j++){d=Z%7;printf("~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n");printf (" %d月份\n",j);printf ("sun mon tue wed thu fri sat\n");if (d<6)for (di=1;di<=d+1;di++)printf(" ");for (did=1;did<=where(year,j);did++){printf ("%d",did);if (did<10)printf (" ");elseprintf (" ");if (did==6-d || (did-6+d)%7==0 || did==where(year,j)) printf ("\n");}Z=Z+where(year,j);}printf ("输入所查日历的年月");scanf ("%d%d",&m,&n);Z=how(m);for (j=1;j<=n-1;j++){D=where(m,j);Z=Z+D;}d=Z%7;printf("~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n");printf (" %d月份\n",j);printf ("sun mon tue wed thu fri sat\n");if (d<6)for (di=1;di<=d+1;di++)printf(" ");for (did=1;did<=where(year,j);did++){printf ("%d",did);if (did<10)printf (" ");elseprintf (" ");if (did==6-d || (did-6+d)%7==0 || did==where(year,j)) printf ("\n");}printf ("输入年月日");scanf ("%d%d%d",&x,&y,&z);Z=how(x);for (j=1;j<=y-1;j++){D=where(x,j);Z=Z+D;}Z=Z+z;printf ("输入当前年月日");scanf ("%d%d%d",&h,&k,&l);Z1=how(h);for (j=1;j<=k-1;j++){D=where(k,j);Z1=Z1+D;}Z1=Z1+l;jian=Z1-Z;printf ("输入日期距今有%d天\n",jian);d=Z%7;why(d);when(y,z);}……。