C语言实现了通讯录的录入信息、保存信息、插入、删除、排序、查找、单个显示等功能。。
完整的代码如下:
#include <stdio.h> #include <malloc.h> //得到指向大小为Size的内存区域的首字节的指针// #include <string.h> #include <stdlib.h> //标准库函数// #define NULL 0 #define LEN sizeof(struct address_list) //计算字节// int n;
struct address_list {
char name[30];
//名字 char work[30];
//职业 char handset[30];
//手机 char email[30];
//电子邮件 char address[30];
//通讯地址 struct address_list *next;
}
;
struct address_list *shifang(struct address_list *head);
// 释放内存函数声明 //创建函数,不带头结点的链表 struct address_list *creat(void) {
struct address_list *head,*p1,*p2;
char name[20];
n=0;
p1=(struct 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=(struct address_list *)malloc(LEN);
strcpy(p1->name,name);
printf("请输入职业:");
gets(p1->work);
printf("请输入手机:");
gets(p1->handset);
printf("请输入电子邮件:");
gets(p1->email);
printf("请输入通讯地址:");
gets(p1->address);
}
}
p2->next=NULL;
return head;
}
else return 0;
}
//输出函数 void print(struct address_list *head) {
struct address_list *p;
if(head!=NULL) {
p=head;
printf("本通讯录现在共有%d人:n",n);
printf("---姓名-------职业--------手机-------Email-------通讯地址n");
printf("==================================n");
do {
printf("== %s",p->name);
printf(" ");
printf("%s",p->work);
printf(" ");
printf("%s",p->handset);
printf(" ");
printf("%s",p->email);
printf(" ");
printf("%s",p->address);
printf(" n");
p=p->next;
}
while(p!=NULL);
printf("==================================n");
}
else printf("通讯录为空,无法输出!n");
}
//增加函数 struct address_list *insert(struct address_list *head) {
struct address_list *p0,*p1,*p2;
char name[20];
p1=head;
printf("请输入增加的内容:n");
printf("请输入姓名:");
gets(name);
if(strcmp(name,"0")==0) {
printf("姓名不能为0,增加失败!n");
return(head);
}
else {
p0=(struct address_list *)malloc(LEN);
strcpy(p0->name,name);
printf("请输入职业:");
gets(p0->work);
printf("请输入手机:");
gets(p0->handset);
printf("请输入电子邮件:");
gets(p0->email);
printf("请输入通讯地址:");
gets(p0->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 {
p2->next=p0;
}
p0->next=p1;
}
else {
p1->next=p0;
p0->next=NULL;
}
return head;
}
}
}
struct address_list* delete_txl(struct address_list *head) {
struct 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;
}
}
}
//显示函数 struct address_list *display(struct address_list *head) {
struct 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",p1->name);
printf(" ");
printf("%s",p1->work);
printf(" ");
printf("%s",p1->handset);
printf(" ");
printf("%s",p1->email);
printf(" ");
printf("%s",p1->address);
printf(" n");
printf("==================================n");
}
p1=p1->next;
}
if(m==0) {
printf("此人未在本通讯录中!n");
}
return(head);
}
//排序函数 struct address_list *paixu(struct address_list *head) {
struct address_list *p1,*p2;
int i,j;
struct address_list1 {
char name[30];
char work[30];
char handset[30];
char email[30];
char address[30];
}
;
struct address_list1 px[200];
struct address_list1 temp;
if(head==NULL) {
printf("通讯录为空,无法排序!n");
return(head);
}
p1=head;
for(i=0;
i<n,p1!=NULL;
i++) {
strcpy(px[i].name,p1->name);
strcpy(px[i].work,p1->work);
strcpy(px[i].handset,p1->handset);
strcpy(px[i].email,p1->email);
strcpy(px[i].address,p1->address);
p2=p1;
p1=p1->next;
}
head=shifang(head);
for(j=0;
j<n-1;
j++) {
for(i=j+1;
i<n;
i++) {
if(strcmp(px[i].name,px[j].name)<0) {
temp=px[i];
px[i]=px[j];
px[j]=temp;
}
}
}
p1=(struct address_list *)malloc(LEN);
p2=p1;
strcpy(p1->name,px[0].name);
strcpy(p1->work,px[0].work);
strcpy(p1->handset,px[0].handset);
strcpy(p1->email,px[0].email);
strcpy(p1->address,px[0].address);
head=p1;
for(i=1;
i<n;
i++) {
p1=(struct address_list *)malloc(LEN);
strcpy(p1->name,px[i].name);
strcpy(p1->work,px[i].work);
strcpy(p1->handset,px[i].handset);
strcpy(p1->email,px[i].email);
strcpy(p1->address,px[i].address);
p2->next=p1;
p2=p1;
}
p2->next=NULL;
printf("按姓名排序后为:n");
print(head);
return(head);
}
//姓名查找函数 struct address_list *search(struct address_list *head) {
struct 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 %s %s %s %sn",p1->name,p1->work,p1->handset,p1->email,p1->address);
printf("+++++++++++++++++++++++++++++++++++n");
}
p1=p1->next;
if(m==0) {
printf("此人未在本通讯录中!n");
}
break;
}
return(head);
}
//释放内存函数 struct address_list *shifang(struct address_list *head) {
struct address_list *p1;
while(head!=NULL) {
p1=head;
head=head->next;
free(p1);
}
return(head);
}
//文件写入函数 void save(struct address_list *head) {
FILE *fp;
struct address_list *p1;
char tong[30];
if(head==NULL) {
printf("通讯录为空,无法存储!n");
return;
}
printf("请输入保存后的文件名:");
gets(tong);
fp=fopen("(tong).txt","w");
if(fp==NULL) {
printf("cannot open filen");
return;
}
p1=head;
fprintf(fp,"姓名 职业 手机 Email 通讯地址n");
for(;
p1!=NULL;
) {
fprintf(fp,"%s %s %s %s %sn",p1->name,p1->work,p1->handset,p1->email,p1->address);
p1=p1->next;
}
printf("保存完毕!n");
fclose(fp);
}
//文件读出函数 struct address_list *load(struct address_list *head) {
FILE *fp;
char tong[30];
struct address_list *p1,*p2;
printf("请输入要输出的文件名:");
gets(tong);
fp=fopen("(tong).txt","r");
if(fp==NULL) {
printf("此通讯录名不存在,无法输出!n");
return(head);
}
else {
head=shifang(head);
}
p1=(struct 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=(struct 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);
}
//综合操作函数 struct address_list *menu(struct 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(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;
}
//主函数 void main() {
struct 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=creat();
//创建 print(head);
}
else {
head=shifang(head);
head=creat();
//重新创建 print(head);
}
}
break;
case '2': {
head=paixu(head);
//排序 }
break;
case '3': {
head=menu(head);
//综合操作 }
break;
case '4': {
save(head);
//文件保存 print(head);
}
break;
case '5': {
head=load(head);
//文件输出 }
break;
case '6': {
head=delete_txl(head);
//删除 print(head);
}
break;
case '7': head=shifang(head);
break;
default: printf("操作错误,此项不存在!n");
break;
}
if(strcmp(num,"7")==0) break;
}
}
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持脚本之家。
您可能感兴趣的文章:
- c语言实现的货物管理系统实例代码(增加删除 查找货物信息等功能)
- C语言职工管理系统设计
- C语言学生管理系统源码分享
- C语言编写学生成绩管理系统
- C语言实现图书管理系统
- C语言实现简单学生管理系统
- C语言利用结构体数组实现学生成绩管理系统
- 学生成绩管理系统C语言代码实现
- C语言职工信息管理系统源码
- C语言学生成绩管理系统源代码