⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 新建 文本文档.txt

📁 链表的基本插入删除等功能的实现
💻 TXT
字号:




#include<stdio.h> 
#include<string.h> 
#include<time.h> 
#define bool int 
#define ture 1 
#define false 0 
#define LEN sizeof(struct Telephone) 
struct Telephone /*存放个体信息*/ 
{ 
char name[20]; 
char phone[13]; 
char mobile[12]; 
struct Telephone * next; 
}; 
typedef struct Telephone tel; 
tel * head=NULL; 
time_t now; 
void ShowMenu(); 
void Find(); 
void Display(); 
void AddItem(); 
void ModifyItem(); 
void RemoveItem(); 
void SaveAndFree(); 
void Open(); 
tel * FindItem(); /*查找条目*/ 
int main() 
{ 
char x; 
bool quit = false; 
Open(); 
while(! quit) 
{ 
ShowMenu(); 
scanf("%s",&x); 
switch(x) 
{ 
case'0': 
quit = ture; 
SaveAndFree(); 
break; 
case'1': 
AddItem(); 
break; 
case'2': 
ModifyItem(); 
break; 
case'3': 
RemoveItem(); 
break; 
case'4': 
Find(); 
break; 
case'5': 
Display(); 
break; 
default: 
break; 
} 
} 
return 0; 
} 
/*菜单显示*/ 
void ShowMenu() 
{ 
printf("\n***********************************\n"); 
printf("1.添加条目\n"); 
printf("2.修改条目\n"); 
printf("3.删除条目\n"); 
printf("4.查找条目\n"); 
printf("5.全部条目\n"); 
printf("0.退出\n"); 
printf("***********************************\n"); 
printf("请选择"); 
} 
/*增加条目*/ 
void AddItem() 
{ 
tel * p1=NULL,* p2=NULL; 
p1=(tel *)malloc(sizeof(tel)); 
printf("输入姓名:\n"); 
scanf("%s,p1->name"); 
printf("输入住宅电话:\n"); 
scanf("%s,p1->phone"); 
printf("输入移动电话:\n"); 
scanf("%s,p1->mobile"); 
p1->next=NULL; 
if(NULL==head) 
{ 
head=(tel *)malloc(sizeof(tel)); 
head->next=p1; 
}else 
{ 
for(p2=head;p2->next!=NULL;p2=p2->next); 
p2->next=p1; 
} 
now=time(NULL); 
printf("The current date and time is:%s",ctime(&now)); 
} 
/*查找用户*/ 
void Find() 
{ 
tel *p=FindItem(); 
if(NULL==p) 
printf("对不起,没有找到该用户!\n"); 
else 
printf("找到该用户:\n姓名:%s住宅电话:%s移动电话:%s\n",p->next->name,p->next->phone,p->next->mobile); 
} 
/*查找条目*/ 
tel *FindItem() 
{ 
char name[20]; 
tel *p=NULL; 
printf("请输入姓名!\n"); 
scanf("%s",name); 
if(head==NULL) 
{ 
printf("电话簿中没有记录,请输入记录后再使用本功能!\n"); 
return NULL; 
} 
for(p=head;p->next!=NULL;p=p->next) 
if(!strcmp(p->next->next,name)) /*判断其他节点*/ 
return p; 
return NULL; 
} 
/*显示所有条目*/ 
void Display() 
{ 
tel *p=NULL; 
if(head==NULL) 
{ 
printf("电话簿中没有记录,请输入记录后再使用本功能!\n"); 
return; 
} 
for(p=head->next;p!=NULL;p=p->next) 
printf("找到该用户:\n姓名:%s住宅电话:%s移动电话:%s\n",p->next->name,p->next->phone,p->next->mobile); 
} 
/*修改条目*/ 
void ModifyItem() 
{ 
tel *p=FindItem(); 
if(NULL==p) 
printf("对不起,没有找到该用户!\n"); 
else 
{ 
printf("要修改用户的信息:\n:姓名:%s住宅电话:%s移动电话:%s\n",p->next->name,p->next->phone,p->next->mobile); 
printf("请输入新的姓名:\n"); 
scanf("%s",p->next->name); 
printf("请输入新的住宅电话:\n"); 
scanf("%s",p->next->phone); 
printf("请输入新的移动电话:\n"); 
scanf("%s",p->next->mobile); 
p->next->next=NULL; 
} 
} 
/*删除条目*/ 
void RemoveItem() 
{ 
tel *temp=NULL; 
tel *p=FindItem(); 
if(NULL==p) 
printf("对不起,没有找到该用户!\n"); 
else 
{ 
printf("删除的用户信息:\n姓名:%s移动电话:%s\n",p->next->name,p->next->phone,p->next->mobile); 
temp=p->next; 
p->next=p->next->next; 
free(temp); 
} 
} 
/*输出信息到文件,并释放连标空间*/ 
void SaveAndFree() 
{ 
tel *p=NULL; 
FILE *fp; 
char *filename="book.txt"; 
if(head==NULL) 
{ 
printf("\n记录为空!\n"); 
return; 
} 
else 
p=head->next; 
if((fp=fopen(filename,"w"))==NULL) /*出错检测*/ 
{ 
printf("\n打不开文件!\n"); 
return; 
} 
while(p!=NULL) 
{ 
fprintf(fp,"%s\t %s\t %s\t\n",p->name,p->phone,p->mobile); 
p=p->next; 
} 
printf("保存完毕!\n"); 
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("book.txt","r"))==NULL) 
{ 
printf("\n*******这是一个新的电话簿******"); 
return; 
} 
head=(tel *)malloc(sizeof(tel)); 
head->next=NULL; 
temp=p2=head; 
while(!feof(fp)) 
{ 
p1=(tel *)malloc(LEN); 
temp=p2; 
p2->next=p1; 
p2=p1; 
fscanf(fp,"%s%s%s",p1->name,p1->phone,p1->mobile); 
} 
temp->next=NULL; 
fclose(fp); 
} 

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -