通讯录的制作(数据结构C语言版)
c语言通讯录程序设计

c语言通讯录程序设计在现代社会中,通讯录是人们工作和生活中必不可少的工具之一。
为了方便管理联系人的信息,许多人开始使用电子化的通讯录,并希望能够通过程序来实现通讯录的管理。
本文将以C语言为基础,介绍一个简单但实用的通讯录程序设计。
首先,我们需要定义通讯录的数据结构。
通讯录中每个联系人都应该有姓名、电话号码、电子邮件等基本信息。
为了方便管理,我们可以定义一个结构体来表示联系人的信息。
以下是一个简单的示例:```c#define MAX_CONTACTS 100typedef struct {char name[100];char phone[100];char email[100];} Contact;Contact contacts[MAX_CONTACTS];int numContacts = 0;```上述代码中,我们使用了一个数组来存储联系人的信息,数组的大小可以根据需求进行修改。
同时,我们还定义了一个变量`numContacts`来记录当前通讯录中联系人的数量。
接下来,我们可以设计一些基本的功能,比如添加联系人、查找联系人和删除联系人等。
下面是这些功能的实现示例:```cvoid addContact() {if (numContacts >= MAX_CONTACTS) {printf("通讯录已满,无法添加新的联系人。
\n"); return;}Contact newContact;printf("请输入联系人姓名:");scanf("%s", );printf("请输入联系人电话号码:");scanf("%s", newContact.phone);printf("请输入联系人电子邮件:");scanf("%s", newContact.email);contacts[numContacts] = newContact;numContacts++;printf("联系人添加成功。
C语言使用结构体实现简单通讯录

C语⾔使⽤结构体实现简单通讯录C语⾔⽤结构体实现⼀个通讯录,通讯录可以⽤来存储1000个⼈的信息,每个⼈的信息包括:姓名、性别、年龄、电话、住址提供⽅法:1. 添加联系⼈信息2. 删除指定联系⼈信息3. 查找指定联系⼈信息4. 修改指定联系⼈信息5. 显⽰所有联系⼈信息6. 清空所有联系⼈代码实现:头⽂件:#ifndef __HEAD_H__ ////防⽌头⽂件被多次调⽤#define __HEAD_H__#include<stdio.h>#include<string.h>#include<stdlib.h>#define PEOPLE_MAX 1000#define NAME_LENTH 20#define SEX_LENTH 5#define AGE_LENTH 10#define TEL_LENTH 15#define ADDR_LENTH 50 //宏定义各个数据所需的⼤⼩,后续引⽤直接可以使⽤名称,或需修改时只⽤修改这⾥就可以了struct People{char name[NAME_LENTH];char sex[SEX_LENTH];int age;char tel[TEL_LENTH ];char addr[ADDR_LENTH];}; //定义⼈的信息结构体(包含各种信息)struct Contact{struct People person[PEOPLE_MAX];int user_count;}; //定义通讯录结构体(包含⼈的信息的结构体和⽤户个数)typedef struct Contact * pContact;int add_contact(pContact pcon); //pContact是⼀个结构体指针类型,pcon是⼀个指向struct Contact的⼀个指针int dele_contact(pContact pcon); //例如:typedef int * int 即 int *p ==> int pint find_contact(pContact pcon);int modify_contact(pContact pcon);int show_contact(pContact pcon);int clear_contact(pContact pcon);void menu(); //函数的声明#endif各种函数实现:#include"head.h"int add_contact(pContact pcon){if(pcon->user_count >= PEOPLE_MAX){printf("contact is full!\n");return -1;}else{printf("input name,please!\n");scanf("%s",pcon->person[pcon->user_count].name);printf("input sex,please!\n");scanf("%s",pcon->person[pcon->user_count].sex);printf("input age,please!\n");scanf("%d",&pcon->person[pcon->user_count].age); //这⾥⽤%d输出intprintf("input tel,please!\n");scanf("%s",pcon->person[pcon->user_count].tel);printf("input addr,please!\n");scanf("%s",pcon->person[pcon->user_count].addr);(pcon->user_count)++;}return 0;} //添加信息的实现int dele_contact(pContact pcon){int ret = find_contact(pcon); //调⽤查找函数并保存其值if(ret != -1){int i = 0;i = ret; //这⾥要⽤另⼀个变量来保存输⼊的姓名for(i = 0;i < pcon->user_count-1;i++){pcon->person[i] = pcon->person[i+1]; //⽤后⼀个覆盖前边的,如果要删除的是最后⼀个不进⾏此步骤}pcon->user_count --; //直接减去最后⼀个即count--}return 0;}int find_contact(pContact pcon){int i = 0;char ret[NAME_LENTH]; //⽤另⼀个数组来保存nameprintf("input name,please!\n");scanf("%s",ret);while(i <= pcon->user_count){if(strcmp(ret,pcon->person[i].name)== 0) //⽐较输⼊的姓名和通讯录中已有的姓名{printf("name\tsex\tage\ttel\taddr\t\n");printf("%s\t",pcon->person[i].name);printf("%s\t",pcon->person[i].sex);printf("%d\t",pcon->person[i].age);printf("%s\t",pcon->person[i].tel);printf("%s\t\n",pcon->person[i].addr);return i;}i++;}printf("sorry,the name you find is not exist!\n");return -1;}int modify_contact(pContact pcon) //修改函数,⾸先找到如要修改的姓名,然后重新输⼊{int ret = find_contact(pcon);if(ret != -1){printf("input name,please!\n");scanf("%s",pcon->person[ret].name);printf("input sex,please!\n");scanf("%s",pcon->person[ret].sex);printf("input age,please!\n");scanf("%d",&(pcon->person[ret].age));printf("input tel,please!\n");scanf("%s",pcon->person[ret].tel);printf("input addr,please!\n");scanf("%s",pcon->person[ret].addr);}else{printf("sorry,the name you find is not exist!\n");}return 0;}int show_contact(pContact pcon){int i = 0;printf("name\tsex\tage\ttel\t\taddr\t\n"); //制表符来制作表头for(i = 0;i < pcon->user_count;i++){printf("%s\t",pcon->person[i].name);printf("%s\t",pcon->person[i].sex);printf("%d\t",pcon->person[i].age);printf("%s\t",pcon->person[i].tel);printf("%s\t\n",pcon->person[i].addr);}printf("\n");return 0;}int clear_contact(pContact pcon){pcon->user_count = 0 ;return 0;} //清除所有⼈,直接让成员个数变为0即可void menu(){printf("-------contact---------\n");printf(" 1.添加联系⼈信息 \n");printf(" 2.删除指定联系⼈信息 \n");printf(" 3.查找指定联系⼈信息 \n");printf(" 4.修改指定联系⼈信息 \n");printf(" 5.显⽰所有联系⼈信息 \n");printf(" 6.清空所有联系⼈ \n");printf(" 0.谢谢使⽤ \n");printf("-------contact---------\n");}主函数:#include"head.h"int main(){int n=1;struct Contact people; //调⽤通讯录结构体er_count = 0; //初始化user_countwhile(n){menu();printf("please input\n");scanf("%d",&n);switch(n){case 1:{add_contact(&people);break;}case 2:{dele_contact(&people);break;}case 3:{find_contact(&people);break;}case 4:{modify_contact(&people);break;}case 5:{show_contact(&people);break;}case 6:{clear_contact(&people);break;}default:{return 0;break;} //switch case语句分⽀选择不同函数实现不同作⽤ }}return 0;}结果实现:以上就是本⽂的全部内容,希望对⼤家的学习有所帮助,也希望⼤家多多⽀持。
通讯录C语言程序设计

通讯录C语言程序设计通讯录C语言程序设计是一个常见的编程练习项目,它可以帮助初学者熟悉C语言的基本语法和数据结构。
下面是一个简单的通讯录程序设计示例,包括了程序的基本框架、功能实现和代码实现。
程序设计目标设计一个通讯录程序,能够实现以下功能:1. 添加联系人2. 删除联系人3. 修改联系人信息4. 显示所有联系人5. 按姓名查找联系人6. 保存联系人信息到文件7. 从文件加载联系人信息程序设计思路1. 数据结构设计:使用结构体`struct Contact`来存储联系人信息,包括姓名、电话号码、电子邮件等。
2. 功能模块划分:将程序分为多个功能模块,如添加、删除、修改、显示、查找、保存和加载。
3. 用户界面设计:设计一个简单的文本界面,使用循环让用户选择相应的操作。
4. 文件操作:使用C语言的文件操作函数来实现联系人信息的持久化存储。
数据结构定义```c#include <stdio.h>#include <stdlib.h>#include <string.h>#define MAX_CONTACTS 100#define MAX_NAME 50#define MAX_PHONE 20#define MAX_EMAIL 50struct Contact {char name[MAX_NAME];char phone[MAX_PHONE];char email[MAX_EMAIL];};struct Contact contacts[MAX_CONTACTS];int contactCount = 0;```功能实现1. 添加联系人```cvoid addContact() {if (contactCount >= MAX_CONTACTS) {printf("Contact list is full.\n"); return;}printf("Enter name: ");scanf("%49s", contacts[contactCount].name);printf("Enter phone: ");scanf("%19s", contacts[contactCount].phone);printf("Enter email: ");scanf("%49s", contacts[contactCount].email);contactCount++;}```2. 删除联系人```cvoid deleteContact() {int i, index;printf("Enter name of the contact to delete: ");scanf("%49s", contacts[index].name);for (i = 0; i < contactCount; i++) {if (strcmp(contacts[i].name, contacts[index].name) == 0) {index = i;break;}}if (i == contactCount) {printf("Contact not found.\n");} else {for (; i < contactCount - 1; i++) {contacts[i] = contacts[i + 1];}contactCount--;printf("Contact deleted.\n");}}```3. 修改联系人信息```cvoid modifyContact() {// 类似于删除联系人,找到联系人后修改信息}```4. 显示所有联系人```cvoid displayContacts() {for (int i = 0; i < contactCount; i++) {printf("%s, %s, %s\n", contacts[i].name, contacts[i].phone, contacts[i].email);}}```5. 按姓名查找联系人```cvoid findContact() {char name[MAX_NAME];printf("Enter name to find: ");scanf("%49s", name);for (int i = 0; i < contactCount; i++) {if (strcmp(contacts[i].name, name) == 0) { printf("%s, %s, %s\n", contacts[i].name, contacts[i].phone, contacts[i].email);return;}}printf("Contact not found.\n");}```6. 保存联系人信息到文件```cvoid saveContactsToFile() {FILE *file = fopen("contacts.txt", "w");if (file == NULL) {printf("Error opening file.\n");return;}for (int i = 0; i < contactCount; i++) {fprintf(file, "%s,%s,%s\n", contacts[i].name, contacts[i].phone, contacts[i].email);}fclose(file);printf("Contacts saved to file.\n");}```7. 从文件加载联系人信息```cvoid loadContactsFromFile() {FILE *file = fopen("contacts.txt", "r");if (file == NULL) {printf("。
全功能版通讯录(c语言)设计说明概要

