通讯录实验报告Word文档格式.docx
《通讯录实验报告Word文档格式.docx》由会员分享,可在线阅读,更多相关《通讯录实验报告Word文档格式.docx(20页珍藏版)》请在冰点文库上搜索。
![通讯录实验报告Word文档格式.docx](https://file1.bingdoc.com/fileroot1/2023-5/10/881d9485-5346-471c-a647-51f8e837e943/881d9485-5346-471c-a647-51f8e837e9431.gif)
参
数
系统平台:
Windows7
开发工具:
VC++6.0
SQLserver2005
要
求
设计一个通讯录系统,通过VC++的MFC将数据库中的表链接起来,在MFC中实现通讯录系统中联系人录入,删除,查找,编辑等功能
工
作
量
课程设计报告要求不少于3000字。
源程序要求不少于300行
划
2013年4月20日-2013年4月25日:
分析并建数据库
2013年4月26日-2013年5月10日:
编写程序实现基本功能
2013年5月11日-2013年5月25日:
写课程设计报告
2013年5月26日-2013年6月10日:
课程设计报告定稿
考
资
料
[1]InmonWH.数据库.王志海等译[B].北京:
机械工业出版社,2000
[2]ImhoffC等.数据库设计.于戈等译[B].北京:
机械工业出版社,2003
[3]温秀梅,丁学钧.C++语言程序设计教程与实验[M].北京清华大学出版社,2004
[4]严华峰等.VisualC++课程设计案例精编[P].北京:
中国水利水电出版社,2004
[5]王珊,萨师煊.数据库系统概述(第四版)[M].北京:
高等教育出版社出版,2006
指导教师签字
教研室主任签字
2013年03月20日
周松林学号:
2011302807专业班级:
电子仪器11-1班
课程设计题目:
通讯录系统
指导教师评语:
成绩:
年月日
安徽理工大学课程设计(论文)成绩评定表
1需求分析
设计通讯录系统的总体目标:
利用所学的VC++和数据库系统的相关知识,设计出具有一定功能的通讯录系统。
在本次程序设计,我是在SQLsever中建立相应的表,然后应用ODBC将数据库与VC++链接起。
通讯录的基本功能如下:
(1)具有查找功能。
编写查找程序代码,用户根据自己需要,通过VC++功能界面查找所需内容。
(2)具有删除功能。
编写删除程序代码,通过VC++功能界面删除数据库中的记录。
(3)具有编辑功能。
编写相应编辑程序代码,实现对数据库中的记录的修改,达到用户目的。
(4)具有插入功能。
编写相应插入程序代码,实现对数据库进行插入记录功能。
2总体设计
2.1数据库设计
2.1.1通讯录系统的数据字典
由于本次课程设计的内容是设计通讯录系统,根据用户需求,建立以下联系人基本信息表,如下表所示。
表2-1联系人基本信息
属性
字段含义
字段类型
是否为空
Sname
姓名
nchar(10)
NO
Ssex
性别
nchar
(2)
Sage
年龄
int
Sphone
手机号码
NO(主键)
Splace
家庭住址
2.1.2概念结构设计
通过需求分析构造基本表,确定了通讯录的数据项。
然后将需求分析得到的用户需求抽象为信息结构,画出E-R图。
如下图所示:
图2-1联系人基本信息
2.1.3通讯录数据库逻辑结构设计
构造通讯录系统模块的逻辑结构如图2-2下:
联系人(姓名,性别,年龄,手机号码,家庭住址)
图2-2联系人属性
2.2通讯录数据库实现
根据上述我先在SQLsever中建立好数据库,然后以VC++(6.0)为开发平台,利用ODBC将数据库与VC++链接起来,在VC++(6.0)MFC中设计功能界面,通过功能键对数据库进行查找,删除,编辑,添加操作。
实现通讯录系统的基本操作,满足用户的基本要求。
3详细设计
3.1建立数据库
在本次课程设计,我应用SQLserver2005软件建立通讯录数据库,通讯录数据库包含联系人基本信息表。
首先先建立数据库,如下图3-1所示。
图3-1在SQLserver2005中建立通讯录数据库
接着在此通讯录数据库上建立一个联系人信息基本表,其表为people表,并录入信息。
具体操作如下图所示。
图3-2在SQLserver2005中用CREATE建立联系人基本信息表
图3-3在数据库中形成people基本表
图3-4正在将联系人“三三”录入数据库。
图3-5数据库中存有的联系人
3.2进行数据库连接
建好数据库后,用ODBC进行链接数据库。
在控制面板里找管理工具,双击管理工具,在里面找数据源(ODBC)进行数据库的链接,如下图3-6所示。
图3-6采用ODBC进行与数据库链接
然后在VC++平台上设计功能界面,编写相应的程序。
在这次课程设计中我选用MFC基本对话框来完成相应功能。
具体步骤如图所示。
1.在VC++平台上,选用MFC基本对话框,建好基本对话框,要手动新建一个类,它是由CRecordSet派生而来。
CRecordset类封装了大量操作数据库的函数,支持查询,存取,更新数据库操作。
因此要新建一个继承CRecordset的类。
如图3-7所示。
图3-7新建继承CRecordSet的类
2.设计功能界面,进行功能测试,如图3-8,图3-9,图3-10,图3-11,图3-12所示。
图3-8设计登陆主界面
图3-9含有添加,编辑,删除,查找基本操作的功能主界面
图3-10删除功能主界面
图3-11进行联系人信息修改操作
图3-12对通讯录系统的记录进行查询
3.3程序代码
初始化,将数据库打开的代码:
BOOLCSongDlg:
:
OnInitDialog(){
CDialog:
OnInitDialog();
p->
Open(AFX_DB_USE_DEFAULT_TYPE);
CBitmaphbmp;
HBITMAPhbitmap;
CStatic*pStaic;
pStaic=(CStatic*)GetDlgItem(IDC_BITMAP);
hbitmap=(HBITMAP):
LoadImage(:
AfxGetInstanceHandle(),p->
m_Stujing,IMAGE_BITMAP,0,0,LR_LOADFROMFILE|LR_CREATEDIBSECTION);
hbmp.Attach(hbitmap);
BITMAPbm;
hbmp.GetBitmap(&
bm);
CDCdcMem;
dcMem.CreateCompatibleDC(GetDC());
CBitmap*poldBitmap=(CBitmap*)dcMem.SelectObject(&
hbmp);
CRectlRect;
pStaic->
GetClientRect(&
lRect);
lRect.NormalizeRect();
GetDC()->
StretchBlt(lRect.left,lRect.top,lRect.Width(),lRect.Height(),
&
dcMem,0,0,bm.bmWidth,bm.bmHeight,SRCCOPY);
dcMem.SelectObject(&
poldBitmap);
m_name=p->
m_Sname;
m_age=p->
m_Sage;
m_place=p->
m_Splace;
m_phone=p->
m_Sphone;
m_sex=p->
m_Ssex;
UpdateData(FALSE);
returnTRUE;
}
此处是查找功能的代码:
voidCYu:
OnButton1(){
CStrings1;
CLinDlgn;
UpdateData(TRUE);
s1.Format("
select*frompeoplewhereSphone='
%s'
"
m_phon);
m_p->
Open(AFX_DB_USE_DEFAULT_TYPE,s1);
n.m_age=m_p->
n.m_place=m_p->
n.m_phone=m_p->
n.m_sex=m_p->
n.m_name=m_p->
n.DoModal();
此处是删除数据库记录功能的代码:
voidCSongDlg:
OnDelete(){
if(AfxMessageBox("
真的要删除吗?
MB_OKCANCEL)==IDCANCEL)
return;
else{
if(p->
IsEOF()){
AfxMessageBox("
没有相关数据!
);
}
else
{
Delete();
IsEOF())
MoveLast();
else
MoveNext();
Requery();
UpdateData(false);
删除成功!
}}}
此处是修改数据库记录的代码:
OnEdit(){
CLinDlgd;
d.m_age=p->
d.m_place=p->
d.m_phone=p->
d.m_sex=p->
d.m_name=p->
if(d.DoModal()==IDOK){
UpdateData(true);
Edit();
m_Splace=d.m_place;
m_Sphone=d.m_phone;
m_Ssex=d.m_sex;
m_Sname=d.m_name;
m_Sage=d.m_age;
Update();
已经修改数据成功!
UpdateData(FALSE);
}}
此处添加记录到数据库的代码:
OnAdd(){
//TODO:
Addyourcontrolnotificationhandlercodehere
CLinDlgh;
if(h.DoModal()==IDOK){
if(h.m_age=0||h.m_name.IsEmpty()||h.m_phone.IsEmpty()||h.m_place.IsEmpty()||h.m_sex.IsEmpty()){
MessageBox(_T("
有信息未填写,请重新填写!
),_T("
提示"
),MB_ICONWARNING);
else{
UpdateData(TRUE);
if(p->
CanAppend()){
p->
AddNew();
m_Sage=h.m_age;
m_Sname=h.m_name;
m_Sphone=h.m_phone;
m_Splace=h.m_place;
m_Ssex=h.m_sex;
AfxMessageBox("
恭喜!
添加成功"
UpdateData(false);
}}}}
此处是上条记录,下条记录,更新的代码:
p->
MovePrev();
StretchBlt(lRect.left,lRect.top,lRect.Width(),lRect.Height(),&
MoveFirst();
4总结
通过这次的实验,对数据库在生活中的广泛应用有了更深的体会,同时也加深了对SQLserver2005的认识,更深层次了解了相关的VC++知识,尤其对数据库与开发程序的链接有了进一步的认识。
这次课程设计我最大的感受是如何将所学的课本知识应用于实验,提高我们的实践能力。
由于之前的学习过于注重书本上的知识,比较少上机练习编程,导致在实验的开始阶段进展缓慢,经常犯些低级错误,例如:
没加头文件。
这次课程设计也遇到很多问题,但始终没有放弃,通过网上查资料,请教老师同学。
经老师指点,渐渐的掌握了一定的知识。
对实验慢慢得心应手,学得很多知识。
当然,这次课程设计中,有其亮点也有不足。
其亮点就在于每个联系人都有对应一张本人照片。
这就要求在数据库有对应的照片数据或照片路径,本次实验中,综合考虑选择在数据库中存储照片路径,然后通过LoadImage函数将位图加载,通过这种方法实现每个联系人都有对应一张本人照片。
加载图片是本次课程设计的难点,在这点上花费了我们大量时间,延迟课程设计完成的时间,但我们还是在最终定稿时间期限完成课程设计。
而这次课程设计的不足在于:
只能加载位图格式(即bmp格式)。
对其他格式图片则不能加载,必须通过转换成位图格式才行,这种缺陷限制通讯录的功能。
本想进一步修改,但由于时间将至,因此最终放弃对程序进行改进。
总结以上,这次课程设计基本满足要求,很好实现各个功能基本操作。
虽然收获很多,但遗憾也有。
不管怎么样,今后我会更加努力学习这门课程,不断提高自己。
参考文献
[1]InmonWH.数据库.王志海等译[B].北京:
[2]ImhoffC等.数据库设计.于戈等译[B].北京: