C++万年历课程设计报告.docx

上传人:rrsccc 文档编号:10421946 上传时间:2021-05-15 格式:DOCX 页数:40 大小:147.04KB
返回 下载 相关 举报
C++万年历课程设计报告.docx_第1页
第1页 / 共40页
C++万年历课程设计报告.docx_第2页
第2页 / 共40页
C++万年历课程设计报告.docx_第3页
第3页 / 共40页
C++万年历课程设计报告.docx_第4页
第4页 / 共40页
亲,该文档总共40页,到这儿已超出免费预览范围,如果喜欢就下载吧!
资源描述

《C++万年历课程设计报告.docx》由会员分享,可在线阅读,更多相关《C++万年历课程设计报告.docx(40页珍藏版)》请在三一文库上搜索。

1、下载可编辑武汉纺织大学课程设计报告书名称C+ 程序设计课程设计题目万年历专业班级指导教师李敏2014年 6月11 日.专业 .整理 .下载可编辑目录课 程 设 计 报 告 书1第一章需求分析3第二章概要设计4第三章详细设计与编码5第四章调试分析13第五章用户使用说明214设计心得15参 考 文 献226致谢16.专业 .整理 .下载可编辑第一章需求分析如今的社会是一个信息的时代 ,随着电脑等科技产品在人们生活中占据着越来越重要的地位 ,人们就会越加的善加利用,这为我们的生活带来了极大的效率 ,同时计算机的普及更可以看出它所占的地位 。万年历作为日常中的一种小工具 ,它具有多方面的小工能,主要在

2、日期的显示上给人以直观的表达效果 ,在日期的查询上方便简洁 ,还有就是在某些节日的提醒上都给我们带来极大的方便,是一种比较实用的小工具 。我们每个人都可以在自己的个人电脑上进行制作 ,一方面不仅可以加强巩固我们对 C+ 语言的学习 ,还可以通过自主的编程找到自身的缺点。这对培养我们自身的创新能力和动手能力具有很大的作用。.专业 .整理 .下载可编辑第二章概要设计1.设计要求模仿现实生活中的挂历 .当前页以系统当前日期的月份为准显示当前月的每一天(显示出日及对应的星期几 ).当系统日期变到下一月时,系统自动翻页到下一月 .2.总体设计 实现操作流程图运行万年历程序进入程序界面显示当月月历.专业

3、.整理 .下载可编辑选择执行操作查询月历退出实时时钟显示第三章详细设计与编码 设计思路要输出一个月的月历 。第一要输出一行星期 ,这个很简单就可以实现 ,第二要知道一个月的一号是星期几,为了知道它 ,必须有一个日历的开始时间 ,我在这里设定的是1970 年 1 月 1 号,此时它对应的事星期四,然后要计算你输入的日期与开始日期的总天数totaldays ,( totaldays+4 ) %7 即可得到月头是星期几,然后为了判断用户输入的日期是否正确,还得有一个检测判断函数,然后关于第三个功能 实时时钟显示的实现思想为:每隔一秒输出系统当前时钟 ,每次输出时要在第一排的最前面输出,以覆盖掉上次输

