数据结构课程设计(通讯录制作)

合集下载

数据结构课程设计报告---通讯录

数据结构课程设计报告---通讯录

数据结构课程设计报告---通讯录## 一、项目背景随着信息科技的发展,现代社会通讯录的应用越来越普遍,满足了人们信息的获取和管理的需求。

本项目的设计目的在于使用面向对象的程序思想,以面向对象的方式它来实现对通讯录信息的管理,进而提高信息的管理效率,提升信息的可靠性和安全性,最终达到为社会实施科学管理的目的。

## 二、系统需求1. 界面美观、格式明确,有良好的友好提示。

2. 系统稳定性强,能承受短时间的高并发量使用。

3. 提供友好的系统操作界面,对用户操作进行一定的约束,方便用户操作。

4.提供有效的联系人信息管理功能,能够实现增删改查等操作。

5.支持联系人信息备份和恢复,以及密码设置。

6.能够防止任何人未经授权而访问系统,或者磁盘信息的泄露。

此系统的设计主要分为三大部分,即界面层、业务逻辑层和数据存储层。

界面层通过展示信息给用户,实现数据的输入及输出;业务逻辑层主要处理用户请求,实现对数据的操作;数据存储层通过文件存储数据,实现对联系人信息的永久保存。

本项目采用C++语言,以链表数据结构为基础,将用户的联系人存储在链表中,充分利用其动态性,实现联系人的增删改查操作.同时,为了提供更进一步的使用,增加了密码功能,对未授权访问进行防止,以及数据备份和恢复功能。

## 四、功能实现1. 界面设计:首先,根据系统所需要的功能,采用控制台方式,以文字提示形式,配以整齐美观的各项参数和信息,实现各项功能。

2. 加密控制:本系统实现授权登陆加密功能,使系统对未经授权的用户隐藏信息,以确保系统的安全性。

3. 测试功能:功能的测试旨在确保程序的完整性和正确性。

4. 管理功能:本系统实现联系人信息的增删改查操作,在这几项功能的实现过程中,使用链表数据结构,更好的实现程序的功能。

5. 修改密码功能:此功能实现用户可以修改自己的密码,以确保用户自己可以比较安全的使用系统,不会受到他人的侵犯。

6. 加载和存储数据:通过使用文件存储,实现数据的存储和读取,以及备份功能,实现对数据永久保存。

数据结构课程设计(通讯录)

数据结构课程设计(通讯录)

数据结构课程设计(通讯录)
题目描述:
设计一个通讯录程序,实现以下功能:
1. 添加联系人信息
2. 删除联系人信息
3. 修改联系人信息
4. 查找联系人信息
5. 显示所有联系人信息
6. 退出程序
要求:
1. 使用链表作为数据结构存储联系人信息
2. 界面友好,操作简单方便
3. 能够防止重复添加联系人信息
设计思路:
1. 定义一个结构体Contact表示联系人信息,包括姓名、电话、邮箱等成员变量。

2. 定义一个链表结构体List表示联系人链表,包括头结点、
节点数量等成员变量。

3. 实现添加联系人信息函数,首先判断联系人是否存在,如果存在则提示用户,否则分配一个新的节点,并将联系人信息存储在节点中,将新节点插入链表中。

4. 实现删除联系人信息函数,首先判断联系人是否存在,如果不存在则提示用户,否则在链表中删除该节点。

5. 实现修改联系人信息函数,首先判断联系人是否存在,如果不存在则提示用户,否则修改节点中的信息。

6. 实现查找联系人信息函数,遍历链表查找是否有匹配姓名的联系人。

7. 实现显示所有联系人信息函数,遍历链表打印出所有联系人信息。

8. 在main函数中调用上述函数,根据用户输入的指令调用对应的函数,直到用户选择退出程序。

数据结构课程设计-建通讯录

数据结构课程设计-建通讯录

建通讯录要求:第一个模块——主函数main()的功能是:根据选单的选项调用各函数,并完成相应的功能。

第二个模块——Menu()的功能是:显示英文提示选单。

第三个模块——Quit()的功能是:退出选单。

第四个模块——Create()的功能是:创建新的通讯录。

第五个模块——Add()的功能是:在通讯录的末尾,写入新的信息,并返回选单。

第六个模块——Find()的功能是:查询某人的信息,如果找到了,则显示该人的信息,如果未找到,则提示通讯录中没有此人的信息,并返回选单。

第七个模块——Alter()的功能是:修改某人的信息,如果未找到要修改的人,则提示通讯录中没有此人的信息,并返回选单。

第八个模块——Delete()的功能是:删除某人的信息,如果未找到要删除的人,则提示通讯录中没有此人的信息,并返回选单。

第九个模块——List()的功能是:显示通讯录中的所有记录。

人数:2人要求:实用目录第一章课程设计目的和要求 (1)1.1 课程设计的目的 (1)1.2 课程设计实现的要求 (1)第二章课程设计任务内容 (2)第三章详细设计说明 (3)3.1 模块 (3)3.2 性能 (4)3.3 算法说明 (5)3.4 函数说明 (5)3.5 系统程序流程图 (15)第四章软件使用说明 (17)4.1 软件使用说明及出现的问题 (17)4.2运行结果 (17)第五章课程设计心得与体会 (21)附录一:参考文献 (22)附录二:程序清单 (23)通讯录系统第一章课程设计目的和要求1.1 课程设计的目的进一步巩固《C++程序设计》所学的知识,特别加强数组,指针,结构体,文件数据类型的应用,熟悉面向过程的结构化和面向对象可视化程序设计方法,培养结构化程序设计的思想,加深对高级语言基本语言要素和控制结构的理解,锻炼程序设计的能力,以及用C/C++ 语言解决实际问题的能力,为以后后续课程的学习打好基础。

此课程设计着眼于知识的运用,把平常学的知识运用到课程实践中来,本身就是考察我们知识运用能力。

数据结构课程设计报告---通讯录

数据结构课程设计报告---通讯录

数据结构课程设计报告专业:计算机科学与技术年级:课题名称:通讯录小组成员1:小组成员2:小组成员3:一、问题描述设计目的:用〈〈数据结构〉〉中的双向链表作数据结构,结合C语言基本知识。

编写一个通讯录管理系统。

以把所学数据结构知识应用到实际软件开发中去。

