个人通讯录的设计与实现_第1页
个人通讯录的设计与实现_第2页
个人通讯录的设计与实现_第3页
个人通讯录的设计与实现_第4页
个人通讯录的设计与实现_第5页
已阅读5页,还剩7页未读 继续免费阅读

下载本文档

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

文档简介

..***学院计算机科学与技术系实验报告实验名称个人通讯录的设计与实现专业班级计算机科学与技术1101姓名学号指导教师胡志军成绩日期一、实验目的熟练掌握线性表的类型定义方法、存储方法及其基本运算〔元素的插入、删除等的实现方法,培养综合运用所学知识,根据具体问题进行数据结构设计和算法设计的能力。熟练掌握简单的演示菜单与人机交互设计方法。二、实验内容1.实现单链表的基本操作如:initlist,listinsert,listdelete等。2.利用链式存储结构实现一个个人通讯录,通讯录内容有:学号、姓名、号码、通讯地址,至少包含记录添加、删除、显示和检索等基本功能。三、实验要求1.试描述线性表ADT。2.要有良好的人机界面,具备记录插入、纪录删除、显示纪录以及查找纪录的功能。〔基本要求3.通讯录是按姓名项的字母顺序排列的。〔选作4.所建通讯录能够保存为磁盘文件。〔选作5.在问题分析的基础上设计存储结构,进行算法设计,编写程序上机调试成功并完成实验报告。三、实验步骤1.需求分析本演示程序用C语言编写,制作一个个人通讯录,具备通讯录管理的基本功能。<1>输入的形式和输入值的范围:提供菜单选择操作,从键盘输入待操作的编号。<2>输出的形式和输出值的范围:在显示器上输出个人信息,开始应该初始化。<3>测试数据及预期结果:A在空表中添加个人信息〔如姓名,学号,性别,,地址等,选择显示操作,就可在显示器上显示。B选择相应的操作,就可进行此操作。2.概要设计<1>为了实现上述程序功能,需要定义线性表的抽象数据类型:

