/*大二实践周所作,时间:2017.9,11电话簿管理系统*/#include<string.h>
#include<stdio.h>
#include<stdlib.h>
#include<malloc.h>
#define NULL 0
typedef struct lianxiren{char job[30];char number[20];char name[10];char email[30];struct lianxiren*next;
}lianxiren;
#define LEN sizeof(lianxiren)
lianxiren* creat_list()
{lianxiren *head,*p1,*p2;char name[10];int n=0;head=NULL;p1=(lianxiren *)malloc(LEN);p2=p1;printf("请输入姓名(姓名为0时停止创建):");gets(name);if(strcmp(name,"0")==0)return 0;else {strcpy(p1->name,name);printf("请输入电话号码:");gets(p1->number);printf("请输入工作单位:");gets(p1->job);printf("请输入E-mail:");gets(p1->email);}while(1){n++;if(n==1)head=p1;elsep2->next=p1;p2=p1;printf("请输入姓名(姓名为0时停止创建):");gets(name);if(strcmp(name,"0")==0)break;else{p1=(lianxiren*)malloc(LEN);strcpy(p1->name,name);printf("请输入电话号码:");gets(p1->number);printf("请输入工作单位:");gets(p1->job);printf("请输入E-mail:");gets(p1->email);}}p2->next=NULL;return head;
}//链表创建函数
lianxiren* shifang_list(lianxiren*head)
{lianxiren*p1;for(;head!=NULL;){p1=head; head=head->next; free(p1);}return head;
}//释放链表函数
void print_list(lianxiren*head)
{void caidan();int n=0;printf("现在通讯录中有如下成员:");while(head!=NULL){printf("\n名字:");puts(head->name);printf("\n电话号码:");puts(head->number);printf("\n工作单位:");puts(head->job);printf("\nE-mail:");puts(head->email);putchar('\n');head=head->next;n++;if(n%8==0){printf("按回车键显示下一页");getchar();system("cls");caidan();} }printf("总共%d个联系人\n",n);
}//打印链表函数
int length(lianxiren*head)
{ int n = 0; lianxiren *p; p = head; while(p != NULL) { p = p->next; n++; } return n;
} void paixu1(lianxiren*head)
{void caidan();int n=length(head);int i,j;lianxiren temp,*p;p=head;lianxiren a[100];for(i=1;i<=n;i++){strcpy(a[i].name,p->name);strcpy(a[i].number,p->number);strcpy(a[i].job,p->job);strcpy(a[i].email,p->email);p=p->next;}for(i=1;i<=n-1;i++){for(j=1;j<=n-i;j++){if(strcmp(a[j].number,a[j+1].number)>0){temp=a[j];a[j]=a[j+1];a[j+1]=temp;} }}printf("现在通讯录中有如下成员:");for(i=1;i<=n;i++){printf("\n名字:");puts(a[i].name);printf("\n电话号码:");puts(a[i].number);printf("\n工作单位:");puts(a[i].job);printf("\nE-mail:");puts(a[i].email);putchar('\n');if(i%8==0){printf("按回车键显示下一页");getchar();system("cls");caidan();} }printf("总共%d个联系人\n",n);
}
void paixu2(lianxiren*head)
{void caidan();int n=length(head);int i,j;lianxiren temp,*p;p=head;lianxiren a[100];for(i=1;i<=n;i++){strcpy(a[i].name,p->name);strcpy(a[i].number,p->number);strcpy(a[i].job,p->job);strcpy(a[i].email,p->email);p=p->next;}
for(i=1;i<=n-1;i++){for(j=1;j<=n-i;j++){if(strcmp(a[j].name,a[j+1].name)>0){temp=a[j];a[j]=a[j+1];a[j+1]=temp;} }}printf("现在通讯录中有如下成员:");for(i=1;i<=n;i++){printf("\n名字:");puts(a[i].name);printf("\n电话号码:");puts(a[i].number);printf("\n工作单位:");puts(a[i].job);printf("\nE-mail:");puts(a[i].email);putchar('\n');if(i%8==0){printf("按回车键显示下一页");getchar();system("cls");caidan();} }printf("总共%d个联系人\n",n);
}
void paixu_list(lianxiren*head)
{void caidan();if(head==NULL){printf("电话簿为空,请重新创建!");return;}char a;printf("1,按电话号码升序排序\n2,按姓名字母升序排序\n");printf("请选择一种排序方法:");a=getchar();getchar();switch(a){case'1':paixu1(head);break;case'2':paixu2(head);break;default:printf("输入有误!\n");break;}
}
void chazhao1(lianxiren*head)
{if(head==NULL)
{printf("电话簿为空,请重新创建");return;
}
char name[10];
printf("请输入名字:");gets(name);
while(strcmp(name,head->name)!=0)
{head=head->next;
if(head==NULL){printf("电话簿未有此联系人\n");
return;}
}
printf("%s的电话号码为:",name);
puts(head->number);
printf("\n工作单位:");puts(head->job);
printf("\nE-mail:");puts(head->email);
}//通过名字查找
void chazhao2(lianxiren*head)
{if(head==NULL)
{printf("电话簿为空,请重新创建");return;
}
char number[20];
printf("请输入电话号码:");gets(number);
while(strcmp(number,head->number)!=0)
{head=head->next;
if(head==NULL){printf("电话簿未有此联系人\n");
return;}
}
printf("%s的主人为:",number);
puts(head->name);
printf("\n工作单位:");puts(head->job);
printf("\nE-mail:");puts(head->email);
}//通过电话号码查找
void chazhao(lianxiren*head)
{int n;printf("    1,通过名字查找\n    2,通过电话号码查找\n    3,退出\n请选择你需要的服务:");scanf("%d",&n);getchar();while(1){switch(n){case 1:{chazhao1(head);printf("请选择服务项:");scanf("%d",&n);getchar();}break;case 2:{chazhao2(head);printf("请选择服务项:");scanf("%d",&n);getchar();}break;case 3:return;break;default:{printf("输入不正确!");printf("请选择服务项:");scanf("%d",&n);getchar();}break;}}
}//查找联系人
void add_list(lianxiren*head)
{lianxiren*p1,*p2,*h;char name[10];printf("请输入名字(名字为0时停止)");gets(name);if(strcmp(name,"0")!=0){p1=(lianxiren*)malloc(LEN);strcpy(p1->name,name);printf("请输入电话号码:");gets(p1->number);printf("请输入工作单位:");gets(p1->job);printf("请输入E-mail:");gets(p1->email);}else return;h=p1;while(1){p2=p1;printf("请输入名字(名字为0时停止)");gets(name);if(strcmp(name,"0")==0)break;else{p1=(lianxiren*)malloc(LEN);strcpy(p1->name,name);printf("请输入电话号码:");gets(p1->number);printf("请输入工作单位:");gets(p1->job);printf("请输入E-mail:");gets(p1->email);p2->next=p1;}}p1=head->next;head->next=h;p2->next=p1;
}//添加链表函数
lianxiren*xiugai_list(lianxiren*head)
{char a[20];printf("请输入联系人名字或电话:");gets(a);if(head==NULL){printf("电话簿为空,请重新创建");return head;}lianxiren*p=head;while(strcmp(a,p->name)!=0&&strcmp(a,p->number)!=0){p=p->next;if(p==NULL){printf("电话簿未有此联系人\n");return head;}}printf("查找到了!");printf("\n名字:");puts(p->name);printf("\n电话号码:");puts(p->number);printf("\n工作单位:");puts(p->job);printf("\nE-mail:");puts(p->email);putchar('\n');int n;while(1){printf("请选择操作项(1,名字2,电话号码3,工作单位4,E-mail 5,退出):");scanf("%d",&n);getchar();switch(n){case 1:{printf("请输入名字:");gets(p->name);}break;case 2:{printf("请输入电话号码:");gets(p->number);}break;case 3:{printf("请输入工作单位:");gets(p->job);}break;case 4:{printf("请输入E-mail:");gets(p->email);}break;case 5:return head;break;default:printf("输入错误!");break;}}
}//修改链表函数
lianxiren*delete_list(lianxiren*head)
{char a[20];printf("请输入联系人名字或电话:");gets(a);if(head==NULL){printf("电话簿为空,请重新创建");return head;}lianxiren*p=head,*p1;while(strcmp(a,p->name)!=0&&strcmp(a,p->number)!=0){p1=p;p=p->next;if(p==NULL){printf("电话簿未有此联系人\n");return head;}}printf("查找到了!");printf("\n名字:");puts(p->name);printf("\n电话号码:");puts(p->number);printf("\n工作单位:");puts(p->job);printf("\nE-mail:");puts(p->email);putchar('\n');char n;printf("是否删除该联系人(Y/N)");n=getchar();switch(n){case 'y':case 'Y':{if(p==head){head=p->next;free(p);}else{p1->next=p->next;free(p);}printf("成功删除!");}break;case 'N':case 'n':printf("取消删除!");break;default:printf("输入错误!");break;}return head;
}//删除链表函数
void save_list(lianxiren*head)
{FILE *fp;
if((fp=fopen("dianhuabu.dat","wb"))==NULL) {printf("File cannot be opened\n");exit(0);}
if(head==NULL)
{printf("通讯录为空\n");return;
}
lianxiren*p1=head;
while(p1!=NULL)
{if(fwrite(p1,LEN,1,fp)!=1){printf("cannot open file\n");return;}p1=p1->next;
}
printf("保存完毕!\n");
fclose(fp);
}//文件写入函数
lianxiren*load_list(lianxiren*head)
{FILE *fp;
if((fp=fopen("dianhuabu.dat","rb"))==NULL) {printf("电话簿为空,请重新创建\n");exit(0);}
lianxiren*p1,*p2;
p1=(lianxiren*)malloc(LEN);
if(fread(p1,LEN,1,fp)==0)
{printf("电话簿为空,请重新创建");
return head;
}
head=p1;
p2=p1;
p1=(lianxiren*)malloc(LEN);
while(fread(p1,LEN,1,fp))
{p2->next=p1;p2=p1;p1=(lianxiren*)malloc(LEN);
}
p2->next=NULL;
free(p1);
return(head);
fclose(fp);
}//文件读取函数
int kouling()
{char s[20];printf("请输入口令:");int n=0;while(n<3){scanf("%s",s);getchar();if(strcmp(s,"20160390527")==0)return 0;else{n++;if(n==3){printf("抱歉,输入错误\n");return 1;}printf("口令错误,请重新输入\n");}}return 1;
}//口令验证,密码为:20160390527
void caidan()
{printf("           欢迎进入电话簿系统            \n");printf("********************************************\n");printf("        1、创建电话簿(会将原有电话簿覆盖)\n");printf("        2、查找联系人               \n");printf("        3、添加联系人               \n");printf("        4、修改联系人               \n");printf("        5、删除联系人               \n");printf("        6、查看电话簿(排序)         \n");printf("        7、退出系统                 \n");printf("********************************************\n");
}//菜单界面
void main()
{if(kouling()) return;//口令验证system("cls");caidan();//进入菜单界面printf("          请选择你所需要的服务:");int n;scanf("%d",&n);getchar();lianxiren*head;while(1){system("cls");caidan();switch(n){case 1:{head=creat_list();system("cls");caidan();print_list(head);save_list(head);shifang_list(head);printf("********************************************\n");printf("\n如需要其他服务,请重新输入:");scanf("%d",&n);getchar();}break;//创建电话簿(创建链表、写入文件,释放链表)case 2:{head=load_list(head);chazhao(head);shifang_list(head);printf("********************************************\n");printf("\n如需要其他服务,请重新输入:");scanf("%d",&n);getchar();}break;//查找联系人(读入文件、查找函数、释放链表)case 3:{head=load_list(head);add_list(head);system("cls");caidan();print_list(head);save_list(head);shifang_list(head);printf("********************************************\n");printf("\n如需要其他服务,请重新输入:");scanf("%d",&n);getchar();}break;//添加联系人(读入文件、添加链表、写入文件、释放链表)case 4:{head=load_list(head);head=xiugai_list(head);save_list(head);shifang_list(head);printf("********************************************\n");printf("\n如需要其他服务,请重新输入:");scanf("%d",&n);getchar();}break;//修改联系人(读入文件,修改链表、写入文件、释放链表)case 5:{head=load_list(head);head=delete_list(head);save_list(head);shifang_list(head);printf("********************************************\n");printf("\n如需要其他服务,请重新输入:");scanf("%d",&n);getchar();}break;//删除联系人(读入文件,删除链表、写入文件、释放链表)case 6:{head=load_list(head);paixu_list(head);shifang_list(head);printf("********************************************\n");printf("\n如需要其他服务,请重新输入:");scanf("%d",&n);getchar();}break;//查看电话簿(读入文件,排序链表、释放链表)case 7:{system("cls");return;}break;//退出default:{printf("\n输入有误,请重新输入:");scanf("%d",&n);getchar();}break;}}
}

简单电话簿管理系统(C语言)相关推荐

  1. C语言函数及复杂数据结构的综合应用——简单户籍管理系统

    最全C系列题目!从0到管理系统 一.C语言数据类型及输出--体重是否正常.球的体积.计算存银行利息and浮点数长度与精度 二.C语言运算符与表达式--输出逆序数and二进制包含0和1的数量and判断是 ...

  2. c语言实现的简单学生管理系统

    简单学生管理系统–c语言 花了一个月的时间,学习了链表,文件,多文件编程,然后就开始写学生管理系统,比较简单的那种,实现了增,添,改,查,多种排序,输入的时候的限定,成绩分析的功能.遇到的问题很多,也 ...

  3. c语言电话簿管理系统的,C语言 电话簿管理系统VC++6.0运行通过

    <C语言 电话簿管理系统VC++6.0运行通过>由会员分享,可在线阅读,更多相关<C语言 电话簿管理系统VC++6.0运行通过(16页珍藏版)>请在人人文库网上搜索. 1.*电 ...

  4. 用C语言编写一个电话簿管理系统

    用C语言编写一个电话簿管理系统 仅供参考 #include<stdio.h> #include<stdlib.h> #include<string.h> #incl ...

  5. C语言实现简单电话簿(注释版)

    C语言实现简单电话簿(注释版,可直接运行) 简单的小组实验记录,用到了文件读写.链表操作的知识,没有什么高端的东西,包含一个比较好看的煮菜单,字符画画得很开心. 文件有两个,一个.c文件(函数体以及主 ...

  6. C语言课程设计--电话簿管理系统

    C语言课程设计–电话簿管理系统-----源码电话簿管理系统 文件目录: 初始界面 现在显示一部分代码: //添加联系人 void add() { int i;FILE *fp1;//定义文件指针fp1 ...

  7. C语言完整课程设计代码(简单职工管理系统)

    C语言完整课程设计代码(简单职工管理系统) 采用的是双向链表,排序自己写的,因为是链表排序,学校几乎没交 排序在增加员工处采用的是一次一插入,在插入的时候遍历整个链表,找到适当位置进行插入: 在排序员 ...

  8. 管理系统模板c语言,管理系统c语言

    管理系统c语言Tag内容描述: 1.精品文档 作品名称 开发者 一 系统背景 本软件能减轻对货物数目管理及价格盈亏等信息处理的工作量以便能快捷及时准确的调整货物的仓储量达到最合理化 可以使店主不失效率 ...

  9. 一个简单图书管理系统TSGL的应用数据库

    简单图书管理系统的应用数据库 一.摘要 这个项目是学校结课要求的项目,所以采用的是SQL sever2008来完成的,并不是mysql来完成的,SQL sever2008与mysql就基础知识没有什么 ...

最新文章

  1. 谈谈几个 Spring Cloud 常见面试题及答案
  2. 列表标签ul、ol、dl、li
  3. 问题解决:树莓派上Python用pip进行安装耗尽内存,卡死
  4. logicaldoc 6.5 结合postgresql 9.x安装部署—基于windows平台
  5. Java 18 正式发布
  6. Python列表List
  7. Windows中通过bat定时执行命令和mysqldump实现数据库备份
  8. 【MFC】工具栏按钮的热点效果
  9. ubuntu安装VMware出错
  10. 从程序猿到SAP产品经理,我是如何转型的?
  11. 神经网络中的反向传播算法
  12. matlab2010a连接mysql_MATLAB2010a+OpenCV2.3.1+VS2010运行TLD
  13. Slog55_lua面向对象之lua类
  14. js数据类型 方法 函数
  15. kindEditor文本编辑器
  16. 服务器硬盘开机吱吱响,开机时硬盘吱吱响的原因
  17. VS2013 设置背景图
  18. 【MySQL】 锁机制:InnoDB引擎中锁分类以及表锁、行锁、页锁详解
  19. 万能遥控程序c语言,51单片机万能红外遥控解码程序
  20. 后端线上服务监控与报警方案

热门文章

  1. Java ISO 8601时间格式转换
  2. git恢复修改的文件
  3. 使用oracle开发的配置
  4. 韩国多佑集团软件和服务外包基地纳米大厦大连揭幕
  5. C语言函数递归—经典递归问题
  6. huffman算法实现文件的压缩与解压
  7. 【图解算法】排序算法——快速排序
  8. Excel 使用vba脚本按条件清除行数据
  9. 英伟达守望先锋巡回赛开启 上海/深圳/沈阳/重庆英雄齐聚
  10. java计算机毕业设计废品回收管理系统设计与实现源码+mysql数据库+系统+lw文档+部署