设计内容:本系统应完成一下几方面的功能:1) 输入信息——enter();2) 显示信息———display( );3) 查找以姓名作为关键字———search( );4) 删除信息———delete( );5) 存盘———save ( );6) 装入———load( ) ;设计要求:1) 每条信息至包含:姓名(NAME )街道(STREET)城市(CITY)邮编(EIP)国家(STATE)几项2) 作为一个完整的系统,应具有友好的界面和较强的容错能力3) 上机能正常运行,并写出课程设计报告二、需求分析A,添加:系统将提示用户输入新添加人员信息,输入到文件中,人员信息数据包括姓名(name),街道(street),城市(city),邮编(eip),国家(state).B,删除:首先由用户输入要删除的人员的姓名,然后调用删除函数,删除该人员的所有相关资料.C,显示所有人员信息:该功能将显示已经保存的所有人员的姓名,街道,城市,邮编及国家.D,查询:可由用户输入要查找的人员姓名,然后系统用查找函数查找,接着系统使用相关文件命令输出所查找的人员的全部信息.E,退出系统关闭通讯录管理系统.三、概要设计六个函数的实现:void enter(); 新添纪录void search(); 按姓名查询void display(); 显示void load(); 读取文件void save(); 写入文件void delete(); 删除四、详细设计通讯录管理系统功能说明图:通讯录管理系统数据结构及各模块分析:1.设计类、对象及基本数据类型:创建一个record类,它有五个数据成员:char name[20]; 姓名char street[20]; 街道char city[20]; 城市char eip[20]; 邮编char state[20]; 国家2.包含函数及功能如下:void mainmenu(); 主菜单void searchmenu(); 查找菜单void enter(); 新添纪录void search(); 按姓名查询void display(); 显示所有void load(); 读取文件void save(); 写入文件void delete(); 按姓名删除3.结构体:struct record{char street[20];char name[20];char city[20];char state[20];char eip[20];}student[500];struct slnode{record date;struct slnode *next;struct slnode *prior;};五、调试分析void load()//从文件导入{if((fp=fopen("student","rb"))==NULL) //打开文件进行读的操作{printf("\n\t\t通讯录文件不存在");if ((fp=fopen("student","wb"))==NULL)//打开文件进行读的操作{printf("\n\t\t建立失败");exit(0);}else{printf("\n\t\t通讯录文件已建立");printf("\n\t\t按任意键进入主菜单");getch(); //从键盘接收一个字符}return; //返回主函数的主菜单}exit(0);}fseek(fp,0,2); /*文件位置指针移动到文件末尾*/if (ftell(fp)>0) /*文件不为空*/{rewind(fp); /*文件位置指针移动到文件开始位置*/for (num=0;!feof(fp) && fread(&student[num],sizeof(struct record),1,fp);num++);.......getch();return;}●void mainmenu()//主菜单{char choic;system("cls");printf("\n\t\t***************欢迎进入通讯录系统***************");printf("\n\t\t******************1-新添纪录******************");printf("\n\t\t******************2-查找联系人****************");printf("\n\t\t******************3-删除联系人***************");printf("\n\t\t******************4-保存退出*****************");printf("\n\t\t******************5-不保存退出***************");printf("\n\t\t************************************************"); printf("\n\t\t请选择:");choic=getch();switch (choic){case '1':enter();break;case '2':searchmenu();break;case '3':delet();break;case '4':save();break;case '5':exit(0);default:mainmenu();}}●void searchmenu()//查询菜单{char choic;system("cls");printf("\n\t\t******************* 查询菜单*******************");printf("\n\t\t**************** 1-显示所有********************");printf("\n\t\t**************** 2-按姓名查询******************");printf("\n\t\t**************** 3-返回主菜单******************"); printf("\n\t\t************************************************"); printf("\n\t\t请选择:");choic=getch();switch (choic){case '1':display();break;case '2':search();break;case '3':mainmenu();break;}}void enter()//添加纪录{printf("\n\t\t**************** 请输入学生信息****************\n"); printf("\n\t\t姓名:");scanf("%s",&student[num].name);printf("\n\t\t街道:");scanf("%s",&student[num].street);printf("\n\t\t城市:");scanf("%s",&student[num].city);printf("\n\t\t输入邮编:");scanf("%s",&student[num].eip);printf("\n\t\t国家:");scanf("%s",&student[num].state);num++;listinsert();printf("\n\t\t是否继续添加?(Y/N):");if (getch()=='y')enter();return;}void display()//显示所有{int i;system("cls");if(num!=0){printf("\n\t\t*************** 以下为通讯录所有信息************");for (i=0;i<num;i++){printf("\n\t\t姓名:%s",student[i].name);printf("\n\t\t街道:%s",student[i].street);printf("\n\t\t城市:%s",student[i].city);printf("\n\t\t邮编:%s",student[i].eip);printf("\n\t\t国家:%s",student[i].state);printf("\t\t");if (i+1<num){printf("\n\t\t__________________________");// system("pause");}}printf("\n\t\t************************************************"); }elseprintf("\n\t\t通讯录中无任何纪录");printf("\n\t\t按任意键返回主菜单:");getch();return;}void search()//查找联系人{int j=0,a=0;//j用来记录查找.......scanf("%s",name);for(int i=a;i<num;i++,p=p->next)//num用来表示联系人的个数{if(strcmp(name,p->next->)==0)//查找是否有该人,有则输出该点所有信息,并往下查找。

通讯录的制作数据结构课程设计

通讯录的制作数据结构课程设计

通讯录的制作数据结构课程设计一、引言随着互联网和移动设备的普及,通讯录的重要性日益凸显。

通讯录不仅是一个人与人之间联系的桥梁,也是个人和组织之间沟通的纽带。

在数据结构课程设计中,我们将探讨如何制作一个高效、易用且具备良好扩展性的通讯录。

二、通讯录的需求分析在设计通讯录时,我们需要考虑以下需求: 1. 支持添加、删除、修改联系人信息的功能; 2. 支持按姓名、电话号码等属性进行搜索的功能; 3. 支持导入、导出通讯录的功能; 4. 支持多用户共享的功能; 5. 支持通讯录的快速访问和响应;6. 支持对联系人信息进行分类和标记的功能。

三、通讯录的数据结构设计为了满足上述需求,我们需要设计一个合适的数据结构来存储通讯录信息。

一种常见的数据结构是哈希表(Hash Table)。

哈希表可以通过将联系人的属性(如姓名、电话号码)进行哈希运算,将其转换为一个唯一的索引,从而实现快速的插入、搜索和删除操作。

3.1 哈希函数的选择在设计哈希表时,选择合适的哈希函数十分关键。

一个好的哈希函数应具备以下特点: - 均匀性:能够将联系人的属性均匀地映射到哈希表的槽位上,避免出现冲突; - 快速性:计算哈希值的过程应尽量简单、高效; - 低冲突率:尽可能避免多个联系人映射到同一个槽位的情况。

