C语言课程设计报告通讯录设计报告说明 下载本文

}

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);