日历记事本实验报告.docx
《日历记事本实验报告.docx》由会员分享,可在线阅读,更多相关《日历记事本实验报告.docx(12页珍藏版)》请在冰点文库上搜索。
日历记事本实验报告
课程设计报告
(2013--2014年度第二学期)
名称:
软件设计与实践
题目:
日历记事本
院系:
计算机系
班级:
学号:
学生姓名:
指导教师:
软件设计与实践教学组
设计周数:
2
成绩:
日期:
2014年9月3
软件设计与实践
任务书
一、目的与要求
目的:
通过综合性实验的设计,使学生综合训练自己的需求分析、系统设计、编程、测试等各种能力,积累软件开发的经验,提高学生进行软件开发所需具备的专业素质以及团队协作能力。
要求:
完成一个GUI界面的日历记事本的分析、设计、编程、测试工作。
二、主要内容
1.编写一个GUI界面的日历记事本,结合两者的功能。
2.用户可以方便地在任何日期记录下有关内容或查看某个日期的记录内容;
3.能够在对应的日期时间给用户以提醒;
三、进度计划
序号
设计(实验)内容
完成时间
备注
1
查阅资料,完成系统需求分析
1天
完成《需求规格说明书》
2
完成系统总体设计及详细设计
1天
完成《设计说明书》
3
程序编码及测试
7天
完成后须经教师验收。
4
撰写实验报告
1天
四、设计(实验)成果要求
程序代码注释丰富,经过测试,运行正常、合理。
程序页面友好,使用方便。
五、考核方式
1.平时成绩占10%。
2.综合实验完成情况占30%。
3.实验问答占20%
4.实验报告占40%。
学生姓名:
指导教师:
软件设计与实践教学组
年月日
一、课程设计的目的与要求
1.目的:
通过综合性实验的设计,使学生综合训练自己的需求分析、系统设计、编程、测试等各种能力,积累软件开发的经验,提高学生进行软件开发所需具备的专业素质以及团队协作能力。
2.要求:
见任务书。
二、设计正文
1.需求规格说明书
编写的日历记事本,拥有了现实日历很难很快查询实现的功能。
现在电脑使用用户越来越多,就不需要购买现实的日历,而通过这个小小的程序就可以帮助人们知道现在和未来的日期,还可以查询你想要的日期。
能够给用户带来更加简单和实用的感觉。
还可以添加事件作为备忘,并在你想要的时间里提醒你。
方便性:
是一种虚拟的日历而不是现实的,查询日期的速度快,查询准确。
使用户能更快的知道自己想要的日期。
并对日期进行日志编辑操作。
实用性:
不需要用户去购买其他现实日历,只需拥有这个小小的程序。
可以记录所需要记录的事情。
2.设计说明书
2.1数据库设计:
设计4列数据,分别为ID(事件编号)自动编号主码,RQ(日期)文本,TXSJ(提醒时间)文本,NOTE(事件内容)文本。
2.2编写环境:
delphiXE2
2.3设计思想
2.3.1连接数据库:
A.新建DataModule窗体,添加adoconnecion和adotable控件。
B.在每个需要数据库的窗体上都添加datasourse控件。
2.3.2主窗体:
A.添加月历和周历空间,方便使用者一打开程序就能获知当天日期。
B.添加查询功能,你想知道某一日期是周几,输入年月日,将它们转化为int输入到周历中,然后显示那天为周几。
C.添加Timer空间作为提醒,加入循环判断数据库中的日期时间与电脑的日期时间的函数,若相等则显示事件等待完成。
提醒也可以人为控制打开或关闭。
2.3.3添加事件窗体
A.用户打开该窗体,默认datetimepicker时间为当前系统时间。
B.通过radiogroup控件设计的两个按钮来选择你是否想要添加提醒,若是,则把提醒时间写入到数据库,反之不写入。
C.‘增加’按钮为写入,写入时再加入判断Tedit是否为空,‘取消’按钮则把你输入到Tedit的内容置空以重新输入。
D.所有写入的日期时间都转化为string型后写入数据库。
2.3.4查询事件窗体
A.将数据库里所有的日期填充到Tcombobox控件里,当下拉该控件选择日期时,TDBgrid控件则会显示该日期所有的事件,再加入若干TDBedit控件来详细显示你所选择数据的详细信息,NOTE记录可能存在较多文字,用TDBMemo控件,能换行显示。
B.‘删除’按钮则会删除当条记录。
三、课程设计总结或结论
1.本次实验是我第一次独立编写软件,写完成功运行之后还是有一定的成就感。
2.本次实验对delphi的一些控件如monthcalendar和timer从不知道到有了一定的了解。
3.本次实验在对查询窗体的tcombobox控件编写代码来实现下拉选择日期进行查询时遇到了一定的困难,最后通过请教别人才顺利完成的。
4.这个程序功能比较简单单一,写的时候没有参照其它手机电脑上供人下载安装的日历记事本相关软件,编写软件经验不足,考虑事情不够周到。
四、参考文献
[1]王沛百例课堂Delphi7编程入门篇机械工业出版社2006年5月
附录(设计流程图、程序、表格、数据等)
1.主窗体
1.1事件提醒
到达设定的时间后提醒弹出一次,点击OK后需关闭提醒
1.2判断日期时间代码
procedureTfrmCalBook.Judge;//判断日期时间
varDate:
string;
varTime:
string;
begin
Date:
=FormatDateTime('yyyy-mm-dd',Now());
Time:
=FormatDateTime('hh.nn.ss',Now());
uDM1.tbl1.First;
whilenot(uDM1.tbl1.Eof)do
ifDate=uDM1.tbl1.FieldByName('RQ').AsStringthen
begin
ifTime=uDM1.tbl1.FieldByName('TXSJ').AsStringthen
tmr1.Enabled:
=True
else
uDM1.tbl1.Next;
end
else
uDM1.tbl1.Next;
end;
1.3在主窗体上通过mainmenu控件实现其他窗体的调用和释放
procedureTfrmCalBook.N1Click(Sender:
TObject);
begin
//调用窗体
frmAdd:
=TfrmAdd.Create(Application);
try
frmAdd.ShowModal;
finally
//释放窗体
frmAdd.Free;
end;
end;
2.添加事件窗体
增加按钮实现输入内容和日期时间写入数据库,radiogroup的itemindex的值为0是启用提醒,1是不用提醒。
procedureTfrmAdd.btn1Click(Sender:
TObject);
varsOpenDate:
string;
varsOpenTime:
string;
begin
uDM1.tbl1.Append;
sOpenDate:
=FormatDateTime('yyyy-mm-dd',dtpRQ.DateTime);//日期赋值
sOpenTime:
=FormatDateTime('hh.nn.ss',dtpSJ.DateTime);//时间赋值
ifTrim(edt1.Text)=''then
begin
ShowMessage('你输入的内容为空,请重新输入');
end
else
uDM1.tbl1.FieldByName('RQ').AsString:
=sOpenDate;
ifrg1.ItemIndex=0then
begin
uDM1.tbl1.FieldByName('TXSJ').AsString:
=sOpenTime;
uDM1.tbl1.FieldByName('NOTE').AsString:
=edt1.Text;
end
else
begin
uDM1.tbl1.FieldByName('NOTE').AsString:
=edt1.Text;
end;
uDM1.tbl1.Post;
end;
3.查询窗体
3.1将数据库里的日期填入combobox
procedureTfrmSearch.FillRQ;
begin
cbbS.Clear;
WithuDM1.tbl1do
try
ifuDM1.tbl1.EofanduDM1.tbl1.Bofthen
ShowMessage('没有事件!
')
else
begin
uDM1.tbl1.First;
whilenot(uDM1.tbl1.Eof)do
begin
ifnot(cbbS.Items.IndexOf(uDM1.tbl1.FieldByName('RQ').AsString)>=0)then
cbbS.Items.Add(uDM1.tbl1.FieldByName('RQ').AsString);
uDM1.tbl1.Next;
end;
ifcbbS.Items.Count>0then
begin
cbbS.Sorted:
=True;
cbbS.ItemIndex:
=0;
cbbSChange(cbbS);
end;
end;
finally
uDM1.tbl1.Active:
=False;
end;
end;
3.2获取日期
functionTfrmSearch.GetRQ:
string;
begin
ifcbbS.ItemIndex<0then
begin
ShowMessage('不存在有事件的日期。
');
Result:
='';
end
else
Result:
=cbbS.Text;
end;
3.3实现combobox下拉条选择日期时的数据过滤,相当于sql的查询语句
procedureTfrmSearch.cbbSChange(Sender:
TObject);
var
RQ:
string;
begin
//ShowMessage(cbbS.Text);
uDM1.tbl1.DisableControls;
try
ifnotuDM1.tbl1.ActivethenuDM1.tbl1.Active:
=True;
RQ:
=GetRQ;
uDM1.tbl1.Filtered:
=False;//数据集过滤
uDM1.tbl1.Filter:
=Format('RQ=''%s''',[RQ]);
uDM1.tbl1.Filtered:
=True;
finally
uDM1.tbl1.EnableControls;
end;
end;
4.数据库