}
stringinput(searchinput,15,\请输入已存在的地址:\p=Locate(l,searchinput,\if(p) {
printhead(); printdata(p); printf(END);
printf(\按任意键返回\ }
printf(\找不到此人!\\n\
else
else
printf(\输入错误! 按任意键继续**\\n\}
/*按姓名删除学生记录:先找到保存该联系人记录的节点,然后删除该节点*/ void Del(Link l) {
Node *p,*r; char findmess[20]; if(!l->next)
p=Locate(l,findmess,\ if(p) {
r=l;
while(r->next!=p)
r=r->next;
{ }
printf(\找不到此人的记录!\\n\
return;
stringinput(findmess,15,\
}
r->next=p->next; } else
printf(\
free(p);
printf(\
save=1;
/*修改电话记录。先按输入的编号查询到该记录,然后提示用户修改编号之外的值,编号不能修改*/ void Modify(Link l) {
printf(\
stringinput(findmess,6,\输入并p=Locate(l,findmess,\查询到该节点*/
if(p) /*若p!=NULL,表明已经找到该节点*/
{
printf(\printf(\
检验该学号*/
Disp(l); if(!l->next) {
printf(\ return; } Node *p;
char findmess[20];
}
}
stringinput(p->data.name,15,\p->data.age=numberinput(\
stringinput(p->data.phone,12,\stringinput(p->data.address,10,\stringinput(p->data.email,20,\printf(\Disp(l); save=1;
else
printf(\
/*数据存盘,若用户没有专门进行此操作且对数据有修改,在退出系统时, 会提示用户存盘*/ void Save(Link l) {
while(p)
{
if(fwrite(p,sizeof(Node),1,fp)==1)/*每次写一条记录或一个节点信{
fp=fopen(\以只写方式打开二进制文件*/ if(fp==NULL) /*打开文件失败*/
{
printf(\ return ; } FILE* fp; Node *p;
p=l->next;
息至文件*/
}
}
p=p->next; }
{break; }
else
save=0;
fclose(fp); /*关闭此文件*/
/*主函数*/ void main() {
Link l; /*定义链表*/
int select; /*保存选择结果变量*/ FILE *fp; /*文件指针*/ char ch; /*保存(y,Y,n,N)*/ Node *p,*r; /*定义记录指针变量*/ l=(Node*)malloc(sizeof(Node));
if(!l) {
printf(\如没有申请到,打印提示 return ; /*返回主界面*/ }
l->next=NULL;
fp=fopen(\以追加方式打开一个二进制文件,可
信息*/
r=l;
读可写,若此文件不存在,会创建此文件*/ if(fp==NULL)
{ } {
printf(\exit(0);
while(!feof(fp))
}
p=(Node*)malloc(sizeof(Node));
if(!p)
{ }
printf(\memory malloc failure!\\n\ /*没有申 exit(0); /*退出*/
请成功*/
if(fread(p,sizeof(Node),1,fp)==1) /*一次从文件中读取一条学生成
{ }
p->next=NULL; r->next=p;
r=p; /*r指针向后移一个位
绩记录*/
置*/
fclose(fp); /*关闭文件*/ while(l)
{
p=r;
menu();
printf(\请选择服务(0~6):\ /*显示提示信息*/ scanf(\
if(select==0) {
if(save==1) /*若对链表的数据有修改且未进行存盘操作,则此标
{
printf(\是否保存之文件?(y/n):\ scanf(\ if(ch=='y'||ch=='Y')
志为1*/
Save(l);