全功能版通讯录(c语言)设计说明概要第一篇:全功能版通讯录(c语言) 设计说明概要通讯录管理系统设计说明书一、需求分析本通讯录是一款具有基本通讯信息管理功能的系统。
包括基本添加,修改,删除,查询和输出等功能。
其中联系组是为了更好地管理联系人信息,如常用的组有亲戚,家人,朋友,同学等。
用户添加的信息存储到文件当中,本系统的数据存储文件包括group.dat和linkman.dat,其中group.dat存储组信息;而linkman.dat则存储联系人的信息。
用户登陆系统后,根据需要,选择操作类型。
系统一启动,便将相关数据文件装载进内存,如果数据文件不存在,系统将会创建新的数据文件。
并将数据文件内的记录存放在链表数据结构类型中,接下来用户所有的操作,都是对链表的操作。
当用户退出系统时,系统将自动将链表的信息存进数据文件。
本系统中包含两个链表:group链表和linkman链表,分别对应group,dat 和linkman,dat两个数据文件。
1、组信息管理模块: ◎添加新组信息:当用户添加一个新组时,这个新组将被添加到group.dat文件的末尾,如果添加的组已存在则返回出错信息。
◎修改已有组信息:用户首先输入所要修改的联系组,然后系统查询该联系组存不存在。
若存在,则要求用户输入新的信息,并进行替换;若不存在,则返回错误信息。
◎删除已有组:用户首先输入所要删除的组,然后系统查询该组存不存在。
如果存在,则先删除该组下的所有联系人的信息,再删除该组;如果所要删除的信息不存在, 则返回错误信息。
◎删除所有已有组信息:该操作没有输入值。
如果原来group.dat 文件中没有联系组,返回错误信息;否则,删除所有联系组,同时删除各个组下的联系人信息。
◎组查询功能:按用户输入的查询条件,在group.dat文件中查询相关信息。
若存在符合条件的组,则输出相应的组信息;若不存在,则返回出错信息。
◎输出所有组信息:将group.dat中所有组全部输出来。
C语言课程设计——通讯录软件源代码(完美版)

