




已阅读5页,还剩20页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
面向对象程序设计课程设计成果设计题目: 电话薄管理系统 目 录一、 设计目的和要求31.1设计目的31.2设计要求3二、总体设计方案42.1系统分析4 2.1.1系统设计意义4 2.1.2系统设计需求分析4 2.1.3MFC简介42.2系统组成框图52.3各模块功能设计6 2.3.1各模块功能6 2.3.2各文本框功能设计6三、详细系统设计63.1界面设计6 3.1.1MFC框架界面设计63.2数据库设计73.3模块功能说明73.3.1控件的通知消息机制73.3.2各按钮功能8四、调试与测试9 4.1调试分析与讨论94.2实际完成情况说明104.3本设计改进建议11五、源程序清单12六、总结23七、主要参考文献24一、设计目的和要求1.1设计目的随着计算机技术的飞速发展,计算机的普及,利用计算机实现通讯管理已经是这一趋势的必然要求。计算机管理具有无法比拟的检索迅速、可靠性高、存储量大、低成本、方便快捷的巨大优势。这给人们带来极大的方便,尤其是商务人士,免去了人们记忆大量信息的痛苦。而一个高效地信息管理系统可以为人们的生活带来极大的便利。1.通过这次课程设计,实际掌握面向对象程序设计方法,了解C+面向对象程序设计的方法与技巧,有效地、深刻地理解课程设计的内容,体会理论、方法和设计原则,培养自己分析思考和解决问题的能力,使学生具备面向对象程序设计开发工具设计实际系统的能力。 2.VC+6.0是Microsoft公司推出的一个功能强大的可视化软件开发工具,它是目前为止在Windows环境下进行大型软件开发的首选。通过这次课程设计,在熟练掌握C+面向对象设计的程序设计基础上,掌握VC+6.0软件的使用,通过自学MFC,完成简单的二维平面的绘画,增强学生软件开发能力。3.通过这次课程设计,尝试利用所学的知识 解决实际问题,学以致用。MFC是建立自C+的基础上的,所以C/C+语言的重要性不言而喻。在进行课程设计中,深入的理解C+语言的封装性、派生性、重载性的优势,理解MFC的消息处理机制,提高学生工程实践能力。1.2设计要求1.设计一个简单的电话薄管理系统,并使用VC+6.0做出可视化界面,该电话薄默认存储了一些联系人信息,该系统能显示联系人的姓名、电话、邮编和地址。2.具有信息删除和添加功能,能够添加和删除联系人,当选中某个联系人姓名时,点击“删除”,就可以删除该联系人和与之相关的信息。当点击“添加”时,可以向电话薄中添加新的联系人,并编辑联系人姓名、电话、地址和邮编,点击“更新信息”时,就成功添加了新的联系人。3.具有查询信息的功能,可以按电话查找或按姓名查找通讯录中的联系人。输入联系人姓名,并点击“按姓名查找”,就能显示该联系人的信息,包括同名的联系人。输入联系人电话,并点击“按电话查找”,就能显示该联系人信息。4.在进行程序设计时,定义相关的类,为相应控件添加时间响应函数。二、总体方案设计该系统基于VC+6.0开发环境,利用MFC做出电话薄系统的可视化界面。首先要设计出电话薄的总体框架,设计其功能:添加、删除、更新信息、姓名、电话、地址、邮编。并为其添加相应控件,建立数据库,链接数据库。最后为其控件添加响应的响应函数,并完成程序设计。2.1系统分析2.1.1系统设计意义管理信息系统是一个将企业生产和经营中的各种内、外信息进行收集、整理、传递,并有序地存储,以用于经营和决策,是企业增强效率的信息系统。它能够使企业更加及时、准确、全面、详细地了解所需哟的信息数据。同时管理信息系统对各种信息数据的进一步加工,能使企业领导层的生产、经营、管理决策依据更加充分,具有合理性、科学性,从而方便人们管理各种信息。随着社会的发展、关系广泛,人们之间采用电话沟通越来越多,电话号码也就越来越多。要求查找一个电话号码也要节省时间和精力,要快捷方便。因此,这次课程设计设计了一款低成本、可靠性好、管理方便的电话薄管理系统。2.1.2系统设计需求分析话薄是日常工作生活中常用的记录工具,主要是对个人的人脉通讯信息的管理,使个人信息管理更加科学化、便捷化。要能实现通讯录的信息管理,基本信息包括:姓名、电话号码、邮编和地址;利用数据库的强大的管理功能,可以大大提高个人查找所需基本信息的效率。本系统应该满足以下几点:(1)操作界面友好,信息查询灵活、方便、快捷、准确、数据存储安全可靠;(2)对联系人的操作简单,可以方便地进行建立、修改和删除;(3)可以根据需要修改联系人的基本信息,并实现系统的易维护性和易操作性。2.1.3 MFC简介MFC,微软基础类(Microsoft Foundation Classes),同VCL类似,是一种应用程序框架,随微软Visual C+ 开发工具发布,该类库提供一组通用的可重用的类库供开发人员使用。大部分类均从CObject 直接或间接派生,只有少部分类例外。 MFC 应用程序的总体结构通常由开发人员从MFC类派生的几个类和一个CWinApp类对象(应用程序对象)组成。MFC 提供了MFC AppWizard 自动生成框架。 Windows 应用程序中,MFC 的主包含文件为Afxwin.h。 此外MFC的部分类为MFC/ATL 通用,可以在Win32 应用程序中单独包含并使用这些类。 由于它的易用性,初学者常误认为VC+开发必须使用MFC。这种想法是错误的。作为Application Framework,MFC的使用只能提高某些情况下的开发效率,只起到辅助作用,而不能替代整个Win32 程序设计。2.2系统组成框图电话薄管理系统的功能结构见下图:包含查询记录模块、更新记录模块、输出信息模块、数据库模块等。电话薄信息管理系统输出信息模块个人信息模块查询记录模块关于清除信息更新信息删除个人信息找添加个人信息按电话查找按姓名查找电话薄管理系统功能模块图2.3各模块功能设计2.3.1各模块功能1.查询记录模块:可以实现多种方式的模糊查询,可以通过姓名、电话等查询结果,可在列表中显示出来,其分别对应相关函数。2.个人信息模块:为便于通讯记录的管理,本系统能通过操作界面进行添加、修改、删除记录。要实现应用程序对数据库的操作,还须向应用程序添加相关的操作代码。3.输出信息模块:用户可以通过人机界面,对数 据库中的记录进行逐条查询,通过最前、向前、向后、最后按钮,逐次显示电话薄中记录的信息,还可通过成员列表显示所有记录。4.数据库模块:系统中的数据通过数据库模块存入数据库,当进行记录的查询、修改、删除、添加等操作时,数据库模块从数据库中读取相应记录供给用户进行相应操作。2.3.2各文本框功能(1)静态文本框静态文本框一般都是对话框或其他窗口的子窗口,而且是可见的,用于显示文字说明。本系统中的静态文本框有姓名、电话、邮编、地址、请输入查找内容、查找记录和个人信息等。(2)编辑框编辑框是可以编辑的,在系统中,我们可以往其中输入相关信息,最后可以通过控件来对其进行修改。三、系统详细设计3.1界面设计3.1.1 MFC框架界面设计在进行界面设计时,用到了一些控件,主要有静态文本框、编辑框、按钮、列表框等,并为相应控件添加了响应函数,实现其相应的功能。最后生成的界面如图所示:3.2数据库设计系统中的数据通过数据库模块存入数据库,当进行记录的查询、修改、删除、添加等操作时,数据库模块从数据库中读取相应记录供给用户进行相应操作。本系统中通过void CPhoneBookDlg:DataInit()函数来对该系统进行初始化,并建立文件,存储数据。在进行数据库的操作流程设计时,操作流程图如下:添加返回单击否取消按钮录入基本信息单击单击检验数据是否合法提交 确定查询数据库是提交是否有通条记录否添加数据库添加记录流程图3.3模块功能说明3.3.1控件的通知消息机制 当控件有事件发生时,它会向父窗口发送通知消息。最常发生的事件就是鼠标单击了,此时控件会向父窗口发送BN_CLICKED消息,实际上也就是给父窗口发送WM_COMMAND消息,在wParam参数中包含有通知消息码(鼠标单击时的通知消息码就是BN_CLICKED)和控件ID,lParam参数中包含了控件的句柄。在MFC消息映射机制概述中,鸡啄米讲过,消息就是由三个部分组成:消息值、wParam参数和lParam参数。控件的消息映射宏的格式大致是:ON_通知消息码(nID, memberFun),nID参数是控件的ID,memberFun参数是消息处理函数名。例如,ON_BN_CLICKED(IDC_BUTTON1, &CDlg:OnBnClickedButton1)。此消息映射宏应添加到BEGIN_MESSAGE_MAP和END_MESSAGE_MAP之间。消息处理函数声明的语法形式为:afx_msg void memberFun()。3.3.2各按钮功能(1)处理“添加”按钮点击“添加”按钮后,在void CPhoneBookDlg:OnAdd()函数中,在链表的结尾添加一条记录,并将默认将新记录的姓名置为“新名字”,其它项为空。输入输出均为空,这只是一个过程。之后,我们可以添加联系人的相关信息。(2)处理“删除”按钮点击“删除”按钮后,在void CPhoneBookDlg:OnDelete()函数中,通过m_NameList.GetCurSel()得到所选记录在列表框中的序列号,最后确认要删除后,通过m_NameList.DeleteString(sel)在列表框中删除记录。删除完成后,并在结尾调用void CPhoneBookDlg:OnSelchangeNamelist()函数,移动指针到指定结点的位置。(3)处理“更新信息”按钮点击“更新信息”按钮后,在void CPhoneBookDlg:OnUpdate()函数中,完成修改当前记录的操作。首先通过m_NameList.GetCurSel()得到所选择记录在列表框中的序号,然后调用strcpy(char *, const char *)函数,将更新的数据从文本输入框复制到结点,最后完成信息更新的操作。(4)处理“全部清除”按钮点击“全部清除”按钮后,在void CPhoneBookDlg:OnClear()函数中,完成清除文本框中所有内容的操作。(5)处理“按姓名查找”按钮在“请输入查找内容”栏输入联系人姓名后,点击“按姓名查找”按钮,在void CPhoneBookDlg:OnSearchbyname()函数中,完成对联系人查找的操作。直接调用FindString函数查找并得到序号,若查找不到,则提示找不到,最后调用SetCurSel(sel)函数选中查找到的记录。(6)处理“按电话查找”按钮在“请输入查找内容”栏输入联系人电话号码后,点击“按电话查找”按钮,在void CPhoneBookDlg:OnSearchbyphone()函数中,完成对联系人查找的操作。通过m_NameList.GetCurSel()得到当前记录的序号,然后判断是否匹配成功,最后选中找到的记录。(7)处理“”按钮当点击右上角的“”按钮时,便退出系统。调用void CPhoneBookDlg:OnClose()函数,在程序结束时,能够将数据保存到系统中。通过fwrite(const void *, size_t, size_t, FILE *)函数将数据写入文件中,同时将指向节点的指针后移。最后在退出时保存数据。四、调试与测试4.1调试分析与讨论我们组做的是“电话薄管理系统”,在进行程序设计时,犯过一些错误。刚开始,对MFC的界面不太熟悉,花了几天时间来学习MFC的相关知识。刚开始犯的错误是建错了工程,以至于在建立类时总出错,浪费了几个小时才发现要建立基于对话框的程序。最后在完成程序设计后,肯定是不可能一下子就成功的,程序会出现各种各样的错误,导致不能编译通过。刚开始出现的第一个错误是:后来通过查阅资料才知道,是因为计算机丢失补丁,去网上下载了相关补丁就好了,接下来就是调试代码了。刚开始由于自己的粗心,代码中的类名敲错了,结果发现一直报错,找了好久才发现是自己不细心敲错了字母导致的。刚开始我和曾鹏讨论系统的功能,要调用那些函数,曾鹏想用ACCess中的数据库来做,我后来想到我们之前学过的C语言知识,有fopen()、fread()等函数,可以实现文件和信息的管理。经过讨论,我们决定用这种方式来建立数据库,省去了再弄Access的精力。这个程序讲的是信息管理,我们要管理手机联系人的信息,能够实现多种功能,说起来简单,做起来时不容易。在犯错误时,真的很后悔自己的编程功底不牢固,现在就需要付出更多的时间来弥补在做课程设计时,每一次的错误对我来说都是一次进步,只有把程序的错误解决了,才能理解程序的作用,自己动脑解决了每一个bug,都是很有成就感的事。有些人可以随口说出常用的函数,走了一条捷径,而不知道的人就要花时间去找那个函数,或者说自己花时间来写代码实现那个函数的功能。所以,在后面的调试过程中,我们都是认真分析思考每一个错误,直到成功编译通过为止。4.2实际完成的情况说明经过调试,最终能够实现对联系人信息的管理,可方便地进行建立、修改、删除,查找联系人;也可以根据需要修改联系人的基本信息,并实现系统的易维护性和易操作性。4.3本设计改进建议该系统可以实现预期的功能,但是为了体现智能化,可以在设计中加入打印、拨号等功能,当我们需要统计手机电话薄的信息时,点击“打印”按钮就可以将电话薄中的联系人信息打印出来。同时,我们可以选中打印部分我们想要的联系人信息,实现多功能。也可以在联系人信息中可以再详细一些,加入邮箱、公司等信息,还可以进行分组,方便日后管理。在进行程序设计时,可以对重要部分代码进行注释,在对每一个控件添加响应函数时,可以对其命名更加规范,使用相应的英文代替,方便阅读。另外,也要养成良好的代码风格,对重要部分代码进行注释。五、源程序清单/ CAboutDlg dialog used for App Aboutclass CAboutDlg : public CDialogpublic:CAboutDlg();/ Dialog Data/AFX_DATA(CAboutDlg)enum IDD = IDD_ABOUTBOX ;/AFX_DATA/ ClassWizard generated virtual function overrides/AFX_VIRTUAL(CAboutDlg)protected:virtual void DoDataExchange(CDataExchange* pDX); / DDX/DDV support/AFX_VIRTUAL/ Implementationprotected:/AFX_MSG(CAboutDlg)/AFX_MSGDECLARE_MESSAGE_MAP();CAboutDlg:CAboutDlg() : CDialog(CAboutDlg:IDD)/AFX_DATA_INIT(CAboutDlg)/AFX_DATA_INITvoid CAboutDlg:DoDataExchange(CDataExchange* pDX)CDialog:DoDataExchange(pDX);/AFX_DATA_MAP(CAboutDlg)/AFX_DATA_MAPBEGIN_MESSAGE_MAP(CAboutDlg, CDialog)/AFX_MSG_MAP(CAboutDlg)/ No message handlers/AFX_MSG_MAPEND_MESSAGE_MAP()/ CPhoneBookDlg dialogCPhoneBookDlg:CPhoneBookDlg(CWnd* pParent /*=NULL*/): CDialog(CPhoneBookDlg:IDD, pParent)/AFX_DATA_INIT(CPhoneBookDlg)m_szAddress = _T();m_szCode = _T();m_szName = _T();m_szPhone = _T();m_szSearchContent = _T();/AFX_DATA_INIT/ Note that LoadIcon does not require a subsequent DestroyIcon in Win32m_hIcon = AfxGetApp()-LoadIcon(IDR_MAINFRAME);void CPhoneBookDlg:DoDataExchange(CDataExchange* pDX) 对话框控件和成员变量交换的函数CDialog:DoDataExchange(pDX);/AFX_DATA_MAP(CPhoneBookDlg)DDX_Control(pDX, IDC_ADD, m_Button_Add);DDX_Control(pDX, IDC_NAME, m_IDC_Name);DDX_Control(pDX, IDC_NAMELIST, m_NameList);DDX_Text(pDX, IDC_ADDRESS, m_szAddress);DDX_Text(pDX, IDC_CODE, m_szCode);DDX_Text(pDX, IDC_NAME, m_szName);DDX_Text(pDX, IDC_PHONE, m_szPhone);DDX_Text(pDX, IDC_SEARCHCONTENT, m_szSearchContent);/AFX_DATA_MAPBEGIN_MESSAGE_MAP(CPhoneBookDlg, CDialog)/AFX_MSG_MAP(CPhoneBookDlg)ON_WM_SYSCOMMAND()ON_WM_PAINT()ON_WM_QUERYDRAGICON()ON_BN_CLICKED(IDC_UPDATE, OnUpdate)ON_BN_CLICKED(IDC_ADD, OnAdd)ON_LBN_SELCHANGE(IDC_NAMELIST, OnSelchangeNamelist)ON_BN_CLICKED(IDC_DELETE, OnDelete)ON_BN_CLICKED(IDC_CLEAR, OnClear)ON_WM_CLOSE()ON_BN_CLICKED(IDC_ABOUT, OnAbout)ON_BN_CLICKED(IDC_SEARCHBYNAME, OnSearchbyname)ON_BN_CLICKED(IDC_SEARCHBYPHONE, OnSearchbyphone)/AFX_MSG_MAPEND_MESSAGE_MAP()/ CPhoneBookDlg 消息处理函数BOOL CPhoneBookDlg:OnInitDialog()CDialog:OnInitDialog();/ Add About. menu item to system menu./ IDM_ABOUTBOX must be in the system command range.ASSERT(IDM_ABOUTBOX & 0xFFF0) = IDM_ABOUTBOX);ASSERT(IDM_ABOUTBOX AppendMenu(MF_SEPARATOR);pSysMenu-AppendMenu(MF_STRING, IDM_ABOUTBOX, strAboutMenu);/ Set the icon for this dialog. The framework does this automatically/ when the applications main window is not a dialogSetIcon(m_hIcon, TRUE);/ Set big iconSetIcon(m_hIcon, FALSE);/ Set small icon/ TODO: Add extra initialization hereDataInit();/调用数据初始化函数(自定义函数)return TRUE; / return TRUE unless you set the focus to a controlvoid CPhoneBookDlg:OnSysCommand(UINT nID, LPARAM lParam)/ 对话框的系统菜单命令,包括关闭对话框,最小化最大化,弹出关于对话框等等if (nID & 0xFFF0) = IDM_ABOUTBOX)CAboutDlg dlgAbout;dlgAbout.DoModal();elseCDialog:OnSysCommand(nID, lParam);void CPhoneBookDlg:OnPaint() / OnPaint是对这个消息的反应函数if (IsIconic()CPaintDC dc(this); / device context for paintingSendMessage(WM_ICONERASEBKGND, (WPARAM) dc.GetSafeHdc(), 0);/ Center icon in client rectangleint cxIcon = GetSystemMetrics(SM_CXICON);int cyIcon = GetSystemMetrics(SM_CYICON);CRect rect;GetClientRect(&rect);int x = (rect.Width() - cxIcon + 1) / 2;int y = (rect.Height() - cyIcon + 1) / 2;/ Draw the icondc.DrawIcon(x, y, m_hIcon);elseCDialog:OnPaint();HCURSOR CPhoneBookDlg:OnQueryDragIcon()return (HCURSOR) m_hIcon;/*函数原型:void DataInit()功能:完成从文件读取数据的操作,如果文件不存在则只建立链表输入输出均为空,只是一个过程.*/void CPhoneBookDlg:DataInit()struct PhoneCard *p,*q;/定义两个临时指针bFileEmpty=FALSE;/文件默认为不空bNewFile=FALSE;/假定不是新文件bFileModified=FALSE;/初始化文件属性p=head=(struct PhoneCard*)malloc(sizeof(struct PhoneCard);head-prev=head-next=NULL;/建立头结点(不存放数据)if(!(fp=fopen(data.dat,r)/试图用只读方式打开数据文件,如文件不存在则fp返回NULL值bNewFile=TRUE;/文件不存在,当然是新文件了bFileEmpty=TRUE;/文件当前状态是空的,第一次运行程序嘛iCount=0;/总结点数为0,注意不包括头结点,头结点不用来存放数据last=head;/尾结点此时就是头结点if(!bFileEmpty)/因为文件默认为不空,如果文件已存在,则从文件中读取数据建立链表fread(&iCount,sizeof(int),1,fp);/先从文件中读取总结点数for(int i=0;inext=NULL;q-prev=p;p-next=q;p=p-next;m_NameList.InsertString(i,p-name);/显示名单last=p;/改变尾指针的指向if(iCount=0)/如果名单为空,禁用更新、删除和查找等按钮,以免发生误操作导致错误GetDlgItem(IDC_UPDATE)-EnableWindow(FALSE);GetDlgItem(IDC_DELETE)-EnableWindow(FALSE);GetDlgItem(IDC_SEARCHBYNAME)-EnableWindow(FALSE);GetDlgItem(IDC_SEARCHBYPHONE)-EnableWindow(FALSE);GetDlgItem(IDC_NAME)-EnableWindow(FALSE);GetDlgItem(IDC_PHONE)-EnableWindow(FALSE);GetDlgItem(IDC_ADDRESS)-EnableWindow(FALSE);GetDlgItem(IDC_CODE)-EnableWindow(FALSE);else m_NameList.SetCurSel(0);/默认选中第一条记录OnSelchangeNamelist();/*函数原型:void OnAdd()功能:在链表的结尾添加一条记录,并将默认将新记录的姓名置为“新名字”,其它项为空输入输出均为空,只是一个过程.*/void CPhoneBookDlg:OnAdd() / TODO: Add your control notification handler code hereGetDlgItem(IDC_NAME)-EnableWindow(TRUE);GetDlgItem(IDC_PHONE)-EnableWindow(TRUE);GetDlgItem(IDC_ADDRESS)-EnableWindow(TRUE);GetDlgItem(IDC_CODE)-EnableWindow(TRUE);/启用文本框控件curr=(struct PhoneCard*)malloc(sizeof(struct PhoneCard);/将当前指针指向新增加的结点上strcpy(curr-name,新名字);strcpy(curr-num,);strcpy(curr-address,);strcpy(curr-code,);/将默认的数据复制到当前结点m_NameList.InsertString(m_NameList.GetCount(),新名字);m_NameList.SetCurSel(m_NameList.GetCount()-1);/在列表框中插入新名字并选中iCount+;/总结点数加1curr-next=NULL;curr-prev=last;last-next=curr;last=curr;/在尾结点后插入新结点bFileEmpty=FALSE;bFileModified=TRUE;/修改文件属性,文件被修改且不为空GetDlgItem(IDC_UPDATE)-EnableWindow(TRUE);GetDlgItem(IDC_DELETE)-EnableWindow(TRUE);GetDlgItem(IDC_SEARCHBYNAME)-EnableWindow(TRUE);GetDlgItem(IDC_SEARCHBYPHONE)-EnableWindow(TRUE);/启用更新、删除、查找按钮控件LoadInfo(curr);/在文本框显示个人信息/*函数原型:void DataUpdate()功能:完成修改当前记录的操作输入输出均为空,只是一个过程.*/void CPhoneBookDlg:OnUpdate() / TODO: Add your control notification handler code hereUpdateData();int sel = m_NameList.GetCurSel();/得到所选择记录在列表框中的序号if(m_szName=)MessageBox(必须键入姓名!,错误!,MB_ICONERROR);m_IDC_Name.SetFocus();return;/如果姓名输入框为空则发生错误strcpy(curr-name,m_szName);strcpy(curr-num,m_szPhone);strcpy(curr-address,m_szAddress);strcpy(curr-code,m_szCode);/将更新的数据从文本输入框复制到结点m_NameList.DeleteString(sel);m_NameList.InsertString(sel,m_szName);m_NameList.SetCurSel(sel);/更新列表框中的姓名m_Button_Add.SetFocus();/将焦点设置到“添加”按钮上/*函数原型:void OnSelchangeNamelist()功能:当列表框的选择项改变时,移动指针到指定结点的位置输入输出均为空,只是一个过程.*/void CPhoneBookDlg:OnSelchangeNamelist() / TODO: Add your control notification handler code hereint sel = m_NameList.GetCurSel();/获得当前的选择curr=head-next;for(int i=0;inext;/移动当前指针到选定结点LoadInfo(curr);/更新界面/*函数原型:void LoadInfo(PhoneCard *p)功能:将结点中存放的数据信息显示在文本框中输入为当前结点的地址值输出为空*/void CPhoneBookDlg:LoadInfo(PhoneCard *p)m_szName=p-name;m_szPhone=p-num;m_szAddress=p-address;m_szCode=p-code;UpdateData(FALSE);m_IDC_Name.SetFocus();m_IDC_Name.SetSel(0,20,TRUE);/*函数原型:void OnDelete()功能:将当前结点删除输入为空输出为空*/void CPhoneBookDlg:OnDelete() / TODO: Add your control notification handler code hereint sel = m_NameList.GetCurSel();/得到所选记录在列表框中的序号struct PhoneCard *p=curr;/新建一个临时指针变量if (MessageBox(确定要删除吗?,警告,MB_ICONQUESTION|MB_OKCANCEL) = IDCANCEL)return;/弹出确认对话框iCount-;/总结点数减1/删除当前结点p-prev-next=p-next;if(p-next)!=NULL)/注意删除结点为末尾结点时的操作!p-next-prev=p-prev;elselast=p-prev;free(p);/释放内存空间m_NameList.DeleteString(sel);/在列表框中删除记录if (m_NameList.GetCount()=0) Get
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025年高级会计实务试题及答案
- 肿瘤靶向药管理办法
- 社会团体管理办法
- pdca企业管理办法
- 老旧散小区管理办法
- 箱包厂管理办法规定
- 规范监狱资产管理办法
- 贸易交通走廊管理办法
- 不良事件资料管理办法
- 自动化物料管理办法
- 第2课 教师节快乐 第2课时(课件)2025-2026学年道德与法治二年级上册统编版
- 2025年国家网络安全宣传周知识竞赛考试练习题库(完整版)含答案
- 绿化项目养护监理方案投标文件(技术方案)
- 2025秋新部编版一年级上册语文教学计划+教学进度表
- 大学英语四级高频词汇1500+六级高频词汇1500
- 小升初英语学习方法指导PPT
- CT图像伪影及处理
- 住宅给水设计秒流量计算举例
- GB∕T 40753-2021 供应链安全管理体系 ISO 28000实施指南
- 测井曲线综合解释(课堂PPT)
- 贮水花盆案例总结-2015天津中心修改
评论
0/150
提交评论