有界面的个人通讯录课程设计报告_第1页
有界面的个人通讯录课程设计报告_第2页
有界面的个人通讯录课程设计报告_第3页
有界面的个人通讯录课程设计报告_第4页
有界面的个人通讯录课程设计报告_第5页
已阅读5页,还剩19页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

xxxxxxx大学计算机科学与工程学院综合设计报告设计名称:应用软件综合设计设计题目:简单个人号码查询系统学生学号:专业班级:学生姓名:学生成绩:指导教师〔职称〕:课题工作时间:至说明:1、报告中的第一、二、三项由指导教师在综合设计开始前填写并发给每个学生;四、五两项〔中英文摘要〕由学生在完成综合设计后填写。2、学生成绩由指导教师根据学生的设计情况给出各项分值及总评成绩。3、指导教师评语一栏由指导教师就学生在整个设计期间的平时表现、设计完成情况、报告的质量及辩论情况,给出客观、全面的评价。4、所有学生必须参加综合设计的辩论环节,凡不参加辩论者,其成绩一律按不及格处理。辩论小组成员应由2人及以上教师组成。5、报告正文字数一般应不少于5000字,也可由指导教师根据本门综合设计的情况另行规定。6、平时表现成绩低于6分的学生,取消辩论资格,其本项综合设计成绩按不及格处理。7、此表格式为武汉工程大学计算机科学与工程学院提供的根本格式〔适用于学院各类综合设计〕,各教研室可根据本门综合设计的特点及内容做适当的调整,并上报学院批准。成绩评定表学生姓名:学号:班级:类别合计分值各项分值评分标准实际得分合计得分备注平时表现1010按时参加综合设计,无旷课、迟到、早退、违反实验室纪律等情况。由设计负责人给出完成情况3020按设计任务书的要求完成了全部任务,能完整演示其设计内容,符合要求。10能对其设计内容进行详细、完整的介绍,并能就指导教师提出的问题进行正确的答复。报告质量3510报告文字通顺,内容翔实,论述充分、完整,立论正确,结构严谨合理;报告字数符合相关要求,工整标准,整齐划一。5课题背景介绍清楚,综述分析充分。5设计方案合理、可行,论证严谨,逻辑性强,具有说服力。5符号统一;图表完备、符合标准要求。5能对整个设计过程进行全面的总结,得出有价值的结论或结果。5参考文献数量在3篇以上,格式符合要求,在正文中正确引用。辩论情况2510在规定时间内能就所设计的内容进行阐述,言简意明,重点突出,论点正确,条理清晰。15在规定时间内能准确、完整、流利地答复教师所提出的问题。总评成绩:分补充说明:指导教师:〔签字〕日期:年月日辩论记录表学生姓名:学号:班级:辩论地点:辩论内容记录:辩论成绩合计分值各项分值评分标准实际得分合计得分备注2510在规定时间内能就所设计的内容进行阐述,言简意明,重点突出,论点正确,条理清晰。15在规定时间内能准确、完整、流利地答复教师所提出的问题。辩论小组成员〔签字〕:年月日指导教师评语指导教师:〔签字〕日期:年月日一、综合设计目的、条件、任务和内容要求:1、设计目的综合设计是专业教学过程中重要的实践性教学环节,必须加以重视。综合设计旨在使学生对所学过的理论知识和专业知识进行一次全面、系统的回忆和总结,通过设计分析,使理论实践相结合,稳固和开展所学理论知识,掌握正确的思想方法和根本技能,并培养学生全面考虑问题,抓住主要矛盾解决问题的思维方法,提高独立思考能力和团队精神,培养学生调查研究、查阅技术文献、资料、手册以及编写技术文献的能力,树立严肃认真的工作作风。对同学今后的工作、开展起重要作用。数据结构是计算科学专业中一门重要的专业根底课程。当用计算机来解决实际问题时,就要涉及到数据的表示及数据的处理,而数据表示及数据处理正是数据结构课程的主要研究对象,通过这两方面内容的学习,为后续课程,特别是软件方面的课程打下了厚实的知识根底,同时也提供了必要的技能训练。因此,数据结构课程在计算机应用专业中具有举足轻重的作用。2、设计任务人们在日常生活中经常需要查找某个人或某个单位的号码,本实验将实现一个简单的个人号码查询系统,根据用户输入的信息〔例如姓名等〕进行快速查询。(1)在外存上,用文件保存号码信息;(2)在内存中,设计数据结构存储号码信息;(3)提供查询功能:根据姓名实现快速查询;(4)提供其他维护功能:例如插入、删除、修改等;(5)按号码进行排序;(6)针对以上功能要提供相应的提示信息和输出信息,实现友好的用户交互界面。3、内容要求本实验的要求是:通过实验,使学生对常用数据结构的根本概念及其不同的实现方法的理论得到进一步的掌握,并对在不同存储结构上实现不同的运算方式和技巧有所体会。综合实验课是对学生的一种全面综合训练,是与课堂听讲、自学和练习相辅相成的必不可少的一个教学环节。实验课着眼于原理与应用的结合点,使学生学会如何把书上学到的知识用于解决实际问题,培养软件工作所需要的动手能力;另一方面,能使书上的知识变“活”,起到深化理解和灵活掌握教学内容的目的。本实验中包括了数据结构中线性表的顺序式存储结构、哈希表的查找、排序,以及C++的编程、MFC等多个知识点。通过设计、调试此实验,到达检测学生对上述知识点的综合应用能力。指导教师签字:年月日二、进度安排:集中设计时间:辩论时间:三、应收集资料及主要参考文献:[1]严蔚敏,吴伟民.数据结构[M].北京:清华大学出版社,2010.07[2]吕国英.算法设计与分析[M].北京:清华大学出版社,2009.01[3]严蔚敏,吴伟民.数据结构〔C语言版〕[M].北京:清华大学出版社,1999.04[4]严蔚敏,吴伟民.数据结构题集〔C语言版〕[M].北京:清华大学出版社,1999.05[5]许卓群.数据结构.北京:高等教育出版社[M].1989.07[6]谭浩强.C语言程序设计(第三版)[M].北京:清华大学出版社,2005.08[7]姜灵芝,余健.C语言程序设计教程[M].北京:中国电力出版社,2006.02[8]李伟波,刘永祥,王庆春.软件工程[M].武汉:武汉大学出版社,2006.01[9]侯俊杰.深入浅出MFC第二版[M].武汉:华中科技大学出版社,2001.10四、综合设计摘要〔中文〕:当前社会已经步入了一个信息化的时代,随着社会劳动生产率的不断提高,与之相对应的信息查询效劳系统也在不断的完善。本程序运用类和结构体的建立,构建了顺序表并采用链表的方法进行查询,实现号码及有相关信息的准确查询,同时编译了对信息的保存、更新和清空函数,使该号码的查询系统操作起来更加自如。本文从分析课题的题目背景、题目意义、题目要求等出发,分别从需求分析、总体设计、详细设计、测试等各个方面详细介绍了系统的设计与实现过程,最后对系统的完成情况进行了总结。关键词:查找函数;链表;号码查询五、综合设计〔课程设计〕Abstract〔英文〕:Currentsocietyhasenteredaninformationera,withthecontinuousimprovementofthesociallaborproductivity,theinformationcorrespondingtotheinquiryservicesystemhasalsobeenimproved.

