您的位置:首页 > 其它

通讯录改进(可以保存至文件并读取)

2017-12-10 19:23 281 查看
头文件:

#ifndef _NODE_H_
#define _NODE_H_

struct node
{
char id[100] ;
char name[10];
char address[10];
char tel[100];
char mob[100];
struct node *next;
};
typedef struct node Node;
typedef Node *STU;

#endif


子函数:

#include <stdio.h>
#include "student.h"
#include <stdlib.h>
#include <string.h>

void ListInit(STU *L)
{
(*L) = (STU)malloc(sizeof(Node));
(*L)->next = NULL;
}

int AddInfo(STU *L)
{
STU p = *L;
STU s;

printf("Please input name,id,mob,tel,address:\n");

s = (STU)malloc(sizeof(Node));
scanf("%s%s%s%s%s",s->name,s->id,s->mob,s->tel,s->address);

if(strlen(s->mob) != 11)
{
printf("无效手机号码!\n");
return 0;
}
if(strlen(s->tel) != 8)
{
printf("无效家庭电话号码!\n");
return 0;
}
while(p->next)
{
if(strcmp((p->next)->mob,s->mob) == 0 || strcmp((p->next)->tel,s->tel) == 0)
{
printf("已存在相同号码!\n");
return 0;
}
p = p->next;
}

p=*L;
if(p->next ==NULL)
{
s->next = p->next;
p->next = s;
}
else
{
while(p->next)
{
if(strcmp((p->next)->name,s->name)>0)
{
s->next = p->next;
p->next = s;
break;
}
p = p->next;
}
if(p->next ==NULL)
{
s->next = p->next;
p->next = s;
}
}
}

void Save(STU l)
{
STU p;
FILE *fp;
int ret;
p = l->next;
fp = fopen("save.txt","w");
if(NULL == fp )
{
perror("Fopen Failure!\n");
exit(1);
}

while(p)
{
ret = fwrite(p,1,sizeof(Node),fp);
if(0 == ret)
{
perror("Fwrite Failure!\n");
exit(1);
}
p=p->next;
}
fclose(fp);
}

void Read(STU l)
{
STU p;
STU r;
FILE *fp;
l->next = NULL;
r = l;
int ret;
fp = fopen("save.txt","r");
if(NULL == fp)
{
perror("Fopen Failure!\n");
exit(1);
}
while(!feof(fp))
{
p = (STU)malloc(sizeof(Node));
if(!p)
{
printf("Malloc Failure!\n");
return;
}
if(fread(p,sizeof(Node),1,fp) != 1)
{
break;
}
else
{
p->next = NULL;
r->next = p;
r = p;
}
}
fclose(fp);

}

int ShowInfo(STU l)
{
if(l->next == NULL)
{
printf("It is NULL!\n");
}
else
{
STU p = l->next;

while(p)
{
printf("Name: %s  Id: %s  Mobile: %s  Tele: %s  Address: %s\n",p->name,p->id,p->mob,p->tel,p->address);
p=p->next;
}
}
}

int ChangeInfo(STU *l)
{
STU p = (*l)->next;
STU t = *l;
STU s ;
char n[10];
printf("Please input the na
4000
me you want to change:\n");
scanf("%s",n);

while(p)
{
s = (STU)malloc(sizeof(Node));
if(strcmp(p->name,n) == 0)
{
printf("Please input the new information:\n");
scanf("%s%s%s%s%s",s->name,s->id,s->mob,s->tel,s->address);

if(strlen(s->mob) != 11)
{
printf("无效手机号码!\n");
return 0;
}
if(strlen(s->tel) != 8)
{
printf("无效家庭电话号码!\n");
return 0;
}
while(t->next)
{
if(strcmp((t->next)->mob,s->mob) == 0|| strcmp((t->next)->tel,s->tel) == 0)
{
printf("已存在相同号码!\n");
return 0;
}
t = t->next;
}
strcpy(p->name , s->name);
strcpy(p->id , s->id);
strcpy(p->mob , s->mob);
strcpy(p->tel, s->tel);
strcpy(p->address , s->address);
free(s);

printf("Change Success!\n");
break;
}
else
{
p = p->next;
}
}
if(p == NULL)
{
printf("Unknown person!\n");
}
}

int DeleteInfo(STU l)
{
STU p = l;
STU tmp;
char n[10];
printf("Please input the name you want to delete:\n");
scanf("%s",n);

while(p->next)
{
if(strcmp((p->next)->name,n) == 0)
{
tmp = p->next;
p->next = tmp->next;
free(tmp);
printf("Delete Success!\n");
break;
}
else
{
p = p->next;
}
}
}

int SearchInfo(STU l)
{
STU p = l->next;
char n[10];
printf("Please input the name you want to search:\n");
scanf("%s",n);

while(p)
{
if(strcmp(p->name,n) == 0)
{
printf("ID: %s Tel: %s Mob: %s Address: %s\n",p->id,p->tel,p->mob,p->address);
break;
}
else
{
p =p->next;
}

}
if(p == NULL)
{
printf("Unknown name!\n");
}
}


主函数:

#include <stdio.h>
#include "student.h"
#include <stdlib.h>

void show()
{
printf("***********************************\n\n");
printf("*******1.Add         2.Show********\n\n");
printf("*******3.Change      4.Delete******\n\n");
printf("*******5.Search      6.Save********\n\n");
printf("*******7.Read        8.Quit********\n\n");
printf("***********************************\n\n");
printf("*******Please input your choice****\n\n");
}

int main()
{

int choice;
STU stu;

ListInit(&stu);

while(1)
{
show();
scanf("%d",&choice);
switch (choice)
{
case 1:
AddInfo(&stu);
break;
case 2:
ShowInfo(stu);
break;
case 3:
ChangeInfo(&stu);
break;
case 4:
DeleteInfo(stu);
break;
case 5:
SearchInfo(stu);
break;
case 6:
Save(stu);
break;
case 7:
Read(stu);
break;
case 8:
exit(0);
break;
default:
printf("Unknown Input!\n");

}
}
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  通讯录
相关文章推荐