課程設計報告日歷管理器_第1頁
課程設計報告日歷管理器_第2頁
課程設計報告日歷管理器_第3頁
課程設計報告日歷管理器_第4頁
課程設計報告日歷管理器_第5頁
已閱讀5頁,還剩26頁未讀 繼續免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

1、c+課程設計報告(2011)c+課程設計報告( 2010 - 2011 年度第 二 學期)日歷管理器的設計與實現專業計算機科學與技術學生姓名班級學號指導教師完成日期2011年 7月 日1目 錄1 概 述11.1 課程設計目的11.2 課程設計內容12 系統需求分析12.1 系統目標12.2 主體功能12.3 開發環境23 系統概要設計23.1 系統的功能模塊劃分23.2 系統流程圖34系統詳細設計34.1系統主界面設計34.2 計算當前日期模塊設計54.3年份跳轉模塊設計54.4 界面修改模塊模塊設計75 測試75.1 測試方案75.2 測試結果76 小結8參考文獻10附 錄11附錄1 源程序

2、清單113日歷管理器的設計與實現1 概 述 1.1 課程設計目的1、鞏固并加深學生對c+語言程序設計知識的理解;2、培養學生面向對象的程序設計思想,使學生認識面向過程和面向對象兩種設計方法的區別;3、進一步掌握和應用vc+ 6.0集成開發環境;4、提高運用c+語言解決實際問題的能力; 5、初步掌握開發小型實用軟件的基本方法,能獨立設計、實現具有實際功能的小系統;6、掌握書寫程序設計開發文檔的能力(書寫課程設計實驗報告)。1.2 課程設計內容課程名稱:日歷管理器說明:模仿現實生活中的掛歷,顯示日歷。要求:1)當前頁以系統當前日期的月份為準,顯示當前月的每一天(顯示出日及對應的星期幾),當系統日期

3、變到下一月時,系統自動翻頁到下一月。2)可以實現日期的加法運算,即在日期相加的菜單選項中增加日期加天數,結果為新日期。3)根據用戶輸入的年份,自動產生每個月的日期列表。包括輸入非法數據(如負數、日期超過31天等情況)的識別顯示功能。4)自定義顯示日歷的形式,如顯示星期及英文形式的月份的功能 2 系統需求分析2.1 系統目標能模仿現實生活中的掛歷,顯示當前日期,且能實現日期的跳轉來方便用戶。2.2 主體功能1)當前頁以系統當前日期的月份為準,顯示當前月的每一天(顯示出日及對應的星期幾),當系統日期變到下一月時,系統自動翻頁到下一月。2)可以實現日期的加法運算,即在日期相加的菜單選項中增加日期加天

4、數,結果為新日期。3)根據用戶輸入的年份,自動產生每個月的日期列表。包括輸入非法數據(如負數、日期超過31天等情況)的識別顯示功能。2.3 開發環境visual c+ 6.03 系統概要設計3.1 系統的功能模塊劃分此次系統的功能模塊主要分為:當前日期計算模塊、日期跳轉模塊和界面修改模塊。當前日期計算模塊:計算系統當前日期,并第一時間顯示出來,方便用戶能第一時間了解當前日期。日期跳轉模塊:主要針對用戶想查看其他年份的日期情況設計,用戶在想查看某個年份日期的時候只需操作一下,輸入想查看的年份,該模塊便會位用戶顯示出該年的日期情況。界面修改模塊:現代產品功能豐富,因為用戶的需求很多,該模塊旨在提供

5、給用戶更多的選擇空間。該模塊在內部提空多種界面顏色,用戶只需在需要時執行操作便可更換界面上某個位置顯示的顏色,大大增加軟件的趣味性。日歷管理系統當前日期計算模塊日期跳轉模塊界面修改模塊圖 3-1 系統功能模塊圖3.2 系統流程圖開始計算當前日期是否要跳轉日期結束確定是否為合法輸入是否是否輸出顯示本年日歷輸入目的年份輸出顯示目的年份日歷圖3-2 系統流程圖4系統詳細設計4.1系統主界面設計在該系統中我使用了mfc對主界面進行編輯,主界面最顯眼的是日歷部分,在日歷上方是菜單欄,可以提供一些操作的按鈕,實現該系統的多元功能。實際效果如下圖所示:圖4-1 菜單欄效果圖圖4-2 系統主界面圖該系統中還會

6、出現一些輸入框和提示框,這些框如下圖:圖4-3 處于編輯模式下的輸入框在這個編輯輸入框中的顯示“enter year!”的部件是一個標簽,起提示作用;寫著“編輯”二字的框是個文本框,用來獲取用戶輸入的年份數據;寫著“ok”和“cancle”的兩個部件分別是兩個功能按鈕,在編碼完成后即可用來實現操作。圖4-4 編輯模式下的信息提示框4.2 計算當前日期模塊設計該系統在這個模塊中建立了ccalender類,并建立m_cnday、m_cnyear、m_nuseryear函數來調用系統當前日期以實現該模塊功能。該系統還建立了dialogtime類,在這個類中系統使用了switch語句,建立了m_szd

7、ays7數組來對日期進行從周日到周六的排序,以此實現顯示出的日歷和我們生活中的日歷類似。要實現對日期的排列,首先需要對年份進行閏年的判斷,其判斷流程圖如下圖:開始獲取年份是否為世紀年能否被4整除能否被100整除能否被400整除是是否閏年否是平年結束否否是圖4-3 判斷閏年流程圖4.3年份跳轉模塊設計該系統在這個模塊中建立了yeardialog類,在類中通過使用ddx_text、ddv_minmaxuint函數、調用m_nuseryear、m_cnyear等函數來實現日期跳轉到用戶輸入的年份。要正確跳轉到目的年份首先需要確定目的年的第一天的日期,以此類推可以推出全年的日期。流程圖如下:x=0x=

8、6星期六開始w=y+y/4+c/4-2c+26(m+1)/10+d-1x=(w/2)后取余的余數x=1x=2x=3x=4x=5星期日星期一星期二星期三星期四星期五結束是否是否是否是否是否是否是分別輸入y=年份 c=世紀-1 m=月 w=星期圖 4-4 判斷目的年份日期流程圖4.4 界面修改模塊模塊設計該系統在這個模塊中在ccalender類里建立了m_crwindow、m_crmonths、m_crweekdays、m_crdays、m_crtoday、m_crtodaysbox多個函數,各函數代表的是相關界面部分顏色信息,系統首先給界面函數設置了初始值,又建立了getwindowcolor(

9、)、getmonthscolor()、getweekdayscolor()、getdayscolor()、gettodaycolor()、gettodaysboxcolor()函數來獲取用戶操作后輸入的值,以此改變界面多個部分顏色,從而達到該模塊能修改界面的功能。5 測試5.1 測試方案運行該系統:1、測試系統能否顯示當前日期;2、操作相應按鈕,觀察能否準確跳轉到輸入的年份日歷表,且當輸入數據為非法數據時能否出現提醒;3、能否更改界面顏色。5.2 測試結果1、能準確顯示當前日期,且以粉色突出顯示;圖5-1 當前日期顯示圖2、能跳轉到用戶輸入的年份,且當輸入非法數據時提醒;圖5-2 年份跳轉提示

10、窗口圖圖5-3 非法數據提示框圖3、對于窗口、月份、星期、當前日期等部分,用戶都可以實現對其顏色的更改操作。圖5-4 界面顏色更改效果圖根據測試情況,以上測試均能有效實現功能,測試成功。6 小結為期兩周的課程設計終于結束了。在這次的課程設計中我不但提升了自己查閱資料的能力,也更加深入的了解和熟悉了vc+軟件的使用和c+這門課程。事實上去年我們也做過一次類似的課程設計,那次的課程設計我以為是比較難的了,那次實驗前的準備工作就耗費了我大量的時間和精力,沒想到這次試驗實驗課題下來的時候,我才認識到我們的課程設計會越來越多,也會越來越難,這是我們作為程序設計專業的學生必須去承受的,因為只有實踐操作才能