C语言课程设计——通讯录软件源代码(完美版)通讯录完美版操作说明书编译环境:Visual C++ 6.0初始密码为:111111主菜单:选择编号进行相应的操作:选择“1”:输入编号:如“001”。
通讯录数据结构如下,只要输入的数据不超过允许的范围即可:struct callmember //定义数据结构{char code[8]; // 编号char name[20]; // 姓名char callnumber[16]; // 电话号码char address[30]; // 地址};输入完后“Enter”结束。
然后又回到“main menu”。
选择“2”显示通讯录信息,但此时刚输入的信息还没保存,选择“3”就可以将联系人信息保存在“通讯录.txt”文件中了,这个文件是自动生成的不需自己建立。
除此外还有查询、修改、删除功能。
当然功能有限,望有能之士加以修改,完善内容~本软件是一个值得收藏的软件,可以用于管理自己的通讯录~源程序:/***************************C语言课程设计*****************************//******************************************************************* **//******************************************************************* **//******************************************************************* **//***** 项目名称: 通讯录管理系统 *****/ /***** 作者: *****/ /*****专业: ***** *****/ /***** 班级: ***** *****/ /***** 学号: ********* *****//***** 指导老师: *****/ /***** 完成时间: 2010.7.12 *****/ /***** 联系电话: 150*******3 *****/ /***** 初始密码: 111111 *****//*********************************************************************/ /******************************************************************* **//******************************************************************* **//************************预处理***************************************/ #include<string.h> #include<stdio.h>#include<stdlib.h>#include<windows.h>#include<conio.h>#define N 301 //修改N的值,就可以改变记录个数,实际容纳人数为N-1 struct callmember //定义数据结构{char code[8]; // 编号char name[20]; // 姓名char callnumber[16]; // 电话号码char address[30]; // 地址};/***********************定义全局变量**********************************/FILE * fp; //文件指针struct callmember person[N]; //记录信息,N为通信录容量,有用信息为后N-1条int counter; //统计记录个数(联系人个数)/***********************函数声明*************************************/void creat(); //创建通讯录 OKvoid load(); //加载数据 OKvoid menu(); //界面菜单显示 OKvoid choose_1(int ); //选择功能 OKvoid insert(); //1、通讯信息的录入 OKvoid output(); //2、通讯信息的显示 OKvoid save(); //3、通讯信息的保存 OKvoid del(); //4、记录的删除 OKvoid modify(); //5、记录的修改 OKvoid found(); //6、记录的查找,三种方式 OKvoid choose_2(int ); //选择查询方式 OKvoid found_code(); //6.1、按编号查询 OK void found_name(); //6.2、按姓名查询 OK void found_callnumber(); //6.3、按电话号码查询 OK voidquit(); //7、退出系统 OK /********************** MAIN 函数***********************************/int main(){char m;char mima[10];char jiema[10];/*************密码文件的创建*****************/if((fp=fopen("mi_ma.dat","rb"))==NULL) //rb 只读(打开){fp=fopen("mi_ma.dat","wb");//wb 为读写建立一个新的文件(如果文件不存在,建立新文件)fprintf(fp,"%s","111111");fclose(fp);}/*************密码的读入*********************/fp=fopen("mi_ma.dat","rb");fscanf(fp,"%s",jiema);fclose(fp);/*************界面设置***********************/system("color 2f"); //设置界面颜色system("cls"); //清屏printf("\n\n\n\n\n\n\n\n\n\n\t\t\t请输入您的密码: "); //输入九位以内的密码gets(mima);if(!strcmp(mima,jiema)){printf("\n\n\t\t\t是否想修改您的密码 (Y/N) : "); scanf("%c",&m);if(m=='y'||m=='Y'){fp=fopen("mi_ma.dat","wb");printf("\n\t\t\t请输入您的新密码: ");scanf("%s",jiema);fprintf(fp,"%s",jiema);fclose(fp);printf("\n\t\t\t密码修改成功!");getchar();getchar();}system("cls"); //清屏system("color 2f"); //设置界面颜色creat(); //为程序创建文件(如果文件不存在)fp=fopen("counter.txt","r"); //r 只读(打开文件)fscanf(fp,"%d",&counter); //将磁盘中的数据赋给counter fclose(fp); //关闭打开的文件load(); //数据装载到内存中menu();return 0;}else{printf("\n\n\t\t\t输入密码错误!");getchar();printf("\t\t\t");return 0;}}/************************创建通讯录函数****************************/ void creat(){if((fp=fopen("通讯录.txt","r"))==NULL)//r 只读(打开){fp=fopen("通讯录.txt","w");//w 为读写建立一个新的文件(如果文件不存在,建立新文件)fprintf(fp,"%-10s%-20s%-20s%-30s\n","编号","姓名","电话号码","地址"); //写入基本信息person[0]fclose(fp);}if((fp=fopen("counter.txt","r"))==NULL) //r 只读(打开){fp=fopen("counter.txt","w"); //w 为只写建立一个新的文件fprintf(fp,"%d",0); //写入初值(自有文件新建时才有)fclose(fp);}}void load(){int i;if((fp=fopen("通讯录.txt","r"))!=NULL) //r 只读(打开),打开文件成功for(i=0;i<=counter;i++)fscanf(fp,"%s%s%s%s",person[i].code,person[i].name,person[i].callnum ber,person[i].address);//将文件中的信息加载到内存中,供操作使用elseprintf("打开文件失败!\n");fclose(fp);}/************************界面菜单显示函数**************************/ void menu(){int k;printf("\n");printf("\n");printf("\t ********************************************\n");printf("\t ********** 设计者: ***********\n");printf("\t ********** 设计时间: 2010.7.13 ***********\n");printf("\t ********************************************\n\n");printf("\t ********************************************\n");printf("\t **************** MENU ********************\n");printf("\t ********************************************\n");printf("\t ********* 1、通讯信息的录入: *************\n");printf("\t ********* 2、通讯信息的显示: *************\n");printf("\t ********* 3、通讯信息的保存: *************\n");printf("\t ********* 4、通信记录的删除: *************\n");printf("\t ********* 5、通信记录的修改: *************\n");printf("\t ********* 6、通信记录的查找: *************\n");printf("\t ********* 0、退出系统: *************\n");printf("\t ********************************************\n");printf("\t Now Please Enter your choose(0-6): ");scanf("%d",&k);choose_1(k);}/************************函数功能选择函数************************/ void choose_1(int k){switch(k){case 1 : insert();break;case 2 : output();break;case 3 : save();system("cls");printf("\n\n\n\n\n\n\n\n\n\n\t\t\t\t 保存成功!");getchar();getchar();system("cls");menu();break;case 4 : del();break;case 5 : modify();break;case 6 : found();break;case 0 : quit();break;default: ;break;}}/****************************OK***********************************/ /************************通讯信息录入函数*************************/ /***************将数据写入内存中,由person[N]数组保存着***********/ void insert(){struct callmember * p;system("cls");p=(struct callmember *)malloc(sizeof(struct callmember ));//将动态分配的内存首地址赋给pprintf("\n\n\n\n\n\n");printf("\t *********************************\n\n");printf("\t 编号: ");scanf("%s",p->code);strcpy(person[counter+1].code,p->code);printf("\t 姓名: ");scanf("%s",p->name);strcpy(person[counter+1].name,p->name);printf("\t 电话: ");scanf("%s",p->callnumber);strcpy(person[counter+1].callnumber,p->callnumber);printf("\t 地址: ");scanf("%s",p->address);strcpy(person[counter+1].address,p->address);printf("\n\t *********************************");counter++;free(p); //释放空间getchar();getchar();system("cls");menu();}/************************通讯信息显示函数************************/ /************从内存中将数据显示在屏幕上,不用打开文件************/ void output(){int i=1;system("cls");if(counter){for(i=0;i<=counter;i++)printf("\t%-8s%-20s%-16s%-30s",person[i].code,person[i].name,person[i].callnumber,person[i].address);printf("\t");}elseprintf("\n\n\n\n\n\t\t记录为空,请输入联系人信息!");getchar();getchar();system("cls");menu();}/*************保存、修改、删除只针对内存中的数组进行操作*********/ /************************通讯信息保存函数************************/ void save() {int i;system("cls");if((fp=fopen("counter.txt","w"))==NULL) //w 只写覆盖原来的数据{printf("\n\n\n\t\t\t操作失败.");exit(1);}fprintf(fp,"%d",counter); //往磁盘写入现在的值,即保存fclose(fp);if((fp=fopen("通讯录.txt","w"))!=NULL)fprintf(fp,"%s","\0");fclose(fp);if((fp=fopen("通讯录.txt","a"))!=NULL)for(i=0;i<=counter;i++)fprintf(fp,"%-10s%-20s%-20s%-30s\n",person[i].code,person[i].name,person[i].callnumber,p erson[i].address);fclose(fp);system("cls");}/************************信息删除函数****************************/ void del() //根据姓名删除,根据显示选择要删的内容 {int k=1;int c=0;char m;char namekey[20];system("cls");printf("\n\n\n\n\n\n\t\t\t请输入要删除的姓名:");scanf("%s",namekey);while(k<=counter){if(!strcmp(namekey,person[k++].name)){c=k-1;break;}}if(c){printf("\t\t\t已查到,记录为:\n\n\n");printf("\t%-10s%-20s%-20s%-30s\n",person[0].code,person[0].name,person[0].callnumber,p erson[0].address);printf("\t%-10s%-20s%-20s%-30s\n",person[c].code,person[c].name,person[c].callnumber,pe rson[c].address);printf("\n\n\t\t\t确定要删除吗? (Y/N) : ");scanf("%s",&m);if(m=='y'||m=='Y'){if(c==counter){strcpy(person[counter].code,"\0");strcpy(person[counter].name,"\0");strcpy(person[counter].callnumber,"\0");strcpy(person[counter].address,"\0");counter--;}else{for(k=c;k<=counter;k++) //后面的信息将前面的信息覆盖掉{strcpy(person[k].code,person[k+1].code);strcpy(person[k].name,person[k+1].name);strcpy(person[k].callnumber,person[k+1].callnumber); strcpy(person[k].address,person[k+1].address);}strcpy(person[counter].code,"\0"); //最后面的信息为空strcpy(person[counter].name,"\0");strcpy(person[counter].callnumber,"\0");strcpy(person[counter].address,"\0");counter--;}printf("\t\t\t删除成功!");getchar();getchar();system("cls");save(); //用save()函数将删除后的信息从新保存menu();}else{system("cls");menu();}}else{printf("\n\t\t\t对不起,没有此人记录!");getchar();getchar();system("cls");menu();}}/************************信息修改函数****************************/ //可以设定编号唯一,通过查找编号来确定记录位置,进而进行修改 void modify(){int k=1;char m;char codekey[20];system("cls");printf("\n\n\t\t\t 请输入要修改的编号: ");scanf("%s",codekey);while(k<=counter){if(!strcmp(codekey,person[k].code))break;k++;}if(k<=counter){printf("\n\t\t\t 已查到,记录为:\n");printf("\n\t\t%-10s%-20s%-20s%-30s\n","编号","姓名","电话号码","地址");printf("\t\t%-10s%-20s%-20s%-30s\n",person[k].code,person[k].name,person[k].callnumber, person[k].address);printf("\t\t\t 确定要修改吗? (Y/N) : ");scanf("%s",&m);if(m=='y'||m=='Y'){printf("\n\t\t\t 请输入新的信息:\n\n");printf("\t *********************************\n\n");printf("\t 编号: ");scanf("%s",person[k].code);printf("\t 姓名: ");scanf("%s",person[k].name);printf("\t 电话: ");scanf("%s",person[k].callnumber);printf("\t 地址: ");scanf("%s",person[k].address);printf("\n\t *********************************"); printf("\n\n\t\t\t 修改成功!");getchar();getchar();system("cls");save(); //修改完后立马保存menu();}else{system("cls");menu();}}else{printf("\n\n\t\t\t对不起,没有此人记录!");getchar();getchar();system("cls");menu();}}/************************信息查询函数****************************/ void found() //调试合适{int k;system("cls");printf("\n");printf("\n");printf("\n\t\t******************************************\n"); printf("\n\t\t 1、按编号查询:\n");printf("\n\t\t 2、按姓名查询:\n");printf("\n\t\t 3、按电话号码查询:\n");printf("\n\t\t 0、返回:\n");printf("\n\t\t******************************************\n\n"); printf("\t\tPlease Enter Your Choose now: ");scanf("%d",&k);choose_2(k);}void choose_2(int k){switch(k){case 1 : found_code(); break;case 2 : found_name(); break;case 3 : found_callnumber(); break;case 0 : system("cls");menu(); break;default : system("cls");menu();break;}system("cls");menu();}//按编号查询void found_code(){int k=0;char codekey[8];struct callmember * p;p=(struct callmember *)malloc(sizeof(struct callmember)); printf("\n\t\t请输入要查询的编号:");scanf("%s",codekey);if((fp=fopen("通讯录.txt","r"))==NULL){printf("\n不能打开通讯录!\n");exit(0);}while(!feof(fp)) //当文件结束时,feof()返回值为1{fscanf(fp,"%s%s%s%s\n",p->code,p->name,p->callnumber,p->address);if(!strcmp(codekey,p->code)){k=1;break; //k=1,说明已经查到}}if(k){printf("\n\t\t%-10s%-20s%-20s%-30s\n","编号","姓名","电话号码","地址");printf("\t\t%-10s%-20s%-20s%-30s",p->code,p->name,p->callnumber,p->address);}elseprintf("\n\t\t您查询的编号不存在!");fclose(fp);getchar();getchar();system("cls");}//按姓名查询void found_name(){int k=0;char namekey[8];struct callmember * p;p=(struct callmember *)malloc(sizeof(struct callmember));printf("\n\t\t请输入要查询的姓名:");scanf("%s",namekey);if((fp=fopen("通讯录.txt","r"))==NULL){printf("\n不能打开通讯录!\n");exit(0);}while(!feof(fp)) //当文件结束时,feof()返回值为1.{fscanf(fp,"%s%s%s%s\n",p->code,p->name,p->callnumber,p->address); if(!strcmp(namekey,p->name)){k=1;break; //k=1,说明已经查到}}if(k){printf("\n\t\t%-10s%-20s%-20s%-30s\n","编号","姓名","电话号码","地址");printf("\t\t%-10s%-20s%-20s%-30s",p->code,p->name,p->callnumber,p->address);}elseprintf("\n\t\t您查询的姓名不存在!");fclose(fp);getchar();getchar();system("cls");}//按电话号码查询void found_callnumber(){int k=0;char callnumberkey[8];struct callmember * p;p=(struct callmember *)malloc(sizeof(struct callmember));printf("\n\t\t请输入要查询的电话号:");scanf("%s",callnumberkey);if((fp=fopen("通讯录.txt","r"))==NULL){printf("\n不能打开通讯录!\n");exit(0);}while(!feof(fp)) //当文件结束时,feof()返回值为1.{fscanf(fp,"%s%s%s%s\n",p->code,p->name,p->callnumber,p->address);if(!strcmp(callnumberkey,p->callnumber)){k=1;break; //k=1,说明已经查到}}if(k){printf("\n\t\t%-10s%-20s%-20s%-30s\n","编号","姓名","电话号码","地址");printf("\t\t%-10s%-20s%-20s%-30s",p->code,p->name,p->callnumber,p->address);}elseprintf("\n\t\t您查询的号码不存在!");fclose(fp);getchar();getchar();system("cls"); }/************************退出系统函数******************************/void quit() //调试合适 { printf("\t\t");exit(0);}。
c语言课程设计通讯录

