链表+文件版本通讯录(源代码)
来源:互联网 发布:淘宝店steam游戏 编辑:程序博客网 时间:2024/05/21 00:54
0、头文件:
#ifndef _HEAD_H_#define _HEAD_H_#include <stdio.h>#include <string.h>#include <stdlib.h>typedef struct person{char name[20];char sex[20];char tel[11];char QQ[20];char address[20];char addition[20];int data;struct person *next;}PER,*Linklist;int show();PER *create_node();int insert_tail(Linklist head);void display(Linklist head);void search(Linklist head);int delete(Linklist head);int update(Linklist head);void readfromfile(Linklist head);void writetofile(Linklist head);#endif
1、菜单部分:
#include <stdio.h>#include <stdlib.h>#include <string.h>const int show(){int choice;int ret = 0;while(1){printf(" ====================================== \n");printf(" | | \n");printf(" | 多功能电子通讯录 | \n");printf(" | | \n");printf(" | 作者:566 | \n");printf(" |------------------| \n");printf(" | 1、添加好友信息 | 2、删除好友信息 | \n");printf(" |------------------| \n");printf(" | 3、查看好友信息 | 4、搜索好友信息 | \n");printf(" |____________________________________| \n");printf(" | 5、修改好友信息 | 6、保存并退出 | \n");printf(" |____________________________________| \n");printf(" please input your choice: ");ret = scanf("%d",&choice);while((ret != 1)||(!(choice == 1||choice == 2||choice ==3||choice ==4||choice == 5||choice ==6))){while(getchar() != '\n');printf("\33[1;35m error input!please input correct choice 1/2/3/4/5/6:");ret = scanf("%d",&choice);}if(choice == 1||choice ==2||choice == 3||choice == 4||choice == 5||choice == 6){return choice;}}return 0;}2、添加好友
#include "head.h"int insert_tail(Linklist head){PER *p = head;char ch;while(p->next != NULL) //p指向最后一个结点{p = p->next;}PER *new = (PER *)malloc(sizeof(PER));printf("姓名:\n");scanf("%s",new->name);printf("性别(female/male):\n");scanf("%s",new->sex);while(!(strcmp(new->sex,"male")== 0||strcmp(new->sex,"female")==0)){while(getchar()!= '\n');printf("输入错误,请重新输入(female/male):\n");scanf("%s",new->sex);}printf("电话:\n");scanf("%s",new->tel);printf("QQ:\n");scanf("%s",new->QQ);printf("地址:\n");scanf("%s",new->address);printf("备注:\n");scanf("%s",new->addition);p->next = new;new->next = NULL;printf("\n添加成功!\n");printf("是否继续添加(y/n):\n");scanf(" %c",&ch);while(ch != 'y'&&ch != 'Y'&&ch != 'n'&&ch != 'N'){while(getchar() != '\n');printf("输入错误,请重新输入(y/n):\n");scanf(" %c",&ch);}if(ch == 'n'||ch == 'N'){return 0;}else{system("reset");insert_tail(head); //如果继续,再次调用插入函数}}3、删除好友
#include "head.h"int delete(Linklist head){char name[20]; //输入你要删除的联系人的姓名PER *p = head; //用于删除指定的联系人 PER *pre = NULL; //存放p结点的位置int flag = 0; char ch; //回答是否继续int count = 0; int num = 0; //输入要删除联系人的编号int flag1 = 0; //判断是否输入成功int ret = 0; //判断数字输入是否有错if(p->next == NULL){printf("通讯录为空,无法查找!\n");return 0;}printf("请输入你要删除的人的姓名:\n");scanf("%s",name);while(p->next != NULL) //为查找的联系人进行编号{p = p->next;if(strcmp(p->name,name) == 0){count++;p->data = count;printf("编号:%d\n",p->data);printf("姓名:%s\n",p->name);printf("性别:%s\n",p->sex);printf("电话: %s\n",p->tel);printf("QQ: %s\n",p->QQ);printf("地址:%s\n",p->address);printf("备注:%s\n",p->addition);printf("\n===============================================================\n");flag = 1;}}p = head;if(count >= 1) //删除指定联系人{printf("已经查询到你要删除的联系人信息.确认删除请输入你要删除的编号:\n");ret = scanf("%d",&num);while(ret != 1){while(getchar() != '\n');printf("输入错误,请重新输入:\n");ret = scanf("%d",&num);}while(p->next != NULL){pre = p;p = p->next;if((strcmp(p->name,name) == 0)&&(p->data == num)){if(p->next == NULL){pre->next = NULL;free(p);p = NULL;}else{pre->next = p->next;free(p);p = NULL;}flag1 = 1;printf("删除成功!\n");break;}}if(flag1 == 0){printf("删除失败!\n");}}if(flag == 0){printf("您删除的人不存在!\n");}printf("\n是否继续删除(y/n):\n");scanf(" %c",&ch);while(ch != 'y'&&ch != 'Y'&&ch != 'n'&&ch != 'N'){while(getchar() != '\n');printf("输入错误,请重新输入:\n");scanf(" %c",&ch);}if(ch == 'y'||ch == 'Y'){system("reset");delete(head);}else{return 0;}}3、查看好友
#include "head.h"void display(Linklist head){PER *p = head;if(p->next == NULL){printf("\n当前没有存储的联系人,请添加联系人:\n");}while(p->next != NULL){p = p->next;printf("姓名:%s\n",p->name);printf("性别:%s\n",p->sex);printf("电话:%s\n",p->tel);printf("QQ: %s\n",p->QQ);printf("地址:%s\n",p->address);printf("备注:%s\n",p->addition);printf("\n==================================================\n");}}
4、搜索好友
#include "head.h"void search(Linklist head){char name[20] = {0};Linklist p = head;int flag = 0;printf("please input name you want to search:\n");scanf("%s",name);if(p->next == NULL){printf("通讯录为空,你搜索的人不存在,请返回菜单插入:\n");}while(p->next != NULL){p = p->next;if(strcmp(p->name,name) == 0){printf("姓名:%s\n",p->name);printf("性别:%s\n",p->sex);printf("电话:%s\n",p->tel);printf("QQ: %s\n",p->QQ);printf("住址:%s\n",p->address);printf("备注: %s\n",p->addition);printf("\n==============================================\n");flag = 1;}}if(flag == 1){printf("搜索成功!\n");}else{printf("你搜索的人不存在!\n");}}
5、修改好友
#include "head.h"int update(Linklist head){char name[20]; //输入你要修改的联系人的姓名char sex[20];char tel[20];char QQ[20];char address[20];char addition[20];PER *p = head; //用于查找指定的联系人 PER *pre = NULL; //存放p结点的位置int flag = 0; char ch; //回答是否继续int count = 0; int num = 0; //输入要删除联系人的编号int ret = 0; //判断数字输入是否有误int flag1 = 0; //判断更新是否成功if(p->next == NULL){printf("通讯录为空,无法查找!\n");}printf("请输入你要删除的人的姓名:\n");scanf("%s",name);while(p->next != NULL) //为查找的联系人进行编号{p = p->next;if(strcmp(p->name,name) == 0){count++;p->data = count;printf("编号:%d\n",p->data);printf("姓名:%s\n",p->name);printf("性别:%s\n",p->sex);printf("电话: %s\n",p->tel);printf("QQ: %s\n",p->QQ);printf("地址:%s\n",p->address);printf("备注:%s\n",p->addition);printf("\n===============================================================\n");flag = 1;}}p = head;if(count >= 1) //更新指定联系人{printf("已经查询到你要修改的联系人信息.确认修改请输入你要修改的联系人编号:\n");ret = scanf("%d",&num);while(ret != 1){while(getchar() != '\n');printf("输入有误,请重新输入:\n");ret = scanf("%d",&num);}while(p->next != NULL){pre = p;p = p->next;if((strcmp(p->name,name) == 0)&&(p->data == num)){printf("请更新姓名:\n");scanf("%s",name);printf("请更新性别(female/male):\n");scanf("%s",sex);while(!(strcmp(sex,"male") == 0||strcmp(sex,"female") == 0)){while(getchar() != '\n');printf("输入有误,请重新输入:\n");scanf("%s",sex);}printf("请更新电话:\n");scanf("%s",tel);printf("请更新QQ:\n");scanf("%s",QQ);printf("请更新地址:\n");scanf("%s",address);printf("请更新备注:\n");scanf("%s",addition);strcpy(p->name,name);strcpy(p->sex,sex);strcpy(p->tel,tel);strcpy(p->QQ,QQ);strcpy(p->address,address);strcpy(p->addition,addition);printf("更新成功!\n");flag1 = 1;}}if(flag1 == 0){printf("输入编号有误,无法进行修改!\n");}}if(flag == 0){printf("您修改的人不存在!\n");}printf("\n是否继续修改(y/n):\n");scanf(" %c",&ch);while(ch != 'y'&&ch != 'Y'&&ch != 'n'&&ch != 'N'){while(getchar() != '\n');printf("输入错误,请重新输入:\n");scanf(" %c",&ch);}if(ch == 'y'||ch == 'Y'){system("reset");update(head);}else{return 0;}}
6、保存文件
#include "head.h"FILE *fp;void readfromfile(Linklist head){Linklist p = head;while(p->next != NULL){p = p->next;}fp = fopen("txl.txt","r");if(fp == NULL){perror("error!");exit(-1);}while(!feof(fp)){Linklist new = (Linklist)malloc(sizeof(PER));fscanf(fp, "%s\n", new->name);fscanf(fp, "%s\n", new->sex);fscanf(fp, "%s\n", new->tel);fscanf(fp, "%s\n", new->QQ);fscanf(fp, "%s\n", new->address);fscanf(fp, "%s\n", new->addition);p->next = new;new->next = NULL;p = new;}}void writetofile(Linklist head){Linklist p = head;int flag = 0;if((fp = fopen("txl.txt","w+")) == NULL){printf("打开文件失败!无法进行写入!\n");exit(0);}while(p->next != NULL){p = p->next;fprintf(fp,"%s\n",p->name);fprintf(fp,"%s\n",p->sex);fprintf(fp,"%s\n",p->tel);fprintf(fp,"%s\n",p->QQ);fprintf(fp,"%s\n",p->address);fprintf(fp,"%s\n",p->addition);fprintf(fp,"\n");flag = 1;}if(flag == 1){printf("正在保存,请稍后...\n");sleep(2);printf("\n保存成功\n");}if(flag == 0){printf("通讯录新数据,无法进行保存!\n");}fclose(fp);}7、主函数
#include "head.h"int main(){int choice = 0; //输入你要选择的char relay; //选择是否回到主菜单PER *head = create_node(); //创建一个链表readfromfile(head);while(1){system("reset");choice = show();system("reset");switch(choice){case 1: //添加好友{insert_tail(head);break;}case 2: //删除好友{delete(head);break;}case 3: //查看好友{display(head);break;}case 4: //搜索好友{search(head);break;}case 5: //修改好友{update(head);break;}case 6: //保存文件 {writetofile(head);exit(0);break;}}printf("\n\n按回车键返回主菜单><.....");getchar();getchar();}}
阅读全文
1 0
- 链表+文件版本通讯录(源代码)
- 通讯录(文件版本)
- 通讯录(文件版本)
- 通讯录(链表+文件)形式 C语言源代码
- 通讯录(链表+文件)形式 C语言源代码
- 通讯录的文件版本
- 通讯录文件版本
- 通讯录(链表、文件)
- 实现文件版本的通讯录
- 单链表实现文件版本通讯录
- 容器+文件版本的通讯录
- 通讯录(静态版本)
- 通讯录(动态版本)
- 通讯录——(C语言文件版本)
- 通讯录的实现(I/O文件版本)
- 通讯录源代码
- 动态的文件版本的通讯录
- C++通讯录(基础版本)
- CAN协议中CRC编码的硬件实现
- tomcat
- Android绘图,Canvas学习笔记
- Android 中常见控件的使用
- Maven 1 HelloMaven
- 链表+文件版本通讯录(源代码)
- docker入门命令
- iOS之widget开发(Today Extension)
- |Poj 3623|后缀数组|Best Cow Line, Gold
- c++ 学习笔记 -- 关于cout的一些小细节
- 制作Linux下程序一键安装包
- R语言利用neuralnet包训练神经网络
- canvas知识点总结
- 安装配置 Ubuntu 14.04 + CUDA8.0 + cuDNN v5 + caffe