3.2 哈希表的实现我们可以使用数组来表示哈希表的槽位,每个槽位存储一个链表。

链表的节点包含联系人的信息。

当发生冲突时,我们可以使用链表来解决。

3.3 哈希表的性能分析哈希表在理想情况下可以达到常数级的时间复杂度,但在最坏情况下可能会退化为线性时间复杂度。

为了降低冲突率,我们可以使用一些解决冲突的技术,如链地址法、开放地址法等。

四、通讯录的功能实现在通讯录中,我们需要实现添加、删除、修改联系人信息的功能,以及按属性进行搜索等功能。

4.1 添加联系人当用户需要添加一个联系人时,我们首先需要计算联系人的哈希值,并找到对应的槽位。

然后将联系人的信息插入到链表的头部。

数据结构课程设计通讯录的制作

数据结构课程设计通讯录的制作

数据结构课程设计通讯录的制作一、引言二、需求分析1. 功能需求2. 性能需求3. 安全需求三、设计思路1. 数据结构选择2. 界面设计四、系统功能模块设计与实现1. 添加联系人模块2. 删除联系人模块3. 修改联系人模块4. 查询联系人模块五、系统性能测试与优化六、安全性测试与优化七、总结一、引言通讯录是我们日常生活中必不可少的工具之一,它可以帮助我们轻松地管理和查找联系人的信息。

本次课程设计旨在通过数据结构的应用,实现一个简单易用的通讯录管理系统。

二、需求分析1. 功能需求本系统需要实现以下功能:(1)添加联系人:可添加新的联系人信息,包括姓名、电话号码等;(2)删除联系人:可删除已有的联系人信息;(3)修改联系人:可修改已有的联系人信息;(4)查询联系人:可根据姓名或电话号码等关键字查询已有的联系人信息。

2. 性能需求本系统需要满足以下性能需求:(1)快速响应:用户操作时,系统需要快速响应,避免出现卡顿等情况;(2)稳定性:系统需要保持稳定,避免出现崩溃等情况;(3)易用性:系统需要易于使用,用户可以轻松地完成各项操作。

3. 安全需求本系统需要满足以下安全需求:(1)用户身份验证:用户在登录时需要进行身份验证,确保只有授权用户才能使用该系统;(2)数据隐私保护:系统需要对用户的数据进行加密处理,确保用户的隐私得到保护。

三、设计思路1. 数据结构选择本系统采用链表作为主要的数据结构。

链表具有插入、删除等操作效率高的优点,可以很好地满足通讯录管理中添加、删除联系人等操作的需求。

2. 界面设计本系统采用图形界面设计,界面简洁明了,易于操作。

主要界面包括登录界面、主界面和添加/修改联系人界面等。

四、系统功能模块设计与实现1. 添加联系人模块(1)输入联系人信息;(2)将新联系人信息插入链表中。

2. 删除联系人模块(1)输入待删除联系人姓名或电话号码等关键字;(2)查找并删除相应节点。

3. 修改联系人模块(1)输入待修改联系人姓名或电话号码等关键字;(2)查找相应节点;(3)修改节点信息。

数据结构课程设计-通信录的制作(附录中有全部代码)

数据结构课程设计-通信录的制作(附录中有全部代码)

课程设计任务书专业名称:计算机科学与技术(软件工程)课程名称:数据结构课程设计设计题目:通讯录的制作起止时间:2013年6月24日至2013年7月12日问题描述编写一个通讯录管理系统。

基本要求1)每条信息至少包含:姓名(name)、街道(street)、城市(city)、邮编(eip)、国家(state)这几项;2)作为一个完整的系统,应具有友好的界面和较强的容错能力;3) 利用链表作为存储结构4) 上机能正常运行通信录的制作1概要设计该程序主要是解决用链表实现通讯录,并通过通讯录实现存取,显示,插入、删除记录等问题,首先进行数据的录入,包括编号、姓名、性别、电话号和地址;其次是显示之前所录入的信息,并通过编号或姓名进行查询;第三是实现插入功能;第四是实现删除功能;之后是删除记录退出程序。

系统主要由五个函数组成:第一个函数是主函数主要功能主函数(main()函数)是通过一个多分支语句(switch(i)语句)实现的。

,第二个函数主要的功能输入通讯录的信息包括编号、姓名、性别等,第三个函数通过编号或姓名查询所有信息。

第四个函数将新的信息插入到系统中。

第五个函数通过编号或姓名对所对应的通讯录信息进行删除。

系统主要由四个模块组成:●输入模块:输入通讯录的信息包括编号、姓名、性别等。

●查询模块:通过编号或姓名查询所有信息。

●插入模块:将新的信息插入到系统中。

●删除模块:通过编号或姓名对所对应的通讯录信息进行删除。

图1模块图2详细设计关键代码解析:主函数int main(){Pointer Head=NULL;int i;do{printf("-------------通讯录系统--------------\n");printf("\n");printf("1.插入联系人信息\n");printf("2.查找联系人信息\n");printf("3.修改联系人信息\n");printf("4.删除联系人信息\n");printf("5.显示联系人信息\n");printf("6.退出\n");scanf("%d",&i);switch(i){case 1:Insert(&Head);break;case 2:Search(Head);break;case 3:Update(Head);break;case 4:Delete(&Head);break;case 5:Show(Head);break;case 6:break;default:printf("输入错误!请重新输入!");break;}}while(i!=6);return 0;}void Insert(Pointer *Head){char in_name[10];Pointer p,q,r;printf("请输入姓名:");scanf("%s",in_name);p=q=*Head;while(p!=NULL){q=p;p=p->next;}r=(Pointer)malloc(sizeof(Link));r->next=NULL;if(r==NULL){printf("分配空间失败!");return;}if(q==NULL)*Head=r;else{q->next=r;}strcpy(r->name,in_name);printf("请输入街道:");scanf("%s",r->street);printf("请输入城市:");scanf("%s",r->city);printf("请输入邮编:");scanf("%s",r->eip);printf("请输入国家:");scanf("%s",r->state);}void Search(Pointer Head){int flag=1;char in_name[10];Pointer p;printf("请输入要查询的姓名:");scanf("%s",in_name);p=Head;while(p!=NULL&&flag){if(strcmp(p->name,in_name)){p=p->next;}else{printf("街道:%s\n",p->street);printf("城市:%s\n",p->city);printf("邮编:%s\n",p->eip);printf("国家:%s\n",p->state);flag=0;}}if(flag)printf("没有查询到!");}void Update(Pointer Head){int flag=1;char in_name[10];Pointer p;printf("请输入要修改的姓名:");scanf("%s",in_name);p=Head;while(p!=NULL&&flag){if(strcmp(p->name,in_name)){p=p->next;}else{printf("请输入街道:");scanf("%s",p->street);printf("请输入城市:");scanf("%s",p->city);printf("请输入邮编:");scanf("%s",p->eip);printf("请输入国家:");scanf("%s",p->state);flag=0;}if(flag){printf("没有找到要修改的记录!");}}}void Delete(Pointer *Head){int flag=1;char in_name[10];Pointer p,q;printf("请输入要删除的姓名:");scanf("%s",in_name);p=q=*Head;while(p!=NULL&&flag){if(strcmp(p->name,in_name)){q=p;p=p->next;}else{if(p==*Head){*Head=p->next;free(p);}else{q->next=p->next;free(p);}flag=0;}}}void Show(Pointer Head){Pointer p;p=Head;while(p!=NULL){printf("姓名:%-10s",p->name);printf("街道:%-10s",p->street);printf("城市:%-10s",p->city);printf("邮编:%-10s",p->eip);printf("国家:%-10s",p->state);p=p->next;}}3调试报告在编辑完成一个C语言源程序并最终在计算机上看到程序的运行结果要经过以下几个步骤:上机输入与编辑源程序文件;编译源程序文件;与库函数连接;运行可执行文件。

