万年历程序设计_第1页
万年历程序设计_第2页
万年历程序设计_第3页
万年历程序设计_第4页
万年历程序设计_第5页
已阅读5页,还剩13页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、高级语言程序设计高级语言程序设计 课程设计说明书课程设计说明书 设计题目:编写万年历系统设计题目:编写万年历系统 目目 录录 第第 1 1 章章 需求分析需求分析.3 3 第第 2 2 章章 概要设计概要设计.3 3 第第 3 3 章章 详细设计详细设计.6 6 第第 4 4 章章 运行结果及分析运行结果及分析.1313 第第 5 5 章章 课程设计心得课程设计心得.1818 参考文献参考文献.1818 第 1 章需求分析 (1)程序运行时,首先给出六个菜单选项和输入提示: 图图 1 (2)用户可以通过主菜单选择不同选项。输入 1,通过输入具体日期 可显示该日的星期;输入 2,通过输入年份可判

2、断是否是闰年;若输入 3,打印某年的年历;输入 4,打印某年某月的日历;输入 5,查询某月 的最大天数;输入 6,退出。 第 2 章 概要设计 1闰年的判断:闰年的判断: 计算所输入的年份是否可被 4 整除,若不能被整除,为平年。若可 被 4 整除,计算此年份能否被 100 整除,不能被 100 整除则为闰年。既 能被 4 整除,也能被 100 整除的年份,若也能被 400 整除,则为闰年, 否则为平年。闰年 366 天,平年 365 天 图图 2 代码:代码: int runnian(int year) if(year%4=0 else return 0; 2 判断某月的天数;判断某月的天数

3、; 通过函数:通过函数: int day1(int year,int month) int a12=31,28,31,30,31,30,31,31,30,31,30,31; 若为闰,则二月为 29 天。 图图 2-1 代码:代码: if(runnian(year) a1=29; 3.打印年历打印年历 第 3 章详细设计 #include #include bool isleapyear( int nowyear ); int calcuweek( int totaldays ); int calcudays( int nowyear,int nowmonth,int nowday ); boo

4、l checkvalid( int nowyear,int nowmonth,int nowday ); void nowmonthprint( int nowyear,int nowmonth,int nowday ); void weekdayprint( int nowyear,int nowmonth,int nowday ); void nowyearprint( int nowyear ); void menuprint(); const int leapday12=31,29,31,30,31,30,31,31,30,31,30,31;/存储闰年每月天数 const int no

5、leapday12=31,28,31,30,31,30,31,31,30,31,30,31;/存储非闰年每月天 数 int main() int year,month,day; while( true ) menuprint(); int op; scanf(%d, switch( op ) case 1: printf(请输入年月日(格式为 yyyy-mm-dd):); scanf(%d-%d-%d, if ( checkvalid(year,month,day) ) weekdayprint(year,month,day); else printf(输入错误!退出操作n); break;

6、break; case 2: printf(请输入需要查询的年份:); scanf(%d, if( year 9999 | year 9999 | year 9999 | year 12 | month 0 ) printf(年份及月份输入错误!退出操作nn); break; if ( isleapyear(year) maxdays = leapdaymonth-1; else maxdays = noleapdaymonth-1; printf(%d 年%d 月最大天数为%dnn,year,month,maxdays); break; case 6: printf(退出系统,谢谢使用nn)

7、; return 0; break; return 0; bool isleapyear( int nowyear ) / 判断是否闰年 if( nowyear%4 = 0 else return false; bool checkvalid( int nowyear,int nowmonth,int nowday )/ 输入合法性检查 if ( nowyear = 0 ) printf( 输入年份不合法!); return false; if ( nowmonth 12 ) printf(输入月份不合法!); return false; if ( nowday 31 return false

8、; if ( nowday 30 return false; return true; int calcudays( int nowyear,int nowmonth,int nowday )/ 计算总天数 int days = 0; int mon = 0; for ( int i = 1;i nowyear;i+ ) if( isleapyear( i ) ) days += 366; else days += 365; for ( int j = 1;j nowmonth;j+ ) if ( isleapyear(nowyear) ) mon = mon + leapdayj-1; el

9、se mon = mon + noleapdayj-1; days = days + mon + nowday; return days; int calcuweek( int totaldays ) / 计算星期几 int weekno = totaldays%7; return weekno; void weekdayprint( int nowyear,int nowmonth,int nowday ) /打印某年某日星期几 int days = calcudays(nowyear,nowmonth,nowday); int weekno = calcuweek( days ); swi

10、tch ( weekno ) case 0: printf( %-4d 年%-2d 月%-2d 日是星期天!,nowyear,nowmonth,nowday); break; case 1: printf( %-4d 年%-2d 月%-2d 日是星期一!,nowyear,nowmonth,nowday); break; case 2: printf( %-4d 年%-2d 月%-2d 日是星期二!,nowyear,nowmonth,nowday); break; case 3: printf( %-4d 年%-2d 月%-2d 日是星期三!,nowyear,nowmonth,nowday);

11、break; case 4: printf( %-4d 年%-2d 月%-2d 日是星期四!,nowyear,nowmonth,nowday); break; case 5: printf( %-4d 年%-2d 月%-2d 日是星期五!,nowyear,nowmonth,nowday); break; case 6: printf( %-4d 年%-2d 月%-2d 日是星期六!,nowyear,nowmonth,nowday); break; printf(nn); void nowmonthprint( int nowyear,int nowmonth,int nowday ) / 打印

12、月历 int monthday; int days = calcudays(nowyear,nowmonth,1); int weekno = calcuweek(days); if ( isleapyear(nowyear) ) monthday = leapdaynowmonth-1; else monthday = noleapdaynowmonth-1; printf( -%4d 年%02d 月-n,nowyear,nowmonth ); printf( %-5s%-5s%-5s%-5s%-5s%-5s%-5sn,天,一,二,三,四,五,六 ); for ( int j = 1; j

13、= monthday; j+ ) if ( j = 1) for ( int k = 0;k weekno;k+ ) printf(%-5s, ); if ( nowday = j ) printf(*%-4d,j ); else printf( %-5d,j); if ( weekno%7 = 6 ) printf(n); weekno = calcuweek(days+j) ; printf(n); void nowyearprint( int nowyear ) / 打印年历 int monthday; for ( int i = 0; i 12; i+ ) int days = cal

14、cudays(nowyear,i+1,1); int weekno = calcuweek(days); if ( isleapyear(nowyear) ) monthday = leapdayi; else monthday = noleapdayi; printf( -%4d 年%02d 月-n,nowyear,i+1 ); printf( %-5s%-5s%-5s%-5s%-5s%-5s%-5sn,天,一,二,三,四,五,六 ); for ( int j = 1; j = monthday; j+ ) if ( j = 1) for ( int k = 0;k weekno;k+ )

15、printf(%-5s, ); printf( %-5d,j); if ( weekno%7 = 6 ) printf(n); weekno = calcuweek(days+j) ; printf(n); void menuprint() / 打印系统菜单 printf(t 万年历查询系统n); printf(n*); printf(n1.查询某年某月某日是星期几); printf(n2.查询某年是否是闰年); printf(n3.打印某年的年历); printf(n4.打印某年某月的月历); printf(n5.查询某月的最大天数); printf(n6.退出); printf(n*n);

16、 printf(n 请选择:); 第四章 运行结果及分析 1.登陆界面 图图 3 登陆界面提供了六个选项进行选择,并提示输入后的操作方法; 2.查询具体日期 图图 4 输入指令后,可查询某天是星期几; 3.判断闰年判断闰年 图图 5 4.4.显示全年日历 图图 6 图图 7 图图 8 图图 9 4 查询某月最大天数 图 10 第 5 章 课程设计心得 通过本次课程设计我第一次通过自己的实践对书本上的知识进行了与 生活相关的运用。在这个程序中,主要应用了大一所学习的循环,条件语 句,数组以及调用函数。这些知识的应用使我对课本内容的认识得到了加 深。 在编写程序的过程中,也出现了很多错误。比如程序语句错误导致检 测时连续报错;函数语句编写错误导致输出结果与实际不符等。出现这些 情况后,通过对一些新知识的学习和对网上相关

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论