C++万年历实验报告

合集下载

万年历实训报告.doc

万年历实训报告.doc

万年历实训报告.doc
摘要:
本实训主要用于介绍我们能够实现一个基于C语言、Qt图形接口,实现万年历功能的程序。

由于该项目涉及许多基础知识,让学生能够跨科目获得完整的实践经验。

在实训中,我们先了解基础知识,如如何使用C语言及Qt图形接口;然后构建程序。

程序的核心思想是使用类型插入、提取、比较和计算日期的来求解式的历史时期,展示日历,并计算公历农历的值。

最后,我们完成了基于Qt图形界面的万年历程序,实现了查询公历和农历日期,以
及带复杂信息的今天提醒等功能。

本实训有力地提升了学生的计算机知识及实践能力,优
化了学习的过程。

总结:
通过本次实训,学生可以获得跨学科的实践经验,学习到了C语言和Qt图形接口的
知识,以及利用日期插入、提取、比较和计算的历史知识。

并实现了一个基于Qt的万年
历程序,有助于提升学生的实践能力,极大地增强了学习效率。

万年历实验报告c

万年历实验报告c

万年历实验报告c
《万年历实验报告C》
实验目的:通过观察和记录万年历C的使用情况,了解其功能和性能表现。

实验材料:万年历C、纸笔、实验记录表
实验步骤:
1. 观察万年历C的外观特征和功能按钮布局
2. 测试万年历C的日期、时间和节气显示准确性
3. 使用万年历C的闹钟功能进行定时提醒
4. 测试万年历C的计算器功能
5. 了解万年历C的电池寿命和充电方式
实验结果:
1. 万年历C外观精致,功能按钮布局合理,操作简单方便
2. 日期、时间和节气显示准确无误,符合标准
3. 闹钟功能响铃准时,提醒效果良好
4. 计算器功能操作流畅,计算准确
5. 电池寿命长,充电方式简便,使用方便
实验结论:
万年历C在外观设计、功能性能和使用体验方面表现出色,符合用户需求和期望。

其准确的日期、时间和节气显示、可靠的闹钟功能、方便的计算器功能以及长久的电池寿命,使其成为一款实用的生活助手。

在未来的生活中,万年历C将会成为人们不可或缺的日常用品。

结语:
通过本次实验,我们对万年历C有了全面的了解,它的出色表现让我们对它充满信心和期待。

相信在未来的使用中,它将会为我们的生活带来更多的便利和愉悦。

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

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

c语言课程设计报告--万年历C 语言课程设计报告C语言课程设计报告实验课程:c语言课程设计年级:软件2班实验成绩:课程设计名称万年历姓名:**任课教师:杨** 学号:**** 实验日期:2014.6.11一、目的利用所学的知识解决生活中的实际问题。

本课题涉及的知识内容:时间函数,tm结构,for,do..while循环嵌套,if语句,指针,函数回调,结构体函数,文件创建与保存,自定义函数等语言内容。

二、内容与设计思想1.设计内容①显示系统当前时间②查询用户输入的时间③在用户输入的时间上,进行下一步的查询④对用户所需日期添加备忘,可供查看和添加2.主要代码结构main()函数调用了菜单函数,通过菜单函数来调用各个不同功能的函数。

3.主要代码段分析。

先显示系统时间,再通过列一个菜单来调用各个功能的函数;Themonth函数实现了对用户输入日期当月的处理,例如:日期的显示,日期与周几的对应等等。

Nextstep函数则是对输入日期的后续操作. Writetext、Readtext,、Changetext函数是对备忘录方面的操作,主要功能分别是写备忘,查看备忘,修改备忘。

三、使用环境本次上机实践所使用的平台和相关软件。

平台:Windows 2000相关软件:VC++四、调试过程1.测试结果分析经检验,运行结果正确五、总结1.设计中遇到的问题及解决过程调试过程中往往一个月的第一天与相对应的星期几对上比较棘手,通过查阅资料,找到了相应的函数;解决了问题备忘方面设计有关文件的读取方面的知识,在此之前,对文件的读取,修改比较,生疏模糊。

通过看书和上网寻找有关文件读取方面的例子,对文件有了初步的认识和应用。

期望备忘录功能中有修改功能,后期实在解决不了,换成了较为简单的添加功能。

2.设计体会和收获。

