小小项目:1简易通讯录

来源:互联网 发布:java获取webapp下路径 编辑:程序博客网 时间:2024/06/04 19:40

今天做了个项目,第一次,问题可能比较多。

写的也比较不规范,以后经量该。


先是头文件

#ifndef __LinkList_H__#define __LinkList_H__#define FALSE -1#define TRUE 0typedef struct LinkData           //结构体存数据{int id;char name[15];char phone_num[15];char house[30];char telephone[10];}LinkData;typedef struct _node              //声明链表{LinkData data;struct _node *next;}NODE;// 创建链表NODE * Create_List();// 插入元素:尾插int Insert_Last(NODE* h,LinkData data);// 求链表长度:通过函数返回值返回int Get_Len(NODE* h);// 清空所有结点int Clean_List(NODE* h);// 销毁链表int Destroy(NODE* h);//主菜单void menu(NODE* h);//命令一:添加通讯录void add_address_list(NODE* h);//命令二:排序显示(按照ID排序)void Risplay_Id(NODE* h);//显示通讯录void Risplay(NODE* h);//命令三:搜索好友void Find_friend(NODE* h);//搜索好友:按名字搜索(只能搜索第一个)void  Find_name(NODE* tmp,char *data,int x);//命令四:删除好友void  Del_name_id(NODE* h);// 删除元素:根据名字删除指定数据(只能删除第一个)int Delete_name(NODE* h, char *data);//查找,按名字输出void Risplay_name(NODE* h, char *data);// 删除元素:根据ID删除指定数据(只能删除第一个)int Delete_id(NODE* h,int id);//查找name的数据个数,并且返回int Find_name1(NODE* h,char *data);

再是主程序

