数据结构上机实验报告-通讯录
- 格式:docx
- 大小:169.28 KB
- 文档页数:31
数据结构课程设计报告---通讯录## 一、项目背景随着信息科技的发展,现代社会通讯录的应用越来越普遍,满足了人们信息的获取和管理的需求。
本项目的设计目的在于使用面向对象的程序思想,以面向对象的方式它来实现对通讯录信息的管理,进而提高信息的管理效率,提升信息的可靠性和安全性,最终达到为社会实施科学管理的目的。
## 二、系统需求1. 界面美观、格式明确,有良好的友好提示。
2. 系统稳定性强,能承受短时间的高并发量使用。
3. 提供友好的系统操作界面,对用户操作进行一定的约束,方便用户操作。
4.提供有效的联系人信息管理功能,能够实现增删改查等操作。
5.支持联系人信息备份和恢复,以及密码设置。
6.能够防止任何人未经授权而访问系统,或者磁盘信息的泄露。
此系统的设计主要分为三大部分,即界面层、业务逻辑层和数据存储层。
界面层通过展示信息给用户,实现数据的输入及输出;业务逻辑层主要处理用户请求,实现对数据的操作;数据存储层通过文件存储数据,实现对联系人信息的永久保存。
本项目采用C++语言,以链表数据结构为基础,将用户的联系人存储在链表中,充分利用其动态性,实现联系人的增删改查操作.同时,为了提供更进一步的使用,增加了密码功能,对未授权访问进行防止,以及数据备份和恢复功能。
## 四、功能实现1. 界面设计:首先,根据系统所需要的功能,采用控制台方式,以文字提示形式,配以整齐美观的各项参数和信息,实现各项功能。
2. 加密控制:本系统实现授权登陆加密功能,使系统对未经授权的用户隐藏信息,以确保系统的安全性。
3. 测试功能:功能的测试旨在确保程序的完整性和正确性。
4. 管理功能:本系统实现联系人信息的增删改查操作,在这几项功能的实现过程中,使用链表数据结构,更好的实现程序的功能。
5. 修改密码功能:此功能实现用户可以修改自己的密码,以确保用户自己可以比较安全的使用系统,不会受到他人的侵犯。
6. 加载和存储数据:通过使用文件存储,实现数据的存储和读取,以及备份功能,实现对数据永久保存。
数据结构课程设计报告专业:计算机科学与技术年级:课题名称:通讯录小组成员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.删除联系人:可以根据姓名或电话号码删除通讯录中的联系人。
为了实现上述功能,我们可以使用链表来实现通讯录的存储,每个节点表示一个联系人。
每个节点包含姓名、电话号码、邮箱地址等信息,并且有指向下一个节点的指针。
为了提高查找联系人的效率,我们还可以使用哈希表来实现联系人的快速查找。
哈希表采用键值对的方式存储数据,通讯录中的联系人可以以姓名为键,联系人节点为值存储在哈希表中。
结果实验的最终结果是一个完善的通讯录管理系统,能够实现创建通讯录、添加联系人、查找联系人、修改联系人和删除联系人等功能。
在实现过程中,我们遵循了以下步骤:1.首先,我们设计了联系人节点的数据结构,包括姓名、电话号码、邮箱地址等字段,并定义了节点的操作方法。
2.接着,我们设计了通讯录的数据结构,使用链表来存储联系人节点,并实现了通用的链表操作方法,如插入节点、删除节点等。
3.然后,我们设计了哈希表的数据结构,使用哈希函数将联系人节点存储在哈希表中,并实现了查找联系人的快速算法。
数据结构实验报告之通讯录的实现一、实验题目利用线性表实现一个通讯录管理,通信录的数据格式如下:struct DataType{int ID; //编号char name[10]; //姓名char ch; //性别char phone[13]; //电话char addr[31]; //地址};要求:∙实现通讯录的建立、增加、删除、修改、查询等功能∙能够实现简单的菜单交互,即可以根据用户输入的命令,选择不同的操作。
∙能够保存每次更新的数据(选作)∙能够进行通讯录分类,比如班级类、好友类、黑名单等等(选作)∙编写测试main()函数测试线性表的正确性二、实验目的1、熟悉C++语言的基本编程方法,掌握集成编译环境的调试方法。
2、掌握线性表的操作的实现方法。
3、运用线性表解决实际问题。
三、实验内容通过编写一个C++程序完成一个简易的通讯录管理系统,能够实现建立,增加,删除,修改,查找,浏览,输出,菜单等基本功能。
管理系统中每个元素含有成员的ID、姓名、性别、电话、地址等信息。
程序是使用链表的功能,通过一些算法简单的实现。
四、算法思路与主要代码1. 通信录管理结构:建立,增加,删除,修改,查找,浏览,菜单。
2.建立通讯录构造函数,建立头节点PHONEBOOK::PHONEBOOK(){first = new DataType;first->next = first->prior = first;first->ID = 0;}头插法,添加联系人1:在堆中建立新结点2:将 a[i]写入到新结点的数据域3:修改新结点的指针域4:修改头结点的指针域,将新结点加入链表中即 1:Node <T> * s=new Node <T> 2:s->data=a[i] 3:s->next=front->next; 4:front->next=s代码实现void PHONEBOOK::Insert(){DataType *data = new DataType;data->next = first->next;data->prior = first;first->next = data;data->next->prior = data;m++;data->ID = m;3.查找联系人按姓名查找查找是指用户输入要查找的联系人的姓名,系统该函数内找到该联系人,返回该联系人数据域的指针,在主函数中输出该联系人的全部信息。
计算机专业教研室实验报告(数据结构)课程设计手机通讯录小组成员系别班级学号实验日期指导教师实验成绩一、实验内容功能要求:(1)将联系人的信息可以存放在文件中,从文件中也可以读出联系人的信息。
(2)可以添加一个新联系人的信息。
(3)可以删除一个联系人的信息,删除条件为电话号码或姓名。
(4)可以查询一个联系人的信息,查询条件为电话号码或姓名。
(5)可以对联系人的信息进行排序,排序条件为联系人的姓名。
二、实验过程1、整个程序包含三个文件。
手机通讯录.cpp、delong.h 、menu.h(点击产看代码)手机通讯录.cpp [主程序]delong.h [各种函数]menu.h [菜单目录]2、联系人信息包括编号、姓名、手机号码、家庭住址、E-mail、QQ、类别信息。
其中编号分配4位、姓名10位、手机号码13位、地址14位、E-mail 14位、QQ和类别都为12位。
但实际上存储的时候所占位数都要少一位。
因为存储的时候是以字符形式存储,读取的时候以字符串形式读取,需要用最后一位填写字符串结束标志’\0’。
3、函数列表:void AddSpace(int n); /*添加空格*/void Save(FILE *fp,int n,int j); /*将person[MAXSIZE]中的内容放到通讯录.txt*/j==0; 追加方式写入,适用于增加联系人的情况。
j==1; 重新方式写入,适用于修改、删除情况。
三、总结:1、还是有小BUG。
Eg:删除最后一个联系人的时候再输出全部信息时还是能输出一个联系人。
2、代码冗长:Eg:增加操作及存储,得到联系人信息增添空格的时候没有写AddSpace()函数。
在修改操作中得到修改后的联系人信息那里才用AddSpace()函数。
某些地方重复代码较多。
3、函数归编混乱,不利于读看。
四、实验具体实验程序代码(要有注释)、测试结果(最好截图)和实验总结1、开始界面2、创建通讯录,若存在则无须再次创建。
安徽理工大学数据库系统概论课程设计说明书题目: 通讯录系统院系:计算机科学与工程学院专业班级:电子信息技术及仪器11-1班学号: 2011302807学生姓名:周松林指导教师:胡胜利2013年 06月 10日安徽理工大学课程设计(论文)任务书计算机科学与工程学院2013年03月20日安徽理工大学课程设计(论文)成绩评定表目录1 需求分析 (1)2 总体设计 (2)2.1数据库设计 (2)2.1.1通讯录系统的数据字典 (2)2.1.2概念结构设计 (2)2.1.3通讯录数据库逻辑结构设计 (3)2.2通讯录数据库实现 (3)3 详细设计 (4)3.1建立数据库 (4)3.2进行数据库连接 (5)3.3程序代码 (9)4 总结 (15)参考文献 (16)1 需求分析设计通讯录系统的总体目标:利用所学的VC++和数据库系统的相关知识,设计出具有一定功能的通讯录系统。
在本次程序设计,我是在SQLsever中建立相应的表,然后应用ODBC将数据库与VC++链接起。
通讯录的基本功能如下:(1)具有查找功能。
编写查找程序代码,用户根据自己需要,通过VC++功能界面查找所需内容。
(2)具有删除功能。
编写删除程序代码,通过VC++功能界面删除数据库中的记录。
(3)具有编辑功能。
编写相应编辑程序代码,实现对数据库中的记录的修改,达到用户目的。
(4)具有插入功能。
编写相应插入程序代码,实现对数据库进行插入记录功能。
2 总体设计2.1数据库设计2.1.1通讯录系统的数据字典由于本次课程设计的内容是设计通讯录系统,根据用户需求,建立以下联系人基本信息表,如下表所示。
表2-1联系人基本信息2.1.2概念结构设计通过需求分析构造基本表,确定了通讯录的数据项。
然后将需求分析得到的用户需求抽象为信息结构,画出E-R图。
如下图所示:图2-1联系人基本信息2.1.3通讯录数据库逻辑结构设计构造通讯录系统模块的逻辑结构如图2-2下:联系人(姓名,性别,年龄,手机号码,家庭住址)图2-2联系人属性2.2通讯录数据库实现根据上述我先在SQL sever中建立好数据库,然后以VC++(6.0)为开发平台,利用ODBC将数据库与VC++链接起来,在VC++(6.0)MFC中设计功能界面,通过功能键对数据库进行查找,删除,编辑,添加操作。
数据结构课程设计通讯录管理系统报告前言通讯录管理系统是一种常见的应用程序,用于帮助用户有效地组织和管理他们的联系人信息。
本报告旨在介绍和分析一个基于数据结构设计的通讯录管理系统,其中实现了基本的通讯录功能,并且通过合适的数据结构和算法进行优化。
功能需求通讯录管理系统需要实现以下基本功能: - 添加联系人信息 - 查找联系人信息 - 删除联系人信息 - 更新联系人信息 - 显示所有联系人信息数据结构选择为了实现通讯录管理系统的功能,我们选择使用链表作为数据结构。
链表是一种简单而灵活的数据结构,可以动态地添加或删除节点,非常适合存储联系人信息这种动态的数据。
在这里,我们采用双向链表,使得查找、插入和删除操作更加高效。
算法设计添加联系人信息添加联系人信息时,我们需要遍历链表找到合适的位置插入新节点,这里的算法复杂度为O(n),其中n表示链表的长度。
查找联系人信息查找联系人信息时,我们需要遍历链表查找目标节点,这里的算法复杂度为O(n)。
删除联系人信息删除联系人信息时,我们同样需要遍历链表找到目标节点并删除,其算法复杂度为O(n)。
更新联系人信息更新联系人信息时,我们首先需要查找到目标节点,然后进行更新操作,其算法复杂度也为O(n)。
系统优化为了提高系统的性能,我们可以通过以下几种方式进行优化: - 使用哈希表索引联系人信息,减少查找联系人的时间复杂度; - 引入缓存机制,减少频繁的IO 操作。
总结通过本报告的介绍和分析,我们了解了一个基于数据结构设计的通讯录管理系统的实现原理和优化方法。
在实际应用中,针对具体需求和场景,我们可以进一步优化系统性能,提升用户体验。
通讯录管理系统作为一种简单而实用的应用程序,将在日常生活中发挥重要作用。
[数据结构课程设计通讯录查询系统实验报告范文及源代码]数据结构通讯录工程名称:停车管理系统姓名:学号:专业:软件工程1.需求分析为某个单位建立一个员工通讯录管理系统,可以方便查询每一个员工的与地址。
设计散列表存储,设计并实现通讯录查找系统。
1.根本要求〔1〕每个记录有以下数据项:号码、用户名、地址;〔2〕从键盘输入各记录,分别以号码为关键字建立散列表;〔3〕采用二次探测再散列法解决冲突;〔4〕查找并显示给定号码的记录;〔5〕通讯录信息文件保存。
2.重点、难点重点:〔1〕通过实验深入理解哈希表既是一种存储形式,又是一种查找方法;〔2〕哈希表的构造;〔3〕哈希冲突方案的设计。
难点:哈希表的构造与哈希冲突方案的设计输入的形式和输入值的范围;输入三个字符串:分别是号码,姓名,地址,每行一个数据字符串长度适当如:号码〔纯数字〕姓名地址输出的形式;如:姓名号码地址程序所能到达的功能。
1:并且通过号码为关键字,用二次再散列法寻找地址储存在哈希表中。
2:3:4:5:显示通讯录6:把通讯录写入文件储存。
2.概要设计(1)数据结构tructlit{chara[12];charname[15];charadd[15];intf=0;};用连续的内存空间构建哈希表tructqtack{tructlit某bae;inti;};(2)程序模块1:构建二次再散列:inti;for(i=1;i<25;i++)d[2某i]=-1某i某i;for(i=1;i<25;i++)/某构造二次再散列某/d[i+i-1]=i某i;2:主菜单:voidinterface(){inti;printf("某某某某某某某某某某某某某某某某某某某某\n");printf("某某某某某某某某某某某某某某某某某某某某\n");canf("%d",&i);witch(i){cae0:return;break;cae1:huru();break;cae2:print();break;cae3:each();break;cae4:del();break;cae5:change();break;cae6:write();break;};}3:输入voidhuru()4:存入哈希表,采用二次探测再散列法解决冲突;voidtore(char某a,char某name,char某add)voideach();voidchange()Voiddel〔〕;voidwrite()(3)各模块之间的调用关系以及算法设计3.详细设计4.测试与分析主界面:构建哈希表,允许号码重复可以支持姓名,,地址三个关键字的查找可以按照姓名地址删除写文件:创立文件通讯录.t某t 如图:5.附录3.cpp#include<tdio.h>#include<tdlib.h>#include<tring.h>#include<iotream>#include<tring.h>uingnamepacetd;intd[50];/某再散列某/tructlit{chara[12];charname[15];charadd[15];intf=0;};tructqtack{tructlit某bae;inti;};tructqtackS;voidtore(char某a,char某name,char某add){intkey;key=int(a[0])+int(a[3])+int(a[7]);/某以号码的第1,4,8位作为关键字构造哈希函数某/S.i=key%20;intj=1;while(true){if((S.bae+S.i)->f==0){trcpy((S.bae+S.i)->a,a);trcpy((S.bae+S.i)->name,name);trcpy((S.bae+S.i)->add,add);(S.bae+S.i)->f=1;break;}S.i=(key%20+d[j])%20;j++;}}voidhuru(){voidinterface();cout<<"请输入:\n例如:\n小王\n安徽省合肥市\n输入0结束\n"; chara[12];charname[15];charadd[15];while(true){canf("%",a);if(a[0]=='0')break;canf("%",name);canf("%",add);printf("%已保存\n",name);tore(a,name,add);/某将输入保存到哈希表某/}interface();}voidprint(){voidinterface();inti;printf("姓名号码地址\n");for(i=0;i<20;i++){if((S.bae+i)->f==1){printf("%%%\n",(S.bae+i)->name,(S.bae+i)->a,(S.bae+i)->add);}}interface();}voideach(){voidinterface();inti;intff=0;intb;chara[15];printf("输入1按号码查找,输入2按姓名查找,输入3按地址查找\n");canf("%d",&b);witch(b){cae1:printf("请输入号码\n");canf("%",a);for(i=0;i<20;i++)if(trcmp(a,(S.bae+i)->a)==0){printf("%%%\n",(S.bae+i)->name,(S.bae+i)->a,(S.bae+i)->add); ff=1;}if(ff==0)printf("找不到该用户\n");break;cae2:printf("请输入姓名\n");canf("%",a);for(i=0;i<20;i++)if(trcmp(a,(S.bae+i)->name)==0){printf("%%%\n",(S.bae+i)->name,(S.bae+i)->a,(S.bae+i)->add); ff=1;}if(ff==0)printf("找不到该用户\n");break;cae3:printf("请输入地址\n");canf("%",a);for(i=0;i<20;i++)if(trcmp(a,(S.bae+i)->add)==0){printf("%%%\n",(S.bae+i)->name,(S.bae+i)->a,(S.bae+i)->add); ff=1;}if(ff==0)printf("找不到该用户\n");break;}interface();}voiddel(){voidinterface();inti;intff=0;chara[15];printf("输入1按号码删除,输入2按姓名删除,输入3按地址删除\n");canf("%d",&b);witch(b){cae1:printf("请输入号码\n");canf("%",a);for(i=0;i<20;i++)if(trcmp(a,(S.bae+i)->a)==0){(S.bae+i)->f=0;Print(“已删除:%%%\n",(S.bae+i)->name,(S.bae+i)->a,(S.bae+i)->add);ff=1;}if(ff==0)printf("找不到该用户\n");cae2:printf("请输入姓名\n");canf("%",a);for(i=0;i<20;i++)if(trcmp(a,(S.bae+i)->name)==0){(S.bae+i)->f=0;printf("已删除:%%%\n",(S.bae+i)->name,(S.bae+i)->a,(S.bae+i)->add);ff=1;}if(ff==0)printf("找不到该用户\n");break;cae3:printf("请输入地址\n");canf("%",a);for(i=0;i<20;i++)if(trcmp(a,(S.bae+i)->add)==0){(S.bae+i)->f=0;printf("已删除:%%%\n",(S.bae+i)->name,(S.bae+i)->a,(S.bae+i)->add);ff=1;}if(ff==0)printf("找不到该用户\n");break;}interface();}voidchange(){voidinterface();inti;intff=0;intb;chara[15];printf("请输入姓名\n");canf("%",a);for(i=0;i<20;i++)if(trcmp(a,(S.bae+i)->name)==0){printf("您要修改的是:%%%\n",(S.bae+i)->name,(S.bae+i)->a,(S.bae+i)->add);printf("请输入新信息\n");canf("%",(S.bae+i)->a);canf("%",(S.bae+i)->name);canf("%",(S.bae+i)->add);printf("已修改成:%%%\n",(S.bae+i)->name,(S.bae+i)->a,(S.bae+i)->add);ff=1;}if(ff==0)printf("找不到该用户\n");interface();}voidwrite()voidinterface();inti=0;FILE某fp;if((fp=fopen("通讯录.t某t","wb"))==NULL){printf("openfileerror\n");e某it(1);}for(i=0;i<=20;i++){intch=32;if((S.bae+i)->f==1){fprintf(fp,"%",(S.bae+i)->name);fputc(ch,fp); fprintf(fp,"%",(S.bae+i)->a);fputc(ch,fp);ch=10;fprintf(fp,"%",(S.bae+i)->add);fputc(ch,fp); }fcloe(fp);interface();}voidinterface(){inti;printf("某某某某某某某某某某某某某某某某某某某某\n"); printf("某某某某某某某某某某某某某某某某某某某某\n"); canf("%d",&i);witch(i){cae0:return;break;cae1:huru();break;cae2:print();break;cae3:each();break;cae4:del();break;cae5:change();break;cae6:write();break;}intmain(){ytem("color70");//可以写成red调出颜色组S.bae=(tructlit某)malloc(20某izeof(tructlit)); ytem("date/T");ytem("TIME/T");inti;for(i=1;i<25;i++)d[2某i]=-1某i某i;for(i=1;i<25;i++)/某构造二次再散列某/d[i+i-1]=i某i;interface();}6.用户使用手册根据主菜单提示选择所想要的操作0:结束程序小华安徽合肥可以根据姓名,,地址分别作为关键字进行查询谢谢使用!。
实验报告实验名称单链表通讯录一、实验目的1.熟练掌握线性表的类型定义方法、存储方法及其基本运算(元素的插入、删除等)的实现方法,培养综合运用所学知识,根据具体问题进行数据结构设计和算法设计的能力。
二、实验内容1.用带头结点的单链表作存储结构,实现通讯录单链表的建立、查询、修改、排序、合并、统计、结点的查找、移动以及通讯录链表的输出功能。
三、实验要求设计要求:为了实现通讯录管理的操作功能,首先设计一个含有多个菜单项的主控菜单程序,然后再为这些菜单项配上相应的功能。
主控菜单设计要求:菜单内容程序运行后,给出9个菜单项的内容和输入提示:1.创建通讯录链表;2.将姓名为Name的好友的手机号改为MTel;3.输出通讯录;4.插入姓名为Name、手机号为MTel的好友信息,将链表中姓名≤Name的结点放到该结点的前面,将姓名>Name的结点放到该结点后面5.将通讯录按照好友姓名进行非递减排序;6.将两个按姓名非递减排序的通讯录合并为一个,姓名相同且手机号相同的好友记录在结果中只保留一个;7.统计籍贯是“大连”的好友人数;8.将通讯录中倒数第k个结点之后的所有结点移到头结点后面(保持结点间的先后顺序);9.将通讯录的正中间位置结点之后的全部结点倒置;0.退出管理系统请选择0—9:菜单设计要求:使用数字0—9来选择菜单项,其它输入则不起作用。
四、实验概要设计1)功能框图五. 使用说明1.运行环境:VC6.02.首先选择主控菜单中的操作1,即建表,然后进行其它操作.六.实验截图(见下页)七实验体会附源程序代码:#include<stdio.h>#include<stdlib.h>#include<string.h>#define Newsp (TxlList *)malloc(sizeof(struct TxlList))typedef struct TxlList{char Name[16]; //姓名char MTel[11]; //手机号char Tel[9]; //固定电话char EMail[16]; //邮箱地址char BornAddr[20]; //籍贯(值域:"北京"、"上海"、"大连"等等,只写城市名称)char BroadN[50]; //博客名struct TxlList *next; //指针域}TxlList, *TxlLink;void Lbuild1(TxlLink &T){//创建文件FILE *fp;TxlLink q;q=Newsp;q=T;int NUM;char filename[20];printf("\n*请输入要创建的通讯录名:\n");gets(filename);if ((fp=fopen(filename, "wb"))==NULL) { /*以写方式在当前目录打开(新建)文件*/printf("can't open file!!!\n");exit(0); //如果文件无法打开,关闭已经打开的其它文件,结束程序。
数据结构通讯录管理系统报告数据结构通讯录管理系统报告⒈系统介绍⑴目的和背景本通讯录管理系统旨在提供一个便捷的方式来管理个人联系人信息。
用户可以使用该系统添加、编辑和删除联系人信息,并实现相关功能,如搜索、排序等。
⑵功能概述本系统主要包含以下功能:●添加联系人:用户可以输入联系人的姓名、方式号码、电子邮件等信息来添加新的联系人。
●编辑联系人:用户可以对已存在的联系人进行信息的修改或更新。
●删除联系人:用户可以选择删除指定联系人以删除其相关信息。
●搜索联系人:用户可以根据姓名或方式号码进行联系人的快速搜索。
●排序联系人:用户可以对联系人按照姓名或方式号码等属性进行升序或降序排列。
●显示联系人:用户可以查看已存储的所有联系人信息。
⑶系统架构本系统基于数据结构的链表实现,通过使用链表结构来存储所有的联系人信息。
每个联系人都是链表的一个节点,包含姓名、方式号码等属性,以及指向下一个联系人的指针。
⒉系统设计⑴数据结构设计本系统使用链表来存储联系人信息。
链表的每个节点包含以下数据项:●姓名:联系人的姓名,类型为字符串。
●方式号码:联系人的方式号码,类型为字符串。
●电子联系人的电子邮件地质,类型为字符串。
●下一个节点的指针:指向下一个联系人节点的指针,类型为链表节点指针。
⑵系统模块设计本系统包含以下模块:●菜单模块:显示主菜单和相应的选项,接受用户输入并调用其他模块执行相应的操作。
●添加模块:添加新的联系人信息,包括姓名、方式号码、电子邮件等。
●编辑模块:修改已存在联系人的信息,如姓名、方式号码、电子邮件等。
●删除模块:删除指定联系人的信息。
●搜索模块:根据指定的姓名或方式号码搜索联系人信息。
●排序模块:按照姓名或方式号码等属性对联系人信息进行排序。
●显示模块:显示当前存储的所有联系人信息。
⒊系统实现⑴编程语言和工具本系统使用C++编程语言实现,使用了链表和相关的指针操作来实现联系人管理功能。
⑵算法设计●添加联系人:通过创建新的链表节点并将其插入到链表末尾来实现联系人的添加功能。
数据结构实验报告实验名称: 实验一——线性表学生姓名: 大学霸班级: xxxxxxxxxx班内序号: xx学号: xxxxxxxxxx1.日期: 2012年11月1日2.实验要求1.实验目的:2.学习指针, 模板类, 异常处理的使用;3.掌握线性表的操作实现方法;4.培养使用线性表解决实际问题的能力。
实验内容:利用线性表实现一个通讯录管理, 通信录的数据格式如下:struct DataType{int ID; //编号char name[10]; //姓名char ch; //性别char phone[13]; //电话char addr[31]; //地址};1.具体要求:2.实现通信录的建立、增加、删除、修改、查询等功能3.能够实现简单的菜单交互, 即可以根据用户输入的命令, 选择不同的操作4.能够保存每次更新的数据5.编写main()函数测试操作的正确性2.程序分析编程完成通讯录的一般性管理工作如通讯录中记录的增加、修改、查找、删除、输出等功能。
每个记录包含姓名、电话号码、住址等个人基本信息。
用《数据结构》中的链表做数据结构结合c语言基本知识编写一个通讯录管理系统。
本程序为使用方便, 几乎不用特殊的命令, 只需按提示输入即可, 适合更多的用户使用。
对于建立通讯录管理系统, 则需了解并掌握数据结构与算法的设计方法,提高综合运用所学的理论知识和方法独立分析和解决问题的能力。
2.1 存储结构节点结构:存储结构: 带头结点和尾结点的单链表front2.2 关键算法分析本实验从整体上分为七大模块: (1)输入联系人信息;(2)添加联系人信息;(3)查找联系人信息;(4)查看联系人信息;(5)删除联系人信息;(6)修改联系人信息;(7)退出通讯录管理。
通讯录系统图2.2.1通讯录的建立伪代码:1.在堆中申请新的结点;2.新节点的数据域为a[i];3.将新节点加入到链表中;4.修改尾指针;5.全部结点插入后需要将终结结点的指针域设为空。
数据结构上机实验报告数据结构上机实验报告1. 实验目的数据结构是计算机科学中非常重要的一门课程,通过本次上机实验,旨在帮助学生巩固和应用所学的数据结构知识,培养学生分析和解决实际问题的能力。
2. 实验背景本次实验涉及到两个常用的数据结构:栈和队列。
栈是一种后进先出(Last In First Out,LIFO)的数据结构,而队列是一种先进先出(First In First Out,FIFO)的数据结构。
通过实验,我们将学习如何使用这两种数据结构来解决实际问题。
3. 实验内容本次实验分为两个部分:栈的应用和队列的应用。
3.1 栈的应用在栈的应用部分,我们将实现一个简单的括号匹配算法。
该算法可以判断一个字符串中的括号是否匹配。
具体实现步骤如下:3.1.1 创建一个栈来存储括号字符;3.1.2 遍历字符串中的每个字符;3.1.3 如果遇到左括号,则将其入栈;3.1.4 如果遇到右括号,则判断栈顶元素是否是对应的左括号;3.1.5 如果栈为空或栈顶元素不是对应的左括号,则括号不匹配;3.1.6 如果栈顶元素是对应的左括号,则将其出栈;3.1.7 遍历完字符串后,如果栈为空,则括号匹配,否则括号不匹配。
通过实现这个算法,我们可以学习到如何使用栈来解决实际问题,并且理解栈的后进先出的特性。
3.2 队列的应用在队列的应用部分,我们将实现一个简单的任务调度算法。
该算法可以模拟多个任务按照一定的优先级进行调度的过程。
具体实现步骤如下:3.2.1 创建一个队列来存储任务;3.2.2 每个任务包含两个属性:任务名称和优先级;3.2.3 向队列中添加任务,并按照优先级进行排序;3.2.4 从队列中取出优先级最高的任务,并执行;3.2.5 执行完任务后,继续从队列中取出下一个优先级最高的任务,并执行,直到队列为空。
通过实现这个算法,我们可以学习到如何使用队列来实现任务调度,并且理解队列的先进先出的特性。
4. 实验结果与分析通过实验,我们成功实现了括号匹配算法和任务调度算法,并得到了正确的结果。
数据结构通讯录管理系统报告数据结构通讯录管理系统报告1.引言1.1 项目背景1.2 项目目的1.3 项目范围1.4 参考文献2.需求分析2.1 功能需求2.1.1 添加联系人2.1.2 删除联系人2.1.3 修改联系人信息2.1.4 查询联系人2.1.5 排序联系人2.1.6 导入导出联系人2.2 性能需求2.2.1 系统响应时间2.2.2 系统并发能力2.2.3 系统稳定性2.3 非功能需求2.3.1 用户界面友好性2.3.2 数据安全性2.3.3 系统兼容性3.设计3.1 系统架构3.1.1 前端设计3.1.2 后端设计3.2 数据结构设计3.2.1 通讯录联系人数据结构 3.2.2 通讯录数据结构3.3 界面设计3.3.1 添加联系人界面3.3.2 删除联系人界面3.3.3 修改联系人信息界面 3.3.4 查询联系人界面3.3.5 排序联系人界面3.3.6 导入导出联系人界面4.开发实现4.1 环境搭建4.1.1 开发工具4.1.2 技术栈选用4.2 前端开发4.2.1 页面布局4.2.2 页面交互逻辑4.3 后端开发4.3.1 接口设计4.3.2 数据库设计4.4 测试与部署4.4.1 单元测试4.4.2 集成测试4.4.3 部署方案5.运行与维护5.1 运行指南5.2 常见问题解答5.3 系统维护6.结论6.1 实现情况总结6.2 可改进之处附件:1.数据结构通讯录管理系统需求文档2.数据结构通讯录管理系统设计文档3.数据结构通讯录管理系统代码法律名词及注释:1.版权:指对作品享有署名权、发表权、修改权、保护作品完整性权等直接财产权和个人权权利的法律保护。
2.专利:指对发明创造作品享有一定时期内的专有权的法律保护。
3.商标:指对商品的名称、图案、标志等通过注册取得的独占权的法律保护。
4.许可:通过合法协议授予他人使用权的行为。
《数据结构》实验报告题目: 实验七 通讯录管理系统学号:2010810071 成 绩班级: 计算1013日期:2011.12.13 姓名:何荣贤指导老师:杨艳华一、实验目的:本次的实验目的在于使读者深入了解查找表的特性,掌握各种查找方法,以便在实际问题背景下灵活运用他们;并且回顾文件操作的使用。
二、实验环境:本次试验在VC++环境下调试。
三、实验内容与完成情况:1.问题描述编程完成通讯录的一般性管理工作,如通讯录中记录的增加、修改、查找、删除、输出等功能。
2.基本要求一个完整的系统应具有以下功能:⑴每个记录包含姓名、电话号码、住址等个人信息;⑵将建立的通讯录以磁盘文件的形式存储,所有的通讯录管理活动均以文件操作的方式进 行;⑶在查找通讯录中的记录时,以记录的“姓名”为查找关键字进行查找。
3.程序代码#include<stdio.h>#include<string.h>#include<stdlib.h>#include<conio.h>#define header1 "|---------------------电话簿-----------------------|\n" #define header2 "| num | name | phonenum | address |\n" #define header3 "|-------|----------|---------------|---------------|\n" #define end "|----------------------结束------------------------|"#define N 100typedef struct tele{int num;char name[10];char address[20];}telebook;void menu(){system("cls");printf("\n\n\n"); /*输出主菜单*/printf("\t\t|* **** 欢迎进入电话薄管理系统! **** *|\n"); printf("\t\t|********************menu********************|\n"); printf("\t\t| |\n"); printf("\t\t| 1 增加 2 读取 |\n"); printf("\t\t| |\n"); printf("\t\t| 3 查找 4 修改 |\n"); printf("\t\t| |\n"); printf("\t\t| 5 删除 6 排序 |\n"); printf("\t\t| |\n"); printf("\t\t| 0 退出 |\n"); printf("\t\t|********************************************|\n"); }void printheader() /*输出菜单头*/{printf(header1);printf(header2);printf(header3);}int add(telebook temp[]){int i;int m=0;FILE *fp;system("cls");exit(0);}printf("每次输入一百个人的信息!\n");printf("如果输入0退出输入!\n");for(i=m;i<(100+m);i++){printf("num:");scanf("%d",&temp[i].num);if(temp[i].num==0)break;printf("name:");scanf("%s",&temp[i].name);printf("phonenum:");scanf("%s",&temp[i].phonenum);printf("address:");scanf("%s",&temp[i].address);fwrite(&temp[i],sizeof(struct tele),1,fp);}m+=100;fclose(fp);system("cls");return 0;}int read(telebook temp[]){int count,i;FILE *fp;system("cls");exit(0);}printheader();for(count=0;fread(&temp[count],sizeof(struct tele),1,fp)==1;count++);/*读取文件内信息的个数。
一、实验目的1、能够利用单链表的基本运算进行单链表的相关操作。
2、加深对链式存储数据结构的理解,逐步培养解决实际问题的编程能力。
3、熟练掌握线性表的类型定义方法、存储方法及其基本运算(元素的建立、查找、删除等)的实现方法,培养综合运用所学知识,根据具体问题进行数据结构设计和算法设计的能力。
二、实验环境具有Windows XP或2003的计算机、V istual C++ 6.0、网络环境。
三、实验内容设计一个班级同学的通讯录,要求如下:✓通讯录中每个同学的信息包含以下内容:学号(id)、姓名(name)、电话号码(tel)。
如果需要更多其他信息,请自行添加。
✓程序主菜单包含以下几个功能:(1)添加记录:通过键盘输入信息,添加一条通讯录记录。
(2)删除记录:通过键盘输入学号,删除该学号的记录。
(3)输出记录:输出通讯录全部记录。
(4)按姓名查找:通过键盘输入姓名,输出该同学的所有信息。
(5)按电话号排序:按电话号码从小到大排序并输出排序后的信息。
(6)清空记录:删除通讯录中的全部记录,并删除文件。
(7)退出。
程序清单#include<stdio.h>#include<stdlib.h>#include<string.h>#define N 20typedef struct student{char tel[N];char name[N];char id[N];struct student *next;}linklist;//创建信息void createlist(linklist *&l){int ch;linklist *s,*p;printf("***********创建通讯录***********\n");printf("----请输入通讯者信息-----:\n请输入非零整数,输入0则退出:\n");scanf("%d",&ch);l=(linklist *)malloc(sizeof(linklist));s=l;while(ch!=0){p=(linklist *)malloc(sizeof(linklist));printf("请输入通讯者姓名:");scanf("%s",p->name);printf("请输入通讯者电话号:");scanf("%s",p->tel);printf("请输入通讯者身份证号:");scanf("%s",p->id);s->next=p;s=p;printf("请输入通讯者信息:\n请输入非零整数,输入0则退出:\n");scanf("%d",&ch);}s->next=NULL;}//删除信息void listdelete(linklist *&l,int t ){int j=0;linklist *p,*q;p=l;while(p!=NULL&&j<t-1){j++;p=p->next;}if(p==NULL)exit(0);else{q=p->next;if(q==NULL)exit(0);p->next=q->next;printf("***************删除系统**************\n");printf("-------你将删除的联系人的信息为-------:\n");printf("通讯者姓名:%s\n",q->name);printf("通讯者电话号:%s\n",q->tel);printf("通讯者身份证号:%s\n",q->id);printf("******-------******删除成功******------*******\n");free(q);}}//输出信息void output(linklist *l){linklist *p;p=l->next;printf("----***----输出所有联系者信息----***----:\n");while(p!=NULL){printf("通讯者姓名:%s\n",p->name);printf("通讯者电话号:%s\n",p->tel);printf("通讯者身份证号:%s\n",p->id);printf("*****************************\n");p=p->next;}}//按姓名查找void findname(linklist *l){char n[N];linklist *p=l->next;printf("***************查找系统*************\n");printf("----------请输入要查找的姓名---------:\n");scanf("%s",n);while(p!=NULL){if(strcmp(p->name,n)){printf("-----***--你要查找的资料为--***----:\n");printf("通讯者姓名:%s\n",p->name);printf("通讯者电话号:%s\n",p->tel);printf("通讯者身份证号:%s\n",p->id);printf("*****************************");break;}elsep=p->next;}}//按电话号排序void sorttel(linklist *&l){linklist *p,*q,*s;q=l;p=q->next->next;q->next->next=NULL;while(p){while(q->next&&(strcmp(p->tel,q->next->tel)>0))q=q->next;s=p->next;p->next=q->next;q->next=p;p=s;q=l;}}//清空void release(linklist *&l){linklist *p,*q;p=l;q=p->next;while(q!=NULL){free(p);p=q;q=p->next;}free(p);printf("--------数据已全部被清空----------\n,*****内存回收*****\n"); }//主函数void main(){int i,t;linklist *l;while(1){printf("通讯录功能如下:\n1.建立通讯录信息\n2.删除信息\n3.输出信息\n4.按姓名查找信息\n5.按电话号排序信息\n6.清空信息\n7.退出");scanf("%d",&i);if(i<=0||i>7)break;switch(i){case 1:createlist(l);break;case 2:printf("---------请输入第t个要删除的信息---------:\n");scanf("%d",&t);listdelete(l,t);break;case 3:output(l);break;case 4:findname(l);break;case 5:sorttel(l);printf("-----***---&&&--这是按电话号排序后的信息列表--&&&---***-----\n");output(l);break;case 6:release(l);break;case 7:break;}}}运行结果:建立通讯录信息运行结果截图:输入零后通讯录信息输出结果截面图:查询通讯录信息运行结果截图:通讯录信息排序运行结果截图:删除通讯录信息运行结果截图:删除通讯录信息后的输出结果截面图:清空通讯录信息的运行结果截面图:四、实验心得与小结通过这次的上机实验,使我学到了一些回顾了以前学过的知识,使我对数据结构程序设计有了更深层次的认识和理解,懂得了灵活运用。
通讯录——数据结构课程设计通讯录是一个用于存储和管理联系人信息的工具。
在数据结构课程设计中,我们需要设计一个通讯录系统,使用户能够方便地添加、查找、修改和删除联系人信息。
下面是通讯录系统的标准格式文本,详细介绍了系统的功能和实现方法。
一、系统概述通讯录系统是一个基于数据结构的软件应用程序,用于存储和管理联系人信息。
它提供了一系列功能,包括添加联系人、查找联系人、修改联系人和删除联系人。
二、系统功能1. 添加联系人用户可以通过系统界面输入联系人的姓名、电话号码、电子邮件地址等信息,系统将这些信息存储在数据结构中。
每一个联系人的信息应包括惟一的标识符,以便于后续的查找、修改和删除操作。
2. 查找联系人用户可以通过姓名、电话号码或者电子邮件地址等关键字进行联系人的查找。
系统将根据用户提供的关键字,在数据结构中进行搜索,并返回与之匹配的联系人信息。
3. 修改联系人用户可以选择要修改的联系人,并提供新的姓名、电话号码、电子邮件地址等信息。
系统将根据用户提供的联系人标识符,在数据结构中找到对应的联系人,并更新其信息。
4. 删除联系人用户可以选择要删除的联系人,并确认删除操作。
系统将根据用户提供的联系人标识符,在数据结构中找到对应的联系人,并将其从通讯录中删除。
三、系统实现1. 数据结构选择为了高效地存储和管理联系人信息,我们选择使用链表作为数据结构。
每一个节点表示一个联系人,包含姓名、电话号码、电子邮件地址等信息,以及指向下一个节点的指针。
2. 添加联系人用户输入联系人信息后,系统将创建一个新的节点,并将其插入到链表的末尾。
为了保证联系人信息的惟一性,系统将检查新节点的标识符是否与已有节点的标识符重复。
如果重复,则提示用户重新输入。
3. 查找联系人用户输入关键字后,系统将从链表的头节点开始遍历,逐个比较节点中的姓名、电话号码和电子邮件地址与关键字是否匹配。
如果找到匹配的联系人,系统将返回其信息。
如果遍历完整个链表仍未找到匹配的联系人,则提示用户未找到。
一、实训目的本次数据结构实训通讯录报告旨在通过实际操作,加深对数据结构理论知识的理解,提高编程能力,培养实际解决问题的能力。
通过设计、实现和维护一个通讯录管理系统,使学生掌握线性表、链表、树、图等基本数据结构的应用,同时熟悉数据库操作和前端界面设计。
二、实训环境1. 操作系统:Windows 102. 开发工具:Visual Studio 20193. 编程语言:C++4. 数据库:MySQL5. 前端界面设计:Qt三、实训内容1. 系统需求分析(1)功能需求① 添加:允许用户添加新的联系人信息,包括姓名、电话、邮箱、地址等。
② 查询:根据姓名、电话、邮箱等关键字进行模糊查询。
③ 修改:允许用户修改指定联系人的信息。
④ 删除:允许用户删除指定联系人信息。
⑤ 导出:将通讯录数据导出为Excel格式。
⑥ 导入:允许用户从Excel文件导入联系人信息。
(2)性能需求① 系统应具备良好的响应速度,用户操作时,系统应迅速给出反馈。
② 系统应具备较高的稳定性,避免因操作失误导致数据丢失。
2. 系统设计① 联系人信息采用结构体存储,包括姓名、电话、邮箱、地址等字段。
② 联系人信息存储在MySQL数据库中,使用线性表进行管理。
③ 查询操作采用二分查找算法,提高查询效率。
(2)功能模块设计① 添加模块:用户输入联系人信息,系统将其存储在数据库中。
② 查询模块:用户输入关键字,系统从数据库中查找匹配的联系人信息。
③ 修改模块:用户输入联系人信息,系统将其更新到数据库中。
④ 删除模块:用户输入联系人信息,系统将其从数据库中删除。
⑤ 导出模块:将数据库中的联系人信息导出为Excel格式。
⑥ 导入模块:用户上传Excel文件,系统将其中的联系人信息导入数据库中。
3. 系统实现(1)数据库设计① 创建联系人信息表(contact_info),包括姓名、电话、邮箱、地址等字段。
② 设计SQL语句,实现数据的增删改查操作。
(2)编程实现① 使用C++实现各个功能模块,包括添加、查询、修改、删除等。
c集中上机报告学生通信录首先,C语言编程能力是现代人类技能竞争时的一个重要组成部分。
理论知识和基础编程技能都很重要,但实践能力更为关键,毕竟只有在实际活动中才能获得经验。
学生通讯录管理系统是一项基本的实践活动,也是学习C语言编程的绝佳方式。
这篇报告将详细介绍学生通讯录管理系统的设计和实现。
首先,我们将简要描述系统的主要功能。
其次,我们将概述系统开发过程中所使用的工具和技术。
接下来,我们将介绍代码在不同操作系统中的编译方法。
最后,我们将讨论当前系统的局限性,并探讨未来的发展方向。
学生通讯录管理系统的主要功能是为用户管理学生的姓名、学号、电话号码、邮箱地址和地址。
用户可以通过添加、修改和删除学生的信息对通讯录进行管理。
此外,系统还提供搜索和排序功能,方便用户查找和浏览学生信息。
总之,该系统是一个简单而实用的管理工具,帮助用户更好地组织信息。
系统的设计和实现主要基于C语言语法和数据结构。
使用的工具包括文本编辑器、编译器和调试器。
我们选择了Visual Studio Code和GCC编译器。
文本编辑器提供了方便快捷的代码编写和编辑功能。
编译器将源代码转换为执行文件,并且允许用户在开发过程中检测常见的编译错误。
调试器则帮助我们在程序运行时定位和调试错误。
在开发过程中,我们采用了模块化编程风格。
将代码分成若干个功能独立的部分,以提高代码可读性和可维护性。
与此同时,我们积极利用数据结构,如链表、数组和结构体,有效组织和管理程序中使用的数据。
代码的编译方法因操作系统而异。
我们首先在Ubuntu 20.04和Windows 10操作系统上进行了测试。
在Ubuntu上,我们在终端中使用以下命令进行编译:gcc -o main main.cfile_io.c students.c。
在Windows上,我们可以使用MINGW-w64包和对应的Cygwin环境用相同的方法进行编译。
但是,目前的学生通讯录管理系统仍存在一些局限性。
数据结构上机实验报告通讯录陈冠豪20102105010101015二O一O年5月26号实验目的通讯录内容有:姓名、通讯地址、电话号码。
要求:(1)建立通信录(2)插入一个人员信息。
(3)删除指定的人员信息。
(4)按姓名项的字母顺序递增排列;(5)能查找通讯录中某人的信息;实现代码://////////By Lea////////////// ////////2010210501//////////// //用链式存储结构的通讯录//By Lea.(2010210501)#include <stdio.h>#include <string.h>#include <stdlib.h>//#include "system.h"#define maxsize 100/*通讯信息的结构类型定义*/typedef struct{char num[10];char name[10];char phone[12];char addres[12];}DataType;struct persons{ char num[10];char name[10];char phone[12];char addres[12];}psn[maxsize];typedef struct node{DataType data;struct node *next;}ListNode,*LinkList;void InsertList(LinkList head){LinkList p;p=(LinkList)malloc(sizeof(ListNode));p->next=NULL;printf("\nInput the new node\n");printf("number:\n");gets(p->data.num);printf("name:\n");gets(p->);printf("phone:\n");gets(p->data.phone);printf("addres:\n");gets(p->data.addres);p->next=head->next;head->next=p;}/*查询函数:可以按编号或姓名在链表中查找出对应的记录。
*/ LinkList SearchList(LinkList head){LinkList p;char ch[10];printf("input the name:\n");gets(ch);p=head;p=p->next;while(p!=NULL&&strcmp(ch,p->data.num)!=0&&strcmp(ch,p->)!=0) p=p->next;return p;}/*删除记录:可以按照编号或姓名在链表中顺序查找出对应的记录,然后将其删除。
调用查询函数。
*/void DelNode(LinkList head){char x[10];LinkList p,q;printf("input the name you want to delete\n");gets(x);if(head==NULL){printf("this is a empty list.");return ;}p=head;while(strcmp(x,p->data.num)!=0&&strcmp(x,p->)!=0&&p->next!=NULL){q=p;p=p->next;}if(strcmp(x,p->data.num)==0||strcmp(x,p->)==0){if(p==head)head=p->next;elseq->next=p->next;free(p);}elseprintf("Not found.");return ;}/*建立一个通讯录链表,采用手工输入的方法逐个输入每个同学的信息。
*/ LinkList CreatList(){char ctn;LinkList L,s,r;//int i;/* int j;LinkList t;FILE *fp; */L=(LinkList)malloc(sizeof(ListNode));L->next=NULL;r=L;while(ctn!='s'){s=(LinkList)malloc(sizeof(ListNode));printf("number:\n");gets(s->data.num);printf("name:\n");gets(s->);printf("phone:\n");gets(s->data.phone);printf("addres:\n");gets(s->data.addres);printf("input s to exit,any other button continue!\n");ctn=getchar();r->next=s;r=s;}if(r!=NULL)r->next=NULL;/* fp=fopen("people.txt","w");for(t=L,j=0;t!=NULL;j++,t=t->next){strcpy(psn[j].num,t->data.num);strcpy(psn[j].name,t->);strcpy(psn[j].phone,t->data.phone);strcpy(psn[j].addres,t->data.addres);fwrite(&psn[j],sizeof(struct persons),1,fp);} *//* SaveList(L); */return L;}void orderList(LinkList head) /*排序*/{LinkList p,q;q=p=head;for(;q->next;q=q->next)while(p->next){char temp[10];int result=strcmp(p->,p->next->);if(result){temp[10]=*p->;*p->next->=*p->;*p->=*p->next->;}p=p->next;}printf("ordered the list\n");}LinkList readrecord()/* 将文件的信息读入结构体数组在转存入链表中 */ { int j,i;long k;FILE *fp;LinkList L,r,s;L=(LinkList)malloc(sizeof(ListNode));L->next=NULL;r=L;fp=fopen("people.txt","r+t");if(fp!=NULL){printf("\tOpen Success!\n");for(i=1;i<maxsize;i++){j=fgetc(fp);if(j==EOF)return L;k=i-1;fseek(fp,k*sizeof(struct persons),0); /* 读取一个人的信息 */fread(&psn[i],sizeof(struct persons),1,fp);s=(LinkList)malloc(sizeof(ListNode)); /* 装存入链表中 */ strcpy(s->data.num,psn[i].num);strcpy(s->,psn[i].name);strcpy(s->data.phone,psn[i].phone);strcpy(s->data.addres,psn[i].addres);/* if(head==NULL) */ /* 用尾插法将其插入链表中 *//* head=s;elser->next=s;r=s; */r->next=s;r=s;}if(r!=NULL)r->next=NULL;return L;}else{fp=fopen("people.txt","w"); /* 不能打开另开辟一个文件 */i=1;}}/*查看全部记录:从第一个结点到最后一个结点依次输出所有记录。
*/void PrintList(LinkList head){ LinkList p;p=head->next;/*使p指向第一个节点 */printf("number name telephone mobilephone\n");while(p!=NULL){printf("%s %s %s %s\n",p->data.num,p->,p->data.phone,p->data.addres);p=p->next;}}/*显示菜单函数*/void Menu(){printf("**************************PHONEBOOKS************************\n");printf("1--Creat 2--List all 3--Search 4--Insert 5--Delete 6--reorder 0--Exit\n");printf("Please select(Input 0--5)\n");}main(){int t;LinkList p,head;system("cls");head=readrecord();while(1){ Menu();scanf("%d",&t);getchar();/*屏蔽回车*/switch(t){case 1: printf("Creat the PhoneBooks.\n");head=CreatList();//SaveList(head);break;case 2: printf("List all record.\n");PrintList(head);break;case 3: printf("Search.\n");p=SearchList(head);if(p){printf("No. Name Telephone Mobilephone\n");printf("%s %s %s %s\n",p->data.num,p->,p->data.phone,p->data.addres);}else printf("No body.\n");break;case 4: printf("Insert new record.\n");InsertList(head);break;case 5: printf("Delete record.\n");DelNode(head);break;case 6: printf("reording the record.\n");orderList(head);break;case 0: printf("Exit.\n");return;} }}//////////By Lea//////////////////////2010210501//////////////用顺序存储结构的通讯录//By Lea.(2010210501)#include<stdio.h>#include<stdlib.h>#include<string.h>#define FORMAT "%s\t\t%s\t\t%s\t%d\t%s\n" int count=0;struct Address{char Name[21];int Age;char Sex[6];char ClassNum[11];char PhonNum[12];};int Enterface();int Add(Address book[]);int Modify(Address book[]);int Delent(Address book[]);int Insert(Address book[]);int Find(Address book[]);int Show(Address book[]);int FindName(Address book[]);int FindClassNum(Address book[]);int DelName(Address book[]);int DelClassNum(Address book[]);int FindPhonNum(Address book[]);int Readtxt(Address book[]);int Writetxt(Address book[]);int Search(Address book[],char str1[],int n);int FSearch(Address book[],char str2[],int n);int Taxis(Address book[]);int Exit();////////////////////////////////////////////////////////////////// //void main(){Address book[100];int choice;char or='m';system("pause");system("cls");while(or=='m'){choice=Enterface();switch(choice){case 1: Add(book);break;case 2: Modify(book);break;case 3: Delent(book);break;case 4: Insert(book);break;case 5: Find(book);break;case 6: Show(book);break;case 7: Exit();break;default : printf("!!!输入错误!!!\n");Exit();break;}}}int Enterface(){int choice=0;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");printf("请输入您的选择:");scanf("%d",&choice);return choice;}int Add(Address book[]){char or='Y';while('Y'==or){printf("请输入姓名:");scanf("%s",&book[count].Name);flag1:printf("请输入电话号码:");scanf("%s",&book[count].PhonNum);for(int i=0;i<count;i++){if(strcmp(book[count].PhonNum,book[i].PhonNum)==0){printf("!!!号码已存在!!!\n");goto flag1;}}flag2:printf("请输入学号:");scanf("%s",&book[count].ClassNum);for(i=0;i<count;i++){if(strcmp(book[count].ClassNum,book[i].ClassNum)==0){printf("!!!学号已存在!!!\n");goto flag2;}}printf("请输入年龄:");scanf("%d",&book[count].Age);printf("请输入性别:");scanf("%s",&book[count].Sex);getchar();count++;printf("是否继续添加('Y'添加,其他键返回主界面):");scanf("%c",&or);if('Y'!=or){system("cls");break;}}Taxis(book);Writetxt(book);// printf("sdfsdfsdf\n");return 0;}int Modify(Address book[]){char str[11];int flag=0;int ksd=0;printf("去年个输入学号:");scanf("%s",&str);for(int i=0;i<count;i++){if(strcmp(str,book[i].ClassNum)==0){if(ksd==0){printf(" 姓名\t 电话\t\t学号\t性别\t年龄\n");ksd=1;}printf("%8s\t%8s\t%s\t%s\t%d\n",book[i].Name,book[i].PhonNum, book[i].ClassNum,book[i].Sex,book[i].Age);// str[flag_num++]=i;flag=1;// i--;break;}}if(flag==0){printf("!!!无此记录!!!\n");return 0;}printf("请输入姓名:");scanf("%s",&book[i].Name);flag0:printf("请输入电话号码:");scanf("%s",&book[i].PhonNum);for(int j=0;j<count;j++){if(j==i)continue;if(strcmp(book[i].PhonNum,book[j].PhonNum)==0){printf("!!!号码已存在!!!\n");goto flag0;}}flag3:printf("请输入学号:");scanf("%s",&book[i].ClassNum);for(j=0;j<count;j++){if(j==i)continue;if(strcmp(book[i].ClassNum,book[j].ClassNum)==0){printf("!!!学号已存在!!!\n");goto flag3;}}printf("请输入年龄:");scanf("%d",&book[i].Age);printf("请输入性别:");scanf("%s",&book[i].Sex);getchar();printf("修改完毕!\n");Writetxt(book);system("pause");// printf("modify\n");return 0;}int Delent(Address book[]){// printf("delent\n");int choice=0;printf("================\n");printf(" 1.按姓名删除\n");printf(" 2.按学号删除\n");printf("================\n");scanf("%d",&choice);switch(choice){case 1: DelName(book);break;case 2: DelClassNum(book);break;default :break;}return 0;}int Insert(Address book[]){Add(book);// printf("insert\n");return 0;}int Find(Address book[]){int choice=0;printf("================\n");printf(" 1.按姓名查找\n");printf(" 2.按学号查找\n");printf(" 3.按电话查找\n");printf("================\n");scanf("%d",&choice);switch(choice){case 1: FindName(book);break;case 2: FindClassNum(book);break;case 3: FindPhonNum(book);break;default :break;}// printf("find\n");return 0;}int FindName(Address book[]){char aname[30];printf("请输入要查找的名字:");scanf("%s",&aname);FSearch(book,aname,3);return 0;}int FindClassNum(Address book[]) {char anum[20];printf("请输入要查找的学号:");scanf("%s",&anum);FSearch(book,anum,2);return 0;}int FindPhonNum(Address book[]){char aphonnum[20];printf("请输入要查找的学号:");scanf("%s",&aphonnum);FSearch(book,aphonnum,1);return 0;}int Show(Address book[]){int or=0;if(count==0){printf("!!!无记录!!!\n");system("pause");system("cls");}else{printf(" 姓名\t 电话\t\t学号\t性别\t年龄\n");for(int i=0;i<count;i++)printf("%8s\t%8s\t%s\t%s\t%d\n",book[i].Name,book[i].PhonNum, book[i].ClassNum,book[i].Sex,book[i].Age);system("pause");}printf("是否排序?\n-=1.排序=- -=2.返回主界面=-\n");scanf("%d",&or);if(1==or)Taxis(book);return 0;}int DelName(Address book[]){char aname[20];printf("请输入要删除的姓名:");scanf("%s",&aname);Search(book,aname,2);return 0;}int DelClassNum(Address book[]){char anum[20];printf("请输入要删除的学号:");scanf("%s",&anum);Search(book,anum,1);return 0;}int Readtxt(Address book[]){FILE *fp1;fp1=fopen("photonumbers.txt","r");if(fp1 == NULL){printf("wrong!\n");system("pause");}while(!feof(fp1)){if(!fscanf(fp1,"%s\t\t%s\t\t%s\t%d\t%s",book[count].Name,book[c ount].PhonNum,book[count].ClassNum,&book[count].Age,book[count].Sex))printf("读入出错!");count++;}count--;fclose(fp1);return 0;}int Writetxt(Address book[]){FILE *fp;fp=fopen("photonumbers.txt","w");for(int i=0;i<count;i++){fprintf(fp,FORMAT,book[i].Name,book[i].PhonNum, book[i].ClassNum,book[i].Age,book[i].Sex);}fclose(fp);return 0;}int Search(Address book[],char str1[],int n){int flag=0;int str[5];int flag_num=0;int j;int gf;int ksd=0;for(int i=0;i<count;i++){if(n==1){if(strcmp(str1,book[i].ClassNum)==0)flag=2;}else if(n==2){if(strcmp(str1,book[i].Name)==0)flag=2;}if(flag==2){if(ksd==0){printf(" 姓名\t 电话\t\t学号\t性别\t年龄\n");ksd=1;}printf("%8s\t%8s\t%s\t%s\t%d\n",book[i].Name,book[i].PhonNum, book[i].ClassNum,book[i].Sex,book[i].Age);str[flag_num++]=i;flag=1;}}if(flag==0){printf("!!!无记录!!!\n");system("pause");system("cls");}if(flag==1){printf("-=1.确认删除=-\t-=2.取消=-\n");scanf("%d",&j);if(1==j){gf=1;for(int m=str[0];m<count-flag_num;m++){for(int j=gf-1;j<flag_num;j++){if((m+gf)==str[j])gf++;}strcpy(book[m].Name,book[m+gf].Name);book[m].Age=book[m+gf].Age;strcpy(book[m].ClassNum,book[m+gf].ClassNum);strcpy(book[m].PhonNum,book[m+gf].PhonNum);strcpy(book[m].Sex,book[m+gf].Sex);}count=count-flag_num;Writetxt(book);}else if(2==j){printf("!!!操作已取消!!!\n");}system("pause");}return 0;}int FSearch(Address book[],char str2[],int n){int flag=0;int ksd=0;for(int i=0;i<count;i++){if(n==1){if(strcmp(str2,book[i].PhonNum)==0)flag=2;}else if(3==n){if(strcmp(str2,book[i].Name)==0)flag=2;}else if(2==n){if(strcmp(str2,book[i].ClassNum)==0)flag=2;}if(flag==2){if(0==ksd){printf(" 姓名\t 电话\t\t学号\t性别\t年龄\n");ksd=1;}printf("%8s\t%8s\t%s\t%s\t%d\n",book[i].Name,book[i].PhonNum, book[i].ClassNum,book[i].Sex,book[i].Age);flag=1;}}if(1==flag)system("pause");else if(flag==0){printf("!!!无此记录!!!\n");system("pause");system("cls");}return 0;}int Taxis(Address book[]){/* for(int i=0;i<count;i++){for(int j=0;j<count-1-i;j++){if(strcmp(book[j].ClassNum,book[j+1].ClassNum)>0) {Address bk;strcpy(,book[j].Name);bk.Age=book[j].Age;strcpy(bk.ClassNum,book[j].ClassNum);strcpy(bk.PhonNum,book[j].PhonNum);strcpy(bk.Sex,book[j].Sex);strcpy(book[j].Name,book[j+1].Name);book[j].Age=book[j+1].Age;strcpy(book[j].ClassNum,book[j+1].ClassNum); strcpy(book[j].PhonNum,book[j+1].PhonNum);strcpy(book[j].Sex,book[j+1].Sex);strcpy(book[j+1].Name,);book[j+1].Age=bk.Age;strcpy(book[j+1].ClassNum,bk.ClassNum); strcpy(book[j+1].PhonNum,bk.PhonNum); strcpy(book[j+1].Sex,bk.Sex);}}}printf("!!!操作成功!!!\n");system("pause");system("cls");Writetxt(book);*/return 0;}int Exit(){exit(1);return 0;}。