




已阅读5页,还剩12页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
电话簿管理源程序代码,联系153893706作者: 指导老师: 一 课程设计题目 电话簿管理二 软件开发环境和使用语言 microsoft visual c+ 6.0 ,c+三 软件功能以及需求分析在现在这个科技高速发展的社会进程中,交流成了社会生活重要的一部分,不过越来越多的联系方式和号码让人们感觉到了麻烦。电子产品迅猛发展的时代,个人电话簿管理系统在生活中使用的越来越频繁。比如电子词典等设备,这种不用动一纸和一笔的系统成了产品的一大亮点,有的家用电话也增加了电话簿,给用户使用带来很大的方便,尤其应用在手机上。 对于电话薄的要求,一般基本的要求主要是记录姓名与电话号码。不过现在只记录这一两项已不能为人们满足,人们不仅需要记录这些数据还要方便我们存入和查找。这样在我们需要时才能更方便快速的找到我们需要的号码。我完成的个人电话簿管理系统是一个基于dos界面的管理系统。程序的主要功能有:增加记录、修改记录、删除记录、显示全部联系人信息以及按姓氏查找联系人等基本功能。程序设计思路和方法:本程序主要是以c+语言为主,运用结构体构造对象的基本共同数据,自定义函数来实现程序的各种功能,这样使得程序有条理易于分块。在主函数中对个个自定义函数调用,这用易于操作。对于每一条记录,单独设计成一个结构体数据类型record。其成员主要有:姓氏、名字、固定电话、移动电话。为了方便按姓氏查找,设计的时候,把姓名拆分开来,姓和名单独存储。程序运用具体操作流程和步骤:(1) 开始运行程序时,dos界面出面“欢迎使用rainboy个人电话簿管理系统”,此时按任意键进入主操作页面。(2) 进入到操作页面有操作选项:1 - 添加一条记录;2 - 显示全部记录;3 - 按姓氏查找;4 - 更新记录;5 - 删除一条记录;6 - 清空电话簿;7 - 帮助;8 - 退出系统;此时按照用户具体的实际要求选择相应的功能选项进行操作。最初使用电话薄时要进行新的数据项的输入储存,这个时候要先输入姓氏,名字,电话号码,手机号码。当已有数据储存可进行其它的相关操作。当用户不知道下一部应该做什么时或出现其它的情况时可以选择帮助项,在那里可以得到相关的帮助和解释。每做出一个操作动作都会有相关的提示,如: “记录删除成功”,“没有匹配记录!”,“更新成功!”等,操作完毕后可以选择退出系统。四 软件设计代码解释 1结构体:每一个对象的基本数据项,其中定义了每一个数据项的最大储存容量。 struct record/结构体类型定义char lastname20;/姓氏char firstname15;/名字char phonenum15;/电话char mobile15;/手机record *next;全局变量:record *head;/全局变量,链表头指针record *current;/全局变量,链表当前结点指针2函数原型声明:void handlechoice(int choice); /函数根据用户的选择调用相应的函数处void addrecord(); /添加一条记录void insertnode(record *newrecord); /记录插入链表相应的位置record *posinsertpoint(char lastname20); /按姓氏返回记录在链表中正确的位置void makenodenewhead(record *newrecord);void addnodetoend(record *newrecord);void movecurrenttoend();void display(); /完成显示全部信息void update(); /修改记录void deleterecord(); /删除一条记录void deleteall(); /完成清空void deletehead();void deleteend(record *previous);void deletemiddle(record *previous);int verifydelete(); /确认是否执行删除void deletenode(record *previous);void deletelist(); /删除整个链表void searchbylastname(); /按姓氏查找匹配记录void wiritetofile();void loadfromfile();void help(); /提供给用户必要的操作信息char pause;3自定义函数: 函数void handlechoice(int choice)根据用户选择(choice)调用对应处函数,对于用户选择的功能转化为相应的choice数值,void handlechoice(int choice)函数利用switch函数调动不同的功能函数进行操作。void handlechoice(int choice)switch(choice)case 1:/添加一条记录addrecord();break;case 2:/显示全部记录display();break;case 3:/按姓氏查找searchbylastname();break;case 4:/更新记录update();break;case 5:/删除一条记录deleterecord();break;case 6:/清空电话簿deleteall();break;case 7:/帮助help();break;case 8:/文件存盘,然后退出系统wiritetofile();if(head != null)deletelist(); break;default : /其它输入则出错cout 输入有误!请您重新输入选项!n;break; 函数void addrecord()在链表中增加一个记录功能,先执行系统命令:cls-清屏,然后系统提示用户按照步骤进行输入操作,然后调用insertnode(newrecord)查入结点。如果出错后提示警告: 存储器错误, 新记录添加失败!。addrecord函数完成添加一条记录的功能的接收用户输入部分。设计的时候,把整个所有记录信息以链表的方式存储。每一条完整的record都是链表的一个结点,最后所有信息在退出系统的时候以文件的方式存盘,信息存在同一目录下的phonebook.dat文件中。当下一次进入系统的时候,重新加载信息。void addrecord()record *newrecord;newrecord = new record;if(newrecord != null)system(cls);cout add a new record.n; cout*n;cout 请您输入.n;cin.ignore(20,n);cout lastname,20);cin.ignore(20,n);cout firstname,15);cin.ignore(20,n);cout phonenum,15);cin.ignore(20,n);cout mobile,15);cin.ignore(20,n);insertnode(newrecord);elsecout lastname)函数和addnodetoend(newrecord)函数进行相关的数据插入操作。void insertnode(record *newrecord)system(cls);record *before;record *after;if(head = null)/链表为空,直接插入到头结点newrecord-next = null;head = newrecord;elseif(strcmp(newrecord-lastname, head-lastname) lastname);before = current;after = current-next;if(after = null)addnodetoend(newrecord);elsebefore-next = newrecord;newrecord-next = after;函数record *posinsertpoint(char lastname20) 对于插入链表头部或者尾部的情况很好处理,对于插入链表中间的情况,其核心是调用函数posinsertpoint按姓氏返回其在链表中正确的位置。record *posinsertpoint(char lastname20)char tempname20;record *temp;int tempint;if(head-next != null)current = head;temp = current-next;strcpy(tempname, temp-lastname);tempint = strcmp(lastname,tempname);while(tempint 0) & (current-next !=null)current = temp;if(current-next != null)temp = current-next;strcpy(tempname, temp-lastname);tempint = strcmp(lastname,tempname);elsecurrent = head;return(current);函数makenodenewhead(record *newrecord),addnodetoend(record *newrecord),movecurrenttoend()分别实现将数据添加到链表头部,末尾和current指针移动到链表尾的操作功能。添加到链表头部void makenodenewhead(record *newrecord)record *temp;temp = head;newrecord-next = temp;head = newrecord;添加到链表末尾void addnodetoend(record *newrecord)newrecord-next = null;movecurrenttoend();current-next = newrecord;current指针移动到链表尾void movecurrenttoend()current = head;while(current-next != null)current = current-next;函数void display()对数据进行全部的显示,display函数完成显示全部信息的功能,其实就是一个链表的遍历。void display()char fullname36;current = head;if(current != null)cout endl;cout 姓 名 电话号码 手机号n;cout lastname);strcat(fullname, , );strcat(fullname, current-firstname);cout.setf(ios:left);cout setw(36) fullname;cout.unsetf(ios:left);cout.setf(ios:right);cout setw(12) phonenum;cout.unsetf(ios:left);cout.setf(ios:right);cout setw(15) mobile next;cout endl;while(current != null);cout press enter to continue n;cin.get(pause);cin.ignore(1,pause);system(cls);elsecout n记录为空!n;cout press enter to continue n;cin.get(pause);cin.ignore(1,pause);system(cls);函数void searchbylastname()对姓氏进行查找void searchbylastname()system(cls);char searchstr20;current = head;cin.ignore(20,n);cout search.n;cout *n;cout lastname, searchstr) != 0)current = current-next;if(current != null)cout 匹配的记录:n;cout firstname lastname endl;cout phonenum mobile endl;cout press enter to contiunen;cin.get(pause);system(cls);elsecout 没有匹配记录!n;cout press enter to contiunen;cin.get(pause);system(cls);函数void update()进行更新操作功能,修改记录通过调用函数update完成,接收用户新的记录然后覆盖旧的记录。void update()system(cls);char searchstr20;current = head;cin.ignore(20,n);cout update.n;cout *n;cout lastname, searchstr) != 0)current = current-next;if(current != null)cout 匹配的记录:n;cout lastname firstname ;cout phonenum mobile endl;cout 请您输入新的记录信息.n;cout lastname,20);cin.ignore(20,n);cout firstname,15);cin.ignore(20,n);cout phonenum,15);cin.ignore(20,n);cout mobile,15);cin.ignore(20,n);cout 更新成功!n;cout press enter to contiunen;cin.get(pause);system(cls);elsecout 没有指定要更新的记录!n;cout press enter to contiunen;cin.get(pause);system(cls);函数void deleterecord()实现删除函数完成删除一条记录也就是链表的一个结点的功能。要求用户输入要删除的记录,然后进行查找,找到了就进行删除操作,若没有打到就提示删除失败。void deleterecord()system(cls);char searchstr20;record *previous;previous = null;current = head;cin.ignore(20,n);cout lastname, searchstr) != 0)previous = current;current = current-next;if(current != null)cout n匹配记录n;cout firstname lastname endl;cout phonenum mobile endl;if(verifydelete()deletenode(previous);cout n记录删除成功!n;elsecout n记录删除失败!n;elsecout n没有匹配记录,删除失败!n;system(cls);函数verifydelte()函数让用户确认是否执行删除操作,为了防止操作疏忽造成的数据丢失。关于删除操作,同样可以分为从链表头结点、尾结点和中间删除三种情况,函数deletehead、deleteend和deletemiddle三个函数完成对应的操作。int verifydelete()char yesno;cout yesno;if(yesno = y) | (yesno = y)return(1);elsereturn(0);删除结点void deletenode(record *previous)if(current = head)deletehead();elseif(current-next = null)deleteend(previous);elsedeletemiddle(previous);删除头结点void deletehead()current = head;if(head-next != null)head = current-next;elsehead = null;delete current;删除尾结点void deleteend(record *previous)delete current;previous-next = null;current = head;删除链表中间结点void deletemiddle(record *previous)previous-next = current-next;delete current;current = head;删除链表void deletelist()record *temp;current = head;dotemp = current-next;delete current;current = temp;*/while(temp != null);head = null;函数void wiritetofile()和void loadfromfile()实现信息写入文件和信息加载两个操作。把链表信息写入文件存盘void wiritetofile()ofstream outfile;outfile.open(phonebook.dat,ios:out);if (outfile)current = head;if(head != null)dooutfile lastname endl;outfile firstname endl;outfile phonenum endl;outfile mobile next;while(current != null);outfile end endl;outfile.close();elsecout lastname,20);infile.ignore(20,n);if(strcmp(newrecord-lastname, ) != 0) & (strcmp(newrecord-lastname, end) != 0)infile.get(newrecord-firstname, 15);infile.ignore(20,n);infile.get(newrecord-phonenum, 15);infile.ignore(20,n);infile.get(newrecord-mobile, 15);insertnode(newrecord);elsedelete newrecord;loop = 1;elsecout 警告: 存储器错误, 从磁盘加载文件失败!n;loop = 1;while(loop = 0);infile.close();elsecout 电话簿为空!n;函数int main()是程序的主要核心部分,所有用户要求的功能运行都是在这个部分进行调用的,增加记录、修改记录、删除记录、显示全部联系人信息以及按姓氏查找联系人等功能模块的调用都是通过这个部分完成的。int main()cout welcome.n;cout *n;cout nnn 欢迎使用phonebook个人电话簿管理系统. nn;cout press enter to continue!nnn;cout n*;cin.get(pause);system(cls);/执行系统命令:cls-清屏int choice;head = null;loadfromfile();do/主菜单显示cout menu.n;cout *n;cout phonebook个人电话管理系统主菜单 nn;cout 请选择以下功能: n;cout 1 - 添加一条记录n;cout 2 - 显示全部记录n;cout 3 - 按姓氏查找n;cout 4 - 更新记录n;cout 5 - 删除一条记录n;cout 6 - 清空电话簿n;cout 7 - 帮助n;cout 8 - 退出系统n;cout *n;cout choice;handlechoice(choice);while(choice != 8);return 0;五 程序的不足和设想改进 这个程序实现的是很简单的动作,它还有很多不足的地方。对于查找功能可以分为按姓氏和按名字查找,这是一方面。对于数据结构,也可以采用双向链表等其它数据结构来实现。对于信息的存储最有效的方式当然是采用数据库来存储这样可以做到安全和高效两全的程度,文件的存储、读取和查找没有数据库方便,这是显然的,而且在设计record的时候仅仅给出了基本的信息,对于许多额外的信息,如:当记录很多的时候
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025年工业互联网平台量子密钥分发技术产业创新与研发投入报告
- 2025年老年健康管理中慢性疼痛长期照护服务模式研究报告001
- 2025年新零售趋势分析报告:线上线下融合创新策略
- 考点攻克黑龙江省北安市7年级上册期末测试卷单元测评试题(详解版)
- 2025年教育信息化基础设施建设与教育信息化项目市场前景研究报告
- 2025年城市轨道交通智慧运维系统在地铁通信网络中的应用报告
- 基础强化人教版8年级数学下册《一次函数》专项训练试题(详解版)
- 护士企业编制面试题库及答案详解【必刷】
- 临床药物治疗学期末考试复习题库及答案详解【名校卷】
- 基础强化人教版8年级数学上册《全等三角形》专题训练试题(含答案解析版)
- 手术室的时间管理
- 传统养生与现代健康课件
- 2025年工会基础知识考试题库及参考答案
- 2024-2025学年四川省成都市蒲江县蒲江中学高三上学期调研摸底考试数学试卷
- 医疗健康新媒体运营方案
- 水利工程重点难点分析及管理措施
- 压力管道取证培训课件
- 山东省环境卫生作业计价定额编制说明
- 飞机机型培训课件
- 中国声乐作品课件图片
- 静态爆破监测方案(3篇)
评论
0/150
提交评论