日历管理器.docx

上传人:b****5 文档编号:8567865 上传时间:2023-01-31 格式:DOCX 页数:15 大小:90.63KB
下载 相关 举报
日历管理器.docx_第1页
第1页 / 共15页
日历管理器.docx_第2页
第2页 / 共15页
日历管理器.docx_第3页
第3页 / 共15页
日历管理器.docx_第4页
第4页 / 共15页
日历管理器.docx_第5页
第5页 / 共15页
点击查看更多>>
下载资源
资源描述

日历管理器.docx

《日历管理器.docx》由会员分享,可在线阅读,更多相关《日历管理器.docx(15页珍藏版)》请在冰豆网上搜索。

日历管理器.docx

日历管理器

 

C++程序设计课程设计报告

(2011--2012年度第2学期)

日历管理器的开发的设计

目录

1概述1

1.1课程设计目的1

1.2课程设计内容1

2系统需求分析1

2.1系统目标1

2.2主体功能1

2.3开发环境1

3系统概要设计1

3.1系统的功能模块划分1

3.2系统流程图2

4系统详细设计2

4.1年份跳转模块设计2

5测试5

5.1测试方案5

6小结7

参考文献8

附录9

附录1日历管理器源程序清单9

日历管理软件的设计

1概述

1.1课程设计目的

1、巩固并加深对C++语言程序设计知识的理解;

2、培养学生面向对象的程序设计思想,使学生认识面向过程和面向对象两种设计方法的区别;

3、进一步掌握和应用VC++6.0集成开发环境;

4、提高运用C++语言解决实际问题的能力;

5、初步掌握开发小型实用软件的基本方法,能独立设计,实现基本的MIS系统

6、了解高级程序设计语言的结构,掌握基本的分析问题和利用计算机求解问题的能力;

7、掌握调试程序的一般方法

1.2课程设计内容

课程名称:

日历管理器的开发

说明:

显示日历

要求:

1)根据用户输入的年份,自动产生每个月的日期列表;

2)自定义显示日历的形式。

2.系统需求分析

2.1系统目标

建立电子日历,可以自主生成新的日历,方便用户。

2.2主体功能

1.根据用户输入的年份,自动产生每个月的日期列表;

2.自定义显示日历的形式

2.3开发环境

①开发工具VisualC++6.0

②设计工具Office2003

3系统概要设计

3.1系统的功能模块划分

日历管理器系统设计的主要模块分为:

年份跳转模块设计

年份跳转模块:

根据用户自己输入的年份,该模块为用户显示该年的日历!

 

 

3.2系统流程图

4系统详细设计

4.1年份跳转模块设计

设计思路:

使用MFC编辑主界面、基本对话框、组框(可调整1-10000这间的年份)、静态文本框,默认年份为系统时间,默认一个已知的日期,并已知该日的星期,通过计算,得出所求目的年份所有日期的星期。

主要成员变量及其意义:

①Charstr[7][3];//从一到日的字符

inta,b,c,d,e,f,//a设置年份差周期为4的天数,b设置周期为100的年份差的天数,c为周期为400的年份差的天数,d为已知年份一月一号的星期,e为所求年份一月一日到所求月份一月一日的天数差,f为所求年份到已知年份之间的天数差

在C1111Dlg类的构造函数中添加以下代码:

strcpy(str[0],"一");

strcpy(str[1],"二");

strcpy(str[2],"三");

strcpy(str[3],"四");

strcpy(str[4],"五");

strcpy(str[5],"六");

strcpy(str[6],"日");

a=4*365+1;a=a%7;

b=a*25-1;b=b%7;

c=b*4+1;c=c%7;

d=0;

②在CMY1111Dlg类的初始化函数OnInitDialog中添加以下代码:

CComboBox*pCboxyear=(CComboBox*)GetDlgItem(IDC_COMBO1);CStringstr;

pCboxyear->InsertString(0,"请输入年份");

for(inti=1;i<10000;i++)

{

str.Format("%d",i);

pCboxyear->InsertString(i,str);

}

 

③添加消息处理函数

为组合框添加WM_CLOSEUP消息处理函数:

UpdateData();

