C++日歷管理系統(tǒng)課程設(shè)計(共31頁)_第1頁
C++日歷管理系統(tǒng)課程設(shè)計(共31頁)_第2頁
C++日歷管理系統(tǒng)課程設(shè)計(共31頁)_第3頁
C++日歷管理系統(tǒng)課程設(shè)計(共31頁)_第4頁
C++日歷管理系統(tǒng)課程設(shè)計(共31頁)_第5頁
已閱讀5頁,還剩26頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

1、C+課程設(shè)計報告( 2013 - 2014 年度第 二 學(xué)期)日歷管理器的開發(fā)系統(tǒng)的設(shè)計專業(yè)學(xué)生姓名班級學(xué)號指導(dǎo)教師完成日期2014年7 月 3 日目 錄目 錄21 概 述11.1 課程設(shè)計目的11.2 課程設(shè)計內(nèi)容12 系統(tǒng)需求分析12.1 系統(tǒng)目標(biāo)12.2 主體功能12.3 開發(fā)環(huán)境23 系統(tǒng)概要設(shè)計23.1 系統(tǒng)的功能模塊劃分23.2系統(tǒng)流程圖44系統(tǒng)詳細設(shè)計54.1系統(tǒng)主頁面設(shè)置54.2更改模塊設(shè)計54.3判斷模塊設(shè)計6試結(jié)5 測試75.1 測試方案75.2 測果76 小結(jié)9參考文獻11附 錄12附錄1 源程序清單12日歷管理器系統(tǒng)的設(shè)計1 概 述 1.1 課程設(shè)計目的1、鞏固并加深學(xué)

2、生對C+語言程序設(shè)計知識的理解;2、培養(yǎng)我面向?qū)ο蟮某绦蛟O(shè)計思想,使我們認識面向過程和面向?qū)ο髢煞N設(shè)計方法的區(qū)別;3、進一步掌握和應(yīng)用VC+ 6.0集成開發(fā)環(huán)境;4、提高運用C+語言解決實際問題的能力; 5、初步掌握開發(fā)小型實用軟件的基本方法,能獨立設(shè)計、實現(xiàn)具有實際功能的小系統(tǒng);6、掌握書寫程序設(shè)計開發(fā)文檔的能力。1.2 課程設(shè)計內(nèi)容仿現(xiàn)實生活中的掛歷,顯示日歷。當(dāng)前頁以系統(tǒng)當(dāng)前日期的月份為準(zhǔn),顯示當(dāng)前月的每一天(顯示出日及對應(yīng)的星期幾);當(dāng)系統(tǒng)日期變到下一月時,系統(tǒng)自動翻頁到下一月。根據(jù)用戶輸入的年份,自動產(chǎn)生每個月的日期列表。自定義顯示日歷的形式。2 系統(tǒng)需求分析2.1 系統(tǒng)目標(biāo) 建立電

3、子日歷,顯示當(dāng)前月的每一天,當(dāng)日期變更時,可以自主生成新的日歷表!2.2 主體功能1)當(dāng)前頁以系統(tǒng)當(dāng)前日期的月份為準(zhǔn),顯示當(dāng)前月的每一天(顯示出日及對應(yīng)的星期幾),當(dāng)系統(tǒng)日期變到下一月時,系統(tǒng)自動翻頁到下一月。2)可以實現(xiàn)日期的加法運算,即在日期相加的菜單選項中增加日期加天數(shù),結(jié)果為新日期。3)根據(jù)用戶輸入的年份,自動產(chǎn)生每個月的日期列表。包括輸入非法數(shù)據(jù)(如負數(shù)、日期超過31天等情況)的識別顯示功能。2.3 開發(fā)環(huán)境VC+6.03 系統(tǒng)概要設(shè)計3.1 系統(tǒng)的功能模塊劃分日歷系統(tǒng)設(shè)計的主要模塊分為:查詢年份月份模塊、查詢平年閏年模塊、判斷星期幾模塊、計算總天數(shù)模塊、計算月份第一天為星期幾模塊等

