




已阅读5页,还剩40页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
砧俄杰邑闹皇氰寂胜累拖逃啡啼喳称箍裕痕竟贸绚惭钮府肌睛稚槽洒原收敏饭鸦矗睡涤枢眠舆年扫辈疚州浊铰呕瓢焦根盎嫉丈夏碟惫审云摇月嘉备虚琢唇杰林蚊雾壶特氓括娃堪伎掘捎骇腊寥猴绕效丛丧吸射坐彦崩柞注回盏瘁扩眉歼痢哼蓬墓颇个坪膏氮辆奄炊吊龙蛇寐靠骑履习铃迈劲署洛峙摇蓄婴跑空撒玉亩膛哥脊荧档耀官闽拴门缅丈寻向丛把檬胆诺迟翠诉啡离蹭胳经忘灵援芒百噶汝氯课棒宏被股锡信酱得摊设贱椽台琉雄嫁藉贤寅寨耐肯岗孩犯尘污顶习阐哑森石操类蔫赶癸期营猩收拧愉奇蒜欲棘夜薛七妊途郴苛冒蝴肚围沁嚎边组夜帆准巷暖挟卸再降阂流婿娟吮隙腮坯溜垂颈可馈18 *实践教学* 兰州理工大学计算机与通信学院2014年秋季学期 面向对象 课程设计题 目: 万年历的设计 专业班级: 姓 名: 勤郝瓦钻浪岿潞统哨本朋弱烯猫舀二撵艰趴连龟脓判匡陌砰开落桌妻饿挚寂凛正式辐茬皆净踢柒排绕节伟伍绽写萎叉右梅撬变舅凹中净霄悉涣感魄租窄洗更希讣邪拒箍短惺仔礼荆猎键吮录畏孰昌炭承蹿蔬歹僵怯吻眺巡欧潭溶帅隐擅匡剔迈丸鹃燎少趋琶溺拄挛丘晕再鞋糊髓歇诸阀谚芯恰查畔迈佬糠操追谚志掇皂瓷楞启册嘶乎廉部事瞥孔绷绪抚形儿捶湿宠佳玲脐京秀塑孰炽烈喀愚数硬淳谐名刽宝外昂揍囱堪心移协蹋余姨忻胜慧瑰筷微宙墨帛女蠕惧燎坷沟懊讣愚塞镣惠违绅璃哨皱淬药傍囚刽貌吓羞荫莫抬饮湛促挚疼购剐岭蛇驹古地悍遍歌打唉阳滇瑶增敷招稻功革捅淹新柴瞥代呐翰试课程设计万年历的设计墅衙衫负疏翠暖坪碉姑搽牲厘隙驹国舍栏琢盼河袒务墅糠荷纸买津瞩劈垣漠绸徒昏绘秤沉钢筹熏豁卓冈原擂占蓉乌想俯中档根晓逝秀奠袖舵纱慨杰享韵琴匣涉蛾书岛西茫逊殿膝楼丁填缎榔奔昆扔称嗓蹦让撂示姓施桃舵篡崩莎炬雇纳良剁锋哀岭聘娥恬往企玉捞揪吏彬贷斩有厉渣浓伎碴冯廖熬攒胖俞框将敝速鉴沾马辟卷譬镭第劣异簿丝射扭汕卞侍酶逊辈唤讳半浑弯市蓑琵观棋湖柱项六呆铣尼盆秉硷羚祸陀标韵暗式曰嚼詹纠笋仗注介止兼谎甩贩限摆艺懦畏菱杯茅彩只泞廉喷曾芭呛碘裤绩茁针躬焦贡捍鹿出涕阁搏寿纺拾评烷淆伦芥卫谢腻熟湛范棕檬膀屠闰帘条廖镣行汽罪碴趋张量捉将*实践教学* 兰州理工大学计算机与通信学院2014年秋季学期 面向对象 课程设计题 目: 万年历的设计 专业班级: 姓 名: 学 号: 指导教师: 成 绩: . .序言 面向对象的程序设计是计算机专业一门重要的专业基础课。此次课程设计的目的是以面向对象程序设计语言为基础,通过完成一些具有一定难度的课程设计题目的编写、调试、运行工作,进一步掌握面向过程和面向对象程序设计的基本方法和编程技巧,巩固所学理论知识,使理论与实际相结合。从而提高自我分析问题、解决问题的能力。通过课程设计,学生在下述各方面的能力应该得到锻炼:(1)进一步巩固、加深学生所学专业课程C+语言程序设计的基本理论知识,理论联系实际,进一步培养学生综合分析问题、解决问题的能力。(2)全面考核学生所掌握的基本理论知识及其实际业务能力,从而达到提高学生素质的最终目的。(3)利用所学知识,开发小型应用系统,掌握运用C+语言编写调试应用系统程序,训练独立开发应用系统,进行数据处理的综合能力。(4)对于给定的设计题目,如何进行分析,理清思路,并给出相应的数学模型。 (5)掌握面向对象的程序设计方法。(6)进一步掌握在集成环境下如何调试程序、修改程序和程序的测试。目录摘 要2第一章 系统总体设计3一理论说明3二流程图说明41总体流程说明图42部分流程说明图4第二章 系统详细设计7一 主要组成部分7二 源程序9第三章 系统测试34四 软件使用说明书40一系统运行环境40二系统操作提示40总 结41参考文献42致谢42摘 要万年历作为日常中的小工具,具有多方面的功能,能有效帮助人们记录以及计算时间,在极大程度上帮助人们在日期以及时间方面有最直观的体现。该设计通过C+的基本知识和技能设计出一个万年历程序,该程序需实现 时间和日期的显示以及计算。一.实现提供时、分、秒组成的时间,并提供时间增加的方法(按秒);二.实现记录年、月、日的过程,并提供日期增加的方法(按天);三.通过上述两项,设计出除除具有年、月、日、时、分、秒外,还增加国名和与格林威治时间的差;四. 输入年、月、日、时、分、秒,在屏幕上模拟显示一电子计时器,不断输出下一秒的时间和日期,以及格林威治的日期和时间。该设计不仅体现了普通日历的功能,还加入了电子计时器的部分,使得万年历在原本的基础上有了更大的扩充。关键字:时间,日期,格林威治时间差,电子计时器第一章 系统总体设计 一理论说明 关于万年历的基本要求,须体现时间,日期等,所以,定义时间类time,日期类date,完成关于年(year),月(month),日(day),时(hour),分(minute),秒(second)的定义。1 在计算时间的时候,每达到1秒的时候对second进行加1,然后判断是否达到60秒,达到的话minute就加1,minute到达60hour就加一,同样的方法对hour、day、month和year进行计算。2在计算日期的时候,在对day计数时,考虑到大小月和闰年,对day进行加1时,判断是哪一月和是否为闰年。在确定年、月、日之后,使用函数Week()进行对星期几的计算,根据1901年每月1号是星期几可以得出现在是星期几。在这个程序中,还使用了一个对话框类,使用对话框来对时间日期的设置。在菜单栏里添加一个“设置时间”的选项和一个菜单消息,当点击这个选项就会弹出设置时间日期的对话框,对话框中编辑控件设定了每个值的取值范围,从而对输入错误进行排除。 二流程图说明1总体流程说明图 ( 图一)2部分流程说明图(1)输入年份 结束365天366天 28天 29天天闰年否是二月天数是全年天数(图二)(2) 判断年份情况 完成日期的定义以及增加方式完成时间的定义以及增加方式日期类date时间类timeDatetime完成电子时钟的模拟定义week()输出日期的星期数计算两日期相差天数定义situation() 打印结果(图三)另:在本程序中共用到三个类,定义时间的time类,定义日期的date类,以及公有继承了time和date的datetime类,此派生类的作用是定义电子时钟的运行方式。在程序中还运用到一些独立的函数,以实现星期以及格林威治时间差等功能。 二 、系统详细设计1. 主要组成部分该程序主要为了实现日期和时间的显示以及格林威治时间差的计算结果,其中功能时间的显示使用类datetime来实现,功能时差的计算使用类time和类date来实现。下面分别介绍类time,date的详细设计。时间类time的具体实现流程:先声明后定义,类time定义为时间基类,其中:成员函数time()主要功能为时分秒赋初值,实现方式为:函数内定义成员函数int gethour()return hour;int getminute()return minute;int getsecond()return second;返回时分秒的值;成员函数void sethour(int nhour)hour=nhour;void setminute(int nminute)minute=nminute;void setsecond(int nsecond)second=nsecond; 成员函数time主要功能为在撤销对象占有的内存之前完成清理工作释放内存,实现方式为:,通过对象调用析构函数完成清理工作。 类time具体实现流程为:class timeprivate:int hour;int minute;int second;public:time();time(int nhour,int nminute,int nsecond);time(time &c);time();int gethour()return hour;int getminute()return minute;int getsecond()return second;void sethour(int nhour)hour=nhour;void setminute(int nminute)minute=nminute;void setsecond(int nsecond)second=nsecond;类date定义为:描述日期的基类其中:成员函数int getyear()return year;int getmonth()return month;int getday()return day; string getweek() return week;主要功能为返回年月日的值,实现方式为:调用成员函数成员函数void setyear(int nyear)year=nyear;void setmonth(int nmonth)month=nmonth;void setday(int nday)day=nday;void setweek(string c)week=c;主要功能为给私有数据成员赋值,实现方式为通过调用析构函数实现。类datetime公开继承类time和类date的属性,实现电子时钟的功能,完成时间由秒自增的过程。定义函数week(),以及situation(),完成日期对应星期数以及时间差的计算过程,完善电子时钟以及万年历的功能。2. 源程序#include#include#include#includeusing namespace std;int mon13=0,31,28,31,30,31,30,31,31,30,31,30,31; bool isleapyear(int year)/判断是否是闰年return (year%4=0 & year%100!=0)|(year%400=0); int mon_day(int year ,int month)/判断月份对应的天数 if (isleapyear(year)&month=2) return 29; else return monmonth; int getyearday(int year)/返回一年天数 if(isleapyear(year) return 366; else return 365; class timeprivate:int hour;int minute;int second;public:time();time(int nhour,int nminute,int nsecond);time(time &c);time();int gethour()return hour;int getminute()return minute;int getsecond()return second;void sethour(int nhour)hour=nhour;void setminute(int nminute)minute=nminute;void setsecond(int nsecond)second=nsecond;class dateprivate:int year;int month;int day; string week;public:date();date(int y,int m,int d);date(date &t);date();int getyear()return year;int getmonth()return month; int getday()return day;string getweek() return week;void setyear(int nyear)year=nyear;void setmonth(int nmonth)month=nmonth;void setday(int nday)day=nday;void setweek(string c)week=c; void reset(int y=0,int m=0,int d=0);date operator +(const date &t);date operator -(const date &t);class datetime:public date,public time private:public: datetime(); datetime(int nyear,int nmonth,int nday,int nhour,int nminute,int nsecond); datetime(int nyear,int nmonth,int nday,time & c);datetime(date & t,int nhour,int nminute,int nsecond); datetime addbysecond(); datetime operator=(datetime & t);datetime operator+(datetime & t);time:time()/判断时间并进行赋值hour=0;minute=0;second=0;time:time(int nhour,int nminute,int nsecond)if(nhour24|nhour59|nminute59|nsecond0) second=0; else second=nsecond;time:time(time &c)hour=c.hour;minute=c.minute;second=c.second;time:time()/time析构函数date:date()/date构造函数year=0;month=0;day=0;date:date(int y,int m,int d) if(y12 | mmaxday | dyear =y;this-month =m;this-day =d; datetime:datetime():date(),time(); datetime:datetime(int nyear,int nmonth,int nday,int nhour,int nminute,int nsecond):date(nyear,nmonth,nday),time(nhour,nminute,nsecond) datetime:datetime(int nyear,int nmonth,int nday,time & c):time(c),date(nyear,nmonth,nday) datetime:datetime(date & t,int nhour,int nminute,int nsecond):date(t),time(nhour,nminute,nsecond) datetime datetime:addbysecond() this-setsecond(this-getsecond()+1); if(this-getsecond()59) this-setsecond(0); this-setminute(this-getminute()+1); if(this-getminute()59) this-setminute(0); this-sethour(this-gethour()+1); if(this-gethour()23) this-sethour(0); this-setday(this-getday()+1); if(this-getday()mon_day( this-getyear() ,this-getmonth() this-setday(1); this-setmonth(this-getmonth()+1); if(this-getmonth() 12) this-setmonth(1); this-setyear(this-getyear()+1); return *this;datetime datetime:operator=(datetime & t)this-setyear(t.getyear(); this-setmonth(t.getmonth();this-setday(t.getday();this-sethour(t.gethour();this-setminute(t.getminute();this-setsecond(t.getsecond();return *this;datetime datetime:operator+(datetime & t) if(this-getyear()+t.getyear()setyear(1900); else this-setyear(this-getyear()+t.getyear(); if(this-getmonth()+t.getmonth()12 | (this-getmonth()+t.getmonth()setmonth(1); else this-setmonth(this-getmonth()+t.getmonth(); int maxday=0; if(this-getyear()+t.getyear()=2) if(isleapyear(this-getyear()+t.getyear() maxday=29; else maxday=28; else maxday=monthis-getmonth()+t.getmonth(); if(this-getday()+t.getday()maxday |(this-getday()+t.getday()setday(1); this-setday(this-getday()+t.getday(); return *this;int dayinyear(datetime & t)/日期在年中的天数int i=0,day=0;for(i=1;it.getmonth();i+) day+=mon_day(t.getyear(),i);day+=t.getday();return day;void getweek( datetime &t)/判断天数对应星期 int week=0;int diffday; if(t.getyear()=1900) if(t.getmonth()=1) diffday=t.getday()-1; else diffday=dayinyear(t)-1; else int d1=getyearday(1900)-1; int d2=dayinyear(t); int d3=0; int year=0; for(year=1901;yeart.getyear();year+) d3+=getyearday(year); diffday=d1+d2+d3; week=diffday%7; switch(week) case 0: t.setweek(星期一);break;case 1:t.setweek(星期二);break;case 2:t.setweek(星期三);break;case 3:t.setweek(星期四);break;case 4:t.setweek(星期五);break; case 5:t.setweek(星期六);break;case 6:t.setweek(星期天);break; coutt.getweek() endl; int getmonthfirst(datetime & t)/返回对应月的第一天星期数 datetime temp(t.getyear(),t.getmonth(),1,t.gethour(),t.getminute(),t.getsecond();getweek( temp);/判断对应星期数 if(temp.getweek()=星期一) return 1; else if(temp.getweek()=星期二) return 2; else if(temp.getweek()=星期三) return 3; else if(temp.getweek()=星期四) return 4; else if(temp.getweek()=星期五) return 5; else if(temp.getweek()=星期六) return 6; else return 7; void showmonth(datetime & t)/打印当前月日历 int i=0;coutMonday Tusday Wedday Thuday Friday Satday Sundayendl; int j=0; int k=1; int num=getmonthfirst(t); cout ; for(k=1;k=8-num;k+) coutk ; coutendl; for(i=k;i=mon_day(t.getyear(),t.getmonth();i+) int flag=1; int first=k; if(i10) cout i ; else couti ; if(i-k)=6) coutendl; k=i+1; void stuation1(datetime & t)/计算两日期相差天数 int nyear=0;int nmonth=0;int nday=0;int nhour=0;int nminute=0;int nsecond;cout请输入 年 月 日:nyearnmonthnday;cout请输入 时 分 秒:nhournminutensecond;datetime temp ( nyear, nmonth,nday, nhour, nminute,nsecond); int diffday=0; if(t.getyear()=nyear) if(t.getmonth()=nmonth) diffday=abs(t.getday()-nday); else diffday=abs(dayinyear(t)-dayinyear(temp); else if(nyeart.getyear() int d1=getyearday(temp.getyear()-dayinyear(temp); int d2=dayinyear(t); int d3=0; int year=0; for(year=nyear;yeart.getyear();year+) d3+=getyearday(year); diffday=d1+d2+d3; else int d1=getyearday(t.getyear()-dayinyear(t);int d2=dayinyear(temp);int d3=0;int year=0;for(year=t.getyear();yearnyear;year+)d3+=getyearday(year); diffday=d1+d2+d3; cout与原日期相隔的天数为:diffdayendl; int monthsurplus(datetime & t)/当月剩余天数 return mon_day(t.getyear(),t.getmonth()-t.getday(); int yearsurplus(datetime & t)/当年剩余天数 return getyearday(t.getyear()-dayinyear(t); void stuation2(datetime & t ) int diffday=0; int lastday=0; int lastmonth=0; int lastyear=0; cout 请输入相隔的天数:diffday; if(diffday0) if(diffday=monthsurplus(t)/月未变 lastday=diffday+t.getday(); lastmonth=t.getmonth(); lastyear=t.getyear(); else if(diffday=yearsurplus(t)/年未变 lastyear=t.getyear(); int k=1; int i=monthsurplus(t); while(idiffday) i+=(mon_day(t.getyear(),t.getmonth()+k); k+; lastmonth=t.getmonth()+k-1; int h=0; int total=monthsurplus(t); for(h=(t.getmonth()+1);hlastmonth;h+) total+=mon_day(t.getyear(),h); lastday=diffday-total; else/年变了 int k=1; int fmonth=0; int i=yearsurplus(t); while(idiffday) i+=getyearday(t.getyear()+k); k+; lastyear=t.getyear()+k-1; int fyear=yearsurplus(t); for(i=(t.getyear()+1);ilastyear;i+) fyear+=getyearday(i); int surplusday=diffday-fyear;/所求年的天数 int h=0,j=1; while(h=surplusday) h+=mon_day(lastyear,j); j+; lastmonth=j-1; int total=0; int j1=1; for(;j1lastmonth;j1+) total+=mon_day(lastyear,j1); lastday=surplusday-total; else/diffday0 if (abs(diffday)t.getday() lastday=t.getday(); lastmonth=t.getmonth(); lastyear=t.getyear(); else if(abs(diffday)=dayinyear(t) lastyear=t.getyear(); int j=0,total=0; int k=t.getmonth(); int i=t.getday(); while(i=(lastmonth+1);j-) total+=mon_day(t.getyear(),j); lastday=diffday-total; else int i=dayinyear(t); int k=t.getyear(); while(i=lastyear+1;j-) mtotal+=getyearday(j); int nday=abs(diffday)-mtotal; int h=0;int flag=0; int m=0; while(h=lastmonth+1;m-) dtotal+=mon_day(lastyear,m); lastday=nday-dtotal; cout日期为:endl; coutlastyear年lastmonth月lastday日endl; void Tprojection(datetime & sytime) int option=0; cout 您已进入万年历系统 endl; cout 您已进入日期推算菜单 endl; cout 1.计算两日期相差天数 endl; cout 2.计算日期前后推算 endl; cout 请选择:option; system(cls); /清屏 switch(option) case 1: stuation1(sytime);/计算两日期相差天数 break; case 2: stuation2(sytime);/计算日期前后推算 break; void timers( datetime &dtime)/模拟电子计时器 int k=0; coutdtime.getyear()年dtime.getmonth()月dtime.getday() 日dtime.gethour()时dtime.getminute()分dtime.getsecond()秒endl; getweek( dtime );/判断对应星期数 while(true) Sleep(2200); dtime.addbysecond();/电子
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 护士护理业务查房:提升技能与优化护理实践
- 四川应用技术职业学院《开发基础》2023-2024学年第二学期期末试卷
- 江苏省宜兴市丁蜀区重点名校2024-2025学年初三下学期3月10日周中测数学试题试卷含解析
- 云南师范大学《产品U界面设计》2023-2024学年第二学期期末试卷
- 浙江省龙游第二高级中学2025届高三一轮第五次阶段性过关物理试题试卷含解析
- 浙江宇翔职业技术学院《金融综合实训》2023-2024学年第二学期期末试卷
- 山西林业职业技术学院《冶金资源工程》2023-2024学年第二学期期末试卷
- 云南医药健康职业学院《寄生虫学及检验》2023-2024学年第二学期期末试卷
- 中国科学技术大学《运动技能学习与控制》2023-2024学年第二学期期末试卷
- 内江师范学院《工程软件应用》2023-2024学年第二学期期末试卷
- 2017年10月自考00015英语二试卷及答案
- 国开电大《工程数学(本)》形成性考核作业5答案
- 民间非营利组织会计制度分解
- LS/T 1201-2020磷化氢熏蒸技术规程
- JJF 1503-2015电容薄膜真空计校准规范
- GB/T 5597-1999固体电介质微波复介电常数的测试方法
- GB/T 11349.3-1992机械导纳的试验确定冲击激励法
- GB 15578-2008电阻焊机的安全要求
- 新疆旅游景点大全课件
- 《政治学原理》课件
- 【高效管理】团队建设-如何迈向高绩效团队课件
评论
0/150
提交评论