学会了如何通过现有资源解决问题;对c语言的有了更深的了解六、附录1.源代码#include "stdio.h"#include "time.h"#include "malloc.h"#include "stdlib.h"#include "string.h"typedef struct text{int num;char date[100];}Text[30],*pText;//函数声明void in_menu(void);void menu(void);void themonth(int,int);void nextstep(int,int);void Writetext(pText);void Readtext(void);void addtext(pText);void exit_calendar(void);int thelast(FILE*);//总菜单void allmenu(void){in_menu();//输出菜单menu();//选择菜单}//输出菜单void in_menu(void){printf(" △○日历查询及备忘系统○△\n");printf("\n");printf(" ===================1、日历==============================\n\n");printf(" ===================2、编辑备忘=========================\n\n");printf(" ===================3、查看备忘===========================\n\n");printf(" ===================4、添加备忘===========================\n\n");printf("====================5、退出==============================\n\n");printf("******************************************************* *********\n\n");printf("请选择菜单号码:");}//菜单选择void menu(void){struct text t;int i;scanf("%d",&i);switch(i){case 1:{//当前查询的月份int year;int month;printf("请输入要查询的年份及月份:\n"); scanf("%d %d",&year,&month); themonth(year,month);printf("按回车键返回主菜单!\n"); getchar();getchar();system("cls");allmenu();break;}case 2:{Writetext(&t);//写备忘printf("按回车键返回主菜单!\n"); getchar();getchar();system("cls");allmenu();break;}case 3:{Readtext();//查看备忘内容printf("按回车键返回主菜单!\n"); getchar();getchar();system("cls");allmenu();break;}case 4:{addtext(&t);//修改备忘printf("按回车键返回主菜单!\n"); getchar();getchar();system("cls");allmenu();break;}case 5:{exit_calendar();}default: break;}void nextmenu(int year,int month){int j;printf("===================1、结束本次查询,回菜=====================\n");printf(" ===================2、继续查询============================\n");scanf("%d",&j);if(j == 1){allmenu();}else{nextstep(year, month);}}/************************查询的当月*/void themonth(int year,int month){//定义变量struct tm t,*date;//tm结构指针time_t t_day;//声明time_t类型的变量t_dayint i,j;int day;if(month == 2 )//月份天数的判断if(year%4 == 0&&year%100 == 0||year%400 == 0)day = 28;elseday = 29;}else if(month == 4 || month == 6 || month == 9 || month == 11)//小月{day=30;}elseday=31;printf("查询日期当月天数是:%d\n日历\n",day); //输出当前天数printf("一\t二\t三\t四\t五\t六\t日\t\n"); //日历的第一行,显示一二三四五六日//功能:使当月中的每一天与对应的周几对齐for(i = 1;i <= day;i++){t.tm_year=year-1900;//从1900开始t.tm_mon=month-1;//月份【取值[0-11]】t.tm_mday=i;//一个月的日期[1-31]t.tm_hour=0;//时-取值区间t.tm_min=0;//分-取值区间t.tm_sec=0;//秒-取值区间t.tm_isdst=0;//夏令时标识符,实行夏令的时候为正否则为0t_day=mktime(&t);//date=gmtime(&t_day);if(i==1)for(j=0;jtm_wday;j++)printf("\t");}if(date->tm_wday == 6){printf("%d\n",i);}elseprintf("%d\t",i);}printf("\n\n");nextmenu(year,month);}bool sfnext(int * k)//判断是否继续{if((*k) == 1)return true;elsereturn false;}//是否进行后续操作void nextstep(int year,int month) {int m,k;do{printf("月历上翻请按-1,下翻请按1\n"); scanf("%d", &m);system("cls");if(m == 1){month += 1;printf("现在查询时间为%d年%d月的日历:\n",year,month); if(month/12 != 0){year = year + month/12;month = month % 12;}themonth(year,month);printf("是否继续查询,是:请按1\n");printf("否:请按0\n");scanf("%d",&k);}else if(m == -1){month -= 1;printf("现在查询时间为%d年%d月的日历:\n",year,month); if(month == 0){month = 12;year--;}if(month <= 0){month += 12;year--;}themonth(year,month);printf("是否继续查询,是:请按1\n");printf("否:请按0\n");scanf("%d",&k);}else{printf("error");}}while(sfnext(&k));}//读文件void Writetext(pText t){int len;char n;//读取文件FILE *fp;if((fp = fopen("C:\\text.txt","a+"))==NULL)//a+:以读写方式打开一个文件,允许读{printf("Cannot open the file ,press any key to exit");getchar();exit(0); //退出程序}printf("是否确定对某年某月某日进行备忘:y或n\n");getchar();scanf("%c",&n);if(n == 'y'||n == 'Y'){printf("请输入要添加备忘的数量:\n");scanf("%d",&len);printf("按格式输入(如:1 2014 6 17 c语言作业)\n");//输入需要备忘的年月日for(int i = 0;i < len; i++){printf("Num%d:",i+1);scanf("%d %s",&t[i].num ,&t[i].date);fprintf(fp,"%d %s\n",t[i].num ,t[i].date);//格式化读写}fclose(fp);}else{exit(-1);}}//判断文件是否读完int thelast(FILE*fp){if(fgetc(fp) == EOF)return 1;else{fseek(fp,-1L,SEEK_CUR);return 0;}}//查看备忘内容void Readtext(void){static char c[200];//文件输入FILE*fp;if((fp = fopen("c:\\text.txt","r")) == NULL){printf("文件不存在,按任意键退出.");exit(0);}else{printf("序号\n备忘内容\n");while(!thelast(fp)){fscanf(fp,"%s",c);//读取文件中的信息printf("%s\n",c);}printf("\n");}}void addtext(pText t){FILE *fp;int n,m;if((fp = fopen("C:\\text.txt","a+"))==NULL)//a+:以读写方式打开一个文件,允许读{printf("Cannot open the file ,press any key to exit");getchar();exit(0); //退出程序}printf("请输入要继续添加备忘的数量:\n");scanf("%d",&n);printf("已备忘数量:");scanf("%d",&m);printf("按格式输入(如:1 2014 6 17 c语言作业)\n");//输入需要备忘的年月日for(int i = 0;i < n; i++){printf("Addnum%d:",i+m+1);scanf("%d %s",&t[i+m].num ,&t[i+m].date);fprintf(fp,"%d %s\n",t[i+m].num ,t[i+m].date);//格式化读写}fclose(fp);}void exit_calendar(void)//退出系统{exit(1);}//主函数void main(){time_t now;//声明time_t类型变量time(&now);//获取时间printf("\n\t\t现在是:%s\n",ctime(&now));//系统时间allmenu();// nextstep(year, month,&t);//对当前月份的后续操作}。

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语言万年历设计报告

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

万年历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

万年历实验报告c万年历实验报告一、引言万年历是一种用来记录时间和日期的工具,它可以帮助人们更好地组织日常生活和工作。

本实验旨在探究万年历的原理和功能,并通过实际操作来验证其准确性和可靠性。

二、实验设备和方法1. 实验设备:万年历软件、计算机、手机等。

2. 实验方法:通过使用万年历软件和其他设备,观察和记录不同日期和时间的显示情况,并与实际情况进行对比。

三、实验结果和讨论1. 日期显示准确性在实验过程中,我们发现万年历软件能够准确地显示当前日期,并且可以根据需要切换到其他日期。

无论是过去的日期还是将来的日期,软件都能正确地显示出来。

这表明万年历软件具有很高的日期显示准确性。

2. 节假日提醒功能万年历软件还具有节假日提醒功能,可以在特定的节假日提醒用户。

我们设置了几个节假日,如春节、国庆节等,并观察软件是否能够准确地提醒。

结果显示,软件能够在相应的节假日前一天或当天提醒用户,这对于人们合理安排假期和活动非常有帮助。

3. 日期计算功能万年历软件还提供了日期计算功能,可以根据用户输入的日期和天数,计算出未来或过去的日期。

我们进行了一些日期计算的实验,结果发现软件能够准确地计算出目标日期。

这对于人们进行时间规划和安排非常方便。

4. 多时区显示功能在实验中,我们还测试了万年历软件的多时区显示功能。

通过设置不同的时区,我们观察软件是否能够准确地显示不同地区的时间。

实验结果显示,软件能够根据设置的时区自动调整时间显示,确保用户能够准确了解不同地区的时间。

5. 天气预报功能一些万年历软件还提供了天气预报功能,可以显示当前和未来几天的天气情况。

我们对软件的天气预报功能进行了测试,结果显示软件能够准确地显示天气情况,并且提供了详细的天气信息。

这对于人们出行和活动的决策非常有帮助。

四、结论通过本实验,我们验证了万年历软件的准确性和可靠性。

它能够准确地显示日期、提醒节假日、进行日期计算、显示多时区时间以及提供天气预报等功能。

万年历C语言报告3

万年历C语言报告3

软件工程实验报告姓名:学号:班级:指导老师第三章实验报告(Reports)实验题目:实验目的通过实例使同学们掌握结构化数据流分析技术,结构化程序设计的基本概念与技术,并且养成良好的编码风格,单元测试的一般步骤及技术,集成测试的一般步骤和技术等软件设计的相关技术。

一.实验内容1.软件需求分析数据流程图总流程算法一算法二2.软件设计与编码#include "stdio.h"#include "conio.h"void main(){int leap_year(int y);int count_leap(long year);int monthdays(int month,long year);void monthprint(long year,int month);int month=0;long year=0;char choose;clrscr(); /* clear the windows */do{printf ("\n\nPlease input one integer number as'year'(0~3000):\n");scanf ("%ld",&year);if (year<0||year>3000) printf ("WANNING:ERROR,please input again!");}while (year<0||year>3000);printf ("\n\n");do{printf ("please input the month(1~12)\n\n");scanf ("%d",&month);if (month<=0||month>12) printf ("WANNING:ERROR,please inputagain!");}while (month<=0||month>12);printf ("\n\n\n");printf("\t\t\t\t%ld\t%d\n\n",year,month);printf("\n******************************************************************************* *\n");printf("\t\t Sun\t Mon\t Tue\t Wen\t Thu\t Fri\t Sat\n");monthprint(year,month);printf("\n\n");choose=getchar();printf("Continue?(y/n):\n\n");scanf("%c",&choose);if (choose=='y'||choose=='Y') main(); /*main函数调用main函数本身*/ }int leap_year(int y){ int i;if (y%4==0&&y%100!=0||y%400==0) i=1;else i=0;return i;}int count_leap(long 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,long 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};/*1~12月的每月天数*/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}; /*12~1月的每月天数*/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(long 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++) /*由于上一行打印星期的时候空2个制表位,所以weekday要加2*/printf ("\t");for (i=1;i<=y;i++){if ((i+weekday-1)%7==0) printf ("\n\n\t\t%3d\t",i);else printf ("%3d\t",i);};printf("\n********************************************************************* ***********\n\n");}二.测试结果三.总结通过本次实验,我充分认识到了制作一个能够运行的软件和制作一个好的软件之间的差距,做一个好的软件不仅要求软件能够工作,而且软件从开始制作到最终完成都要经过严格的审核,不断的修改,从而使做出的软件界面更和谐,更易于操作,功能更强大等等。

C语言程序设计报告《万年历》

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 定义整型,字符型,指针变量,字符型数组和指针数组。

(2023)C语言万年历设计报告(一)

(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语言万年历课程设计报告

本次课程设计的主题为“C语言万年历”,旨在通过设计和实现一个简单的万年历程序,深入了解C语言程序设计的基本方法和技巧。

通过本课程设计的学习,我对C语言程序设计的各个方面进行了深入的了解和掌握,同时也提高了自己的编程思维和实践能力。

一、设计思路。

本次课程设计的主要功能是实现万年历。

在设计程序之前,我首先对万年历的基本功能进行了分析和思考,包括输入年月日,输出当月的日历和星期几等。

同时,考虑到用户友好性,我还增加了一些额外的功能,如输入错误时的提示,具体日历同时附带节假日等。

在分析了功能需求之后,我便开始考虑程序设计的具体实现。

首先,我选择了C语言作为实现程序的语言,因为C语言广泛应用于各类软件工程和移动计算等领域,适用性强,易于学习和掌握。

接着,我根据分析需求,确定了程序的基本框架和主要模块,包括输入年月日模块、求解该日是星期几模块、绘制当月日历模块和判断节日等模块。

二、程序实现。

在程序实现过程中,我遵循了模块化编程的原则,把整个程序划分成几个独立的模块,并在模块之间进行数据交互和函数调用。

具体来说,我分别实现了以下几个模块:1.输入年月日模块:该模块负责接收用户输入的年月日信息,并检查输入格式是否正确。

在输入不合法时,该模块能够给用户相应的提示信息,并要求用户重新输入。

2.求解该日是星期几模块:该模块根据给定年月日,求出该日是星期几。

该模块采用基姆拉尔森计算公式来实现。

3.绘制当月日历模块:该模块负责绘制给定月份的日历,并标注当日及节假日等信息。

在绘制日历时,该模块能够考虑各种特殊情况,如闰年、月初不为星期一等。

4.判断节日等模块:该模块能够根据给定年月日信息,判断当日是否为节假日、纪念日等特殊日子,如春节、圣诞节等,并在日历上作出相应标注。

以上四个模块构成了整个程序的主要功能。

在实现过程中,我还遇到了一些问题,如求解闰年的问题、绘制多行日历的问题等。

针对这些问题,我通过查找资料、借鉴其他同学的代码等方式进行了解决。

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.判断该年是平年还是闰年以及生肖等。

C语言万历设计报告(1)

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语言万年历设计报告

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、输入一个年份,在屏幕上输出该年的年历(包括每月的天数和所对应的星期几),并且在每月的左上角或右上角打印出相应的年份和月份,要求输出界面尽可能整齐、美观,符合年历显示规范。

假定输入的年份在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++万年历实验报告

C++万年历实验报告一、基本介绍万年历是一款可以展示日历的小应用程序,它能够显示不同年月日的具体日期,以及该日期是星期几等信息。

本次实验中,我们使用C++语言来实现这个功能,通过输入年月日等信息,计算出具体的日期信息,并且输出展示在屏幕上。

二、设计思路1. 基本 calendar 类我们首先需要创建一个calendar类,用于进行日期计算并且输出日历信息。

该类中包含以下成员变量和方法:- 成员变量:- m_year - 日历所在年份- m_month - 日历所在月份- m_day - 日历所在日- calendar() - 构造函数,初始化成员变量为0- set_date() - 设置日历日期- is_leapyear() - 判断当前年份是否为闰年- month_days() - 计算当前月份有多少天- week_day() - 计算当前日期是星期几- print_calendar() - 输出日历信息2. 输入信息为了方便用户输入信息,我们使用了getline()函数来获取用户输入的年、月、日信息,然后将其转换成整数型,并调用set_date()方法,将该信息赋值给我们的calendar 对象。

3. 计算并输出信息我们先根据输入的年份,判断是否为闰年,并且调用month_days()方法来计算出输入的月份有多少天。

然后,我们利用week_day()方法来计算出输入的日期是星期几,最后输出展示在屏幕上。

三、实现细节1. 日期设置设置日期时,我们需要检查输入的年月日是否符合实际情况。

例如,月份不能大于12,每月天数也不能超过实际天数。

2. 星期计算计算星期时,我们采用了一个基于蔡勒(Zeller)公式的方法。

根据该公式,我们可以计算出任何给定日期是星期几,具体方法如下:weekday = (day_num + ((13 * adjusted_month - 1) / 5.0) + adjusted_year + (adjusted_year / 4.0) - (adjusted_year / 100.0) + (adjusted_year / 400.0)) % 7;其中day_num是当前日期数,adjusted_month是当前月份数(3代表3月,4代表4月,以此类推),adjusted_year是当前年份。

C语言程序设计报告―“万年历”

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语言实训题目设计报告 万年历

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语言万年历设计报告设计报告: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. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
cout<<"继续查询请输1 "<<endl<<"退出查询请输入字符"<<endl;
int x;
cin>>x;
if(x==1)
goto loop;
}
void wnl::isleapyear(int year)
{
if(year>=1000&&year<=9999)
printf("%s\n",year%(year%100?4:400)?"no":"yes"); //以C语言流的形式判断会更快一些,节省内存
case 6:cout<<"Saturday"<<endl;
}
}
}
}
else
cout<<"没有按格式输入"<<endl;
}
int wnl::getdays(int year,int month,int day)
{
int i,sum=0;
for(i=1;i<year;i++)
{
if(isleap(i)) sum+=366;
int getyear(){return Year;} //返回私有成员的值
int getmonth(){return Month;}
int getday(){return Day;}
private:
int Year,Month,Day;
}_wnl;
void main()
{
int choice,year,month,day;
int i=1;
for(i=1;i<=12/choice;i++) //计算纵向输出几个月
{
for(int h=1;h<=choice;h++) //该循环用于输出横向月份名
{
int m=choice*(i-1)+h; //计算月份
cout<<" "<<monthname[m]<<" ";
}
cout<<endl;
case 4: cout<<"该年是鼠年"<<endl; break;
case 5: cout<<"该年是牛年"<<endl; break;
case 6: cout<<"该年是虎年"<<endl; break;
case 7: cout<<"该年是兔年"<<endl; break;
case 8: cout<<"该年是龙年"<<endl; break;
cout<<"▏判断某天是星期几请按2;▕"<<endl;
cout<<"▏判断某年的隶属生肖请按3;▕"<<endl;
cout<<"▏输出某年的日历请按4;▕"<<endl;
cout<<"▏输出某月的日期请按5;▕"<<endl;
cout<<"╲如果您要退出系统请按0;╱"<<endl;
cin>>choice;
{
if(year>=1000&&year<=9999)
{
cout<<"输入一行输出的月份数:";
int choice;
cin>>choice;
int s;
int a[3],b[3]; //b数组用来储存每月的天数a数组用来临时储存那一月输出到的日期
cout<<" year:"<<year<<endl;
(11)参考文献:
[1]吕凤翥,《C++语言程序设计》,清华大学出版社。
实验代码:
//万年历
#include<iostream.h>
#include<stdio.h>
#include<iomanip.h>
int dayofmonth[13]={0,31,28,31,30,31,30,31,31,30,31,30,31}; //整形数组用于储存每月的天数
void animal(int year);//判断某年的生肖
int getyear(){return Year;}//返回私有成员的值
int getmonth(){return Month;}
int getday(){return Day;}
3、定义私有成员:int Year,Month,Day;
cout<<" "; //输出月前的空
if(isleap(year)) dayofmonth[2]=29;
b[j]=dayofmonth[month]; //月份天数b数组储存一个月的天数
for(int i=1;i<8-s;i++) //从一号开始输出
cout<<setw(2)<<i<<" "; //最后那个空是为了让一位数和两位数对齐
cout<<endl;
for(j=0;j<choice;j++) //这个循环是为了输出第一行,第一行都是单数,所以提出来输
{
int month;
month=choice*(i-1)+j+1; //计算月份
s=getdays(year,month,1);
s=s%7; //获取每月第一天
for(int m=0;m<s;m++)
int getdays(int year,int month,int day);//获取据第一天天数
void weekdays(int year,int month,int day);//获取星期几
void printyear(int year);//输出年的日历
void printyearmonth(int year,int month); //输出某年某月的日历
switch(choice)
{
case 0:return;
case 1:
cout<<"输入一个年份格式如:xxxx";
cin>>year;
_wnl.isleapyear(year);break;
case 2:
{
cout<<"请输入您要查询的天数格式如xxxx xx xx";
cin>>year>>month>>day;
{
if(year>=1000&&year<=9999)
{
if(month<=12&&month>=1)
{
int max=dayofmonth[month];
if(day>0&&day<max)
{
int s=getdays(year,month,day)%7;
switch(s)
{
case 0:cout<<"Sunday"<<endl;break;
{
int n=year%12;
switch(n)
{
case 0: cout<<"该年是猴年"<<endl; break;
case 1: cout<<"该年是鸡年"<<endl; break;
case 2: cout<<"该年是狗年"<<endl; break;
case 3: cout<<"该年是猪年"<<endl; break;
(5)创意的技术实现
(6)
(7)
(8)
主函数流程
判断闰年
获取天数
输出年份
(9)课程设计中目前存在的问题:
无法在欢迎页面插入字符画;
(10)设计实践过程中的自我感受
这是我第一次编写如此长的代码,从网上如同大海捞针似的寻找编写方法,看铺天盖地的长代码,还有的程序是错的。输入的时候,没有小工具。在看着自己熬通宵打出的代码,一大串的错误,真的有些泄气。改对了执行输出结果还是错的,只好重新思考算法。不过通过这次编程我真的学会了好多,比如其他的头文件的功能;setfil(‘’)设置填充字符;setw()定义字段长度……也让我真正体会到了编程的作用,爱上了编程。
cout<<" ~~欢迎来到万年历查询系统~~"<<endl<<endl;
cout<<"设计人:"<<endl;
cout<<"天津职业技术师范大学\n\t\t\t设计人:张锦琪\n\n";
loop:
cout<<"╱请按序号输入您要做的工作:╲"<<endl;
cout<<"▏判断闰年请按1;▕"<<endl;
相关文档
最新文档