4、模塊。日歷功能模塊劃分查詢年份月份模塊查詢平年閏年模塊判斷星期幾模塊輸入年月輸入年月日輸入年查詢某年輸入年輸出該月的月歷輸出該年各個月的月歷輸出該年是閏年或平年輸出是星期幾選擇圖3-1系統(tǒng)模塊劃分開始結(jié)束輸入年份閏年不是閏年Y/N是否要繼續(xù)操作Y返回 圖3-2判斷是否為平年閏年模塊開始結(jié)束載入程序通過日期和時間函數(shù)返回并顯示當(dāng)前日期手動設(shè)置需要查看的日期通過系統(tǒng)日期函數(shù)返回日期圖3-2系統(tǒng)流程3.2系統(tǒng)流程圖否4系統(tǒng)詳細設(shè)計4.1系統(tǒng)主頁面設(shè)置設(shè)計思路:首先判斷某一年是否為閏年,若是,則二月輸出為二十九天,如果不是,二月輸出為二十八天。再判斷系統(tǒng)當(dāng)前月份是一個大月還是小月,如果是大月,則輸出三

5、十一天;如果是小月,則輸出三十天。通過定義一個結(jié)構(gòu)體,用對對象指針的訪問來實現(xiàn)從系統(tǒng)自動獲取時間為程序所用。再利用一個函數(shù)計算出每月的第一天是星期幾。根據(jù)判斷的大月和小月,通過控制符控制輸出流格式(設(shè)置字段)寬度,把該日期以前的位置用空格補上,并從改日起依次輸出天數(shù)直到月底,該月中的天數(shù)加上該月一日為星期幾的數(shù)字再除以七得零換行,即可完整的輸出該月的日歷。C+中一般會使用cout和cin時的默認格式。但有時人們在輸入輸出時有一些特殊的要求,如在輸出實數(shù)時,要規(guī)定字段寬度,只需要保留兩位小數(shù),數(shù)據(jù)向左或向右對齊等。C+提供了在輸入輸出流中使用的控制符。需要注意的是:如果使用了控制符,在程序單位的

6、開頭,除了要加iostream頭文件外,還要另外加iomanip頭文件。4.2顯示模塊設(shè)計顯示日歷輸出格式和界面。 Year 顯示年份 Month 顯示月份; Day 顯示日期4.3更改模塊設(shè)計判斷年份,當(dāng)年份小于你輸入值時,則報錯。判斷年份,當(dāng)年份小于或大于你輸入值時,則報錯。首先判斷輸入的年份是否為閏年,在根據(jù)輸入的月份判斷輸入的日期是否正確加上該月一日為星期幾的數(shù)字再除以7得0換行,即可完整的輸出該月的日歷。4.4判斷模塊設(shè)計用if語句判斷定義年到輸入年之間每一年是否為閏年,是閏年,該年的總天數(shù)為366,否則,為355。然后判斷輸入的年是否為定義年,若是,令總天數(shù)S=1,否則,用累加法計

7、算出定義年到輸入年之間的總天數(shù),再把輸入年的一月到要輸出的月份之間的天數(shù)累加起來,若該月是閏年中的月份并且該月還大于二月,再使總天數(shù)加1,否則,不加,既算出從定義年一月一日到輸出年的該月一日的總天數(shù)。判斷年份,當(dāng)年份小于你輸入值時,則報錯。判斷年份,當(dāng)年份小于或大于你輸入值時,則報錯。首先判斷輸入的年份是否為閏年,在根據(jù)輸入的月份判斷輸入的日期是否正確加上該月一日為星期幾的數(shù)字再除以7得0換行,即可完整的輸出該月的日歷。用if語句判斷定義年到輸入年之間每一年是否為閏年,是閏年,該年的總天數(shù)為366,否則,為355。然后判斷輸入的年是否為定義年,若是,令總天數(shù)S=1,否則,用累加法計算出定義年到

8、輸入年之間的總天數(shù),再把輸入年的一月到要輸出的月份之間的天數(shù)累加起來,若該月是閏年中的月份并且該月還大于二月,再使總天數(shù)加1,否則,不加,既算出從定義年一月一日到輸出年的該月一日的總天數(shù)。4.5自定義模塊設(shè)計當(dāng)按下q時,退出程序 while(key=_getch()!=q)用W鍵時日期向前推移天 if(day7)day-=7;用s鍵時日期向后推移天 if(day1)day-=1;用d鍵時日期向后推移天if(day=(Wether_RN()?month_days_Rmonth-1:month_days_NRmonth-1)-1)day+=1;調(diào)用Seatch_date函數(shù),對年月日進行重置 Se

