2022年C++日历管理系统课程设计.pdf
C+课 程 设 计 报 告( 2013 - 2014 年度第二 学期) 日历管理器的开发系统的设计专业学生姓名班级精品资料 - - - 欢迎下载 - - - - - - - - - - - 欢迎下载 名师归纳 - - - - - - - - - -第 1 页,共 23 页 - - - - - - - - - - 学号指导教师完成日期2014 年 7 月 3 日精品资料 - - - 欢迎下载 - - - - - - - - - - - 欢迎下载 名师归纳 - - - - - - - - - -第 2 页,共 23 页 - - - - - - - - - - 目录目录 . 错误!未定义书签。1 概述. . 错误!未定义书签。课程设计目的 . 错误!未定义书签。课程设计内容 . 错误!未定义书签。2 系统需求分析 . . 错误!未定义书签。系统目标 . 错误!未定义书签。主体功能 . 错误!未定义书签。开发环境 . 错误!未定义书签。3 系统概要设计 . . 错误!未定义书签。系统的功能模块划分 . 错误!未定义书签。系统流程图 . 错误!未定义书签。4 系统详细设计 . 错误!未定义书签。系统主页面设置 . 错误!未定义书签。更改模块设计 . 错误!未定义书签。判断模块设计 . 错误!未定义书签。精品资料 - - - 欢迎下载 - - - - - - - - - - - 欢迎下载 名师归纳 - - - - - - - - - -第 3 页,共 23 页 - - - - - - - - - - 试结 5 测试 . 错误!未定义书签。测试方案 . 错误!未定义书签。测果 . 错误!未定义书签。6 小结 . 错误!未定义书签。参考文献 . 错误!未定义书签。附录 . 错误!未定义书签。附录 1 源程序清单 . 错误!未定义书签。精品资料 - - - 欢迎下载 - - - - - - - - - - - 欢迎下载 名师归纳 - - - - - - - - - -第 4 页,共 23 页 - - - - - - - - - - 日历管理器 系统的设计1 概述课程设计目的1、巩固并加深学生对C+ 语言程序设计知识的理解;2、培养我面向对象的程序设计思想,使我们认识面向过程和面向对象两种设计方法的区别;3、进一步掌握和应用VC+ 集成开发环境;4、提高运用 C+ 语言解决实际问题的能力;5、初步掌握开发小型实用软件的基本方法,能独立设计、实现具有实际功能的小系统;6、掌握书写程序设计开发文档的能力。课程设计内容仿现实生活中的挂历,显示日历。当前页以系统当前日期的月份为准,显示当前月的每一天(显示出日及对应的星期几);当系统日期变到下一月时,系统自动翻页到下一月。根据用户输入的年份,自动产生每个月的日期列表。自定义显示日历的形式。2 系统需求分析系统目标建立电子日历,显示当前月的每一天,当日期变更时,可以自主生成新的日历表!精品资料 - - - 欢迎下载 - - - - - - - - - - - 欢迎下载 名师归纳 - - - - - - - - - -第 5 页,共 23 页 - - - - - - - - - - 主体功能1)当前页以系统当前日期的月份为准,显示当前月的每一天(显示出日及对应的星期几),当系统日期变到下一月时,系统自动翻页到下一月。2)可以实现日期的加法运算,即在日期相加的菜单选项中增加日期加天数,结果为新日期。3)根据用户输入的年份,自动产生每个月的日期列表。包括输入非法数据(如负数、日期超过31 天等情况)的识别显示功能。开发环境VC+3 系统概要设计系统的功能模块划分日历系统设计的主要模块分为:查询年份月份模块、查询平年闰年模块、判断星期几模块、计算总天数模块、计算月份第一天为星期几模块等模块。精品资料 - - - 欢迎下载 - - - - - - - - - - - 欢迎下载 名师归纳 - - - - - - - - - -第 6 页,共 23 页 - - - - - - - - - - 图 3-1 系统模块划分查询年查询平判断星输入输入年输查询输入输出该输出该年各输出该年是输出是Y返精品资料 - - - 欢迎下载 - - - - - - - - - - - 欢迎下载 名师归纳 - - - - - - - - - -第 7 页,共 23 页 - - - - - - - - - - 图 3-2 判断是否为平年闰年模块图 3-2 系统流程开始结束通过日期和时间函手动设置需要查看的日期通过系统日期函数返回日期精品资料 - - - 欢迎下载 - - - - - - - - - - - 欢迎下载 名师归纳 - - - - - - - - - -第 8 页,共 23 页 - - - - - - - - - - 系统流程图否精品资料 - - - 欢迎下载 - - - - - - - - - - - 欢迎下载 名师归纳 - - - - - - - - - -第 9 页,共 23 页 - - - - - - - - - - 4 系统详细设计系统主页面设置设计思路:首先判断某一年是否为闰年,若是,则二月输出为二十九天,如果不是,二月输出为二十八天。 再判断系统当前月份是一个大月还是小月,如果是大月,则输出三十一天;如果是小月,则输出三十天。通过定义一个结构体,用对对象指针的访问来实现从系统自动获取时间为程序所用。再利用一个函数计算出每月的第一天是星期几。根据精品资料 - - - 欢迎下载 - - - - - - - - - - - 欢迎下载 名师归纳 - - - - - - - - - -第 10 页,共 23 页 - - - - - - - - - - 判断的大月和小月,通过控制符控制输出流格式(设置字段)宽度,把该日期以前的位置用空格补上,并从改日起依次输出天数直到月底,该月中的天数加上该月一日为星期几的数字再除以七得零换行,即可完整的输出该月的日历。C+ 中一般会使用cout 和 cin 时的默认格式。但有时人们在输入输出时有一些特殊的要求,如在输出实数时,要规定字段宽度,只需要保留两位小数,数据向左或向右对齐等。C+ 提供了在输入输出流中使用的控制符。需要注意的是:如果使用了控制符,在程序单位的开头,除了要加iostream 头文件外,还要另外加iomanip 头文件。显示模块设计显示日历输出格式和界面。 Year 显示年份 Month 显示月份 ; Day 显示日期更改模块设计判断年份,当年份小于你输入值时,则报错。判断年份,当年份小于或大于你输入值时,则报错。首先判断输入的年份是否为闰年, 在根据输入的月份判断输入的日期是否正确加上该月一日为星期几的数字再除以7 得 0 换行,即可完整的输出该月的日历。判断模块设计用 if语句判断定义年到输入年之间每一年是否为闰年,是闰年,该年的总天数为366,否则,为 355。然后判断输入的年是否为定义年,精品资料 - - - 欢迎下载 - - - - - - - - - - - 欢迎下载 名师归纳 - - - - - - - - - -第 11 页,共 23 页 - - - - - - - - - - 若是,令总天数S=1,否则,用累加法计算出定义年到输入年之间的总天数,再把输入年的一月到要输出的月份之间的天数累加起来,若该月是闰年中的月份并且该月还大于二月,再使总天数加1,否则,不加,既算出从定义年一月一日到输出年的该月一日的总天数。判断年份,当年份小于你输入值时,则报错。判断年份,当年份小于或大于你输入值时,则报错。首先判断输入的年份是否为闰年, 在根据输入的月份判断输入的日期是否正确加上该月一日为星期几的数字再除以7 得 0 换行,即可完整的输出该月的日历。用 if语句判断定义年到输入年之间每一年是否为闰年,是闰年,该年的总天数为366,否则,为355。然后判断输入的年是否为定义年,若是,令总天数 S=1,否则,用累加法计算出定义年到输入年之间的总天数,再把输入年的一月到要输出的月份之间的天数累加起来,若该月是闰年中的月份并且该月还大于二月,再使总天数加1,否则,不加,既算出从定义年一月一日到输出年的该月一日的总天数。自定义模块设计当按下 q 时, 退出程序 while(key=_getch()!=q)用 W键时日期向前推移天 if(day7)day-=7;用 s 键时日期向后推移天if(day1)day-=1; 精品资料 - - - 欢迎下载 - - - - - - - - - - - 欢迎下载 名师归纳 - - - - - - - - - -第 12 页,共 23 页 - - - - - - - - - - 用 d 键时日期向后推移天if(day=(Wether_RN()month_days_Rmonth-1:month_days_NRmonth-1)-1)day+=1; 调用 Seatch_date 函数, 对年月日进行重置 Search_date(y,m,d)试结 5 测试测试方案1. 执行代码;2. 按功能要求,调试程序;测果1. 输入界面精品资料 - - - 欢迎下载 - - - - - - - - - - - 欢迎下载 名师归纳 - - - - - - - - - -第 13 页,共 23 页 - - - - - - - - - - 5-12. 执行程序:输入年份,显示每一个月的日期表精品资料 - - - 欢迎下载 - - - - - - - - - - - 欢迎下载 名师归纳 - - - - - - - - - -第 14 页,共 23 页 - - - - - - - - - - 图 5-23. 输入年份和日期图 5-34. 查询某一天是星期几精品资料 - - - 欢迎下载 - - - - - - - - - - - 欢迎下载 名师归纳 - - - - - - - - - -第 15 页,共 23 页 - - - - - - - - - - 图 5-46 小结通过将近一星期的课程设计 ,使我熟悉了 C+ 语言的编写思路 , 并掌握了如何对其进行编写与调试,把书本上学习到的知识应用到实际中去,很好的锻炼了我的自觉能力。由于对C+ 语言的了解不是很深,所以很多语句都还不是十分熟练,尤其是在连接数据库中的一些功能调用,是我这次课设最大问题。通过自己不断的深入学习,虽然这段时间在自觉方面知识有了很大的提高,但很多知识还是学的像一盘散沙,自己根本不能一下子保用。一方面由于课程设计时间有限,又一方面对课程设计思路一开始不是很好,所以在设计中也碰到了很多麻烦,通过上网查找资料以及学习精品资料 - - - 欢迎下载 - - - - - - - - - - - 欢迎下载 名师归纳 - - - - - - - - - -第 16 页,共 23 页 - - - - - - - - - - 有关方面的书籍,确实让我从中学到了很多非常值得学习的知识,比如说:我从网上下载相关视频进行学习,知道了什么是设计一个程序一般都需三重架构等。但通过学习这门课也使我了解它的设计思路及其它相关的内容的开发设计,使我对开发系统的整个流程有了初步的了解,也把自己在课下复习的内容及上课学习的有关内容有了系统的理解,通过这次课程设计,已经有了深刻的理解。希望我从今以后自己能够多学习有关知识,为以后的毕业设计以及工作做好充分的准备。这次课程设计终于顺利完成了,在设计中遇到了很多编程问题,最后在王蓉老师的辛勤指导下,终于解决了很多问题。也得到锻炼:(1)能根据实际问题的具体情况,结合所学的知识,正确分析问题,并且能够设计出解决问题的有效算法和程序。(2)提高对程序的设计和调试的能力。我们通过上机的操作,验证自己设计的算法和程序的正确性。学会有效的利用一些基本的调试方法,能够及时找出程序代码中的错误,并且加以正确的改正,进一步提高自己对程序设计的水平。同时,在老师身上我学到了很多实用的知识,在次我表示感谢!同时,对给过我帮助的所有的同学和老师再次表示忠心的感谢!精品资料 - - - 欢迎下载 - - - - - - - - - - - 欢迎下载 名师归纳 - - - - - - - - - -第 17 页,共 23 页 - - - - - - - - - - 参考文献1 谭浩强 . C程序设计 ( 第三版 ) . 北京:清华大学出版社,2005. 2 谭浩强 . C程序设计题解与上机指导(第三版 ) . 北京:清华大学出版社,2005.3 刘玉英,张怡芳 .C+实验指导与课程设计 .人民邮电出版社, 20074 匡松吴卫华 . C+ 程序设计试题汇编 . 中国铁道出版社 . 2009 5 刘燕君,刘振安,张一叶. C+ 程序设计课程设计第 2 版. 机械工业出版社 . 6 姜灵芝余健.C+面向对象程序设计案例精编. 北京:清华大学出版社,20087 郭翠英 . C+ 面向对象程序设计案例精编. 北京:中国水力水电出版社,2004 精品资料 - - - 欢迎下载 - - - - - - - - - - - 欢迎下载 名师归纳 - - - - - - - - - -第 18 页,共 23 页 - - - - - - - - - - 附录附录 1 源程序清单#include iostream#include string#include iomanipusing namespace 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=鼠, 牛, 虎, 兔, 龙, 蛇, 马, 羊, 猴, 鸡, 狗, 猪;精品资料 - - - 欢迎下载 - - - - - - - - - - - 欢迎下载 名师归纳 - - - - - - - - - -第 19 页,共 23 页 - - - - - - - - - - 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;精品资料 - - - 欢迎下载 - - - - - - - - - - - 欢迎下载 名师归纳 - - - - - - - - - -第 20 页,共 23 页 - - - - - - - - - - int totaldays; int T,D,S;入如上数据将视为 .endlendl;cout 请输入要选定的年份 (13000): ;getline(cin,y);for(year=atoi();year3000;)endl;getline(cin,y);year=atoi();cout 请输入要选定的月份 : ;getline(cin,m);for(month=atoi();month12;)endl;getline(cin,m);month=atoi();cout 请输入要选定的日期 : ;getline(cin,d);for(day=atoi();(Wether_RN()&(daymonth_days_Rmonth-1)精品资料 - - - 欢迎下载 - - - - - - - - - - - 欢迎下载 名师归纳 - - - - - - - - - -第 21 页,共 23 页 - - - - - - - - - - |(!Wether_RN()&(daymonth_days_NRmonth-1);)endl;getline(cin,d);day=atoi();if(!Wether_RN()&(daymonth_days_NRmonth-1)cout 日期输入错误 ! 请重新输入日期 .endl;getline(cin,d);day=atoi();int Time:Define_Week()endl;int main()精品资料 - - - 欢迎下载 - - - - - - - - - - - 欢迎下载 名师归纳 - - - - - - - - - -第 22 页,共 23 页 - - - - - - - - - - Time data;();();();return 0;精品资料 - - - 欢迎下载 - - - - - - - - - - - 欢迎下载 名师归纳 - - - - - - - - - -第 23 页,共 23 页 - - - - - - - - - -