11、不斷提升我們的能力。我也認識到了原來自己學習到的c+語言知識是那么片面,多么欠缺,這當然也提升了我對專業知識更濃厚的興趣。在這次課程設計中我遇到的問題也是不斷而來,首先是源程序中的錯誤導致程序無法運行,都是自己輸入程序時不小心導致的,這花費了我大量的時間去核對源代碼,都是些標點的錯誤使用和大小寫的不區分,這給了我一次小小的教訓;其次是功能的欠缺和不完善導致軟件功能的不理想,這直接影響到了這次課程設計的質量,為了完善功能,我不斷查閱資料并求助同學,最終將問題妥善解決。忙碌的課程設計就快結束了,這幾天的忙碌也讓我在放假前體驗了學習的緊張氛圍,雖然自己的成果并沒有讓我感到滿意,但起碼讓我對自己有了一

12、定的認識,也敲響了我的警鐘,提醒我要重視自己的專業課,不要懈怠,同時我也了解到其他同學的幫助對自己的重要性。我以后我要更加認真的學習專業課程和做好課程設計,以認真的態度去完成自己的學業。29參考文獻1譚浩強.c程序設計(第三版)m.北京:清華大學出版社,2005. 2譚浩強.c程序設計題解與上機指導(第三版)m.北京:清華大學出版社,2005.3陳清華,朱紅.visual c+程序設計案例精選與編程指導m.南京:東南大學出版社,2003.4董士海.圖像格式編程指南m.北京:清華大學出版社,1994.7張岳新.visual c+程序設計基礎m.蘇州:蘇州大學出版社,2000.8陸潤民.c語言繪圖

13、教程m.北京:清華大學出版社,1996.附 錄附錄1 源程序清單#include<afxwin.h>#include"calender.h"int ccalender:m_cnday = 3;/wednesdayint ccalender:m_cnyear = 2003;/current yearint ccalender:m_nuseryear = 2003;colorref ccalender:m_crwindow = rgb(255,255,255);colorref ccalender:m_crmonths =rgb(0 ,0 ,255);colorre

14、f ccalender:m_crweekdays = rgb(0 ,255,0 );colorref ccalender:m_crdays = rgb(255,0 ,0 );colorref ccalender:m_crtoday = rgb(255,0 ,0 );colorref ccalender:m_crtodaysbox = rgb(255,255,255);/-ccalender:ccalender()m_nuseryear = m_cnyear;/-void ccalender:setyear(int nyear=2003)int ndiff = 0;int nleapyear =

15、 0;int i = 0;m_nuseryear = nyear;m_cnday = 3;/wednesday 1st jan 2003if( m_cnyear > nyear )ndiff = m_cnyear - nyear;for( i=nyear; i<m_cnyear; i+ )if( i%4 = 0 )nleapyear+;ndiff += nleapyear;ndiff = ndiff % 7;for( i=ndiff; i>=1; i- )m_cnday-;if( m_cnday<0 )m_cnday = 6;else if( m_cnyear <

16、 nyear )ndiff = nyear - m_cnyear;for( i=m_cnyear; i<nyear; i+ )if( i%4 = 0 )nleapyear+;ndiff += nleapyear;ndiff = ndiff % 7;for( i=ndiff; i>=1; i- )m_cnday+;if( m_cnday >= 7 )m_cnday = 0;/-int ccalender:getyear()return m_nuseryear;/-void ccalender:showday(cdc *d)int nx = 5;int ny = 50;int i

