日期時間顯示程序_廖海洋_第1頁
日期時間顯示程序_廖海洋_第2頁
日期時間顯示程序_廖海洋_第3頁
日期時間顯示程序_廖海洋_第4頁
日期時間顯示程序_廖海洋_第5頁
已閱讀5頁,還剩33頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)

文檔簡介

1、信息科學與技術(shù)學院程序設(shè)計基礎(chǔ)課程設(shè)計報告題目名稱: 日期時間顯示程序 學生姓名: 廖海洋 學 號: 2014508010 專業(yè)班級: 14計科1班 指導(dǎo)教師: 郭理 2015年 6 月 17 日目錄1 課程設(shè)計題目與要求31.1設(shè)計題目31.2設(shè)計要求32 總體設(shè)計32.1 總體功能框架32.2 數(shù)據(jù)結(jié)構(gòu)概要設(shè)計43 詳細設(shè)計43.1數(shù)據(jù)結(jié)構(gòu)詳細設(shè)計43.2系統(tǒng)功能詳細設(shè)計54 運行結(jié)果135 課程設(shè)計總結(jié)165.1 編程中的問題及解決方法165.2 小結(jié)165.3 心得體會165.4 程序設(shè)計方法16參考文獻16附:源代碼171 課程設(shè)計題目與要求1.1設(shè)計題目C+題目11:日期時間顯示程

2、序:編一應(yīng)用程序,輸入年、月、日、時、分、秒,在屏幕上模擬顯示一電子計時器,不斷輸出下一秒的時間和日期,以及格林威治的日期和時間。注意,當對日期增加1天后,會涉及所謂的"進位"問題:首先算出本"日"所在的月份具有的天數(shù)N,若加1之后的"日"數(shù)值超過所在的月份具有的天數(shù)N時,"進位"到月,而月份若超過12時還要"進位"到年。1.2設(shè)計要求(1)定義一個時間結(jié)構(gòu)體類型time,能提供時、分、秒組成的時間,并提供時間增加的方法(按秒)。(2)定義一個日期結(jié)構(gòu)體類型Date,記錄年、月、日,并提供日期增

3、加的方法(按天)。(3)定義個日期時間結(jié)構(gòu)體類型DateTime,除具有年、月、日、時、分、秒外,還增加國名和與格林威治時間的差。思考:可對該類增加你所考慮到的其他功能,如,對日期進行輸入,計算二日期的間隔天數(shù),計算某日期為星期幾,打印對象當前數(shù)據(jù)的y年m月的月歷,一次增加若干天,對兩個日期進行其他比較運算等。2 總體設(shè)計2.1 總體功能框架1 時間模塊功能:能提供時、分、秒組成的時間,并提供時間增加的方法(按秒)。2 日期化模塊功能:記錄年、月、日,并提供日期增加的方法(按天)。3 日期時間模塊功能:除具有年、月、日、時、分、秒外,還增加國名和與格林威治時間的差4 時間差模塊功能:1.計算從

4、出生到現(xiàn)在的年,月,日2.計算兩日期間隔天數(shù)3.計算某日為星期幾 蔡勒(Zeller)公式4. 根據(jù)給定的日期,求出它在該年的第幾天5 日歷模塊功能:顯示y年m月的日歷6. 驗證模塊 功能:1.驗證所有日期格式是否正確 2.驗證所有時間格式是否正確7. 雜項:功能:1. 當前系統(tǒng)時間2. 返回一個月的天數(shù)3. 判斷是否是閏年2.2 數(shù)據(jù)結(jié)構(gòu)概要設(shè)計class date(基類)功能:能提供時、分、秒組成的時間,并提供時間增加的方法(按秒)。class Time (基類) 功能:記錄年、月、日,并提供日期增加的方法(按天)。class DateTime:public date,Time(派生類)功

5、能:繼承前兩個類,并提供全部時間的增加方法圖2- 13 詳細設(shè)計3.1數(shù)據(jù)結(jié)構(gòu)詳細設(shè)計class date /定義日期類public:int year; /年int month; /月int day; /日date(int y,int m,int d);date();void add(); /日期增加的方法void showdate();功能: 能提供時、分、秒組成的時間,并提供時間增加的方法(按秒)。class Time /定義時間類public:int hour; /時int minute; /分int second; /秒Time(int h,int m,int s);Time();vo

6、id add();void showTime();功能: 記錄年、月、日,并提供日期增加的方法(按天)。class DateTime:public date,Time /日期時間類string country; /國家名int time_differ; /時間差public:DateTime(int h,int mi,int s,int y,int m,int d);DateTime();void add(); /日期增加的方法void showDateTime();功能:繼承data,time類,提供所有時間的增加方法(年月日時分秒)3.2系統(tǒng)功能詳細設(shè)計time 類時間增加函數(shù):add()

7、功能:使時間增加的算法入口參數(shù):無。出口參數(shù):無。圖3- 1data類中的成員函數(shù) add()功能:使日期增加的算法入口參數(shù):無。出口參數(shù):無。圖3- 2DateTime類 add()功能:使所有函數(shù)增加的方法入口參數(shù):無。出口參數(shù):無。圖3- 3全局函數(shù)int DayInYear(int year, int month, int day) year:年 month:月 day 日;功能:能根據(jù)給定的日期,求出它在該年的第幾天。入口參數(shù):int year, int month, int day出口參數(shù):day;圖3- 4全局函數(shù) int yearDay(int year, int month,

8、 int day,int year1, int month1, int day1)功能:求日期間隔入口參數(shù):int year, int month, int day,int year1, int month1, int day1出口參數(shù):天數(shù)。圖3- 5全局函數(shù) void calendar(int y,int m)功能:顯示日歷入口參數(shù):int y,int m y:年 m月出口參數(shù):輸出日歷圖3- 6全局函數(shù) bool pass_date(int y,int m, int d)功能:驗證日期格式是否正確入口參數(shù):int y,int m, int d y:年 m:月 d:日。出口參數(shù):0或1圖3

9、- 7全局函數(shù) int Month_Day(int year,int month) year:年 month:月功能:返回一個月的天數(shù)入口參數(shù):int year,int month出口參數(shù):0或1圖3- 84 運行結(jié)果圖4- 1顯示菜單的系統(tǒng)時間圖4- 2通過輸入的年月日時分秒,顯示一個模擬動態(tài)時鐘,并顯示相應(yīng)格林威治時間.圖4- 3通過輸入的兩個日期,計算兩日期間隔天數(shù)圖4- 4通過輸入的日期,計算這一日是星期幾圖4- 5通過輸入的日期,顯示這一月的日歷圖4- 6通過輸入的生日,顯示從出生到現(xiàn)在的年 月 日 5 課程設(shè)計總結(jié) 5.1 編程中的問題及解決方法相對于其他同學來說我的題目還是相對簡

10、單,不過也遇到了一些問題,就是對一些東西還不太懂,但這終歸來說是學習不夠,我解決問題最主要的問題是在網(wǎng)上搜,還有就是和同學交流討論 5.2 小結(jié)回顧這次課程設(shè)計,至今我仍感慨頗多,的確,自從拿到題目到完成整個編程,從理論到實踐,在整整一個星期的日子里,可以學到很多很多的東西,同時不僅可以鞏固了以前所學過的知識,而且學到了很多在書本上所沒有學到過的知識。通過這次課程設(shè)計使我懂得了理論與實際相結(jié)合是很重要的,只有理論和知識是遠遠不夠的,只有把所學的理論知識與實際相結(jié)合起來,從理論中得出結(jié)論,才能真正為社會服務(wù),從而提高自己的實際動手能力和獨立思考能力 5.3 心得體會這次課程設(shè)計自我感覺我的題目比

11、較簡單,但是我也很用心的在做,相比于上課來說,我認為課程設(shè)計能學到更多的知識,在這個過程中,遇到不會的,我會自己查資料,上網(wǎng),實現(xiàn)一個個的功能,雖然我這道題目并不是很難,但是卻學到了很多. 課堂上要講授許多關(guān)于c+語言的語法規(guī)則,聽起來十分枯燥無味,也不容易記住,死記硬背是不可取的。然而要使用c+語言這個工具解決實際問題,又必須掌握它。通過多次上機練習,對于語法知識有了感性的認識,加深對它的理解,在理解的基礎(chǔ)上就會自然而然地掌握c語言的語法規(guī)定。對于一些內(nèi)容自己認為在課堂上聽懂了,但上機實踐中會發(fā)現(xiàn)原來理解的偏差,這是由于大部分學生是初次接觸程序設(shè)計,缺乏程序設(shè)計的實踐所致。 5.4 程序設(shè)計

12、方法1.在這個程序首先我用到了oop面向?qū)ο蟮某绦蛟O(shè)計思想,2.我用到了基類和派生類的方法來實現(xiàn)模擬時鐘的實現(xiàn)3.在實現(xiàn)星期的函數(shù)中我還用到的數(shù)學方法來計算參考文獻 1C+面向?qū)ο蟪绦蛟O(shè)計教程(第3版). 北京:清華大學出版社 2009.6附:源代碼#include<iostream>#include <windows.h>#include<cstdio>#include <time.h> using namespace std;bool IsLeap(int year) /判斷是否是閏年return (year%4 = 0)&&

13、 (year%100 != 0) | (year%400 =0);int Month_Day(int year,int month) /返回一個月的天數(shù)int day = 0; if(month=1|month=3|month=5|month=7|month=8|month=10|month=12)day = 31; else if(month=4|month=6|month=9|month=11)day = 30;else if(month=2)day = 28 + IsLeap(year); return day+1; class Time /定義時間類public:int hour; /

14、時int minute; /分int second; /秒Time(int h,int m,int s);Time();void add();void showTime();Time:Time(int h,int m,int s):hour(h),minute(m),second(s)/采用成員初始化列表對成員賦值void Time:add() /時間增加的方法if(second<60)+second;if(second=60)+minute;second=0;if(minute=60)+hour;minute=0;if(hour=24)hour=0; void Time:showTim

15、e() /輸出時間的方法cout<<"tt"<<"tt"<<hour<<"時"<<":"<<minute<<"分"<<":"<<second<<"秒"<<endl<<"tt "<<endl;/cout<<"tt"<<hour<<

16、"時"<<":"<<minute<<"分"<<":"<<second<<"秒"<<endl;class date /定義日期類public:int year; /年int month; /月int day; /日date(int y,int m,int d);date();void add(); /日期增加的方法void showdate();date:date(int y,int m,int d):year(y

17、),month(m),day(d)/采用成員初始化列表對成員賦值void date:add()/日期增加的方法if(day<Month_Day(year,month)day+;if(day=Month_Day(year,month)day = 1;month+;if(month>12)month = 1;year+;void date:showdate() /輸出時間的方法cout<<endl<<endl;cout<<"tt "<<endl<<"tt"<<"tt

18、"<<year<<"年"<<":"<<month<<"月"<<":"<<day<<"日"<<endl;class DateTime:public date,Time /日期時間類string country; /國家名int time_differ; /時間差public:DateTime(int h,int mi,int s,int y,int m,int d);DateTim

19、e();void add(); /日期增加的方法void showDateTime();DateTime:DateTime(int y,int m,int d,int h,int mi,int s):date(y,m,d),Time(h,mi,s)void DateTime:add()if(second<0)second=60+second;-minute;if(second<60 && second>=0)+second;if(second=60)+minute;second=0;if(minute<0)minute=60+minute;-hour;i

20、f(minute=60)+hour;minute=0;if(hour<0)hour=24+hour;-day;if(hour=24)hour=0;+day; if(day<=0)day=30+day;-month;if(day=Month_Day(year,month)day = 1;+month;if(month<=0)month=12+month;-year;if(month>12)month = 1;+year;void DateTime:showDateTime()date:showdate();Time:showTime();/DayInYear能根據(jù)給定的日

21、期,求出它在該年的第幾天int DayInYear(int year, int month, int day) /int _day = 0; int DAY12=31,28,31,30,31,30,31,31,30,31,30,31; if(IsLeap(year) DAY1 = 29; for(int i=0; i<month - 1; +i) day += DAYi; return day;/求日期間隔int yearDay(int year, int month, int day,int year1, int month1, int day1)int sum=0;if(year=y

22、ear1)int d=DayInYear(year,month,day)-DayInYear(year1,month1,day1);if(d<0)d=-d;return d;else if(year>year1)for(int i=year1+1;i<year;i+)/若兩日期間隔大于一年,則累加他們之間整年的天數(shù)if(IsLeap(i)sum=sum+366;elsesum=sum+365;if(IsLeap(year)return DayInYear(year,month,day)+(366-DayInYear(year1,month1,day1)+sum;elseret

23、urn DayInYear(year,month,day)+(365-DayInYear(year1,month1,day1)+sum;else if(year<year1)for(int i=year+1;i<year1;i+)/若兩日期間隔大于一年,則累加他們之間整年的天數(shù)if(IsLeap(i)sum=sum+366;elsesum=sum+365;if(IsLeap(year)return DayInYear(year1,month1,day1)+(366-DayInYear(year,month,day)+sum;elsereturn DayInYear(year1,mo

24、nth1,day1)+(365-DayInYear(year,month,day)+sum;void localtime()/當前系統(tǒng)時間time_t t; tm *lt; t = time(NULL); /歷史時間清空lt = localtime(&t); cout<<lt->tm_year+1900<<"年"<<lt->tm_mon<<"月"<<lt->tm_yday-150<<"日"<<"星期"<

25、;<lt->tm_wday<<" "<<lt->tm_hour<<":"<<lt->tm_min<<":"<<lt->tm_sec<<endl; void birthday(int y,int m,int d)/從出生到現(xiàn)在的年,月,日 time_t t; tm *lt; t = time(NULL); /歷史時間清空lt = localtime(&t); int day=yearDay(y,m,d,lt->

26、tm_year+1900,lt->tm_mon,lt->tm_yday-150);cout<<"從您出生到現(xiàn)在共經(jīng)歷了"<<(lt->tm_year+1900)-y<<"年 "<<"共經(jīng)歷了"<<(lt->tm_year+1900)-y)*12<<"月 "<<"共經(jīng)歷了"<<day<<"天"<<endl;void calendar(i

27、nt y,int m)int cal67;int c=1;int firstday=(1 + 2*m+3*(m+1)/5+y+y/4-y/100+y/400)%7+1;/蔡勒(Zeller)公式 計算y年m月的第一天是星期幾int Day=Month_Day(y,m)-1; /計算一個月的天數(shù)cout<<" 一 二 三 四 五 六 日 "<<endl;for(int i=0;i<6;i+)for(int n=0;n<7;n+)if(n < firstday && i=0)calin=0;elsecalin=c;c+;

28、c=0;for( i=0;i<6;i+)for(int n=0;n<7;n+)if(calin=0)cout<<" "if(c!=Day&&calin!=0)printf("%3d",calin);c+;cout<<endl;bool pass_date(int y,int m, int d)/日期驗證函數(shù)if(d>Month_Day(y,m)|m<0)return 0;else if(m<0|m>12)return 0;else if(y<1000|y>9999)r

29、eturn 0;elsereturn 1;bool pass_time(int h,int m, int s)/日期驗證函數(shù)if(h>23|h<0)return 0;else if(m<0|m>59)return 0;else if(s<0|s>59)return 0;elsereturn 1;int main()while(1)char op;cout<<"當前時間:"localtime();cout<<endl;cout<<endl<<"tt " <<en

30、dl<<"tt a.顯示電子計時器和格林威治的日期和時間 " <<endl<<"tt b.計算兩日期間隔天數(shù) " <<endl <<"tt c.計算某日期為星期幾 " <<endl<<"tt d.打印y年m月的月歷 " <<endl<<"tt e.從出生到現(xiàn)在的年,月,日 " <<endl<<"tt "<<endl<<en

31、dl;cout<<"請輸入操作"<<endl;cin>>op;if(op='a')/顯示電子計時器和格林威治的日期和時間system("cls");int year=0,month=0,day=0,hour=0,minute=0,second=0;cout<<"請輸入初始日期:年 月 日 如:2004 2 28"<<endl;cin>>year>>month>>day;cout<<"請輸入初始時間:時

32、分 秒 如:23 59 57"<<endl;cin>>hour>>minute>>second;if(pass_time(hour,minute,second)&&pass_date(year,month,day)DateTime clock(year,month,day,hour,minute,second);DateTime clock1(year,month,day,hour-8,minute,second);while(1)cout<<"你輸入的時間"<<endl;cl

33、ock.add();clock.showDateTime();cout<<"對應(yīng)格林威治時間"<<endl;clock1.add();clock1.showDateTime();Sleep(1000);system("cls");else cout<<"時間格式錯誤"<<endl;system("pause");if(op='b')/計算兩日期間隔天數(shù)int year1,month1,day1,year,month,day;cout<<"請輸入第一個日期 如:2014 1 1"<<endl;cin>>year>>month>>day;cout<<"請輸入第二個日期 如:2014 1 1"<<endl;cin>>year1>>month1>>day1;if(pass_da

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
  • 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論