数据结构课程设计报告--通讯录的制作

数据结构课程设计报告--通讯录的制作

山东理工大学计算机学院课程设计(数据结构)班级姓名学号指导教师二○一一年一月二十日课程设计任务书及成绩评定课题名称数据结构Ⅰ、题目的目的和要求:1、设计目的巩固和加深对数据结构的理解,通过上机实验、调试程序,加深对课本知识的理解,最终使学生能够熟练应用数据结构的知识写程序。

(1)通过本课程的学习,能熟练掌握几种基本数据结构的基本操作。

(2)能针对给定题目,选择相应的数据结构,分析并设计算法,进而给出问题的正确求解过程并编写代码实现。

2、设计题目要求:通讯录的制作设计目的:用〈〈数据结构〉〉中的双向链表作数据结构,结合C/C++语言基本知识。

编写一个通讯录管理系统。

以把所学数据结构知识应用到实际软件开发中去。

设计内容:本系统应完成一下几方面的功能:输入信息——enter();显示信息———display( );查找以姓名作为关键字———search( );删除信息———delete( );存盘———save ( );装入———load( ) ;设计要求:1) 每条信息至包含:姓名(NAME )街道(STREET)城市(CITY)邮编(ZIP)国家(STATE)几项。

2) 作为一个完整的系统,应具有友好的界面和较强的容错能力。

3) 上机能正常运行,并写出课程设计报告。

Ⅱ、设计进度及完成情况Ⅲ、主要参考文献及资料[1] 严蔚敏数据结构(C语言版)清华大学出版社 1999[2] 严蔚敏数据结构题集(C语言版)清华大学出版社 1999[3] 谭浩强 C语言程序设计清华大学出版社[4] 与所用编程环境相配套的C语言或C++相关的资料Ⅳ、成绩评定:设计成绩:(教师填写)指导老师:(签字)二○一一年一月二十一日目录第一章概述 (1)第二章系统分析 (2)第三章概要设计 (2)第四章详细设计 (5)第五章运行与测试 (16)第六章总结与心得 (22)参考文献 (24)第一章概述课程设计是实践性教学中的一个重要环节,它以某一课程为基础,可以涉及和课程相关的各个方面,是一门独立于课程之外的特殊课程。

学生通讯录管理系统数据结构课程设计

学生通讯录管理系统数据结构课程设计

学生通讯录管理系统数据结构课程设计一、需求分析在学生通讯录管理系统中,我们需要实现以下功能:1.学生信息的录入与管理2.通讯录信息的增删查改3.数据的持久化存储二、系统设计1. 数据结构设计为了实现学生通讯录管理系统的功能,我们需要设计以下数据结构:•学生信息结构体包括学号、姓名、性别、年龄等字段•通讯录信息结构体包括联系人姓名、电话号码、邮箱等字段2. 算法设计2.1 添加学生信息当用户选择添加学生信息时,系统会要求用户输入学号、姓名、性别、年龄等信息,然后将这些信息存储在学生信息的数据结构中。