Theprogramusesclassesandtheestablishmentofstructuresconstructedusingtheorderformandlistmethodsofinquiry,telephonenumbersandrelevanttoachievetheaccuracyoftheinformationquery,whilethepreservationofinformationcompiled,updatedandclearfunctions,sothatthephonenumberofqueriesthesystemtooperatemorefreely.

Thisarticleanalyzesthesubjectfromthebackgroundquestions,questionsthemeaning,thesubjectrequirementsforstarting,respectively,fromneedsanalysis,overalldesign,detaileddesign,testingandotheraspectsofthesystemdetaileddesignandimplementationprocess,thefinalcompletionofthesystemaresummarized.

Keywords:Querytofindfunction;list;telephonenumbers目录摘要………………………IIAbstract…………………...II课题背景….…………………….....11.1课题研究的背景………………………11.2课题研究的目的………………………11.3课题研究的内容…………..…………..1第二章 设计简介及设计方案论述………..22.1设计简介………………..………….….22.1.1设计总体思路…………..……………2.1.2设计数据结构…………..……………2.2设计所需函数以及各变量…………….32.3界面设计……………….3第三章 详细设计…………..………………..53.1通讯录中数据的存储……..……………53.1.1联系人的数据结构………………..……………联系人信息的存储………………….63.2通讯录界面设计……………………….6设计通讯录界面所添加的控件…………………….6控件函数设计……………………….8第四章 设计结果及分析…………………..……………….164.1程序运行的环境…….………………..164.2程序运行的界面………..…………….16通讯录的添加功能………..………....17通讯录的删除功能………………….18通讯录的查找功能………………….19通讯录的修改功能………………….20通讯录的去除功能………………….20总结…….……………………..…………..23致谢…….……………………..…………..24参考文献…….………………..………………..…………..25摘要日益繁多的人际交往使得我们很难搞清楚与每个人之间的联系方式,特别是对于经常出差的人来说更是难,所以通讯录能够便捷的给我们带来所需要的相关信息。而随着计算机的普及,人们的生活摆脱了传统式的记事本、簿,越来越多的靠计算机来帮助人们记住一些事情。这就需要有一个使用的通讯录管理系统,用户可以方便的通过自己电脑的通讯录管理系统,来随时查阅自己所需要的信息,而不必再大费周折去翻开那繁琐的笔记本。通讯录管理系统是一个专门针对储存用户联系方式以及一些简单个人信息的实用管理系统,它方便了用户对众多客户、朋友、同事等个人信息的储存和快速查阅的功能,大大减少了查找过程的时间。本程序运用类和结构体的建立,构建了顺序表并采用链表的方法进行查询,实现号码及有相关信息的准确查询,同时编译了对信息的保存、更新和清空函数,使该号码的查询系统操作起来更加自如。本文从分析课题的题目背景、题目意义、题目要求等出发,分别从需求分析、总体设计、详细设计、测试等各个方面详细介绍了系统的设计与实现过程,最后对系统的完成情况进行了总结。关键词:通讯录;链表;查询;具体设计分析AbstractGrowingrangeofinterpersonalcommunicationmakesitdifficulttofigureoutandthelinkbetweenthewayeachperson,especiallyforpeoplewhotraveloftenisdifficult,sothebookcanbeconvenienttobringustherequiredinformation.Withtheproliferationofcomputers,people'slivesoutofthetraditionalnotebook,phonebook,moreandmorerelyoncomputerstohelppeopleremembersomethings.Thisrequiresamanagementsystemwithaddressbook,userscaneasilymanagecontactsthroughtheirowncomputersystemtogainaccesstotheinformationtheyneedwithouthavingtobestrugglingtoturnitcumbersomelaptop.Contactmanagementsystemisacontactspecificallyforstoringtheuserpersonalinformationandsomesimpleandpracticalmanagementsystem,whichfacilitatestheusertomanycustomers,friends,colleaguesandotherpersonalinformationstorageandquickaccesstofunctions,greatlyreducingthesearchprocesstime.Theprogramusesclassesandtheestablishmentofstructuresconstructedusingtheorderformandlistmethodsofinquiry,telephonenumbersandrelevanttoachievetheaccuracyoftheinformationquery,whilethepreservationofinformationcompiled,updatedandclearfunctions,sothatthephonenumberofqueriesthesystemtooperatemorefreely.Thisarticleanalyzesthesubjectfromthebackgroundquestions,questionsthemeaning,thesubjectrequirementsforstarting,respectively,fromneedsanalysis,overalldesign,detaileddesign,testingandotheraspectsofthesystemdetaileddesignandimplementationprocess,thefinalcompletionofthesystemaresummarized.Keywords:Contacts;list;telephoneinquiries;specificdesignanalysis课题概述1.1课题研究背景当前社会已经步入了一个信息化的时代,随着社会劳动生产率的不断提高,与之相对应的信息查询效劳系统也在不断的完善。高度信息化的年代里,号码信息系统的出现正是当前时代开展的需要,它的出现给我们的工作生活无疑带来了很多方便。编程人员通过对号码及其相关信息查询功能的不断编写和完善,来尽量满足人们的需要。1.2课题研究目的通过实验,使学生对常用数据结构的根本概念及其不同的实现方法的理论得到进一步的掌握,并对在不同存储结构上实现不同的运算方式和技巧有所体会。综合实验课是对学生的一种全面综合训练,是与课堂听讲、自学和练习相辅相成的必不可少的一个教学环节。实验课着眼于原理与应用的结合点,使学生学会如何把书上学到的知识用于解决实际问题,培养软件工作所需要的动手能力;另一方面,能使书上的知识变“活”,起到深化理解和灵活掌握教学内容的目的。学生通过课程设计加深理解课堂教学内容,要求学生在设计中逐步提高程序设计和调试能力,培养学生解决实际问题的能力,算法分析能力和学生的科技论文写作能力。本实验中包括了数据结构中线性表的链式顺序式存储结构、查找、排序,以及C++的编程、MFC界面设计等多个知识点。通过设计、调试此实验,到达检测学生对上述知识点的综合应用能力1.3课题研究的内容本课题——通讯录的制作,为了实现数据的输入、输出、追加、删除、排序查询、输出、存、取功能。程序的根本功能为:建立通讯者信息,包括姓名、、、地址;添加新的通讯者信息;按姓名或查询某个通讯者的信息;按姓名删除某个通讯者的信息;输出显示通讯录的所有信息;将数据以文件的形式存储在磁盘上;在下次操作时课从磁盘中读取原保存数据。其具体功能如图1-1所示:第二章设计简介及设计方案论述2.1设计简介2.1.1设计总体为实现通讯录的添加、删除、查找、更新等功能,我在界面设计时,添加了七个按钮,他们分别是:添加、删除、更新信息、全部去除、按姓名查找、按号码查找、关于。其功能分别为:添加:点击“添加”按钮,可以添加通讯录记录,利用C语言文件,向文件中按顺序输入姓名、、地址、,再用函数关闭并保存文件。删除:光标移动至你要删除的人的姓名后,点击“删除”按钮系统会自动删除他〔她〕的记录,在删除通过消息盒子提示你确认删除的功能,只有等你确认删除后才会删除。查找:为了满足用户的实际需求,设计了三种查询方式,可以用姓名、号码两种方式查找通讯录记录。点击“查找”按钮,通过比较字符串是否相同来判别是否找到相关信息,找到后,就把文件中的数据赋给对应的变量,再把变量所带的值输出到屏幕上。更新信息:光标移动至你要修改的那个人的姓名后,点击“更新信息”按钮,系统会查找该通讯录文件,然后用户再依次输入他〔她〕的相关信息来替代以前的记录。全部去除:点击“全部去除”按钮后,会去除显示用户信息的那块编辑框上的信息。关于:点击“关于“按钮后,会弹出一个对话框来显示此通讯录应用程序建立的时间和名称等信息。用户界面设计如图2-1所示:2.1.为存储数据的信息,我们将用户的每条信息用图2-2所示的结构来存储:图2-2数据结构图2.2设计所用到的函数以及个变量如图2-3所示,为设计所用到变量:图2-3设计所用变量及函数2.3界面的制作翻开VC++6.0建立一个MFCAppwizard.exe,创立时选择根本对话框。根据“设计总体思路”设计完根本对话框后,给需要的控件添加成员函数和变量。为函数添加功能代码。如图2-4所示:图2-4添加变量图2-5添加函数第三章详细设计3.1通讯录中数据的存储3.1.1为了存储联系人的姓名、、地址和我们定义了PhoneCard结构体,并采用链表的形式存储。structPhoneCard{ charname[20];//姓名 charnum[20];// charaddress[20];//地址 charcode[10];// structPhoneCard*prev;//前一结点 structPhoneCard*next;//下一结点};//定义结构体同时还定义了全局变量staticstructPhoneCard*head,*last,*curr;//定义全局变量:头指针、尾指针、当前指针3.1.对于联系人的存储,我们采用文件的形式存在外存上。于是,定义了类CPhoneBookDlgclassCPhoneBookDlg:publicCDialog{//Constructionpublic: voidLoadInfo(structPhoneCard*); voidDataInit();//函数声明 FILE*fp;//声明文件指针 intiCount;//总的结点数 boolbNewFile;//文件属性:是否为新文件?第一次运行程序 boolbFileEmpty;//文件属性:文件是否为空 boolbFileModified;//文件属性:文件是否被修改 CPhoneBookDlg(CWnd*pParent=NULL); //standardconstructor//DialogData //{{AFX_DATA(CPhoneBookDlg) enum{IDD=IDD_PHONEBOOK_DIALOG}; CButton m_Button_Add; CEdit m_IDC_Name; CListBox m_NameList; CString m_szAddress; CString m_szCode; CString m_szName; CString m_szPhone; CString m_szSearchContent;//对各控件的对象进行声明 //}}AFX_DATA //ClassWizardgeneratedvirtualfunctionoverrides //{{AFX_VIRTUAL(CPhoneBookDlg) protected: virtualvoidDoDataExchange(CDataExchange*pDX); //DDX/DDVsupport //}}AFX_VIRTUAL//Implementationprotected: voidOnOK(); HICONm_hIcon; //Generatedmessagemapfunctions //{{AFX_MSG(CPhoneBookDlg) virtualBOOLOnInitDialog(); afx_msgvoidOnSysCommand(UINTnID,LPARAMlParam); afx_msgvoidOnPaint(); afx_msgHCURSOROnQueryDragIcon(); afx_msgvoidOnUpdate(); afx_msgvoidOnAdd(); afx_msgvoidOnSelchangeNamelist(); afx_msgvoidOnDelete(); afx_msgvoidOnClear(); afx_msgvoidOnClose(); afx_msgvoidOnAbout(); afx_msgvoidOnSearchbyname(); afx_msgvoidOnSearchbyphone(); //}}AFX_MSG DECLARE_MESSAGE_MAP()};3.2通讯录界面的设计设计通讯录界面所添加的控件为完成通讯录的添加、修改、删除、查找等功能,我们需在主界面上添加如图3-1所示的控件:图3-1控件添加四个编辑框,分别用于输入或输出联系人姓名、、地址、。姓名编辑框代码系统自动生成,如下:voidCPhoneBookDlg::OnChangeName(){ //sendthisnotificationunlessyouoverridetheCDialog::OnInitDialog() //functionandcallCRichEditCtrl().SetEventMask() //withtheENM_CHANGEflagORedintothemask. //TODO:Addyourcontrolnotificationhandlercodehere}、地址、同上。其中,四个编辑框的ID分别设定为:IDC_NAMEIDC_PHONEIDC_ADDRESSIDC_CODE添加“姓名”显示列表框,如图3-2所示图3-2姓名显示框设置其ID为:IDC_NAMELIST添加“添加”、“删除”、“更新信息”、“全部去除”、“关于”五个按钮。设置其ID,并为他们添加成员变量和函数。其数据如表3-1所示:表3-1各控件的ID及所含变量名函数名名称ID类型变量名添加IDC_ADDC_Buttonm_Button_Add删除IDC_DELETE更新信息IDC_UPDATE全部去除IDC_CLEAR关于IDC_ABOUTIDC_CODECStringm_szCode地址IDC_ADDRESSCStringm_szAddress姓名IDC_NAMECStringm_szName姓名IDC_NAMECEditm_IDC_Name姓名列表IDC_NAMELISTCListBoxm_NameListIDC_PHONECStringm_szPhone查找编辑框IDC_SEARCHCONTENTCStringm_szSearchContent按姓名查找IDC_SEARCHBYNAME按号码查找IDC_SEARCHBYPHONE3.2.2函数原型:voidDataInit()voidCPhoneBookDlg::DataInit(){ structPhoneCard*p,*q; bFileEmpty=FALSE; bNewFile=FALSE; bFileModified=FALSE; p=head=(structPhoneCard*)malloc(sizeof(structPhoneCard)); head->prev=head->next=NULL;// if(!(fp=fopen("data.dat","r"))) { bNewFile=TRUE; bFileEmpty=TRUE; iCount=0; last=head; } if(!bFileEmpty),{ fread(&iCount,sizeof(int),1,fp); for(inti=0;i<iCount;i++) { q=(structPhoneCard*)malloc(sizeof(structPhoneCard)); fread(q,sizeof(structPhoneCard),1,fp); q->next=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(); }}具体实现与功能:先定义两个临时指针,并初始化文件属性。然后,建立头结点〔不存放数据〕,用if进行判断,假设试图用只读方式翻开数据文件,如文件不存在那么fp返回NULL值完成从文件读取数据的操作;如果文件已存在,那么从文件中读取数据建立链表;如果名单为空,禁用更新、删除和查找等按钮,以免发生误操作导致错误。函数原型:voidOnAdd()voidCPhoneBookDlg::OnAdd(){ GetDlgItem(IDC_NAME)->EnableWindow(TRUE); GetDlgItem(IDC_PHONE)->EnableWindow(TRUE); GetDlgItem(IDC_ADDRESS)->EnableWindow(TRUE); GetDlgItem(IDC_CODE)->EnableWindow(TRUE); curr=(structPhoneCard*)malloc(sizeof(structPhoneCard));// 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++; curr->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);}具体实现与功能:启用文本框控件,将当前指针指向新增加的结点上,将默认的数据复制到当前结点,在列表框中插入新名字并选中。总结点数加1,在尾结点后插入新结点,修改文件属性,文件被修改且不为空。启用更新、删除、查找按钮控件,在文本框显示个人信息。如图3-3所示:图3-3添加按钮函数原型:voidDataUpdate()voidCPhoneBookDlg::OnUpdate(){ //TODO:Addyourcontrolnotificationhandlercodehere UpdateData(); intsel=m_NameList.GetCurSel(); if(m_szName=="") { MessageBox("必须键入姓名!","错误!",MB_ICONERROR); m_IDC_Name.SetFocus(); return; }if(m_szPhone==""||m_szPhone<48||m_szPhone>57) { MessageBox("号码必须键入数字!","错误!",MB_ICONERROR);} 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();}具体实现与功能:得到所选择记录在列表框中的序号,判断如果姓名输入框为空那么发生错误,弹出显示出错的MessageBox,并且判断如果号码输入为空或者不为数字,那么弹出显示出错的MessageBox报错。输入符合要求后,将更新的数据从文本输入框复制到结点,更新列表框中的姓名,将焦点设置到“添加”按钮上。于是,完成修改当前记录的操作。如图3-4与3-5所示:图3-4姓名添加图3-5号码添加函数原型:voidOnSelchangeNamelist()voidCPhoneBookDlg::OnSelchangeNamelist(){ //TODO:Addyourcontrolnotificationhandlercodehere intsel=m_NameList.GetCurSel(); curr=head->next; for(inti=0;i<sel;i++) curr=curr->next; LoadInfo(curr);}具体操作与功能:当列表框的选择项改变时,获得当前的选择,移动指针到指定结点的位置,更新界面。函数原型:voidLoadInfo(PhoneCard*p)voidCPhoneBookDlg::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);}具体操作与功能:将结点中存放的数据信息显示在文本框中,输入为当前结点的地址值,输出为空。函数原型:voidOnDelete()voidCPhoneBookDlg::OnDelete(){ intsel=m_NameList.GetCurSel(); structPhoneCard*p=curr; if(MessageBox("确定要删除吗?","警告",MB_ICONQUESTION|MB_OKCANCEL)==IDCANCEL) return; iCount--; p->prev->next=p->next; if((p->next)!=NULL) p->next->prev=p->prev; else last=p->prev; free(p); m_NameList.DeleteString(sel); if(m_NameList.GetCount()==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); OnClear(); bFileEmpty=TRUE; bFileModified=TRUE; return; } if(sel<m_NameList.GetCount()) m_NameList.SetCurSel(sel); else m_NameList.SetCurSel(sel-1); OnSelchangeNamelist();}具体操作与功能:得到所选记录在列表框中的序号,新建一个临时指针变量,将当前结点删除时,弹出确认对话框,确认后删除,总结点数减1。当当前结点为尾结点时,应注意释放内存空间。删除在列表框中记录,如果剩除到一条记录都不剩,那么需要禁用一些控件以免发生误操作,同时修改文件属性,将焦点定义在列表中上一条记录。如图3-6所示:图3-6记录删除函数原型:voidOnClear()voidCPhoneBookDlg::OnClear(){ //TODO:Addyourcontrolnotificationhandlercodehere m_szName=""; m_szPhone=""; m_szAddress=""; m_szCode=""; UpdateData(FALSE);}具体操作与功能:去除当前文本框里的内容。如图3-7所示:图3-7全部去除函数原型:voidOnClose()voidCPhoneBookDlg::OnClose(){ structPhoneCard*p;if((!bNewFile)&&bFileModified) { fclose(fp); DeleteFile("data.dat"); } if(!bFileEmpty) { if(!(fp=fopen("data.dat","w+"))) { MessageBox("I'msorrybuttheprogramencounterafilediskproblem!","ERROR",MB_ICONERROR); return; } fwrite(&iCount,sizeof(int),1,fp); fseek(fp,sizeof(int),0); p=head->next; while(p) { fwrite(p,sizeof(structPhoneCard),1,fp); p=p->next; } } CDialog::OnClose();}具体操作与功能:声明一个临时指针变量,根据文件属性来决定是否要删除原文件,根据文件是否为空来决定是否要新建文件并写入数据。假设不为空,创立新文件失败,弹出消息提醒;创立新文件成功,将总结点数写入文件,移动文件指针,将临时指针变量移动来头结点的下一个结点,也就是第一个存放数据的结点,假设当结点不为空,将数据写入文件并将指针后移,程序结束时将链表中的数据保存到文件。函数原型:OnAbout()voidCPhoneBookDlg::OnAbout(){ CAboutDlgdlg; dlg.DoModal();}具体操作与功能:连接CAboutDlg对话框。如图3-8所示:图3-8关于函数原型:OnOK()voidCPhoneBookDlg::OnOK(){ OnUpdate();}具体操作与功能:这个函数是为了处理回车键的事件,默认为关闭对话框,现在改为调用OnUpdate()函数。函数原型:voidOnSearchbyname()voidCPhoneBookDlg::OnSearchbyname(){ UpdateData(); intsel=m_NameList.FindString(m_NameList.GetCurSel(),m_szSearchContent); if(sel==LB_ERR) { MessageBox("找不到记录!","提示",MB_ICONWARNING); return; } m_NameList.SetCurSel(sel); OnSelchangeNamelist();}具体操作与功能:以姓名方式查找相应的记录,直接调用FindString函数查找并得到序号,如不存在那么提示找不到,弹出查找失败的消息提示。函数原型:voidOnSearchbyphonw()voidCPhoneBookDlg::OnSearchbyphone(){ UpdateData(); PhoneCard*temp=curr; intsel=m_NameList.GetCurSel(); do { curr=curr->next; sel++; if(curr==NULL) { curr=head->next; sel=0; } if(!(strcmp(curr->num,m_szSearchContent))) { m_NameList.SetCurSel(sel); OnSelchangeNamelist(); return; }}while(curr!=temp); MessageBox("找不到记录!","提示",MB_ICONWARNING); return;}具体操作与功能:以方式查找相应记录。将当前结点的地址存入一个临时指针中,m_NameList.GetCurSel()得到当前记录的序号,循环,从当前记录的下一记录开始查找,序号加1,如果已经查找到表尾,将当前指针移动到头结点的下一个结点,因为头结点并不存放数据,其中第一条记录的序号为0,已经遍历整个链表但没有找到记录,输出查找失败信息。第四章设计结果及分析4.1程序运行环境在VC++6.0环境下,用MFC和C++做的整个应用程序。如图4-1所示:图4-1运行环境调试后,显示无错误,如图4-2所示:图4-2调试4.2应用程序的运行界面翻开应用程序,可以看到本通讯录包含添加、删除、更新信息、查找等功能。如图4-3所示:图4-3界面我们按下“关于”按钮会弹出以下对话框,注明了作者的创作

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论