typedef struct{ ist;linklist head; listnode *p;
int menu_select( ); linklist createlist(void);
void insertnode(linklist head,listnode *p); listnode *listfind(linklist head); void delnode(linklist head); void printlist(linklist head); void main() {
for( ; ; ){
switch(menu_select() ) {
case 1:
printf(\" ***********************************************\\n\");
printf(\" ************** 通讯录链表的建立 ***************\\n\");
printf(\" ***********************************************\\n\"); head=createlist(); break; case 2:
printf(\" ***********************************************\\n\"); printf(\" ************** 通讯录信息添加 *****************\\n\");
printf(\" ***********************************************\\n\"); printf(\" ** 编号(4) 姓名(8) 单位(20) 电话(11) 地址(30)**\\n\"); printf(\" ***********************************************\\n\"); p=(listnode *)malloc(sizeof(listnode));
scanf(\"%s%s%s%s%s\e,p->data.addr);
insertnode(head,p); break; case 3:
printf(\" ******************************\\n\"); printf(\" ******* 通讯录信息查询 *******\\n\");
printf(\" ******************************\\n\"); p=listfind(head); if(p!=NULL){
printf(\" ** 编号 姓名 单位 电话 地址**\\n\"); printf(\" ------------------------------\\n\");
printf(\"%s,%s,%s,%s,%s\\n\phone,p->data.addr);
printf(\" ------------------------------\\n\"); } else
printf(\"没有你要找的人 ! \\n\"); break; case 4:
printf(\" ***********************************\\n\"); printf(\" **********通讯信息的删除***********\\n\"); printf(\" ***********************************\\n\"); delnode(head); break; case 5:
printf(\" ***********************************\\n\");
printf(\" **********通讯录链表的输出*********\\n\"); printf(\" ***********************************\\n\"); printlist(head); break; case 0:
printf(\"\ 谢谢您的使用! \\n\"); return; } } }
int menu_select() {
int sn;
printf(\" \\n\"); printf(\" \\n\"); printf(\" \\n\");
printf(\" 通讯录管理系统 \\n\"); printf(\" \\n\");
printf(\" ======================\\n\"); printf(\" 1.通讯录链表的建立\\n\"); printf(\" 2.通讯者结点的插入\\n\"); printf(\" 3.通讯录链表的查询\\n\"); printf(\" 4.通讯者结点的删除\\n\");
printf(\" 5.通讯录链表的输出\\n\"); printf(\" 0.退出通讯录管理系统\\n\");
printf(\" ======================\\n\"); printf( \" 请选择操作0-5 \\n\\n\"); for(; ;) {
scanf(\"%d\ if(sn<0||sn>5)
printf(\"\输入错误\\n\"); else break; }
return sn; }
linklist createlist(void) {
linklist head=(listnode *)malloc(sizeof(listnode)); listnode *p,*rear; int flag=1; rear=head; while(flag==1) {
p=(listnode *)malloc(sizeof(listnode));
printf(\" 编号(4) 姓名(8) 单位(20) 电话(11) 地址(31) \\n\"); printf(\" --------------------------------------------\\n\");
scanf(\"%s%s%s%s%s\e,p->data.addr);
rear->next=p; rear=p;
printf(\" 继续建表吗? (1.是/0.不):\"); scanf(\"%d\ }
if(flag==1)
printf(\"创建成功!\\n\"); rear->next=NULL; return head; }
void insertnode(linklist head,listnode *p) {
listnode *p1,*p2;
p1=head; p2=p1->next;
while(p2!=NULL && strcmp(p2->data.num,p->data.num)<0) {
p1=p2;
p2=p2->next; }
p1->next=p; p->next=p2;
printf(\"插入成功!\\n\"); }
listnode * listfind(linklist head) {
listnode * p; char num[6]; char name[10]; int xz;
printf(\"--------------------\\n\"); printf(\" 1.编号查询\\n\"); printf(\" 2.姓名查询\\n\"); printf(\"--------------------\\n\"); printf(\"请选择: \\n\"); p=head->next; scanf(\"%d\ if (xz==1){
printf(\" 请输入要查找的编号: \"); scanf(\"%s\
while(p && strcmp(p->data.num,num)<0) p=p->next;
if (p==NULL || strcmp(p->data.num,num)>0) p=NULL; }
else
if(xz=2){
printf(\"请输入要查询者的姓名: \"); scanf(\"%s\
while(p && strcmp(p->data.name,name)!=0) p=p->next; } return p; }
void delnode(linklist head)
{
int jx;
listnode *p,*q; p=listfind(head); if(p==NULL){
printf(\"没有要删除的通讯者!:\\n\"); return; }
printf (\"真的要删除该结点吗?(1.是/0.不):\"); scanf(\"%d\ if (jx==1){ q=head;
while(q!=NULL && q->next!=p) q=q->next;
q->next=p->next; free(p);
printf(\"通讯者已被删除!\\n\"); } }
void printlist(linklist head) {
listnode * p;
p=head->next;
printf(\" 编号 姓名 单位 电话 地址\\n\"); printf(\" -----------------------------\\n\"); while(p!=NULL) {
printf(\" %s, %s, %s, %s, %s\\n\ata.unit,p->data.phone,p->data.addr); printf(\" ------------------------------\\n\"); p=p->next; } }