进阶项目14-链表版通信录
来源:互联网 发布:知豆电动汽车租赁价格 编辑:程序博客网 时间:2024/05/17 01:49
任务和代码:利用链表存储数据,写一个通信录程序,能够记录多个联系人的编号、姓名、性别、联系电话、地址,完成数据的录入、添加、删除、修改以及查询功能。
main.cpp 文件
/*文件名:main.c作者:小风景完成日期:2016.8.18问题描述:利用链表存储数据,写一个通信录程序,能够记录多个联系人的编号、姓名、性别、联系电话、地址,完成数据的录入、添加、删除、修改以及查询功能。程序输出:*/#include <stdio.h>#include "phone.h"int main(){ int n = 0; do { 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("请选择:"); fflush(stdin); scanf("%d",&n); execute(n); }while(n != 0); return 0;}
phone.h 文件
#ifndef PHONE_H_INCLUDED#define PHONE_H_INCLUDED#include <stdlib.h>#include <stdio.h>#include <malloc.h>typedef struct date{ char uuid[20]; char name[50]; char sex[5]; char phone[20]; char address[1000];}Date;typedef struct node{ Date dates; struct node *next;} Node;void execute(int n);void createchain();void insert();void deletenode();int querylist(char *num);void modify();void out();#endif // PHONE_H_INCLUDED
phone.cpp文件
#include <stdio.h>#include <string.h>#include <stdlib.h>#include "phone.h"Node *head = NULL;//分支结构,进入判断选择那个函数执行void execute(int n){ char num[20] = {0}; switch(n) { case 0: printf("欢迎再次使用,谢谢!"); break; case 1: createchain(); break; case 2: insert(); break; case 3: deletenode(); break; case 4: printf("请输入查询的编号:"); fflush(stdin); scanf("%s",num); querylist(num); break; case 5: modify(); break; default: printf("您的输入不正确,请重新选择!\n"); break; } return;}//创建初始链表void createchain(){ int number = 0; Node *p = NULL; Node *q1 = NULL; Node *q2 = NULL; printf("请输入初始化的数据大小n:"); fflush(stdin); scanf("%d",&number); if(0 < number) { printf("请输入联系人的编号、姓名、性别、联系电话、地址:\n"); while(number--) { q1 = head; p = (Node *)malloc(sizeof(Node)); fflush(stdin); scanf("%s %s %s %s %s",p->dates.uuid,p->dates.name,p->dates.sex,p->dates.phone,p->dates.address); if(head == NULL) { head = p; p->next = NULL; } else if(atoi(p->dates.uuid) - atoi(q1->dates.uuid) < 0) { head = p; p->next = q1; } else { while((NULL != q1) && (atoi(p->dates.uuid) - atoi(q1->dates.uuid) >= 0)) { q2 = q1; q1 = q1->next; } p->next = q2->next; q2->next= p; } } } else { printf("您的输入不正确!\n"); } printf("\n"); out(); return;}void out(){ Node *p = head; printf("链表中的数据为:\n"); while(p!= NULL) { printf("%s %s %s %s %s\n",p->dates.uuid,p->dates.name,p->dates.sex,p->dates.phone,p->dates.address); p = p->next; } printf("\n"); return;}void insert(){ Node *p = (Node*)malloc(sizeof(Node)); Node *q1 = head; Node *q2 = NULL; printf("请输入插入联系人的编号、姓名、性别、联系电话、地址:\n"); fflush(stdin); scanf("%s %s %s %s %s",p->dates.uuid,p->dates.name,p->dates.sex,p->dates.phone,p->dates.address); if(NULL == head) { printf("原链表中没有数据,插入数据作为首节点!\n"); head = p; p->next = NULL; } while((NULL != q1) && (atoi(p->dates.uuid) - atoi(q1->dates.uuid) >= 0)) { q2 = q1; q1= q1->next; } p->next = q2->next; q2->next = p; out(); return;}void deletenode(){ Node *p = head; Node *q = NULL; char num[20] = {0}; int flag = -1; int result = 0; printf("请输入要删除数据的编号:"); fflush(stdin); scanf("%s",num); result = querylist(num); if(0 != result) { printf("您所输入的编号不存在!\n"); return; } printf("您是否需要这条数据,删除请输入1,输入其他无效:"); fflush(stdin); scanf("%d",&flag); if(flag == 1) { while((NULL != p) && (atoi(p->dates.uuid) - atoi(num) != 0)) { q = p; p = p->next; } q->next = p->next; free(p); } out(); return;}int querylist(char *num){ Node *p = head; int flag = 0; if(NULL == head) { printf("链表中没有数据!\n"); flag = -1; } while(NULL != p) { if(strcmp(p->dates.uuid,num) == 0) { printf("编号为%s的数据:%s %s %s %s %s \n",num,p->dates.uuid,p->dates.name,p->dates.sex,p->dates.phone,p->dates.address); break; } p = p->next; } if(NULL == p) { printf("没有找到编号为%s的数据\n",num); flag = 1; } return flag;}void modify(){ char num[20] = {0}; Node *p = head; Node *q = (Node *)malloc(sizeof(Node)); Node *q1 = NULL; int result = 0; printf("请输入要修改数据的编号:"); fflush(stdin); scanf("%s",num); result = querylist(num); if(result != 0) { printf("链表中没有您需要修改的数据!\n"); return; } printf("请输入您需要修改的编号、姓名、性别、联系电话、地址:\n"); fflush(stdin); scanf("%s %s %s %s %s",q->dates.uuid,q->dates.name,q->dates.sex,q->dates.phone,q->dates.address); while(NULL != p) { if(strcmp(p->dates.uuid,num) == 0) { if(NULL == q1) { q->next = p->next; head = q; } else { q->next = q1->next; q1->next = q; } free(p); break; } q1 = p; p = p->next; } return;}
程序运行结果:
总结:这个程序中海油不足,如程序一些部分的代码重复,还有修改数据时必须按照格式输入,而不能制定修改一条记录中的某一个部分。
0 0
- 进阶项目14-链表版通信录
- 通信录
- 通信录
- 通信录
- 菜鸟学习历程【18】通信录项目实战
- 个人通信录
- Android通信录
- 通信录获取
- Android通信录操作
- 通信录操作
- Android通信录
- iOS6访问通信录
- 读取通信录
- Android 通信录操作
- 管理Android通信录
- 个人简单通信录
- android----通信录操作
- 通信录的访问
- Activity介绍
- 安装lnmp1.3版流程
- Android创建浮动的上下文菜单,实现微信通讯录列表长按弹出菜单项功能
- OpenSceneGraph实现的NeHe OpenGL教程 - 第三十四课
- Android Gradle Plugin的Transform API
- 进阶项目14-链表版通信录
- xml文件中,<beans >中的xmlns,xmlns:xsi,xmlns:context,等等
- 当 Archlinux 中 Quartus prime 的 MegaWizard 失去响应时的处理
- logback 常用配置详解(二) <appender>
- 使用libs下的.so动态库文件
- 外星人入侵_纪中3077_spfa
- RESTful入门概述
- Bootstrap学习(一)——Bootstrap CSS
- 编写一个进度条