9、arch_date(y,m,d)試結(jié)5 測試5.1 測試方案1.執(zhí)行代碼;2.按功能要求,調(diào)試程序;5.2 測果1.輸入界面5-12.執(zhí)行程序:輸入年份,顯示每一個月的日期表圖5-23.輸入年份和日期圖5-34.查詢某一天是星期幾圖5-46 小結(jié)通過將近一星期的課程設(shè)計,使我熟悉了C+語言的編寫思路,并掌握了如何對其進行編寫與調(diào)試,把書本上學(xué)習(xí)到的知識應(yīng)用到實際中去,很好的鍛煉了我的自覺能力。由于對C+語言的了解不是很深,所以很多語句都還不是十分熟練,尤其是在連接數(shù)據(jù)庫中的一些功能調(diào)用,是我這次課設(shè)最大問題。通過自己不斷的深入學(xué)習(xí),雖然這段時間在自覺方面知識有了很大的提高,但很多知識還是學(xué)的像

10、一盤散沙,自己根本不能一下子保用。一方面由于課程設(shè)計時間有限,又一方面對課程設(shè)計思路一開始不是很好,所以在設(shè)計中也碰到了很多麻煩,通過上網(wǎng)查找資料以及學(xué)習(xí)有關(guān)方面的書籍,確實讓我從中學(xué)到了很多非常值得學(xué)習(xí)的知識,比如說:我從網(wǎng)上下載相關(guān)視頻進行學(xué)習(xí),知道了什么是設(shè)計一個程序一般都需三重架構(gòu)等。但通過學(xué)習(xí)這門課也使我了解它的設(shè)計思路及其它相關(guān)的內(nèi)容的開發(fā)設(shè)計,使我對開發(fā)系統(tǒng)的整個流程有了初步的了解,也把自己在課下復(fù)習(xí)的內(nèi)容及上課學(xué)習(xí)的有關(guān)內(nèi)容有了系統(tǒng)的理解,通過這次課程設(shè)計,已經(jīng)有了深刻的理解。希望我從今以后自 己能夠多學(xué)習(xí)有關(guān)知識,為以后的畢業(yè)設(shè)計以及工作做好充分的準(zhǔn)備。這次課程設(shè)計終于順利完

11、成了,在設(shè)計中遇到了很多編程問題,最后在王蓉老師的辛勤指導(dǎo)下,終于解決了很多問題。也得到鍛煉:(1) 能根據(jù)實際問題的具體情況,結(jié)合所學(xué)的知識,正確分析問題,并且能夠設(shè)計出解決問題的有效算法和程序。(2) 提高對程序的設(shè)計和調(diào)試的能力。我們通過上機的操作,驗證自己設(shè)計的算法和程序的正確性。學(xué)會有效的利用一些基本的調(diào)試方法,能夠及時找出程序代碼中的錯誤,并且加以正確的改正,進一步提高自己對程序設(shè)計的水平。同時,在老師身上我學(xué)到了很多實用的知識,在次我表示感謝!同時,對給過我?guī)椭乃械耐瑢W(xué)和老師再次表示忠心的感謝!參考文獻1譚浩強.C程序設(shè)計(第三版) .北京:清華大學(xué)出版社,2005. 2譚浩

12、強.C程序設(shè)計題解與上機指導(dǎo)(第三版) .北京:清華大學(xué)出版社,2005.3劉玉英,張怡芳.C+實驗指導(dǎo)與課程設(shè)計.人民郵電出版社,20074 匡松吳衛(wèi)華. C+程序設(shè)計試題匯編. 中國鐵道出版社. 2009 5 劉燕君,劉振安,張一葉. C+程序設(shè)計課程設(shè)計 第2版. 機械工業(yè)出版社. 6姜靈芝 余健.C+面向?qū)ο蟪绦蛟O(shè)計案例精編. 北京:清華大學(xué)出版社,20087郭翠英. C+面向?qū)ο蟪绦蛟O(shè)計案例精編. 北京:中國水力水電出版社,2004 附 錄附錄1 源程序清單#include iostream#include string#include iomanipusing namespace

13、std;int monthdays12=31,28,31,30,31,30,31,31,30,31,30,31;string weekday7=星期天,星期一,星期二,星期三,星期四,星期五,星期六;string monthname12=January,February,March,April,May,June,July,August,September,October,November,December;string tiangan10=甲,乙,丙,丁,戊,己,庚,辛,壬,癸;string dizhi12=子,丑,寅,卯,辰,巳,午,未,申,酉,戌,亥;string shengxiao12=

14、鼠,牛,虎,兔,龍,蛇,馬,羊,猴,雞,狗,豬;void showcalendar(int f);void showpermoncal(int mon,int monthweek,int flag);int main() int f; cout請選擇操作:endl1.查詢某年日歷;endl2.查詢某年某月的日歷;endl3.查詢某天是星期幾f; showcalendar(f); return 0;void showcalendar(int f) int year,month,day; int flag=0,mon=1; int monthweek,week; int totaldays; in