/*2017年7月25日08:51:15项目:制作一个同学通讯录*/#include<stdio.h>#include"LinkList.h"#include<stdlib.h>#include<string.h>int main(){system("clear");              //清屏NODE * h = Create_List();   //创建一个通讯录(头结点)if (h == NULL )return FALSE;  menu(h);                     //调用菜单 return 0;}// 创建一个头结点线性链表NODE * Create_List(){NODE *head = (NODE *)malloc(sizeof(NODE)/sizeof(char));if (head == NULL){printf("创建失败。\n");return NULL;}head->next = NULL;return head;} //菜单void menu(NODE* h)      {      system("clear");    //定义主菜单char *menu[] = {"                          ------------------------------------------------\n","                          |                                              |\n","                          |                    通讯录                    |\n","                          |                                              |\n","                          |                                              |\n","                          |       A:添加好友           B:列表好友       |\n","                          |                                              |\n","                          |                                              |\n","                          |       c:搜索好友           D:删除好友       |\n","                          |                                              |\n","                          |                 (q退出软件)                  |\n","                          ------------------------------------------------\n"};int i;for (i=0;i<12;i++)printf("%s",menu[i]);char ch;while(1){scanf("%c",&ch);while(getchar() != '\n');if (ch!='a' && ch!='b' && ch!='c' && ch!='d' && ch!='q'){printf("input again!\n");continue;}switch (ch){case 'a':add_address_list(h);break ;case 'b':Risplay_Id(h);break ;case 'c':Find_friend(h);break ;case 'd':Del_name_id(h);break ;case 'q':break ;}break;}}//命令一:添加通讯录void add_address_list(NODE* h){if (h == NULL)return ;system("clear"); LinkData data;printf("请输入好友ID:");scanf("%d",&data.id);printf("请输入好友姓名(英文):");scanf("%s",data.name);printf("请输入好友电话号码:");scanf("%s",data.phone_num);printf("请输入好友家庭住址:");scanf("%s",data.house);printf("请输入好友公共电话:");scanf("%s",data.telephone);if (Insert_Last(h,data)==TRUE)printf("添加成功!\n");else printf("添加失败!\n");getchar();printf("按任意键返回返回\n");char ch;scanf("%c",&ch);menu(h); }// 插入元素:尾插int Insert_Last(NODE* h,LinkData data){if ( h == NULL )return FALSE;NODE *node = (NODE *)malloc(sizeof(NODE)/sizeof(char));if (node == NULL)return FALSE;node->data = data;node->next = NULL;NODE *tmp = h;while(tmp->next){tmp = tmp->next;}tmp->next = node;return TRUE;    }//命令二:排序显示(按照ID排序)void Risplay_Id(NODE* h){if (h == NULL || h->next == NULL)    return ;NODE *tmp;int len = Get_Len(h);int i,j;for(i=0;i<len-1;i++){tmp = h->next;for(j=0;j<len-i-1;j++){if(tmp->data.id > tmp->next->data.id){LinkData tmp1;tmp1            = tmp->next->data;tmp->next->data = tmp->data;tmp->data       = tmp1;}tmp = tmp->next;}}Risplay(h);getchar();printf("按任意键返回返回\n");char ch;scanf("%c",&ch);menu(h); }//显示通讯录void Risplay(NODE* h){if (h == NULL)return ;system("clear"); while(h->next != NULL){printf("好友ID:%d\n",h->next->data.id);printf("好友姓名(英文):%s\n",h->next->data.name);printf("好友电话号码:%s\n",h->next->data.phone_num);printf("好友家庭住址:%s\n",h->next->data.house);printf("好友公共电话:%s\n\n",h->next->data.telephone);h = h->next; }printf("\n");}// 求链表长度:通过函数返回值返回int Get_Len(NODE* h){if(h == NULL )return FALSE;int count = 0;NODE* tmp = h;while(tmp->next){count ++;tmp = tmp->next;}return count;}//命令三:搜索好友void Find_friend(NODE* h){if (h == NULL )    return ;system("clear");if(h->next == NULL){printf("没有好友,查找失败。\n");return ;}char data[15];printf("请输入你要查找的成员名字:");scanf("%s",data);int x = 1;     //x表示搜索的次数NODE* tmp = h->next;Find_name(tmp,data,x);getchar();printf("按任意键返回返回\n");char ch;scanf("%c",&ch);menu(h); }//搜索好友:按名字搜索(只能搜索第一个)void  Find_name(NODE* tmp,char *data,int x)  {while(tmp){if(strcmp(tmp->data.name,data) == 0 )break;tmp = tmp->next;}if (tmp == NULL && x == 1)        //第一次查找,没有找到{printf("查找失败,没有该好友。\n");return ;}if (tmp == NULL && x != 1)        //非第一次查找        return ;printf("好友ID:%d\n",tmp->data.id);printf("好友姓名(英文):%s\n",tmp->data.name);printf("好友电话号码:%s\n",tmp->data.phone_num);printf("好友家庭住址:%s\n",tmp->data.house);printf("好友公共电话:%s\n\n",tmp->data.telephone);if (tmp != NULL )Find_name(tmp->next,data,x+1);}//命令4:删除好友void  Del_name_id(NODE* h){if (h == NULL)return ;system("clear");Risplay(h);                //先查看元素char data[15];printf("请输入你要删除的成员名字:");scanf("%s",data);int x = Find_name1(h,data);   //x表示找到的个数if( x == 1)              //找到一个{if(Delete_name(h,data) == TRUE)   //删除printf("删除成功!\n");else{printf("删除失败,没有该好友。\n");}}else if( x>1)                 //找到两个以上{Risplay_name(h,data);printf ("请在输入你要删除的成员ID:");int id;scanf("%d",&id);if(Delete_id(h,id) == TRUE){printf("删除成功\n");}else{printf("删除失败,没有该好友。\n");}}getchar();printf("按任意键返回返回\n");char ch;scanf("%c",&ch);menu(h); }//查找name的数据个数,并且返回int Find_name1(NODE* h,char *data){if (h == NULL )    return ;if(h->next == NULL){printf("表为空,删除失败。\n");return FALSE;}int count = 0;NODE* tmp = h->next;while(tmp){if(strcmp(tmp->data.name,data) == 0 )count ++;tmp = tmp->next;}if (count == 0)       {printf("删除失败,没有该好友。\n");return FALSE;}return count ;}// 删除元素:根据名字删除指定数据(只能删除第一个)int Delete_name(NODE* h, char *data){if (h == NULL)return FALSE;NODE* tmp = h;while(tmp->next){if(strcmp(tmp->next->data.name,data) == 0)break;tmp = tmp->next;}if(tmp->next == NULL)return FALSE;NODE *p = tmp->next;tmp->next = p->next;free(p);return TRUE;}//查找,按名字输出void Risplay_name(NODE* h, char *data){if (h == NULL )    return ;system("clear");NODE* tmp = h->next;while(tmp){if(strcmp(tmp->data.name,data) == 0 ){printf("好友ID:%d\n",tmp->data.id);printf("好友姓名(英文):%s\n",tmp->data.name);printf("好友电话号码:%s\n",tmp->data.phone_num);printf("好友家庭住址:%s\n",tmp->data.house);printf("好友公共电话:%s\n\n",tmp->data.telephone);}tmp = tmp->next;}}// 删除元素:根据ID删除指定数据(只能删除第一个)int Delete_id(NODE* h,int id){if (h == NULL)return FALSE;NODE* tmp = h;while(tmp->next){if(id == tmp->next->data.id)break;tmp = tmp->next;}if(tmp->next == NULL)return FALSE;NODE *p = tmp->next;tmp->next = p->next;free(p);return TRUE;}


原创粉丝点击