参考优秀程序设计报告.docx
《参考优秀程序设计报告.docx》由会员分享,可在线阅读,更多相关《参考优秀程序设计报告.docx(60页珍藏版)》请在冰豆网上搜索。
![参考优秀程序设计报告.docx](https://file1.bdocx.com/fileroot1/2023-6/9/c786f58e-d253-4747-b657-cb8c230b2ddb/c786f58e-d253-4747-b657-cb8c230b2ddb1.gif)
参考优秀程序设计报告
程序设计报告
(2013/2014学年第一学期)
题目:
数码闹钟的设计与实现
专业信息安全
组长学号姓名B12040611丁宏
组员学号姓名B12040612王亚聪
B12040630葛聪聪
指导教师朱立华
指导单位计算机学院软件教学中心
日期2013年10月31日
成员分工
组长(丁宏)
主要负责基于Windows下的界面设计、数码闹钟的拓展要求的程序设计与实现以及PPT制作和答辩陈述。
组员(王亚聪)
主要负责数码闹钟中获取时间、闹钟功能的程序设计与实现,并致力于研究数码闹钟的语音功能的程序设计与实现。
组员(葛聪聪)
主要负责程序中的数据库管理代码的编写、数码闹钟多次闹铃的程序设计与实现、实验报告的归纳与编辑。
评分细则
评分项
优秀
良好
中等
差
遵守机房规章制度
√
上机时的表现
√
学习态度
√
程序准备情况
√
程序设计能力
√
团队合作精神
√
课题功能实现情况
√
算法设计合理性
√
用户界面设计
√
报告书写认真程度
√
内容详实程度
√
文字表达熟练程度
√
回答问题准确度
√
简短评语
三位同学非常认真,拿到课题后就开始研究用图形化界面实现程序,丁宏同学主要负责学习MFC编程的相关知识,其余两位同学负责算法的设计与实现.所实现的功能好,一些扩展功能经多次尝试因时间所限未能完全成功.报告认真详尽,答辩时正确回答问题。
教师签名:
朱立华
2013年11月6日
评分等级
B12040611丁宏
B12040612王亚聪
B12040630葛聪聪
优秀
优秀
优秀
备注
评分等级共五种:
优秀、良好、中等、及格、不及格
数码闹钟的设计与实现
一、课题内容和要求
“数码闹钟”系统主要是通过MFC窗口化程序设计来绘制数码管以显示当前的系统时间,并且伴随有闹钟功能。
课题的基本要求中要求1、用6个数码管显示当前系统的时、分、秒信息;2、可以满足同时进行多个时间的闹铃设置,时间到,在屏幕上以数码管形式实现屏闪,每秒一次,时长一秒,伴随蜂鸣;3、时间正常显示,以秒为计时单位;4、提供菜单功能,时间表控制以文件形式保存,便于修改闹钟时间。
拓展要求中要求1、能够设置数码闹钟的闹铃次数;2、采用图形界面;3、允许在闹铃响之前至少半个小时取消闹铃设置,半小时内不允许取消设置。
二、需求分析
数码闹钟系统的功能框架图如图1所示。
图1功能框架图
(1)提供一个基于Windows下的窗口界面,显示了当前日期,时间,已设定的闹钟信息,并提供三个按钮可以进行闹钟的添加与删除;
(2)通过数据库文件对设定的闹钟与提示信息进行管理和输出;
(3)提供一个窗口使得闹钟的提示信息可以由用户自己设定和更改;
(4)关于闹钟的响铃功能,可以根据用户需求,通过一个选择框设置单次提醒还是多次提醒,若设置多次提醒每隔两分钟会弹出对话框提醒,并带有一次响铃。
三、概要设计
1主要的类内变量的定义和函数的声明:
classCClock3Dlg:
publicCDialog
{
public:
intjc;//标志变量,控制多次响铃
intfdot;//标志变量,控制冒号的闪烁
intclockstop;//标志变量,和flash一起控制响铃时时间闪烁
intflash;//标志变量,控制响铃时时间闪烁
CRectrect;//绘制背景矩形
CRectrec2[6];//绘制带数字的数码管
charcflag;//标志变量,检测时间是否正常运行
CRectrecd1,recd2;//绘制两个冒号
CRectrec[6];//绘制无数字的数码管
intwz[6];//保存时间各个位数,控制数码管显示
_ConnectionPtrm_pConnection;//数据库的连接指针
_RecordsetPtrm_pRecordset;//数据库的记录指针
intmaxbianhao;//记录数据库内最后一条数据的编号
intfirst_h;//第一个响的闹钟的小时位
intfirst_m;//第一个响的闹钟的分钟位
intfirst_s;//第一个响的闹钟的秒数位
intfirst_bianhao;//第一个响的闹钟的编号
intm_nian;//当前时间的年
intm_yue;//当前时间的月
intm_ri;//当前时间的日
intm_h;//当前时间的小时
intm_m;//当前时间的分钟
intm_s;//当前时间的秒
inttimer;//记录响铃次数
CTimentime;//当前时间
CTimetimerold;//用于对比当前时间,控制数码管的变化
boolsig_clocksound;//控制是否响铃
CDirectSounddirectSound;//声音类的变量,控制对象
LPDIRECTSOUNDBUFFERclockSound;//声音类变量,读取铃音
CClock3Dlg(CWnd*pParent=NULL);//构造函数
voidtest();//测试函数
voidCheckClockTime();//对比闹钟时间和当前时间
voidGetFirstClock();//获取第一个响的闹钟
voidOnClock();//闹钟实现函数
protected:
HICONm_hIcon;//图标句柄
voidGetCurrentTime();//获取当前时间
voidPrintData();//往列表中输入数据库数据
}
classAddClock:
publicCDialog
{
public:
AddClock(CWnd*pParent=NULL);//构造函数
_ConnectionPtrm_pConnection;//连接数据库
_RecordsetPtrm_pRecordset;//连接数据库中的表单clocklist
_RecordsetPtrm_pRecordset2;//连接表单tishi
intbianhao;//列表标号
//DialogData
//{{AFX_DATA(AddClock)
enum{IDD=IDD_ADD};
CButtonm_Check;
CButtonm_Check2;
CComboBoxm_ComBox;
intm_h;
intm_m;
intm_s;
//}}AFX_DATA
protected:
voidGetClientTime(boolsig);//获取当前时间
voidSetComboBox();//设定下拉框
boolAddClockList(CStringtime);//添加闹钟函数
intm_nian;//当前时间的年
intm_yue;//当前时间的月
intm_ri;//当前时间的日
}
classAddTiShiDlg:
publicCDialog
{
public:
AddTiShiDlg(CWnd*pParent=NULL);//构造函数
intbianhao;//提示信息的编号
//DialogData
//{{AFX_DATA(AddTiShiDlg)
enum{IDD=IDD_DIALOG1};
protected:
_ConnectionPtrm_pConnection;//连接数据库的指针
_RecordsetPtrm_pRecordset;//记录指针,连接表单tishi
boolInsertData();//录入数据
CStringstr_tishi;//提示信息
}
2主要函数流程图
(1)绘图函数:
通过MFC绘图函数在对话框中绘制一个数码管,用于显示当前时间,并根据时间变化,流程图如图2所示;
图2绘制函数
(2)读取函数:
通过读取数据库信息,填充到对话框的列表中,以便于用户管理和修改闹钟信息和提示信息,流程图如图3所示;
图3读取函数
(3)添加函数:
通过添加按钮可以向数据库中添加闹钟信息或提示信息并重新读取数据库内容添加到列表中,流程图如图4所示;
图4添加函数
(4)闹钟功能的实现函数:
这个是本程序最基本的功能,通过拓展后,闹钟可以由用户自定义是否响铃和是否多次提醒,流程图如图5所示。
图5闹钟实现函数
四、源程序代码
#include"stdafx.h"
#include"Clock3.h"
#include"Clock3Dlg.h"
#ifdef_DEBUG
#definenewDEBUG_NEW
#undefTHIS_FILE
staticcharTHIS_FILE[]=__FILE__;
#endif
CClock3Dlg:
:
CClock3Dlg(CWnd*pParent/*=NULL*/)
:
CDialog(CClock3Dlg:
:
IDD,pParent)
{
//{{AFX_DATA_INIT(CClock3Dlg)
//NOTE:
theClassWizardwilladdmemberinitializationhere
//}}AFX_DATA_INIT
//NotethatLoadIcondoesnotrequireasubsequentDestroyIconinWin32
m_hIcon=AfxGetApp()->LoadIcon(IDR_MAINFRAME);
maxbianhao=0;
first_h=0;
first_m=0;
first_s=0;
first_bianhao=0;
m_h=0;
m_m=0;
m_s=0;
timer=0;
sig_clocksound=0;
flash=1;
clockstop=0;
fdot=1;
jc=0;
}
BOOLCClock3Dlg:
:
OnInitDialog()
{
CDialog:
:
OnInitDialog();
//Add"About..."menuitemtosystemmenu.
//IDM_ABOUTBOXmustbeinthesystemcommandrange.
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);
}
}
//Settheiconforthisdialog.Theframeworkdoesthisautomatically
//whentheapplication'smainwindowisnotadialog
SetIcon(m_hIcon,TRUE);//Setbigicon
SetIcon(m_hIcon,FALSE);//Setsmallicon
//TODO:
Addextrainitializationhere
m_list.ModifyStyle(0L,LVS_REPORT);
m_list.ModifyStyle(0L,LVS_SINGLESEL);
m_list.ModifyStyle(0L,LVS_SHOWSELALWAYS);
m_list.ModifyStyle(0L,LVS_NOSORTHEADER);
m_list.SetExtendedStyle(LVS_EX_GRIDLINES|LVS_EX_FULLROWSELECT);
m_list.InsertColumn(0,"编号");
m_list.InsertColumn(1,"时间");
m_list.InsertColumn(2,"提示信息");
m_list.InsertColumn(3,"闹铃");
m_list.InsertColumn(4,"多次");
m_list.SetColumnWidth(0,40);
m_list.SetColumnWidth(1,150);
m_list.SetColumnWidth(2,162);
m_list.SetColumnWidth(3,45);
m_list.SetColumnWidth(4,45);
PrintData();
GetCurrentTime();
for(intii=0;ii<6;ii++)
{
InvalidateRect(rec[ii],TRUE);
InvalidateRect(rec2[ii],TRUE);
}
intj=8;
for(ii=0;ii<2;ii++)
rec[ii].SetRect(205+ii*45,50,245+ii*45,115);
for(ii=2;ii<4;ii++)
rec[ii].SetRect(205+ii*45+j,50,245+ii*45+j,115);
j+=8;
for(ii=4;ii<6;ii++)
rec[ii].SetRect(205+ii*45+j,50,245+ii*45+j,115);
SetTimer(1,1000,NULL);
cflag=0;
j=8;
for(ii=0;ii<2;ii++)
rec2[ii].SetRect(205+ii*45,50,245+ii*45,115);
recd1.SetRect(293,50,300,115);
for(ii=2;ii<4;ii++)
rec2[ii].SetRect(205+ii*45+j,50,245+ii*45+j,115);
recd2.SetRect(391,50,398,115);
j+=8;
for(ii=4;ii<6;ii++)
rec2[ii].SetRect(205+ii*45+j,50,245+ii*45+j,115);
cflag=-1;
returnTRUE;//returnTRUEunlessyousetthefocustoacontrol
}
voidCClock3Dlg:
:
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();
intll=23,hh=36;
CPaintDCdc(this);
CDCdcMem;
dcMem.CreateCompatibleDC(&dc);
CBitmapbBd[7];
BITMAPbitMap[7];
CBitmap*pbmpOld;
GetDlgItem(IDC_TL)->GetWindowRect(&rect);
ScreenToClient(&rect);
rect.InflateRect(-1,-7,-1,-1);
dc.FillSolidRect(&rect,RGB(0,0,0));
for(intii=0;ii<6;ii++)
{
bBd[ii].LoadBitmap(IDB_BITMAP1);
bBd[ii].GetBitmap(&bitMap[ii]);
pbmpOld=dcMem.SelectObject(&bBd[ii]);
if(!
flash)
dc.StretchBlt(rec[ii].left,rec[ii].top,rec[ii].Width(),rec[ii].Height(),&dcMem,0,0,ll-1,hh,SRCCOPY);
else
dc.StretchBlt(rec2[ii].left,rec2[ii].top,rec2[ii].Width(),rec2[ii].Height(),&dcMem,(wz[ii]+1)*ll,0,ll-1,hh,SRCCOPY);
}
if(cflag&&fdot)
{
bBd[ii].LoadBitmap(IDB_BITMAP1);
bBd[ii].GetBitmap(&bitMap[ii]);
pbmpOld=dcMem.SelectObject(&bBd[ii]);
dc.StretchBlt(recd1.left,recd1.top,recd1.Width(),recd1.Height(),&dcMem,ll*11,0,4,hh,SRCCOPY);
dc.StretchBlt(recd2.left,recd2.top,recd2.Width(),recd2.Height(),&dcMem,ll*11,0,4,hh,SRCCOPY);
}
}
}
voidCClock3Dlg:
:
GetCurrentTime()
{
ntime=CTime:
:
GetCurrentTime();
intaa;
aa=ntime.GetHour();
wz[0]=aa/10;
wz[1]=aa%10;
aa=ntime.GetMinute();
wz[2]=aa/10;
wz[3]=aa%10;
aa=ntime.GetSecond();
wz[4]=aa/10;
wz[5]=aa%10;
CStringstr_day;
str_day=ntime.Format("%Y年%m月%d日%A%H:
%M:
%S");
CStringstr;
str=ntime.Format("%Y");
m_nian=atoi(str);
str=ntime.Format("%m");
m_yue=atoi(str);
str=ntime.Format("%d");
m_ri=atoi(str);
str=ntime.Format("%H");
m_h=atoi(str);
str=ntime.Format("%M");
m_m=atoi(str);
str=ntime.Format("%S");
m_s=atoi(str);
}
图6数码闹钟的主界面
voidCClock3Dlg:
:
OnAdd()//此函数在单击主界面上的“添加闹钟”后被调用
{
//TODO:
Addyourcontrolnotificationhandlercodehere
AddClockadddlg;
adddlg.bianhao=maxbianhao+1;
intid=adddlg.DoModal();
if(id==IDOK)//IDCANCEL
{
for(inti=0;im_list.DeleteItem(0);
maxbianhao++;
PrintData();
GetFirstClock();
}
}
voidCClock3Dlg:
:
PrintData()
{
:
:
CoInitialize(NULL);
m_pConnection=NULL;
m_pConnection.CreateInstance(__uuidof(Connection));
m_pConnection->ConnectionString="uid=;pwd=;DRIVER={MicrosoftAccessDriver(*.mdb)};DBQ=clock.mdb;";
m_pConnection->Open(L"",L"",L"",adCmdUnspecified);
m_pRecordset=NULL;
CStringstr_SQL;
str_SQL.Format("select*fr