欢迎来到淘文阁 - 分享文档赚钱的网站! | 帮助中心 好文档才是您的得力助手!
淘文阁 - 分享文档赚钱的网站
全部分类
  • 研究报告>
  • 管理文献>
  • 标准材料>
  • 技术资料>
  • 教育专区>
  • 应用文书>
  • 生活休闲>
  • 考试试题>
  • pptx模板>
  • 工商注册>
  • 期刊短文>
  • 图片设计>
  • ImageVerifierCode 换一换

    最新C--万年历课程设计报告...doc

    • 资源ID:34718465       资源大小:205KB        全文页数:29页
    • 资源格式: DOC        下载积分:15金币
    快捷下载 游客一键下载
    会员登录下载
    微信登录下载
    三方登录下载: 微信开放平台登录   QQ登录  
    二维码
    微信扫一扫登录
    下载资源需要15金币
    邮箱/手机:
    温馨提示:
    快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。
    如填写123,账号就是123,密码也是123。
    支付方式: 支付宝    微信支付   
    验证码:   换一换

     
    账号:
    密码:
    验证码:   换一换
      忘记密码?
        
    友情提示
    2、PDF文件下载后,可能会被浏览器默认打开,此种情况可以点击浏览器菜单,保存网页到桌面,就可以正常下载了。
    3、本站不支持迅雷下载,请使用电脑自带的IE浏览器,或者360浏览器、谷歌浏览器下载即可。
    4、本站资源下载后的文档和图纸-无水印,预览文档经过压缩,下载后原文更清晰。
    5、试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。

    最新C--万年历课程设计报告...doc

    Four short words sum up what has lifted most successful individuals above the crowd: a little bit more.-author-dateC-万年历课程设计报告.存档资料 成绩: 武汉纺织大学课 程 设 计 报 告 书名 称 C+程序设计课程设计题 目 万年历 专业班级 指导教师 李 敏 2014 年 6月11 日 -目录课 程 设 计 报 告 书1第一章 需求分析.3 第二章 概要设计.2第三章 详细设计与编码5第四章 调试分析13第五章 用户使用说明24设计心得15参 考 文 献26致谢.16 第一章 需求分析 如今的社会是一个信息的时代,随着电脑等科技产品在人们生活中占据着越来越重要的地位,人们就会越加的善加利用,这为我们的生活带来了极大的效率,同时计算机的普及更可以看出它所占的地位。 万年历作为日常中的一种小工具,它具有多方面的小工能,主要在日期的显示上给人以直观的表达效果,在日期的查询上方便简洁,还有就是在某些节日的提醒上都给我们带来极大的方便 ,是一种比较实用的小工具。我们每个人都可以在自己的个人电脑上进行制作,一方面不仅可以加强巩固我们对C+语言的学习,还可以通过自主的编程找到自身的缺点。这对培养我们自身的创新能力和动手能力具有很大的作用。 第二章 概要设计 1. 设计要求 模仿现实生活中的挂历. 当前页以系统当前日期的月份为准显示当前月的每一天(显示出日及对应的星期几).当系统日期变到下一月时,系统自动翻页到下一月.2. 总体设计 <1>实现操作流程图运行万年历程序 进入程序界面 显示当月月历 选择执行操作 查询月历 退出 实时时钟显示 第三章 详细设计与编码<1>设计思路 要输出一个月的月历。第一要输出一行星期,这个很简单就可以实现,第二要知道一个月的一号是星期几,为了知道它,必须有一个日历的开始时间,我在这里设定的是1970年1月1号,此时它对应的事星期四,然后要计算你输入的日期与开始日期的总天数totaldays,(totaldays+4)%7即可得到月头是星期几,然后为了判断用户输入的日期是否正确,还得有一个检测判断函数,然后关于第三个功能实时时钟显示的实现思想为:每隔一秒输出系统当前时钟,每次输出时要在第一排的最前面输出,以覆盖掉上次输出的时钟,给人像是时钟自己在变化,我们可以调用系统API函数SetConsoleCursorPosition()来控制光标位置,整体思路如上所述。<2>每个模块实现详解 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);/cout<<ctime(&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 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();int getStartDay();int getDaysInMonth(int a);void display();friend ostream& operator<<(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(;i<year;i+)if(isLeapYear(i) /判断点前年份是否为闰年totalDay+=366; /如果是加366天,否则加365天elsetotalDay+=365;for(i=1;i<month;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(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 Sat"<<endl; /输出星期行for(;i<=startDay;i+) out<<" " /前面没有日期以空格填充for(i=0;i<a.getDaysInMonth(a.convert(a.getMonth();i+)if(i+startDay)%7=0) /每输出7个后换行out<<endl;if(i+1)=a.day)SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_INTENSITY|FOREGROUND_RED); /设置字的颜色为红色out<<setw(4)<<i+1; /当月历中日期为当前日期时显示为红色 SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_INTENSITY|FOREGROUND_RED|FOREGROUND_GREEN|FOREGROUND_BLUE);/设置字的颜色为白色,仅仅使当前日期显示为红色,其他日期为白色elseout<<setw(4)<<i+1;cout<<endl;return out;4、判断输入日期是否正确函数bool isTrueDate(Calendar& temp)if(temp.day<=temp.getDaysInMonth(temp.month)return true; /输入的天数是不是小于当月最大日期else return false;if(temp.isLeapYear(temp.year)&&temp.month=2)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 pBuffer; /CONSOLE_CURSOR_INFO 结构体中包含了关于命令行光标的一些信息,是否显示和光标大小两个信息。通过更改这个结构体,再赋给命令行,就可以实现想要的一些效果了hStdout = GetStdHandle(STD_OUTPUT_HANDLE); GetConsoleScreenBufferInfo(hStdout, &pBuffer); /让句柄指向当前进程,获取当前光标位置COORD pos; /COORD结构体,与位置有关while(i<10)time(&now); /time()用来获取当前的系统时间,返回的结果是一个time_t类型,原型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); /设置字的颜色为绿色,时钟绿色输出cout<<asctime(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_HANDLE),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;cout<<endl;cout<<"please selset the operator!"<<endl;cin>>n;cout<<n<<endl;while(n>4|n<1) /纠错cout<<"the numble you input is wrong ,try again!"<<endl;/flushall();cin>>n;return n; 第四章 调试分析 <1>程序运行测试 进入程序界面: (进入程序的第一步) 选择操作1:(可以看到显示出当月月历,并且当天用红色标出)再次选择,选择操作2(提示是以年月方式,或者以年月日方式查询月历)(选择方式一,并输入1992年13月,提示输入错误,清再次输入)(再次输入1992年12月后得到正确结果)再次选择操作,选择操作3(可以看到时间在不断变化,达到了实际效果) 第五章 用户使用说明 这是一个简单的万年历程序,用户可以通过键入年月或者年月日,便可以轻松快速的查询到当月月历,还可以输入1快速的得到现在用户所处月的月历,每天的信息一目了然,方便快捷,可能够通过键入3来获取当前时间(精确到秒)。 设计心得通过几天的不懈努力,这一份C+的课程设计终于在自己的努力与同学的帮助下顺利的完成了。前期可能是自己的一些方面薄弱,并没有完全的理解一些代码,从而设计出来的程序编译出错,还好在一些知识能力强的同学下进行了合理的改正才有了现在的这个完整的程序。设计一个万年历的程序之前,可能都是有自己大概的一点想法,也许看上去简单,但通过实际的操作我便发现,各种细小的错误都可能会出现,这便让我意识到个人平时的动手操作还是有欠缺的。所以还是如老师讲的那般,以电脑软件的检验来通过不断的练习完善自己的薄弱点。通过这次为数不多的几天计算机实践学习,加上这学期的学习,我了解了一些关于c+语言的知识,理解巩固了我c+语言的理论知识,开始可能学的枯燥,但不断的深入便能发现他的有趣点,就如这一次万年历的设计,所以这便更容易让我感觉到,只要认真的学了,加上自己的汗水,还是一样能够有收获的。 参 考 文 献作者:Y.Daniel Liang Java语言程序设计作者: Richard Johnsonbaugh & Martin Kalin 面向对象程序设计C+语言描述百度文库: 致 谢附录一:#include <iostream>#include <ctime>#include <string>#include <iomanip>#include <windows.h>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=getYear();year=atoi(p.c_str(); p=getDay();day=atoi(p.c_str();p=getMonth();month=convert(p);cout<<ctime(&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 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();int getStartDay();int getDaysInMonth(int a);void display();friend ostream& operator<<(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;int Calendar:convert(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 monthName;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(;i<year;i+)if(isLeapYear(i)totalDay+=366;elsetotalDay+=365;for(i=1;i<month;i+)totalDay+=getDaysInMonth(i);return totalDay;int 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;startDay=getStartDay();cout<<" Mon Tue Wed Thu Fri Sat Sun"<<endl;for(;i<=startDay;i+)cout<<" "for(i=0;i<getDaysInMonth(month);i+)if(i+startDay)%7=0)cout<<endl;cout<<setw(4)<<i+1;cout<<endl;ostream& operator<<(ostream& out,Calendar& a)int i=1,startDay;startDay=a.getStartDay();out<<" Sun Mon Tue Wed Thu Fri Sat"<<endl;for(;i<=startDay;i+)out<<" "for(i=0;i<a.getDaysInMonth(a.convert(a.getMonth();i+)if(i+startDay)%7=0)out<<endl;if(i+1)=a.day)SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_INTENSITY|FOREGROUND_RED); /设置字的颜色为红色out<<setw(4)<<i+1; SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_INTENSITY|FOREGROUND_RED|FOREGROUND_GREEN|FOREGROUND_BLUE);elseout<<setw(4)<<i+1;cout<<endl;return out;int select()int n=0;cout<<"*"<<endl;cout<<"* 1.显示当月日历 *"<<endl;cout<<"* 2.查询日历 *"<<endl;cout<<"* 3.实时显示时钟 *"<<endl;cout<<"* 4.退出软件 *"<<endl;cout<<"*"<<endl;cout<<endl;cout<<"please selset the operator!"<<endl;cin>>n;cout<<n<<endl;while(n>4|n<1)cout<<"the numble you input is wrong ,try again!"<<endl;cin>>n;return n;int localTime() int i=0;time_t now; struct tm *timenow;HANDLE hStdout; /定义句柄CONSOLE_SCREEN_BUFFER_INFO pBuffer; /CONSOLE_CURSOR_INFO hStdout = GetStdHandle(STD_OUTPUT_HANDLE); GetConsoleScreenBufferInfo(hStdout, &pBuffer); COORD pos; /COORD结构体,与位置有关while(i<10)time(&now); timenow = localtime(&now);SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_INTENSITY|FOREGROUND_GREEN); /设置字的颜色为绿色cout<<asctime(timenow); pos.X=0;pos.Y=pBuffer.dwCursorPosition.Y; SetConsoleCursorPosition(hStdout,pos); i+;Sleep(1000);SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_INTENSITY|FOREGROUND_RED|FOREGROUND_GREEN|FOREGROUND_BLUE);/设置字的颜色为白色return 1;int create()int x, y, z,n;cout<<"please chioce the input way:"<<endl;cout<<"1.年月方式(默认为当月一号)"<<endl;cout<<"2.年月日方式"<<endl<<endl;cin>>n;cout<<"please input the date:"<<endl;while(n>2|n<1)cout<<"the numble you input is wrong ,please try again!"<<endl;cin>>n;if(n=1)cin>>x>>y;z=1;if(n=2)cin>>x>>y>>z;Calendar temp(x,y,z); /设置临时变量,测试输入数据是否正确while(!isTrueDate(temp)cout<<"the date you input is wrong,please checked,and try again!"<<endl;if(n=2)cin>>x>>y>>z;if(n=1)cin>>x>>y;z=1;temp.year=x;temp.month=y;temp.day=z;Calendar a1(x,y,z);cout<<" "<<a1.getYear2()<<"年 "<<a1.getMonth2()<<"月 "<<a1.getDay2()<<"日"<<endl<<endl;cout<<a1;cout<<endl;return 1;bool isTrueDate(Calendar& temp)if(temp.day<=temp.getDaysInMonth(temp.month)return true;else return false;if(temp.isLeapYear(temp.year)&&temp.month=2)if(temp.day<=29)return true;elsereturn false;if(!temp.isLeapYear(temp.year)&&temp.month=2)if(temp.day<=28)return true;elsereturn false;int main()Calendar a;SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_INTENSITY|FOREGROUND_RED|FOREGROUND_GREEN|FOREGROUND_BLUE);for(;)switch(select()case 1:cout<<" "<<a.getMonth()<<" "<<a.getDay()<<" "<<a.getYear()<<endl<<endl; cout<<a; break;case 2:create();break;case 3:localTime(); break;case 4:exit(0);break;default:break;return 1;

    注意事项

    本文(最新C--万年历课程设计报告...doc)为本站会员(1595****071)主动上传,淘文阁 - 分享文档赚钱的网站仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知淘文阁 - 分享文档赚钱的网站(点击联系客服),我们立即给予删除!

    温馨提示:如果因为网速或其他原因下载失败请重新下载,重复下载不扣分。




    关于淘文阁 - 版权申诉 - 用户使用规则 - 积分规则 - 联系我们

    本站为文档C TO C交易模式,本站只提供存储空间、用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。本站仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知淘文阁网,我们立即给予删除!客服QQ:136780468 微信:18945177775 电话:18904686070

    工信部备案号:黑ICP备15003705号 © 2020-2023 www.taowenge.com 淘文阁 

    收起
    展开