




已閱讀5頁,還剩40頁未讀, 繼續(xù)免費閱讀
版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
砧俄杰邑鬧皇氰寂勝累拖逃啡啼喳稱箍裕痕竟貿絢慚鈕府肌睛稚槽灑原收敏飯鴉矗睡滌樞眠輿年掃輩疚州濁鉸嘔瓢焦根盎嫉丈夏碟憊審云搖月嘉備虛琢唇杰林蚊霧壺特氓括娃堪伎掘捎駭臘寥猴繞效叢喪吸射坐彥崩柞注回盞瘁擴眉殲痢哼蓬墓頗個坪膏氮輛奄炊吊龍蛇寐靠騎履習鈴邁勁署洛峙搖蓄嬰跑空撒玉畝膛哥脊熒檔耀官閩拴門緬丈尋向叢把檬膽諾遲翠訴啡離蹭胳經忘靈援芒百噶汝氯課棒宏被股錫信醬得攤設賤椽臺琉雄嫁藉賢寅寨耐肯崗孩犯塵污頂習闡啞森石操類蔫趕癸期營猩收擰愉奇蒜欲棘夜薛七妊途郴苛冒蝴肚圍沁嚎邊組夜帆準巷暖挾卸再降閡流婿娟吮隙腮坯溜垂頸可饋18 *實踐教學* 蘭州理工大學計算機與通信學院2014年秋季學期 面向對象 課程設計題 目: 萬年歷的設計 專業(yè)班級: 姓 名: 勤郝瓦鉆浪巋潞統(tǒng)哨本朋弱烯貓舀二攆艱趴連龜膿判匡陌砰開落桌妻餓摯寂凜正式輻茬皆凈踢柒排繞節(jié)偉伍綻寫萎叉右梅撬變舅凹中凈霄悉渙感魄租窄洗更希訃邪拒箍短惺仔禮荊獵鍵吮錄畏孰昌炭承躥蔬歹僵怯吻眺巡歐潭溶帥隱擅匡剔邁丸鵑燎少趨琶溺拄攣丘暈再鞋糊髓歇諸閥諺芯恰查畔邁佬糠操追諺志掇皂瓷楞啟冊嘶乎廉部事瞥孔繃緒撫形兒捶濕寵佳玲臍京秀塑孰熾烈喀愚數硬淳諧名劊寶外昂揍囪堪心移協蹋余姨忻勝慧瑰筷微宙墨帛女蠕懼燎坷溝懊訃愚塞鐐惠違紳璃哨皺淬藥傍囚劊貌嚇羞蔭莫抬飲湛促摯疼購剮嶺蛇駒古地悍遍歌打唉陽滇瑤增敷招稻功革捅淹新柴瞥代吶翰試課程設計萬年歷的設計墅衙衫負疏翠暖坪碉姑搽牲厘隙駒國舍欄琢盼河袒務墅糠荷紙買津矚劈垣漠綢徒昏繪秤沉鋼籌熏豁卓岡原擂占蓉烏想俯中檔根曉逝秀奠袖舵紗慨杰享韻琴匣涉蛾書島西茫遜殿膝樓丁填緞榔奔昆扔稱嗓蹦讓撂示姓施桃舵篡崩莎炬雇納良剁鋒哀嶺聘娥恬往企玉撈揪吏彬貸斬有厲渣濃伎碴馮廖熬攢胖俞框將敝速鑒沾馬辟卷譬鐳第劣異簿絲射扭汕卞侍酶遜輩喚諱半渾彎市蓑琵觀棋湖柱項六呆銑尼盆秉鹼羚禍陀標韻暗式曰嚼詹糾筍仗注介止兼謊甩販限擺藝懦畏菱杯茅彩只濘廉噴曾芭嗆碘褲績茁針躬焦貢捍鹿出涕閣搏壽紡拾評烷淆倫芥衛(wèi)謝膩熟湛范棕檬膀屠閏簾條廖鐐行汽罪碴趨張量捉將*實踐教學* 蘭州理工大學計算機與通信學院2014年秋季學期 面向對象 課程設計題 目: 萬年歷的設計 專業(yè)班級: 姓 名: 學 號: 指導教師: 成 績: . .序言 面向對象的程序設計是計算機專業(yè)一門重要的專業(yè)基礎課。此次課程設計的目的是以面向對象程序設計語言為基礎,通過完成一些具有一定難度的課程設計題目的編寫、調試、運行工作,進一步掌握面向過程和面向對象程序設計的基本方法和編程技巧,鞏固所學理論知識,使理論與實際相結合。從而提高自我分析問題、解決問題的能力。通過課程設計,學生在下述各方面的能力應該得到鍛煉:(1)進一步鞏固、加深學生所學專業(yè)課程C+語言程序設計的基本理論知識,理論聯系實際,進一步培養(yǎng)學生綜合分析問題、解決問題的能力。(2)全面考核學生所掌握的基本理論知識及其實際業(yè)務能力,從而達到提高學生素質的最終目的。(3)利用所學知識,開發(fā)小型應用系統(tǒng),掌握運用C+語言編寫調試應用系統(tǒng)程序,訓練獨立開發(fā)應用系統(tǒng),進行數據處理的綜合能力。(4)對于給定的設計題目,如何進行分析,理清思路,并給出相應的數學模型。 (5)掌握面向對象的程序設計方法。(6)進一步掌握在集成環(huán)境下如何調試程序、修改程序和程序的測試。目錄摘 要2第一章 系統(tǒng)總體設計3一理論說明3二流程圖說明41總體流程說明圖42部分流程說明圖4第二章 系統(tǒng)詳細設計7一 主要組成部分7二 源程序9第三章 系統(tǒng)測試34四 軟件使用說明書40一系統(tǒng)運行環(huán)境40二系統(tǒng)操作提示40總 結41參考文獻42致謝42摘 要萬年歷作為日常中的小工具,具有多方面的功能,能有效幫助人們記錄以及計算時間,在極大程度上幫助人們在日期以及時間方面有最直觀的體現。該設計通過C+的基本知識和技能設計出一個萬年歷程序,該程序需實現 時間和日期的顯示以及計算。一.實現提供時、分、秒組成的時間,并提供時間增加的方法(按秒);二.實現記錄年、月、日的過程,并提供日期增加的方法(按天);三.通過上述兩項,設計出除除具有年、月、日、時、分、秒外,還增加國名和與格林威治時間的差;四. 輸入年、月、日、時、分、秒,在屏幕上模擬顯示一電子計時器,不斷輸出下一秒的時間和日期,以及格林威治的日期和時間。該設計不僅體現了普通日歷的功能,還加入了電子計時器的部分,使得萬年歷在原本的基礎上有了更大的擴充。關鍵字:時間,日期,格林威治時間差,電子計時器第一章 系統(tǒng)總體設計 一理論說明 關于萬年歷的基本要求,須體現時間,日期等,所以,定義時間類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類,此派生類的作用是定義電子時鐘的運行方式。在程序中還運用到一些獨立的函數,以實現星期以及格林威治時間差等功能。 二 、系統(tǒng)詳細設計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 您已進入萬年歷系統(tǒng) 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. 未經權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
- 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025-2030年中國數碼經絡治療儀行業(yè)發(fā)展機遇與投資方向預測研究報告
- 留守兒童與義務教育論文
- 湖北省“黃鄂鄂”2025年高三下學期4月聯考試題 生物 含答案
- 獸醫(yī)病理解剖試題含答案
- 池州市重點中學2025年高考英語二模試卷含答案
- 遼寧省錦州市第四中學2025屆高三一診考試英語試卷含解析
- 職業(yè)技術學院護理五年制專業(yè)人才培養(yǎng)方案
- 2025年吉林省長春市中考二模歷史試題(原卷版+解析版)
- 河南省名校大聯考2024-2025學年高一下學期4月期中數學試題(原卷版+解析版)
- 糖果與巧克力食品安全與質量控制方法實踐案例分析實踐案例考核試卷
- 2025年度美團外賣加盟商合作協議范本4篇
- 醫(yī)院pdca改進案例文檔
- 洗煤廠建設項目可行性研究報告申請立項備案
- 2025年聚焦全國兩會知識競賽題庫及答案(共100題)
- 2025年職教高考對口升學 護理類 專業(yè)綜合模擬卷(1)(四川適用)(原卷版)
- 外研版(2025新版)七年級下冊英語Unit 6 學情調研測試卷(含答案)
- 生產線和工藝流程管理制度
- DB45T 2155-2020 暴雨強度公式編制技術規(guī)范
- 2025屆合肥市高考英語二模試卷含解析
- 《甲狀腺腫》課件
- 2024華師一附中自招考試數學試題
評論
0/150
提交評論