



版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、山东交通学院面向对象课程设计万年历系统院( 系 ) 别信息工程系班级计算 111学号11081123姓名秦先生指导教师徐 硕 博时间2012-03-052012-03-09课程设计任务书题目万年历系统系 (部)信息工程系专业计算机科学与班级计算 111学生姓名秦先生学号11081112303月05日至03月09日共1周指导教师 ( 签字 )系主任(签字)年月日成绩评定表作品成绩报告成绩口试(答辩)成总评成绩绩.目录1课程设计概述 .51.1万年历系统功能概述 .51.2开发环境概述 .52万年历系统总体设计 .62.1问题分析 .62.2总体设计流程图 .73万年历系统详细设计 .84程序测试
2、 .94.1进入程序界面 .94.2主菜单界面 .94.3显示当前时间界面 .104.4查询时间界面 .104.5查询时间出错界面 .114.6退出程序界面 .124.7主菜单选择出错界面 .错误! 未定义书签。 25程序源代码13设计体会及今后的改进意见21参考文献. 211 课程设计概述1.1字符统计软件功能概述模仿 Windwos的日历 .1) 日历显示功能。能根据系统日期进行初始化, 如果没有任何输入,则显示系统日期所在月份的月历。2) 日历查询、闰年判断功能。 输入日期进行查询, 显示查询日期所在月份的月历,还将显示所在年份是否为闰年。3) 参数检查功能。 如果输入日期不合法, 查询
3、将被拒绝, 并显示提示信息。1.2开发环境概述在实验室一人一台微机。2 课程设计概述2.1问题分析2.1.1难点在于判断星期,但根据蔡勒公式,可以很容易地有年月日推断出星期:nDay=year-1+(year-1)/4-(year-1)/100+(year-1)/400+nday;w=nDay%7;其中 year :要查询的年份nday:从该年的一月一日起到该天的天数w:得出的星期数, w=0 表示星期天。2.1.2在打印月历时,只要知道第一天的星期,就可以依次输入后面的日期,通过定长度输出日期, 在遇到某天时星期六时, 就换行输出, 因此可以按照月历的格式输出。对于初始输入当前月历, 可以通
4、过 <time.h> 中的 time 和 localtime 函数取出系统时间进行初始化。time_t timer;struct tm* gmt;time(&timer);gmt=localtime(&timer);gmt 就是一个时间结构体,可以从中取出年月日。2.1.3闰年的判断,能被4 整除但不能被 100 整除,或者能被400 整除的年份为闰年,否则为平年。日期的查询,就是直接打印该天所在月份的月历。2.1.4判断日期是否合法,可以先判断年月日是否有小于0 的值,月和日是否有超出最大值12 和 31 ,如果通过此判断合法,再判断是否时闰年,如果时闰年,则判断
5、二月份是否满足要求,闰年二月份不能超过29 天,平年二月份不能超过 28 天。在查询过程中,如果发现输入不合法或者不满足输入要求,则要求重新输入。2.2总体设计流图2.2.1程序开始按提示输入数字是再次输入数字执行相应的功能输入的数字是否是0退出3万年历系统详细设计3.1.1int runnian(int year);该函数判断某年是否是闰年,参数为闰年, 0 表示该年为平年。year表示要判断的年份,返回值1 表示该年3.1.2struct tm* getDay();该函数用以取得系统的时间。该函数没有参数,返回值类型为structtm*,是一个包含时间的结构体。3.1.3int jianc
6、ha(int year,int month,int day);该函数用以判断输入的年份是否合法,参数为要判断的年月日, 返回值为 1 表示该日期合法,为0 表示不合法。3.1.4int getwDay(int year,int month,int day);该函数用以根据一个日期推断星期,参数为要判断的年月日。返回值为整型,123456 分别表示星期一到星期六,0 表示星期天。3.1.5void chaxun();该函数用以显示要查询的日期的月历,无参数和返回值,。3.1.6void inline backMenu();该函数为内联函数, 用以实现完成某项功能后按任意字符键返回主菜单, 无参数
7、和返回值。3.1.7void caidan(int &year,int &month,int &day);该函数参数为系统日期,无返回值,用户在该函数执行时可以选择功能。4 程序测试4.1进入程序后显示4.2按任意键返回主菜单4.3进入主菜单后,按1,显示当前时间4.4在主菜单界面按2,进行日立的查询,并经时期的合法性判断和平润年的判断。 例如输入: 2020 12 20. 由于输入合法会显示:4.5进入程序后显示输入:2012 11 40 ,由于输入不合法,会进行报错,要求重新输4.6在主界面中输入3,程序退出4.7在主界面中输入: eufhg, 会显示5. 程序原代
8、码 :#include<stdio.h>#include<time.h>#include<math.h>#include<string.h>#include<windows.h>#include<conio.h>int year,month,day;/ 全局变量记录时间intdaysOfMonth212=31,28,31,30,31,30,31,31,30,31,30,31,31,29,31,30,31,30,31,31,30,31, 30,31;int runnian(int year)/ 判断是否是闰年 return(
9、year%4=0&&year%100!=0|year%400=0)?1:0;struct tm* getDay()/ 从系统取得当前时间time_t timer;struct tm* gmt;time(&timer);gmt=localtime(&timer);return gmt;int jianca(int year,int month,int day)/ 检查日期是否正确if(year<0|month<1|month>12|day<1|day>31)return 0;switch(month)case 1:case 3:cas
10、e 5:case 7:case 8:case 10:case 12:if(day>31)return 0;break;case 4:case 6:case 9:case 11:if(day>30)return 0;break;default:if(runnian(year)&&day>29)return 0;else if(runnian(year)=0&&day>28)return 0;return 1;int getwDay(int year,int month,int day)/ 取得星期int nday=0,nDay,i,w;fo
11、r(i=0;i<month-1;i+)nday+=daysOfMonthrunnian(year)i;nday+=day;nDay=year-1+(year-1)/4-(year-1)/100+(year-1)/400+nday;w=nDay%7;return w;int week(int year,int month,int day)/ 取得星期int nday=0,nDay,i,w;for(i=0;i<month-1;i+)nday+=daysOfMonthrunnian(year)i;nday+=day;nDay=year-1+(year-1)/4-(year-1)/100+
12、(year-1)/400+nday;w=nDay%7;return w;void ty(int year,int month,int day)/ 打印月历int i;char wday74=" 日 "," 一"," 二"," 三 "," 四 "," 五"," 六" printf("#n"); printf("#n");printf("#%d年%d月%d日#n",year,month,day);pr
13、intf("*n");printf("*n");for(i=0;i<7;i+)printf("%5s",wdayi);printf("n");int w;int nowDay=1;w=week(year,month,nowDay);/找到第一天的星期int n;n=daysOfMonthrunnian(year)month-1;/放置第一天if(w=0)printf("%5d",nowDay);else if(w=1)printf("%10d",nowDay);else
14、 if(w=2)printf("%15d",nowDay);else if(w=3)printf("%20d",nowDay);else if(w=4)printf("%25d",nowDay);else if(w=5)printf("%30d",nowDay);elseprintf("%35dn",nowDay);nowDay+;for(i=1;i<n;i+)w=week(year,month,nowDay);printf("%5d",nowDay);if(w=6)/
15、 如果是星期六则换行打印puts("n");nowDay+;printf("n*n");printf("*n");void caxun()/查询日历system("cls");int year,month,day;printf("请输入你要查询的日期 ( 格式为年月日,如2009 11 3) :");scanf("%d%d%d",&year,&month,&day);while(!jianca(year,month,day)/ 如果日期输入不正确,则重
16、新输入printf("%c你输入的日期错误,请重新输入:");scanf("%d%d%d",&year,&month,&day);system("cls");if(runnian(year)printf("n闰年 nn");else printf("n平年 nn");ty(year,month,day);void inline backMenu()printf("请按任意字符键进入主菜单:n");getch();/*system("cls&q
17、uot;);*/void caidan(int &year,int &month,int &day)/主菜单system("cls");printf("-n");printf("-n");printf("-n");printf("-n");printf("*n");printf("*n");printf("*主菜单*n");printf("*n");printf("*n")
18、;printf("*1.显示日历*n");printf("*2.查询日历*n");printf("*3.退出*n");printf("*n");printf("*n");printf("*n");char m100;int g=0;doint f=0;dof=0;printf("n请输入相应数字 :");scanf("%s",m);if(strlen(m)>2)f=1;while(f=1);switch(*m)case '1':system("cls");ty(year,month,day);backMenu();/ 实现任意键返回主菜单caidan(year,month,day);break;case '2':system("cls");caxun();ba
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 租赁经营市场营销策略实施方案考核试卷
- 纤维板企业的市场竞争力分析与提升策略考核试卷
- 缺点的初一语文作文
- 名胜古迹颐和园初三语文作文
- 玻璃熔化与成型技术考核试卷
- 电视设备智能生物药品产业国际企业融资渠道与资本运作技术考核试卷
- 糖果行业发展趋势预测考核试卷
- 生态保护与大气污染防治技术考核试卷
- 畜粪有机肥制备与质量检测技术考卷考核试卷
- 皮革服装生产中的智能化生产线设计考核试卷
- (三诊)绵阳市高中2022级高三第三次诊断性考试地理试卷A卷(含答案)
- 委托外包催收合同协议
- 店长劳务合同协议
- 2025-2030中国涂装行业市场深度分析及发展预测与投资策略研究报告
- 国开(内蒙古)2024年《创新创业教育基础》形考任务1-3终考任务答案
- JJG 693-2011可燃气体检测报警器
- 廉洁合作承诺书(简单版)
- 五年级奥数教程
- 针刺伤的预防及处理(课堂PPT)
- 涡流检测PPT课件
- 全等三角形的判定sss_sas_习题
评论
0/150
提交评论