《C++课程设计电话本管理5545.pdf》由会员分享,可在线阅读,更多相关《C++课程设计电话本管理5545.pdf(11页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、 免责声明:文档在线网中所有的文档资料均由文档在线网会员提供,该文档资料的版权属于提供者所有。文档在线网会对会员提供的文档资料进行筛选和编辑,但是并不声明或保证其内容的合法性和正确性。VC+课 程 实 验 报 告 专业班级:学 号:报 告 人:免责声明:文档在线网中所有的文档资料均由文档在线网会员提供,该文档资料的版权属于提供者所有。文档在线网会对会员提供的文档资料进行筛选和编辑,但是并不声明或保证其内容的合法性和正确性。C+课程实验报告 一、实验题目:电话本管理 二、功能描述:这是一个电话簿管理小程序,利用文本文件储存电话簿数据,具有添加、删除、显示和查询联系人电话号码功能。在这个小型管理程
2、序中,类与类之间通过链表将各个数据相连接,形成一个通畅的应用小程序!在程序中,对于用户需求尽可能的予以满足.三、算法设计与实验步骤 四、流程图:按ENTER进入电话本功能界面 电话本功能界面(用户根据界面说明进行选择操作)0 进入帮助 1添加联系人 2查找并修改 3姓名查找联系人 4首字母近似查找 5显示全部记录 6删除记录 用户 根 据帮 助程序 根据提示用户新建联系人姓名和电话号码 输 入联 系人 姓名,查找 修改 输入姓名查找 输 入首 字母 匹配 查找 显 示电 话薄 全部 数据 逐一删除联系人数据,首先输入联系人姓名 7退出电话簿程序并保存电话簿数据 免责声明:文档在线网中所有的文档
3、资料均由文档在线网会员提供,该文档资料的版权属于提供者所有。文档在线网会对会员提供的文档资料进行筛选和编辑,但是并不声明或保证其内容的合法性和正确性。四、类与对象结构描述,核心程序代码(需要有相应的注释)1.程序中所定义的类(1)电话簿记录类 class CTelRecord private:int nYear,nMonth,nDay,nHour,nMinute,nSecond;/时间单元 char szName20;/电话簿数据:姓名和电话号码 char Last20;char szNumber20;public:CTelRecord()/构造函数 CTelRecord(char*name,
4、char*number);void SetRecord(char*name,char*last,char*number);/输出时间 int Compare(char*name);/根据姓名查找 void SetName(char*name)strcpy(szName,name);void SetNum(char*num)strcpy(szNumber,num);void SetLast(char*last)strcpy(Last,last);char*GetName(void)return szName;/需通过函数访问的私有成员 char*GetLast(void)return Last;
5、char*GetNum(void)return szNumber;int GetYear(void)return nYear;int GetMonth(void)return nMonth;用户选择 0 后进入帮助界面 1 怎 样产 生一 个新 纪录 2 怎 样显 示我 的电 话本 3 什 么时 候我 有一 种新 版面 4 什 么时 候有 一种 新版面 5 退 出帮 助进 入电 话簿 功能 界面 电话本功能界面 免责声明:文档在线网中所有的文档资料均由文档在线网会员提供,该文档资料的版权属于提供者所有。文档在线网会对会员提供的文档资料进行筛选和编辑,但是并不声明或保证其内容的合法性和正确性。i
6、nt GetDay(void)return nDay;int GetHour(void)return nHour;int GetMinute(void)return nMinute;int GetSecond(void)return nSecond;void Show();/打印数据 void Modify(char*number);/修改结点函数 int LookChar(char*szName);/按首字母查找匹配姓名;(2)定义结点类 class CNode private:CTelRecord*pData;/用于指向数据类指针 CNode*pNext;/指向链表下一个结点指针 publ
7、ic:CNode()pData=0;pNext=0;/结点构造 CNode(CNode&node);/拷贝构造函数 void ShowNode()pData-Show();/指向打印函数 CTelRecord*GetData(void)return pData;friend class CList;/定义链表类为友元类;(3)定义链表类 class CList CNode*head_ptr,*current_ptr;public:CList()head_ptr=NULL;/构造函数 void Help_me();/帮助函数 void AddNode();/在首部添加结点 void Delete
8、Node();/删除结点 void ShowList();/显示所有记录 void DeleteList();/删除所有记录 void Search();/查找 CNode*GetListHead()return head_ptr;void Insert(CNode*new_rec_ptr);/按顺序插入新节点 CNode*Position_insertion_point(char name20);void ModNum(void);/修改号码 void SearchFriends(void);/查找具有相似名的记录 void load_list_from_file(void);/保存文件 v
9、oid write_list_to_file();/把文件数据写入链表中;2.新增函数说明 根据姓氏,返回其在链表中的正确位置,新节点即将插入此点。CNode*CList:Position_insertion_point(char name20)char temp_name20;CNode*temp_ptr;免责声明:文档在线网中所有的文档资料均由文档在线网会员提供,该文档资料的版权属于提供者所有。文档在线网会对会员提供的文档资料进行筛选和编辑,但是并不声明或保证其内容的合法性和正确性。int tempint;if(head_ptr-pNext!=NULL)/如果有多于一个结点的链表,查找结点
10、在链表中的正确位置 current_ptr=head_ptr;temp_ptr=current_ptr-pNext;strcpy(temp_name,temp_ptr-pData-GetName();tempint=strcmp(name,temp_name);/*比较链表中的姓氏与欲插入的姓氏的大小*/while(tempint0)¤t_ptr-pNext!=NULL)/*若欲插入的姓氏大于链表中当前结点的姓氏,继续向下查找*/current_ptr=temp_ptr;if(current_ptr-pNext!=NULL)temp_ptr=current_ptr-pNext;st
11、rcpy(temp_name,temp_ptr-pData-GetName();tempint=strcmp(name,temp_name);else /如果只有一个头结点,返回头结点的位置,新结点插在头节点后 current_ptr=head_ptr;return(current_ptr);3.电话簿记录在链表的读取与写入(1)从链表读取数据 void CList:load_list_from_file(void)/从数据文件FRIENDS.DAT 中读取数据,重建链表处理函数 CNode*new_rec_ptr;/CTelRecord*Phonebook;ifstream infile;i
12、nt end_loop=0;infile.open(FRIENDS.DAT,ios:in);if(infile)/打开文件正确 do new_rec_ptr=new CNode;new_rec_ptr-pData=new CTelRecord;if(new_rec_ptr!=NULL)char name20,last20,number20;int year,month,day,hour,minute,second;infile.getline(name,20);new_rec_ptr-pData-SetName(name);infile.getline(last,20);免责声明:文档在线网中
13、所有的文档资料均由文档在线网会员提供,该文档资料的版权属于提供者所有。文档在线网会对会员提供的文档资料进行筛选和编辑,但是并不声明或保证其内容的合法性和正确性。new_rec_ptr-pData-SetLast(last);if(strcmp(new_rec_ptr-pData-GetName(),)!=0)&(strcmp(new_rec_ptr-pData-GetName(),END OF FILE)!=0)infile.getline(number,20);new_rec_ptr-pData-SetNum(number);infileyear;infile.get(pause);infi
14、lemonth;infile.get(pause);infileday;infile.get(pause);infilehour;infile.get(pause);infileminute;infile.get(pause);infilesecond;infile.get(pause);new_rec_ptr-pData-SetTime(year,month,day,hour,minute,second);Insert(new_rec_ptr);else /读到文件尾 delete new_rec_ptr;end_loop=1;else /如果结点分配空家出错 coutWARNING:Mem
15、ory error.Load from disk wan unsuccessful.n;end_loop=1;while(end_loop=0);infile.close();else /如果打开文件出错 coutNo usable data file located.List is empty.n;(2)将数据写入链表 void CList:write_list_to_file()/将链表写入文件 ofstream outfile;outfile.open(FRIENDS.DAT,ios:out);/打开文件 if(outfile)/打开正确 current_ptr=head_ptr;if(
16、head_ptr!=NULL)/链表不为空,循环写入 免责声明:文档在线网中所有的文档资料均由文档在线网会员提供,该文档资料的版权属于提供者所有。文档在线网会对会员提供的文档资料进行筛选和编辑,但是并不声明或保证其内容的合法性和正确性。do outfilepData-GetName()endl;outfilepData-GetLast()endl;outfilepData-GetNum()endl;outfilepData-GetYear()endl;outfilepData-GetMonth()endl;outfilepData-GetDay()endl;outfilepData-GetHo
17、ur()endl;outfilepData-GetMinute()endl;outfilepData-GetSecond()pNext;while(current_ptr!=NULL);outfileEND OF FILEendl;outfile.close();else/打开文件出错 coutError opening file!n;4 课程设计要求的实现(1)记录修改函数实现 void CList:ModNum(void)/修改号码 system(cls);char search_string20,new_phone_number20;current_ptr=head_ptr;cin.ig
18、nore(20,n);coutpData-Compare(search_string)!=0)current_ptr=current_ptr-pNext;if(current_ptr!=NULL)/如果找到匹配的结点,输出结点信息 coutShowNode();coutpData-Modify(new_phone_number);else /查找万整个链表,未查到匹配的结点 免责声明:文档在线网中所有的文档资料均由文档在线网会员提供,该文档资料的版权属于提供者所有。文档在线网会对会员提供的文档资料进行筛选和编辑,但是并不声明或保证其内容的合法性和正确性。coutNO MATCH FOUNDn;
19、couttm_year+1900);nMonth=times-tm_mon;nDay=times-tm_mday;nHour=times-tm_hour;nMinute=times-tm_min;nSecond=times-tm_sec;(3)首字母查询功能 void CList:SearchFriends(void)system(cls);char FirstWords20,name20;int length,k=0;current_ptr=head_ptr;cin.ignore(20,n);coutpData-GetName();namelength=0;if(strcmp(name,Fi
20、rstWords)=0)/如果找到匹配的结点,输出结点信息 if(k=0)coutShowNode();k=1;current_ptr=current_ptr-pNext;if(k=0)/查找万整个链表,未查到匹配的结点 免责声明:文档在线网中所有的文档资料均由文档在线网会员提供,该文档资料的版权属于提供者所有。文档在线网会对会员提供的文档资料进行筛选和编辑,但是并不声明或保证其内容的合法性和正确性。coutNO MATCH FOUNDn;coutPress Enter Continuen;cin.get(pause);system(cls);五、运行界面、运行结果与使用说明 免责声明:文档在
21、线网中所有的文档资料均由文档在线网会员提供,该文档资料的版权属于提供者所有。文档在线网会对会员提供的文档资料进行筛选和编辑,但是并不声明或保证其内容的合法性和正确性。免责声明:文档在线网中所有的文档资料均由文档在线网会员提供,该文档资料的版权属于提供者所有。文档在线网会对会员提供的文档资料进行筛选和编辑,但是并不声明或保证其内容的合法性和正确性。六、小结与思考:1 在做了课程实验以后,我对 C+的了解更深了,很多知识得到了巩固,一些不懂的知识也渐渐明了!这其中主要是对类的封装收获很多,在类的封装过程中,对数据的访问控制问题很重要;在面向对象程序设计中,对访问的控制也是比较重要,我相信这对以后学习其他面向对象程序语言会有很大的帮助!2 作了电话簿管理得小型程序后,我对链表更加熟悉了,作为 C+所特有得指针和链表再编写程序得过程中运用十分广泛,我还必须多加练习才能达到一个更高的水平,链表和类都是非常重要的!3 在完完整整的做完一个课程实验后,我对程序的整体性有了一个明确的认识,做一个程序必须要注意程序前后的联系,要具有清晰的思路,程序要具有层次。对整体性的把握至关重要!4 学习计算机语言,最重要的就是上机操作,我深感自己动手能力比较差,在以后的学习中,还必须多多上机调试程序,从实践中多积累经验,为以后工作打下坚实的基础。