数据结构课程设计(通讯录制作)
学生通讯录管理系统数据结构课程设计代码
一、概述在当今数字化信息时代,学生通讯录管理系统已成为学校教育管理和日常生活中不可或缺的一部分。
针对校园学生的通讯录管理系统,既能方便学生之间的交流通信,也能方便管理者对学生信息进行统一管理。
本次课程设计旨在设计一个学生通讯录管理系统的数据结构与代码,实现信息的存储、查询和管理的功能。
二、系统需求分析1.系统功能需求(1) 实现学生基本信息的录入和存储,包括尊称、学号、性别、通信方式等信息;(2) 实现学生信息的查询、修改和删除功能;(3) 实现学生信息的按关键字检索功能,如按尊称、学号、班级等进行检索;(4) 实现学生通讯录的导出和导入功能,方便数据备份和迁移;(5) 实现用户权限管理功能,包括管理员和普通用户权限的划分。
2.系统性能需求(1) 系统应具有良好的用户界面设计,操作简单、友好;(2) 系统应具有较高的数据安全性,保护学生个人信息不被泄露;(3) 系统应具有较高的稳定性和可靠性,能够长时间稳定运行;(4) 系统应具有较高的查询和数据处理效率,能够快速响应用户请求。
三、系统设计1. 数据结构设计(1) 学生信息采用结构体进行存储,包括尊称、学号、性别、通信方式等字段;(2) 学生通讯录采用链表结构进行存储,方便动态添加、删除和查询操作;(3) 用户权限采用权限控制字段进行划分,保证不同用户有不同的操作权限。
2. 系统架构设计(1) 采用C语言进行开发,具有较高的执行效率和跨评台性;(2) 采用面向对象编程思想进行系统的模块化设计,方便系统维护和扩展;(3) 采用简洁的用户界面设计,操作逻辑清晰,用户体验良好。
四、代码实现以下为部分代码示例,展示系统核心功能的实现:1. 学生信息的录入和存储typedef struct Student {char name[20];int id;char gender[10];char contact[20];} Student;// 使用链表存储学生信息typedef struct Node {Student data;struct Node *next;} Node;2. 学生信息的查询、修改和删除// 查询学生信息void searchStudent(Node *head, char *name) {Node *p = head->next;while (p != NULL) {if (strcmp(p->, name) == 0) {// 输出学生信息printf("Name: s, ID: d, Gender:s, Contact: s\n", p->, p->data.id, p->data.gender, p->data.contact); return;}p = p->next;}printf("The student is not found\n");}// 修改学生信息void modifyStudent(Node *head, char *name, int id, char *gender, char *contact) {Node *p = head->next;while (p != NULL) {if (strcmp(p->, name) == 0) {// 修改学生信息strcpy(p->, name);p->data.id = id;strcpy(p->data.gender, gender);strcpy(p->data.contact, contact);return;}p = p->next;}printf("The student is not found\n");}// 删除学生信息void deleteStudent(Node *head, char *name) {Node *p = head;while (p->next != NULL) {if (strcmp(p->next->, name) == 0) { Node *temp = p->next;p->next = p->next->next;free(temp);return;}p = p->next;}printf("The student is not found\n");}3. 用户权限管理int m本人n() {// 管理员权限if (isAdmin) {// 管理员操作} else {// 普通用户操作}return 0;}五、系统测试与优化1. 系统测试(1) 对系统进行功能测试,包括学生信息录入、查询、修改、删除等功能的测试;(2) 对系统进行性能测试,测试系统的稳定性和数据处理效率。
数据结构课程设计报告---通讯录
数据结构课程设计报告---通讯录## 一、项目背景随着信息科技的发展,现代社会通讯录的应用越来越普遍,满足了人们信息的获取和管理的需求。
本项目的设计目的在于使用面向对象的程序思想,以面向对象的方式它来实现对通讯录信息的管理,进而提高信息的管理效率,提升信息的可靠性和安全性,最终达到为社会实施科学管理的目的。
## 二、系统需求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函数中调用上述函数,根据用户输入的指令调用对应的函数,直到用户选择退出程序。
数据结构课程设计报告---通讯录
数据结构课程设计报告专业:计算机科学与技术年级:课题名称:通讯录小组成员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. 数据库:通讯录管理系统需要使用到数据库来存储通讯录中的数据。
需要掌握关系型数据库的设计和操作,包括数据表的设计、SQL 语句的编写等。
4. 界面设计:通讯录管理系统需要有友好的用户界面,需要进行界面设计和开发,包括前端技术的使用,如HTML、CSS和JavaScript等。
5. 系统测试:通讯录管理系统需要进行系统测试,包括功能测试、性
能测试等,确保系统能够正常运行并满足用户需求。
通过设计和实现通讯录管理系统,可以锻炼学生对数据结构和算法的理解和应用能力,同时还能提高学生的编程能力和团队合作能力。
学生通讯录管理系统数据结构课程设计
学生通讯录管理系统数据结构课程设计一、需求分析在学生通讯录管理系统中,我们需要实现以下功能: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 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))
数据结构通讯录的制作
数据结构通讯录的制作目录1.引言1.1 目的1.2 背景信息2.需求分析2.1 功能需求2.2 性能需求3.设计3.1 数据结构选择3.2 数据存储方式4.实现4.1 系统架构4.2 数据结构的定义和实现4.3 数据存储与读取4.4 用户界面设计5.测试和验证5.1 单元测试5.2 集成测试6.部署和维护6.1 系统部署6.2 用户培训6.3 维护与更新7.法律名词及注释8.附件1.引言1.1 目的本文档旨在指导开发人员制作一个基于数据结构的通讯录,以满足用户对通讯录管理的需求。
1.2 背景信息随着通讯录的普及和数据量的增加,需要设计一种高效的数据结构来存储和管理通讯录中的联系人信息。
2.需求分析2.1 功能需求通讯录系统应具有以下功能:- 添加联系人:可以输入联系人的姓名、方式号码、电子邮件等信息。
- 删除联系人:根据姓名或其他唯一标识符删除联系人。
- 查找联系人:可以根据姓名或其他关键信息查找联系人。
- 修改联系人信息:可以对联系人的姓名、方式号码、电子邮件等信息进行修改。
- 显示通讯录:可以将通讯录中的所有联系人按照指定格式进行展示。
2.2 性能需求为了保证通讯录系统的性能,需要满足以下要求:- 系统响应时间应尽量短,使用户能够快速完成操作。
- 数据存储和读取的效率应高,以提高系统的整体性能。
- 系统应具备较高的容错性,能够在异常情况下继续正常运行。
3.设计3.1 数据结构选择为了高效地存储和管理联系人信息,我们选择使用哈希表作为主要数据结构。
哈希表可以实现快速的插入、删除和查找操作。
3.2 数据存储方式为了提高数据存储和读取的效率,我们选择将通讯录数据存储在内存中。
这样可以避免频繁的磁盘读写操作,提高系统的响应速度。
4.实现4.1 系统架构通讯录系统的实现可以分为三层架构:界面层、业务逻辑层和数据存储层。
界面层负责用户与系统的交互,业务逻辑层负责对用户请求进行处理,数据存储层负责数据的存储和读取。
数据结构课程设计(通讯录制作)
一.设计内容(通讯录)本系统应完成一下几方面的功能: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; /*前驱指针*/}链表的插入,删除来实现通讯录里的内容的插入删除当操作完成通过文件件来存储链表的信息,下次打开程序时,读取文件里的内容到内存中,放在链表,然后又可以对链表进行操作;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语句调用各种函数,实现各种操作。
通讯录的制作数据结构课程设计
通讯录的制作数据结构课程设计
在通讯录的制作数据结构课程设计中,我们将使用链表作为主要的数据结构来存储联系人的信息。
链表是一种动态数据结构,它可以根据实际需要动态地分配和释放内存,非常适合用来存储不定数量的联系人信息。
首先,我们需要设计一个联系人的结构体,包含姓名、电话号码、邮箱等基本信息。
然后,我们可以使用链表节点来表示每个联系人,每个节点包含一个联系人的信息以及指向下一个节点的指针。
在创建通讯录时,我们将使用一个头节点来表示通讯录的起始位置,该头节点不包含任何联系人信息,只有一个指向第一个联系人节点的指针。
这样,我们可以通过头节点来遍历整个通讯录,并且在需要插入或删除联系人时更加方便。
在通讯录的实现中,我们可以提供一系列的操作函数,例如添加联系人、删除联系人、查找联系人、显示通讯录等。
这些操作函数可以通过遍历链表来实现对联系人的管理。
除了基本的功能,我们还可以扩展通讯录的功能,例如按照姓名首字母进行排序、按照电话号码进行查找等。
这些功能的实现可以通过链表的操作和排序算法来完成。
此外,我们还可以考虑使用其他数据结构来优化通讯录的实现。
例如,可以使用哈希表来加快对联系人的查找速度,或者使用二叉搜索树来实现按照姓名首字母进行排序。
综上所述,通讯录的制作数据结构课程设计中,我们将使用链表作为主要的数据结构,并通过实现一系列的操作函数和扩展功能来实现对联系人的管理和查询。
同时,我们也可以考虑使用其他数据结构来优化通讯录的实现。
这样的设计可以提高通讯录的效率和方便性,使用户能够更加方便地管理和查找自己的联系人信息。
通讯录——数据结构课程设计
通讯录——数据结构课程设计通讯录是一个用于存储和管理联系人信息的工具。
在数据结构课程设计中,我们需要设计一个通讯录系统,使用户能够方便地添加、查找、修改和删除联系人信息。
下面是通讯录系统的标准格式文本,详细介绍了系统的功能和实现方法。
一、系统概述通讯录系统是一个基于数据结构的软件应用程序,用于存储和管理联系人信息。
它提供了一系列功能,包括添加联系人、查找联系人、修改联系人和删除联系人。
二、系统功能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++实现各个功能模块,包括添加、查询、修改、删除等。
数据结构课程设计通讯录
数据结构课程设计通讯录一、课程目标知识目标: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. 讲授法:通过教师讲解,使学生掌握通讯录数据结构的基本概念、原理和实现方法。
数据结构课程设计(通讯录管理系统)
攀枝花学院学生课程设计(论文)题目:通讯录管理系统学生姓名:学号:所在院(系):数学与计算机学院专业:信息与计算科学班级: 2013级指导教师:职称:年月日攀枝花学院教务处制攀枝花学院本科学生课程设计任务书摘要随着社会的发展,人们生活的步调日益加快,越来越多的人加入了全球化的世界。
人们不再拘泥于自己的一块小天地,随时随地能沟通是生活中非常重要的一件事,于是通讯录成为每个人必不可少的工具。
所以编写《通讯录管理系统》,旨在帮助人们更方便联系自己的朋友。
此“通讯录管理系统”具有通讯录链表的建立、通讯者结点的插入、通讯者结点的查询、通讯者结点的删除、通讯录链表的输出、退出通讯录管理系统等功能。
使用数据结构编写,运用大量的函数实现通讯录的功能。
让使用者进行简单的操作即可以实现通讯录管理系统的基本功能,丰富并方便了人们的生活。
关键词数据结构,通讯录管理系统,函数目录摘要.......................................................................................................................... I V目录 (II)1 需求分析 (1)1.1 需求概述 (1)1.2 需求环境 (1)1.3 功能描述 (1)2 概要设计 (2)2.1 程序功能模块 (2)2.2 程序流程图 (3)2.3 数据结构的设计 (4)3 详细设计 (5)3.1 程序初始化 (5)3.1.1代码功能 (5)3.1.2 功能实现代码 (5)3.2链表结点的插入 (6)3.2.1代码功能 (6)3.2.2 功能实现代码 (6)3.3通讯者结点信息的查找 (7)3.3.1 代码功能 (7)3.3.2 功能实现代码 (7)3.4通讯者结点信息的删除能 (8)3.4.1 代码功能 (8)3.4.2 功能实现代码 (8)4 测试与运行 (10)结束语 (13)参考文献 (14)附录:程序清单 (15)1 需求分析1.1 需求概述通讯录管理系统是一个比较实用的小型管理系统。
数据结构课程设计-通信录的制作(附录中有全部代码)
课程设计任务书专业名称:计算机科学与技术(软件工程)课程名称:数据结构课程设计设计题目:通讯录的制作起止时间: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语言源程序并最终在计算机上看到程序的运行结果要经过以下几个步骤:上机输入与编辑源程序文件;编译源程序文件;与库函数连接;运行可执行文件。
数据结构课程设计-建通讯录
数据结构课程设计-建通讯录建通讯录要求:第一个模块——主函数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、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间: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; /*前驱指针*/}链表的插入,删除来实现通讯录里的内容的插入删除当操作完成通过文件件来存储链表的信息,下次打开程序时,读取文件里的内容到内存中,放在链表,然后又可以对链表进行操作;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(){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;}NULL3.删除·查找·显示函数删除函数调用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文件中。