15、t T,D,S;/天干,地支,生肖 coutyear; totaldays=(year-1)*365+(year-1)/4+(year-1)/400-(year-1)/100; week=(totaldays+1)%7; monthweek=week; T=(year+6)%10; D=(year+8)%12; S=D; if(year%4=0&year%100!=0)|(year%400=0) flag=1; coutendl *year年*endlendl; cout shengxiaoS年endl; cout 農(nóng)歷tianganTdizhiD年endl=2) coutmonth; if(

16、f=3) coutday; while(mon2&flag) totaldays+; totaldays=totaldays+day-1; week=(totaldays+1)%7; coutyear年month月day日 weekdayweekendl; return; while(mon=12) if(mon=month) showpermoncal(mon,monthweek,flag); break; if(mon=2&flag) monthweek+; monthweek=(monthweek+monthdaysmon+-1)%7; return; while(mon=12) sho

17、wpermoncal(mon,monthweek,flag); if(mon=2&flag) monthweek+; monthweek=(monthweek+monthdaysmon+-1)%7; void showpermoncal(int mon,int monthweek,int flag) coutmonthnamemon-1endl; cout*endl; coutSun Mon Tue Wen Tur Fri Satendl; for(int i=0;imonthweek;i+) cout ; for(int j=0;jmonthdaysmon-1;j+) coutsetw(2)

18、j+1 ; if(j+1+monthweek)%7=0) coutendl; if(mon=2&flag) cout29; coutendlendl;/ 定義控制臺應(yīng)用程序的入口點。/#include #include windows.h#include #include #include conio.husing namespace std;class Timeprivate:int year,month,day;static int month_days_R12;/定義閏年時每個月的天數(shù)static int month_days_NR12;/定義非閏年時每個月的天數(shù)public:stati

19、c string week7;/定義星期,從星期六開始void Search_date(string y,string m,string d);/輸入要查找的日期bool Wether_RN();/判斷是否為閏年,返回true or falseint Wether_RN(int y);/判斷是否為閏年,返回或int Define_Week();/確定特定日期的星期數(shù)void local_time();/獲取系統(tǒng)時間void print_Calendar();/打印詳細日期void change_day();/通過adws鍵改變?nèi)掌?以及f來調(diào)用Search_date()函數(shù);int Time:

20、month_days_R12=31,29,31,30,31,30,31,31,30,31,30,31;/定義閏年時每個月份的天數(shù)int Time:month_days_NR12=31,28,31,30,31,30,31,31,30,31,30,31;/定義非閏年時每個月份的天數(shù)/定義星期,由于時間原點年月日為星期六,個定義第一天為星期六string Time:week7=星期六,星期天,星期一,星期二,星期三,星期四,星期五;void Time:change_day()char key;string y,m,d;while(key=_getch()!=q)/當(dāng)按下q時,退出程序switch(k

21、ey)case w:/日期向前推移天if(day7)day-=7;else/當(dāng)天數(shù)小于時,按下w后,月份數(shù)減if(month1)month-;day=day-7+(Wether_RN()?month_days_Rmonth-1:month_days_NRmonth-1);Else/如果月份數(shù)為時,年分?jǐn)?shù)減,并將月份數(shù)置為if(year=1&day=7)/如果日期已經(jīng)到達年月日至日,則彈出警告,不改變?nèi)諝v顯示MessageBox(NULL, (日歷已到達底端,不能在向前), (警告),MB_OK);break;year-;month=12;day=day+24;break;case s:/日期向

22、后推移天if(day=(Wether_RN()?month_days_Rmonth-1:month_days_NRmonth-1)-7)day+=7;else if(month=3000&day24)/如果年份加后大于,則彈出警告,不改變?nèi)掌贛essageBox(NULL, (日歷已到達頂端,不能再向后), (警告),MB_OK);break;year+;month=1;day=day-24;break;case a:/日期向前推移天if(day1)day-=1;else if(month1)month-;/先判斷是否為閏年,在根據(jù)月份獲得天數(shù)day=day-1+(Wether_RN()?mo

23、nth_days_Rmonth-1:month_days_NRmonth-1);elseif(year=1&month=1&day=1)/如果日期已經(jīng)到達年月日,則彈出警告,不改變?nèi)諝v顯示MessageBox(NULL, (日歷已到達底端,不能再向前),(警告),MB_OK);break;year-;month=12;day=day+30;break;case d:/日期向后推移天if(day=(Wether_RN()?month_days_Rmonth-1:month_days_NRmonth-1)-1)day+=1;else if(month=3000&day30)MessageBox(N

24、ULL,(日歷已到達頂端,不能在向后),(警告),MB_OK);break;year+;month=1;day=day-30;break;case f:Search_date(y,m,d);/調(diào)用Seatch_date函數(shù),對年月日進行重置break;system(cls);print_Calendar();bool Time:Wether_RN()/判斷是否為閏年,返回true or falseif(year%400=0)|(year%4=0&year%100!=0)return true;else return false;int Time:Wether_RN(int y)/判斷是否為閏年

