当前位置:文档之家› 通讯录实验报告

通讯录实验报告

安徽理工大学数据库系统概论课程设计说明书题目: 通讯录系统院系:计算机科学与工程学院专业班级:电子信息技术及仪器11-1班学号: 2011302807学生姓名:周松林指导教师:胡胜利2013年 06月 10日安徽理工大学课程设计(论文)任务书计算机科学与工程学院2013年03月20日安徽理工大学课程设计(论文)成绩评定表目录1 需求分析 (1)2 总体设计 (2)2.1数据库设计 (2)2.1.1通讯录系统的数据字典 (2)2.1.2概念结构设计 (2)2.1.3通讯录数据库逻辑结构设计 (3)2.2通讯录数据库实现 (3)3 详细设计 (4)3.1建立数据库 (4)3.2进行数据库连接 (5)3.3程序代码 (9)4 总结 (15)参考文献 (16)1 需求分析设计通讯录系统的总体目标:利用所学的VC++和数据库系统的相关知识,设计出具有一定功能的通讯录系统。

在本次程序设计,我是在SQLsever中建立相应的表,然后应用ODBC将数据库与VC++链接起。

通讯录的基本功能如下:(1)具有查找功能。

编写查找程序代码,用户根据自己需要,通过VC++功能界面查找所需内容。

(2)具有删除功能。

编写删除程序代码,通过VC++功能界面删除数据库中的记录。

(3)具有编辑功能。

编写相应编辑程序代码,实现对数据库中的记录的修改,达到用户目的。

(4)具有插入功能。

编写相应插入程序代码,实现对数据库进行插入记录功能。

2 总体设计2.1数据库设计2.1.1通讯录系统的数据字典由于本次课程设计的内容是设计通讯录系统,根据用户需求,建立以下联系人基本信息表,如下表所示。

表2-1联系人基本信息2.1.2概念结构设计通过需求分析构造基本表,确定了通讯录的数据项。

然后将需求分析得到的用户需求抽象为信息结构,画出E-R图。

如下图所示:图2-1联系人基本信息2.1.3通讯录数据库逻辑结构设计构造通讯录系统模块的逻辑结构如图2-2下:联系人(姓名,性别,年龄,手机号码,家庭住址)图2-2联系人属性2.2通讯录数据库实现根据上述我先在SQL sever中建立好数据库,然后以VC++(6.0)为开发平台,利用ODBC将数据库与VC++链接起来,在VC++(6.0)MFC中设计功能界面,通过功能键对数据库进行查找,删除,编辑,添加操作。

实现通讯录系统的基本操作,满足用户的基本要求。

3 详细设计3.1建立数据库在本次课程设计,我应用SQL server2005软件建立通讯录数据库,通讯录数据库包含联系人基本信息表。

首先先建立数据库,如下图3-1所示。

图3-1 在SQL server2005中建立通讯录数据库接着在此通讯录数据库上建立一个联系人信息基本表,其表为people表,并录入信息。

具体操作如下图所示。