ADTLIST{数据对象:D={D={ai|ai∈ElemSet,i=0,1,2,…,n,n≥0}数据关系:R1={<ai-1,ai>|ai-1,ai∈D,i=2,...,n}基本操作:tongxunluinit<&L>操作结果:构造一个空的线性表L.tongxunluclear<&L>操作结果:清空线性表L.tongxunluempty<L>初始条件:线性表L已经存在。操作结果:若L为空表,则返回TRUE,否则返回FALSE。tongxunluInsert<&L,i,e>初始条件:线性表L已存在,1〈i<tongxunlulength<L>+1.操作结果:在L中第i个位置之前插入新的数据元素e,L的长度加1。tongxunluDelete<&L,i,&e>初始条件:线性表L已存在且非空,1〈i<tongxunlulength<L>.操作结果:删除L中第i个数据元素,并用e返回其值,L的长度减1。tongxunluget<&L,num>初始条件:线性表L已存在且非空。操作结果:输入与num相关的信息。<2>本程序包含9个函数:①主函数main<>②显示操作菜单函数scan<>③构造一个空的通讯录Init<>④清空一个通讯录Clear<>⑤判断一个通讯录是否为空Empty<>⑥显示全部的内容Traverse<>开始⑦查找一个人的信息Ge开始⑧添加一个人的信息Insert<>Scan语句⑨Scan语句流程图:输入n=1输入n=1输入n值〔n=2,3...8初始化While<!quit>输入n值〔n=2,3...8初始化While<!quit>8.退出7.删除6.添加5.查找4.显示所有信息8.退出7.删除6.添加5.查找4.显示所有信息3.检查通讯录是否为空2.清空通讯录3.详细设计实现概要设计中定义的所有的数据类型,对每个操作给出伪码算法。对主程序和其他模块也都需要写出伪码算法。<1>构造一个空的线性表.tongxunlutongxunluinit<>{tongxunluL;L=<tongxunlu>malloc<sizeof<student>>;L->next=NULL;returnL;}<2>线性表的基本操作voidtongxunluclear<tongxunluL>{L->next=NULL;}inttongxunluempty<tongxunluL>线性表为空返回1,否则返回0.voidtongxunluget<tongxunluL,longnum>查阅有关个人的信息.voidtongxunluinsert<tongxunluL,charnum[20],charname[20],charsex[20],charphon[20],charaddress[50]>添加新的个人信息.<包括姓名,学号,性别,,住址>voidtongxunludele<tongxunluL>删除有关个人的信息.voidtongxunluprint<tongxunluL>把所有的信息全部输出.3>其他模块伪码算法主函数main<>接收输入的项目数字编号,然后输出有关的信息.调用函数scan<>选择输入项目〔1,2,3,4,5,6,7,8返回值给函数switch<case>选项中接收,调用各个函数输出和项目编号相关的信息。4.调试分析<要写出以下四点,重点是第3点>1>分析算法的总体结构,分清程序中各部分应实现的功能;

2>调试方法通常有二种:总体调试、分块调试。你主要采用哪种调试方法?

总体调试:把算法组装成单个程序,按C程序结构标准分层检查调试;分块调试:把算法分拆成几个功能模块,按C程序结构标准分模块调试;3>错误跟踪有两种方法:错误信息排查法、执行路线跟踪法。错误信息排查法:根据错误信息进行分类排查,要求分析者对C的错误代码要有足够的了解和认识,有经验的程序员多用此法。

执行路线跟踪法:变量分析法〔跟踪变量的值、插入标签法〔插入输出标签,这种方法适合初学者。4调试分析不宜面面俱到,具体写出关键问题就行。5.使用说明程序名为"作业.exe",运行环境为C++。程序执行后显示:6.测试结果选择6添加信息此时通讯录不为空选择3显示界面再插入一个信息〔选择5,选择4显示选择5,进行查找。。查找徐倩相关信息。选择7进行删除,然后选择4显示界面清空通讯录选择4显示界面四、实验总结〔调试和运行程序过程中产生的问题及采取的措施;对算法的程序的讨论、分析,改进设想以及其它经验教训;对实验方式、组织、设备、题目的意见和建议等1.通过此程序,加深了对单链表的理解,知道了对字符,字符串,字符串比较的相关知识,自己对C语言结构体,函数调用等有所欠缺。2.编程过程中遇到如何查找个人信息的问题。3.该程序的缺点,在通讯录中有A的信息时,还可添加A的信息。附源程序:/*定义ElemType为int类型*/#include<stdio.h>#include<stdlib.h>#include<string.h>typedefintElemType;#defineTRUE1#defineFALSE0#defineNULL0/*单链表的结点类型*/typedefstructStudent{charname[20];charsex[20]; charnum[20]; charphon[20];charaddress[50];structStudent*next;}Student,*AddressList;/*初始化*/AddressListAddressListInit<>{AddressListL;L=<AddressList>malloc<sizeof<Student>>;L->next=NULL;returnL;}/*清空*/voidAddressListClear<AddressListL>{L->next=NULL;}/*检查是否为空*/intAddressListEmpty<AddressListL>{if<L->next==NULL>returnTRUE;elsereturnFALSE;}/*遍历*/voidAddressListTraverse<AddressListL>{AddressListp;p=L->next;printf<"\n============================个人通讯录=============================\n">;printf<"\t姓名\t性别\t学号\t\t\t\t地址\n">;printf<"\n">;if<p==NULL>{printf<"该通讯录中没有数据">;}while<p!=NULL>{printf<"\t%s\t%s\t%s\t%s\t%s\n",p->name,p->sex,p->num,p->phon,p->address>;p=p->next;}printf<"\n">;}/*查找元素*/voidAddressListGet<AddressListL>//按姓名查找{AddressListp;charname[20];p=L->next;printf<"输入待查找用户姓名:">;scanf<"%s",name>;while<p!=NULL>{if<strcmp<p->name,name>==0>{printf<"\n============被查到的信息如下============\n">;printf<"\t姓名\t性别\t学号\t\t\t\t地址\n">;printf<"\t%s\t%s\t%s\t%s\t%s\n",p->name,p->sex,p->num,p->phon,p->address>;printf<"\n">;return;}p=p->next;}printf<"不存在此姓名的用户\n">;}voidAddressListInsert<AddressListL>/*节点插入按姓名从小到大有序*/{AddressListpre,p,s;p=L->next;pre=L;s=<Student*>malloc<sizeof<Student>>; printf<"请输入姓名:">; scanf<"%s",s->name>; printf<"请输入性别:">; scanf<"%s",s->sex>;printf<"请输入:">; scanf<"%s",s->phon>; printf<"请输入学号:">; scanf<"%s",s->num>;printf<"请输入住址:">;scanf<"%s",s->address>; while<p!=NULL&&strcmp<p->name,s->name><0>{pre=p;p=p->next;}pre->next=s;s->next=p;}//删除名字intAddressListDel<AddressListL>{AddressListpre,p,q;intj; charname[20];pre=L;j=1;p=L->next;if<p==NULL>{printf<"该通讯录中没有数据">;return<0>;} printf<"请输入要删除记录的姓名:">; scanf<"%s",name>; while<p&&strcmp<p->name,name>!=0> {pre=p;p=p->next;j++;}q=p; if<p!=NULL>{pre->next=p->next; free<q>; return<1>;}else{printf<"表中没有该名字">;return<0>;}}intscan<>{intd;printf<"=================个人通讯录=================\n\n">;printf<"\t\t1.初始化\n\n\t\t2.清空通讯录\n\n\t\t3.检查通讯录是否为空\n">;printf<"\n\t\t4.显示所有信息\n\n\t\t5.查找\n\n\t\t6.添加\n\n\t\t7.删除\n\n\t\t8.退出\n\n">;printf<"\n选择所需操作:">;scanf<"%d",&d>;return<d>;}main<>{ intquit=0;AddressListL;while<!quit>switch<scan<>>{case1:L=AddressListInit<>;break;//初始化case2:AddressListClear<L>;break;//清空 case3:if<AddressListEmpty<L>>printf<"true\n">;//判断

温馨提示

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

评论

0/150

提交评论