4、出的时钟 ,给人像是时钟自己在变化,我们可以调用系统API 函数SetConsoleCursorPosition() 来控制光标位置 ,整体思路如上所述 。.专业 .整理 .下载可编辑 每个模块实现详解 Calendar 类的实现 ,具体代码如下class Calendarpublic:Calendar()string p;t=time(0);p=getYear();year=atoi(p.c_str();/ 将从系统时间中提取的字符串转换为整数p=getDay();day=atoi(p.c_str();p=getMonth();month=convert(p);/ coutctime(&t)

5、;.专业 .整理 .下载可编辑Calendar(int y,int m,int d)long a;year=y;month=m;day=d;a=getTotalDay();a=a*24*3600;t=a;int convert(string p);string getYear() const return extract(20,4);string getMonth() const return extract(4,3);string getDay() const return extract(8,2);string getTime() const return extract(11,8);in

6、t getYear2() const return year; int getMonth2() const return month;int getDay2() const return day;.专业 .整理 .下载可编辑friend int create();friend bool isTrueDate(Calendar& temp);bool isLeapYear(int year);int getT otalDay();int getStartDay();int getDaysInMonth(int a);void display();friend ostream& operator(

7、ostream& out,Calendar& a);private:string extract(int offset,int count) conststring timeString=ctime(&t);return timeString.substr(offset,count);time_t t;int year;int month;int day;.专业 .整理 .下载可编辑;主要函数详解1、总天数函数int Calendar:getTotalDay()int i=1970,totalDay=0;/ 从 1970 年开始循环到当前年分for(;iyear;i+)if(isLeapYea

8、r(i)/ 判断点前年份是否为闰年totalDay+=366;/ 如果是加366 天,否则加 365 天elsetotalDay+=365;for(i=1;imonth;i+)totalDay+=getDaysInMonth(i);return totalDay;.专业 .整理 .下载可编辑2、求每个月天数函数int Calendar:getDaysInMonth(int m)int a;if(m=1|m=3|m=5|m=7|m=8|m=10|m=12)/1,3,5,7,8,10,12a=31;if(m=4|m=6|m=9|m=11)/4,6,9,11 月份a=30;if(isLeapYear

9、(year)=true&m=2)/闰年2月a=29;if(isLeapYear(year)=false&m=2)/平年2月a=28;return a;3、重载输出操作符函数ostream& operator(ostream& out,Calendar& a).专业 .整理 .下载可编辑int i=1,startDay;startDay=a.getStartDay();out Sun Mon Tue Wed Thu Fri Satendl; /输出星期行for(;i=startDay;i+)out;/ 前面没有日期以空格填充for(i=0;ia.getDaysInMonth(a.convert(

10、a.getMonth();i+)if(i+startDay)%7=0)/ 每输出 7 个后换行outendl;if(i+1)=a.day)SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_INTENSITY|FOREGROUND_RED);/ 设置字的颜色为红色outsetw(4)i+1;/ 当月历中日期为当前日期时显示为红色SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_INTENSITY|FOREGROUND_RED|FO

11、REGROUND_GREEN|FOREGROU.专业 .整理 .下载可编辑ND_BLUE);/ 设置字的颜色为白色,仅仅使当前日期显示为红色,其他日期为白色elseoutsetw(4)i+1;coutendl;return out;4、判断输入日期是否正确函数bool isTrueDate(Calendar& temp)if(temp.day=temp.getDaysInMonth(temp.month)return true; /输入的天数是不是小于当月最大日期elsereturn false;if(temp.isLeapYear(temp.year)&temp.month=2).专业 .整

12、理 .下载可编辑if(temp.day=29) /闰年 2 月是不是小于29 天return true;elsereturn false;if(!temp.isLeapYear(temp.year)&temp.month=2)if(temp.day=28)/ 平年 2 月是不是小于28 天return true;elsereturn false;5、实时显示时钟函数int localTime().专业 .整理 .下载可编辑int i=0;time_t now;struct tm *timenow;HANDLE hStdout;/ 定义句柄CONSOLE_SCREEN_BUFFER_INFO p

13、Buffer;/CONSOLE_CURSOR_INFO结构体中包含了关于命令行光标的一些信息,是否显示和光标大小两个信息。通过更改这个结构体,再赋给命令行 ,就可以实现想要的一些效果了hStdout = GetStdHandle(STD_OUTPUT_HANDLE);GetConsoleScreenBufferInfo(hStdout, &pBuffer);/ 让句柄指向当前进程 ,获取当前光标位置COORD pos;/COORD结构体 ,与位置有关while(i10)time(&now);/time() 用来获取当前的系统时间,返回的结果是一个time_t类型 ,原.专业 .整理 .下载可编

14、辑型 time_t time(time_t *t);/ 如果 t 是空指针 ,直接返回当前时间 。 如果 t 不是空指针 ,返回当前时间的同时 ,将返回值赋予 t 指向的内存空间timenow = localtime(&now);/ 原型 struct tm *localtime(const time_t *clock)/ 把从 1970-1-1 零点零分到当前时间系统所偏移的秒数时间转换为本地时间SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_INTENSITY|FOREGROUND_GREEN);/ 设置

15、字的颜色为绿色,时钟绿色输出coutasctime(timenow);/ 函数原型char* asctime (const struct tm * timeptr),把 timeptr指向的 tm 结构体中储存的时间转换为字符串字符串格式返回.专业 .整理 .下载可编辑pos.X=0;pos.Y=pBuffer.dwCursorPosition.Y;/ 设置光标位置为排头SetConsoleCursorPosition(hStdout,pos);/ 移动光标到排头i+;Sleep(1000);SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HAN

16、DLE),FOREGROUND_INTENSITY|FOREGROUND_RED|FOREGROUND_GREEN|FOREGROUND_BLUE);/ 设置字的颜色为白色return 1;6、菜单函数int select().专业 .整理 .下载可编辑int n=0;cout*endl;cout*1.显示当月日历*endl;cout*2.查询日历*endl;cout*3.实时显示时钟*endl;cout*4.退出软件*endl;cout*endl;coutendl;coutplease selset the operator!n;coutn4|n1)/ 纠错coutthe numble yo