void addStudentInfo() {// 读取用户输入的学生信息// 将学生信息存储在学生信息结构体中}2.2 修改通讯录信息用户可以根据联系人姓名查找通讯录信息,并进行修改操作,比如修改电话号码、邮箱等内容。

void modifyContactInfo() {// 根据联系人姓名查找通讯录信息// 用户进行修改操作}2.3 删除通讯录信息用户可以根据联系人姓名删除通讯录信息。

void deleteContactInfo() {// 根据联系人姓名删除通讯录信息}3. 数据存储设计为了持久化存储数据,我们可以选择使用文件存储或数据库存储。

在本系统中,我们选择文件存储的方式,数据以文本的形式存储在文件中。

三、系统实现通过以上设计,我们可以开始实现学生通讯录管理系统。

在实现过程中,我们需要注意保证数据结构的正确性和数据操作的合法性,从而确保系统的稳定性和可靠性。

四、总结通过本次数据结构课程设计,我们深入了解了学生通讯录管理系统的实现原理和功能设计。

在接下来的学习中,我们将继续努力提升自己的编程能力,不断完善系统的功能和性能,为实现更多复杂系统打下坚实的基础。

数据结构课程设计通讯录管理系统

数据结构课程设计通讯录管理系统

数据结构课程设计通讯录管理系统一、系统需求分析通讯录管理系统的主要目标是提供一个方便、高效的方式来管理联系人信息。

具体需求包括:1、能够添加联系人,包括姓名、电话号码、电子邮件、地址等基本信息。

2、可以对联系人信息进行修改和删除操作。

3、支持按照姓名、电话号码等关键字进行快速查找。

4、能够以列表形式展示所有联系人的信息。

二、数据结构选择为了实现上述功能,我们需要选择合适的数据结构来存储联系人信息。

考虑到联系人信息的多样性和动态性,链表是一个不错的选择。

链表可以方便地进行插入、删除和修改操作,并且能够灵活地调整存储空间。

另外,为了提高查找效率,我们可以结合使用哈希表。

通过将联系人的关键信息(如姓名或电话号码)进行哈希运算,快速定位到对应的联系人节点。

三、系统功能实现1、添加联系人功能当用户选择添加联系人时,系统会提示用户输入联系人的各项信息。

这些信息被封装成一个结构体,并通过链表的插入操作添加到链表中。

同时,将关键信息映射到哈希表中,以便后续快速查找。

2、修改联系人功能用户输入要修改的联系人的关键字,系统通过哈希表快速找到对应的联系人节点。

然后,提示用户输入修改后的信息,并更新链表和哈希表中的数据。

3、删除联系人功能与修改功能类似,通过关键字找到联系人节点,从链表和哈希表中删除相应的节点和信息。

4、查找联系人功能用户输入查找关键字,系统通过哈希表进行快速定位,如果找到匹配的联系人,则显示其详细信息。

5、展示所有联系人功能遍历链表,将所有联系人的信息以列表形式输出到屏幕上。

四、系统界面设计为了提高用户体验,系统设计了简洁直观的界面。

主界面提供了添加、修改、删除、查找和展示所有联系人等功能选项。

用户通过选择相应的选项,进入对应的操作流程。

五、代码实现示例以下是部分关键代码的示例:```c//联系人结构体typedef struct Contact {char name50;char phoneNumber20;char email50;char address100;struct Contact next;} Contact;//哈希表节点结构体typedef struct HashNode {char key50;Contact contact;struct HashNode next;} HashNode;//链表插入联系人void insertContact(Contact head, Contact newContact) {newContact>next = head;head = newContact;}//哈希函数unsigned int hashFunction(const char key) {unsigned int hash = 0;while (key) {hash =(hash << 5) + key++;}return hash % HASH_TABLE_SIZE;}//查找联系人Contact findContact(Contact head, const char key, HashNode hashTable) {unsigned int hashValue = hashFunction(key);HashNode node = hashTablehashValue;while (node) {if (strcmp(node>key, key) == 0) {return node>contact;}node = node>next;}Contact current = head;while (current) {if (strcmp(current>name, key) == 0 ||strcmp(current>phoneNumber, key) == 0) {//更新哈希表HashNode newNode =(HashNode )malloc(sizeof(HashNode));strcpy(newNode>key, key);newNode>contact = current;newNode>next = hashTablehashValue;hashTablehashValue = newNode;return current;}current = current>next;}return NULL;}```六、系统测试在完成系统的开发后,需要进行全面的测试以确保系统的稳定性和可靠性。

数据结构课程设计 — 通讯录的制作

数据结构课程设计 — 通讯录的制作
创建哈希表——void CreateHash()
查找哈希表中的关键字——void SearchHash()
4.3详细设计
4.3.1定义的所有数据类型
(1)定义通讯录节点结构体
typedef struct{ //每一条电话本记录
NA name;
NA tel;
NA add;
}Record;
(2)定义哈希表节点结构体
4、设计内容……………………………………………………………3
4.1需求分析…………………………………………………………3
4.2总体设计…………………………………………………………4
4.2.1本程序中用到的所有抽象数据类型的定义………………4
4.2.2主程序的流程………………………………………………4
添加新的用户信息
查找并显示给定用户名的记录
查找并显示给定电话号码的记录
显示版本信息并退出通讯录
C.根据选项实际操作
主函数void main()分别调用下面函数并对应输出void printf()
录入内存内容——void getin()
显示用户信息——void ShowInformation()
输入新名片信息——void insert()
if(strcmp(x,y)==0)
return SUCCESS;
else return UNSUCCESS;
}Status NUM_BER; //记录的个数
(4)对姓名的折叠处理
long fold(NA s)
{ //姓名的折叠处理,就是将名字转换成一个数值
char *p; long sum=0; NA ss;
while((H->elem[pp]!=NULL)&&(eq(str,H->elem[pp]->name)==-1))

数据结构课程设计-建通讯录

数据结构课程设计-建通讯录

数据结构课程设计-建通讯录建通讯录要求:第一个模块——主函数main()的功能是:根据选单的选项调用各函数,并完成相应的功能。

第二个模块——Menu()的功能是:显示英文提示选单。

第三个模块——Quit()的功能是:退出选单。

第四个模块——Create()的功能是:创建新的通讯录。

第五个模块——Add()的功能是:在通讯录的末尾,写入新的信息,并返回选单。

第六个模块——Find()的功能是:查询某人的信息,如果找到了,则显示该人的信息,如果未找到,则提示通讯录中没有此人的信息,并返回选单。

第七个模块——Alter()的功能是:修改某人的信息,如果未找到要修改的人,则提示通讯录中没有此人的信息,并返回选单。

第八个模块——Delete()的功能是:删除某人的信息,如果未找到要删除的人,则提示通讯录中没有此人的信息,并返回选单。

第九个模块——List()的功能是:显示通讯录中的所有记录。

人数:2人要求:实用目录第一章课程设计目的和要求 (1)1.1 课程设计的目的 (1)1.2 课程设计实现的要求 (1)第二章课程设计任务内容 (2)第三章详细设计说明 (3)3.1 模块 (3)3.2 性能 (4)3.3 算法说明 (5)3.4 函数说明 (5)3.5 系统程序流程图 (15)第四章软件使用说明 (17)4.1 软件使用说明及出现的问题 (17)4.2运行结果 (17)第五章课程设计心得与体会 (21)附录一:参考文献 (22)附录二:程序清单 (23)通讯录系统第一章课程设计目的和要求1.1 课程设计的目的进一步巩固《C++程序设计》所学的知识,特别加强数组,指针,结构体,文件数据类型的应用,熟悉面向过程的结构化和面向对象可视化程序设计方法,培养结构化程序设计的思想,加深对高级语言基本语言要素和控制结构的理解,锻炼程序设计的能力,以及用C/C++ 语言解决实际问题的能力,为以后后续课程的学习打好基础。

数据结构课程设计通讯录制作

数据结构课程设计通讯录制作

一.设计内容(通讯录)本系统应完成一下几方面的功能:1)?输入信息——enter();2)?显示信息———display( );3)?查找以姓名作为关键字———search( );4)?删除信息———delete( );5)?存盘———save ( );6)?装入———load( ) ;设计要求:1)?每条信息至包含:姓名(NAME )街道(STREET)城市(CITY)邮编(EIP)国家(STATE)几项2)?作为一个完整的系统,应具有友好的界面和较强的容错能力二.设计思路通过visual c++(用的是C语言)编写一个dos界面的控制台程序,该程序通过链表的操作,文件存储来实现通讯录的基本功能struct address{ /*定义结构*/char name[10]; /*姓名*/char street[50]; /*街道*/char city[10]; /*城市*/char state[15]; /*国家*/char eip[7]; /*邮编*/struct address *next; /*后继指针*/struct address *prior; /*前驱指针*/}链表的插入,删除来实现通讯录里的内容的插入删除当操作完成通过文件件来存储链表的信息,下次打开程序时,读取文件里的内容到内存中,放在链表,然后又可以对链表进行操作;struct address *last; /*尾结点*/struct address *find(char *); /*声明查找函数*/void enter(); /*函数声明*/void search(); /*查找,查找过程中调用find函数*/void save(); /*存盘,将链表信息保存到文件中*/void load(); /*导入,将文件内容导入到内存链表中*/ void list(); /*显示当前链表中信息*/void ddelete(struct address **,struct address **);void insert(struct address *i,struct address **start,struct address **last);void inputs(char *,char *,int);void display(struct address *);int menu_select(void);三.详细设计1.主界面设计通过switch语句调用各种函数,实现各种操作。

