您好,欢迎来到筏尚旅游网。
搜索
您的当前位置:首页Window程序设计报告

Window程序设计报告

来源:筏尚旅游网
Window程序设计报告

(1) 通讯录应用程序

一、设计目标与内容:

1. 了解Windows编程的基础知识,掌握MFC应用程序的基本

知识;

2. 基本掌握面向对象程序设计的基本思路和方法; 3. 掌握用VC++开发应用程序的的一般步骤和方法;

4. 能够利用所学的基本知识,设计一个简单的通讯录应用程序,

具有以下功能:①用文件来保存通讯录信息(必须实现的功能)②编程实现通讯录记录的添加、删除、修改、浏览和查询(必须实现的功能)。

二,设计要求:

用VC++进行编码,实现应用程序的功能。注重编码质量,代码要有适当的注释;

功能描述

创建一个通讯录应用程序,可以通过文件导入导出成员的信息,实现成员信息的添加、删除、修改、浏览和查询的功能(基本功能),改变背景颜色,添加动画,添加背景音乐(添加功能)。

基本思路

利用VisualC++,通过对一些常用控件的使用实现程序的一些常见的功能,通过对文件的操作来保存和删除一些信息,通过对按钮消息的响应,实现一些基本的功能

1

主要步骤

项目的创建

本例使用VisualC++6.0创建一个基于单文档的MFC AppWizard(exe)项目,项目的名字为Address,其中最后一步选择CFormView。

界面设计

按如下对话框资源的界面布置对话框

如后面的(图一)

再添加一个对话框资源,当响应添加消息是弹出该对话框,添加你所想添加的信息,其对话框的见面如图所示,当然了我们也可以再添加一个用户登陆的对话框资源如下所示

2

代码的实现

1 定义一个CPerson类 在Person.h中编辑代码