17、u input is wrong ,try again!n;.专业 .整理 .下载可编辑return n;第四章调试分析 程序运行测试 进入程序界面 :(进入程序的第一步 ) 选择操作 1:.专业 .整理 .下载可编辑(可以看到显示出当月月历 ,并且当天用红色标出) 再次选择 ,选择操作2(提示是以年月方式 ,或者以年月日方式查询月历).专业 .整理 .下载可编辑(选择方式一 ,并输入1992 年 13 月,提示输入错误 ,清再次输入)(再次输入 1992 年 12 月后得到正确结果 )再次选择操作 ,选择操作 3(可以看到时间在不断变化,达到了实际效果).专业 .整理 .下载可编辑第五章用户

18、使用说明这是一个简单的万年历程序 ,用户可以通过键入年月或者年月日 ,便可以轻松快速的查询到当月月历 ,还可以输入 1 快速的得到现在用户所处月的月历 ,每天的信息一目了然 ,方便快捷 ,可能够通过键入 3 来获取当前时间(精确到秒 )。设计心得通过几天的不懈努力,这一份 C+ 的课程设计终于在自己的努力与同学的帮助下顺利的完成了。前期可能是自己的一些方面薄弱,并没有完全的理解一些代码,从而设计出来的程序编译出错,.专业 .整理 .下载可编辑还好在一些知识能力强的同学下进行了合理的改正才有了现在的这个完整的程序 。设计一个万年历的程序之前,可能都是有自己大概的一点想法,也许看上去简单 ,但通过

19、实际的操作我便发现,各种细小的错误都可能会出现 ,这便让我意识到个人平时的动手操作还是有欠缺的。所以还是如老师讲的那般,以电脑软件的检验来通过不断的练习完善自己的薄弱点 。通过这次为数不多的几天计算机实践学习,加上这学期的学习,我了解了一些关于c+ 语言的知识 ,理解巩固了我c+ 语言的理论知识 ,开始可能学的枯燥,但不断的深入便能发现他的有趣点,就如这一次万年历的设计,所以这便更容易让我感觉到,只要认真的学了 ,加上自己的汗水 ,还是一样能够有收获的 。参考文献作者: Y.Daniel LiangJava 语言程序设计作者: Richard Johnsonbaugh& Martin Kali

20、n.专业 .整理 .下载可编辑面向对象程序设计 C+ 语言描述百度文库 :http:/ 谢.专业 .整理 .下载可编辑附录一 :#include #include #include #include #include using namespace std;class Calendar;ostream& operator(ostream& out,Calendar& a);bool isTrueDate(Calendar& temp);int create();class Calendarpublic:Calendar()string p;.专业 .整理 .下载可编辑t=time(0);p=g

21、etYear();year=atoi(p.c_str();p=getDay();day=atoi(p.c_str();p=getMonth();month=convert(p);coutctime(&t);Calendar(int y,int m,int d)long a;year=y;month=m;day=d;a=getTotalDay();a=a*24*3600;t=a;.专业 .整理 .下载可编辑int convert(string p);string getYear() const return extract(20,4);string getMonth() const return

22、 extract(4,3);string getDay() const return extract(8,2);string getTime() const return extract(11,8);int getYear2() const return year;int getMonth2() const return month;int getDay2() const return day;friend int create();friend bool isTrueDate(Calendar& temp);bool isLeapYear(int year);int getTotalDay(

23、);int getStartDay();int getDaysInMonth(int a);void display();friend ostream& operator(ostream& out,Calendar& a);private:string extract(int offset,int count) const.专业 .整理 .下载可编辑string timeString=ctime(&t);return timeString.substr(offset,count);time_t t;int year;int month;int day;int Calendar:convert(

24、string p)int monthName;if(p=Jan)monthName=1;if(p=Feb)monthName=2;if(p=Mar)monthName=3;if(p=Apr)monthName=4;.专业 .整理 .下载可编辑if(p=May)monthName=5;if(p=Jun)monthName=6;if(p=Jul)monthName=7;if(p=Aug)monthName=8;if(p=Sep)monthName=9;if(p=Oct)monthName=10;if(p=Nov)monthName=11;if(p=Dec)monthName=12;return m

25、onthName;bool Calendar:isLeapYear(int y).专业 .整理 .下载可编辑if(y%400=0|(y%4=0&y%100!=0)return true;elsereturn false;int Calendar:getTotalDay()int i=1970,totalDay=0;for(;iyear;i+)if(isLeapYear(i)totalDay+=366;elsetotalDay+=365;for(i=1;imonth;i+)totalDay+=getDaysInMonth(i);return totalDay;.专业 .整理 .下载可编辑int

26、Calendar:getDaysInMonth(int m)int a;if(m=1|m=3|m=5|m=7|m=8|m=10|m=12)a=31;if(m=4|m=6|m=9|m=11)a=30;if(isLeapYear(year)=true&m=2)a=29;if(isLeapYear(year)=false&m=2)a=28;return a;int Calendar:getStartDay()int a=0;a=getTotalDay();a=(a+4)%7;return a;.专业 .整理 .下载可编辑void Calendar:display()int i=1,startDay;

27、startDay=getStartDay();cout Mon Tue Wed Thu Fri Sat Sunendl;for(;i=startDay;i+)cout;for(i=0;igetDaysInMonth(month);i+)if(i+startDay)%7=0)coutendl;coutsetw(4)i+1;coutendl;ostream& operator(ostream& out,Calendar& a)int i=1,startDay;startDay=a.getStartDay();.专业 .整理 .下载可编辑out Sun Mon Tue Wed Thu Fri Sat

28、endl;for(;i=startDay;i+)out;for(i=0;ia.getDaysInMonth(a.convert(a.getMonth();i+)if(i+startDay)%7=0)outendl;if(i+1)=a.day)SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_INTENSITY|FOREGROUND_RED);/ 设置字的颜色为红色outsetw(4)i+1;SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREG

29、ROUND_INTENSITY|FOREGROUND_RED|FOREGROUND_GREEN|FOREGROUND_BLUE);elseoutsetw(4)i+1;.专业 .整理 .下载可编辑coutendl;return out;int select()int n=0;cout*endl;cout*1.显示当月日历*endl;cout*2.查询日历*endl;cout*3.实时显示时钟*endl;cout*4.退出软件*endl;cout*endl;coutendl;coutplease selset the operator!n;coutn4|n1)coutthe numble you input is wrong ,try again!endl;

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 社会民生


经营许可证编号:宁ICP备18001539号-1