ImageVerifierCode 换一换
格式:DOCX , 页数:26 ,大小:24.99KB ,
资源ID:3784115      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bingdoc.com/d-3784115.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(学生信息管理应用程序.docx)为本站会员(b****4)主动上传,冰点文库仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰点文库(发送邮件至service@bingdoc.com或直接QQ联系客服),我们立即给予删除!

学生信息管理应用程序.docx

1、学生信息管理应用程序VC课 程设 计报告 学生信息管理应用程序设计报告一、 实验目的与要求1.实验目的:目的是了解程序设计语言的基础知识,掌握MFC应用程序的基本知识,掌握面向对象程序设计的基本思路和方法,掌握用VC+开发应用程序的的一般步骤和方法。2.实验要求:能够利用所学的基本知识, 设计一个简单的学生信息管理应用程序,具有以下功能:1、实现学生信息的存储,用文件来实现。2、编程实现学生信息的添加、删除、修改、浏览和查询等功能。二、完成情况学生信息管理应用程序包括了学生的基本信息。在本程序中每个学生的信息有:学号、姓名、性别、等。本程序以一个单文档的形式实现了学生信息的存储(用文件来实现)

2、和学生信息的添加、删除、修改、浏览和查询等功能。并当用户单击这些按钮时会根据用户的操作(学号是否重号,姓名是否为空,名字是否为空等)反馈给用户一个信息,以显示用户的这一次操作的合理性。三、 实验的基本思路总体来说本程序的基本思路是:程序中利用了表单视图和列表视图(以这两个视图来静态切分窗口),程序中的数据传输是通过Cdocument:UpdateAllViews和Cview:OnUpdate的相互作用来实现的,而且为了避免传输的相互干涉,采用提示号来区分,即给1Hint变量赋予不同的值,程序代码会根据1Hint的值的不同执行不同的代码,并使数据显示出来。在实现保存功能时用到了简单数组集合类,并

3、利用了CstringArray序列化的一个内部机制实现数据的保存。打开一个已经保存过的文件时通过1Hint值的判断来执行一个双循环,通过此双循环代码可以让一个由简单数组集合类定义的变量中的数据读取出来,并在列表视图中显示。为了实现一个列表项基本信息在左面的表单视图的控件中显示,需要视图和文档数据的交换,此程序以在Doc类中事先定义好的变量为媒介,通过给这些变量赋值来实现数据在文档和视图之间的回传。四、设计的步骤及主要代码首先为此程序(工程名为TiMu1)创建一个表单视图,在用MFC AppWizard创建的第六步中选择CFormView作为文档应用程序视图类的基类。然后再添加一个CListVi

4、ew类的派生类,派生类名为CListCtrlView,此派生类将在切分窗口使用到。还有一点很重要,要使添加的派生类正确编译,那么必须在StdAfx.h头文件中有下列语句才能保证程序正确编译。#inciude”afxcview.h”为CmainFrame添加OnCreateClient消息映射和和一个CsplitterWnd形的变量,变量名为m_wndSplitter,并在函数中添加如下代码:BOOL CMainFrame:OnCreateClient(LPCREATESTRUCT lpcs, CCreateContext* pContext) ModifyStyle(0,WS_VSCROLL,

5、0);/让窗口有水平,垂直滚动条ModifyStyle(0,WS_HSCROLL,0);CRect rect;GetWindowRect(&rect);m_wndSplitter.CreateStatic(this,1,2);/静态切分窗口 m_wndSplitter.CreateView(0,0,RUNTIME_CLASS(CTiMu1View),CSize(0,0),pContext);/为相应的窗格指定一个视图类 m_wndSplitter.CreateView(0,1,RUNTIME_CLASS(CListCtrlView),CSize(0,0),pContext);m_wndSpli

6、tter.SetColumnInfo(0,rect.Width()/3,10);/设置窗格的宽度.m_wndSplitter.SetColumnInfo(1,rect.Width()/2,10);m_wndSplitter.RecalcLayout();/重新布局return TRUE; return CFrameWnd:OnCreateClient(lpcs, pContext);在表单视图中添加程序所需要的几个控件并在类向导中设置控件的关联变量,再为各个按钮控件(添加、删除、修改、浏览和查询)映射BN_CLICKED(单击)消息映射,取默认的函数名。各个函数中添加的代码如下:添加功能:vo