if(m_nYear!

=0){

RedrawWindow();

f=(m_nYear-1)/400*c+((m_nYear-1)%400)/100*b+(((m_nYear-1)%400)%100)/4*a+(((m_nYear-1)%400)%100)%4*365;

CStatic*pDraw=(CStatic*)GetDlgItem(IDC_STATIC);

CDC*pDC=pDraw->GetDC();

pDC->SetBkMode(TRANSPARENT);

for(inti=0;i<3;i=i++)

{pDC->MoveTo(0,i*118+10);pDC->LineTo(708,i*118+10);}

for(intj=0;j<7;j=j++)

{pDC->MoveTo(j*118,10);pDC->LineTo(j*118,246);}

for(i=0;i<7;i=i++)

for(j=0;j<12;j=j++)

{pDC->TextOut(j%6*118+16*i+5,j/6*118+12,str[i]);

}

for(j=0;j<12;j++)

for(i=0;i<31;i++)

{switch(j+1)

{case1:

e=0;break;

case2:

e=31;break;

case3:

e=31+28;break;

case4:

e=31+28+31;break;

case5:

e=31+28+31+30;break;

case6:

e=31+28+31+30+31;break;

case7:

e=31+28+31+30+31+30;break;

case8:

e=31+28+31+30+31+30+31;break;

case9:

e=31+28+31+30+31+30+31+31;break;

case10:

e=31+28+31+30+31+30+31+31+30;break;

case11:

e=31+28+31+30+31+30+31+31+30+31;break;

case12:

e=31+28+31+30+31+30+31+31+30+31+30;break;}

if(m_nYear%100!

=0&&m_nYear%4==0||m_nYear%400==0)

if(j>1)e=e+1;

CStringstr;

str.Format("%d",i+1);

if(j==1&&!

(m_nYear%100!

=0&&m_nYear%400==0||m_nYear%400==0)&&i>27||j==1&&(m_nYear%100!

=0&&m_nYear%4000==0||m_nYear%400==0)&&i>28||(j==3||j==5||j==8||j==10)&&i>29)

continue;

pDC->TextOut((f+d+e+i)%7*16+j%6*118+5,j/6*118+((i+(f+d+e)%7)/7+1)*16+15,str);

}

}

}

日历上方有菜单栏,提供一些按钮,实际效果如下所示:

 

5测试

5.1测试方案

根据用户输入年份,是否能正确显示出跳转年份的日历表;

5.2测试结果

 

输入年份1:

 

输入年份2000:

 

输入年份:

2012

 

经检验输出无误差

 

6小结

课程设计小结:

通过近俩周的课程设计,我更加深入了解了vc++软件和c++这门课程,修改了范围之外的数值产生日历的BUG,新了解很多函数fomattextoutinsterstring等函数和很多消息处理函数,了解了组框,静态文本框的使用方法

并初步掌握了如何对其编写、调试与运行,把书本上学习到的和老师、同学v的指导运用到实际中去,很好的锻炼自己的学习能力!

由于是第一次在做课程设计,自己对C++了解的不够透彻,再加上时间紧,开始时的思路不是很清晰,我遇到了很多问题!

首先是源程序代码的错误导致程序无法运行,后来仔细检查才发现都是输入时的错误,而且有些是代码混乱,还有些标点的错误使用和字母大小写的问题,这让我得到了一个教训,检查代码浪费了我太多的时间!

但让我对此有了更加系统的了解。

课程设计过程有些坎坷,让我意识到必须要抓紧自己的专业课了!

并让我意识到以后的学习要加强动手能力,多实践,这样才能从各个方面来提高自己的水平。

最后,感谢帮助我完成课程设计的的老师和同学!

参考文献

[1]谭浩强. C程序设计(第三版).北京:

清华大学出版社,2005

[2]谭浩强. C程序设计题解与上机指导(第三版).北京:

清华大学出版社,2005

附录

附录1源程序清单

附录1.1日历管理器模块源程序

控件类型

控件ID

控件名称

成员变量

非默认属性

组合框

IDC_COMBO1

intm_nYear

下拉列表

组框

IDC_STATIC

日历

 

#include"stdafx.h"

#include"1111.h"

#include"1111Dlg.h"

#ifdef_DEBUG

#definenewDEBUG_NEW

#undefTHIS_FILE

staticcharTHIS_FILE[]=__FILE__;

#endifclassCAboutDlg:

publicCDialog

{

public:

CAboutDlg();

enum{IDD=IDD_ABOUTBOX};

protected:

virtualvoidDoDataExchange(CDataExchange*pDX);

protected:

DECLARE_MESSAGE_MAP()

};

CAboutDlg:

:

CAboutDlg():

CDialog(CAboutDlg:

:

IDD)

voidCAboutDlg:

:

DoDataExchange(CDataExchange*pDX)

{

CDialog:

:

DoDataExchange(pDX);

}

BEGIN_MESSAGE_MAP(CAboutDlg,CDialog)

//{{AFX_MSG_MAP(CAboutDlg)

//Nomessagehandlers

//}}AFX_MSG_MAP

END_MESSAGE_MAP()

CMy1111Dlg:

:

CMy1111Dlg(CWnd*pParent/*=NULL*/)

:

CDialog(CMy1111Dlg:

:

IDD,pParent)

{

strcpy(str[0],"一");

strcpy(str[1],"二");

strcpy(str[2],"三");

strcpy(str[3],"四");

strcpy(str[4],"五");

strcpy(str[5],"六");

strcpy(str[6],"日");

a=4*365+1;a=a%7;

b=a*25-1;b=b%7;

c=b*4+1;c=c%7;

d=0;

m_nYear=-1;

m_hIcon=AfxGetApp()->LoadIcon(IDR_MAINFRAME);

}

voidCMy1111Dlg:

:

DoDataExchange(CDataExchange*pDX)

{

CDialog:

:

DoDataExchange(pDX);

DDX_CBIndex(pDX,IDC_COMBO1,m_nYear);

}

BEGIN_MESSAGE_MAP(CMy1111Dlg,CDialog)

ON_WM_SYSCOMMAND()

ON_WM_PAINT()

ON_WM_QUERYDRAGICON()

ON_CBN_CLOSEUP(IDC_COMBO1,OnCloseupCombo1)

END_MESSAGE_MAP()

BOOLCMy1111Dlg:

:

OnInitDialog()

{

CDialog:

:

OnInitDialog();

CComboBox*pCboxyear=(CComboBox*)GetDlgItem(IDC_COMBO1);CStringstr;

pCboxyear->InsertString(0,"请输入年份");

for(inti=1;i<10000;i++)

{

str.Format("%d",i);

pCboxyear->InsertString(i,str);

}

ASSERT((IDM_ABOUTBOX&0xFFF0)==IDM_ABOUTBOX);

ASSERT(IDM_ABOUTBOX<0xF000);

CMenu*pSysMenu=GetSystemMenu(FALSE);

if(pSysMenu!

=NULL)

{

CStringstrAboutMenu;

strAboutMenu.LoadString(IDS_ABOUTBOX);

if(!

strAboutMenu.IsEmpty())

{

pSysMenu->AppendMenu(MF_SEPARATOR);

pSysMenu->AppendMenu(MF_STRING,IDM_ABOUTBOX,strAboutMenu);

}

}

SetIcon(m_hIcon,TRUE);//Setbigicon

SetIcon(m_hIcon,FALSE);//Setsmallicon

returnTRUE;

}

voidCMy1111Dlg:

:

OnSysCommand(UINTnID,LPARAMlParam)

{

if((nID&0xFFF0)==IDM_ABOUTBOX)

{

CAboutDlgdlgAbout;

dlgAbout.DoModal();

}

else

{

CDialog:

:

OnSysCommand(nID,lParam);

}

}

voidCMy1111Dlg:

:

OnPaint()

{

if(IsIconic())

{

CPaintDCdc(this);//devicecontextforpainting

SendMessage(WM_ICONERASEBKGND,(WPARAM)dc.GetSafeHdc(),0);

//Centericoninclientrectangle

intcxIcon=GetSystemMetrics(SM_CXICON);

intcyIcon=GetSystemMetrics(SM_CYICON);

CRectrect;

GetClientRect(&rect);

intx=(rect.Width()-cxIcon+1)/2;

inty=(rect.Height()-cyIcon+1)/2;

//Drawtheicon

dc.DrawIcon(x,y,m_hIcon);

}

else

{

CDialog:

:

OnPaint();

}

}

HCURSORCMy1111Dlg:

:

OnQueryDragIcon()

{

return(HCURSOR)m_hIcon;

}

voidCMy1111Dlg:

:

OnCloseupCombo1()

{

//TODO:

Addyourcontrolnotificationhandlercodehere

UpdateData();

if(m_nYear!

=0){

RedrawWindow();

f=(m_nYear-1)/400*c+((m_nYear-1)%400)/100*b+(((m_nYear-1)%400)%100)/4*a+(((m_nYear-1)%400)%100)%4*365;

CStatic*pDraw=(CStatic*)GetDlgItem(IDC_STATIC);

CDC*pDC=pDraw->GetDC();

pDC->SetBkMode(TRANSPARENT);

for(inti=0;i<3;i=i++)

{pDC->MoveTo(0,i*118+10);pDC->LineTo(708,i*118+10);}

for(intj=0;j<7;j=j++)

{pDC->MoveTo(j*118,10);pDC->LineTo(j*118,246);}

for(i=0;i<7;i=i++)

for(j=0;j<12;j=j++)

{pDC->TextOut(j%6*118+16*i+5,j/6*118+12,str[i]);

}

for(j=0;j<12;j++)

for(i=0;i<31;i++)

{switch(j+1)

{case1:

e=0;break;

case2:

e=31;break;

case3:

e=31+28;break;

case4:

e=31+28+31;break;

case5:

e=31+28+31+30;break;

case6:

e=31+28+31+30+31;break;

case7:

e=31+28+31+30+31+30;break;

case8:

e=31+28+31+30+31+30+31;break;

case9:

e=31+28+31+30+31+30+31+31;break;

case10:

e=31+28+31+30+31+30+31+31+30;break;

case11:

e=31+28+31+30+31+30+31+31+30+31;break;

case12:

e=31+28+31+30+31+30+31+31+30+31+30;break;}

if(m_nYear%100!

=0&&m_nYear%4==0||m_nYear%400==0)

if(j>1)e=e+1;

CStringstr;

str.Format("%d",i+1);

if(j==1&&!

(m_nYear%100!

=0&&m_nYear%400==0||m_nYear%400==0)&&i>27||j==1&&(m_nYear%100!

=0&&m_nYear%4000==0||m_nYear%400==0)&&i>28||(j==3||j==5||j==8||j==10)&&i>29)

continue;

pDC->TextOut((f+d+e+i)%7*16+j%6*118+5,j/6*118+((i+(f+d+e)%7)/7+1)*16+15,str);

}

}

}

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 工程科技 > 城乡园林规划

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1