(2023)C语言万年历设计报告(一)
c语言万年历实训报告
c语言万年历实训报告万年历是一种历法,用于记录每年的日期和星期。
在日常生活中,我们常常需要使用万年历来查询某一天是星期几,或者某个月有多少天。
因此,开发一个万年历程序可以方便我们的日常使用。
本次实训中,我们使用c语言开发了一个简单的万年历程序。
下面将介绍该程序的实现过程和功能。
一、程序界面该程序的界面非常简洁,只有一个输入框和一个查询按钮。
用户可以在输入框中输入日期,然后点击查询按钮,程序将会返回该日期对应的星期几和当月的日历。
二、程序功能1. 输入检查在程序中,我们使用了正则表达式来检查用户输入的日期是否符合格式要求。
具体而言,日期的格式应该为“YYYY-MM-DD”,其中YYYY表示年份,MM表示月份,DD表示日期。
如果用户输入的日期格式不正确,程序将会提示用户重新输入。
2. 星期查询当用户输入符合格式要求的日期后,程序将会计算该日期对应的星期几。
具体而言,我们使用了蔡勒公式来计算星期几。
该公式的计算过程较为复杂,不在此做详细介绍。
3. 月历输出除了星期几之外,程序还能输出当月的日历。
具体而言,程序将会输出该月份的日历表格,其中包括每天的日期和星期几。
为了使输出的日历表格美观整洁,我们使用了格式化输出的方式,将日期和星期几对齐输出。
三、程序实现在程序实现过程中,我们主要使用了c语言中的日期和时间相关函数。
具体而言,我们使用了time.h头文件中的函数来获取当前日期和时间,然后使用strftime函数将其格式化。
我们还使用了ctype.h头文件中的isxdigit函数来检查用户输入的日期格式是否正确,以及math.h头文件中的floor函数来对日期进行取整操作。
除此之外,我们还使用了c语言中的数组和循环语句来实现日历的输出。
具体而言,我们使用了一个二维数组来存储日历中每天的日期和星期几,然后使用循环语句将其输出到屏幕上。
四、程序测试在程序开发完成后,我们进行了多次测试,确保程序的功能正常。
具体而言,我们测试了以下几个方面:1. 输入检查:测试了输入正确日期和错误日期两种情况,确保程序能够正确检查用户输入的日期格式。
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语言课程设计实验报告(万年历)
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 0x49#define KEYNUMPageDown 0x51int 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):");scanf("%d,%d",&year,&month);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<=maxD ay(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");}}}。
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.判断该年是平年还是闰年以及生肖等。
c语言万年历课程设计报告
本次课程设计的主题为“C语言万年历”,旨在通过设计和实现一个简单的万年历程序,深入了解C语言程序设计的基本方法和技巧。
通过本课程设计的学习,我对C语言程序设计的各个方面进行了深入的了解和掌握,同时也提高了自己的编程思维和实践能力。
一、设计思路。
本次课程设计的主要功能是实现万年历。
在设计程序之前,我首先对万年历的基本功能进行了分析和思考,包括输入年月日,输出当月的日历和星期几等。
同时,考虑到用户友好性,我还增加了一些额外的功能,如输入错误时的提示,具体日历同时附带节假日等。
在分析了功能需求之后,我便开始考虑程序设计的具体实现。
首先,我选择了C语言作为实现程序的语言,因为C语言广泛应用于各类软件工程和移动计算等领域,适用性强,易于学习和掌握。
接着,我根据分析需求,确定了程序的基本框架和主要模块,包括输入年月日模块、求解该日是星期几模块、绘制当月日历模块和判断节日等模块。
二、程序实现。
在程序实现过程中,我遵循了模块化编程的原则,把整个程序划分成几个独立的模块,并在模块之间进行数据交互和函数调用。
具体来说,我分别实现了以下几个模块:1.输入年月日模块:该模块负责接收用户输入的年月日信息,并检查输入格式是否正确。
在输入不合法时,该模块能够给用户相应的提示信息,并要求用户重新输入。
2.求解该日是星期几模块:该模块根据给定年月日,求出该日是星期几。
该模块采用基姆拉尔森计算公式来实现。
3.绘制当月日历模块:该模块负责绘制给定月份的日历,并标注当日及节假日等信息。
在绘制日历时,该模块能够考虑各种特殊情况,如闰年、月初不为星期一等。
4.判断节日等模块:该模块能够根据给定年月日信息,判断当日是否为节假日、纪念日等特殊日子,如春节、圣诞节等,并在日历上作出相应标注。
以上四个模块构成了整个程序的主要功能。
在实现过程中,我还遇到了一些问题,如求解闰年的问题、绘制多行日历的问题等。
针对这些问题,我通过查找资料、借鉴其他同学的代码等方式进行了解决。
万年历C语言课程设计(内附程序)
C语言课程设计万年历摘要本课程设计报告介绍的是C语言实习中的万年历项目。
该报告共分五章,第一章介绍选题意义,也就是我选择万年历作为课题项目的理由。
第二章是系统的分析,包括系统概述,系统的构成,其中包括各个模块功能的分析介绍,该章节的最后介绍了各部分的功能,即组成程序的各个函数的功能介绍。
第三章是系统的实现,即为各个功能的实现而服务的十个自定义函数的流程图,通过这十个流程图,您可以快速地明白程序功能的实现过程。
第四章是总结,即本人在设计万年历程序过程中的心得,以及在整个程序设计过程中我的工作过程,也体现了我的设计思路。
第五章是参考文献,在这里我主要查阅了《C程序设计(第三版)》中的C函数附表,另外有几处欠缺的知识,我借鉴了另一本书上的相关部分。
第六章,也是最后一章,我把整个程序的源代码及其注释附上。
由于本人水平所限,程序也不可能很完美,必定有一些漏洞和拖沓,还请谅解。
好了,从这里开始,我将与你们分享我我在整个万年历程序设计中的所做所想。
目录1.选题的意义 (4)2.系统的分析 (5)2.1系统概述 (5)2.2系统的构成 (5)2.3各模块的功能 (5)2.4系统的运行环境 (5)3.系统实现 (6)4.总结 (11)5.参考文献 (12)6.附录(程序源代码) (13)第一章选题的意义(1)通过万年历的设计,使我们掌握软件开发过程的问题分析、系统设计、程序编写、测试等基本方法和技能。
(2)通过万年历的设计,熟练掌握C语言中的分支、循环、数组、函数、文件操作等的综合运用。
(3)通过万年历的设计,可以培养独立思考、综合运用所学有关相应知识的能力,更好地巩固《C程序设计》课程中的所学内容。
(4)通过万年历的设计,可以强化自己的动手编程能力,更加深刻地感受C语言的优点。
(5)万年历与我们的生活联系密切,通过万年历的设计,我们可以感受知识与实践相结合的乐趣。
第二章系统的分析(1)系统概述:该程序可以实现系统当前日期所在月份的日历显示功能,日期查询功能,程序的初始日期设定功能,还有把给定年份的日历输出到txt文档中的功能。
C语言万历设计报告(1)
C语言万历设计报告(1)C语言万历设计报告一、项目背景随着计算机技术的飞速发展,计算机语言已经成为了人们日常工作中不可或缺的一种工具。
其中,C语言作为最早的高级程序设计语言之一,具有良好的可移植性、易学易用等特点,已经成为业界广泛使用的一种语言。
本项目即是为了让初学者通过实际项目来掌握C语言的使用方法和基本原理。
二、项目目标1.掌握C语言基础语法和编程思想。
2.熟悉C语言程序的编写和调试过程。
3.通过实际的项目案例,深刻理解C语言在计算机编程中的作用和优点。
三、项目内容1.项目名称:万历日历2.项目背景:万历是明朝时期皇帝朱翊钧的年号,我们的项目旨在打造一款精美的万历日历,帮助用户了解每个月份的节气、节假日等信息。
3.项目要求:(1)用户可以输入年份信息,程序将自动识别该年是否为闰年,并打印出该年的万历日历。
(2)根据公历转换成农历,输出万历中的二十四节气。
(3)以不同颜色标记出法定节假日和其它重要纪念日。
(4)添加自定义功能,用户可以自己添加纪念日、提醒事项等。
4.项目方案:(1)设计思路本项目的主要难点在于万历日历细节的打印以及日历的颜色设计。
在程序设计时,将年份信息作为输入,通过判断是否为闰年,进而计算出每个月份的天数和节气信息。
然后在控制台中依次输出每个月份的日历信息,并根据时间表,将法定假日和纪念日以不同颜色进行标记,最后实现自定义功能。
(2)程序模块1)输入模块通过输入模块,获取用户输入的年份信息。
2)输出模块通过输出模块,在控制台中输出万历日历信息。
3)判断模块判断模块判断输入年份是否为闰年,并计算出每个月份的天数和节气信息。
4)颜色模板模块根据时间表,设定各个纪念日的颜色模板。
5)自定义模块添加自定义模块,让用户可以自己添加纪念日、提醒事项等。
(3)程序流程图输入年份信息 -> 通过判断模块计算各月份的天数和节气信息 -> 在控制台中输出日历信息和纪念日信息 -> 自定义模块 -> 完成四、总结本项目实现了一个简单而实用的万历日历工具,未来的版本可根据用户的反馈不断完善和升级。
万年历C语言课程设计报告
程序实践报告任务分配:1、头文件,定义常量,全局变量,自定义函数和打印输出模块。
即1~50和140~2902、功能控制模块和一部分日历显示模块,即50~140和290~4003、一部分日历显示模块和键值获取模块,即400~1、基本思路功能模块图本系统包括4个模块,分别是功能控制模块、打印输出模块、日历显示模块和键值获取模块。
(1)功能控制模块。
该模块用于实现日期有效性检查、判断是否是闰年和返回指定日期对应的星期。
(2)打印输出模块。
该模块主要是进行输出显示,包括打印指定个数的空格、打印分隔线、打印用户使用手册、打印当前日期对应的星期以及打印给定的星期。
(3)日历显示模块。
该模块是系统的核心模块,是用来显示指定日期所在月份的月历。
(4)键值获取模块。
该模块接受键盘操作,获取键值,来进行日期调整,并调用日历显示模块中的函数来显示调整后的日历。
日历显示模块日历显示是系统的核心模块,它控制着日历的生成和显示。
其实现流程如图所示。
程序输入的是包含年月日(year,month和day)的日期,输出month所在月份的月历,并突出显示day 所在的日期和year是否是闰年的标识。
程序首先根据year判断其是否是闰年,如果是则需要将该年2月份的天数设置为29天,接着判断day是否超过month所在月份的最大天数,如果超过则显示系统日期所在的月历。
然后进行星期输出的判断,如果输出的是该月的第一个星期,则判断该星期中还有几天在本月(如,该月1号是星期五,则表示该月第一个星期中只有两天在本月,星期一到星期四在上月,则星期一到星期四在本月就不输出,仅有空格表示),输出空格。
输出完第一周后,接着输出第二到第五(或者六)周,每周7天。
在输出过程中,如果遇到了day所在的日期,则突出显示。
键值获取流程图键值获取实现的是从键盘调整日期并显示调整后的月历。
其实现流程如图所示。
系统首先判断从键盘输入的值,如果是右移键,表示增加月份。
C语言万年历设计报告
千里之行,始于足下。
C语言万年历设计报告以下是一个关于C语言万年历设计报告的例子,共计约:设计报告:C语言万年历1. 引言万年历是一种用来显示特定年份日历的工具。
本设计报告将介绍一个使用C语言编写的万年历程序,它可以接受用户输入的年份,并显示该年份的日历。
2. 设计目标本程序的主要设计目标是实现以下功能:- 接受用户输入的年份。
- 检查年份的有效性。
- 显示该年份的万年历。
3. 设计思路万年历程序的设计思路如下:- 首先,接受用户输入的年份。
这可以通过使用C语言的scanf函数等方法来实现。
- 然后,检查年份的有效性。
年份必须大于0且小于或等于当前年份。
这可以通过使用C语言的条件语句来实现。
- 接下来,确定年份的第一天是星期几。
这可以通过查找该年份第一天距离已知星期几(比如星期一)的天数来实现。
- 然后,确定该年份每个月的天数。
根据已知的规则(比如闰年规则),计算每个月的天数。
- 最后,根据以上信息,显示该年份的日历。
可以使用C语言的循环语句和格式化输出函数来实现。
第1页/共2页锲而不舍,金石可镂。
4. 主要函数本程序将包含以下主要函数:- int isLeapYear(int year):判断给定年份是否是闰年。
根据已知的闰年规则进行计算,并返回一个布尔值。
- int getFirstDayOfWeek(int year):确定给定年份的第一天是星期几。
根据该年份的第一天距离已知星期几的天数进行计算,并返回一个整数(代表星期几)。
- void printCalendar(int year):根据给定年份的信息,打印该年份的日历。
5. 测试和调试在开发过程中,可以使用一些测试和调试方法来确保程序的正确性和稳定性。
比如:- 输入测试:使用各种不同类型的数据(正常、边界和异常)进行测试,确保程序在各种情况下都能正常工作。
- 边界测试:测试该程序处理边界条件的能力,比如闰年、非闰年、最小年份、最大年份等。
c语言课程设计报告模板万年历
C语言课程设计报告模板-万年历
引言
万年历是一个非常实用的工具,能够帮助人们快速查找任意日期的详细信息。
本报告将介绍我们设计的C语言万年历程序的实现及其功能。
设计目标
我们的设计目标是开发一个简单易用的C语言万年历程序,该程序应具备以下功能: - 显示指定年份的整年日历信息 - 显示指定年份指定月份的月历信息 - 显示指定日期的详细信息,如星期几、所在月份等 - 具备用户友好的交互界面
设计思路
我们的设计思路如下: 1. 获取用户输入的年份、月份和日期信息。
2. 判断用户输入的年份是否为闰年。
3. 根据用户输入的年份计算出该年份的1月1日是星期几。
4. 根据用户选择的功能,分别显示整年日历、月历或详细日期信息。
实现步骤
我们按照以下步骤实现了C语言万年历程序:
步骤一:获取用户输入
首先,我们使用scanf()函数获取用户输入的年份、月份和日期信息。
```c int year, month, day; printf(。
C语言万年历课程设计报告书
C语言万年历课程设计报告书内部编号:(YUUT-TBBY-MMUT-URRUY-UOOY-DBUYI-0128)C语言课程设计报告书万年历系统设计学院:理学院专业:信息与计算科学姓名:指导教师:序言经过一个学期对《C程序设计》的学习,同学们都认为真正的学到了有用知识,可能有一些人学的不够理想,但无论如何,这些知识都为我们的下一步学习打下了坚实的基础。
做这么一个课程设计,一方面是为了检查我们一个学期来我们学习的成果,另一方面也是为了让我们进一步的掌握和运用它,同时也让我们认清自己的不足之处和薄弱环节,加以弥补和加强。
本程序是一个万年历程序,可以查询1970年1月1日到2100年1月1日中任意一天是星期几,只要在运行程序时按照要求输入年,月,日,程序就会把这一天是星期几显示子啊屏幕上;也可以输入一个年份和一个月份,程序就会把该月份的月历显示在屏幕上,使人一目了然。
该程序能与目前天文学研究中所采用的各种日历程序所能计算的结果相一致。
还有许多功能等着你去探讨。
这个程序花费了很多时间,用了一天的时间去设计程序和调试程序,而在调试程序的过程中,经常会出现一些不如意的地方,所以程序就要修改。
所以这样经过一次又一次的修改之后,程序更显得人性化。
通过这一次程序的设计,让我深深的感受到程序员的辛苦。
2012年6月11日【课程设计题目:万年历系统】【要求】1:程序的功能多样;2:输入日期能够判断该日期是星期几;3:输入一个年份能够显示出该年的全部月历;4:输入一个年月能够显示该月的月历;5:输入一个年份能够判断该年是闰年还是平年;6:能够退出。
程序代码:{printf("please input the day youwant(2100,1,1>****,**,**>1970,1,1):");scanf("%d,%d,%d",&year,&month,&day);for(b=0,r=0;b<month;b++){r=a[b]+r;}year=year-1972;r=r+(year/4)*1461+(year%4)*365+day;if(r%7==0)printf (" Today is Saturday.\n");else if(r%7==1)printf(" Today is Sunday.\n");else if(r%7==2)printf(" Today is Monday.\n");else if(r%7==3)printf(" Today is Tuesday.\n");else if(r%7==4)printf(" Today is Wednesday.\n");else if(r%7==5)printf(" Today is Thursday.\n");else printf(" Today is Firday.\n");choose=getchar();printf("Continue(y/n):\n");scanf("%c",&choose);if (choose=='y'||choose=='Y') main();}主要功能模块2:程序代码:{static int t[12]={31,0,31,30,31,30,31,31,30,31,30,31}; int i,y,weekday=0;long days=0;if(leap_year(year)) t[1]=29;else t[1]=28;y=t[month-1];if(year>2006){days=(year-2006)*365+count_leap(year)+monthdays(month,year); weekday=days%7;}else if(year<2006){days=(2005-year)*365+count_leap(year)+monthdays(month,year); weekday=7-days%7;}else{days=monthdays(month,year);weekday=days%7;}for (i=1;i<weekday+2;i++)printf ("\t");for (i=1;i<=y;i++){if ((i+weekday-1)%7==0) printf ("\n\t%3d\t",i);else printf ("%3d\t",i);};}主要功能模块3:程序代码:{ int i;if (year%4==0&&year%100!=0||year%400==0) i=1;else i=0;return i;}【用到的语句】1.<stdio.h>,<conio.h> /*头文件*/2.main() /*主函数*/3.printf(),4.scanf()5.a[] /*数组*/6.if 语句7.for 语句8.void /*要调用到的函数*/【源程序代码】#include<stdio.h>#include <conio.h>int main() //主函数{ int leap_year(int y);int count_leap(int year);int monthdays(int month,int year);void monthprint(int year,int month);int year,month,day,b,r,number; //定义变量char choose;int a[]={0,31,28,31,30,31,30,31,31,30,31,30,31};printf("*********************************mainMeun********************** *************\n");printf(" 1:ri qi>>>xing qi ji.\n");printf(" 2:yue li.\n");printf(" 3:ri li.\n");printf(" 4:run nian pan duan. \n");printf(" 5:exit\n");printf("\n");printf("*************************************************************** **************\n");printf (" please input the number:");scanf("%d",&number);if(number==1){printf("please input the day youwant(2100,1,1>****,**,**>1970,1,1):");scanf("%d,%d,%d",&year,&month,&day); //输入要查询的日期for(b=0,r=0;b<month;b++) //计算输入月份与但年月份间隔了多少天{r=a[b]+r;}year=year-1972;r=r+(year/4)*1461+(year%4)*365+day; //计算输入日期与1970,1,1间隔了多少天if(r%7==0)printf (" Today is Saturday.\n");else if(r%7==1)printf(" Today is Sunday.\n");else if(r%7==2)printf(" Today is Monday.\n");else if(r%7==3)printf(" Today is Tuesday.\n");else if(r%7==4)printf(" Today is Wednesday.\n");else if(r%7==5)printf(" Today is Thursday.\n");else printf(" Today is Firday.\n");choose=getchar();printf("Continue(y/n):\n"); //选择是否继续scanf("%c",&choose);if (choose=='y'||choose=='Y') main(); //主函数调用主函数本身 }else if(number==2){ printf(" please input the year(5000>****>0):");scanf("%d",&year); //输入要查询的年份for(month=1;month<13;month++) //循环输出12个月份的月历{ printf(" %dyear %dmonth\n",year, month);printf("*************************************************************** *************\n");printf(" Sun Mon Tue Wen Thu Fri Sat\n");monthprint(year,month);printf("\n");printf("*************************************************************** *************\n");}choose=getchar();printf("Continue(y/n):\n\n");scanf("%c",&choose);if (choose=='y'||choose=='Y') main();}else if(number==3){ printf("please input the year and month(2100,1>****,**>1970,1):"); scanf("%d,%d",&year,&month); //输入要查询的年,月printf(" %dyear %dmonth\n",year,month);printf("*************************************************************** *********\n");printf(" Sun Mon Tue Wen Thu Fri Sat\n");monthprint(year,month); //printf("\n");printf("*************************************************************** *********\n");choose=getchar();printf("Continue(y/n):\n\n");scanf("%c",&choose);if (choose=='y'||choose=='Y') main(); }else if(number==4){ printf(" please input a year5000>****>0:");scanf("%d",&year); //输入要查询的年份 if(leap_year(year))printf("This is runyear.\n");else printf("This is pingyear.\n");choose=getchar();printf("Continue(y/n):\n\n");scanf("%c",&choose);if (choose=='y'||choose=='Y') main();}else //选择其他则退出return 0;}int leap_year(int year) //判断是否闰年{ int i;if (year%4==0&&year%100!=0||year%400==0) i=1;else i=0;return i;}int count_leap(int year){ int i=0,j,min,max;if(year>2006) {min=2006;max=year;}else {min=year+1;max=2006;}for(j=min;j<max;j++)if(leap_year(j)) i++;return i;}int monthdays(int month,int year) //该月的天数{ int sum=0,i,j;if(year>=2006){ static int t[12]={31,0,31,30,31,30,31,31,30,31,30,31};j=month-1;if(leap_year(year)) t[1]=29;else t[1]=28;for(i=0;i<j;i++)sum=sum+t[i];}else{ static int t1[12]={31,30,31,30,31,31,30,31,30,31,0,31}; j=12-month;if(leap_year(year)) t1[10]=29;else t1[10]=28;for(i=0;i<=j;i++)sum=sum+t1[i];}return sum;}void monthprint(int year,int month) //输出该月的月历{ static int t[12]={31,0,31,30,31,30,31,31,30,31,30,31};int i,y,weekday=0;long days=0;if(leap_year(year)) t[1]=29;else t[1]=28;y=t[month-1];if(year>2006){days=(year-2006)*365+count_leap(year)+monthdays(month,year);weekday=days%7;}else if(year<2006){days=(2005-year)*365+count_leap(year)+monthdays(month,year);weekday=7-days%7;}else{days=monthdays(month,year);weekday=days%7;}for (i=1;i<weekday+2;i++) //输出该月第一天所在位置之前的空格printf ("\t");for (i=1;i<=y;i++) //输出该月的月历{if ((i+weekday-1)%7==0) printf ("\n\t%3d\t",i);else printf ("%3d\t",i);};}【调试及分析过程】1:在代码编辑器上输入以上程序代码后,保存并f9到tc3.0上运行结果输出:分析:运行后出现“菜单”,选项意思是:输入1,则确定一个日期是星期几。
万年历C程序设计报告
C语言课程设计报告一、设计目标设计一个C语言程序(万年历系统),具体要求:模仿生活中的挂历设计一个C语言程序,由键盘输入一个日期(年月日)对其进行如下处理:主要功能:1、调用计算机的系统日期。
2、输出本年中该月份的日历,并能查看该月份前后月份的日历。
3、通过函数输出输入日期是星期几。
4、通过函数判断输出输入日期是否为特殊节日。
二、总体设计1、程序设计组成框图2、程序流程图三、详细设计 ( 流程图见附录 )1、功能函数f ( )——本函数由设计函数的功能:调用系统当前日期。
函数的入口:从main()按顺序进入该函数。
函数调用关系:被主函数调用。
在文中无返回值的空值void函数。
函数的出口:在主函数中按顺序执行后自动跳出,继续执行主函数。
2、功能函数f1( )——本函数由设计函数的功能:显示一个月的天数及对应星期。
函数的入口:从main()的switch()开关结构中进入,即choice的值为1时进入该函数。
函数调用关系:被主函数调用。
由switch()开关结构中进入,并在文中无返回值的空值void函数。
函数的出口:当程序执行提示语“printf("1-查看上一月\n 2-查看下一月\n 3-返回上一级\n");”的时候,对用户的操作进行提示,如果用户选择了按“1或2”键,则用户选择了继续该函数,如果用户选择了按“3”键,将结束该函数,返回主函数main(),继续执行主函数。
3、功能函数f2()——本函数由设计函数的功能: 输入一个日期,输出它并输出对应的星期。
函数的入口:程序从main()的开关1结构中进入,即按2时,开始进入该函数,进入函数后,按提示输入所查询的日期。
函数调用关系:被主函数调用。
由开关2结构中进入,并在文中无返回值的空值void函数。
函数的出口:当输出排序结果用printf()标准输出到屏幕上,然后结束该函数,而执行主函数main()中“goto”跳出开关2函数,继续执行其他功能。
C语言程序设计报告―“万年历”
C语言程序设计报告―“万年历”一、程序实现的功能“万年历”,也叫做历法及历历,是一种用于计算日期及节假日的日历,它可以帮助我们计算一些特定的日期及其所属的节日。
本程序通过C语言实现了一款传统的“万年历”的功能,它可以根据用户输入的年份和月份,打印出当月的日历表格,以及当月的公历及节假日。
二、程序的功能结构及总体设计本程序的功能结构如下:(1)输入年份及月份,计算出当月有多少天;(2)根据此判断出当月的第一天是星期几;(3)将前面算出的信息用表格形式打印出来;(4)计算当月的节假日及其所属的日期;(5)将节假日打印到表格中,形成一张完整的月历表。
程序的总体设计,主要由两部分组成:(1)调用函数实现实际的打印功能;(2)实现主函数的调用以控制程序的流程。
1. 程序结构:程序的核心是对日历表的生成,其结构如下:主函数:负责主函数的调用,以控制程序的流程。
日历表生成函数:调用该函数以生成日历表;在调用该函数之前,首先运行“getfirstday”函数,以计算当月的第一天是星期几;然后调用“dayOut”函数,将当月的日期和节日打印出来。
“getfirstday”函数:该函数用来计算某年某月的第一天是星期几,实现的核心思想是以1900年为基准,计算出某年某月离1900年相差多少天,然后根据求出的和1900年的差值,计算出当月的第一天是星期几;此外,还进行了考虑闰年等特殊情况的特别处理,以进一步检查结果。
2. algorithm:(1) 从键盘输入年份及月份,将年份及月份保存在相应的变量中;(2) 调用“getfirstday”函数,计算出当月的第一天是星期几;(3) 调用日历表生成函数,生成当月的日历表;(4) 输出生成的日历表,完成程序的运行。
四、程序的测试为了验证本程序的可行性,我进行了严格的测试,并与电子版的日历比较,测试结果表明,本程序的结果完全一致,能够满足正确的要求,用户可以使用该程序进行相应的日历计算。
万年历C语言课程设计报告书
C语言课程设计报告书设计人:查波学号:201201466院系:电信学院班级:电气11203指导老师:杜红一.设计要求1.能够显示星期。
2.能够显示年月日。
二.设计目的1. 通过本项课程设计,可以培养独立思考、综合运用所学有关相应知识的能力,能更好的巩固《C语言程序设计》课程学习的内容,掌握工程软件设计的基本方法,强化上机动手编程能力,闯过理论与实践相结合的难关!更加了解了c语言的好处和其可用性!同时增加了同学之间的团队合作精神!更加也体会到以后在工作中团队合作的重要性和必要性!2. 通过C语言课程设计,使学生了解高级程序设计语言的结构,掌握基本的程序设计过程和技巧,掌握基本的分析问题和利用计算机求解问题的能力,具备初步的高级语言程序设计能力。
为后续各门计算机课程的学习和毕业设计打下坚实基础。
三.设计思想1. 总天数的算法:首先用if语句判断定义年到输入年之间每一年是否为闰年,是闰年,该年的总天数为366,否则,为355。
然后判断输入的年是否为定义年,若是,令总天数S=1,否则,用累加法计算出定义年到输入年之间的总天数,再把输入年的一月到要输出的月份之间的天数累加起来,若该月是闰年中的月份并且该月还大于二月,再使总天数加1,否则,不加,既算出从定义年一月一日到输出年的该月一日的总天数。
2 .输出月份第一天为星期几的算法:使总天数除以7取余加2得几既为星期几,若是7,则为星期日。
3. 算出输出月份第一天为星期几的算法:算出输出月份第一天为星期几后,把该日期以前的位置用空格补上,并总该日起一次输出天数直到月底,该月中的天数加上该月一日为星期几的数字再除以7得0换行,即可完整的输出该月的日历。
四.要用到的函数和语句1.<stdio.h>/*头文件*/2.main() /*主函数*/3.printf(),4.scanf()5.if 语句6.for 语句7.IsLeapYear(int) /*定义函数*/流程图五.程序运行结果六.源代码#include <stdio.h>int IsLeapYear(int);main(){int i;int day;int year;int temp;int temp_i;long int Year_days = 0; //输入的年份之前的所有年的天数之和int Year_Start = 1; //当前年份int Per_Year_Days;int month_day[]={31,28,31,30,31,30,31,31,30,31,30,31,29}; //第n月的天数printf("请输入年份: ");scanf("%d",&year);while(Year_Start < year) //求输入的年份之前的所有年的天数之和{if( IsLeapYear( Year_Start ) ) //当前年份是闰年Per_Year_Days = 366; //则当前年份的天数为366天else //当前年份是平年Per_Year_Days = 365; //则当前年份的天数为365天Year_days = Year_days + Per_Year_Days; //当前年份之前的所有年的天数之和Year_Start++;}for( temp = 1; temp <=12; temp++ ) //一个for循环内部嵌套一个for循环和两个while循环{switch( temp ){case 1:printf(" *****************一月(%d)********************\n",year);break; //break:跳出switch语句,执行switch 语句后面的语句case 2:printf(" *****************二月(%d)********************\n",year);break;case 3:printf(" *****************三月(%d)********************\n",year);break;case 4:printf(" *****************四月(%d)********************\n",year);break;case 5:printf(" *****************五月(%d)********************\n",year);break;case 6:printf(" *****************六月(%d)********************\n",year);break;case 7:printf(" *****************七月(%d)********************\n",year);break;case 8:printf(" *****************八月(%d)********************\n",year);break;case 9:printf(" ******************九月(%d)*******************\n",year);break;case 10:printf(" ******************十月(%d)*******************\n",year);break;case 11:printf(" ******************十一月(%d)*****************\n",year);break;case 12:printf(" ******************十二月(%d)*****************\n",year);break;}i = Year_days % 7; //输入的年份的前一年的最后一天对应星期i(i=1~6)星期天(i=0) printf("星期一星期二星期三星期四星期五星期六星期天\n");if( i != 0 ) //i=0不需输出空格for( temp_i = 0; temp_i < i; temp_i++) //temp_i用来计输出的空格数printf(" "); //输出七个空格,保持数据右对齐,输入的年份的第一天对应星期i+1 (i=0~5)星期天(i=6)day = 1;if( IsLeapYear(year) && temp == 2) //输入的年份为闰年且当前月份为2月(确定闰年二月的月历)while( day <= month_day[12] ) //day<=29时进行循环{if( day >1 ) //(一个if语句嵌套两个if语句)如果day >1 ,则执行if( Year_days % 7 == 0 ),否则(即day=1)执行printf(" %d ",day),(两个空格)if( Year_days % 7 == 0 ) //如果Year_days % 7 == 0,则执行printf("\n");否则执行空语句“;”,不进行任何处理printf("\n");if( day >= 10 ) //如果if( day >= 10 ),则执行printf(" %d ",day),(一个空格);否则执行空语句“;”,不进行任何处理printf(" %d ",day);//四个空格,当数大于10时与小于10的数右对齐elseprintf(" %d ",day);//五个空格,当数小于10时与大于10的数右对齐Year_days++;//Year_days自增,day++;//day自增,换到下一天}else //输入的年份为平年或当前月份不是2月while (day <= month_day[temp-1]) //day<=当前月份的天数时进行循环if( day > 1 )//(一个if语句嵌套两个if语句)如果day >1 ,则执行if( Year_days % 7 == 0 ),否则(即day=1)执行printf(" %d ",day),(两个空格)if( Year_days % 7 == 0 )//如果Year_days % 7 == 0,则执行printf("\n");否则执行空语句“;”,不进行任何处理printf("\n");if( day >=10 ) //如果if( day >= 10 ),则执行printf(" %d ",day),(一个空格);否则执行空语句“;”,不进行任何处理printf(" %d ",day);//四个空格,当数大于10时与小于10的数右对齐elseprintf(" %d ",day);//五个空格,当数小于10时与大于10的数右对齐Year_days++;day++;}printf("\n");} //外层for循环结束} //主函数结束int IsLeapYear( int year ) //定义被调函数(用户函数),(不)是闰年则返回1 (0),使条件语句的条件为真(假){if ((year %4 == 0) && (year % 100 != 0) || //输入的年份能被4且不能被100整除或(year % 400 == 0) ) //输入的年份能被400整除(为闰年)return 1; //条件语句的条件为真elsereturn 0; //条件语句的条件为假}六.实验小结为期两个星期的课程设计很是短暂,由于本人水平有限,程序设计比较简单,没有多少复杂的语句,这是一个很好的锻炼机会,很多以前没看懂的都得到了答案,程序虽小,也费了一番功夫,同时上网借鉴了别人的程序,深为感谢,感谢老师的指导。
C语言实训题目设计报告 万年历
C语言实训题目设计报告:万年历系统1、题目设计:设计一个万年历系统功能要求:(1)从2000年开始,用户输入年份与月份,将显示出该年该月份的日历,对应的星期。
(2)用户输入年份,将显示该年的日历(3)注意闰年情况显示格式要求如下:(1)第一行显示月份(中英文都可以)(2)下一行显示星期,从周日到周六,中英文都可以(3)下一行开始显示日期从1号开始,并按其是星期几实际情况与上面的星期数垂直对齐(4)程序输出菜单,用户按照提示操作,最终得到计算结果。
2、问题分析:该程序可大致分成主菜单、年历、月历3个部分,并且还有判断是否为闰年、月份的天数、该月第一天为周几三个小模块,并可由年历、月历调用,年历、月历可由主菜单调用。
最后可以考虑一下界面的优化和输入错误等小问题。
3、算法设计:主菜单部分:用户输入选项,用一个switch语句来进行接下来的任务,其中有一个选项是用来退出的。
在进行到程序结尾的时候用goto语句来实现回到函数最开始的目的。
月历部分:从键盘接收年份和月份,通过小函数来获得本月的天数和本月一号是周几,从而在屏幕上输出月历。
在到周末的时候换行。
年历部分:大体思路和月历相似,只是多用了一个for循环,使得月份从一月一直到十二月(其实这部分我是复制的月历部分的)。
判断闰年部分:输入年份,输出1或0。
判断天数部分:输入年份,月份,输出天数。
其中有调用闰年的函数。
判断周几部分:输入年,月,日,输出是周几的信息。
4、程序源代码:#include<stdio.h>#include<color.h>#include<conio.h>int ifren(int year)//判断是否是闰年{if(year%4==0&&year%100!=0||year%400==0)return 1;elsereturn 0;}int monthday(int month,int year)//判断这个月有多少天{if(month==1||month==3||month==5||month==7||month==8||month==10||month==12) return 31;if(month==4||month==6||month==9||month==11)return 30;if(month==2&&ifren(year)==1) return 29;else return 28;}int firstday(int month,int year)//判断本月一日是周几{int w;if(month==1||month==2){month+=12;year=year-1;}w=(1+2*month+3*(month+1)/5+year+year/4+year/400-year/100)%7+1; //蔡勒公式return w;}void yueli(){ int i,k=1,startday,monthdays,month,year;//k是第几周的标志system("cls");printf("=======================================================\n输入年份:");scanf("%d",&year);printf("输入月份:");scanf("%d",&month);monthdays=monthday(month,year);startday=firstday(month,year);printf("\t\t\t%d月\n",month);printf(" Sun\tMon\tTue\tWed\tThu\tFri\tSat\n");if(startday==7){for(i=1;i<=monthdays;i++){printf("%d\t",i);if(i%7==0){printf("\n");}}}if(startday!=7){for(i=1;i<=startday;i++){printf("\t");//把每月1日之前的空格打出来}for(i=1;i<=monthdays;i++){printf("%d\t",i);if(i==7*k-startday){printf("\n");k++;}}}printf("\n\n");}void nianli(){int i,j,k,startday,monthdays,month,year;system("cls");printf("=======================================================\n输入年份:");scanf("%d",&year);for(month=1;month<=12;month++){k=1;monthdays=monthday(month,year);startday=firstday(month,year);printf("\t\t\t%d月\n",month);printf(" Sun\tMon\tTue\tWed\tThu\tFri\tSat\n");if(startday==7){for(i=1;i<=monthdays;i++){printf("%d\t",i);if(i%7==0){printf("\n");}}}if(startday!=7){for(j=1;j<=startday;j++){printf("\t");}for(i=1;i<=monthdays;i++){printf("%d\t",i);if(i==7*k-startday){printf("\n");k++;}}}printf("\n\n");}}int main(){restart:printf("\n\n\n\n");printf("=======================================================\n\n");//主菜单printf("== 万年历==\n\n");printf("== 1、月历==\n\n");printf("== 2、年历==\n\n");printf("== 3、退出==\n\n");printf("=======================================================\n\n");printf("输入数字,来执行相应的功能\n");int select;scanf("%d",&select);switch (select){case 1:yueli();break;case 2:nianli();break;case 3:system("cls");exit(0);break;default:printf("输入错误!\n祖さま、すごいですね!\n");}system("pause");//弄成可以在windows下人性化运行system("cls");goto restart;return 0;}截图:主菜单:月历:年历:5、使用说明:打开程序后,依照主菜单的提示输入数字选择功能,进行万年历的查阅。
C语言万年历设计报告
千里之行,始于足下。
C语言万年历设计报告设计报告:C语言万年历1. 引言本文旨在介绍一个基于C语言开发的万年历设计,并对其设计思路、代码细节、实现效果进行具体的阐述。
万年历是一种依据历法规章,能够显示任意年份任意月份的日历的工具。
在本设计中,我们使用C语言来编写一个简易的万年历程序,具备显示任意年份任意月份的日历、日期查询等功能。
2. 设计思路2.1 数据结构设计在设计万年历程序时,我们需要设计适用于存储日期信息的数据结构。
考虑到日历是依据年份和月份来呈现的,我们可以使用结构体来存储日期的年、月、日信息。
具体数据结构如下:```struct Date {int year;int month;int day;};```2.2 星期计算算法第1页/共3页锲而不舍,金石可镂。
在日历中,我们需要依据给定日期计算出其对应的星期。
这里我们接受Zeller公式来计算星期。
Zeller公式可以依据给定的年、月、日计算出一个对应的星期数。
具体公式如下:```h = (q + ((13*(m+1))/5) + K + (K/4) + (J/4) - (2*J)) % 7```其中,h是一个星期的编号,0代表星期一,1代表星期二,以此类推。
2.3 日历显示算法对于日历的显示,我们需要依据给定的年份和月份计算出该月的天数,并打印出日历表。
具体算法如下:- 首先,依据给定的年份和月份,计算出该月的天数。
- 然后,依据给定年份、月份、星期计算公式,计算出该月的第一天是星期几。
- 接下来,依据计算结果,打印出日历表。
3. 主要函数设计在C语言万年历程序的设计中,我们主要需要设计以下几个函数:3.1 输入函数该函数用于接收用户输入的年份和月份,并进行基本的输入验证,确保输入的年份和月份在合理范围内。
千里之行,始于足下。
3.2 星期计算函数该函数依据给定的年份、月份、日期,计算出对应的星期数,并返回星期数。
3.3 天数计算函数该函数依据给定的年份和月份,计算出该月的天数,并返回天数。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
(2023)C语言万年历设计报告(一)
C语言万年历设计报告
这份报告是针对 2023 年度 C 语言万年历设计而准备的。
设计目的
该万年历的设计目的是为了让用户能够快速地查看任意公历年份的日历,同时还能够显示节气、万年历和日历信息。
设计思路
该万年历的主要思路是通过用户输入任意公历年份,在程序中计算并
显示该年的日历信息。
具体实现思路如下:
1.用户输入年份信息。
2.程序判断该年份是否为闰年,并计算该年的总天数。
3.根据该年第一天是星期几,排列该年每个月的天数。
4.标记国历节日,如元旦、劳动节等。
5.计算并标记该年的节气,如立春、清明等。
6.计算并标记该年的重要万年历信息,如“三伏”、“四季”等。
设计要点
在实现该万年历的过程中需要注意以下几个要点:
1.为了代码的可维护性,尽量将每个功能模块拆分成函数的形式。
2.程序中需要处理日期的加减运算,可以使用标准库中的<time.h>。
3.节气和万年历的计算应该基于一些公式而不是硬编码。
设计结果
经过实现,该万年历已经能够正常运行,并能够正确地显示各种信息。
用户输入任意公历年份后,程序可以迅速计算并展示该年的万年历、
节气和重要节日信息。
结论
通过本次 C 语言万年历的设计,我们不仅深入地了解了日期处理等相
关知识,还提升了编码的能力。
在日常开发中,我们也可以根据这些
基础知识,设计更为实用的应用程序。
可改进之处
尽管该万年历已经能够满足基本的需求,但仍有一些改进空间。
例如:
1.目前仅支持公历,可以添加其他历法的支持,如农历、阴阳历等。
2.界面可以进一步美化,增加更多交互性的组件,如按钮、下拉菜
单等。
3.可以添加更多的功能,如查询特定日期的天气、星座运势等。
总结
本次 C 语言万年历设计,使我们更好地理解了日期处理的相关知识,
提高了我们的编码水平。
同时,我们也意识到在实际项目中,需要更
多的功能和优化,才能更好地服务于用户的需求。
通过持续不断的学
习和实践,我们可以不断提升自己的编程技能。