1. 程式人生 > >用連結串列實現簡單的通訊錄功能

用連結串列實現簡單的通訊錄功能

學習了連結串列後我用連結串列寫了一個簡單的通訊錄程式,主要能實現以下功能

使用連結串列實現增加(在增加人員的過程中有一個自動排序功能,比如按姓名排序)、刪除、修改、查詢的功能;
(1)新增使用者資訊(號碼長度   號碼是否重複)
(2)列出好友資訊(按姓名排序)
(3)查詢好友資訊(按姓名查詢)
(4)刪除好友
(5)退出

#ifndef _ADDRESS_H_
#define _ADDRESS_H_

#define N 30
#define FAILURE 10000
#define SUCCESS 10001

struct addresslist
{
	char ID[N];
	char Name[N];
	char Add[N];
	char Tel[N];
	char HomeTel[N];
	struct addresslist *next;
};

typedef struct addresslist Address;
typedef Address *LinkList;

#endif

#include<stdio.h>
#include"address_list.h"
#include<stdlib.h>
#include<string.h>

void show()
{
	system("clear");
	printf("******************************************\n\n");
	printf("*******   WELCOME TO ADDRESS LIST  *******\n\n");
	printf("******************************************\n\n");
	sleep(2);
	system("clear");
}

void PrintInfo()
{
	printf("**************************************************************\n\n");
	printf("                 1.新增使用者資訊                                 \n");
	printf("                 2.列出好友資訊                                 \n");
	printf("                 3.查詢好友資訊                                 \n");
	printf("                 4.刪除好友                                          \n");
	printf("                 5.修改好友資訊                                 \n");
	printf("                 6.退出                                             \n\n");
	printf("**************************************************************\n\n");
	printf("Please input your choice :\n");
}

void LinkInit(LinkList *L)
{
	(*L)=(LinkList)malloc(sizeof(Address));
	(*L)->next = NULL;
}

int InsertInfo(LinkList *L)
{
	LinkList temp = *L;
	LinkList p;

	 p=(LinkList)malloc(sizeof(Address));
	 
	 printf("Please input the id:\n");
	 scanf("%s",p->ID);
	 
	 printf("Please input the name:\n");
	 scanf("%s",p->Name);
	 
	 printf("Please input the add:\n");
	 scanf("%s",p->Add);
	 
	 printf("Please input the tel:\n");
	 scanf("%s",p->Tel);
	 
	 while(strlen(p->Tel)!=11)
	 {
		 printf("Error,Please input the tel again!\n");
		 scanf("%s",p->Tel);
		 break;
	 }
	 
	 printf("Please input the hometel:\n");
	 scanf("%s",p->HomeTel);
		
		while(strlen(p->HomeTel)!=8)
		{
			printf("Error,Please input the hometel again!\n");
			scanf("%s",p->HomeTel);
			break;
		}

		while(temp->next)
		{
			if(strcmp((temp->next)->Tel,p->Tel) == 0)
			{
				printf("The same telphone!\n");
				return 0;
			}
			temp = temp->next;
		}
		
		temp=*L;
		
		if((temp->next)==NULL)
		{
			p->next=temp->next;
			temp->next=p;
			
		}
		else 
		{
			while(temp->next)
			{
				if(strcmp((temp->next)->Name,p->Name)>0)
				{
					p->next=temp->next;
					temp->next=p;
					break;
				}
				temp=temp->next;
			}
			if(temp->next ==NULL)
			{
				p->next = temp->next;
				temp->next =p ;
			}
		}
}

int ListInfo(LinkList L)
{
	if(NULL==L->next)
	{
		printf("The Addresslist is empty!\n");
	}
	else
	{
		LinkList p=L->next;
		while(p)
		{
		printf("ID:%s NAME:%s ADD:%s TEL:%s HOMETEL:%s \n",&p->ID,p->Name,p->Add,p->Tel,p->HomeTel);
		p=p->next;
		}
	}

}