c语言课程设计通讯录好的,我可以帮助您设计一个简单的通讯录程序。
下面是一个示例代码,实现了通讯录的基本功能,包括添加联系人、显示联系人列表、查找联系人、删除联系人和修改联系人信息。
c复制代码:#include <stdio.h>#include <stdlib.h>#include <string.h>#define MAX_CONTACTS 100 // 通讯录最大容量// 定义联系人结构体typedef struct {char name[20]; // 姓名char phone[15]; // 电话号码char email[30]; // 邮箱地址} Contact;// 定义通讯录结构体typedef struct {Contact contacts[MAX_CONTACTS]; // 联系人数组int size; // 当前联系人数量} AddressBook;// 添加联系人void add_contact(AddressBook *book) {if (book->size >= MAX_CONTACTS) {printf("通讯录已满,无法添加联系人。
\n"); return;}printf("请输入联系人姓名:");scanf("%s", book->contacts[book->size].name); printf("请输入联系人电话号码:");scanf("%s", book->contacts[book->size].phone); printf("请输入联系人邮箱地址:");scanf("%s", book->contacts[book->size].email); book->size++;printf("联系人已添加。
数据结构课程设计报告--通讯录的制作

山东理工大学计算机学院课程设计(数据结构)班级姓名学号指导教师二○一一年一月二十日课程设计任务书及成绩评定课题名称数据结构Ⅰ、题目的目的和要求: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)第一章概述课程设计是实践性教学中的一个重要环节,它以某一课程为基础,可以涉及和课程相关的各个方面,是一门独立于课程之外的特殊课程。
通讯录程序设计c

