通讯录(C语言版)

合集下载

C语言通讯录

C语言通讯录

C语言通讯录#include <stdio.h>#include <stdlib.h>#include <string.h>#include <conio.h>#include <windows.h>#define N 50struct Telephone{char name[20];char addrass[20];char mail[20];char telephone[20];struct Telephone *next;}student[N];struct Node{char name[20];char addrass[20];char mail[20];char telephone[20];}Node[N];typedef struct Telephone TEL;TEL *head = NULL;void Showmenu(); /*菜单*/void menu2(); /*菜单2*/void menu3(); /*菜单3*/void Add(); /*添加条目*/void Print(); /*输出条目*/void Findname(); /*查找条目(按姓名)*/ void Findtelephone(); /*查找条目(按电话)*/ void Alter(); /*修改条目*/void Del(); /*删除信息(按姓名)*/ void Del1(); /*删除信息(按手机号)*/ void sort(); /*按姓名排序*/void Saveandfree(); /*保存到文件*/void Open(); /*打开文件*/main(){char ch;Open(); /*打开文件*/while(1){Showmenu(); /*显示菜单*/scanf(" %c",&ch);switch(ch){case '1': Add(); /*添加条目*/system("cls");break;case '2': Print(); /*输出条目*/break;case '3':system("cls"); /*查找条目1.按姓名*/menu2();break;case '4': /*输出删除后的结果*/system("cls");menu3();break;case '5': Alter(); /*修改信息*/system("cls");break;case '6': /*sort();*/system("cls");break;case '0': Saveandfree(); /*保存并释放内存*/exit(0); /*退出*/break;default:printf("选择错误!");break;}}}/*菜单*/void Showmenu(){system("color 2b");printf("\n\n\n\n\t***************************通讯录*************************\n");printf("\t- \t1.输入信息-\n");printf("\t- \t2.输出信息-\n");printf("\t- \t3.查找信息-\n");printf("\t- \t4.删除信息-\n");printf("\t- \t5.修改信息-\n");printf("\t- \t6.排序-\n");printf("\t- \t0.保存并退出! -\n");printf("\t**********************************************************\n");printf(" \t请选择:\n");}/*菜单2*/void menu2(){int c1;system("color 3d");printf("\n***************************通讯录*************************\n");printf("- \t1.按姓名查找-\n");printf("- \t2.按手机号查找-\n");printf("**********************************************************\n");printf(" \t请选择:\n");scanf("%d", &c1);switch(c1){case 1: Findname();getch();system("cls");break;case 2: Findtelephone();getch();system("cls");break;default:printf("选择错误!");}}/*菜单3*/void menu3(){int c2;system("color 1b");printf("\n***************************通讯录*************************\n");printf("- \t1.按姓姓名删除-\n");printf("- \t2.按手机号删除-\n");printf("**********************************************************\n");printf(" \t请选择:\n");scanf("%d", &c2);switch(c2){case 1: Del();getch();system("cls");break;case 2: Del1();getch();system("cls");break;default:printf("选择错误!\n");}}/*添加条目*/void Add(){TEL * p1 = NULL,* p2 = NULL;p1 = (TEL *) malloc(sizeof(TEL)); /*申请结点*/printf("请输入姓名:\n"); /*添加信息*/scanf("%s", p1->name);printf("请输入地址:\n");scanf("%s", p1->addrass);printf("请输入邮箱:\n");scanf("%s", p1->mail);printf("请输入手机:\n");scanf("%s", p1->telephone);p1 -> next = NULL; /*保存到链表*/ if (head == NULL){head = (TEL *) malloc(sizeof(TEL)); /*申请空间*/head -> next = p1;}else{for (p2 = head; p2 -> next != NULL; p2 = p2 -> next); /*找到结点尾*/p2->next=p1;}printf("信息已被成功添加!");}/*输出学生信息*/void Print(){TEL *p = NULL;if (head == NULL){printf("此通讯录内无记录,请添加后使用此功能!\n");return;}printf("*************************用户信息************************\n"); /*输出信息*/for (p = head -> next; p != NULL; p=p -> next){printf("姓名:\t%s\n",p->name);printf("地址:\t%s\n",p->addrass);printf("邮箱:\t%s\n",p->mail);printf("手机:\t%s\n",p->telephone);}printf("********************************************************\n");getch();system("cls");}/*查找信息1.按姓名*/void Findname(){TEL *p;int flag;char findname[20];printf("请输入您想查找的姓名:\n");scanf("%s", findname);printf("**************************通讯录***************************\n");flag = 0;for (p = head -> next;p != NULL;p = p -> next){if(strcmp(p -> name, findname) == 0){flag ++;printf("姓名:\t%s\n", p -> name);printf("地址:\t%s\n", p -> addrass);printf("邮箱:\t%s\n", p -> mail);printf("电话:\t%s\n", p -> telephone);}}if (flag == 0){printf("无此记录!");}}/*查找信息2、按电话*/void Findtelephone(){TEL *p;int flag;char findname[20];printf("请输入您想查找的电话:\n");scanf("%s", findname);printf("**************************查找结果***************************\n");flag = 0;for (p = head -> next;p != NULL;p = p -> next){if(strcmp(p -> telephone, findname) == 0){flag ++;printf("姓名:\t%s\n", p -> name);printf("地址:\t%s\n", p -> addrass);printf("邮箱:\t%s\n", p -> mail);printf("电话:\t%s\n", p -> telephone);}}if (flag == 0){printf("无此记录!!");}}/*修改信息*/void Alter(){TEL *p1(TEL *head);{struct Telephone *p1;char flag = 0;char name[20];printf("请输入您想修改的姓名:\n");scanf("%s", name);p1 = head;while (p1 != NULL){if(strcmp(p1 -> name,name) == 0){printf("请输入新的姓名:\n"); /*添加新信息*/scanf("%s", p1 -> name);printf("请输入新的地址:\n");scanf("%s", p1 -> addrass);printf("请输入新的邮箱地址:\n");scanf("%s", p1 -> mail);printf("请输入新的手机号:\n");scanf("%s", p1 -> telephone);flag = 1;}p1 = p1 -> next;}}printf("修改成功!");}/*删除信息*/void Del(){char findname[20]; /*先查找后删除*/ TEL *p = head, *pr = head;printf("请输入您要删除人的姓名:\n");scanf(" %s", findname);if (head == NULL){printf("No node!\n");return;}while ((strcmp(p -> name, findname) != 0) && p -> next != NULL){pr = p;p = p -> next;}if(strcmp(p -> name, findname) == 0){if(p == head)head = p -> next; /*删除头结点*/elsepr -> next = p -> next; /*删除中间或尾结点*/free(p);}elseprintf("没有您想要删除的信息\n");printf("删除成功!");Print();}/*按手机号删除*/void Del1(){char findname[20]; /*先查找后删除*/ TEL *p = head, *pr = head;printf("请输入您要删除人的电话:\n");scanf(" %s", findname);if (head == NULL){printf("No node!\n");return;}while ((strcmp(p -> telephone, findname) != 0) && p -> next != NULL){pr = p;p = p -> next;}if(strcmp(p -> telephone, findname) == 0){if(p == head)head = p -> next; /*删除头结点*/elsepr -> next = p -> next; /*删除中间或尾结点*/free(p);}elseprintf("没有您想要删除的信息\n");printf("删除成功!");Print();}/*保存链表信息到文件并释放内存空间*/void Saveandfree(){TEL *p = NULL;FILE *fp;char *Book = "people.txt";if(head == NULL){printf("\n无记录\n");return;}elsep = head -> next;if((fp = fopen(Book,"w+")) == NULL){printf("\n无法打开文件!\n");return;}while(p != NULL) /*保存信息*/{fprintf(fp, "%s %s %s %s ", p -> name,p -> addrass, p -> mail, p -> telephone);p = p -> next;}printf("保存成功!");fclose(fp);/*释放链表空间*/for(; head -> next != NULL; ){p = head -> next;head -> next = head -> next -> next;free(p);}free(head);}/*文件信息输出到链表*/void Open(){FILE *fp;TEL *p1 = NULL, *p2 = NULL, *temp = NULL;if((fp = fopen("people.txt", "r+")) == NULL){printf("\n*************************通讯录************************\n");return;}head = (TEL *) malloc(sizeof(TEL));head -> next = NULL;temp = p2 = head;while(! feof(fp)) /*循环读取*/{p1 = (TEL *) malloc(sizeof(TEL));temp = p2;p2 -> next = p1;p2 = p1;fscanf(fp, "%s%s%s%s", p1 -> name, p1 -> addrass, p1 -> mail, p1 -> telephone);}temp -> next = NULL;fclose(fp); /*关闭文件*/}/*按姓名排序*//*void sort(){TEL *p1, *p2, *temp;temp = (TEL *)malloc(sizeof(TEL));p1 = head;for (;p1 -> next != NULL; p1 = p1 -> next){p2 = p1 -> next;for (;p2 -> next != NULL; p2 = p2 -> next){if (strcmp(p1 -> name, p2 -> name) > 0){strcpy(p1 -> name, temp -> name);strcpy(p1 -> addrass, temp -> addrass);strcpy(p1 -> mail, temp -> mail);strcpy(p1 -> telephone, temp -> telephone);strcpy(p2 -> name, p1 -> name);strcpy(p2 -> addrass, p1 -> addrass);strcpy(p2 -> mail, p1 -> mail);strcpy(p2 -> telephone, p1 -> telephone);strcpy(temp -> name, p2 -> name);strcpy(temp -> addrass, p2 -> addrass);strcpy(temp -> mail, p2 -> mail);strcpy(temp -> telephone, p2 -> telephone);}if (p2 -> next == NULL && (strcmp(p1 -> name, p2 -> name) > 0)){strcpy(p1 -> name, temp -> name);strcpy(p1 -> addrass, temp -> addrass);strcpy(p1 -> mail, temp -> mail);strcpy(p1 -> telephone, temp -> telephone);strcpy(p2 -> name, p1 -> name);strcpy(p2 -> addrass, p1 -> addrass);strcpy(p2 -> mail, p1 -> mail);strcpy(p2 -> telephone, p1 -> telephone);strcpy(temp -> name, p2 -> name);strcpy(temp -> addrass, p2 -> addrass);strcpy(temp -> mail, p2 -> mail);strcpy(temp -> telephone, p2 -> telephone);}}}printf("\n*************************排序后************************\n");Print();getch();}*/排序未实现。

通讯录c语言程序设计代码

通讯录c语言程序设计代码

通讯录c语言程序设计代码#include<stdio.h>。

#include<string.h>。

//通讯录结构体。

typedef struct addressbook。

char name[20];。

long tel;。

char addr[20];。

}Address;。

//把Address结构体强转成Address指针。

typedef Address *Addressbook;。

//查找函数。

Addressbook find (Addressbook book,int count)。

char findName[20];。

int flag=0;。

Addressbook p;。

printf("请输入查找的姓名:");。

scanf("%s",findName);。

for(p=book;p<book+count;p++)。

if(strcmp(findName,p->name)==0)。

flag=1;。

}。

}。

if(flag==0)。

printf("没有找到%s\n",findName);。

return book;。

}。

else。

return p;。

}。

}。

//添加函数。

void add (Addressbook book,int *count)。

printf("请输入需要增加的通讯录内容:\n");。

printf("姓名:");。

scanf("%s",(book+*count)->name);。

scanf("%ld",&(book+*count)->tel);。

printf("地址:");。

scanf("%s",(book+*count)->addr);。

printf("添加成功\n");。

通讯录C语言程序设计

通讯录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语言)设计说明概要第一篇:全功能版通讯录(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语言编程-通讯录

C语言编程-通讯录#include<string.h> /*字符函数和字符串函数*/#include<conio.h> /*字符模式函数(调用getch()函数)*/#include<stdio.h> /*输入输出函数*/ int i;struct friend /*电子通讯录结构定义*/{char num[5]; /*编号*/char name[11]; /*名字*/char sex[2]; /*性别*/char phone[12]; /*电话*/char address[26]; /*地址*/char post_num[11]; /*邮编*/}friends[50];FILE *fp;void Data_load() /*数据载入函数*/{ int j;fp=fopen("friend.txt","r+"); /*打开文件friend.txt*/if(fp==NULL) /*判断是否存在friend.txt,如果不存在则创建*/ { fp=fopen("friend.txt","w");i=0;}else{ for(i=0;i<50;i++){ j=fgetc(fp);if(j==EOF)/*判断是否到了文件尾*/return;fseek(fp,i*sizeof(struct friend),0);fread(&friends[i],sizeof(struct friend),1,fp); /*从文件中读取一条记录*/}}}void Menu_Select() /*显示菜单界面*/{printf(" \n");printf(" \n");printf(" \n");printf(" Address Book Management System \n");printf(" \n");printf(" ======================\n"); printf(" 1.Address book data Entry\n"); /*数据输入*/printf(" 2.Address Book data Show\n"); /*数据显示*/printf(" 3.Address Book data Search\n"); /*数据查找*/printf(" 4.Address Book data Alter\n"); /*数据修改*/printf(" 5.Address Book data Insert\n"); /*数据插入*/printf(" 6.Address Book data Delete\n");/*数据删除*/printf(" 7.Address Book data Save\n"); /*数据保存*/printf(" 0.Exit\n"); /*退出*/printf(" ======================\n"); printf( " Please chioce 0-7 \n\n");}int Data_check(int k,char ID[5]) /*检查通讯录中是否存在相同ID或ID输入格式错误*/{int j;if(ID[0]=='0')k=1;for(j=0;ID[j]!='\0';j++){if(ID[j]>'9'||ID[j]<'0')k++;}for(j=0;j<i+1;j++){if(strcmp(ID,friends[j].num)==0)k++;}return k;}void Data_Input() /*数据输入函数*/{char yes_no='1';char ID[5];int k=0;if(i>=50)printf("\n\n Storage full!\n\n");if(i<50){printf("***************************************** *******************************\n");printf(" ******************* Add Address Book Information ***********************\n");printf("***************************************** *******************************\n");printf("***************************************** *******************************\n");}for(;i<50;i++){do{switch(yes_no){case '1': /*如果输入为'1',则进行数据输入*/printf(" ****** No.(4) Name(10) Sex(M/F) Phone(11) Address(25) Zip_Code(10)*******\n");scanf("%s%s%s%s%s%s",ID,friends[i].name,f riends[i].sex,friends[i].phone,friends[i].address,f riends[i].post_num);Data_check(k,ID);while(Data_check(k,ID)>0) /*检查输入的ID是否已存在,如果存在重新输入*/{printf("The No. already exists Or The No. isn't correct, please re-enter\n");scanf("%s",ID);Data_check(k,ID);}strcpy(friends[i].num,ID);if(i<49){printf("\n\n Whether to be continue? Y(1)/N(0) \n\n");yes_no=getch();}if(i>=49)printf("\n\nStorage full!\n\n");break;case '0':break;default:yes_no=getch();}}while(yes_no!='1'&&yes_no!='0'); /*如果输入的不是'1'或'0'则重新输入*/if(yes_no=='0')/*如果输入'0'则退出输入函数*/{i++;break;}}}int The_Size(char a[],char b[]) /*比较两个ID的大小*/{int j,t;if((j=strlen(a)-strlen(b))>0) t=1;if((j=strlen(a)-strlen(b))<0) t=-1;if((j=strlen(a)-strlen(b))==0){if(strcmp(a,b)>0) t=1;if(strcmp(a,b)<0) t=-1;if(strcmp(a,b)==0) t=0;}return t;}void Data_Show() /*数据输出函数*/{ int j,k;char m;struct friend t;printf("***************************************** ***************************\n");printf(" No. Name Sex Phone Address Zip_Code \n");printf("***************************************** ***************************\n");for(j=0;j<i-1;j++)/*对数据进行排序*/{ for(k=0;k<i-1-j;k++){if(The_Size(friends[k].num,friends[k+1].num)= =1){t=friends[k];friends[k]=friends[k+1];friends[k+1]=t;}}}for(j=0;j<i;j++)/*数据输出*/{printf("%4s %10s %4s %11s %20s %10s\n",fri ends[j].num,friends[j].name,friends[j].sex,friend s[j].phone,friends[j].address,friends[j].post_num );m=getch();if(m==' ')break;}printf("\n\n There are %d data in the book .\n\n",i);}void Data_Search() /*数据查找函数*/{char k;int j,a,b;char ID[5];char NAME[11];printf("Search by No. : 1\n");printf("Search by name : 2\n");k=getch();switch(k){case '1': /*按ID查找*/a=0;printf("\n\n Please enter the No.\n\n");scanf("%s",ID);for(j=0;j<i+1;j++){if(strcmp(ID,friends[j].num)==0){a++;printf(" No. Name Sex Phone Address Zip_Code \n");printf("%4s %10s %4s %11s %20s %10s\n",fri ends[j].num,friends[j].name,friends[j].sex,friend s[j].phone,friends[j].address,friends[j].post_num );}}if(a==0)printf(" Do not have to find the No.!\n\n");break;case '2': /*按姓名查找*/b=0;printf("\n\n Please enter the Name\n\n");scanf("%s",NAME);for(j=0;j<i+1;j++){if(strcmp(NAME,friends[j].name)==0){b++;printf(" No. Name Sex Phone Address Zip_Code \n");printf("%4s %10s %4s %11s %20s %10s\n",fri ends[j].num,friends[j].name,friends[j].sex,friend s[j].phone,friends[j].address,friends[j].post_num );}}if(b==0)printf(" Do not have to find the Name!\n\n");break;default:printf("\n\n Error!\n");break;}}void Data_Insert() /*数据插入函数*/{ if(i>=50)printf("\n\n Storage full!\n\n");if(i<50){char ID[5];int k=0;printf("Please enter the No. that you want to insert.\n");scanf("%s",ID);Data_check(k,ID);printf("%d",Data_check(k,ID)); /*检查所需插入的ID是否已存在,如果存在重新输入*/while(Data_check(k,ID)>0){printf("The No. already exists Or The No. isn't correct, please re-enter\n");scanf("%s",ID);Data_check(k,ID);}strcpy(friends[i].num,ID);/*插入数据*/printf(" ****** Name(10) Sex(M/F) Phone(11) Address(30) Zip_Code(10)*******\n");scanf("%s%s%s%s%s",friends[i].name,friends [i].sex,friends[i].phone,friends[i].address,friends [i].post_num);i++;}}void Data_Delete() /*数据删除函数*/{int k,t=0;char ID[5];printf("\n\n Please enter the No. need to be deleted\n\n");scanf("%s",ID);for(k=0;k<i;k++){if(strcmp(friends[k].num,ID)==0){t++;break;}}if(t==0)printf("\n\n The No. does not Exist!\n\n");if(t>0){for(;k<i;k++)/*删除位置前的元素顺序前移*/{friends[k]=friends[k+1];}printf("\n\n Delete success!\n\n");i=i-1;}}void Data_Alter() /*修改函数*/{int k,t=0;char ID[5];printf("\n\n Please enter the No. to be Amended\n\n");scanf("%s",ID);for(k=0;k<i;k++){if(strcmp(friends[k].num,ID)==0){t++;break;}}if(t==0)printf("\n\n The No. does not Exist!\n\n");if(t>0){strcpy(friends[k].num,ID);printf(" ****** Name(10) Sex(M/F) Phone(11) Address(30) Zip_Code(10)*******\n");scanf("%s%s%s%s%s",friends[k].name,friend s[k].sex,friends[k].phone,friends[k].address,frie nds[k].post_num);printf("\n\n Alter Success!\n\n");}}void Data_Save() /*数据保存函数*/{int j;fp=fopen("friend.txt","w");for(j=0;j<=i-1;j++){fwrite(&friends[j],sizeof(struct friend),1,fp);}printf("\n\n Save Success!\n\n");}void Exit() /*退出函数*/{char flag;printf(" Save or Not? (Y/N)\n"); /*判断是否保存*/do{flag=getch();switch(flag){case 'Y': /*保存*/Data_Save();break;case 'y': /*保存*/Data_Save();break;case 'N':break;case 'n':break;}}while(flag!='Y'&&flag!='y'&&flag!=' N'&&flag!='n');}void main(){ char choose,yes_no;Data_load();do{Menu_Select();choose=getch();switch(choose){case '1': Data_Input(); break; /*输入*/case '2': Data_Show(); break; /*显示*/case '3': Data_Search(); break; /*查找*/case '4': Data_Alter(); break; /*修改*/case '5': Data_Insert(); break; /*插入*/case '6': Data_Delete(); break; /*删除*/case '7': Data_Save(); break; /*保存*/case '0': Exit(); break; /*退出*/default : printf(" Error!\n");}if(choose=='0')break;printf(" Would you like to be continue? (Y/N)\n");do{yes_no=getch();}while(yes_no!='Y'&&yes_no!='y'&&yes _no!='N'&&yes_no!='n');if(yes_no=='N'||yes_no=='n'){Exit();break;}}while(yes_no!='Y'||yes_no!='y');。

通讯录管理系统(C语言)

通讯录管理系统(C语言)

通讯录管理系统(C语⾔)/** 对通讯录进⾏插⼊、删除、排序、查找、单个显⽰功能*/#include <stdio.h>#include <malloc.h>#include <string.h>#include <stdlib.h>int n;typedef struct _Address_List{char name[30]; //名字char work[30]; //职业char handset[20]; //⼿机号码char email[30]; //电⼦邮件char address[30]; //地址struct _Address_List *next;}address_List;#define LEN sizeof(address_List)address_List *Release(address_List *head);//创建⼀个通讯录address_List *Create(void){address_List *head,*p1,*p2;char name[30];n = 0;p1 = (address_List *)malloc(LEN);p2 = p1;printf("请输⼊通讯录的内容!\n姓名输⼊为0时表⽰创建完毕!\n");printf("请输⼊姓名:");gets(name);if(strcmp(name,"0")!=0){strcpy(p1->name,name);printf("请输⼊职业:");gets(p1->work);printf("请输⼊⼿机:");gets(p1->handset);printf("请输⼊电⼦邮件:");gets(p1->email);printf("请输⼊通讯地址:");gets(p1->address);head = NULL;while(1){n = n+1;if(n == 1){head = p1;}else{p2->next = p1;}p2 = p1;printf("请输⼊姓名:");gets(name);if(strcmp(name,"0") == 0){break;}else{p1 = (address_List *)malloc(LEN);strcpy(p1->name,name);printf("请输⼊职业:");gets(p1->work);printf("请输⼊⼿机:");gets(p1->handset);printf("请输⼊电⼦邮件:");gets(p1->email);printf("请输⼊通讯地址:");gets(p1->address);}}return head;}else{return0;}}//打印整个通讯录void print(address_List *head){address_List *p;if(head != NULL){p = head;printf("本通讯录现在共有%d⼈;\n",n);printf("---姓名---------职业----------⼿机--------Email-------------通讯地址\n");printf("====================================================================\n");do{printf("=%s\t\t",p->name);printf("=%s\t\t",p->work);printf("=%s\t\t",p->handset);printf("=%s\t\t",p->email);printf("=%s\n",p->address);p = p->next;}while(p != NULL);printf("==================================================================\n"); }else{printf("通讯录为空,⽆法输出!\n");}}//在通讯录插⼊address_List *insert(address_List *head){address_List *p0,*p1,*p2;char name[20];p1 = head;printf("请输⼊增加的内容:\n");printf("请输⼊姓名:");gets(name);if(strcpy(name,"0") == 0){printf("姓名不能为0,增加失败!\n");return head;}else{p0 = (address_List *)malloc(LEN);strcpy(p0->name,name);printf("请输⼊职业:");gets(p1->work);printf("请输⼊⼿机:");gets(p1->handset);printf("请输⼊电⼦邮件:");gets(p1->email);printf("请输⼊通讯地址:");gets(p1->address);n = n+1;if(head == NULL){head = p0;p0->next = NULL;return head;}else{while(strcmp(p0->name,p1->name) > 0 && (p1->next != NULL)){p2 = p1;p1 = p1->next;}if(strcmp(p0->name,p1->name) <0 || strcmp(p0->name,p1->name) == 0){if(head == p1){head = p0;}else{}p0->next = p1;}else{p1->next = p0;p0->next = NULL;}return head;}}}//删除通讯录中某个⼈address_List *delete_txl(address_List *head){address_List *p,*q;char name[30];if(head == NULL){printf("通讯录为空,⽆法删除!\n");return head;}p = head;printf("请输⼊需要删除的⼈姓名:");gets(name);if(strcmp(head->name,name) == 0){head = head->next;free(p);printf("删除操作成功!\n");return head;}else{q = head;p = head->next;while(p != NULL){if(strcmp(p->name,name) == 0){q->next = p->next;free(p);printf("删除操作成功!\n");return head;}p = p->next;q = q->next;}}}//显⽰通讯录中某个⼈address_List *display(address_List *head){address_List *p1,*p2;char name[30];int m;if(head == NULL){printf("通讯录为空,⽆法显⽰!\n");return head;}p1 = head;m = 0;printf("请输⼊要显⽰⼈的姓名:");gets(name);while(p1 != NULL){while(strcmp(p1->name,name) != 0 && p1->next != NULL){p2 = p1;p1 = p1->next;}if(strcmp(p1->name,name) == 0){m++;printf("%s的通讯内容如下:\n",name);printf("---姓名---------职业----------⼿机--------Email-------------通讯地址\n");printf("====================================================================\n"); printf("=%s=\t\t",p1->name);printf("=%s=\t\t",p1->work);printf("=%s=\t\t",p1->handset);printf("=%s=\n",p1->address);printf("====================================================================\n"); }p1 = p1->next;}if(m == 0){printf("此⼈不在通讯录中!\n");}return head;}//对通讯录进⾏排序操作address_List *Sort(address_List *head){address_List *p1,*p2;int i,j;typedef struct _Address_List1{char name[30]; //名字char work[30]; //职业char handset[20]; //⼿机号码char email[30]; //电⼦邮件char address[30]; //地址}address_List1;address_List1 Sort[200];address_List1 temp;if(head == NULL){printf("通讯录为空,⽆法排序!\n");return head;}p1 = head;for(i = 0;i < n,p1 != NULL; i++){strcpy(Sort[i].name,p1->name);strcpy(Sort[i].work,p1->work);strcpy(Sort[i].handset,p1->handset);strcpy(Sort[i].email,p1->email);strcpy(Sort[i].address,p1->address);p2 = p1;p1 = p1->next;}head = Release(head);for(j = 0; j < n-1; j++){for(i = j+1; i < n; i++){if(strcmp(Sort[i].name,Sort[j].name) < 0){Sort[i] = temp;temp = Sort[j];Sort[j] = temp;}}}p1 = (address_List *)malloc(LEN);p2 = p1;strcpy(p1->name,Sort[0].name);strcpy(p1->work,Sort[0].work);strcpy(p1->handset,Sort[0].handset);strcpy(p1->email,Sort[0].email);strcpy(p1->address,Sort[0].address);head = p1;for(i = 1; i < n; i++){p1 = (address_List *)malloc(LEN);strcpy(p1->name,Sort[i].name);strcpy(p1->work,Sort[i].work);strcpy(p1->handset,Sort[i].handset);strcpy(p1->email,Sort[i].email);strcpy(p1->address,Sort[i].address);p2->next = p1;p2 = p1;}p2->next = NULL;printf("按姓名排序后的结果是:\n");print(head);return head;}address_List *Search_name(address_List *head){address_List *p1,*p2;int m;char name[30];if(head == NULL){printf("通讯录为空,⽆法查找!\n");return head;}p1 = head;printf("**************************\n");printf("****请输⼊要查找的姓名:**\n");printf("**************************\n");m = 0;gets(name);while(p1 != NULL){while(strcmp(p1->name,name) != 0 && (p1->next != NULL)){p2 = p1;p1 = p1->next;}if(strcmp(p1->name,name) == 0){m++;printf("你查找的内容是:\n");printf("++++++++++++++++++++++++++++++++\n");printf("++ %s\t%s\t%s\t%s\t%s ++",p1->name,p1->work,p1->handset,p1->email,p1->address); printf("++++++++++++++++++++++++++++++++\n");}p1 = p1->next;if(m == 0){printf("你查找的姓名不在通讯录中!\n");}break;}return head;}//释放整个通讯录address_List *Release(address_List *head){address_List *p;while(head != NULL){p = head;head = head->next;free(p);}return head;}//保存(以⽂件的形式保存)void save(address_List *head){FILE *fp;address_List *p;char Filename[30]; //保存后的⽂件名if(head ==NULL){printf("待保存的通讯录为空,⽆法保存!\n");return ;}printf("请输⼊保存后的⽂件名:");gets(Filename);fp = fopen("Filename.txt","w");if(fp == NULL){printf("⽆法打开⽂件!\n");return ;}p = head;fprintf(fp,"姓名\t职业\t⼿机\tEmail\t地址\n");for(;p != NULL;){fprintf(fp,"姓名\t职业\t⼿机\tEmail\t地址",p->name,p->work,p->handset,p->email,p->address);p = p->next;}printf("保存完毕!\n");}//⽂件读出函数address_List *Load(address_List *head){FILE *fp;char Filename[30];address_List *p1,*p2;printf("请输⼊要输出的⽂件名:");gets(Filename);fp = fopen("Filename.txt","r");if(fp == NULL){printf("此通讯录不存在,⽆法输出!\n");return head;}else{head = Release(head);}p1 = (address_List *)malloc(LEN);fscanf(fp,"%s%s%s%s%s",p1->name,p1->work,p1->handset,p1->email,p1->address);if(feof(fp) != 0){printf("⽂件为空,⽆法打开!\n");return head;}else{rewind(fp);p2 = p1;head = p1;n = 0;while(feof(fp) == 0){fscanf(fp,"%s%s%s%s%s",p1->name,p1->work,p1->handset,p1->email,p1->address);if(feof(fp) != 0){break;}p2->next = p1;p2 = p1;p1 = (address_List *)malloc(LEN);n = n+1;}p2->next = NULL;p1 = head;head = head->next;n = n-1;free(p1);print(head);printf("打开完毕!\n");return head;}fclose(fp);}//菜单选择函数address_List *menu(address_List *head){char num[10];while(1){printf("*******************************\n");printf("*****1. 姓名查找 **********\n");printf("*****2. 单个显⽰ **********\n");printf("*****3. 增加 **********\n");printf("*****4. 退出 **********\n");printf("*******************************\n");printf("请输⼊你选择的操作:");gets(num);switch(*num){case'1':{head = Search_name(head);print(head);}break;case'2':{head = display(head);break;case'3':{head = insert(head);print(head);}break;case'4':return head;default:printf("操作有误,此项不存在!\n");break;}if(strcmp(num,"6") == 0){break;}}return head;}//主函数int main(void){address_List *head = NULL;char num[10];printf("*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*\n"); printf("*=*=*=*=*=*=*= 程序说明 *=*=*=*=*=*=*\n");printf("*=*=*=*=*=*=*= 请及时保存创建完毕的通讯录内容 *=*=*=*=*=*=*\n");printf("*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*\n"); while(1){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("请输⼊你选择的操作:");gets(num);switch(*num){case'1':{if(head == NULL){head = Create();print(head);}else{head = Release(head);head = Create();print(head);}}break;case'2':{head = Sort(head);}break;case'3':{head = menu(head);}break;case'4':{save(head);print(head);}break;case'5':{head = Load(head);}break;case'6':{print(head);}break;case'7':{head = Release(head);}break;default:{printf("操作有误,此项不存在!\n"); }break;}if(strcmp(num,"7") == 0){break;}}return0;}。

c语言课程设计通讯录

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("联系人已添加。

C语言简单通讯录

C语言简单通讯录

C语言简单通讯录#include<stdio.h>#include<stdlib.h>#include<conio.h>#include<string.h>#include<windows.h>#define LEN sizeof(struct student)#define TITLE_T "╔═══════════════╗\n"#define NAME "║※姓名: 号码: ║\n"#define GESHI "║※%-15s %-11s ║\n"#define BOTTOM_B "╚═══════════════╝\n"#define NEIRONG stu[i].name,stu[i].numstruct student //定义通讯录结构体{char name[15]; //姓名char num[12]; //号码};struct student stu[50]; //定义结构体数组void in(); //添加联系人void show(); //显示联系人void order(); //按字符排序void del(); //删除联系人void modify(); //修改联系人void menu(); //主菜单void total(); //计算总人数void search(); //查找联系人void main() //主函数{system("title 某某某通讯录"); //设置cmd窗口标题system("mode con cols=85 lines=35");break;case 5:modify();break;case 6:total();break;default:printf("输入编码有误!正在返回...");Sleep(3000);break;}menu(); //执行完功能再次显示菜单界面scanf("%d",&n);}}void menu() //自定义函数实现菜单功能{system("cls");system("date /t");system("time /t");printf("\n\n\n\n\n");printf("\t\t╔══════════某某某通讯录══════════╗\n");printf("\t\t║※0. 退出║\n");printf("\t\t║※ 1. 添加║\n");printf("\t\t║※ 2. 查看║\n");printf("\t\t║※ 3. 查找║\n");printf("\t\t║※ 4. 删除║\n");printf("\t\t║※ 5. 修改║\n");printf("\t\t║※ 6. 联系人总数║\n");printf("\t\t╚══════════════════════════╝\n\n");printf("\t\t请选择(0-6):");}void in() //添加联系人{int i,m=0; //m是记录的条数char ch[2];FILE *fp; //定义文件指针if((fp=fopen("data","ab+"))==NULL) //打开指定文件{printf("打开文件失败!正在返回...");Sleep(3000);return;}while(!feof(fp)){if(fread(&stu[m] ,LEN,1,fp)==1)m++;//统计当前记录条数}fclose(fp);if(m==0)printf("当前无记录!\n");else{system("cls");printf(TITLE_T);printf(NAME);for(i=0;i<m;i++)printf(GESHI,NEIRONG);//将信息按指定格式输出printf(BOTTOM_B);}if((fp=fopen("data","wb"))==NULL) //以只写二进制方式打开文件{printf("打开文件失败!正在返回...");Sleep(3000);return;}for(i=0;i<m;i++)fwrite(&stu[i] ,LEN,1,fp); //如果原来有记录,就将记录写入到磁盘文件中printf("是否添加?(y/n):");scanf("%s",ch);while(strcmp(ch,"Y")==0||strcmp(ch,"y")==0) //判断是否要添加联系人{back: printf("请输入联系人姓名:");scanf("%s",&stu[m].name); //输入姓名for(i=0;i<m;i++)if(strcmp(stu[i].name,stu[m].name)==0){printf("您输入的联系人已存在!\n");goto back;}printf("请输入联系人号码:");scanf("%s",stu[m].num);if(fwrite(&stu[m],LEN,1,fp)!=1) //将新录入的信息写入指定的磁盘文件{printf("保存'%s'失败!是否继续?(y/n):",stu[m].name);scanf("%s",ch);continue;}else{printf("添加'%s'成功!\n",stu[m].name);m++;}printf("是否继续?(y/n):"); //询问是否继续scanf("%s",ch);}printf("正在返回...");fclose(fp);order();return;}void show() //显示联系人{FILE *fp;int i,m=0;if((fp=fopen("data","ab+"))==NULL) //打开指定文件{printf("打开文件失败!正在返回...");Sleep(3000);return;}while(!feof(fp)){if(fread(&stu[m] ,LEN,1,fp)==1)m++;}fclose(fp);if(m>0){printf(TITLE_T);printf(NAME);for(i=0;i<m;i++)printf(GESHI,NEIRONG);//将信息按指定格式输出printf(BOTTOM_B);}elseprintf("当前无记录!");printf("按任意键返回...");getch();}void del() //删除联系人函数{FILE *fp;int i,j,m=0;char sname[15];char ch[2];if((fp=fopen("data","ab+"))==NULL){printf("不能打开文件,正在返回...\n");return;}while(!feof(fp))if(fread(&stu[m],LEN,1,fp)==1)m++;fclose(fp);if(m==0){printf("当前无记录!正在返回...\n");Sleep(3000);return;}printf("请输入联系人姓名:");scanf("%s",sname);for(i=0;i<m;i++)if(strcmp(sname,stu[i].name)==0) break;if(i==m){printf("找不到'%s'!正在返回...",sname);return;}printf("已找到'%s',是否删除?(y/n)",sname);scanf("%s",ch);if(strcmp(ch,"Y")==0||strcmp(ch,"y")==0) //判断是否要进行删除{for(j=i;j<m;j++)stu[j]=stu[j+1];//将后一个记录移到前一个记录的位置m--;//记录的总个数减1printf("删除'%s'成功!\n",sname);}if((fp=fopen("data","wb"))==NULL){printf("打开文件失败!正在返回...\n");Sleep(3000);return;}for(j=0;j<m;j++)//将更改后的记录重新写入指定的磁盘文件中if(fwrite(&stu[j] ,LEN,1,fp)!=1){printf("保存失败!正在返回...\n");Sleep(3000);}fclose(fp);show();}void search() //自定义查找函数{FILE *fp;int i,m=0;char sname[15];char ch[2];if((fp=fopen("data","ab+"))==NULL){printf("打开文件失败!正在返回...\n");Sleep(3000);return;}while(!feof(fp))if(fread(&stu[m],LEN,1,fp)==1)m++;fclose(fp);if(m==0){printf("当前无记录!正在返回...\n");Sleep(3000);return;}back1: printf("请输入联系人姓名:");scanf("%s",&sname);for(i=0;i<m;i++)if(strcmp(sname,stu[i].name)==0) //查找输入的号码是否在记录中{printf("已找到'%s',是否显示?(y/n)",sname);scanf("%s",ch);if(strcmp(ch,"Y")==0||strcmp(ch,"y")==0){printf(TITLE_T);printf(NAME);printf(GESHI,NEIRONG); //将查找出的结果按指定格式输出printf(BOTTOM_B);}else{printf("正在返回...");Sleep(3000);return;}}if(i==m+1){printf("找不到'%s',是否继续?(y/n):",sname); //未找到要查找的信息scanf("%s",ch);while(strcmp(ch,"Y")==0||strcmp(ch,"y")==0) //判断是否要继续查找联系人goto back1;printf("正在返回...");Sleep(3000);return;}printf("按任意键返回...\n");getch();}void modify(){ FILE *fp;int i,j,m=0;char sname[15];if((fp=fopen("data","ab+"))==NULL){printf("打开文件失败!正在返回...\n");Sleep(3000);return;while(!feof(fp))if(fread(&stu[m],LEN,1,fp)==1)m++;fclose(fp);if(m==0){printf("当前无记录!正在返回...\n");Sleep(3000);return;}printf("请输入联系人姓名:\n");scanf("%s",&sname);for(i=0;i<m;i++)if(strcmp(sname,stu[i].name)==0) //检索记录中是否有要修改的信息break;if(i<m){printf("已找到'%s',请修改!\n",sname);printf("请输入联系人姓名:\n");scanf("%s",stu[i].name);//输入名字printf("请输入联系人号码:\n"); //输入号码scanf("%s",stu[i].num);}else{printf("找不到'%s'!正在返回...",sname);Sleep(3000);return;}if((fp=fopen("data","wb"))==NULL){printf("打开文件失败!正在返回...\n");Sleep(3000);return;}for(j=0;j<m;j++) //将新修改的信息写入指定的磁盘文件中if(fwrite(&stu[j] ,LEN,1,fp)!=1){printf("保存'%s'失败!正在返回...",sname);Sleep(3000);return;}fclose(fp);order();show();}void total() //自定义计算总人数函数{FILE *fp;int m=0;if((fp=fopen("data","ab+"))==NULL){printf("打开文件失败!正在返回...\n");Sleep(3000);return;}while(!feof(fp))if(fread(&stu[m],LEN,1,fp)==1)m++;printf("此通讯录总共有%d名联系人!\n",m); //将统计的个数输出fclose(fp);printf("\n按任意键返回...\n");getch(); //输入任意键返回}void order() //自动排序函数{FILE *fp;struct student t; //用于交换信息int i=0,j=0,m=0; //i,j用于循环if((fp=fopen("data","ab+"))==NULL){printf("打开文件失败!正在返回...");Sleep(3000);return;}while(!feof(fp))if(fread(&stu[m] ,LEN,1,fp)==1)m++;for(i=0;i<m-1;i++)for(j=i+1;j<m;j++) //双重循环实现联系人比较并交换if((strcmp(stu[i].name,stu[j].name))>0){t=stu[i];stu[i]=stu[j];stu[j]=t;}if((fp=fopen("data","wb"))==NULL){printf("文件打开失败!正在返回...\n");Sleep(3000);return;}for(i=0;i<m;i++)//将重新排好序的内容重新写入指定的磁盘文件中if(fwrite(&stu[i],LEN,1,fp)!=1){printf("排序失败!正在返回...");Sleep(3000);return;}fclose(fp);}。

通讯录的制作c语言

通讯录的制作c语言

通讯录的制作1. 介绍通讯录是一种管理联系人信息的工具,能够存储和查找联系人的姓名、电话号码、邮箱等信息。

在现代社会中,通讯录已经成为人们日常生活中必备的工具之一。

本文将介绍如何使用C语言编写一个简单的通讯录程序。

2. 功能需求通讯录程序应该具备以下功能: - 添加联系人:用户可以输入联系人的姓名、电话号码和邮箱,将其添加到通讯录中。

- 删除联系人:用户可以根据姓名或电话号码删除已存在的联系人。

- 修改联系人信息:用户可以根据姓名或电话号码修改已存在联系人的信息。

- 查找联系人:用户可以根据姓名或电话号码查找已存在的联系人,并显示其详细信息。

- 显示所有联系人:用户可以显示通讯录中所有联系人的列表。

3. 数据结构设计为了实现上述功能,我们需要设计合适的数据结构来存储联系人信息。

在C语言中,可以使用结构体来表示一个联系人。

typedef struct {char name[50];char phone[20];char email[50];} Contact;以上代码定义了一个名为Contact的结构体,包含了三个字段:姓名、电话号码和邮箱。

每个字段都使用字符数组来表示。

同时,我们需要定义一个数据结构来存储多个联系人,可以使用数组或链表。

在本文中,我们将使用数组来实现通讯录。

#define MAX_CONTACTS 100Contact contacts[MAX_CONTACTS];int numContacts = 0;以上代码定义了一个名为contacts的数组,用于存储所有联系人的信息。

numContacts变量用于记录当前通讯录中联系人的数量。

4. 功能实现4.1 添加联系人添加联系人功能允许用户输入联系人的姓名、电话号码和邮箱,并将其添加到通讯录中。

void addContact() {if (numContacts >= MAX_CONTACTS) {printf("通讯录已满,无法添加更多联系人。

通讯录程序设计c

通讯录程序设计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语言通讯录

/*关于菜单界面及操作界面我就不作任何调了,有些界面显得有点“乱”,但我想你应该会看得懂并且会修改显示界面的!这个主要是用数组写的,里面的功能不多,你也可以自己增加!关于程序的优化:你可以自己调整main函数与其他模块的位置而使代码美观一点!*//*通讯录-数组*/#include "stdio.h"#include "string.h"#define N 100void myprint();void mycreate(char num[N][10],char name[N][10],char tel[N][10],int *n);void mydisplay(char num[N][10],char name[N][10],char tel[N][10],int n);void mysearch(char num[N][10],char name[N][10],char tel[N][10],int n);void sch_num(char num[N][10],char name[N][10],char tel[N][10],int n);void sch_name(char num[N][10],char name[N][10],char tel[N][10],int n);void mymodify(char num[N][10],char name[N][10],char tel[N][10],int n);void myadd(char num[N][10],char name[N][10],char tel[N][10],int *n);void mydelete(char num[N][10],char name[N][10],char tel[N][10],int *n);void del_num(char num[N][10],char name[N][10],char tel[N][10],int *n);void del_name(char num[N][10],char name[N][10],char tel[N][10],int *n);void main(){char choose,yes_no,num[N][10],name[N][10],tel[N][10];int n=0;do{//system(“CLS”); //清屏myprint();printf(" ");choose=getchar();switch(choose){case '1':mycreate(num,name,tel,&n);break;case '2':if(n==0){ printf("无记录\n");break;}mydisplay(num,name,tel,n);break;case '3':if(n==0){ printf("无记录\n");break;}mysearch(num,name,tel,n);break;case '4':if(n==0){ printf("无记录\n");break;}mymodify(num,name,tel,n);break;case '5':if(n==0){ printf("无记录\n");break;}myadd(num,name,tel,&n);break;case '6':if(n==0){ printf("无记录\n");break;}mydelete(num,name,tel,&n);break;case '0':break;default:printf(" %c为非法选项!\n",choose);}if(choose=='0') break;printf(" 要继续吗(Y/N)\n");do{yes_no=getchar();}while(yes_no!='Y'&&yes_no!='y'&&yes_no!='N'&&yes_no!='n');getchar();}while(yes_no=='Y'||yes_no=='y');}void myprint(){printf("\n\n\n\n\n");printf(" 1 创建\n");printf(" 2 显示\n");printf(" 3 查询\n");printf(" 4 修改\n");printf(" 5 添加\n");printf(" 6 删除\n");printf(" 0 退出\n");}void mycreate(char num[N][10],char name[N][10],char tel[N][10],int *n) {int i=0;char tempnum[10],tempname[10],temptel[10];printf("\n 请输入第1个记录(全部输入#表示结束):");printf(" 学号:");do{gets(tempnum);}while(strcmp(tempnum,"")==0);printf(" 姓名:");gets(tempname);printf(" 电话:");gets(temptel);while(tempnum[0]!='#'&&tempname[0]!='#'&&temptel[0]!='#'){strcpy(num[i],tempnum);strcpy(name[i],tempname);strcpy(tel[i],temptel);i++;printf("\n 请输入第%d个记录:\n",i+1);do{gets(tempnum);}while(strcmp(tempnum,"")==0);printf(" 姓名:");gets(tempname);printf(" 电话:");gets(temptel);}(*n)=i;}void mydisplay(char num[N][10],char name[N][10],char tel[N][10],int n) {int i;//system(“CLS”); //清屏printf(" 学号姓名电话\n");for(i=0;i<n;i++) printf("%12s%15s%15s\n",num[i],name[i],tel[i]); }void mysearch(char num[N][10],char name[N][10],char tel[N][10],int n) {char c;//system(“CLS”);printf(" 按学号查(h)还是按姓名查(m)?\n");getchar();c=getchar();if(c=='h'||c=='H') sch_num(num,name,tel,n);else if(c=='m'||c=='M') sch_name(num,name,tel,n);else printf("\n 非法字符!\n");}void sch_num(char num[N][10],char name[N][10],char tel[N][10],int n) {int i,flag=0;char tempnum[10];getchar();printf("\n 请输入要查询的学号:");gets(tempnum);for(i=0;i<n;i++)if(strcmp(tempnum,num[i])==0){if(flag==0)printf(" 学号姓名电话\n");printf("%12s%15s%15s\n",num[i],name[i],tel[i]);flag=1;}if(flag==0) printf(" 无此人!\n");}void sch_name(char num[N][10],char name[N][10],char tel[N][10],int n){int i,flag=0;char tempname[10];getchar();printf("\n 请输入要查询的姓名:");gets(tempname);for(i=0;i<n;i++)if(strcmp(tempname,name[i])==0){if(flag==0)printf(" 学号姓名电话\n");printf("%12s%15s%15s\n",num[i],name[i],tel[i]);flag=1;}if(flag==0) printf(" 无此人!\n");}void mymodify(char num[N][10],char name[N][10],char tel[N][10],int n){int i,find;char c,tempnum[10],tempname[10],temptel[10];getchar();//system(“CLS”);printf("\n 请输入要修改记录的学号:");gets(tempnum);for(i=0;i<n;i++)if(strcmp(tempnum,num[i])==0) {find=i;break;} //find记住修改记录的位置if(i==n) printf(" 无此人!\n");else{do{printf(" 请输入正确的学号:");do{gets(tempnum);}while(strcmp(tempnum,"")==0);printf(" 请输入正确的姓名:");gets(tempname);printf(" 请输入正确的电话号码:");gets(temptel);for(i=0;i<n;i++)if((strcmp(tempnum,num[i])==0)&&(i!=find)){printf(" 学号重复,要重新输入吗(Y/N)?");do{c=getchar();}while(c!='Y'&&c!='y'&&c!='N'&&c!='n');putchar('\n');break;}if(i==n){strcpy(num[find],tempnum);strcpy(name[find],tempname);strcpy(tel[find],temptel);break;}}while(c=='y'||c=='Y');}}void myadd(char num[N][10],char name[N][10],char tel[N][10],int *n) {int i;char c,tempnum[10],tempname[10],temptel[10];do{printf("\n 请输入新记录的学号:");do{gets(tempnum);}while(strcmp(tempnum,"")==0);printf(" 请输入新记录的姓名:");gets(tempname);printf(" 请输入新记录的电话:");gets(temptel);for(i=0;i<(*n);i++)if(strcmp(tempnum,num[i])==0){printf(" 学号重复,要重新输入吗?(Y/N)?");do{c=getchar();}while(c!='Y'&&c!='y'&&c!='N'&&c!='n');putchar('\n');break;}if(i==(*n)){strcpy(num[i],tempnum);strcpy(name[i],tempname);strcpy(tel[i],temptel);(*n)++; //添加记录后记录总数加1break;}}while(c=='y'||c=='Y');}void mydelete(char num[N][10],char name[N][10],char tel[N][10],int *n) {char c;getchar();printf("\n 按学号删除(h),还是按姓名删除(m)?");c=getchar();if(c=='h'||c=='H') del_num(num,name,tel,n);else if(c=='m'||c=='M') del_name(num,name,tel,n);else printf("\n 非法字符!\n");}void del_num(char num[N][10],char name[N][10],char tel[N][10],int *n) {int i,k;char tempnum[10];getchar();printf("\n 请输入要删除记录的学号:");gets(tempnum);for(k=0;k<(*n);k++)if(strcmp(tempnum,num[k])==0) break;if(k<(*n)){for(i=k;i<(*n)-1;i++){strcpy(num[i],num[i+1]);strcpy(name[i],name[i+1]);strcpy(tel[i],tel[i+1]);}(*n)--; //删除后总数减1}else printf(" 无此人!\n");}void del_name(char num[N][10],char name[N][10],char tel[N][10],int *n) {int i,k;char tempname[10];getchar();printf("\n 请输入要删除记录的姓名:");gets(tempname);for(k=0;k<(*n);k++)if(strcmp(tempname,name[k])==0) break;if(k<(*n)){for(i=k;i<(*n)-1;i++){strcpy(num[i],num[i+1]);strcpy(name[i],name[i+1]);strcpy(tel[i],tel[i+1]);}(*n)--; //删除后总数减1}else printf(" 无此人!\n");}。

通讯录的制作c语言

通讯录的制作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语言课程设计通讯录

原创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语言通讯录设计与实现

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);}```通讯录的实现为了实现通讯录程序,我们需要将设计转化为代码。

C语言实验报告 通讯录

C语言实验报告 通讯录

C语言集中上机报告通信录院系:班级:姓名:合作者:指导教师:2015年6月1日目录一概述 (3)课程设计的目的 (3)二总体方案 (4)三程序的调试与运行结果说明 (4)四课程设计总结 (6)五后记 (7)六附录 (7)参考文献 (11)一概述课程设计的目的实现个人通讯录管理, 录入包括姓名、地址、邮政编码、电话号码的信息。

其中:1.对n名学生包括姓名、地址、邮政编码、电话号码等信息进行输入;2、显示所有记录的信息, 若无记录, 则给出提示信息;3.可以按姓名进行查询;4.可以按姓名进行删除;6.退出程序1.课程设计的要求教师要求:1、为通信录数据定义类型和定义通信录变量, 实现功能: 存取、显示、删除记录、查询记录等功能。

2.要求:界面友好, 易于操作。

(本题目限最多一个人完成)需要的基本知识和技能:1.利用C语言进行程序设计的能力;2.理解和运用结构化程序设计的思想和方法;3.初步掌握开发一个小型实用系统的基本方法;4.学会调试一个较长程序的基本方法;5.学会利用流程图或N-S图表示算法;6.掌握书写程序设计开发文档的能力。

2.课程设计的主要设计思想整个程序的设计是通过对每一个功能的设计, 然后, 再对每一个功能的程序进行模块化, 从而形成一个完整的管理系统。

自顶向下、逐步细化、逐步求精。

在对于给定问题进行透彻的了解和详细的分析的基础上, 把问题分解成若干个按顺序执行的逻辑部分(称为“模块”)。

每个子任务如果仍很复杂, 还可以再分解为若干个子任务。

对于每个模块的设计都采用这种“自顶向下、逐步细化”的方法, 将它们分解成为基本结构为止, 就如同写文章先拟出题目和中心内容, 再确定分为几大部分, 每一大部分又分哪几节, 每一节分为几段, 每一段包括哪几个意思, 这就是“自顶向下, 逐步细化”的方法。

二总体方案整体设计思路: 程序主要运用到了文本文件的打开和读取, 文件中存取信息的格式为结构体数组, 一个主函数下面分为个子函数。

通讯录(C语言版)(请下载观看,无乱码)

通讯录(C语言版)(请下载观看,无乱码)

#include<stdio.h>#include<string.h>#include<stdlib.h>#include<conio.h>typedef struct personnode {char name[8];char tel[16];char add[30];}personnode;FILE *fp; //定义文件型指针变量/*以下创建通讯录,若通讯录不存在,刚提示创建,若存在则不创建*/void creat(){personnode *person;person=(personnode *)malloc(sizeof(personnode));if((fp=fopen("通讯录.dat","r"))==NULL){ //r 只读(打开)printf("通讯录不存在!\n");fp=fopen("通讯录.dat","w"); //w 只写(建立)fprintf(fp,"%-10s%-20s%-50s\n","姓名","电话号码","地址");printf("\n建立通讯录成功!\n");}elseprintf("通讯录已存在,不用建立!\n");fclose(fp);} //creat()void output(){personnode *person;person=(personnode *)malloc(sizeof(personnode));if((fp=fopen("通讯录.dat","r"))==NULL){printf("\n不能打开通讯录!\n");exit(0);}printf("\n**************************************\n");printf("%24s\n","通讯录");while(!feof(fp)){ //如果没到文件末尾,则不停循环输出fscanf(fp,"%s%s%s\n",person->name,person->tel,person->add);printf("%-10s%-20s%-50s\n",person->name,person->tel,person->add);}fclose(fp);printf("\n**************************************\n");} //output()/*以下为添加模块*/void append(){personnode *person;person=(personnode *)malloc(sizeof(personnode));if((fp=fopen("通讯录.dat","a"))==NULL){ //a 追加printf("\n不能打开通讯录!\n");exit(0);}printf("\n请输入添加的姓名、电话号码及地址\n");scanf("%s%s%s",person->name,person->tel,person->add);fprintf(fp,"%-10s%-20s%-50s\n",person->name,person->tel,person->add);fclose(fp);printf("\n添加成功!\n");} //append()/*以下为查找模块*/void search(){int k=0,h;char namekey[8],telkey[16];personnode *person;person=(personnode *)malloc(sizeof(personnode));printf("\n*********************************\n");printf("* \t1 -- 按号码查找 \t*\n");printf("* \t2 -- 按姓名查找 \t*\n");printf("*********************************\n");printf("\n请选择操作 (1 ~ 2) :");scanf("%d",&h);fp=fopen("通讯录.dat","r");if(h==1){printf("\n请输入你查找的号码!\n");scanf("%s",telkey);while(!feof(fp)){fscanf(fp,"%s%s%s\n",person->name,person->tel,person->add);if(!strcmp(telkey,person->tel)){printf("\n\n已查到,记录为:\n");printf("%-10s%-20s%-50s\n",person->name,person->tel,person->add);k=1;} //if}}else if(h==2){printf("\n请输入要查找的姓名:");scanf("%s",namekey);while(!feof(fp)){fscanf(fp,"%s%s%s\n",person->name,person->tel,person->add);if(!strcmp(namekey,person->name)){printf("\n\n已查到,记录为:\n");printf("%-10s%-20s%-50s\n",person->name,person->tel,person->add);k=1;} //if} //while*/if(!k)printf("对不起,没有此人记录!\n");fclose(fp);}} //search()/*以下为修改模块*/void modify(){int k=0;long offset;char namekey[8];personnode *person;person=(personnode *)malloc(sizeof(personnode));printf("\n请输入要修改的姓名:");scanf("%s",namekey);if((fp=fopen("通讯录.dat","r+"))==NULL){ // r+ 读写printf("\n不能打开通讯录!\n");exit(0);}while(!feof(fp)){offset=ftell(fp);fscanf(fp,"%s%s%s\n",person->name,person->tel,person->add);if(!strcmp(namekey,person->name)){k=1;break;}}if(k){printf("\n已查到,记录为:\n");printf("%-10s%-20s%-50s\n",person->name,person->tel,person->add);printf("\n请输入新姓名、电话号码及地址\n");scanf("%s%s%s",person->name,person->tel,person->add);fseek(fp,offset,SEEK_SET); //从该条记录的开始点进行写操作 fprintf(fp,"%-10s%-20s%-50s\n",person->name,person->tel,person->add);printf("\n修改成功!\n");}else printf("\n对不起,没有此人记录!\n");fclose(fp);}/*以下为删除模块*/void delrecord(){int k=0;int sum=1;char m;long offset1;char namekey[8];personnode *person;person=(personnode *)malloc(sizeof(personnode));printf("\n请输入要删除的姓名:");scanf("%s",namekey);if((fp=fopen("通讯录.dat","r+"))==NULL){printf("\n不能打开通讯录!\n");exit(0);}while(!feof(fp)){offset1=ftell(fp); //文件位置指针当前值fscanf(fp,"%s%s%s\n",person->name,person->tel,person->add);sum+=1;if(!strcmp(namekey,person->name)){k=1;break;}} //while()if(k){printf("\n已查到,记录为:\n");printf("%-10s%-20s%-50s\n",person->name,person->tel,person->add);printf("\n确定要删除吗? (Y/N) ");scanf("%s",&m);if(m=='y'||m=='Y'){rewind(fp);fseek(fp,sum*80L,1);fprintf(fp,"%-10s%-20s%-50s\n","","","");printf("\n删除成功!\n");} //if}else printf("\n对不起,没有此人记录!\n");fclose(fp);} //delcord()void main(){int m,flag=1;system("color 2f"); //调用颜色命令,包含在stdlib.h头文件中printf("\n\n******************************************************************** ***********\n\n");printf("\t\t┏━━━━━━━━━━━━━━━━━━━━━┓\n");printf("\t\t┃∩__∩ Random 编写♂┃\n");printf("\t\t┃欢迎使用Random的通讯录┃\n");printf("\t\t┃ QQ:747187822 ┃\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 -- 打印┃ 0 -- 退出┃\n");printf("\t\t┗━━━━━━━━━━┻━━━━━━━━━━┛\n");printf("\n********************************************************************** *********\n\n");creat();while(flag){ //用死循环实现printf("\n请选择操作 (0 ~ 5) :");scanf("%d",&m);switch(m){case 1: append();break;case 2: search();break;case 3: modify();break;case 4: delrecord();break;case 5: output();break;case 0: printf("\n\n==========>感谢使用Random的通讯录!<==========\n");exit(0);} //switch()} //while()}/*本程序编写By:Random*/。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
{
int i = 0;
PCONTACT p = pHead;
while (NULL != p && i < pos-1)
{
p = p->pNext;
++i;
}
if (i > pos-1 || NULL == p)
return false;
//如果程序能执行到这一行说明p已经指向了第pos-1个结点,但第pos-1个节点是否存在无所谓
{
printf ("\n\t\t__________________________");
system ("pause"); // 在命令行上输出一行类似于“Press any key to exit”的字,等待用户按一个键,然后返回。
}
}
}
else
pHead = creat_list ();
while (1)
{
int i = 0;
switch (menu_select ())
{
case 1: insert_list (pHead, ++i); break;
case 2: traverse_list (pHead); break;
void search_list (PCONTACT pHead);
void delete_list (PCONTACT pHead, int pos);
void delete_name (PCONTACT pHead);
void save_list (PCONTACT pHead);
int main ()
printf ("==================== → 用户信息记录表 ← ===================\n");
printf ("*************************************************************\n");
if (NULL != p)
PCONTACT q = p->pNext;
p->pNext = pNew;
pNew->pNext = q;
return true;
}
//遍历通讯录的信息,先排序,再输出
void traverse_list (PCONTACT pHead)
{
//对通讯录进行排序,按姓名的拼音顺序
char phone[P_SIZE];
char address[A_SIZE];
char email[E_SIZE];
char QQ[Q_SIZE];
struct Contact * pNext;
}CONTACT, * PCONTACT;
//函数的声明
int menu_select ();
do
{
printf ("选择你需要操作的功能号码(1~6):");
/*
//也可以通过这种方式
scanf ("%d", &num);
getchar ();
*/
gets (s);
num = atoi(s); //将字符串转换成一个整数值, 要头文件stdlib.h
{
PCONTACT pHead = NULL;
int num; //功能选择需要的号码
system ("cls"); /* 清屏,需要头文件stdlib.h */
system ("color 2e"); // C语言中调用dos函数颜色
system ("cls"); //调用DOS命令CLS能够清屏
printf ("\t\t你能在此目录下创建并添加联系人信息");
printf ("\n***********************************************************\n");
printf ("请输入联系人姓名:");
gets (pNew->name);
if (NULL == pHead)
{
exit (-1); //分配内存失败,终止程序
}
pHead->pNext = NULL;
return pHead;
}
//在pHead所指向链表的第pos个节点的前面插入一个新的结点
bool insert_list (PCONTACT pHead, int pos!!没有任何人的记录!!\n\n");
printf ("=============================================================\n");
}
return;
}
//有效节点的个数
int length_list (PCONTACT pHead)
sort_list (pHead);
int len = length_list (pHead);
PCONTACT p = pHead->pNext;
int i;
system ("CLS");//调用DOS命令CLS能够清屏
printf ("*************************************************************\n");
PCONTACT creat_list ();
void traverse_list (PCONTACT pHead);
bool insert_list (PCONTACT pHead, int pos);
int length_list (PCONTACT pHead);
void sort_list (PCONTACT pHead);
}
printf ("\t◇◆请按ENTER返回功能操作菜单◇◆\n");
getchar ();
system ("CLS");
}
return 0;
}
int menu_select () //功能选择面板
{
char s[20];
int num;
printf("********************************************************************");
{
int i, j;
int len = length_list (pHead);
char name[N_SIZE];
char phone[P_SIZE];
char address[A_SIZE];
char email[E_SIZE];
char QQ[Q_SIZE];
PCONTACT p, q;
printf ("\t\t\t6.〖退出不保存!!】\n");
printf ("\n");
printf ("\t☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★");
printf ("\n\n********************************************************************\n\n");
printf ("\t\t\t\t☆★☆★☆★ ~_~ ~_~ ~_~ ☆★☆★☆★\n");
printf ("\n\t\t\t☆★欢迎使用TN制作的通讯录☆★");
printf ("\n\n\t☆★选择你需要操作的功能:☆★(现无记录,建议先增加记录)★☆\n");
printf ("\n");
printf ("联系人邮箱:%s\n", p->email);
printf ("联系人QQ:%s\n", p->QQ);
printf ("********************************************************\n");
if (i + 1 < len)
# define P_SIZE 20 //电话字节最大长度
# define A_SIZE 50 //地址字节最大长度
# define E_SIZE 30 //邮箱字节最大长度
# define Q_SIZE 20 //QQ字节最大长度
typedef struct Contact
{
char name[N_SIZE];
// 通讯录,主要用动态链表实现
# include <stdio.h>
# include <string.h> //提供字符串处理的原函数
# include <stdlib.h> //提供malloc,system,exit等函数
# define N_SIZE 25 //姓名字节最大长度
}while (num < 1 || num > 6);
return num;
}
//创建一个动态空链表
PCONTACT creat_list ()
{
//分配了一个不存放有效数据的头结点
相关文档
最新文档