7、id CTiMu1View:OnButtonAdd() UpdateData(); m_strName.TrimLeft(); m_strNo.TrimLeft(); if(m_strName.IsEmpty() MessageBox(必须要有姓名!); return; if(m_strNo.IsEmpty() MessageBox(必须要有学号!); return; CTiMu1Doc* pDoc = GetDocument(); ASSERT_VALID(pDoc); pDoc-no=m_strNo; pDoc-name=m_strName; pDoc-age=m_strAge; if(m

8、_bMale) pDoc-sex=男; else pDoc-sex=女; /下面的代码传递一个“1”的消息 /以实现调用CListCtrlView函数中的OnUpdate函数 /并通过判断 lHint 的值为 1 来实现表单控件的数据 /在列表里显示 pDoc-UpdateAllViews(NULL,1,NULL); /下面的代码是在要添加的数据在右面的列表中显示后,使左面的控件恢复“空白”的状态,以方便用户的下一次添加数据 m_strNo=; m_strName=; m_strAge=; UpdateData(FALSE); 删除功能:void CTiMu1View:OnButtonDel(

9、) CTiMu1Doc* pDoc = GetDocument(); ASSERT_VALID(pDoc); /*下面的代码传递一个“2”的消息以实现调用CListCtrlView函数中的OnUpdate函数并通过判断 lHint 的值为 2 来实现在列表里删除一个列表项的信息*/ pDoc-UpdateAllViews(NULL,2,NULL);修改功能:void CTiMu1View:OnButtonXiugai() CTiMu1Doc* pDoc = GetDocument(); ASSERT_VALID(pDoc); /*下面的代码传递一个“3”的消息以实现调用CListCtrlVie

10、w函数中的OnUpdate函数并通过判断 lHint 的值为 3 来实现在列表里修改一个列表项的信息并把修改后的信息覆盖到原来的那个列表项上*/ pDoc-UpdateAllViews(NULL,3,NULL); 查询功能:void CTiMu1View:OnButtonChaxun() / TODO: Add your control notification handler code here CTiMu1Doc* pDoc = GetDocument(); ASSERT_VALID(pDoc); /*下面的代码传递一个“4”的消息以实现调用CListCtrlView函数中的OnUpdat

11、e函数并通过判断 lHint 的值为 4 来实现在列表里查询一个列表项的信息并通过弹出一个对话框显示所要查询的一个学生信息*/ pDoc-UpdateAllViews(NULL,4,NULL); 浏览功能:void CTiMu1View:OnButtonLiulan() / TODO: Add your control notification handler code here CTiMu1Doc* pDoc = GetDocument(); ASSERT_VALID(pDoc); pDoc-UpdateAllViews(NULL,5,NULL); 说明:上面的代码传递一个“n”(n为int

12、形变量并根据不同的函数取不同的值)的消息以实现调用CListCtrlView函数中的OnUpdate函数,并通过判断 lHint 的值来实现在列表里添加、删除、修改、浏览或查询一个列表项的信息。UpdateAllViews(NULL,n,NULL)函数所传递的1Hint的不同的值需要一个相应的函数用来接收和判断的值,并通过1Hint值的不同执行不同的代码,这样的函数需要在 ClistCtrlView类中映射OnUpdate消息来实现,函数的代码为:void CListCtrlView:OnUpdate(CView* pSender, LPARAM lHint, CObject* pHint)

13、CListCtrl& m_ListCtrl=GetListCtrl(); m_ListCtrl.SetExtendedStyle(LVS_EX_FULLROWSELECT);/*设置在单击列表项时,整行选择。下面的代码是利用1Hint的不同的值来建立数据的传输在视图中根据1Hint的值做出不同的动作,并在每个if语句中通过一个for循环使列表中的数据保存到一个简单数组集合类中,即保存到了在Doc类中定义的 CStringArray m_strContents对象中。在每次调用保存代码时,必须调用 pDoc-m_strContents.RemoveAll(); 语句以使m_strContents

14、对象中数据清零,防止在保存后,然后在打开时数据出现错误*/ /这句话在出现错误后,好久才想出来! if(lHint=1) CTiMu1Doc*pDoc=(CTiMu1Doc*)GetDocument(); ASSERT_VALID(pDoc); /m_ListCtrl.DeleteAllItems(); LVFINDINFO info; info.flags=LVFI_PARTIAL|LVFI_STRING; info.psz=pDoc-no; if(m_ListCtrl.FindItem(&info)!=-1) CString str; str.Format(不能添加学号相同的学生信息!n学

15、号为“%s”的学生基本信息已添加过!,pDoc-no); MessageBox(str,警告,MB_ICONSTOP|MB_OKCANCEL); return; m_ListCtrl.InsertItem(0,); m_ListCtrl.SetItemText(0,0,pDoc-no); m_ListCtrl.SetItemText(0,1,pDoc-name); m_ListCtrl.SetItemText(0,2,pDoc-sex); m_ListCtrl.SetItemText(0,3,pDoc-age); CString str1=pDoc-no; CString str2; str2

16、.Format(添加了学号为“%s”的学生信息!nt添加成功!nt,str1); MessageBox(str2,添加结果,MB_ICONWARNING|MB_OKCANCEL); int nCount=m_ListCtrl.GetItemCount(); pDoc-m_strContents.RemoveAll();/*这句话的作用是使m_strContents对象中数据清零,防止在保存后,然后在打开时数据出现错误*/ for(int n=0;nm_strContents.Add(m_ListCtrl.GetItemText(n,0); pDoc-m_strContents.Add(m_Li

17、stCtrl.GetItemText(n,1); pDoc-m_strContents.Add(m_ListCtrl.GetItemText(n,2); pDoc-m_strContents.Add(m_ListCtrl.GetItemText(n,3); pDoc-SetModifiedFlag(TRUE);/设置m_bModified的值为TRUE。 if(lHint=2) CDelDlg deldlg; if(IDOK!=deldlg.DoModal()return; deldlg.m_strDelNo.TrimLeft(); if(deldlg.m_strDelNo.IsEmpty()

18、 MessageBox(必须要有学号!,警告,MB_ICONSTOP|MB_OKCANCEL); return; LVFINDINFO info; info.flags=LVFI_PARTIAL|LVFI_STRING; info.psz=deldlg.m_strDelNo; if(m_ListCtrl.FindItem(&info)!=-1) int nDel=m_ListCtrl.FindItem(&info); m_ListCtrl.DeleteItem(nDel); CString str; str.Format(删除了学号为“%s”的学生信息!nt删除成功!,deldlg.m_str

19、DelNo); MessageBox(str,删除结果,MB_ICONWARNING|MB_OKCANCEL); else CString str2; str2.Format(没有学号为%s的学生基本信息!,deldlg.m_strDelNo); MessageBox(str2,?,MB_ICONQUESTION|MB_OKCANCEL); return; CTiMu1Doc*pDoc=(CTiMu1Doc*)GetDocument(); ASSERT_VALID(pDoc); int nCount=m_ListCtrl.GetItemCount(); pDoc-m_strContents.R

20、emoveAll(); for(int n=0;nm_strContents.Add(m_ListCtrl.GetItemText(n,0); pDoc-m_strContents.Add(m_ListCtrl.GetItemText(n,1); pDoc-m_strContents.Add(m_ListCtrl.GetItemText(n,2); pDoc-m_strContents.Add(m_ListCtrl.GetItemText(n,3); pDoc-SetModifiedFlag(TRUE);/设置m_bModified的值为TRUE。 if(lHint=3) CXiuGaiDlg

21、 dlg; if(IDOK!=dlg.DoModal()return; dlg.m_strXiuGaiNo.TrimLeft(); if(dlg.m_strXiuGaiNo.IsEmpty() MessageBox(必须要有学号!,警告,MB_ICONSTOP|MB_OKCANCEL); return; LVFINDINFO info; info.flags=LVFI_PARTIAL|LVFI_STRING; info.psz=dlg.m_strXiuGaiNo; int nXGai; if(m_ListCtrl.FindItem(&info)!=-1) nXGai=m_ListCtrl.Fi

22、ndItem(&info);/利用此函数返回所需要的一个列表项的索引号 else CString str2; str2.Format(没有学号为“%s”的学生基本信息!,dlg.m_strXiuGaiNo); MessageBox(str2,?,MB_ICONQUESTION|MB_OKCANCEL); return; MessageBox(请输入要修改的学生基本信息!); CStuInfoDlg dlg2; if(IDOK!=dlg2.DoModal()return; LVFINDINFO info1; info1.flags=LVFI_PARTIAL|LVFI_STRING; info1.

23、psz=dlg2.m_strNo; if(m_ListCtrl.FindItem(&info1)!=-1) CString str; str.Format(不能修改为学号相同的信息!n学号为“%s”的学生基本信息已存在!nt修改失败!,dlg2.m_strNo); MessageBox(str,警告,MB_ICONSTOP|MB_OKCANCEL); return; else m_ListCtrl.DeleteItem(nXGai); m_ListCtrl.InsertItem(nXGai,); m_ListCtrl.SetItemText(nXGai,0,dlg2.m_strNo); m_L

24、istCtrl.SetItemText(nXGai,1,dlg2.m_strName); if(dlg2.m_bMale) m_ListCtrl.SetItemText(nXGai,2,男); else m_ListCtrl.SetItemText(nXGai,2,女); m_ListCtrl.SetItemText(nXGai,3,dlg2.m_strAge); CString str1=dlg2.m_strNo; CString str2; str2.Format(修改了学号为“%s”的学生信息!n新学号为“%s”!nt修改成功!,dlg.m_strXiuGaiNo,str1); Mess

25、ageBox(str2,修改结果,MB_ICONWARNING|MB_OKCANCEL); CTiMu1Doc*pDoc=(CTiMu1Doc*)GetDocument(); ASSERT_VALID(pDoc); pDoc-m_strContents.RemoveAll(); int nCount=m_ListCtrl.GetItemCount(); for(int n=0;nm_strContents.Add(m_ListCtrl.GetItemText(n,0); pDoc-m_strContents.Add(m_ListCtrl.GetItemText(n,1); pDoc-m_str

26、Contents.Add(m_ListCtrl.GetItemText(n,2); pDoc-m_strContents.Add(m_ListCtrl.GetItemText(n,3); pDoc-SetModifiedFlag(TRUE);/设置m_bModified的值为TRUE。 if(lHint=4) CChaXunDlg dlg; if(IDOK!=dlg.DoModal()return; dlg.m_strChaXunNo.TrimLeft(); if(dlg.m_strChaXunNo.IsEmpty() MessageBox(必须要有学号!,警告,MB_ICONSTOP|MB_

27、OKCANCEL); return; LVFINDINFO info; info.flags=LVFI_PARTIAL|LVFI_STRING; info.psz=dlg.m_strChaXunNo; if(m_ListCtrl.FindItem(&info)!=-1) int nFinded=m_ListCtrl.FindItem(&info); CString str1,str2,str3,str4,str; str1=m_ListCtrl.GetItemText(nFinded,0); str2=m_ListCtrl.GetItemText(nFinded,1); str3=m_List

28、Ctrl.GetItemText(nFinded,2); str4=m_ListCtrl.GetItemText(nFinded,3); str.Format(要查询的学生信息为:nn学号:%snn姓名:%snn性别:%snn年龄:%snn查询成功!,str1,str2,str3,str4); MessageBox(str,查询结果,MB_ICONWARNING|MB_OKCANCEL); return; else CString str5; str5.Format(没有学号为“%s”的学生基本信息!,dlg.m_strChaXunNo); MessageBox(str5,?,MB_ICONQ

29、UESTION|MB_OKCANCEL); return; if(lHint=5) MessageBox(学生的基本信息已经全部显示在右边列表视图中!ntt请浏览!); if(lHint=6) m_judge=FALSE;/*设置m_judge为FALSE的目的是使程序在打开保存后的文档时不再调用CListCtrlView:OnInitialUpdate()函数中的if语句中的代码以防止再次在列表中再添加一个 标题头。*/ m_ListCtrl.DeleteAllItems();/删除列表中的所有列表项 CTiMu1Doc*pDoc=(CTiMu1Doc*)GetDocument(); ASSERT_VALID(pDoc); int nCount1=pDoc-m_strContents.GetSize();

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2