版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、C+课程设计报告( 2013 - 2014 年度第 二 学期)日历管理器的开发系统的设计专业学生姓名班级学号指导教师完成日期2014年7 月 3 日目 录目 录21 概 述11.1 课程设计目的11.2 课程设计内容12 系统需求分析12.1 系统目标12.2 主体功能12.3 开发环境23 系统概要设计23.1 系统的功能模块划分23.2系统流程图44系统详细设计54.1系统主页面设置54.2更改模块设计54.3判断模块设计6试结5 测试75.1 测试方案75.2 测果76 小结9参考文献11附 录12附录1 源程序清单12日历管理器系统的设计1 概 述 1.1 课程设计目的1、巩固并加深学
2、生对C+语言程序设计知识的理解;2、培养我面向对象的程序设计思想,使我们认识面向过程和面向对象两种设计方法的区别;3、进一步掌握和应用VC+ 6.0集成开发环境;4、提高运用C+语言解决实际问题的能力; 5、初步掌握开发小型实用软件的基本方法,能独立设计、实现具有实际功能的小系统;6、掌握书写程序设计开发文档的能力。1.2 课程设计内容仿现实生活中的挂历,显示日历。当前页以系统当前日期的月份为准,显示当前月的每一天(显示出日及对应的星期几);当系统日期变到下一月时,系统自动翻页到下一月。根据用户输入的年份,自动产生每个月的日期列表。自定义显示日历的形式。2 系统需求分析2.1 系统目标 建立电
3、子日历,显示当前月的每一天,当日期变更时,可以自主生成新的日历表!2.2 主体功能1)当前页以系统当前日期的月份为准,显示当前月的每一天(显示出日及对应的星期几),当系统日期变到下一月时,系统自动翻页到下一月。2)可以实现日期的加法运算,即在日期相加的菜单选项中增加日期加天数,结果为新日期。3)根据用户输入的年份,自动产生每个月的日期列表。包括输入非法数据(如负数、日期超过31天等情况)的识别显示功能。2.3 开发环境VC+6.03 系统概要设计3.1 系统的功能模块划分日历系统设计的主要模块分为:查询年份月份模块、查询平年闰年模块、判断星期几模块、计算总天数模块、计算月份第一天为星期几模块等
4、模块。日历功能模块划分查询年份月份模块查询平年闰年模块判断星期几模块输入年月输入年月日输入年查询某年输入年输出该月的月历输出该年各个月的月历输出该年是闰年或平年输出是星期几选择图3-1系统模块划分开始结束输入年份闰年不是闰年Y/N是否要继续操作Y返回 图3-2判断是否为平年闰年模块开始结束载入程序通过日期和时间函数返回并显示当前日期手动设置需要查看的日期通过系统日期函数返回日期图3-2系统流程3.2系统流程图否4系统详细设计4.1系统主页面设置设计思路:首先判断某一年是否为闰年,若是,则二月输出为二十九天,如果不是,二月输出为二十八天。再判断系统当前月份是一个大月还是小月,如果是大月,则输出三
5、十一天;如果是小月,则输出三十天。通过定义一个结构体,用对对象指针的访问来实现从系统自动获取时间为程序所用。再利用一个函数计算出每月的第一天是星期几。根据判断的大月和小月,通过控制符控制输出流格式(设置字段)宽度,把该日期以前的位置用空格补上,并从改日起依次输出天数直到月底,该月中的天数加上该月一日为星期几的数字再除以七得零换行,即可完整的输出该月的日历。C+中一般会使用cout和cin时的默认格式。但有时人们在输入输出时有一些特殊的要求,如在输出实数时,要规定字段宽度,只需要保留两位小数,数据向左或向右对齐等。C+提供了在输入输出流中使用的控制符。需要注意的是:如果使用了控制符,在程序单位的
6、开头,除了要加iostream头文件外,还要另外加iomanip头文件。4.2显示模块设计显示日历输出格式和界面。 Year 显示年份 Month 显示月份; Day 显示日期4.3更改模块设计判断年份,当年份小于你输入值时,则报错。判断年份,当年份小于或大于你输入值时,则报错。首先判断输入的年份是否为闰年,在根据输入的月份判断输入的日期是否正确加上该月一日为星期几的数字再除以7得0换行,即可完整的输出该月的日历。4.4判断模块设计用if语句判断定义年到输入年之间每一年是否为闰年,是闰年,该年的总天数为366,否则,为355。然后判断输入的年是否为定义年,若是,令总天数S=1,否则,用累加法计
7、算出定义年到输入年之间的总天数,再把输入年的一月到要输出的月份之间的天数累加起来,若该月是闰年中的月份并且该月还大于二月,再使总天数加1,否则,不加,既算出从定义年一月一日到输出年的该月一日的总天数。判断年份,当年份小于你输入值时,则报错。判断年份,当年份小于或大于你输入值时,则报错。首先判断输入的年份是否为闰年,在根据输入的月份判断输入的日期是否正确加上该月一日为星期几的数字再除以7得0换行,即可完整的输出该月的日历。用if语句判断定义年到输入年之间每一年是否为闰年,是闰年,该年的总天数为366,否则,为355。然后判断输入的年是否为定义年,若是,令总天数S=1,否则,用累加法计算出定义年到
8、输入年之间的总天数,再把输入年的一月到要输出的月份之间的天数累加起来,若该月是闰年中的月份并且该月还大于二月,再使总天数加1,否则,不加,既算出从定义年一月一日到输出年的该月一日的总天数。4.5自定义模块设计当按下q时,退出程序 while(key=_getch()!=q)用W键时日期向前推移天 if(day7)day-=7;用s键时日期向后推移天 if(day1)day-=1;用d键时日期向后推移天if(day=(Wether_RN()?month_days_Rmonth-1:month_days_NRmonth-1)-1)day+=1;调用Seatch_date函数,对年月日进行重置 Se
9、arch_date(y,m,d)试结5 测试5.1 测试方案1.执行代码;2.按功能要求,调试程序;5.2 测果1.输入界面5-12.执行程序:输入年份,显示每一个月的日期表图5-23.输入年份和日期图5-34.查询某一天是星期几图5-46 小结通过将近一星期的课程设计,使我熟悉了C+语言的编写思路,并掌握了如何对其进行编写与调试,把书本上学习到的知识应用到实际中去,很好的锻炼了我的自觉能力。由于对C+语言的了解不是很深,所以很多语句都还不是十分熟练,尤其是在连接数据库中的一些功能调用,是我这次课设最大问题。通过自己不断的深入学习,虽然这段时间在自觉方面知识有了很大的提高,但很多知识还是学的像
10、一盘散沙,自己根本不能一下子保用。一方面由于课程设计时间有限,又一方面对课程设计思路一开始不是很好,所以在设计中也碰到了很多麻烦,通过上网查找资料以及学习有关方面的书籍,确实让我从中学到了很多非常值得学习的知识,比如说:我从网上下载相关视频进行学习,知道了什么是设计一个程序一般都需三重架构等。但通过学习这门课也使我了解它的设计思路及其它相关的内容的开发设计,使我对开发系统的整个流程有了初步的了解,也把自己在课下复习的内容及上课学习的有关内容有了系统的理解,通过这次课程设计,已经有了深刻的理解。希望我从今以后自 己能够多学习有关知识,为以后的毕业设计以及工作做好充分的准备。这次课程设计终于顺利完
11、成了,在设计中遇到了很多编程问题,最后在王蓉老师的辛勤指导下,终于解决了很多问题。也得到锻炼:(1) 能根据实际问题的具体情况,结合所学的知识,正确分析问题,并且能够设计出解决问题的有效算法和程序。(2) 提高对程序的设计和调试的能力。我们通过上机的操作,验证自己设计的算法和程序的正确性。学会有效的利用一些基本的调试方法,能够及时找出程序代码中的错误,并且加以正确的改正,进一步提高自己对程序设计的水平。同时,在老师身上我学到了很多实用的知识,在次我表示感谢!同时,对给过我帮助的所有的同学和老师再次表示忠心的感谢!参考文献1谭浩强.C程序设计(第三版) .北京:清华大学出版社,2005. 2谭浩
12、强.C程序设计题解与上机指导(第三版) .北京:清华大学出版社,2005.3刘玉英,张怡芳.C+实验指导与课程设计.人民邮电出版社,20074 匡松吴卫华. C+程序设计试题汇编. 中国铁道出版社. 2009 5 刘燕君,刘振安,张一叶. C+程序设计课程设计 第2版. 机械工业出版社. 6姜灵芝 余健.C+面向对象程序设计案例精编. 北京:清华大学出版社,20087郭翠英. C+面向对象程序设计案例精编. 北京:中国水力水电出版社,2004 附 录附录1 源程序清单#include iostream#include string#include iomanipusing namespace
13、std;int monthdays12=31,28,31,30,31,30,31,31,30,31,30,31;string weekday7=星期天,星期一,星期二,星期三,星期四,星期五,星期六;string monthname12=January,February,March,April,May,June,July,August,September,October,November,December;string tiangan10=甲,乙,丙,丁,戊,己,庚,辛,壬,癸;string dizhi12=子,丑,寅,卯,辰,巳,午,未,申,酉,戌,亥;string shengxiao12=
14、鼠,牛,虎,兔,龙,蛇,马,羊,猴,鸡,狗,猪;void showcalendar(int f);void showpermoncal(int mon,int monthweek,int flag);int main() int f; cout请选择操作:endl1.查询某年日历;endl2.查询某年某月的日历;endl3.查询某天是星期几f; showcalendar(f); return 0;void showcalendar(int f) int year,month,day; int flag=0,mon=1; int monthweek,week; int totaldays; in
15、t T,D,S;/天干,地支,生肖 coutyear; totaldays=(year-1)*365+(year-1)/4+(year-1)/400-(year-1)/100; week=(totaldays+1)%7; monthweek=week; T=(year+6)%10; D=(year+8)%12; S=D; if(year%4=0&year%100!=0)|(year%400=0) flag=1; coutendl *year年*endlendl; cout shengxiaoS年endl; cout 农历tianganTdizhiD年endl=2) coutmonth; if(
16、f=3) coutday; while(mon2&flag) totaldays+; totaldays=totaldays+day-1; week=(totaldays+1)%7; coutyear年month月day日 weekdayweekendl; return; while(mon=12) if(mon=month) showpermoncal(mon,monthweek,flag); break; if(mon=2&flag) monthweek+; monthweek=(monthweek+monthdaysmon+-1)%7; return; while(mon=12) sho
17、wpermoncal(mon,monthweek,flag); if(mon=2&flag) monthweek+; monthweek=(monthweek+monthdaysmon+-1)%7; void showpermoncal(int mon,int monthweek,int flag) coutmonthnamemon-1endl; cout*endl; coutSun Mon Tue Wen Tur Fri Satendl; for(int i=0;imonthweek;i+) cout ; for(int j=0;jmonthdaysmon-1;j+) coutsetw(2)
18、j+1 ; if(j+1+monthweek)%7=0) coutendl; if(mon=2&flag) cout29; coutendlendl;/ 定义控制台应用程序的入口点。/#include #include windows.h#include #include #include conio.husing namespace std;class Timeprivate:int year,month,day;static int month_days_R12;/定义闰年时每个月的天数static int month_days_NR12;/定义非闰年时每个月的天数public:stati
19、c string week7;/定义星期,从星期六开始void Search_date(string y,string m,string d);/输入要查找的日期bool Wether_RN();/判断是否为闰年,返回true or falseint Wether_RN(int y);/判断是否为闰年,返回或int Define_Week();/确定特定日期的星期数void local_time();/获取系统时间void print_Calendar();/打印详细日期void change_day();/通过adws键改变日期,以及f来调用Search_date()函数;int Time:
20、month_days_R12=31,29,31,30,31,30,31,31,30,31,30,31;/定义闰年时每个月份的天数int Time:month_days_NR12=31,28,31,30,31,30,31,31,30,31,30,31;/定义非闰年时每个月份的天数/定义星期,由于时间原点年月日为星期六,个定义第一天为星期六string Time:week7=星期六,星期天,星期一,星期二,星期三,星期四,星期五;void Time:change_day()char key;string y,m,d;while(key=_getch()!=q)/当按下q时,退出程序switch(k
21、ey)case w:/日期向前推移天if(day7)day-=7;else/当天数小于时,按下w后,月份数减if(month1)month-;day=day-7+(Wether_RN()?month_days_Rmonth-1:month_days_NRmonth-1);Else/如果月份数为时,年分数减,并将月份数置为if(year=1&day=7)/如果日期已经到达年月日至日,则弹出警告,不改变日历显示MessageBox(NULL, (日历已到达底端,不能在向前), (警告),MB_OK);break;year-;month=12;day=day+24;break;case s:/日期向
22、后推移天if(day=(Wether_RN()?month_days_Rmonth-1:month_days_NRmonth-1)-7)day+=7;else if(month=3000&day24)/如果年份加后大于,则弹出警告,不改变日期MessageBox(NULL, (日历已到达顶端,不能再向后), (警告),MB_OK);break;year+;month=1;day=day-24;break;case a:/日期向前推移天if(day1)day-=1;else if(month1)month-;/先判断是否为闰年,在根据月份获得天数day=day-1+(Wether_RN()?mo
23、nth_days_Rmonth-1:month_days_NRmonth-1);elseif(year=1&month=1&day=1)/如果日期已经到达年月日,则弹出警告,不改变日历显示MessageBox(NULL, (日历已到达底端,不能再向前),(警告),MB_OK);break;year-;month=12;day=day+30;break;case d:/日期向后推移天if(day=(Wether_RN()?month_days_Rmonth-1:month_days_NRmonth-1)-1)day+=1;else if(month=3000&day30)MessageBox(N
24、ULL,(日历已到达顶端,不能在向后),(警告),MB_OK);break;year+;month=1;day=day-30;break;case f:Search_date(y,m,d);/调用Seatch_date函数,对年月日进行重置break;system(cls);print_Calendar();bool Time:Wether_RN()/判断是否为闰年,返回true or falseif(year%400=0)|(year%4=0&year%100!=0)return true;else return false;int Time:Wether_RN(int y)/判断是否为闰年
25、,返回或if(y%400=0)|(y%4=0&y%100!=0)return 366;else return 365;void Time:Search_date(string y,string m,string d)/现将输入的年月日定义为string类型,再通过atoi函数转换为intsystem(cls);cout请勿输入多组数据,如:2010 6 1 .输入如上数据将视为.endlendl;cout请输入要选定的年份(13000): ;getline(cin,y);for(year=atoi(y.c_str();year3000;)/如果年份小于,则报错cout年份输入错误!请输入年至年
26、.endl;getline(cin,y);year=atoi(y.c_str();cout请输入要选定的月份: ;getline(cin,m);for(month=atoi(m.c_str();month12;)/如果月份小于或大于,则报错cout月份输入错误!请重新输入月份.endl;getline(cin,m);month=atoi(m.c_str();cout请输入要选定的日期: ;getline(cin,d);for(day=atoi(d.c_str();(Wether_RN()&(daymonth_days_Rmonth-1)|(!Wether_RN()&(daymonth_days
27、_NRmonth-1);)/首先判断输入的年份是否为闰年,在根据输入的月份判断输入的日期是否正确if(Wether_RN()&(daymonth_days_Rmonth-1)cout日期输入错误!请重新输入日期.endl;getline(cin,d);day=atoi(d.c_str();if(!Wether_RN()&(daymonth_days_NRmonth-1)cout日期输入错误!请重新输入日期.=2000)temp=day-1;/第一部分,即日for(i=2000;iyear;i+)temp+=Wether_RN(i);/第二部分,即年,先判断是否为年,然后逐年相加/第三部分,即月
28、,首先判断是否为闰年,然后逐月相加if(Wether_RN()for(i=0;imonth-1;i+)temp+=month_days_Ri;else for(i=0;imonth-1;i+)temp+=month_days_NRi;return temp%7;else/如果年份在年之前for(i=year+1;i2000;i+)temp+=Wether_RN(i);/第一部分,改年份的下一年至年的天数/第二部分,判断闰年,逐月相加,再加上该日到月末的天数if(Wether_RN()for(i=month;i12;i+)temp+=month_days_Ri;int t=month_days_
29、Rmonth-1-day+1;temp+=t;elsefor(i=month;i12;i+)temp+=month_days_NRi;int t=month_days_NRmonth-1-day+1;temp+=t;/所得天数对求余,当余数为时,即为星期六,余数非零,则根据week7判断星期数if(temp%7=0)return 0;else return (7-temp%7);void Time:local_time()/获取系统时间SYSTEMTIME temp;GetSystemTime(&temp);year=temp.wYear;month=temp.wMonth;day=temp.
30、wDay;void Time:print_Calendar()/打印出这个月的日历,并将今天输出为红色int calendar76;int w,wc=0,dt=1,yeart=year,week_t;week_t=(Define_Week()-(day-1)%7+7)%7;/根据该日的星期数来获得该月号的星期数SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_INTENSITY |FOREGROUND_RED | FOREGROUND_GREEN | FOREGROUND_BLUE);/使输出日期的颜色变回白色
31、coutendlendl year年month月day日weekDefine_Week();if(Wether_RN()cout 闰年endlendl;else cout 非闰年endlendl;cout星期天星期一星期二星期三星期四星期五星期六endl;/如果该月的号不是星期天for(w=0;w(week_t+6)%7;w+)cout ;/输出空格,直到该月第一天for(w=(week_t+6)%7;w7;w+)/将第一行的剩余天数输出,每一行为天calendarwwc=dt+;/通过dt记录天数if(dt-1)=day)SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_INTENSITY|FOREGROUN
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 播音主持人雇佣协议
- 销售提成奖金合同
- 培训学校专业职业指导培训服务合同
- 终止水泥购销合同协议
- 安全协议与合同
- 招标投标表格部分的内容解读与分析
- 网络营销合同范本版合同协议解读
- 数字风向计仪表采购合同
- 公司总公司与分公司合作合同
- 房屋购买委托协议范本
- 孟子的仁政思想及其实践前提共3篇
- 2023年电力系统继电保护答案何瑞文 电力系统继电保护答案其次版(四篇)
- 改变世界的化学智慧树知到答案章节测试2023年南开大学
- Unit-1-Going-to-College-高职高专英语
- 从业务骨干到管理者
- 新概念力学教案
- GB/T 13023-2008瓦楞芯(原)纸
- Unit 3 Healthy eating Reading and thinking说课课件【知识精讲+拓展训练】高中英语人教版选择性必修第二册
- 2023年江苏省高等教育自学考试旅游资源规划与开发试卷共八套都会通过是没问题的不信试试看
- SV300呼吸机介绍及基本操作课件
- 清洗消毒及灭菌效果监测标准-课件
评论
0/150
提交评论