简单通讯录
来源:互联网 发布:易语言源码网 编辑:程序博客网 时间:2024/05/21 07:12
#include<stdio.h>#include<string.h>#include<stdlib.h>#include<time.h>typedef struct NODE{ int id; int age; char *name; char *phone; struct NODE *pNext;}List;typedef struct { int count; int item; int CurrentPage; int PageCount;}Page;char *GetString();List *GetNode();List *GetNodeIn(char *name,int age, char *phone);int GetID();void FAdd(List **,List **,List *);void FDelete(int ,List **,List **);void FInert(int ,List **,List **,List *);void FClear(List **,List **);void FUpdate(int ,List *);void FPrint(List *);typedef struct LINK{ List *top; List *end; void (*fp_Add)(List **,List **,List *); void (*fp_Delete)(int,List **,List **); void (*fp_Clear)(List **,List **); void (*fp_Insert)(int ,List **,List **,List *); void (*fp_Update)(int ,List *);}Link;Link ListUtil={NULL,NULL,FAdd,FDelete,FClear,FInert,FUpdate};char GetKey();void Finit();void PrintMenu(Page );Page *Tongji(List *);void FenYe(Page *,List *);void ShowIn(int begin,int end,List *top);void HomePage();void ShowAllContacts(List *top);void FQuery();void Delete();void Update();
//m.h
#include"m.h"char g_menu_type='1';char g_key=-1;int main(){ /* Page *page=NULL;*/ srand(time(0)); Finit(); while (1) { HomePage(); switch (GetKey()) { case '1': g_menu_type='1'; ShowAllContacts(ListUtil.top); break; case '2': g_menu_type='2'; ListUtil.fp_Add(&ListUtil.top,&ListUtil.end,GetNode()); break; case '3': g_menu_type='3'; FQuery(); break; case '4': g_menu_type='4'; Delete(); break; case '5': g_menu_type='5'; Update(); break; case 'q': return 0; break; default: printf("输入错误请重新输入!\n"); break; } } return 0;}int GetID(){ static int id=1; return id++;}char *GetString(){ size_t size=50; size_t count=0; char *str=(char *)malloc(size); char *jstr=str; char *newStr=NULL; char c; while ((c=getchar())!='\n') { count++; *str++=c; if(count+1==size) { size+=5; newStr=(char *)malloc(size); *str=0; strcpy_s(newStr,size,jstr); free(str); jstr=str=newStr; str+=count; } } *str=0; return jstr;}List *GetNode(){ List *node=(List *)malloc(sizeof(List)); node->id=GetID(); printf("请输入姓名:\n"); node->name=GetString(); printf("请输入年龄:\n"); node->age=atoi(GetString()); printf("请输入手机号:\n"); node->phone=GetString(); node->pNext=NULL; return node;}List *GetNodeIn(char *name,int age, char *phone){ List *node=(List *)malloc(sizeof(List)); node->id=GetID(); node->name=name; node->age=age; node->phone=phone; node->pNext=NULL; return node;}void FAdd(List **pptop,List **ppend,List *node){ if(*pptop==NULL) { *pptop=node; } else { (*ppend)->pNext=node; } *ppend=node;}void FDelete(int bh,List **pptop,List **ppend){ List *top=*pptop; List *del=NULL; if(top->id==bh) { del=top; *pptop=top->pNext; free(del); return ; } while (top->pNext!=NULL) { if(top->pNext->id==bh) { del=top->pNext; top->pNext=top->pNext->pNext; free(del); if(top->pNext==NULL) { *ppend=top; } return ; } top=top->pNext; }}void FInert(int bh,List **pptop,List **ppend,List *node){ List *top=*pptop; if(top->id >=bh) { node->pNext=top; *pptop=node; return ; } while(top->pNext!=NULL) { if(top->pNext->id >=bh) { node->pNext=top->pNext; top->pNext=node; return ; } top=top->pNext; } FAdd(pptop,ppend,node);}void FClear(List **pptop,List **ppend){ List *del=NULL; List *top=*pptop; *pptop=NULL; *ppend=NULL; while (top!=NULL) { del=top; top=top->pNext; free(del); }}void FUpdate(int bh,List *top){ char *name=NULL; char *phone=NULL; char *age=NULL; if(top!=NULL) { while (top!=NULL) { if(bh==top->id) { printf("输入你要修改的姓名:"); name=GetString(); if(name!=NULL&&*name!=0) { top->name=name; } printf("输入你要修改的年龄:"); age=GetString(); if(age!=NULL&&*age!=0) { top->age=atoi(age); } printf("输入你要修改的电话:"); phone=GetString(); if(phone!=NULL&&*phone!=0) { top->phone=phone; } return ; } top=top->pNext; } }}char GetKey(){ char *str=NULL; char c; while (str==NULL||*str==0) { str=GetString(); } c=*str; free(str); return c;}void Finit(){ int i,j; char *name=NULL; char *phone=NULL; char *jname; int age; for(i=0;i<151;i++) { name=(char *)malloc(6); phone=(char *)malloc(12); jname=name; for(j=0;j<5;j++) { *name++=rand()%25+97; } *name=0; _itoa_s(rand()%999999999+10000000000,phone,12,10); age=rand()%99; ListUtil.fp_Add(&ListUtil.top,&ListUtil.end,GetNodeIn(jname,age,phone)); }}Page *Tongji(List *top){ Page *page=(Page *)malloc(sizeof(Page)); page->count=0; page->CurrentPage=0; page->PageCount=0; page->item=10; while (top!=NULL) { page->count++; top=top->pNext; } page->PageCount=page->count%page->item==0 ? page->count/page->item :page->count/page->item+1; return page;}void FenYe(Page *page,List *top){ char key ='n'; int begin=0; int end=0; while(key=='n'||key=='w') { if(key=='n') { if(page->CurrentPage==page->PageCount) { printf("亲,这已经是最后一页了"); } else { page->CurrentPage++; begin=(page->CurrentPage-1)*page->item+1; end=page->CurrentPage*page->item; ShowIn(begin,end,top); } } if(key=='w') { if(page->CurrentPage==1) { printf("亲,这已经是第一页了"); } else { page->CurrentPage--; begin=(page->CurrentPage-1)*page->item+1; end=page->CurrentPage*page->item; ShowIn(begin,end,top); } } PrintMenu(*page); g_key=key=GetKey(); }}void PrintMenu(Page page){ switch (g_menu_type) { case '3': printf("当前第(%d)页 (w)上一页 (n)下一页 (b)返回菜单 (c)重新查询 共(%d)页 共(%d)条\n",page.CurrentPage,page.PageCount,page.count); break; case '4': printf("当前第(%d)页 (w)上一页 (n)下一页 (b)返回菜单(d)删除 共(%d)页 共(%d)条\n",page.CurrentPage,page.PageCount,page.count); break; case '5': printf("当前第(%d)页 (w)上一页 (n)下一页 (b)返回菜单(u)修改 共(%d)页 共(%d)条\n",page.CurrentPage,page.PageCount,page.count); break; default: printf("当前第(%d)页 (w)上一页 (n)下一页 (b)退出 共(%d)页 共(%d)条\n",page.CurrentPage,page.PageCount,page.count); break; }}void ShowIn(int begin,int end,List *top){ int count =0; printf("id name age phone \n"); while(top!=NULL&&count<=end) { count++; if(count>=begin&&count<=end) { printf("%d %s %d %s \n",top->id,top->name,top->age,top->phone); } top=top->pNext; }}void ShowAllContacts(List *top){ Page *page=NULL; page=Tongji(top); FenYe(page,top);}void FQuery(){ List *ptop=NULL; List *pend=NULL; List *node=NULL; List *top=NULL; char *word=NULL; while (1) { top=ListUtil.top;//重新查询时,从头开始查 printf("输入查询关键字:\n"); word=GetString(); printf("a 确认查询 c 重新查询 b返回主菜单:\n"); switch(GetKey()) { case 'a': while (top!=NULL) { if(0==strncmp(top->name,word,strlen(word))||0==strncmp(top->phone,word,strlen(word))) { node=(List *)malloc(sizeof(List)); node->id=top->id; node->phone=top->phone; node->name=top->name; node->age=top->age; node->pNext=NULL; ListUtil.fp_Add(&ptop,&pend,node); } top=top->pNext; } ShowAllContacts(ptop); ListUtil.fp_Clear(&ptop,&pend); if('b'==g_key||'d'==g_key||'u'==g_key) { return ; } break; case 'b': return ; break; default: break; } }}void Delete(){ int bh=-1; while(1) { FQuery(); if(g_key=='d') { printf("输入你要删除的编号:"); bh=atoi(GetString()); ListUtil.fp_Delete(bh,&ListUtil.top,&ListUtil.end); printf("y 继续删除 其他键返回主菜单\n"); if('y'!=GetKey()) { return ; } } }}void Update(){ int bh=1; while(1) { FQuery(); if(g_key=='u') { printf("输入你要修改的编号:"); bh=atoi(GetString()); ListUtil.fp_Update(bh,ListUtil.top); printf("y 继续删除 其他键返回主菜单\n"); if('y'!=GetKey()) { return ; } } }}void HomePage(){ printf("1.查看通讯录\n"); printf("2.添加联系人\n"); printf("3.查询联系人\n"); printf("4.删除联系人\n"); printf("5.修改联系人\n"); printf("q.退出\n");}
0 0
- 简单通讯录
- 简单通讯录
- 简单通讯录
- 简单通讯录
- 简单通讯录
- 通讯录 实现简单查询
- 简单的通讯录程序
- java简单的通讯录
- OC实现简单通讯录
- 一个简单的通讯录
- 简单的TableView通讯录
- OC简单通讯录
- 通讯录的简单实现
- 通讯录的简单实现
- 简单的通讯录
- 实现简单通讯录操作。
- 本地化简单通讯录
- 应用:实现简单通讯录
- dom4j解析xml示例 (未测试)
- [HDU 5738] Eureka (计数)
- hdu5738-Eureka (重点 + 极角排序)
- JavaScript 中的函数式编程实践
- 前端开发面经——腾讯
- 简单通讯录
- Linux文件属性与权限
- js判断是否输入的是年份 (未测试)
- Design Pattern: Iterator and Adaptor
- js 相关笔记
- 最全的对话框(Dialog)用法汇总
- ZXing 二维码解析生成工具类(未测试)
- hdu 5742 It's All In The Mind
- FTP命令详解