本程序首先利用主函数设计菜单选择界面,主函数中根据用户选择项转入相应功能函数,如果输入错误,主函数给出相应提示。其中用到变量j=1控制其循环运行。
程序运行后的功能有:
(1)菜单选择界面
(2)建立通讯录记录
(3)插入联系人记录
(4)查找联系人记录(名称和编号查询)
(6)删除联系人记录(按要求仅删除Head->next)
(7)输出所有联系人记录
(8)退出程序
- #include<stdio.h>
- #include "string.h"
- #include "stdlib.h"
- typedef struct { /*通讯录结点类型*/
- char num[5]; /*编号*/
- char name[9]; /*姓名*/
- char sex[3]; /*性别*/
- char phone[13]; /*电话*/
- char addr[31]; /*地址*/
- } DataType;
- typedef struct node { /*结点类型定义*/
- DataType data; /*结点数据域*/
- struct node* next; /*结点指针域*/
- } ListNode;
- typedef ListNode* LinkList;
- LinkList head;
- ListNode* p;
- LinkList CreateList(void);
- void InsertNode(LinkList head, ListNode* p);
- ListNode* ListFind(LinkList head);
- void DelNode(LinkList head);
- void PrintList(LinkList head);
- /*******尾插法建立带头结点的通讯录链表算法*******/
- LinkList CreateList(void)
- {
- LinkList head = (ListNode*)malloc(sizeof(ListNode)); /*申请头结点*/
- ListNode* p, * rear;
- char flag='y'; //int flag=0; /*结束标志置0*/
- rear = head; /*尾指针初始指向头结点*/
- while (flag=='y')
- {
- p = (ListNode*)malloc(sizeof(ListNode)); /*申新结点*/
- printf("编号 姓名 性别 电话 地址 \n");
- printf("-----------------------------------------------\n");
- printf("\n添加的编号:\n");
- scanf("%s", p->data.num);
- printf("\n添加的姓名:\n");
- scanf("%s", p->data.name);
- printf("\n性别:\n");
- scanf("%s", p->data.sex);
- printf("\n电话:\n");
- scanf("%s", p->data.phone);
- printf("\n地址:\n");
- scanf("%s", p->data.addr);
- rear->next = p; /*新结点连接到尾结点之后*/
- rear = p; /*尾指针指向新结点*/
- printf("继续建表?(y/n):");
- getchar();
- scanf("%c", &flag);
- }
- rear->next = NULL; /*终端结点指针置空*/
- return head; /*返回链表头指针*/
- }
- /*********在通讯录链表head中插入结点************/
- void InsertNode(LinkList head, ListNode* p)
- {
- p->next = head->next;
- head->next = p;
- }
- /**********有序通讯录链表的查找 ****************/
- ListNode* ListFind(LinkList head)
- {
- ListNode* p;
- char num[5];
- char name[9];
- char pp;
- printf("==================\n");
- printf(" a. 按编号查询 \n");
- printf(" b. 按姓名查询 \n");
- printf("==================\n");
- printf(" 请 选 择: ");
- p = head->next;
- scanf("%c", &pp);
- if (pp == 'a' || pp == 'A')
- {
- printf("请输入要查找者的编号:");
- scanf("%s", num);
- while (p && strcmp(p->data.num, num) != 0) p = p->next;
- }
- else if (pp == 'b' || pp == 'B') {
- printf(" 请输入要查找者的姓名:");
- scanf("%s", name);
- while (p && strcmp(p->data.name, name) != 0) p = p->next;
- }
- else
- p = NULL;
- return p;
- }
- /********通讯录链表上的结点删除*****************/
- void DelNode(LinkList head)
- {
- LinkList temp = head->next;
- head->next = head->next->next;
- free(temp);
- }
- /********通讯录链表的输出函数 **********/
- void PrintList(LinkList head)
- {
- LinkList temp = head->next;
- while (temp != NULL)
- {
- printf("地址%s,名字%s,数字%s,电话%s,性别%s\n", temp->data.addr, temp->data.name, temp->data.num, temp->data.phone, temp->data.sex);
- temp = temp->next;
- }
- }
- ListNode* Creatnode() {
- LinkList p = (ListNode*)malloc(sizeof(ListNode)); /*申请头结点*/
- printf("编号 姓名 性别 电话 地址 \n");
- printf("-----------------------------------------------\n");
- printf("\n添加的编号:\n");
- scanf("%s", p->data.num);
- printf("\n添加的姓名:\n");
- scanf("%s", p->data.name);
- printf("\n性别:\n");
- scanf("%s", p->data.sex);
- printf("\n电话:\n");
- scanf("%s", p->data.phone);
- printf("\n地址:\n");
- scanf("%s", p->data.addr);
- return p;
- }
- int main()
- {
- int choice, j = 1;
- while (j)
- {
- printf("\n\n\n\n\n");
- printf("\t\t\t\t通 信 录 链 表 \n");
- printf("\n\t\t\t******************************");
- printf("\n\t\t\t* 1.通讯录链表的建立 *");
- printf("\n\t\t\t* 2.通讯者结点的插入 *");
- printf("\n\t\t\t* 3.通讯者结点的查询 *");
- printf("\n\t\t\t* 4.通讯者结点的删除 *");
- printf("\n\t\t\t* 5.通讯录链表的输出 *");
- printf("\n\t\t\t* 0.退出通讯录管理系统 *");
- printf("\n\t\t\t******************************");
- printf("\n\t\t\t请选择菜单号(0--5):");
- scanf("%d", &choice);
- getchar();
- switch (choice)
- {
- case 1:
- {
- head = CreateList();
- break;
- }
- case 2:
- {
- InsertNode(head, Creatnode());
- break;
- }
- case 3:
- {
- LinkList temp = ListFind(head);
- if(temp!=NULL)
- printf("地址%s,名字%s,数字%s,电话%s,性别%s\n", temp->data.addr, temp->data.name, temp->data.num, temp->data.phone, temp->data.sex);
- break;
- }
- case 4:
- {
- DelNode(head);
- break;
- }
- case 5:
- {
- PrintList(head);
- break;
- }
- case 0:
- default:
- return 0;
- }
- }
- }
666 大佬牛b!!!!!!