int SearchInfo(LinkList L)
{
	LinkList p = L->next;
	char a[10]={0};
	printf("Please input the name you want to find:\n");
	scanf("%s",a);

	while(p)
	{
		if(strcmp(p->Name,a)==0)
		{
			printf("ID:%s NAME:%s ADD:%s TEL:%s HOMETEL:%s \n",p->ID,p->Name,p->Add,p->Tel,p->HomeTel);
			break;
		}
		else
		{
			p=p->next;
		}
	}
	if(p==NULL)
	{
		printf("No one!\n");
	}

}

int DeleteInfo(LinkList L)
{
	LinkList p=L;
	LinkList temp;
	if(L==NULL)
	{
		return FAILURE;
	}
	
	char a[10]={0};
	printf("Please input the name you want to delete:\n");
	scanf("%s",a);
	
	while(p)
	{
		if(strcmp((p->next)->Name,a)==0)
		{
			temp=p->next;
			p->next=temp->next;
			free(temp);
			printf("Delete Success!\n");
			break;
		}
	}
	return SUCCESS;
}

int ChangeInfo(LinkList *L)
{
	LinkList p=*L;
	LinkList temp;
	LinkList n=*L;
	
	char a[10]={0};
	printf("Please input the name you want to change:\n");
	scanf("%s",a);
	
	while(p->next)
	{
		temp=(LinkList)malloc(sizeof(Address));
		if(strcmp((p->next)->Name,a)==0)
		{
			printf("Please input the information you want to change:ID NAME ADD TEL HOMETEL\n");
			scanf("%s%s%s%s%s",&temp->ID,temp->Name,temp->Add,temp->Tel,temp->HomeTel);
			
			if(strlen(temp->Tel) != 11)
			{
				printf("ERROR Tel!\n");
				return 0;
			}
			if(strlen(temp->HomeTel) != 8)
			{
				printf("ERROR HomeTel!\n");
				return 0;
			}
			while(n->next)
			{
				if(strcmp((n->next)->Tel,temp->Tel) == 0)
				{
					printf("Exist the same tel!\n");
					return 0;
				}
				n = n->next;
			}
			strcpy((p->next)->ID , temp->ID);
			strcpy((p->next)->Name , temp->Name);
			strcpy((p->next)->Add , temp->Add);
			strcpy((p->next)->Tel , temp->Tel);
			strcpy((p->next)->HomeTel , temp->HomeTel);
			printf("Change Success!\n");
break;
}
else
{
p = p->next;
}
}
}

#include <stdio.h>
#include"address_list.h"
#include<stdlib.h>

int main()
{
	LinkList list;

	char choice[10] = {0};
	
	LinkInit(&list);
	
	show();

	while (1)
	{
		PrintInfo();
		scanf("%s", choice);

		switch (atoi(&choice[0]))
		{
			case 1:
				InsertInfo(&list);
				printf("**************************************************************\n\n");
				break;
			case 2:
				ListInfo(list);
				printf("**************************************************************\n\n");
				break;
			case 3:
				SearchInfo(list);
				printf("**************************************************************\n\n");
				break;
			case 4:
				DeleteInfo(list);
				printf("**************************************************************\n\n");
				break;
			case 5:
				ChangeInfo(&list);
				printf("**************************************************************\n\n");
				break;
			case 6:
				exit(1);
				break;
			default:
				printf("Unkown Input!\n");
				break;
		}
	}	


相關推薦

連結串列實現簡單通訊錄功能

學習了連結串列後我用連結串列寫了一個簡單的通訊錄程式,主要能實現以下功能 使用連結串列實現增加(在增加人員的過程中有一個自動排序功能,比如按姓名排序)、刪除、修改、查詢的功能; (1)新增使用者資訊(號碼長度   號碼是否重複) (2)列出好友資訊(按姓名排序) (3)

連結串列實現一個簡單的學生操作管理系統C語言版

#include <stdio.h> #include <math.h> #include <string.h> #include <malloc.h> #include <stdlib.h> #def

連結串列實現通訊錄程式設計

#include <stdio.h> #include <string.h> #include <stdlib.h> struct node             //定義連結串列 {char name[20];char phone_n

通訊錄連結串列實現,基本功能都有)

1、標頭檔案 #ifndef _LIST_H_ #define _LIST_H_ #include <stdio.h> #define FAILURE 1000 #define SUCCESS 1001 #define FALSE 1002 #define

棧的建立-----連結串列實現

