


版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、武汉纺织大学课程设计报告书名称C+程序设计课程设计题目专业班级万年历指导教师李敏2014年6月11日目录课程设计报告书1第一章 需求分析3第二章概要设计4第三章 详细设计与编码 5第四章 调试分析1.3第五章用户使用说明21.4.设计心得1.5.参考文献226.致谢16第一章需求分析如今的社会是一个信息的时代,随着电脑等科技产品 在人们生活中占据着越来越重要的地位,人们就会越加的善 加利用,这为我们的生活带来了极大的效率,同时计算机的 普及更可以看出它所占的地位。万年历作为日常中的一种小工具,它具有多方面的小 工能,主要在日期的显示上给人以直观的表达效果,在日期的查询上方便简洁,还有就是在某些
2、节日的提醒上都给我 们带来极大的方便,是一种比较实用的小工具。我们每个人都可以在自己的 个人电脑上进行制作,一方面不仅可以加强巩固我们对 C+语言的学习,还可以通过自主的编程找到自身的缺 点。这对培养我们自身的创新能力和动手能力具有很大的 作用。第二章概要设计1. 设计要求 模仿现实生活中的挂历.(显示出日 当前页以系统当前日期的月份为准显示当前月的每一天及对应的星期几). 当系统日期变到下一月时,系统自动翻页到下一月2. 总体设计<1>实现操作流程图运行万年历程序进入程序界面显示当月月历1卩4.选择执行操作-J广r退出b查询月历实时时钟显示第三章详细设计与编码<1>设
3、计思路要输出一个月的月历。第一要输出一行星期,这个很简单就可 以实现,第二要知道一个月的一号是星期几,为了知道它,必须有一个日历的开始时间,我在这里设定的是1970年1月1号,此时它 对应的事星期四,然后要计算你输入的日期与开始日期的总天数 totaldays,( totaldays+4)%7即可得到月头是星期几,然后为了判断用户输入的日期是否正确,还得有一个检测判断函数,然后关 于第三个功能一实时时钟显示的实现思想为:每隔一秒输出系统当 前时钟,每次输出时要在第一排的最前面输出,以覆盖掉上次输出 的时钟,给人像是时钟自己在变化,我们可以调用系统API函数SetConsoleCursorPos
4、ition()来控制光标位置,整体思路如上所述<2>每个模块实现详解Calendar类的实现,具体代码如下class Cale ndarpublic:Cale ndar()stri ng p;t=time(O);p=getYear();year=atoi(p.c_str();/将从系统时间中提取的字符串转换为整数p=getDay();day=atoi(p.c_str();p=getMo nth();mon th=c on vert(p);/cout<<ctime( &t);Cale ndar(i nt y,i nt m,i nt d) long a;year=y
5、;mon th=m;day=d;a=getTotalDay();a=a*24*3600;t=a;int con vert(stri ng p);stri ng getYear() const stri ng getM on th() const stri ng getDay() const stri ng getTime() const int getYear2() const int getMonth2() const in t getDay2() con st return extract(20,4); return extract(4,3);return extract(8,2);ret
6、urn extract(11,8); retur n year; return mon th; retur n day;friend int create();friend bool isTrueDate(Cale ndar& temp);bool isLeapYear(i nt year);int getT otalDay();in t getStartDay();int getDays InMon th(i nt a);void display();friend ostream& operator<<(ostrea m& out,Cale ndar&am
7、p; a); private:stri ng extract(i nt offset,i nt count) conststring timeString=ctime(&t);return timeString.substr(offset,count);time_t t;int year;int mon th;int day;主要函数详解1、总天数函数int Calendar:getT otalDay()int i=1970,totalDay=0;/从1970年开始循环到当前年分for(;i<year;i+)if(isLeapYear(i)II判断点前年份是否为闰年totalDa
8、y+=366;II如果是加 366天,否则加365天elsetotalDay+=365;for(i=1;i<mo nth;i+)totalDay+=getDaysI nMon th(i);return totalDay;2、求每个月天数函数int Cale ndar:getDays InMon th(i nt 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)a=30;if(isLeapYear(year)=true&&m=2) a=29;if(isLeapYe
9、ar(year)=false&&m=2)a=28;/4,6,9,11 月份闰年2月II平年2月return a;3、重载输出操作符函数ostream& operator<<(ostream& out,Cale ndar& a)int i=1,startDay;startDay=a.getStartDay();out<<" Sun Mon Tue Wed Thu Fri Sat"<<e ndl; /输出星期行for(;i<=startDay;i+)out<<" "
10、/前面没有日期以空格填充for(i=0;i<a.getDays InMon th(a.c on vert(a.getM on th();i+)if(i+startDay)%7=0) / 每输出 7 个后换行out<<e ndl;if(i+1)=a.day)SetCo nsoleTextAttribute(GetStdHa ndle(STD_OUTPUT_HANDLE),FOREGROUND_INTENSITY|FOREGROUND_RED); / 设置字的颜色为红色out<<setw(4)<<i+1;/当月历中日期为当前日期时显示为红SetCo nso
11、leTextAttribute(GetStdHa ndle(STD_OUTPUT_HANDLE),FOREGROUND_INTENSITY|FOREGROUND_RED|FOREGROUND_GREEN|FOREGROUND_BLUE);,其他日期为白色/设置字的颜色为白色,仅仅使当前日期显示为红色elseout<<setw(4)<<i+1;cout<<e ndl;return out;4、判断输入日期是否正确函数bool isTrueDate(Cale ndar& temp)if(temp.day<=temp.getDays InMon th
12、(temp.m on th)return true; /输入的天数是不是小于当月最大日期elsereturn false;if(temp.isLeapYear(temp.year)&&temp.m on th=2)if(temp.day<=29) / 闰年2月是不是小于 29天 return true;elsereturn false;if(!temp.isLeapYear(temp.year)&&temp.m on th=2)if(temp.day<=28) /平年2月是不是小于 28天 return true;elsereturn false;5
13、、实时显示时钟函数int localTime()int i=0;time_t now;struct tm *time now;HANDLE hStdout;/定义句柄CONSOLE_SCREEN_BUFFER_INFO pBuffer;CONSOLE_CURSOR_INFO 结构体中包含了关于命令行光标的一些信息,是否显示和光标大小两个信息。通过更改这个结构体,再赋给命令行,就 可以实现想要的一些效果了hStdout = GetStdHa ndle(STD_OUTPUT_HANDLE);GetCo nsoleScree nBufferl nfo(hStdout, &pBuffer);/
14、让句柄指向当前进程,获取当前光标位置COORD pos; /COORD结构体,与位置有关while(i<10)time(&no w);/time()用来获取当前的系统时间,返回的结果是一个time_t类型,原 型 time_t time(time_t *t);/如果t是空指针,直接返回当前时间。如果t不是空指针,返回当前 时间的同时,将返回值赋予t指向的内存空间time now = localtime(&no w);/ 原型 struct tm *localtime(const time_t *clock)/把从1970-1-1零点零分到当前时间系统所偏移的秒数时间转换为
15、本地时间SetCo nsoleTextAttribute(GetStdHa ndle(STD_OUTPUT_HANDLE),FOREG ROUND_INTENSITY|FOREGROUND_GREEN); / 设置字的颜色为绿色,时钟 绿色输出cout<<asctime(time no w);/ 函数原型 char* asctime (const struct tm * timeptr), 把 timeptr 指向的tm结构体中储存的时间转换为字符串字符串格式返回pos.X=0;pos.Y=pBuffer.dwCursorPositi on.Y;/设置光标位置为排头SetC on
16、soleCursorPositi on( hStdout,pos);/移动光标到排头i+;Sleep(1000);SetCo nsoleTextAttribute(GetStdHa ndle(STD_OUTPUT_HANDLE),FOREG ROUND_INTENSITY|FOREGROUND_RED|FOREGROUND_GREEN|FOREGROU ND_BLUE);/设置字的颜色为白色return 1;6、菜单函数int select()int n=0;cout<<"*"<<e ndl;cout<<"*1.显示当月日历*&
17、quot;<<e ndl;cout<<"*2查询日历*"<<e ndl;cout<<"*3实时显示时钟*"<<e ndl;cout<<"*4.退出软件*"<<e ndl;cout<<"*"<<e ndl;cout<<e ndl;cout<<"please selset the operator!"<<e ndl;cin»n;cout< &
18、lt;n<<en dl;while(n>4|n<1)/ 纠错cout<<"the nu mble you in put is wrong ,try aga in !"<<e ndl;/flushall();cin»n;return n;第四章调试分析<1>程序运行测试 进入程序界面:K:Cale ndarDEbugC 白 lendar+exe(进入程序的第一步) 选择操作1 :le aj&e se Ise it the opera-toi?12 2014JunFriTimUedT tie,并且当天
19、用红色标7 4 1812 26 3 0?12 24 18 51123 0 7 4112296 3012 318 5 2 912 2历钟 日时 屈示件 甬出 显査竈 12 3 4(可以看到显示出当月月历出) 再次选择,选择操作2历钟日时层示件当日显软示書岀显查竈 鼻12 3 4lease seIset the opeirator!lease chioce the input wav:案齬隸认为当月-号(提示是以年月方式,或者以年月日方式查询月历)please input the date *L992 13the date you input iw uroncf,please ch亡uked,mn
20、d try again!(选择方式一,并输入1992年13月,提示输入错误,清再次输入)1 1 I1 * biMM I H 1 H <« KW I Y E T IHMVa.1 HI1992121坤池年12月1 0SunMonTuteWedThuFri SatI23456?891011121314151617IS19202122232425262728293031(再次输入1992年12月后得到正确结果) 再次选择操作,选择操作3ulca?e seIse七 the operator-?33Pin Jun 12 15:38:08 2014please selset the oper
21、ator! 33Th" Jun 12 15:30:28 2014(可以看到时间在不断变化 ,达到了实际效果)第五章用户使用说明这是一个简单的万年历程序,用户可以通过键入年月 或者年月日,便可以轻松快速的查询到当月月历 ,还可以 输入1快速的得到现在用户所处月的月历,每天的信息一 目了然,方便快捷,可能够通过键入 3来获取当前时间(精确到秒)。设计心得通过几天的不懈努力,这一份C+的课程设计终于在自己的努 力与同学的帮助下顺利的完成了。前期可能是自己的一些方面薄弱,并没有完全的理解一些代码,从而设计出来的程序编译出错还好在一些知识能力强的同学下进行了合理的改正才有了现在的这 个完整的程
22、序。设计一个万年历的程序之前,可能都是有自己大概的一点想法,也许看上去简单,但通过实际的操作我便发现,各种细小的错 误都可能会出现,这便让我意识到个人平时的动手操作还是有欠缺 的。所以还是如老师讲的那般,以电脑软件的检验来通过不断的练 习完善自己的薄弱点。通过这次为数不多的几天计算机实践学习,加上这学期的学习,我了解了一些关于 C+语言的知识,理解巩固了我C+语言的 理论知识,开始可能学的枯燥,但不断的深入便能发现他的有趣 点,就如这一次万年历的设计,所以这便更容易让我感觉到,只要 认真的学了,加上自己的汗水,还是一样能够有收获的。参考文献作者:Y.Daniel LiangJava语言程序设计
23、作者:Richard Johnsonbaugh& Martin Kalin面向对象程序设计一C+语言描述百度文库:附录一:#in elude <iostream>#in elude <ctime>#in elude <stri ng>#i nclude <ioma nip>#i nclude <win dows.h>using n amespaee std;class Cale ndar;ostream& operator<<(ostream& out,Cale ndar& a);bool
24、isTrueDate(Cale ndar& temp);int create();class Cale ndarpublic:Cale ndar()stri ng p;t=time(O); p=getYear(); year=atoi(p.c_str(); p=getDay(); day=atoi(p.c_str(); p=getMo nth(); mon th=c on vert(p); cout<<ctime( &t);Cale ndar(i nt y,i nt m,i nt d) long a;year=y; mon th=m;day=d; a=getTota
25、lDay(); a=a*24*3600;t=a;int con vert(stri ng p);stri ng getYear() const stri ng getM on th() const stri ng getDay() const stri ng getTime() const int getYear2() const int getMonth2() const in t getDay2() con st friend int create();return extract(20,4);return extract(4,3); return extract(8,2); return
26、 extract(11,8); retur n year;return mon th;retur n day;friend bool isTrueDate(Cale ndar& temp);bool isLeapYear(i nt year);in t getTotalDay();in t getStartDay();int getDays InMon th(i nt a);void display();friend ostream& operator<<(ostrea m& out,Cale ndar& a); private:stri ng ex
27、tract(i nt offset,i nt count) conststring timeString=ctime(&t);return timeString.substr(offset,count);time_t t;int year;int mon th;int day;int Cale ndar:c on vert(stri ng p)int mon thName;if(p="Ja n")mon thName=1;if(p="Feb")mon thName=2;if(p="Mar")mon thName=3;if(p=
28、"Apr")mon thName=4;if(p="May")mon thName=5; if(p="Ju n")mon thName=6;if(p="Jul")mon thName=7;if(p="Aug")mon thName=8;if(p="Sep")mon thName=9;if(p="Oct")mon thName=10;if(p="Nov")mon thName=11;if(p="Dec")mon thNa
29、me=12;return mon thName;bool Cale ndar:isLeapYear(i nt y)if(y%400=0|(y%4=0&&y%100!=0)return true;elsereturn false;int Cale ndar:getTotalDay()int i=1970,totalDay=0;for(;i<year;i+)if(isLeapYear(i)totalDay+=366;elsetotalDay+=365;for(i=1;i<mo nth;i+)totalDay+=getDaysl nMon th(i);return tot
30、alDay;int Cale ndar:getDays InMon th(i nt 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 Cale ndar:getStartDay()int a=0;a=getTotalDay();a=(a+4)%7;retur n a;void Cale ndar:disp
31、lay()int i=1,startDay;startDay=getStartDay();cout<<" Mon Tue Wed Thu Fri Sat Su n"<<e ndl; for(;i<=startDay;i+)cout<<" "for(i=0;i<getDays InMon th(m on th);i+)if(i+startDay)%7=0)cout<<e ndl;cout<<setw(4)<<i+1;cout<<e ndl;ostream&
32、; operator<<(ostream& out,Cale ndar& a)int i=1,startDay;startDay=a.getStartDay();out<<" Sun Mon Tue Wed Thu Fri Sat"<<e ndl;for(;i<=startDay;i+)out<<" "for(i=0;i<a.getDays InMon th(a.c on vert(a.getM on th();i+)if(i+startDay)%7=0)out<<e
33、 ndl;if(i+1)=a.day)SetCo nsoleTextAttribute(GetStdHa ndle(STD_OUTPUT_HANDLE),FOREGROUND_INTENSITY|FOREGROUND_RED); / 设置字的颜色为红色 out<<setw(4)<<i+1;SetCo nsoleTextAttribute(GetStdHa ndle(STD_OUTPUT_HANDLE),FO REGROUND_INTENSITY|FOREGROUND_RED|FOREGROUND_GREEN|FOR EGROUND_BLUE);elseout<&l
34、t;setw(4)<<i+1;cout<<e ndl;retur n out;int select() int n=0;cout<<"*"<<e ndl;cout<<"*1.显示当月日历*"<<e ndl;cout<<"*2.查询日历*"<<e ndl;cout<<"*3.实时显示时钟*"<<e ndl;cout<<"*4.退出软件*"<<e ndl;c
35、out<<"*'<<e ndl;cout<<e ndl;cout<<"please selset the operator!"<<e ndl;cin»n ;cout< <n<<en dl;while( n>4| n<1)cout<<"the nu mble you in put is wrong ,try aga in !"<<e ndl; cin»n;return n;int localTime(
36、)int i=0;time_t now;struct tm *time now;HANDLE hStdout;/ 定义句柄CONSOLE_SCREEN_BUFFER_INFOpBuffer;CONSOLE_CURSOR_INFOhStdoutGetStdHa ndle(STD_OUTPUT_HANDLE);GetCo nsoleScree nBufferl nfo(hStdout, &pBuffer);COORD pos; /COORD结构体,与位置有关while(i<10)time(&no w);time now = localtime(&no w);SetCo
37、 nsoleTextAttribute(GetStdHa ndle(STD_OUTPUT_HANDLE),FOREGROUND_INTENSITY|FOREGROUND_GREEN); / 设置字的颜色为绿色cout<<asctime(time no w); pos.X=0;pos.Y=pBuffer.dwCursorPositi on.Y;SetC on soleCursorPositi on( hStdout,pos);i+;Sleep(1000);SetCo nsoleTextAttribute(GetStdHa ndle(STD_OUTPUT_HANDLE),FOREGRO
38、UND_INTENSITY|FOREGROUND_RED|FOREGROUND_GREEN|FOR EGROUND_BLUE);设置字的颜色为白色return 1;int create()int x, y,乙n;cout<<"please chioce the in put way:"<<e ndl;cout<<"1. 年月方式(默认为当月一号)"<<endl;cout<<"2.年月日方式"<<endl<<endl;cin>>n;cout<<"please in put the date:"<<e ndl;while( n>2| n<1)cout<<"the nu mble you in put is wrong ,please try aga in !"<<e ndl;cin»n;if(n=1)cin> >x»y;z=1;if(n=2)cin>
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 人工草皮购销合同标准文本
- 公司信贷合同标准文本
- 代加工算合同样本
- 建筑行业会计报告
- 关于抵押合同标准文本
- 信息通道租赁合同标准文本
- 交通运输用地出让合同范例
- 仓库改造合同标准文本
- 小米客户关系管理分析
- 公司食堂送货合同标准文本
- 五月菜油香(2024年宁夏中考语文试卷记叙文阅读试题)
- 2025非小细胞肺癌中西医结合诊疗指南
- 教科版2024-2025学年六年级下册科学3.1《太阳系大家庭》同步练习(附参考答案)
- 妇科围手术期的护理
- 2025年宁夏宁东开发投资有限公司招聘笔试参考题库含答案解析
- 《半导体行业发展历程》课件
- 《智能轮椅的结构计算设计与选型案例综述》3000字
- 上海市智算中心建设导则(2025年版)
- 2025山东能源集团中级人才库选拔高频重点提升(共500题)附带答案详解
- 广东省广州市白云区2023-2024学年八年级上学期期末英语试题(答案)
- 高等学历继续教育毕业生实习报告
评论
0/150
提交评论