通讯录程序设计c通讯录程序设计是计算机编程中的一个常见项目,旨在通过编写代码来实现对联系人信息的存储、查询、修改和删除等功能。
以下是关于通讯录程序设计的详细内容。
一、设计目标通讯录程序的主要目标是提供一个用户界面,允许用户添加、查找、更新和删除联系人信息。
联系人信息通常包括姓名、电话号码、电子邮件地址、住址等。
二、需求分析1. 用户界面:简洁直观,易于操作。
2. 数据存储:能够持久化存储联系人信息。
3. 功能需求:- 添加联系人:允许用户输入并保存新的联系人信息。
- 查询联系人:根据姓名或其他信息搜索联系人。
- 修改联系人:允许用户更新已存在的联系人信息。
- 删除联系人:允许用户删除不再需要的联系人信息。
三、技术选型1. 编程语言:根据项目需求和团队熟悉度选择合适的编程语言,如C、Java、Python等。
2. 数据存储:可以使用文件系统、数据库或内存中的数据结构。
3. 开发环境:选择适合的IDE(集成开发环境)进行编码,如Visual Studio、Eclipse等。
四、系统设计1. 数据结构:设计合适的数据结构来存储联系人信息,如使用结构体或类。
2. 功能模块:- 输入模块:负责接收用户输入的联系人信息。
- 存储模块:负责将联系人信息存储到指定的存储介质。
- 查询模块:提供搜索功能,根据用户输入的关键字查找联系人。
- 修改模块:允许用户修改已存储的联系人信息。
- 删除模块:允许用户删除联系人信息。
五、界面设计1. 主界面:显示所有功能选项,如添加、查询、修改、删除。
2. 输入界面:当用户选择添加或修改联系人时,提供输入界面。
3. 查询结果界面:显示查询结果,可能包括联系人列表或详细信息。
六、实现步骤1. 定义数据结构:根据需求定义联系人的数据结构。
2. 编写功能模块:逐一实现添加、查询、修改和删除功能。
3. 集成测试:将各个模块集成到一起,进行系统测试。
4. 用户测试:让实际用户测试程序,收集反馈并进行优化。
c语言学生通讯录设计

下面是一个简单的C语言学生通讯录设计示例:#include <stdio.h>#include <string.h>struct student {char name[20];int age;char gender;char phone[15];};int main() {struct student students[100];int n, i;printf("请输入学生人数:");scanf("%d", &n);for (i = 0; i < n; i++) {printf("请输入第%d个学生的姓名、年龄、性别和电话号码:", i+1);scanf("%s %d %c %s", students[i].name, &students[i].age, &students[i].gender, students[i].phone);}printf("\n学生通讯录\n");printf("姓名\t年龄\t性别\t电话号码\n");for (i = 0; i < n; i++) {printf("%s\t%d\t%c\t%s\n", students[i].name, students[i].age, students[i].gender, students[i].phone);}return 0;}该程序定义了一个名为`student`的结构体,用于存储学生的姓名、年龄、性别和电话号码。
在主函数中,首先通过`scanf`函数从用户输入中读取学生人数`n`,然后使用一个循环来依次读取每个学生的信息,并将它们存储到`students`数组中。
最后,使用另一个循环将所有学生的信息打印出来。
该程序可以根据需要添加其他功能,例如根据姓名或电话号码查询学生信息、添加或删除学生信息等。
通讯录的制作c语言