設計: 1、建立Node節點類(儲存連結串列的前節點和本節點儲存的元素) 2、節點儲存的是泛型資料 3、建立一個棧的介面----定義如下函式: 4、介面實現類(棧頂元素指標和連結串列元素計數器) 程式碼實現: 介面類:StackADT  publi

Java連結串列實現

上一篇實現了佇列,這一篇我們實現棧。 棧是後入先出的資料結構。 連結串列中插入資料有頭插法和尾插法,本篇我們使用頭插法。 不多說直接上程式碼 連結串列的節點定義和上一篇使用的是同一個,可以參考上一篇。 public class StackImpl<T> { p

Java連結串列實現佇列

佇列--先入先出 棧---後入先出 連結串列實現佇列和棧。首先我們需要構建一個連結串列。連結串列有哪幾要素?   1、連結串列本身的value 2、連結串列的next指標,next指標指的還是同樣型別的值。 下邊看程式碼 public class Element&l

十三 連結串列實現

用連結串列實現棧:     連結串列棧: package com.lt.datastructure.stackqueue; /* * 使用連結串列實現棧 */ public class LinkedListStack<E> implements Stack

【演算法】C++連結串列實現一個箱子排序附原始碼詳解

01 箱子排序 1.1 什麼是分配排序? 分配排序的基本思想:排序過程無須比較關鍵字,而是通過"分配"和"收集"過程來實現排序.它們的時間複雜度可達到線性階:O(n)。 1.2 什麼是箱子排序? 箱子排序是分配排序的一種,箱子排序也稱桶排序(Bucket Sort),其基本思想是:設定若干個箱子,依次掃描待

資料結構------使用單向連結串列實現簡單的學生成績管理操作

                                                  函式宣告  ypedef int status; typedef int ElemType; //連結串列節點及連結串列資料表示定義 typedef struct No

資料結構:連結串列實現棧的括號匹配

完成以下程式,並在右邊空白處,對錯誤進行修改,並記錄下程式執行結果: 1. 編寫演算法,判斷一表達式中的括號是否配對,包括大、中、小三類括號。 連結串列版本: #include <cstdio> #include <cmath> #inclu

Problem E: 連結串列實現約瑟夫環

Description 你聽說過約瑟夫問題嗎?問題大致如下:首先n個人圍成一個圈,標記為1到n號。接著,從1號開始報數(從1開始),然後2號報數,然後3號。。。當有人報到到m時,這個人就要踢出比賽,然後從被踢出的人的下一個人開始,重新報數(從1開始)。這樣經過n-1次後,就只剩下了一個人,問最後剩下的

佇列C++ | 連結串列實現佇列_2

 用連結串列實現佇列 /*Queue - Linked List implementation*/ #include<stdio.h> #include<stdlib.h> struct Node { int data; struct Node* next;

Java資料結構之——棧:連結串列實現

class Node<E>{ E data; Node<E> next = null; public Node(E data){ this.data = data; } } public class ListStack<

資料結構三.連結串列實現

程式碼如下: package dataStruct; class Node { Object element; Node next; public Node(Object element){ this(element,null); } /**

連結串列實現兩個集合求並集

 #include<stdio.h> #include<stdlib.h> #include<time.h>  typedef struct node{      int data;      struct node *next;  } LinkList;  LinkLis

c語言將資料寫入檔案(連結串列實現

/*c語言將資料寫入檔案,用連結串列實現*/ #include #include #include /*定義結構體*/ typedef struct Node { char id[10];

連結串列實現棧(Java版)

/** /** * 用單鏈表實現棧 * * 表示連結串列的一個節點 * @author ly * */ public class Node { Object element; Node next; public Node(Object element){ this(elemen

【資料結構】連結串列實現多項式運算

一元多項式的運算包括加法減法和乘法,而多項式的加法和乘法都可以依靠多項式的加法來實現,所以本文僅僅講解如何用連結串列實現一元多項式的加法。 數學上的一元多項式的表示是p(x) = p0 + p1 * x + p2 * x^2 + p3 * x^3 + … +

棧 stack 連結串列實現

#ifndef STACKWITHLINKEDLIST_H #define STACKWITHLINKEDLIST_H #include "LinkedList.h" template<typename T> class Stack{ public: