最新C++程序设计(万年历——说明书).doc
Four short words sum up what has lifted most successful individuals above the crowd: a little bit more.-author-dateC+程序设计(万年历说明书)C+程序设计(万年历说明书)C+程序设计说明书题目:万年历 班级学号: 学生姓名: 目录一 应用程序的名称二 应用程序的主题、设计目的三 应用程序简介1程序的基本结构及内容2. 程序的运行环境四主要运行界面的介绍五程序亮点六课程设计中存在的问题及解决方法一课程设计名称 万年历二应用程序要求、目的主题:万年历目的:实现对年月的查询三应用程序简介 (1)基本结构: 整个程序有cls_screen(清屏)、judgement(判断是否为闰年)、show_week(记录周几)、print_year(查询某年)、print_year_month(查询某年某月)等自定义函数,程序中涉及到switch语句、for语句、if语句等和多次函数调用语句,开头定义了day_of_month数组,主要目的是将12个月每个月有多少天依次排出,在后面又用if语句判断二月的天数是28还是29。在主函数中运用while语言与switch语句的嵌套,是程序拥有了循环的功能。用fflush(stdin);语句清除输入缓存,使程序在使用过程中不会太过眼花缭乱。 万年历的编程,需要两个方面的讨论和研究,一是要在用户输入年份的时候,判断该年是否为闰年,而对于闰年的判断,能被4整除但不能被100整除,或者能被400整除的年份为闰年,否则为平年。所以会改变day_of_month数组中的二月份的数值。二是在用户输入年月份的时候,判断该年该月的第一天是周几,从来好排列。而对于判断周几,需要运用公式:w=(y+y/4+c/4-2c+26(m+1)/10+d-1)%7并用if语句使用判断。通过这两个方面的讨论和实现,才能合理的编程出万年历的基本程序代码。 (2)源程序代码:#include<stdio.h>#include <string.h>#include <time.h>#include <math.h>#include <windows.h>int year , month , day ;int day_of_month12 = 31,28,31,30,31,30,31,31,30,31,30,31;int current_year,current_month,current_day;void cls_screen()printf("请按任意键返回!n");getchar();getchar();system("cls");int judgement (int y)if (y % 400 = 0 | (y % 100 !=0 && y %4 =0)return 1 ;else return 0 ;int show_week (int year , int month , int day)/*公式:w=(y+y/4+c/4-2c+26(m+1)/10+d-1)%7*/int w ,k;int year_last=year %100,c=year/100 , m = month;if (month=1 )year_last-=1 ;else if (month=2)year_last-=1;w = (year_last + year_last/4 + c/4 - 2*c +26*(m+1)/10+day-1);if (w<0)k=(w%7+7)%7;else k=w%7;return k ;void print_year (int year)int i , k ,x ,first_week;printf ("请输入想要查询的年份(格式如2012):");scanf ("%d",&year);printf("=%d年=n",year);printf("n");if (judgement(year)day_of_month1=29;else day_of_month1=28;for (i=1 ; i <13 ; i+)first_week = show_week(year,i,1);printf("=%d月日历如下=n",i);printf ("SuntMontTuetWedtThutFritSatn");for (x=1;x<=first_week;x+)printf("t");if (x%7=0) printf ("n");for (k=1;k<=day_of_monthi-1;k+)printf("%dt",k);if (x%7=0) printf ("n");x+;printf("n");printf("n");printf("n");void print_year_month ()int k ,x ,first_week;printf ("请输入想要查询的年月(格式如2012 12):");doscanf ("%d %d",&year,&month);if (month<1|month>12)printf("您输入的月份有误哦请输入正确的月份n");printf ("请输入想要查询的年月(格式如2012 12):");while(1>month|month>12);printf("=%d年%d月=n",year,month);if (judgement(year)day_of_month1=29;else day_of_month1=28;first_week = show_week(year,month,1);printf ("SuntMontTuetWedtThutFritSatn");for (x=1;x<=first_week;x+)printf("t");if (x%7=0) printf ("n");for (k=1;k<=day_of_monthmonth-1;k+)printf("%dt",k);if (x%7=0) printf ("n");x+;printf("n");void main ()int choice,year,month,day,flag=1,option;char c , k,ch;while(1)printf("=欢迎来到XXX的万年历=n");printf("请选择:n");printf("* * * * * * * * 1.查找某一年的年历 * * * * * * * *n");printf("* * * * * * * * 2.查找某一月的月历 * * * * * * * *n");printf("* * * * * * * * 0.退出 * * * * * * * *n");printf("=n");printf("请输入您的选择: ");scanf("%d",&option);switch(option)case 1:while(1)print_year(year);cls_screen();printf("do you want to continue?(Y/N)");fflush(stdin);scanf("%c",&ch);if(ch='N'|ch='n')break;break;case 2:while(1)print_year_month ();cls_screen();printf("do you want to continue?(Y/N)");fflush(stdin);scanf("%c",&ch);if(ch='N'|ch='n')break;break;case 0:break;:程序的运行环境本程序运行环境为四主要运行界面的介绍 选择“1”并查询2012年的日历。显示2012年的日历:可以按任意键返回。出现“是否继续的提示语”按y可继续查询某年的日历。按n可返回开始时的画面,再继续选择。选择“2”,查询2012年9月的月历。五程序亮点 此程序开始有提示语问候,使用户使用时亲切便捷,并实现了循环的过程,可以无限循环的查询你想知道年份月份的日历,在循环的过程中加有清屏的效果。六课程设计中存在的问题及解决方法 在编译程序时,对蔡勒公式的不熟悉,导致程序在年月之间的错误,但在之后的调试中逐步掌握了这个公式,并解决了这一系列的问题。 -