图3-2 在SQL server2005中用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程序代码初始化,将数据库打开的代码:BOOL CSongDlg::OnInitDialog() {CDialog::OnInitDialog();p->Open(AFX_DB_USE_DEFAULT_TYPE);CBitmap hbmp;HBITMAP hbitmap;CStatic *pStaic;pStaic=(CStatic*)GetDlgItem(IDC_BITMAP);hbitmap=(HBITMAP)::LoadImage(::AfxGetInstanceHandle(),p->m_Stujing,IMAGE_BITMAP,0,0,LR_LOADFROMFI LE|LR_CREATEDIBSECTION);hbmp.Attach(hbitmap);BITMAP bm;hbmp.GetBitmap(&bm);CDC dcMem;dcMem.CreateCompatibleDC(GetDC());CBitmap *poldBitmap=(CBitmap*)dcMem.SelectObject(&hbmp);CRect lRect;pStaic->GetClientRect(&lRect);lRect.NormalizeRect();pStaic->GetDC()->StretchBlt(lRect.left ,lRect.top ,lRect.Width(),lRec t.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);return TRUE;}此处是查找功能的代码:void CYu::OnButton1() {CString s1;CLinDlg n;UpdateData(TRUE);s1.Format("select * from people where Sphone='%s'",m_phon);m_p->Open(AFX_DB_USE_DEFAULT_TYPE,s1);n.m_age=m_p->m_Sage;n.m_place=m_p->m_Splace;n.m_phone=m_p->m_Sphone;n.m_sex=m_p->m_Ssex;n.m_name=m_p->m_Sname;UpdateData(FALSE);n.DoModal();}此处是删除数据库记录功能的代码:void CSongDlg::OnDelete() {if(AfxMessageBox("真的要删除吗?",MB_OKCANCEL)==IDCANCEL) return;else{if(p->IsEOF()) {AfxMessageBox("没有相关数据!"); }else{p->Delete();if(p->IsEOF())p->MoveLast();elsep->MoveNext();p->Requery();UpdateData(false);AfxMessageBox("删除成功!"); } }}此处是修改数据库记录的代码:void CSongDlg::OnEdit() {CLinDlg d;d.m_age=p->m_Sage;d.m_place=p->m_Splace;d.m_phone=p->m_Sphone;d.m_sex=p->m_Ssex;d.m_name=p->m_Sname;UpdateData(FALSE);if(d.DoModal()==IDOK) {UpdateData(true);p->Edit();p->m_Splace=d.m_place;p->m_Sphone=d.m_phone;p->m_Ssex=d.m_sex;p->m_Sname=d.m_name;p->m_Sage=d.m_age;p->Update();p->Requery();AfxMessageBox("已经修改数据成功!");UpdateData(FALSE); } }此处添加记录到数据库的代码:void CSongDlg::OnAdd() {// TODO: Add your control notification handler code hereCLinDlg h;if(h.DoModal()==IDOK){if(h.m_age=0||h.m_name.IsEmpty()||h.m_phone.IsEmpty()||h.m_pla ce.IsEmpty()||h.m_sex.IsEmpty()){MessageBox(_T("有信息未填写,请重新填写!"),_T("提示"),MB_ICONWARNING); }else{UpdateData(TRUE);if(p->CanAppend()){p->AddNew();p->m_Sage=h.m_age;p->m_Sname=h.m_name;p->m_Sphone=h.m_phone;p->m_Splace=h.m_place;p->m_Ssex=h.m_sex;p->Update();p->Requery();AfxMessageBox("恭喜!添加成功");UpdateData(false);}}}}此处是上条记录,下条记录,更新的代码:p->MovePrev();pStaic=(CStatic*)GetDlgItem(IDC_BITMAP);hbitmap=(HBITMAP)::LoadImage(::AfxGetInstanceHandle(),p->m_Stujing,IMAGE_BITMAP,0,0,LR_LOADFROMFI LE|LR_CREATEDIBSECTION);hbmp.Attach(hbitmap);BITMAP bm;hbmp.GetBitmap(&bm);CDC dcMem;dcMem.CreateCompatibleDC(GetDC());CBitmap *poldBitmap=(CBitmap*)dcMem.SelectObject(&hbmp);CRect lRect;pStaic->GetClientRect(&lRect);lRect.NormalizeRect();pStaic->GetDC()->StretchBlt(lRect.left ,lRect.top ,lRect.Width(),lRec t.Height(),&dcMem,0 ,0,bm.bmWidth,bm.bmHeight,SRCCOPY);dcMem.SelectObject(&poldBitmap);m_sex=p->m_Ssex;m_name=p->m_Sname;m_age=p->m_Sage;m_phone=p->m_Sphone;m_place=p->m_Splace;UpdateData(FALSE);p->MoveNext();pStaic=(CStatic*)GetDlgItem(IDC_BITMAP);hbitmap=(HBITMAP)::LoadImage(::AfxGetInstanceHandle(),p->m_Stujing,IMAGE_BITMAP,0,0,LR_LOADFROMFI LE|LR_CREATEDIBSECTION);hbmp.Attach(hbitmap);BITMAP bm;hbmp.GetBitmap(&bm);CDC dcMem;dcMem.CreateCompatibleDC(GetDC());CBitmap *poldBitmap=(CBitmap*)dcMem.SelectObject(&hbmp);CRect lRect;pStaic->GetClientRect(&lRect);lRect.NormalizeRect();pStaic->GetDC()->StretchBlt(lRect.left ,lRect.top ,lRect.Width(),lRec t.Height(),&dcMem,0 ,0,bm.bmWidth,bm.bmHeight,SRCCOPY);dcMem.SelectObject(&poldBitmap);m_sex=p->m_Ssex;m_name=p->m_Sname;m_age=p->m_Sage;m_phone=p->m_Sphone;m_place=p->m_Splace;UpdateData(FALSE);p->MoveFirst( );m_sex=p->m_Ssex;m_name=p->m_Sname;m_age=p->m_Sage;m_phone=p->m_Sphone;m_place=p->m_Splace;UpdateData(FALSE);4总结通过这次的实验,对数据库在生活中的广泛应用有了更深的体会,同时也加深了对SQL server2005的认识,更深层次了解了相关的VC++知识,尤其对数据库与开发程序的链接有了进一步的认识。

相关主题