




已阅读5页,还剩16页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
软件基础实践报告( 2013 / 2014 学年 第 二 学期)题目: 万年历 专 业 软件工程 学 生 姓 名 班 级 学 号 B12040822指 导 教 师 陈云芳 指 导 单 位 计算机学院软件工程系 日 期 2014.5 指导教师成绩评定表学生姓名班级学号专业评分内容评分标准优秀良好中等差平时成绩认真对待课程设计,遵守实验室规定,上机不迟到早退,不做和设计无关的事设计成果设计的科学、合理性功能丰富、符合题目要求 界面友好、外观漂亮、大方程序功能执行的正确性程序算法执行的效能设计报告设计报告正确合理、反映系统设计流程文档内容详实程度文档格式规范、排版美观验收答辩简练、准确阐述设计内容,能准确有条理回答各种问题,系统演示顺利。评分等级指导教师简短评语指导教师签名日期备注评分等级有五种:优秀、良好、中等、及格、不及格万年历一、 课题概述【问题描述】 该系统要求实现一个简单、实用的日历打印程序。主要功能为在屏幕上显示任意年月的月历,且要按指定的格式输出。通过此课题,熟练掌握数组、格式输出、文件的各种操作,以及基本的日期算法思想的应用。【功能要求】(1)用户从键盘任意输入一个日期,如:2008.8.8。程序就能打印该日期所在月的月历。(2)月历输出重要节假日要在该日期后用*号标注出来(3)需要实现的功能1) 输入日期,显示该日期所在月的月历。2) 可选择显示下一月、上一月的日历。3) 可选择显示下一年、上一年的日历。4) 重要节假日需用一个文本文件进行设置,文件格式自定。程序应通过读取节假日文件的信息来对日历上的节假日日期进行标注。(4)界面功能要求:1) 采用友好的字符界面,实现一个功能控制菜单。2) 每次操作都从该菜单选择,利用循环结构使得一次运行程序可进行多次操作。二、 软件设计 程序模块:本程序主要由各种功能的函数来实现所要求的功能,具体函数名称及具体作用如下表所示:函数名称及重要变量具体功能void checkFestvals(int month,int nowDay)检查输出日期是否为重要节假日int runyear(int year)判断年份是闰年还是平年struct tm * getDay()结构体时间指针函数int dayExame(int year,int month,int day)日期格式、数值检查函数int getwDay(int year,int month,int day)由日期获取星期函数void printCalender(int year,int month,int day)月历打印函数void setDay(int year,int month,int day)调整日期函数void checkCalender()查询日历函数void backMenu()任意键返回主菜单函数int year,month,day年月日全局变量int daysOfMonth闰、平年每月天数的二维数组void mainMenu(int year,int month,int day)主菜单函数流程图:开始月历打印函数主菜单日历查询帮助调整日期显示文本键盘操作输入日期错误正确打印月历打印月历结束程序代码:#include #include/包含各种时间相关函数的头文件#include /包含数学运算函数的头文件#include /包含清屏函数的头文件#include /包含getch()的头文件 #define KEYNUMUp 0x48 /定义键盘输入#define KEYNUMDown 0x50 #define KEYNUMLeft 0x4b #define KEYNUMRight 0x4d #define KEYNUMPageUp 0x49 #define KEYNUMPageDown 0x51 int year,month,day; /全局变量记录时间void checkFestvals(int month,int nowDay)/检查是否节日switch(month)case 1: case 5:case 6:case 7:case 8:case 10:if(nowDay=1) printf(*);break;case 2:if(nowDay=14) printf(*);break;case 3:if(nowDay=8) printf(*);break;case 4:if(nowDay=5) printf(*);break;case 9:if(nowDay=10) printf(*);break;case 12:if(nowDay=25) printf(*);break;case 11:break; int daysOfMonth212=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 runYear(int year) /判断是否是闰年 int flag=0; if(year%400=0|(year%4=0&year%100!=0) flag=1; return flag; struct tm * getDay() /从系统取得当前时间 time_t timer; /time_t为time.h中用来保存1970.1.1至今秒数的长整型类型名struct tm* gmt; time(&timer);/把秒数换算成年月日(世界标准时) gmt=localtime(&timer); /换算为当前时区时间return gmt; int dayExame(int year,int month,int day) /检查日期是否正确 if(year0|month12|day31) return 0;switch(month) case 1: case 3: case 5: case 7: case 8: case 10: case 12: if(day31)return 0;break; /大月case入口case 4: case 6: case 9: case 11: if(day30)return 0;break;/小月case入口default: if(runYear(year)&day29) /二月入口return 0; else if(runYear(year)=0&day28) return 0; return 1; int getwDay(int year,int month,int day)/取得星期 /根据当前日期计算任意日期的星期int nday=0,nDay,i,w; for(i=0;imonth-1;i+) nday+=daysOfMonthrunYear(year)i; nday+=day; nDay=year-1+(year-1)/4-(year-1)/100+(year-1)/400+nday; w=nDay%7; return w; void printCalender(int year,int month,int day);/提前声明月历打印函数void mainMenu(int year,int month,int day); /提前声明主菜单函数void setDay(int year,int month,int day)/调节日期 char k; printf(%c:上一年 %c:下一年n,24,25); printf(%c:上个月 %c:下个月n,27,26); printf(PageUp:昨天 PageDown:明天n); printf(其他:返回主菜单n);getch(); k=getch(); switch(k) /通过方向键和PageUp、PageDown键来调整日期case KEYNUMUp: year-; if(dayExame(year,month,day)=0)year+; printf(%c,7); /检查日期 的合法性,若错误,保持日期不变, 并警告system(cls);printCalender(year,month,day);setDay(year,month,day);break; case KEYNUMDown: year+; if(dayExame(year,month,day)=0)year-;printf(%c,7); system(cls);printCalender(year,month,day);setDay(year,month,day);break; case KEYNUMLeft: month-; if(dayExame(year,month,day)=0)month+;printf(%c,7); system(cls);printCalender(year,month,day);setDay(year,month,day);break; case KEYNUMRight: month+; if(dayExame(year,month,day)=0)month-;printf(%c,7); system(cls);printCalender(year,month,day);setDay(year,month,day);break; case KEYNUMPageUp: day-; if(dayExame(year,month,day)=0)day+;printf(%c,7); system(cls);printCalender(year,month,day);setDay(year,month,day);break; case KEYNUMPageDown: day+; if(dayExame(year,month,day)=0)day-;printf(%c,7); system(cls);printCalender(year,month,day);setDay(year,month,day);break; default: system(cls);mainMenu(year,month,day);break; /其他指令跳回主菜单 void printCalender(int year,int month,int day)/打印月历 int i; int w; int nowDay=1; int n; char wday74=Sun,Mon,Tue,Wed,Thu,Fri,Sat; printf(n); printf(%10d,year); switch(month)/根据当前月份输出英文版 case 1: printf( January);break; case 2: printf( February);break; case 3: printf( March);break; case 4: printf( April);break; case 5: printf( May);break; case 6: printf( June);break; case 7: printf( July);break; case 8: printf( August);break; case 9: printf( September);break; case 10: printf( October);break; case 11: printf( November);break; case 12: printf( December);break; printf(%5dn,day); printf(n); printf(*n); printf(n); for(i=0;i7;i+) printf(%5s,wdayi); printf(n); w=getwDay(year,month,nowDay);/找到第一天的星期 n=daysOfMonthrunYear(year)month-1; switch(w) /放置第一天 case 0:printf(%5d,nowDay);break; case 1:printf(%9d,nowDay);break; case 2:printf(%14d,nowDay);break; case 3:printf(%19d,nowDay);break; case 4:printf(%24d,nowDay);break; case 5:printf(%29d,nowDay);break; default:printf(%34dnn,nowDay); switch(month)/检查每月第一天是否节日并控制输出*case 1:case 4:case 5:case 6:case 7:case 8:case 10:printf(*);break; nowDay+; for(i=1;i2) f=1; while(f=1); switch(*menu) case 1: system(cls); /清屏 printCalender(year,month,day); backMenu(); /实现任意键返回主菜单 mainMenu(year,month,day); break; case 2: system(cls); checkCalender(); backMenu(); mainMenu(year,month,day); break; case 3: system(cls); printCalender(year,month,day); setDay(year,month,day); printf(请按任意字符键返回主菜单:); getch(); system(cls); mainMenu(year,month,day); break; case 4: system(cls); printf(在主菜单中输入相应的数字就可以完成以下功能:nn); printf(* 1、显示今天所在月的月份nn); printf(* 2、输入日期,判断该年是否是闰年,并显示所
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025年数字水印技术在工业互联网平台数据安全防护策略实施报告
- 成人教育终身学习体系构建与平台运营中的情感化设计策略报告
- 2025年工业互联网平台微服务架构性能测试:性能评估与优化指南
- 三农村集体经济壮大方案
- 农村产业融合发展合作协议方案及任务细分
- 粒度分布调控技术-洞察及研究
- 2025年健康管理服务平台在健康管理产业投资与融资趋势研究报告
- 2025年城市道路桥梁景观设计评估及优化建议报告
- 综合解析华东师大版7年级下册期末试卷及答案详解【有一套】
- 虚拟化环境测试环境-洞察及研究
- 长沙市芙蓉区2024-2025学年四年级数学第二学期期末经典模拟试题含解析
- 出差国外安全协议书
- 人教版九年级英语unit-1教案电子教案
- 中学历史教师课程思政研修计划
- 2025年法宣试题及答案
- 2025年公租房入住合同范例
- 征兵业务培训
- Unit 6 Useful numbers Part C Project(说课稿)-2024-2025学年人教PEP版(2024)英语三年级上册
- 危险废物处置服务协议
- 《观光农业概论》课件
- 派出所签订治安调解协议书范文
评论
0/150
提交评论