通讯录的制作c语言一、前言通讯录是一个常见的管理工具,它可以帮助我们更好地组织和管理联系人信息。
在日常生活中,我们经常需要制作通讯录来保存联系人信息。
本文将介绍如何使用C语言来制作一个简单的通讯录程序。
二、需求分析在开始编写程序之前,我们需要先确定程序的需求。
通讯录程序需要具备以下功能:1. 添加联系人:输入联系人信息并保存到文件中。
2. 显示所有联系人:从文件中读取所有联系人信息并显示。
3. 查找联系人:根据姓名查找并显示相应的联系人信息。
4. 修改联系人:根据姓名修改相应的联系人信息。
5. 删除联系人:根据姓名删除相应的联系人信息。
三、程序设计1. 文件结构设计为了实现通讯录数据的持久化存储,我们可以将所有联系人信息保存在一个文件中。
文件结构可以设计为以下格式:struct Contact {char name[20]; // 姓名char phone[20]; // 电话号码char email[30]; // 邮箱地址};2. 界面设计为了方便用户操作,我们可以设计一个简单的命令行界面,通过输入数字选择相应功能。
界面可以设计为以下格式:*********************** 通讯录管理系统 ** 1. 添加联系人 ** 2. 显示所有联系人 ** 3. 查找联系人 ** 4. 修改联系人 ** 5. 删除联系人 ** 0. 退出系统 ***********************请选择功能:3. 功能实现根据需求分析,我们需要实现以下功能:1. 添加联系人添加联系人需要输入姓名、电话号码和邮箱地址,并将数据保存到文件中。
可以使用以下代码实现:void addContact() {struct Contact contact;printf("请输入姓名:");scanf("%s", );printf("请输入电话号码:");scanf("%s", contact.phone);printf("请输入邮箱地址:");scanf("%s", contact.email);FILE *fp = fopen("contacts.dat", "ab");fwrite(&contact, sizeof(struct Contact), 1, fp);fclose(fp);printf("添加成功!\n");}2. 显示所有联系人显示所有联系人需要从文件中读取数据并输出到屏幕上。
C语言课程设计通讯录

实现通讯录管理系统任务:自学C语言中有关链表及外部文件的内容,设计出通讯录管理系统。
要求如下所述:◆建立通讯录信息,信息至少包含编号、姓名、年龄、电话、通讯地址、电子邮箱等;;◆能够提供添加、删除和修改通讯录信息的功能;◆能够提供按不同方式查询的功能;如按姓名或年龄、电话等查询;◆将通讯录保存在文件中;◆能够按表格方式输出通讯录信息。
要求:①根据以上功能需求,自己定义单链表结点的存储结构;②为了保证所有的数据可以长期被使用,要求程序能将相关数据存储在外部数据文件中,具体数据格式和文件名、路径等自定;③提供友好的用户界面,方便用户操作。
设计目的随着信息社会的高速发展,人与人之间的联系越来越频繁,通讯方式越来越多样化,如何保证与朋友、同学、同事、领导、亲戚等之间的联系,并能方便快捷的查找、记录、修改其相关通讯信息。
仅靠以前单独的手工记录已远远不能满足当前的需要。
开发一个通讯录管理系统,借助计算机可以方便、快捷、灵活的管理个人的朋友及相关人员的通讯信息,了解友人相关信息,帮助与友人保持联络。
所以设计一个通讯录管理系统管理各人的通讯信息是是非必要的。
系统功能概要通讯录管理系统是基于链表设计而成的信息管理系统。
该系统通过对程序进行模块化,建立添加、显示、修改、查找和删除功能的函数,各函数中运用链表存储数据。
从主函数开始执行,调用各函数,并运用文件相关知识将信息存入磁盘中。
统功能模块图如图1图1系统功能模块图数据结构及原理(1)为存储通讯录信息,需定义一个结构体类型,成员包括姓名、编号、年龄、通讯地址、电话、电子邮箱等,结构体定义如下:struct student{char num[20];char name[10];char age[10];char tel[20];char adress[50];char email[20];struct student *next; /*建立通讯录信息结构体;*/};(2)以列表的形式输出文件。
原创c语言课程设计通讯录

原创C语言课程设计通讯录1. 引言通讯录是一种用于存储联系人信息的工具,对于个人和组织来说,它是必不可少的。
在本篇文章中,我将介绍一个基于C语言的通讯录设计方案。
通过这个课程设计项目,我们可以学习到如何使用C语言实现基本的数据处理和文件操作。
2. 功能需求分析在设计通讯录之前,我们需要明确所要实现的功能。
根据常见的通讯录需求,以下是我们的功能设计:•添加联系人信息:通过输入姓名、手机号码、邮箱等信息,将联系人添加到通讯录中。
•删除联系人信息:根据姓名或手机号码查找并删除指定联系人。
•修改联系人信息:根据姓名或手机号码查找并修改指定联系人的信息。
•查找联系人信息:根据姓名或手机号码查找并显示指定联系人的信息。
•显示全部联系人信息:将通讯录中的所有联系人信息按照一定的格式显示出来。
•保存通讯录:将通讯录中的联系人信息保存到文件中。
3. 数据结构设计在实现通讯录的功能之前,我们需要设计合适的数据结构来存储联系人信息。
考虑到联系人的信息较为复杂,并且需要支持动态增删改查的操作,我们选择使用链表来存储联系人信息。
每个节点包含姓名、手机号码、邮箱等信息,以及指向下一个节点的指针。
struct Contact {char name[50];char phone[20];char email[50];struct Contact *next;};4. 程序流程设计4.1 主菜单设计通讯录程序的主要界面是一个菜单,让用户选择不同的功能。
使用一个无限循环来保持程序一直运行,用户可以输入不同的指令来选择要执行的功能。
```c while (1) { // 显示菜单 printf(。
数据结构顺序表(电话通讯录)

数据结构用顺序表实现的电话通讯录(C语言)#include<stdio.h>#include<malloc.h>#include<math.h>#include<string.h>#define FALSE 0#define ERROR 0#define OK 1#define INFEASIBLE -1#define LIST_INIT_SIZE 10#define LIST_INCREMENT 5#define N 5typedefint Status;typedefstruct{ char name[10]; //姓名char num[15]; //号码}student;typedefstruct{student *elem; //存储空间基址int length; //当前长度intlistsize; //当前分配的存储空间(以sizeof(student)为单位)}Sqlist;Sqlist L; //定义全局变量L 为Sqllist类型Status ListInsert(Sqlist &L,inti,student e){//插入学生信息到顺序表L中int j;student *newbase;if(i<1||i>L.length+1) return ERROR; //i值不合法if(L.length>=L.listsize) //当前存储空间已满,增加分配{newbase=(student*)realloc(L.elem,(LIST_INIT_SIZE+LIST_INCREMENT)*(sizeof(st udent)));if(!newbase) //存储分配失败exit(OVERFLOW);L.elem=newbase; //新基址L.listsize+=LIST_INCREMENT; //增加存储容量}for(j=L.length;j>=i;j--)L.elem[j]=L.elem[j-1]; //插入位置及之后元素的右移L.elem[i-1]=e;L.length++;return OK;}voidInitList(Sqlist &L){//创建顺序表L.elem=(student *)malloc(LIST_INIT_SIZE*sizeof(student)); if(!L.elem) exit(OVERFLOW); //存储分配失败L.length=0; //空表长度L.listsize=LIST_INIT_SIZE; //初始存储容量}voidListTraverse(SqlistL,void(*vi)(student &)){//显示顺序表中的所有记录system("cls");printf("姓名电话号码 \n");student *p;int i;p=L.elem;for(i=1;i<L.length+1;i++)vi(*p++);printf(" 输入0:返回菜单请输入您的选择: ");}void print(student &a){//信息输出printf("%-10s%-8s",,a.num);printf("\n");}intListLength(Sqlist L) //返回顺序表的长度{ returnL.length; }intLocateElem(SqlistL,studente,Status(*compare)(student,stu dent)){//返回L中第一个与e满足关系compare的数据的位序,//若这样的数据不存在,则返回为0;int i=1; //i的初值为第1个元素的位序student *p=L.elem; //p的初值为第1个元素的存储位置while(i<=L.length&&!compare(*p++,e)) i++;if(i<=L.length)return i;elsereturn ERROR;}Status ListDelete(Sqlist &L,inti,student &e){//在顺序表L中删除第i个元素,并返回OKsystem("cls"); //清除屏幕int j;if(i<1||i>L.length) //i值不合法return ERROR;else{e=L.elem[i-1]; //p为删除元素的位置for(j=i;j<=L.length;j++) L.elem[j-1]=L.elem[j]; L.length--;return OK;}}void wrong(){//错误提示信息输出printf("you have inputed a wrong number");printf(" please input the number that is between 0 and 8"); }void Delete(Sqlist &L){//根据i删除顺序表中的记录student e;int j;printf("请输入要删除的位置(1≦i≦%d):",L.length+1);scanf("%d",&j);ListDelete(L,j,e);printf("已删除!");printf("输入0:返回菜单请输入您的选择: ");}voidScanIn(Sqlist &L){//信息输入system("cls");int i;student e;char a[2];printf("请输入信息:\n");do{student *p=L.elem;printf("请输入姓名:");scanf("%s",);printf("请输入电话号码:");scanf("%s",e.num);printf("请输入你要插入的位置(1≦i≦%d): ",L.length+1); scanf("%d",&i);ListInsert(L,i,e);jump:printf("是否继续输入信息(y/n)");scanf("%s",a);}while(strcmp(a,"y")==0||strcmp(a,"Y")==0);printf("输入0:返回菜单请输入您的选择: ");}studentstu[N]={{"小易",""},{"小二",""},{"小伞",""},{"小斯",""},{"小武",""}};intstuIntsertList(Sqlist &L){//将结构体数组stu中的记录插入到顺序表inti,j;for(i=0;i<N;i++)j=ListInsert(L,i+1,stu[i]);system("cls");if(j)printf("已成功加入到顺序表中\n");printf(" 输入0:返回菜单请输入您的选择: ");return OK;}void menu(){//菜单函数printf("\t\t *************************************\n"); printf("\t\t * 1. 导入记录 *\n"); printf("\t\t * 2. 输入记录 *\n"); printf("\t\t * 3. 删除记录 *\n"); printf("\t\t * 4. 显示所有记录 *\n"); printf("\t\t * 0. 返回本菜单 *\n"); printf("\t\t *************************************\n\n\n"); }//开始函数void start(){printf("\n");printf("\t\t\t**************************\n"); printf("\t\t\t* 欢迎使用 *\n"); printf("\t\t\t* 电话查询系统 *\n"); printf("\t\t\t**************************\n"); printf("\t\t\t* *\n"); printf("\t\t\t**************************\n"); printf("\n");menu();}int main(){int i=0,j;student e;Sqlistp,q;InitList(L);start();while(scanf("%d",&i)){switch(i){case 1: stuIntsertList(L); break; case 2: ScanIn(L);break;case 3: Delete(L);break;case 4: ListTraverse(L,print);break; case 0: menu();break;default:wrong();}}return 0;}。
c语言通讯录设计与实现

C 语言通讯录设计与实现本文主要介绍了如何使用 C 语言设计并实现一个通讯录程序,包括通讯录的存储、添加、查找、修改和删除等基本操作,同时考虑了数据的持久化存储问题。
下面是本店铺为大家精心编写的4篇《C 语言通讯录设计与实现》,供大家借鉴与参考,希望对大家有所帮助。
《C 语言通讯录设计与实现》篇1引言通讯录是一个常见的应用程序,用于存储和管理联系人的信息,包括姓名、电话号码、电子邮件地址等。
在现代智能手机中,通讯录已经成为了一个不可或缺的应用程序。
在本文中,我们将使用 C 语言来设计和实现一个简单的通讯录程序。
通讯录的设计通讯录程序需要存储联系人的信息,包括姓名和电话号码等。
我们可以使用结构体来存储联系人的信息,如下所示:```struct contact {char name[20];char phone[20];};```通讯录程序需要具有添加、查找、修改和删除联系人信息的功能。
我们可以使用数组来存储联系人的信息,并使用索引来标识每个联系人。
以下是通讯录程序的基本设计:```#define MAX_CONTACTS 100 // 通讯录最大容量struct contact contacts[MAX_CONTACTS]; // 通讯录数组int num_contacts; // 当前通讯录中的联系人数量// 添加联系人信息void add_contact(char *name, char *phone) {if (num_contacts == MAX_CONTACTS) {printf("通讯录已满,无法添加联系人");return;}contacts[num_contacts].name = name;strcpy(contacts[num_contacts].phone, phone);num_contacts++;}// 查找联系人信息void find_contact(char *name) {int i;for (i = 0; i < num_contacts; i++) {if (strcmp(contacts[i].name, name) == 0) {printf("找到联系人 %s,电话号码为 %s", name, contacts[i].phone);return;}}printf("未找到联系人 %s", name);}// 修改联系人信息void modify_contact(char *name, char *phone) { int i;for (i = 0; i < num_contacts; i++) {if (strcmp(contacts[i].name, name) == 0) {contacts[i].phone = phone;printf("修改联系人 %s的电话号码为 %s", name, phone);return;}}printf("未找到联系人 %s", name);}// 删除联系人信息void delete_contact(char *name) {int i, j;for (i = 0; i < num_contacts; i++) {if (strcmp(contacts[i].name, name) == 0) { for (j = i; j < num_contacts - 1; j++) { contacts[j] = contacts[j + 1];}num_contacts--;printf("删除联系人 %s成功", name);return;}}printf("未找到联系人 %s", name);}```通讯录的实现为了实现通讯录程序,我们需要将设计转化为代码。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
通讯录的设计一、设计思路:经过一个学期的程序设计学习,我逐渐了解了计算机的基本原理和c语言的基本常识,并可以逐渐自己来实现一些简单的程序任务。
此次程序设计我选择了通讯录设计,通过函数、结构体的定义以及一些基本操作运用,经过一个多月的编写、调试、测试,最终完成了该程序的设计。
以下为我的设计思路:首先,确定通讯录的功能,我初步设计了六项功能:输入(程序中对应enter())、删除(程序中对应delete())、显示通讯录(程序中对应list())、搜索(程序中对应search())、保存(程序中对应save())、装载(程序中对应load())。
其次,对于存储的数据结构,我则主要选择了一下几个方面的信息:姓名、性别年龄、籍贯、手机、下一个指针(用于链表的操作与实现)、当前指针(用于链表的操作与实现)。
二、程序源代码:#include<stdio.h>structaddress{ /*创建一个address结构*/charname[10]; /*姓名*/charsex[2]; /*性别*/charage[2]; /*年龄*/charnative[10]; /*籍贯*/chartelephone[12];/*手机*/structaddress*next;/*下一个入口的指针*/structaddress*prior;/*当前记录的指针*/}list_entry;structaddress*start;/*指向列表中第一个入口*/structaddress*last;/*指向列表中最后一个入口*/voidenter(),display(),search(),s ave(),load();menu_select(),list(),delet(),inp uts();main(){chars[20],choice;structaddress*info;start=last=NULL;/*列表长度清零*/for(;;){ /*列循环的一个用法*/switch(menu_select()){case1:enter(); /*输入1,进入enter()程序,是输入通讯录*/break;case2:delet(); /*输入2,进入delete()程序,是删除一个记录*/break;case3:list(); /*输入3,进入list()程序,是列表显示通信录*/break;case4:search(); /*输入4,进入search()程序,搜索一个街道*/break;case5:save(); /*输入5,保存列表到磁盘文件*/break;case6:load(); /*输入6,从磁盘文件读入列表*/break;case7:return(0);}}}/*选择一个选项*/menu_select(){chars[20];intc;printf("1.输入一个名字(直接回车则退出)\n");printf("2.删除一个名字\n");printf("3.列表显示\n");printf("4.搜索查询\n");printf("5.保存文件\n");printf("6.装入文件\n");printf("7.退出\n");do{printf("\n输入您的选择:");gets(s);c=atoi(s);}while(c<0||c>7);returnc;}/*输入名字和地址*/voidenter(){structaddress*info,*dls_sto re();for(;;){info=(structaddress*)malloc(si zeof(list_entry));if(!info){printf("\n内存溢出");return;}inputs("输入姓名:",info->name,10);if(!info->name[0])break;/*名字长度为0,停止输入*/inputs("输入性别:",info->sex,2);inputs("输入年龄:",info->age,2);inputs("输入籍贯:",info->native,10);inputs("输入电话:",info->telephone,12);start=dls_store(info,start);/*保存在第一个记录里*/} /*输入循环*/}inputs(prompt,s,count)/*这个函数用于输入长度为count的一个字符串,用于防止字符串长度超过它的空间,并提出警告*/char*prompt;char*s;intcount;{charp[255];do{printf(prompt);/*显示这个函数的字符串*/gets(p); /*从键盘获得255个输入*/if(strlen(p)>count)printf("n字符串超过长度!"); /*如果数组P 中的长度超过调用函数中的参数count,提示*/}while(strlen(p)>count);/*如果输入的字符串长度超过count,循环重新输入,否则退出,返回调用者*/strcpy(s,p); /*s是目标字符串,输出时字符串在s中*/return(0);}/*产生一个又链接表,当一个新元素插入到列表的开始时,一个指向第一个元素的指针被返回*/structaddress*dls_store(i,top) /*存贮顺序*/structaddress*i;/*新的元素*/structaddress*top;/*列表中的第一个元素*/ {structaddress*old,*p;if(last==NULL){ /*列表中的第一个元素*/i->next=NULL;i->prior=NULL;last=i;returni;}p=top; /*从列表的顶部开始*/old=NULL;while(p){if(strcmp(p->name,i->name)< 0){old=p;p=p->next;}else{if(p->prior){p->prior->next=i;i->next=p;i->prior=p->prior;p->prior=i;returntop;}i->next=p; /*新的第一个元素*/i->prior=NULL;p->prior=i;returni;}}old->next=i; /*设置未尾*/i->next=NULL;i->prior=old;last=i;returnstart;}/*从列表中删除一个元素*/delet(){structaddress*info,*find();chars[10];printf("输入姓名:");gets(s);info=find(s);if(info){if(start==info){start=info->next;if(start)start->prior=NULL;elselast=NULL;}else{info->prior->next=info->next;if(info!=last)info->next->prior=info->prior ;elselast=info->prior;}free(info); /*释放空间*/}return(0);}structaddress*find(name)/*一个查找姓名的结构*/ char*name;{structaddress*info;info=start;while(info){if(!strcmp(name,info->name))r eturninfo;info=info->next;/*获得下一个地址*/}printf("姓名没有发现!\n");returnNULL; /*没有发现姓名*/}list() /*列表*/{registerintt;structaddress*info;info=start;while(info){display(info);info=info->next;/*获得下一个地址*/}printf("\n\n");return(0);}voiddisplay(info) /*显示通信录*/structaddress*info;{printf("%s\n",info->name);printf("%s\n",info->sex);printf("%s\n",info->age);printf("%s\n",info->native);printf("%s\n",info->teleph one);printf("\n\n");}voidsearch() /*搜索一个名字*/{charname[10];structaddress*info,*find();printf("输入查找的名字!");gets(name);if(!(info=find(name)))printf ("没有找到!\n");elsedisplay(info);}voidsave() /*保存通信录*/{registerintt;structaddress*info;FILE*fp;if((fp=fopen("mlist","wb")) ==NULL){ /*打开文件名mlist 如果错误*/printf("没有找到文件.\n");exit(1);}printf("\n正在保存文件...\n");info=start;while(info){fwrite(info,sizeof(structaddress ),1,fp);info=info->next;/*获得下一个地址*/}fclose(fp);}voidload() /*打开一个文件*/{registerintt;structaddress*info,*temp= NULL;FILE*fp;if((fp=fopen("mlist","rb"))= =NULL){printf("打开文件失败...\n");exit(1);}while(start){info=start->next;free(info);start=info;}printf("\n正在读取文件...\n");start=(structaddress*)mall oc(sizeof(structaddress));if(!start){printf("存贮溢出...\n");return;}info=start;while(!feof(fp)){if(1!=fread(info,sizeof(structad dress),1,fp))break;/*为下一个分配空间*/info->next=(structaddress*)m alloc(sizeof(structaddress));if(!info->next){printf("存贮溢出...\n");return;}info->prior=temp;temp=info;info=info->next;}temp->next=NULL; /*最后一个输入*/last=temp;start->prior=NULL;fclose(fp); }三、调试结果调试结果初始状态如下图所示:以下介绍五大重点功能:步骤一:输入功能。