通讯录制作(数据结构课程设计)

通讯录制作(数据结构课程设计)
类似于(栈)那种情况
line *temp=p;
line *del=temp->next;
temp->next=temp->next->next;
free(del);
printf("删除成功\n"); return p;
}
//指定名字删除
int select_name(line *p,char *name)
if (t->elem==elem){
return i;
}
i++;
}
//程序执行至此处,表示查找失败
return -1;
}
三、课程设计中遇到的难点及解决办法问题:对数据进行增删改查后,如何将改变的数据同步到文件? 解决方法:在退出函数前面设置一个保存文件的函数,这样无论数据发生怎样的变化, 都会在结尾时,随着退出函数的实现而实现。
while(temp->next)
{if(strcmp(temp->name,name)==0)
{
printf("请对该账号进行重新修改\n");
scanf("%s %s",&temp->name,&temp->cell_number);
printf("修改成功!\n");
}
temp=temp->next;
算法实现:
//p为原链表,elem表示被查找元素、
int selectElem(link * p,int elem){
//新建一个指针t,初始化为头指针p
link * t=p;
int i=1;
//由于头节点的存在,因此while中的判断为t->next

通讯录的制作数据结构课程设计

通讯录的制作数据结构课程设计

通讯录的制作数据结构课程设计
在通讯录的制作数据结构课程设计中,我们将使用链表作为主要的数据结构来存储联系人的信息。

链表是一种动态数据结构,它可以根据实际需要动态地分配和释放内存,非常适合用来存储不定数量的联系人信息。

首先,我们需要设计一个联系人的结构体,包含姓名、电话号码、邮箱等基本信息。

然后,我们可以使用链表节点来表示每个联系人,每个节点包含一个联系人的信息以及指向下一个节点的指针。

在创建通讯录时,我们将使用一个头节点来表示通讯录的起始位置,该头节点不包含任何联系人信息,只有一个指向第一个联系人节点的指针。

这样,我们可以通过头节点来遍历整个通讯录,并且在需要插入或删除联系人时更加方便。

在通讯录的实现中,我们可以提供一系列的操作函数,例如添加联系人、删除联系人、查找联系人、显示通讯录等。

这些操作函数可以通过遍历链表来实现对联系人的管理。

除了基本的功能,我们还可以扩展通讯录的功能,例如按照姓名首字母进行排序、按照电话号码进行查找等。

这些功能的实现可以通过链表的操作和排序算法来完成。

此外,我们还可以考虑使用其他数据结构来优化通讯录的实现。

例如,可以使用哈希表来加快对联系人的查找速度,或者使用二叉搜索树来实现按照姓名首字母进行排序。

综上所述,通讯录的制作数据结构课程设计中,我们将使用链表作为主要的数据结构,并通过实现一系列的操作函数和扩展功能来实现对联系人的管理和查询。

同时,我们也可以考虑使用其他数据结构来优化通讯录的实现。

这样的设计可以提高通讯录的效率和方便性,使用户能够更加方便地管理和查找自己的联系人信息。

通讯录——数据结构课程设计

通讯录——数据结构课程设计

通讯录——数据结构课程设计通讯录是一个用于存储和管理联系人信息的工具。

在数据结构课程设计中,我们需要设计一个通讯录系统,使用户能够方便地添加、查找、修改和删除联系人信息。

下面是通讯录系统的标准格式文本,详细介绍了系统的功能和实现方法。

一、系统概述通讯录系统是一个基于数据结构的软件应用程序,用于存储和管理联系人信息。

它提供了一系列功能,包括添加联系人、查找联系人、修改联系人和删除联系人。

二、系统功能1. 添加联系人用户可以通过系统界面输入联系人的姓名、电话号码、电子邮件地址等信息,系统将这些信息存储在数据结构中。

每一个联系人的信息应包括惟一的标识符,以便于后续的查找、修改和删除操作。

2. 查找联系人用户可以通过姓名、电话号码或者电子邮件地址等关键字进行联系人的查找。

系统将根据用户提供的关键字,在数据结构中进行搜索,并返回与之匹配的联系人信息。

3. 修改联系人用户可以选择要修改的联系人,并提供新的姓名、电话号码、电子邮件地址等信息。

系统将根据用户提供的联系人标识符,在数据结构中找到对应的联系人,并更新其信息。

4. 删除联系人用户可以选择要删除的联系人,并确认删除操作。

系统将根据用户提供的联系人标识符,在数据结构中找到对应的联系人,并将其从通讯录中删除。

三、系统实现1. 数据结构选择为了高效地存储和管理联系人信息,我们选择使用链表作为数据结构。

每一个节点表示一个联系人,包含姓名、电话号码、电子邮件地址等信息,以及指向下一个节点的指针。

2. 添加联系人用户输入联系人信息后,系统将创建一个新的节点,并将其插入到链表的末尾。

为了保证联系人信息的惟一性,系统将检查新节点的标识符是否与已有节点的标识符重复。

如果重复,则提示用户重新输入。

3. 查找联系人用户输入关键字后,系统将从链表的头节点开始遍历,逐个比较节点中的姓名、电话号码和电子邮件地址与关键字是否匹配。

如果找到匹配的联系人,系统将返回其信息。

如果遍历完整个链表仍未找到匹配的联系人,则提示用户未找到。

数据结构课程设计通讯录

数据结构课程设计通讯录

数据结构课程设计通讯录一、课程目标知识目标:1. 理解并掌握通讯录数据结构的基本概念,包括线性表的实现方式及其操作;2. 学会运用数组、链表等常见数据结构存储和检索通讯录信息;3. 掌握排序和查找算法在通讯录中的应用。

技能目标:1. 能够运用所学知识,设计并实现一个简单的通讯录管理系统;2. 掌握使用编程语言(如C/C++/Java等)实现通讯录的基本操作,如增加、删除、修改和查询联系人;3. 学会分析不同数据结构在通讯录管理中的性能特点,选择合适的算法优化系统。

情感态度价值观目标:1. 培养学生对数据结构在解决实际问题中应用的兴趣和认识,激发其学习主动性和积极性;2. 培养学生的团队合作意识,通过小组讨论和协作完成课程设计任务;3. 增强学生的信息素养,使其认识到数据结构在信息管理中的重要性。

课程性质:本课程设计为实践性较强的课程,旨在通过实际操作,让学生将所学的数据结构知识应用于通讯录管理系统中。

学生特点:针对高年级学生,具备一定的编程基础和数据结构理论知识,具备独立思考和解决问题的能力。

教学要求:注重理论与实践相结合,强调动手实践能力,关注学生的个性化发展,培养创新精神和团队合作能力。

通过本课程的学习,使学生能够将所学知识应用于实际项目中,提高解决实际问题的能力。

二、教学内容1. 通讯录数据结构基础- 线性表的基本概念与实现(教材第3章)- 通讯录数据结构设计原理(教材第4章)2. 通讯录管理系统功能设计- 联系人信息的增加、删除、修改、查询操作(教材第5章)- 排序与查找算法在通讯录中的应用(教材第6章)3. 编程语言与数据结构实现- C/C++/Java等编程语言的基本语法复习(教材第2章)- 使用编程语言实现通讯录数据结构及操作(教材第7章)4. 实践操作与系统优化- 设计并实现一个简单的通讯录管理系统(综合教材第3-7章内容)- 分析不同数据结构在通讯录管理中的性能特点,进行系统优化(教材第8章)5. 课程项目与团队协作- 分组讨论,明确项目需求和分工(教材第9章)- 团队协作完成课程设计,并进行成果展示与评价(教材第10章)教学内容安排与进度:第1周:通讯录数据结构基础,线性表的概念与实现第2周:通讯录管理系统功能设计,编写基本操作接口第3周:编程语言复习,实现通讯录数据结构及操作第4周:实践操作,设计并实现通讯录管理系统第5周:系统性能分析,优化数据结构和算法第6周:课程项目总结,团队协作成果展示与评价三、教学方法1. 讲授法:通过教师讲解,使学生掌握通讯录数据结构的基本概念、原理和实现方法。

学生通讯录管理系统数据结构课程设计

学生通讯录管理系统数据结构课程设计

学生通讯录管理系统数据结构课程设计在咱们的校园生活中,学生通讯录管理系统可真是个好东西。

想象一下,一个个同学的联系方式,电话、微信、QQ统统都在上面,简直像是把大家的生活都放在了一个小本本里。

要是没有这个系统,咱们联系同学可就麻烦了,想找人得一一翻记录,真是浪费时间,像是在玩“捉迷藏”一样。

想想看,早上起来,脑袋还没转过来,就要想起谁的电话,那可真是要抓狂。

这通讯录系统呀,它的结构可是讲究得很。

你可以想象成一个大大的树,上面挂着无数个小果子,每个果子里都有一个同学的信息。

这样一来,想找谁直接往上找就行,方便得很。

数据一旦存进去,就像是钉钉子一样,稳稳当当。

系统能记录的信息可多了,名字、班级、联系方式,简直是多到数不清。

遇到小组作业的时候,想找谁都能立马拿到联系方式,真是省了不少力气。

然后,这通讯录还可以做分类,嘿嘿,按班级、年级来分,真是神了。

就像大家去市场买东西,东西太多了,分类之后,找起来可就容易多了。

这样一来,谁说学生没有组织能力呢?其实这通讯录系统就是个小小的组织者,帮我们把大家的联系信息都理得清清爽爽,真是贴心。

想想咱们一起复习的时候,找不到同学的电话,心里那个急呀,简直就像在大海捞针。

再说说这系统的安全性,虽然大家都是好同学,但隐私问题还是得重视。

系统里有些敏感信息,咱们可不能随便让别人看见。

这样,咱们的通讯录就像一个保险箱,钥匙就掌握在自己手里,安全又放心。

每次登录系统,得输入密码,那种感觉就像在保卫自己的小秘密,真是妙不可言。

这系统也需要维护,不能一味地依赖。

想想之前那些旧的纸质通讯录,翻来翻去,容易撕掉,弄得稀巴烂。

现在好了,系统里随时随地都能修改、更新,一点都不麻烦。

新同学加入、老同学转学,随时可以调整。

想想以前写信联系,那可得等好几天,生怕信丢了,心里急得像热锅上的蚂蚁。

哎,提到信,我倒是想起那些年我们的通讯录。

每天在学校里传来传去,感觉像是一种“情书”,只不过写的全是联系信息,哈哈。

通讯录——数据结构课程设计

通讯录——数据结构课程设计

数据结构课程设计通讯录目录1、课程设计的目的: (1)2、需求分析: (1)1. 要求: (1)2. 详细功能: (1)3、课程设计报告内容: (1)1. 通讯录管理系统调用关系图: (1)2. 设计结构体及函数表: (2)3. 实现主程序和各模块的调用关系: (2)4、详细设计: (3)1. 各个操作的算法实现: (3)2.程序清单:(见附录) (4)5、参考文献: (5)6、部分运行结果界面: (5)1.调试分析: (7)2. 调试中遇到的问题: (7)7、总结: (8)8、附录:(程序) (8)1、课程设计的目的:用〈〈数据结构〉〉中的双向链表作数据结构,结合C语言基本知识。

编写一个通讯录管理系统。

以把所学数据结构知识应用到实际软件开发中去。

了解并掌握数据结构与算法的设计方法,具备初步的独立分析和设计能力;初步掌握软件开发过程的问题分析、系统设计、程序编码、测试等基本方法和技能;提高综合运用所学的理论知识和方法独立分析和解决问题的能力;训练用系统的观点和软件开发一般规范进行软件开发,培养软件工作者所应具备的科学的工作方法和作风;2、需求分析:1.要求:(1)设计一个实用的小型通讯录,用双向链表做数据结构,编写一个通讯录管理系统实现通讯录信息的输入、添加、显示、以姓名做关键字进行查找、删除信息等功能。

(2)每条信息至少包含:姓名、街道、城市、邮编、国家等信息。

2.详细功能:A.载入文件load():将磁盘中可能存在的文件载入到内存中。

A.信息输入enter():系统将提示输入新纪录所需信息,信息包含:姓名、街道、城市、邮编、国家。

B.信息删除del():首先提示用户输入要删除的纪录姓名,然后调用删除函数,删除该纪录的相关资料,支持重名选择删除和循环删除。

C.查找search():提示用户输入要查找的姓名,然后系统调用查找函数查找,接着系统使用相关命令输出查到的全部信息。

D.显示全部display():将内存中的纪录内容全部输出,包括未保存到磁盘的记录项。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

一.设计内容(通讯录)本系统应完成一下几方面的功能:1) 输入信息——enter();2) 显示信息———display( );3) 查找以姓名作为关键字———search( );4) 删除信息———delete( );5) 存盘———save ( );6) 装入———load( ) ;设计要求:1) 每条信息至包含:姓名(NAME )街道(STREET)城市(CITY)邮编(EIP)国家(STATE)几项2) 作为一个完整的系统,应具有友好的界面和较强的容错能力二.设计思路通过visual c++6.0(用的是C语言)编写一个dos界面的控制台程序,该程序通过链表的操作,文件存储来实现通讯录的基本功能struct address{ /*定义结构*/char name[10]; /*姓名*/char street[50]; /*街道*/char city[10]; /*城市*/char state[15]; /*国家*/char eip[7]; /*邮编*/struct address *next; /*后继指针*/struct address *prior; /*前驱指针*/}链表的插入,删除来实现通讯录里的内容的插入删除当操作完成通过文件件来存储链表的信息,下次打开程序时,读取文件里的内容到内存中,放在链表,然后又可以对链表进行操作;在这里面,文件内容不可以在外部更改,只能通过读取到内存链表中,通过程序进行更改,然后再写入到文件,写入过程会覆盖上次的内容。

