通讯录(文本版)
来源:互联网 发布:结婚网络请柬 编辑:程序博客网 时间:2024/05/21 18:41
与之前三子棋和扫雷一样,将实现函数先封装到头文件contact.h中,之后有两个源文件,test.c程序运行和contact.c的函数实现
Contact.h
#define _CRT_SECURE_NO_WARNINGS 1#include <stdio.h>#include <stdlib.h>#include <string.h>#ifndef _CONTACT_H__#define _CONTACT_H__#define DEFAULT_SZ 3#define DEFAULT_INC 2#define Max_name 20#define Max_sex 10#define Max_tel 12#define Max_addr 20#define FILENAME "contact.dat"typedef struct PeoInfo{char name[Max_name];int age;char sex[Max_sex];char tel[Max_tel];char addr[Max_addr];}PeoInfo;typedef struct Contact{PeoInfo *contact; //数据存放的位置int capacity; //容量int sz; }Contact,*pContact;void InitContact(pContact pcontact);void AddContact(pContact pcontact);void ShowContact(const pContact pcontact);void SearchContact(pContact pcontact);int FindContact(pContact pcontact,char name[]);void DelContact(pContact pcontact);void ModifyContact(pContact pcontact);void EmptyContact(pContact pcontact);void SortContact(pContact pcontact);void DistoryContact(pContact pcontact);int CheckContact(pContact pcontact);void LoadContact(pContact pcontact);void SaveContact(pContact pcontact);#endif //_CONTACT_H__
test.c
#define _CRT_SECURE_NO_WARNINGS 1#include "contact.h"enum SEL{EXIT,ADD,DEL,SEARCH,MODIFY,SHOW,EMPTY,SORT};void menu(){printf("**********************************\n");printf("***** 1.add 2.del ***\n");printf("***** 3.search 4.modify ***\n");printf("***** 5.show 6.empty ***\n");printf("***** 7.sort 0.exit ***\n");printf("**********************************\n");}void test(){ int i = 0; Contact my_contact; InitContact(&my_contact); do { menu(); printf("请输入:>"); scanf("%d",&i); switch(i) { case ADD: AddContact(&my_contact);break; case DEL: DelContact(&my_contact);break; case SEARCH: SearchContact(&my_contact);break; case MODIFY: ModifyContact(&my_contact);break; case SHOW: ShowContact(&my_contact);break; case EMPTY: EmptyContact(&my_contact);break; case SORT: SortContact(&my_contact);break; case EXIT: SaveContact(&my_contact); DistoryContact(&my_contact);break; default:printf("选择错误\n"); break; } } while (i);}int main(){ test();return 0;}
contact.c
#define _CRT_SECURE_NO_WARNINGS 1#include "contact.h"void _ADD(PeoInfo *tmp,pContact pcontact){ CheckContact(pcontact);pcontact->contact[pcontact->sz] = *tmp;pcontact->sz++;}void LoadContact(pContact pcontact){PeoInfo tmp = {0};int i = 0; FILE* pfin = fopen(FILENAME,"r"); if (pfin == NULL) { perror("open the file for read"); exit(EXIT_FAILURE); } while (fread(&tmp,sizeof(PeoInfo),1,pfin)) { _ADD(&tmp,pcontact); } fclose(pfin);}void SaveContact(pContact pcontact){FILE* pfout = fopen(FILENAME,"w");int i = 0;if (pfout == NULL){perror("open the file for write");exit(EXIT_FAILURE);} for (i=0; i<pcontact->sz; i++) {fwrite(pcontact->contact+i,sizeof(PeoInfo),1,pfout); }fclose(pfout);}void InitContact(pContact pcontact){pcontact->sz = 0;pcontact->contact = (PeoInfo*)malloc(DEFAULT_SZ*sizeof(PeoInfo)); if (NULL == pcontact->contact) {perror("InitContact::malloc");exit(EXIT_FAILURE); }memset(pcontact->contact,0,DEFAULT_SZ*sizeof(PeoInfo)); pcontact->capacity = DEFAULT_SZ;LoadContact(pcontact);}void DistoryContact(pContact pcontact){free(pcontact->contact);pcontact->contact = NULL;pcontact->sz = 0;pcontact->capacity = 0;}int CheckContact(pContact pcontact){ if (pcontact->sz == pcontact->capacity) { PeoInfo* tmp = realloc(pcontact->contact, (pcontact->capacity+DEFAULT_INC)*sizeof(PeoInfo)); if (tmp!=NULL) { pcontact->contact = tmp; pcontact->capacity += DEFAULT_INC; printf("增容成功"); return 1; } else { return 0; } } return 1;}void AddContact(pContact pcontact){CheckContact(pcontact);if (CheckContact(pcontact)==0){return;} printf("请输入名字:>"); scanf("%s",pcontact->contact[pcontact->sz].name); printf("请输入年龄:>"); scanf("%d",&(pcontact->contact[pcontact->sz].age)); printf("请输入性别:>"); scanf("%s",pcontact->contact[pcontact->sz].sex); printf("请输入电话:>"); scanf("%s",pcontact->contact[pcontact->sz].tel); printf("请输入地址:>"); scanf("%s",pcontact->contact[pcontact->sz].addr); pcontact->sz++; printf("添加成功\n");}void ShowContact(const pContact pcontact){int i = 0;printf("%5s\t%5s\t%5s\t%15s\t%20s\t\n","Name","Age","Sex","Tel","Addr"); for (i=0;i<pcontact->sz;i++) {printf("%5s\t%5d\t%5s\t%15s\t%20s\t\n",pcontact->contact[i].name, pcontact->contact[i].age ,pcontact->contact[i].sex ,pcontact->contact[i].tel ,pcontact->contact[i].addr); }}int FindContact(pContact pcontact,char name[]){int i = 0;for (i=0;i<pcontact->sz;i++){if (strcmp(name,pcontact->contact[i].name)==0){return i;}}return -1;}void SearchContact(pContact pcontact){int ret = 0;char name[Max_name] = {0};printf("请输入需要查找的姓名:>");scanf("%s",name);ret = FindContact(pcontact,name);if (ret == -1){printf("不存在该联系人\n");return;}printf("%5s\t%5s\t%5s\t%15s\t%20s\t\n","Name","Age","Sex","Tel","Addr");printf("%5s\t%5d\t%5s\t%15s\t%20s\t\n",pcontact->contact[ret].name,pcontact->contact[ret].age ,pcontact->contact[ret].sex ,pcontact->contact[ret].tel ,pcontact->contact[ret].addr);return ;}void DelContact(pContact pcontact){int ret = 0;char name[Max_name] = {0};printf("请输入需要删除人的姓名:>");scanf("%s",name); ret = FindContact(pcontact,name);if (ret == -1){printf("不存在该联系人\n");return;}memmove(pcontact->contact+ret, pcontact->contact+ret+1, (pcontact->sz-ret-1)*sizeof(PeoInfo));pcontact->sz--;printf("删除成功\n");return ;}void ModifyContact(pContact pcontact){int ret = 0;char name[Max_name] = {0};printf("请输入需要修改人的姓名:>");scanf("%s",name); ret = FindContact(pcontact,name);if (ret == -1){printf("不存在该联系人\n");return;}printf("请重新输入该联系人的信息:>");printf("请输入名字:>");scanf("%s",pcontact->contact[ret].name);printf("请输入年龄:>");scanf("%d",&(pcontact->contact[ret].age));printf("请输入性别:>");scanf("%s",pcontact->contact[ret].sex);printf("请输入电话:>");scanf("%s",pcontact->contact[ret].tel);printf("请输入地址:>");scanf("%s",pcontact->contact[ret].addr); printf("修改成功\n");printf("%5s\t%5s\t%5s\t%15s\t%20s\t\n","Name","Age","Sex","Tel","Addr");printf("%5s\t%5d\t%5s\t%15s\t%20s\t\n",pcontact->contact[ret].name,pcontact->contact[ret].age ,pcontact->contact[ret].sex ,pcontact->contact[ret].tel ,pcontact->contact[ret].addr); return;}void EmptyContact(pContact pcontact){InitContact(pcontact);}void SortContact(pContact pcontact){int i = 0;int j = 0;int count = 0; for (i=0; i<pcontact->sz-1; i++) { for (j=0; j<pcontact->sz-i-1; j++) { if (strcmp(pcontact->contact[j].name,pcontact->contact[j+1].name)==1) { PeoInfo tmp = pcontact->contact[j]; pcontact->contact[j] = pcontact->contact[j+1]; pcontact->contact[j+1] = tmp; count++; } } if (count!=0) { continue; } else return; } ShowContact(pcontact);}
阅读全文
1 0
- 通讯录(文本版)
- 通讯录(数据库版)
- 通讯录(文件版)
- 通讯录(静态版)一
- 通讯录(动态版)二
- 通讯录(文件版)三
- 通讯录终极版(文件)
- 通讯录项目(完善版)
- 通讯录包含保存文本数据和读取文本数据功能
- C语言通讯录(初级版)
- 通讯录动态版(动态内存开辟)
- Python实现简易通讯录(修改版)
- 电子通讯录(文件保存版)
- 电子通讯录(数据库版存储)
- 项目:通讯录(I/O文件版)
- 通讯录第三阶--文件版通讯录
- 实现一个通讯录并将信息保存到文本中
- 实现一个通讯录并将信息保存到文本中
- Git笔记
- CreateThread 和_beginthreadex区别
- Python3网络爬虫(十二):初识Scrapy之再续火影情缘
- acm1004
- 如何申请TexturePacker注册码
- 通讯录(文本版)
- lintcode编程细节总结
- Caused by: java.lang.ClassNotFoundException: org.springframework.dao.DataAccessException
- 通过反射动态调用类的静态方法和实例方法
- 使用maven 如何生成源代码的jar包
- solr学习笔记-- day01 安装及配置
- sql server中各类范式的理解
- 探究connect函数
- Spring之AOP