17、,j,k;i = j = k = 0;cstring m_szdays7;m_szdays0 = "sun"m_szdays1 = "mon"m_szdays2 = "tue"m_szdays3 = "wed"m_szdays4 = "thu"m_szdays5 = "fri"m_szdays6 = "sat"d->setbkmode(transparent);d->settextcolor(m_crdays);for( i=0; i<4

18、; i+ )for( j=0; j<3; j+ )for( k=0; k<7; k+ )d->textout(nx,ny,m_szdaysk,3);nx += 35;nx += 23;nx = 5;ny += 185;/-void ccalender:showmonth(cdc *d)cfont myfont;myfont.createfont(20,10,0,0,0,0,0,0,0,0,0,0,0,"arial");d->selectobject(&myfont);d->setbkmode(transparent);d->set

19、textcolor(m_crmonths);d->textout(85 ,22 ,"january");d->textout(352,22 ,"febuary");d->textout(632,22 ,"march");d->textout(103,208,"april");d->textout(370,208,"may");d->textout(635,208,"june");d->textout(103,392,"jul

20、y");d->textout(360,392,"august");d->textout(615,392,"september");d->textout(85 ,578,"octuber");d->textout(345,578,"november");d->textout(615,578,"december");/-void ccalender:showcalender(cdc *d)int i,j,k,count;int x = 5;int y = 82

21、;int curday;int curmonth;int month;char str3;int m_nmonths12;ctime t = ctime:getcurrenttime();curday = t.getday();curmonth = t.getmonth();m_nmonths0 = 31;m_nmonths1 = ( m_nuseryear%4 = 0 )? 29 : 28;m_nmonths2 = 31;m_nmonths3 = 30;m_nmonths4 = 31;m_nmonths5 = 30;m_nmonths6 = 31;m_nmonths7 = 31;m_nmon

22、ths8 = 30;m_nmonths9 = 31;m_nmonths10 = 30;m_nmonths11 = 31;count = i = j = k = 0;d->setbkmode(transparent);month=1;for(j=0; j<4; j+ )for( k=0; k<3; k+ )if ( j=0 && k=0 )x = 5; y = 82;else if( j=0 && k=1 )x = 270; y = 82;else if( j=0 && k=2 )x = 540; y = 82;else if(

23、j=1 && k=0 )x = 5; y = 265;else if( j=1 && k=1 )x = 270; y = 265;else if( j=1 && k=2 )x = 540; y = 265;else if( j=2 && k=0 )x = 5; y = 448;else if( j=2 && k=1 )x = 270; y = 448;else if( j=2 && k=2 )x = 540; y = 448;else if( j=3 && k=0 )x = 5; y

24、 = 631;else if( j=3 && k=1 )x = 270; y = 631;else if( j=3 && k=2 )x = 540; y = 631;x += m_cnday*35;for( i=1; i<=m_nmonthscount; i+ )if( curday = i && curmonth = month )d->settextcolor( m_crtoday );sprintf(str,"%3d",i);d->textout(x,y,str,strlen(str);elsed-&g

25、t;settextcolor( (m_cnday=0)? m_crweekdays : rgb(0,0,0);sprintf(str,"%3d",i);d->textout(x,y,str,strlen(str);x+=35;m_cnday+;if( m_cnday>=7 )m_cnday = 0;if( k=0 ) x=5;if( k=1 ) x=270;if( k=2 ) x=540;y+=20;count+;month+;/-void ccalender:setdayscolor(colorref crcolor)m_crdays = crcolor;/-

26、void ccalender:setmonthscolor(colorref crcolor)m_crmonths = crcolor;/-void ccalender:settodaycolor(colorref crcolor)m_crtoday = crcolor;/-void ccalender:settodaysboxcolor(colorref crcolor)m_crtodaysbox = crcolor;/-void ccalender:setwindowcolor(colorref crcolor)m_crwindow = crcolor;/-void ccalender:s

27、etweekdayscolor(colorref crcolor)m_crweekdays = crcolor;/-colorref ccalender:getdayscolor()return m_crdays;/-colorref ccalender:getmonthscolor()return m_crmonths;/-colorref ccalender:gettodaycolor()return m_crtoday;/-colorref ccalender:gettodaysboxcolor()return m_crtodaysbox;/-colorref ccalender:get

28、windowcolor()return m_crwindow;/-colorref ccalender:getweekdayscolor()return m_crweekdays;/-#ifndef calender_h#define calender_hclass ccalenderprivate:static int m_cnday;static int m_cnyear;static int m_nuseryear;static colorref m_crwindow;static colorref m_crmonths;static colorref m_crweekdays;stat

29、ic colorref m_crdays;static colorref m_crtoday;static colorref m_crtodaysbox;public:ccalender();void setyear(int nyear);int getyear();void showday(cdc *d);void showmonth(cdc *d);void showcalender(cdc *d);void setwindowcolor(colorref crcolor);void setmonthscolor(colorref crcolor);void setweekdayscolo

30、r(colorref crcolor);void setdayscolor(colorref crcolor);void settodaycolor(colorref crcolor);void settodaysboxcolor(colorref crcolor);colorref getwindowcolor();colorref getmonthscolor();colorref getweekdayscolor();colorref getdayscolor();colorref gettodaycolor();colorref gettodaysboxcolor();#endif#i

31、nclude "resource.h"class dialogtime:public cdialogpublic:dialogtime(int n):cdialog(n)bool oninitdialog()return cdialog:oninitdialog();void dodataexchange(cdataexchange *pdx)cdialog:dodataexchange(pdx);cedit *e = (cedit*)getdlgitem(idc_edit1);char sday10;char smonth10;char str50;int n;ctime

32、 t = ctime:getcurrenttime();n = t.getdayofweek();switch(n)case 1:sprintf(sday,"%s","sunday"); break;case 2: sprintf(sday,"%s","monday"); break; case 3: sprintf(sday,"%s","tuesday"); break;case 4: sprintf(sday,"%s","wednesday&

33、quot;);break;case 5: sprintf(sday,"%s","thursay"); break; case 6: sprintf(sday,"%s","friday"); break;case 7: sprintf(sday,"%s","saturday"); break;n = t.getmonth();switch(n)case 1 : sprintf(smonth,"%s","january"); break;c

34、ase 2 : sprintf(smonth,"%s","febuary"); break; case 3 : sprintf(smonth,"%s","march"); break;case 4 : sprintf(smonth,"%s","april"); break;case 5 : sprintf(smonth,"%s","may"); break; case 6 : sprintf(smonth,"%s",

35、"june"); break;case 7 : sprintf(smonth,"%s","july"); break;case 8 : sprintf(smonth,"%s","august"); break;case 9 : sprintf(smonth,"%s","september"); break; case 10: sprintf(smonth,"%s","octuber"); break;case 11:

36、 sprintf(smonth,"%s","november"); break;case 12: sprintf(smonth,"%s","december"); break;sprintf(str,"%s, %s %d,%d %d:%d:%d",sday,smonth,t.getday(),t.getyear(),t.gethour(),t.getminute(),t.getsecond(),t.getsecond();cstring today = str;ddx_text(pdx,idc_

37、edit1,today);#include <afxwin.h>#include "mydoc.h"#include "myframe.h"#include "myview.h"#include "myapp.h"#include "calender.h"#include "resource.h"myapp a ;bool myapp:initinstance( )cruntimeclass *d, *f, *v ;d = runtime_class ( mydo

38、c ) ;f = runtime_class ( myframe ) ;v = runtime_class ( myview ) ;csingledoctemplate *t ;t = new csingledoctemplate ( idr_menu1, d, f, v ) ;adddoctemplate ( t ) ;ccommandlineinfo c ;parsecommandline ( c ) ;if ( !processshellcommand ( c ) )return false ;return true;class myapp : public cwinapppublic

39、:bool initinstance( ) ; ;#include "resource.h"class mydialog:public cdialogpublic:mydialog(int n):cdialog(n)/*/;#include <afxwin.h>#include <afxdlgs.h>#include "mydoc.h"#include "mydialog.h"#include "yeardialog.h"#include "dialogtime.h"#i

40、nclude "resource.h"implement_dyncreate ( mydoc, cdocument ) begin_message_map(mydoc,cdocument)on_command_range(40005,40009,oncolor)on_command_range(40005,40010,ontodaybox)on_command(40011,restoredefault)on_command(40001,onprevious)on_command(40002,onnext)on_command(40003,oncurrent)on_comma

41、nd(40004,onshow)on_command(40012,onabout)end_message_map()void mydoc:oncolor(int id)ccolordialog cd;ccalender cal;if( cd.domodal() = idok )colorref crcolor = cd.getcolor();switch(id)case 40005:cal.setwindowcolor(crcolor);break;case 40006:cal.setmonthscolor(crcolor);break;case 40007:cal.setweekdaysco

42、lor(crcolor);break;case 40008:cal.setdayscolor(crcolor);break;case 40009:cal.settodaycolor(crcolor);break;case 40010:cal.settodaysboxcolor(crcolor);break;updateallviews(0);void mydoc:restoredefault()ccalender cal;cal.setwindowcolor(rgb(255,255,255);cal.setmonthscolor(rgb(0 ,0 ,255);cal.setweekdaysco

43、lor(rgb(0 ,255,0 );cal.setdayscolor(rgb(255,0 ,0 );cal.settodaycolor(rgb(255,0 ,0 );cal.settodaysboxcolor(rgb(255,255,255);updateallviews(0);void mydoc:onprevious()cal.setyear(cal.getyear()-1);updateallviews(0);void mydoc:onnext()cal.setyear(cal.getyear()+1);updateallviews(0);void mydoc:oncurrent()c

44、al.setyear(2003);updateallviews(0);void mydoc:onabout()mydialog d(idd_dialog1);d.domodal();void mydoc:onshow()yeardialog d(idd_dialog2);if( d.domodal() = idok )cal.setyear(d.getyear();updateallviews(0);void mydoc:ontodaybox()dialogtime d(idd_dialog3);d.domodal();#include"calender.h"class m

45、ydoc : public cdocumentdeclare_dyncreate ( mydoc ) private:ccalender cal;public:declare_message_map()void oncolor(int id);void restoredefault();void onprevious();void onnext();void oncurrent();void onshow();void onabout();void ontodaybox(); ;#include <afxwin.h>#include "myframe.h"imp

46、lement_dyncreate ( myframe, cframewnd )class myframe : public cframewnd declare_dyncreate ( myframe ) ;#include <afxwin.h>#include <afxdlgs.h>#include "mydoc.h"#include "myview.h"#include "resource.h"implement_dyncreate ( myview, cscrollview ) begin_message_

47、map ( myview, cscrollview )on_wm_create( )on_wm_size( )on_wm_erasebkgnd( )end_message_map( )bool myview:precreatewindow ( createstruct& cs )cs.style |= ws_clipchildren | ws_clipsiblings ;return cview:precreatewindow ( cs ) ;void myview:ondraw ( cdc *p )char str20;mydoc *pdoc = (mydoc*) getdocume

48、nt();cal.setyear(cal.getyear();cal.showday(p);cal.showcalender(p);cal.showmonth(p);sprintf(str,"calender %d",cal.getyear();pdoc->settitle(str);void myview:onsize(uint type,int cx,int cy)setscrollsizes(mm_text,csize(800,780);void myview:onerasebkgnd(cdc *pdc)crect r;cbrush mybrush;getclientrect(&r);mybrush.createsolidbrush(cal.getwindowcolor();pdc->selectobject(&mybrush);pdc-&

溫馨提示

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

評論

0/150

提交評論