struct address *start; /*首结点*/struct address *last; /*尾结点*/struct address *find(char *); /*声明查找函数*/void enter(); /*函数声明*/void search(); /*查找,查找过程中调用find函数*/void save(); /*存盘,将链表信息保存到文件中*/void load(); /*导入,将文件内容导入到内存链表中*/void list(); /*显示当前链表中信息*/void ddelete(struct address **,struct address **);void insert(struct address *i,struct address **start,struct address **last);void inputs(char *,char *,int);void display(struct address *);int menu_select(void);三.详细设计1.主界面设计通过switch语句调用各种函数,实现各种操作。

然后把switch嵌套到无限的for循环(for(;;))中,使完成每一步操作都回到到选择操作的主界面void main()mainmenu_selectenterddeletelist searchsaveloadexitinputs insertfinddisplay文件函数之间的相互调用{start = last = NULL;for(;;) /*无限循环*/{switch(menu_select()) /*调用主界面的选择函数,带回返回值*/ {case 1:enter();continue;case 2:ddelete(&start,&last);continue;case 3:list();continue;case 4:search();continue;case 5:save();continue;case 6:load();continue;case 7:exit(0);}}}int menu_select(void) /*主目录*/{char s[80];int c;printf("………………^欢迎使用DOS通讯录系统^………………\n");printf("************请在做其它操作前先导入*************\n");printf("***********************************************\n"); printf("***************** 1.输入信息 ******************\n"); printf("***************** 2.删除信息 ******************\n"); printf("***************** 3.显示信息 ******************\n"); printf("***************** 4.查找 ******************\n"); printf("***************** 5.存盘 ******************\n"); printf("***************** 6.导入 ******************\n"); printf("***************** 7.退出 ******************\n"); printf("***********************************************\n"); do{printf("\nPlease enter your choice:\n");gets(s);c = atoi(s); /*将获取的字符串转换成整型*/}while(c<0||c>7);return c; /*返回输入值*/}2.输入信息函数输入函数:struct address *info; /*定义当前结点*/for(;;){info=(struct address *)malloc(sizeof(struct address)); /*为当前结点分配空间*/if(!info){printf("\n Out of memory");exit(0); /*如果分配空间失败,退出程序*/}printf("输入空姓名结束:\n");inputs("请输入姓名:",info->name,10);if(!info->name[0])break; /*如果输入姓名为空,结束循环*/inputs("请输入街道:",info->street,50);inputs("请输入城市:",info->city,15);inputs("请输入国家:",info->state,15);inputs("请输入邮编:",info->eip,7);insert(info,&start,&last); /*调用结点插入函数*/}输入函数调用到另外两个函数,inputs和insert其中inputs中还用到fgets(str,n,fp),把键盘的输入信息传到字符串中char p[255];do{printf(prompt);fgets(p,254,stdin);/*stdin,标准输入缓存,获取键盘输入信息*/if(strlen(p)>count)printf("\nToo Long\n");}while(strlen(p)>count);p[strlen(p)-1]=0;strcpy(s,p);insert是关键函数,每当输入完一条信息都会调用到insert函数,将信息插入到链表中if(*last==NULL) /*如果尾结点为空,意味着当前链表为空*/ { /*则将该结点赋给头尾结点*/i->next=NULL;i->prior=NULL; *last=i; *start=i; return; }else /*如果链表不为空,则将信息插入到链表尾,作为尾结点*/ {(*last)->next=i; i->prior=*last;i->next=NULL;*last=(*last)->next; } NULLNULL插入信息会显示在链表最后*last (*last)->nexti i->next3.删除·查找·显示函数删除函数调用find函数,通过姓名,查找到该节点,然后删除该节点信息,这其中涉及到头尾节点,及其变化;先判断是否为头结点,如果为头结点,则把原头结点的后继作为新的头结点如果不为头结点,则该节点的前驱的next指向该节点的后继如果该节点为尾结点,则让该节点的前驱作为新的尾结点struct address *info;char s[80];inputs("请输入姓名:",s,10);info=find(s);if(info){printf("Deleting......\n");if(*start==info){*start=info->next;if(*start)(*start)->prior=NULL;else *last=NULL;}else{{ info->prior->next=info->next;if(info!=*last)info->next->prior=info->prior;else*last=info->prior;}free(info);printf("-Ok,删除成功!\n");}与删除相比,查找就简单的多,只需要调用find的函数,找到该节点记录并显示出来就行了,在search本身里面只要调整下输出的界面就行了struct address *find(char *name) /*查找函数,形参为欲查找结点的name域*/{struct address *info;info=start;while(info){if(!strcmp(name,info->name))return info;info=info->next;}printf("Name not found.\n");return NULL;}输出函数更简单,直接输出链表即可if(info==NULL)printf("当前记录为空!");elseprintf("姓名\t街道\t\t城市\t国家\t邮编\t\n"); while(info){display(info);/*display为输出节点函数,一些列print组成*/if(info->next==NULL){break; } info=info->next;};4.存储与导入存储存储时通过fopen打开文件(没有该文件时则创建)fp=fopen("record.txt","wb"); /*生成文件*/if(!fp){printf("Cannot open file.\n");return}然后通过fwrite将链表信息写入文件while(info) /*把链表写入文件*/{fwrite(info,sizeof(struct address),1,fp);info=info->next;}fwrite每次从info读取一个sizeof(struct address)长度的数据,写入fp文件中。

相关文档
最新文档