25、,返回或if(y%400=0)|(y%4=0&y%100!=0)return 366;else return 365;void Time:Search_date(string y,string m,string d)/現(xiàn)將輸入的年月日定義為string類型,再通過atoi函數(shù)轉(zhuǎn)換為intsystem(cls);cout請勿輸入多組數(shù)據(jù),如:2010 6 1 .輸入如上數(shù)據(jù)將視為.endlendl;cout請輸入要選定的年份(13000): ;getline(cin,y);for(year=atoi(y.c_str();year3000;)/如果年份小于,則報錯cout年份輸入錯誤!請輸入年至年

26、.endl;getline(cin,y);year=atoi(y.c_str();cout請輸入要選定的月份: ;getline(cin,m);for(month=atoi(m.c_str();month12;)/如果月份小于或大于,則報錯cout月份輸入錯誤!請重新輸入月份.endl;getline(cin,m);month=atoi(m.c_str();cout請輸入要選定的日期: ;getline(cin,d);for(day=atoi(d.c_str();(Wether_RN()&(daymonth_days_Rmonth-1)|(!Wether_RN()&(daymonth_days

27、_NRmonth-1);)/首先判斷輸入的年份是否為閏年,在根據(jù)輸入的月份判斷輸入的日期是否正確if(Wether_RN()&(daymonth_days_Rmonth-1)cout日期輸入錯誤!請重新輸入日期.endl;getline(cin,d);day=atoi(d.c_str();if(!Wether_RN()&(daymonth_days_NRmonth-1)cout日期輸入錯誤!請重新輸入日期.=2000)temp=day-1;/第一部分,即日for(i=2000;iyear;i+)temp+=Wether_RN(i);/第二部分,即年,先判斷是否為年,然后逐年相加/第三部分,即月

28、,首先判斷是否為閏年,然后逐月相加if(Wether_RN()for(i=0;imonth-1;i+)temp+=month_days_Ri;else for(i=0;imonth-1;i+)temp+=month_days_NRi;return temp%7;else/如果年份在年之前for(i=year+1;i2000;i+)temp+=Wether_RN(i);/第一部分,改年份的下一年至年的天數(shù)/第二部分,判斷閏年,逐月相加,再加上該日到月末的天數(shù)if(Wether_RN()for(i=month;i12;i+)temp+=month_days_Ri;int t=month_days_

29、Rmonth-1-day+1;temp+=t;elsefor(i=month;i12;i+)temp+=month_days_NRi;int t=month_days_NRmonth-1-day+1;temp+=t;/所得天數(shù)對求余,當(dāng)余數(shù)為時,即為星期六,余數(shù)非零,則根據(jù)week7判斷星期數(shù)if(temp%7=0)return 0;else return (7-temp%7);void Time:local_time()/獲取系統(tǒng)時間SYSTEMTIME temp;GetSystemTime(&temp);year=temp.wYear;month=temp.wMonth;day=temp.

30、wDay;void Time:print_Calendar()/打印出這個月的日歷,并將今天輸出為紅色int calendar76;int w,wc=0,dt=1,yeart=year,week_t;week_t=(Define_Week()-(day-1)%7+7)%7;/根據(jù)該日的星期數(shù)來獲得該月號的星期數(shù)SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_INTENSITY |FOREGROUND_RED | FOREGROUND_GREEN | FOREGROUND_BLUE);/使輸出日期的顏色變回白色

31、coutendlendl year年month月day日weekDefine_Week();if(Wether_RN()cout 閏年endlendl;else cout 非閏年endlendl;cout星期天星期一星期二星期三星期四星期五星期六endl;/如果該月的號不是星期天for(w=0;w(week_t+6)%7;w+)cout ;/輸出空格,直到該月第一天for(w=(week_t+6)%7;w7;w+)/將第一行的剩余天數(shù)輸出,每一行為天calendarwwc=dt+;/通過dt記錄天數(shù)if(dt-1)=day)SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_INTENSITY|FOREGROUN

溫馨提示

  • 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)容負責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

最新文檔

評論

0/150

提交評論