【C语言】通讯录
2016-03-13 17:48
260 查看
Contact.h
#define _CRT_SECURE_NO_WARNINGS 0 #ifndef __CONTACT_H__ #define __CONTACT_H__ #include <stdio.h> #include <string.h> #include <stdlib.h> #include <assert.h> #define MAX_NAME 20 #define MAX_SRX 5 #define MAX_TELE 12 #define MAX_ADDR 30 #define MAX_PEO 1000 #define INIT_NUM 2 enum OP { EXIT, ADD, DEL, SEARCH, MODIFY, SHOW, CLEAR, SORT }; typedef struct Per { char name[MAX_NAME]; int age; char sex[MAX_SRX]; char tele[MAX_TELE]; char addr[MAX_ADDR]; }Per; typedef struct Contact { struct Per* contact; int size;//实际个数 int capacity;//容量 }Contact, *Pcon; void print_menu(); void init_contact(Pcon pcon); void add_contact(Pcon pcon); void del_contact(Pcon pcon); void search_contact(Pcon pcon); void modify_contact(Pcon pcon); void clear_contat(Pcon pcon); void sort_contact(Pcon pcon); void show_contact(Contact con); #endif //__CONTACT_H__
Contact.c
#include "contact.h" void print_menu() { printf("******************************\n"); printf("***** 1.add 2.del ******\n"); printf("***** 3.search 4.modify ***\n"); printf("***** 5.show 6.clr ******\n"); printf("***** 7.sort 0.exit *****\n"); printf("******************************\n"); } void check_capacity(Pcon pcon) { if (pcon->size == pcon->capacity) { pcon->contact = (Per *)realloc(pcon->contact, pcon->capacity += 2); } } void _add(Pcon pcon, Per *p) { assert(pcon); check_capacity(pcon); pcon->contact[pcon->size] = *p; pcon->size++; } void load_data(Pcon pcon) { Per per; FILE *pFread = fopen("contact.dat","r"); if(pFread == NULL) { perror("open file contact.dat for read error"); exit(EXIT_FAILURE); } while(fread(&per, sizeof(Per), 1, pFread)) { _add(pcon, &per); } } void save_data(Pcon pcon) { int i = 0; FILE *pFWrite = fopen("contact.dat","w"); if(pFWrite == NULL) { perror("open file contact.dat for write error"); exit(EXIT_FAILURE); } for(i = 0; i<pcon->size; i++) { fwrite(&(pcon->contact[i]), sizeof(Per), 1, pFWrite); } } void init_contact(Pcon pcon) { pcon->size = 0; pcon->contact = (Per *)malloc(sizeof(Per)*INIT_NUM); memset(pcon->contact, 0, INIT_NUM * sizeof(Per)); pcon->capacity = INIT_NUM; load_data(pcon); } void add_contact(Pcon pcon) { assert(pcon); check_capacity(pcon); printf("请输入名字:>"); scanf("%s",pcon->contact[pcon->size].name); printf("请输入性别:>"); scanf("%s",pcon->contact[pcon->size].sex); printf("请输入年龄:>"); scanf("%d",&(pcon->contact[pcon->size].age)); printf("请输入电话:>"); scanf("%s",pcon->contact[pcon->size].tele); printf("请输入地址:>"); scanf("%s",pcon->contact[pcon->size].addr); pcon->size++; printf("插入成功\n"); } static int find_entry(Pcon pcon, const char *name) { int i = 0; for(i = 0; i<pcon->size; i++) { if(strcmp(pcon->contact[i].name,name) == 0) { return i; } } return -1; } void del_contact(Pcon pcon) { char find_name[MAX_NAME]; int index = 0; int start = 0; if(pcon->size == 0) { printf("电话本已空,不能删除\n"); return; } printf("请输入删除人的名字:>"); scanf("%s",find_name); index = find_entry(pcon, find_name); if(index == -1) { printf("制定删除的人不存在\n"); return; } for(start = index; start <pcon->size-1;start++) { pcon->contact[start] = pcon->contact[start+1]; } pcon->size--; printf("删除成功\n"); } void show_contact(Contact con) { int i = 0; printf("%10s\t%5s\t%5s\t%5s\t%10s\n", "name", "age","sex", "tele","addr"); for(i = 0;i<con.size;i++) { printf("%10s\t%5d\t%5s\t%5s\t%10s\n", con.contact[i].name, con.contact[i].age, con.contact[i].sex, con.contact[i].tele, con.contact[i].addr); } } void search_contact(Pcon pcon) { int index = 0; char find_name[MAX_NAME]; printf("请输入查找人的姓名:>"); scanf("%s",find_name); index = find_entry(pcon, find_name); if(index == -1) { printf("制定删除的人不存在\n"); return; } printf("%10s\t%5s\t%5s\t%5s\t%10s\n", "name", "age","sex", "tele","addr"); printf("%10s\t%5d\t%5s\t%5s\t%10s\n", pcon->contact[index].name, pcon->contact[index].age, pcon->contact[index].sex, pcon->contact[index].tele, pcon->contact[index].addr); } static void Swap(Per* per1, Per* per2) { Per tmp; tmp = *per1; *per1 = *per2; *per2 = tmp; } void modify_contact(Pcon pcon) { int index = 0; char find_name[MAX_NAME]; printf("请输入要改的人的姓名:>"); scanf("%s",find_name); index = find_entry(pcon, find_name); if(index == -1) { printf("指定修改的人不存在\n"); return; } printf("请输入名字:>"); scanf("%s",pcon->contact[index].name); printf("请输入性别:>"); scanf("%s",pcon->contact[index].sex); printf("请输入年龄:>"); scanf("%d",&(pcon->contact[index].age)); printf("请输入电话:>"); scanf("%s",pcon->contact[index].tele); printf("请输入地址:>"); scanf("%s",pcon->contact[index].addr); printf("修改成功\n"); } void clear_contat(Pcon pcon) { pcon->size = 0; } void sort_contact(Pcon pcon) { int i = 0; int j = 0; for(i = 0;i<pcon->size-1;i++) { for(j = 0; j<pcon->size-1-i; j++) { if(strcmp(pcon->contact[j].name,pcon->contact[j+1].name) > 0) { Swap(&(pcon->contact[j]), &(pcon->contact[j+1])); } } } printf("排序成功\n"); }
ContactTest.c
#include "contact.h" void Test() { int input = 1; struct Contact my_con; init_contact(&my_con); while(input) { print_menu(); printf("请选择:>"); scanf("%d",&input); switch(input) { case ADD: add_contact(&my_con); break; case DEL: del_contact(&my_con); break; case SEARCH: search_contact(&my_con); break; case MODIFY: modify_contact(&my_con); break; case SHOW: show_contact(my_con); break; case CLEAR: clear_contat(&my_con); break; case SORT: sort_contact(&my_con); break; case EXIT: save_data(&my_con); break; } } } int main() { Test(); system("pause"); //getchar(); return 0; }
相关文章推荐
- c++ queue 顺序队列的实现
- C++设计模式——Composite 组合模式
- programming review (c++): (2)binary tree, BFS, DFS, recursive, non-recursive
- C++中const的问题(刷题后感)
- C++_动态存储空间的分配和释放
- leetcode 121.Best Time to Buy and Sell Stock 股票买卖最佳时间
- C++第一次上机实验-1-2
- Effective C++ 条款18
- 俄罗斯方块的c语言基本实现
- 详解C++中如何将构造函数或析构函数的访问权限定为private
- c++第2次实验(循环)
- VC++制作DLL具体解释
- C++中引用的详解
- 2012年第三届蓝桥杯试题(C/C++本科B组)
- stl之空间配置器Allocator
- 类的对象和类的指针的区别
- C++的静态联编和动态联编
- 2048的c语言实现
- 随机函数rand()和srand()(c++)
- 金磊c++