class CPerson : public CObject {

public: CPerson(); virtual ~CPerson(); CPerson(CString name,CString phone,CString adr,CString qq); void Serialize(CArchive&ar); public: CString m_name;//姓名 CString m_phone;//电话 CString m_addr;//公司 CString m_qq;//QQ号 DECLARE_SERIAL(CPerson)//对类进行串行化宏定义 };

在Person.cpp中编辑代码 CPerson::CPerson(CString name,CString phone,CString adr,CString qq) { m_name=name; m_phone=phone; m_addr=adr; m_qq=qq; }

IMPLEMENT_SERIAL(CPerson,CObject,1) void CPerson::Serialize(CArchive&ar) { if(ar.IsStoring()) ar<>m_name>>m_phone>>m_addr>>m_qq; }

3

2在AddressDoc.h中编辑代码 public: virtual ~CAddressDoc(); CObArray m_stuObArray; int GetAllRecNum(void); CPerson* GetSTUDENTINFORAt(int nIndex); #ifdef _DEBUG virtual void AssertValid() const; virtual void Dump(CDumpContext& dc) const;

在AddressDoc.cpp中编辑代码

void CAddressDoc::Serialize(CArchive& ar) { if (ar.IsStoring()) { // TODO: add storing code here m_stuObArray.Serialize(ar) ; } else { // TODO: add loading code here m_stuObArray.Serialize(ar) ; } }

int CAddressDoc::GetAllRecNum() { return m_stuObArray.GetSize() ; }

3 定义一个列表控件的变量 CListCtrl m_list_ctrl; AddressView.cpp中的初始化函数OnInitialUpdate()

void CAddressView::OnInitialUpdate() { CFormView::OnInitialUpdate(); GetParentFrame()->RecalcLayout(); ResizeParentToFit(); m_gif2.Load(MAKEINTRESOURCE(IDR_GIF2),_T(\"gif\"));//

4

加载动画,m_gif2为图像控件的变量 m_gif2.Draw(); m_gif.Load(MAKEINTRESOURCE(IDR_GIF1),_T(\"gif\"));//加载动画 m_gif.Draw(); if(IsFirst)//判断是否是第一次打开,在CAddressView()中初始化IsFirst=TRUE; { IsFirst=FALSE; m_list_ctrl.SetExtendedStyle(LVS_EX_GRIDLINES|LVS_EX_FULLROWSELECT|LVS_EX_ONECLICKACTIVATE); CString strHeader[4] = {\"姓名\电话\地址\ int nWidth[4] = {110,110,110,110} ; for(int nCol=0;nCol<4;nCol++) m_list_ctrl.InsertColumn(nCol,strHeader[nCol],LVCFMT_LEFT,nWidth[nCol]) ; UpdateData(FALSE) ; } }

响应添加按钮的代码

单击添加按钮时弹出如图所示的界面,(添加自己想添加的信息)

5

void CAddressView::OnButtonAdd() { // TODO: Add your control notification handler code here CdlgADD dlg; dlg.DoModal(); int n=m_list_ctrl.GetItemCount(); m_list_ctrl.InsertItem(m_list_ctrl.GetItemCount(),\"\"); m_list_ctrl.SetItemText(n,0,dlg.m_strname); m_list_ctrl.SetItemText(n,1,dlg.m_strphone); m_list_ctrl.SetItemText(n,2,dlg.m_straddress); m_list_ctrl.SetItemText(n,3,dlg.m_strqq); UpdateData(TRUE) ; CAddressDoc* pDoc = GetDocument(); CPerson*pStudent=new

CPerson(dlg.m_strname,dlg.m_strphone,dlg.m_straddress,dlg.m_strqq); pDoc->m_stuObArray.Add(pStudent) ; pDoc->SetModifiedFlag() ; pDoc->UpdateAllViews(NULL) ; }

添加完后再列表控件中显示的

响应删除按钮的代码

首先在列表控件中选择你想要删除的那一列,然后选侧删除,代码如下,定义一个public int item;的变量,先让列表控件响应NM_CLICK消息

void CAddressView::OnClickList1(NMHDR* LRESULT* pResult)

pNMHDR,

6

{ // TODO: Add your control notification handler code here LV_HITTESTINFO* pHitTestInfo (LV_HITTESTINFO*)pNMHDR; item = pHitTestInfo->iItem; *pResult = 0; }

void CAddressView::OnButtonDelete() { CAddressDoc* pDoc = GetDocument(); if(item!=LB_ERR) { m_list_ctrl.DeleteItem(item); delete (CPerson*)pDoc->m_stuObArray.GetAt(item) ; pDoc->m_stuObArray.RemoveAt(item); } else return ; pDoc->SetModifiedFlag() ; }

=

响应修改按钮的代码

首先打开上次保存的信息,然后点击浏览,此时所有以保存的信息将会显示在列表控件中,在列表控件中选择你要修改的选项,点击修改

弹出如图示的对话框 ,更改你要修改的对象

7

CdlgADD dlg; CAddressDoc*pDoc =GetDocument(); POSITION pos = m_list_ctrl.GetFirstSelectedItemPosition(); if (pos == NULL) { MessageBox(\"没有选中项!\"); } else { while (pos) { int nItem = m_list_ctrl.GetNextSelectedItem(pos); m_list_ctrl.DeleteItem(nItem); dlg.m_strname = ((CPerson*)pDoc->m_stuObArray.GetAt(nItem))->m_name; dlg.m_strphone

=((CPerson*)pDoc->m_stuObArray.GetAt(nItem))->m_phone; dlg.m_straddress = ((CPerson*)pDoc->m_stuObArray.GetAt(nItem))->m_addr; dlg.m_strqq = ((CPerson*)pDoc->m_stuObArray.GetAt(nItem))->m_qq; dlg.DoModal();

8

UpdateData(FALSE); if(IDOK) { UpdateData(); ((CPerson*)pDoc->m_stuObArray.GetAt(nItem))->m_name = dlg.m_strname; ((CPerson*)pDoc->m_stuObArray.GetAt(nItem))->m_phone = dlg.m_strphone; ((CPerson*)pDoc->m_stuObArray.GetAt(nItem))->m_addr = dlg.m_straddress; ((CPerson*)pDoc->m_stuObArray.GetAt(nItem))->m_qq = dlg.m_strqq ; pDoc->SetModifiedFlag(); m_list_ctrl.InsertItem(nItem , dlg.m_strname); m_list_ctrl.SetItemText(nItem , 1 , dlg.m_strphone); m_list_ctrl.SetItemText(nItem , 2 , dlg.m_straddress); m_list_ctrl.SetItemText(nItem , 3 , dlg.m_strqq); } } } }

响应浏览按钮的代码

void CAddressView::OnButtonScan() { // TODO: Add your control notification handler code here m_list_ctrl.DeleteAllItems() ; CAddressDoc* pDoc = GetDocument(); for(int n=0;nGetAllRecNum();n++) { m_list_ctrl.InsertItem(n,pDoc->GetSTUDENTINFORAt(n)->m_name);

9

m_list_ctrl.SetItemText(n,1,pDoc->GetSTUDENTINFORAt(n)->m_phone) ; m_list_ctrl.SetItemText(n,2,pDoc->GetSTUDENTINFORAt(n)->m_addr) ; m_list_ctrl.SetItemText(n,3,pDoc->GetSTUDENTINFORAt(n)->m_qq) ; } }

响应查找按钮的代码

输入你要查询的电话号码(如135963)点击查找

void CAddressView::OnButtonSearch() { // TODO: Add your control notification handler code here CAddressDoc* pDoc = GetDocument(); UpdateData(TRUE) ; for(int n=0;nGetAllRecNum();n++) { if(((CPerson*)pDoc->m_stuObArray.GetAt(n))->m_phone==m_strserach) { CString str; str.Format(\"号码为%s的基本信息为:\\n\姓名:%s\\n\电话:%s\\n\住址:%s\\n\QQ:%s\\n\\n\

10

m_strserach,((CPerson*)pDoc->m_stuObArray.GetAt(n))->m_name,m_strserach, ((CPerson*)pDoc->m_stuObArray.GetAt(n))->m_addr,((CPerson*)pDoc->m_stuObArray.GetAt(n))->m_qq ) ; MessageBox(str) ; break ; } } if(n==pDoc->GetAllRecNum()) { CString str ; str.Format(\"没有该学生的信息!\") ; MessageBox(str) ; } }

11

(2) 学生信息管理应用程序

课程设计题目2:一个简单的学生信息管理应用程序

一、设计目标与内容:

1了解Windows编程的基础知识,掌握MFC应用程序的基本知识; 2基本掌握面向对象程序设计的基本思路和方法; 3掌握用VC++开发应用程序的的一般步骤和方法;

4能够利用所学的基本知识, 设计一个简单的学生信息管理应用程序,具有以下功能:①实现学生信息的存储,可以用文件来实现。②编程实现学生信息的添加、删除、修改、浏览和查询等功能(必须实现的功能)。

二,设计要求:

用VC++进行编码,实现应用程序的功能。注重编码质量,代码要有适当的注释;

功能描述

创建一个通讯录应用程序,可以通过文件导入导出成员的信息,实现成员信息的添加、删除、修改、浏览和查询的功能(基本功能),改变背景颜色,添加动画,添加背景音乐(添加功能)。

基本思路

利用VisualC++,通过对一些常用控件的使用实现程序的一些常见的功能,通过对文件的操作来保存和删除一些信息,通过对按钮消息的响应,实现一些基本的功能

主要步骤

项目的创建

12

本例使用VisualC++6.0创建一个基于单文档的MFC AppWizard(exe)项目,项目的名字为Student,其中最后一步选择CFormView。

界面设计

按如下对话框资源的界面布置对话框

如后面的(图二)

代码的实现

1 定义一个CPerson类 在Person.h中编辑代码

class CPerson : public CObject {

public: CPerson(); virtual ~CPerson(); CPerson(CString num,CString name,BOOL sex,CTime birth,CString school,CString clas); void Serialize(CArchive&ar); public: CString m_num; CString m_name; BOOL m_sex; CTime m_birth; CString m_school; CString m_class; DECLARE_SERIAL(CPerson) };

在Person.cpp中编辑代码

CPerson::CPerson(CString num,CString name,BOOL sex,CTime birth,CString school,CString clas) { m_num = num; m_name = name; m_sex = sex; m_birth = birth;

13

m_school = school; m_class = clas; }

IMPLEMENT_SERIAL(CPerson,CObject,1) void CPerson::Serialize(CArchive &ar) { if(ar.IsStoring()) ar<>m_num>>m_name>>m_sex>>m_birth>>m_school>>m_class; }

2在Student.h中编辑代码 virtual ~CStudentDoc(); CPerson* GetSTUDENTINFORAt(int nIndex); int GetAllRecNum(void); CObArray m_stuObArray; 在Student.cpp中编辑代码 CStudentDoc::~CStudentDoc() { int nIndex = GetAllRecNum() ; while(nIndex--) delete m_stuObArray.GetAt(nIndex) ; m_stuObArray.RemoveAll() ; }

void CStudentDoc::Serialize(CArchive& ar) { if (ar.IsStoring()) { m_stuObArray.Serialize(ar) ; } else { m_stuObArray.Serialize(ar) ; }

14

}

3 定义一个列表控件的变量 CListCtrl m_list_ctrl; AddressView.cpp中的初始化函数OnInitialUpdate()

void CStudentView::OnInitialUpdate() { CFormView::OnInitialUpdate(); GetParentFrame()->RecalcLayout(); ResizeParentToFit(); m_gif.Load(MAKEINTRESOURCE(IDR_GIF1),_T(\"gif\"));//加载动画 m_gif.Draw(); if(IsFirst)// //判断是否是第一次打开,在CAddressView()中初始化IsFirst=TRUE; { IsFirst=FALSE; m_strnum = \"007\" ; m_strname = \" 张三\" ; if(!MG) CheckRadioButton(IDC_RADIO1,IDC_RADIO2,IDC_RADIO2);//判断被选中的单选按钮 else CheckRadioButton(IDC_RADIO1,IDC_RADIO2,IDC_RADIO1); UpdateData(FALSE); m_comschool.AddString(\"计算机学院\") ; m_comschool.AddString(\"理学院\") ; m_strschool = \" \" ; m_comclass.AddString(\"网络工程\") ; m_comclass.AddString(\"软件工程\") ; m_comclass.AddString(\"计算机科学与技术\") ; m_strclass = \" \" ;

15

m_comclass.AddString(\"应用数学\") ; m_comclass.AddString(\"应用物理\") ; m_strbirth = CTime(1971,9,18,0,0,0) ; m_list_ctrl.SetExtendedStyle(LVS_EX_GRIDLINES|LVS_EX_FULLROWSELECT|LVS_EX_ONECLICKACTIVATE);//设置列表控件的扩展风格 CString strHeader[6] = {\"学号\姓名\性别\出生年月\学院\专业\ int nWidth[6] = {100,80,60,140,140,140} ; for(int nCol=0;nCol<6;nCol++) m_list_ctrl.InsertColumn(nCol,strHeader[nCol],LVCFMT_LEFT,nWidth[nCol]) ; UpdateData(FALSE) ; } }

响应添加按钮的代码

void CStudentView::OnButtonAdd() { // TODO: Add your control notification handler code here CStudentDoc* pDoc = GetDocument(); UpdateData() ; LVFINDINFO info ; info.flags = LVFI_PARTIAL|LVFI_STRING ; info.psz = m_strnum ; if(m_list_ctrl.FindItem(&info)!=-1) { CString str ; str.Format(\"学号为%s的学生的基本信息已添加过!\ MessageBox(str) ;

16

return ; } int nIndex = m_list_ctrl.InsertItem(m_list_ctrl.GetItemCount(),m_strnum) ; m_list_ctrl.SetItemText(nIndex,1,m_strname) ; if(!MG) { m_list_ctrl.SetItemText(nIndex,2,\"男\") ; } else { m_list_ctrl.SetItemText(nIndex,2,\"女\") ; } m_list_ctrl.SetItemText(nIndex,3,m_strbirth.Format(\"%Y-%m-%d\")) ; m_list_ctrl.SetItemText(nIndex,4,m_strschool) ; m_list_ctrl.SetItemText(nIndex,5,m_strclass) ; UpdateData(TRUE) ; CPerson *pStudent = new CPerson(m_strnum,m_strname,MG,m_strbirth,m_strschool,m_strclass); pDoc->m_stuObArray.Add(pStudent) ; m_strtotalnum = pDoc->m_stuObArray.GetSize(); UpdateData(false) ; pDoc->SetModifiedFlag() ; pDoc->UpdateAllViews(NULL) ; }

添加完后再列表控件中显示的

17

响应删除按钮的代码

首先在列表控件中选择你想要删除的那一列,然后选侧删除,代码如下,定义一个public int item;的变量,先让列表控件响应NM_CLICK消息

void CStudentView::OnClickList1(NMHDR* pNMHDR, LRESULT* pResult) { // TODO: Add your control notification handler code here LV_HITTESTINFO* pHitTestInfo = (LV_HITTESTINFO*)pNMHDR; item = pHitTestInfo->iItem; *pResult = 0; }

void CStudentView::OnButtonDelete() { // TODO: Add your control notification handler code here CStudentDoc* pDoc = GetDocument(); if(item!=LB_ERR) //判断列表框查询是否正确 { delete (CPerson*)pDoc->m_stuObArray.GetAt(item) ; pDoc->m_stuObArray.RemoveAt(item); m_list_ctrl.DeleteItem(item); m_strtotalnum = pDoc->m_stuObArray.GetSize(); UpdateData(false) ;

18

}

} else

return ;

pDoc->SetModifiedFlag() ;

响应修改按钮的代码

void CStudentView::OnButtonXiugai() { // TODO: Add your control notification handler code here CStudentDoc* pDoc = GetDocument(); UpdateData() ; LVFINDINFO info ; info.flags = LVFI_PARTIAL|LVFI_STRING ; info.psz = m_strnum ; if(m_list_ctrl.FindItem(&info)!=-1) { CString str ; str.Format(\"学号为%s的学生的基本信息已添加过!\ MessageBox(str) ; return ; } m_list_ctrl.InsertItem(item,m_strnum) ; m_list_ctrl.SetItemText(item,1,m_strname) ; if(!MG) { m_list_ctrl.SetItemText(item,2,\"男\") ; } else { m_list_ctrl.SetItemText(item,2,\"女\") ; } m_list_ctrl.SetItemText(item,3,m_strbirth.Format(\"%Y-%

19

m-%d\")) ; m_list_ctrl.SetItemText(item,4,m_strschool) ; m_list_ctrl.SetItemText(item,5,m_strclass) ; // UpdateData(TRUE) ; CPerson *pStudent = CPerson(m_strnum,m_strname,MG,m_strbirth, m_strschool,m_strclass); pDoc->m_stuObArray.Add(pStudent) ; m_strtotalnum = pDoc->m_stuObArray.GetSize(); UpdateData(false) ; pDoc->SetModifiedFlag() ; pDoc->UpdateAllViews(NULL) ; }

new

响应浏览按钮的代码

void CStudentView::OnButtonSee() { m_list_ctrl.DeleteAllItems() ; CStudentDoc* pDoc = GetDocument(); CString str_sex,str_birth ; for(int n=0;nGetAllRecNum();n++) { if(pDoc->GetSTUDENTINFORAt(n)->m_sex) str_sex = \"女\" ; else str_sex = \"男\" ; str_birth = pDoc->GetSTUDENTINFORAt(n)->m_birth.Format(\"%Y-%m-%d\"); m_list_ctrl.InsertItem(n,pDoc->GetSTUDENTINFORAt(n)->m_num); m_list_ctrl.SetItemText(n,1,pDoc->GetSTUDENTINFORAt(n)->m_name) ; m_list_ctrl.SetItemText(n,2,str_sex) ; m_list_ctrl.SetItemText(n,3,str_birth) ;

20

m_list_ctrl.SetItemText(n,4,pDoc->GetSTUDENTINFORAt(n)->m_school) ; m_list_ctrl.SetItemText(n,5,pDoc->GetSTUDENTINFORAt(n)->m_class) ; } m_strtotalnum = pDoc->m_stuObArray.GetSize(); UpdateData(false) ; }

响应查找按钮的代码

输入你要查询的电话号码(如2002)

void CStudentView::OnButtonSearch() { // TODO: Add your control notification handler code here CStudentDoc* pDoc = GetDocument(); UpdateData(TRUE) ; for(int n=0;nGetAllRecNum();n++) { if(((CPerson*)pDoc->m_stuObArray.GetAt(n))->m_num==m_strsearch) { CString str,str_sex,str_birth ; if(pDoc->GetSTUDENTINFORAt(n)->m_sex) str_sex = \"女\" ; else

21

str_sex = \"男\" ; str_birth = pDoc->GetSTUDENTINFORAt(n)->m_birth.Format(\"%Y-%m-%d\"); str.Format(\"学号为%s的学生的基本信息为:\\n\姓名:%s\\n\学号:%s\\n\性别:%s\\n\出生年月:%s\\n\学院:%s\\n\专业:%s\\n\\n\ m_strsearch,((CPerson*)pDoc->m_stuObArray.GetAt(n))->m_name,m_strsearch,str_sex,str_birth, ((CPerson*)pDoc->m_stuObArray.GetAt(n))->m_school,((CPerson*)pDoc->m_stuObArray.GetAt(n))->m_class ) ; MessageBox(str) ; break ; } } if(n==pDoc->GetAllRecNum()) { CString str ; str.Format(\"没有该学生的信息!\") ; MessageBox(str) ; } }

响应Music按钮的代码

void CStudentView::OnButtonMusic() { // TODO: Add your control notification handler code here PlaySound(MAKEINTRESOURCE(IDR_WAVE1),AfxGetResourceHandle(),SND_RESOURCE | SND_ASYNC | SND_LOOP); }

22

Window课程设计心得体会

通过这两周的学习,我感觉到我学会了很多东西,而这些东西,要是在平时的话,可以说我根本就没有办法去学它,去看它,更别说去学好它了。加大了我们的动手能力,使得我们不得不去看书,不得不去花更多的时间学习它,把自己不懂得地方搞懂,让自己得到升华!

两周的课设,让我发现自己还有很多地方不懂,通过和同学们的沟通,对C++及VisualC++似乎有了一种新的认识,或许并不像有些人所说的那样,枯燥无味,或许只要我们全身心的投入,它也会变的津津有味,给我们的大学生活或是将来带来更多的乐趣!有些事情看上去很难,那只是我们没有经历过,只要有一颗红心在,没有什么不可以的。

这样的机会很难得,所以说,以后如果要是还有这样的机会的话,我们一定要好好把握住,别让它过去之后才知道去珍惜它!

23

图一

图二

24

25

因篇幅问题不能全部显示,请点此查看更多更全内容

Copyright © 2019- efsc.cn 版权所有

违法及侵权请联系:TEL:199 1889 7713 E-MAIL:2724546146@qq.com

本站由北京市万商天勤律师事务所王兴未律师提供法律服务