文件读写操作+动态内存分配+结构体指针+函数指针数组实现通讯录系统
2016-08-09 23:44
501 查看
实现一个通讯录;
通讯录可以用来存储1000个人的信息,每个人的信息包括:
姓名、性别、年龄、电话、住址
提供方法:
1. 添加联系人信息
2. 删除指定联系人信息
3. 查找指定联系人信息
4. 修改指定联系人信息
5. 显示所有联系人信息
6. 清空所有联系人
7. 以名字排序所有联系人
8. 保存现有文件到桌面的通讯录.txt文件
9. 从桌面的 通讯录.txt 读取信息并打印出来
头文件:contact.h
主函数:main_contact.c
函数实现代码:code_contact.h
通讯录可以用来存储1000个人的信息,每个人的信息包括:
姓名、性别、年龄、电话、住址
提供方法:
1. 添加联系人信息
2. 删除指定联系人信息
3. 查找指定联系人信息
4. 修改指定联系人信息
5. 显示所有联系人信息
6. 清空所有联系人
7. 以名字排序所有联系人
8. 保存现有文件到桌面的通讯录.txt文件
9. 从桌面的 通讯录.txt 读取信息并打印出来
头文件:contact.h
#pragma once //只编译一次 #define _CRT_SECURE_NO_WARNINGS #ifndef __CONTACT__ #define __CONTACT__ #define MAX_NAME 100 #define MAX_SEX 20 #define MAX_TELEPHONE 20 #define MAX_ADDRESS 100 #define MAX_CAPACITY 1000 //最大容量 #include <stdio.h> #include <stdlib.h> #include <string.h> #include <time.h> typedef struct People { char name[MAX_NAME]; char sex[MAX_SEX]; int age; char telephone[MAX_TELEPHONE]; char address[MAX_ADDRESS]; int flag; }People; typedef struct Contact { People * people; int count; }Contact,*PContact; void Add(PContact con); void Delete(PContact con); void Find(PContact con); void Modify(PContact con); void Show(PContact con); void Empty(PContact con); void Sort(PContact con); void Save(PContact con); void Free(PContact con); void Show_file(PContact con); void menu(); #endif // !__CONTACT__
主函数:main_contact.c
#include "contact.h" int main() { Contact contact = {0}; int input = 1; void(*fun[9])(PContact) = {Add,Delete,Find,Modify,Show,Empty,Sort,Save,Show_file}; while(1) { menu(); printf("请选择功能======>"); scanf("%d", &input); system("cls"); if (input == 0) { Free(&contact); exit(0); } else if (input < 10 && input>0) { fun[input - 1](&contact); } else printf("输入有误!\n"); } return 0; }
函数实现代码:code_contact.h
#include "contact.h" void menu() { printf("****************************** 通讯录 ******************************\n"); 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("***************** 8.保存所有信息到桌面 **********\n"); printf("***************** 9.查看现有文件所存储的联系人 **********\n"); printf("***************** 0.退出程序 **********\n"); printf("**********************************************************************\n"); printf("**********************************************************************\n"); printf("****************************** 通讯录 ******************************\n"); } void go_menu() { printf("返回主菜单请输入y\n"); fflush(stdin); while (1) { int c = 0; c = getchar(); if (c == 'y') return; } } void Add(PContact con) { int i = 0; int num = 0; printf("请输入要添加的人数======>\n"); fflush(stdin); scanf("%d", &num); if ( num>MAX_CAPACITY || num < 0 ) { printf("输入有误,人数范围限制在0-1000,请重新选择!\n"); } if (con->count == 0) { People * Tmp = (People *)malloc(sizeof(People)*num); if (Tmp == NULL) { printf("out of memery"); exit(EXIT_FAILURE); } else { con->people = Tmp; } } else { People * Tmp = (People *)realloc(con->people, sizeof(People)*(con->count+num)); if(Tmp==NULL) { printf("out of memery"); exit(EXIT_FAILURE); } else { con->people = Tmp; } } for (i = 0; i < num; i++) { printf("第%d个联系人\n", i + 1); printf("输入姓名==>>"); fflush(stdin); scanf("%s", (con->people + con->count)->name); printf("输入性别==>>"); fflush(stdin); scanf("%s", (con->people + con->count)->sex); printf("输入年龄==>>"); fflush(stdin); scanf("%d", &(con->people + con->count)->age); printf("输入电话==>>"); fflush(stdin); scanf("%s", (con->people + con->count)->telephone); printf("输入地址==>>"); fflush(stdin); scanf("%s", (con->people + con->count)->address); (con->people + con->count)->flag = 1; con->count++; printf("\n"); } go_menu(); } void Show(PContact con) { int i = 0; for (i = 0; i <con->count; i++) { if ((con->people + i)->flag == 1) printf("姓名:%s 性别:%s \n年龄:%d 电话:%s 地址:%s \n", (con->people + i)->name, (con->people + i)->sex, (con->people + i)->age, (con->people + i)->telephone, (con->people + i)->address); } printf("以显示全部\n"); go_menu(); } void Find(PContact con) { int i = 0; int t = 0; char search[100]; printf("请输入要查找的名字:=======>"); fflush(stdin); scanf("%s", search); for(i=0; i<con->count; i++) { if (strcmp((con->people + i)->name, search)==0) { printf("姓名:%s 性别:%s \n年龄:%d 电话:%s 地址:%s \n", (con->people + i)->name, (con->people + i)->sex, (con->people + i)->age, (con->people + i)->telephone, (con->people + i)->address); t = 1; } } if (t == 0) printf("不存在此联系人!\n"); else printf("已显示所有符合条件的联系人!\n"); go_menu(); } void Delete(PContact con) { int i = 0; int t = 0; char search[100]; printf("请输入要删除的名字:=======>"); fflush(stdin); scanf("%s", search); for (i = 0; i<con->count; i++) { if (strcmp((con->people + i)->name, search)== 0) { (con->people + i)->flag = 0; t = 1; } } if (t == 0) printf("此联系人不存在,删除失败!\n"); else printf("删除成功!\n"); go_menu(); } void Empty(PContact con) { con->count = 0; printf("已清空所有联系人\n"); go_menu(); } void Modify(PContact con) { char search[100]; int i; printf("请输入要修改的名字:===>>>>>>>"); fflush(stdin); scanf("%s", search); for (i = 0; i<con->count; i++) { if (strcmp(search,(con->people+i)->name) == 0) { printf("请输入要修改该联系人的信息:=======>>>>>>>>name/sex/age/phone/address/\n"); fflush(stdin); scanf("%s", search); if (strcmp("name", search) == 0) { printf("请输入新信息:"); fflush(stdin); scanf("%s", search); strcpy((con->people + i)->name, search); } if (strcmp("sex", search) == 0) { printf("请输入新信息:"); fflush(stdin); scanf("%s", search); strcpy((con->people + i)->sex, search); } if (strcmp("age", search) == 0) { int b; printf("请输入新信息:"); fflush(stdin); scanf("%d", &b); (con->people + i)->age = b; } if (strcmp("address", search) == 0) { printf("请输入新信息:"); fflush(stdin); scanf("%s", search); strcpy((con->people + i)->address, search); } if (strcmp("phone", search) == 0) { printf("请输入新信息:"); fflush(stdin); scanf("%s", search); strcpy((con->people + i)->telephone, search); } } } go_menu(); } int cmp(const void *elem1, const void *elem2) { return strcmp(((People*)elem1)->name, ((People*)elem2)->name); } void Sort(PContact con) { int i = 0; qsort(con->people, con->count, sizeof(People), cmp); for (i = 0; i<con->count; i++) { if ((con->people + i)->name != '\0') printf("姓名:%s 性别:%s \n年龄:%d 电话:%s 地址:%s \n", (con->people + i)->name, (con->people + i)->sex, (con->people + i)->age, (con->people + i)->telephone, (con->people + i)->address); printf("\n"); } go_menu(); } void Save(PContact con) { int i = 0; FILE* file = fopen("C:\\Users\\Administrator\\Desktop\\通讯录.txt","w"); if (file == NULL) { perror("C:\\Users\\Administrator\\Desktop\\通讯录.txt"); exit(EXIT_FAILURE); } for (i = 0; i < con->count; i++) { if((con->people+i)->flag==1) fprintf(file,"姓名:%s 性别:%s \n年龄:%d 电话:%s 地址:%s \n", (con->people + i)->name, (con->people + i)->sex, (con->people + i)->age, (con->people + i)->telephone, (con->people + i)->address); } if (fclose(file) != 0) { perror("fclose"); exit(0); } printf("联系人信息已保存到桌面。\n"); go_menu(); } void Free(PContact con) { free(con->people); con->people = NULL; } void Show_file(PContact con) { FILE * file = fopen("C:\\Users\\Administrator\\Desktop\\通讯录.txt", "r"); if (file == NULL) { perror("C:\\Users\\Administrator\\Desktop\\通讯录.txt"); exit(EXIT_FAILURE); } while (!feof(file))//feof 如果到了文件的末尾就返回1 文件还没有结束就返回0 { char c = fgetc(file); putchar(c); } printf("\n"); if (fclose(file) != 0) { perror("fclose"); exit(0); } go_menu(); }
相关文章推荐
- MSP430 SD卡SPI读写操作(4) —— FatFs文件系统实现(以MSP430F5438A为例)
- C实现通讯录管理系统(亮点:纯链表实现、子串匹配,文件读写)
- C#.net实现windows窗体程序对Excel文件的读写操作
- 【转载】详解iPhone文件读写系统操作教程
- 遍历树 栈的泛型实现 db操作 读写文件 代码
- 详解ios文件系统文件目录读写操作
- linux sudo 重定向,实现只有系统管理员才有权限操作的文件中写入信息
- 基于Blackfin处理器实现对硬盘FAT32文件系统的操作
- 详解iPhone文件读写系统操作教程
- c语言以字符形式实现文件的读写操作
- 详解iPhone文件读写系统操作教程
- iphone编程--详解ios文件系统文件目录读写操作
- Androlid入门之文件系统操作(三)文件读写
- jxl包实现对Excel文件的写读写操作
- 自己总结的Java实现文件的读写操作
- 实现文件读写操作的几种方法
- 用JAVA源代码实现文件的读写操作.
- fstream提供了三个类,用来实现c++对文件的操作。(文件的创建、读、写)。 ifstream -- 从已有的文件读 ofstream -- 向文件写内容 fstream - 打开文件供读写
- IOS 文件读写操作的实现 《转载的 这个写的很详细》
- verilog系统任务对文件的读写操作