本期内容是C语言实现通讯录;
1.创建三个头文件,分别是game.h、game.c、test.c;
建立一个通讯录,通讯录的结果记录包括:姓名,性别,年龄,电话号码,地址等等;
game.h头文件:
#define _CRT_SECURE_NO_WARNINGS 1 #include "stdio.h" #include "stdlib.h" #include "time.h" #include "string.h" //#define MAX 1000 #define MAX_NAME 20 #define MAX_SEX 5 #define MAX_TELE 12 #define MAX_ADDR 30 #define CAPATITY_SZ 3 enum Option { EXIT, ADD, DEL, SEARCH, MODIFY, SHOW, SORT, SAVE }; struct Proct { char name[MAX_NAME]; int age; char sex[MAX_SEX]; char tele[MAX_TELE]; char addr[MAX_ADDR]; }; struct Contact { struct Proct *data; int size; int capatity; }; //初始 void InitContact(struct Contact *ps); //增加 void AddContact(struct Contact *ps); //显示 void ShowContact(const struct Contact *ps); //删除 void DelContact(struct Contact *ps); //查找 void SearchContact(const struct Contact *ps); //修改 void ModifyContact(struct Contact *ps); //冒泡 // // void DesContact(struct Contact *ps); //写数据存放 void SaveContact(struct Contact* ps); //打开通讯录,文件存放 void LoveContact(struct Contact *ps);
game.c源文件:通讯录所需各个功能函数的实现
#include "game.h" void InitContact(struct Contact *ps) { ps->data = (struct Proct*)malloc(sizeof(struct Proct)*CAPATITY_SZ); if (ps->data == NULL) { return; } ps->size = 0; ps->capatity = CAPATITY_SZ; //文件加载 LoveContact(ps); } void ChecKCapacity(struct Contact* ps); void LoveContact(struct Contact* ps) { struct Proct tmp = { 0 }; FILE* pfRead = fopen("contact.txt", "rb"); if (pfRead == NULL) { printf("LoveContact:%s\n", strerror(errno)); system("pause"); return; } while (fread(&tmp, sizeof(struct Proct), 1, pfRead)) { ChecKCapacity(ps); ps->data[ps->size] = tmp; ps->size++; } fclose(pfRead); pfRead = NULL; } void ChecKCapacity(struct Contact* ps) { if (ps->size == ps->capatity) { struct Proct* ptr = (struct Proct*)realloc(ps->data, (ps->capatity + 2)*sizeof(struct Proct)); if (ptr != NULL) { ps->data = ptr; ps->capatity += 2; printf("增容成功\n"); } else printf("增容失败\n"); } } void AddContact(struct Contact *ps) { ChecKCapacity(ps); printf("请输入名字:"); scanf("%s", ps->data[ps->size].name); printf("请输入年龄:"); scanf("%d", &(ps->data[ps->size].age)); printf("请输入性别:"); scanf("%s", ps->data[ps->size].sex); printf("请输入电话:"); scanf("%s", ps->data[ps->size].tele); printf("请输入地址:"); scanf("%s", ps->data[ps->size].addr); ps->size++; printf("添加成功\n"); } void ShowContact(struct Contact *ps) { if (ps->size == 0) { printf("空信息\n"); } else { int i = 0; printf("%-20s\t%-4s\t%-5s\t%-12s\t%-20s\n", "名字", "年龄", "性别", "电话", "地址"); for (i = 0; i < ps->size; i++) { printf("%-20s\t%-4d\t%-5s\t%-12s\t%-20s\n", ps->data[i].name, ps->data[i].age, ps->data[i].sex, ps->data[i].tele, ps->data[i].addr); } } } static int FindByname(const struct Contact *ps, char name[MAX_NAME]) { int i = 0; for (i = 0; i < ps->size; i++) { if (strcmp(ps->data[i].name, name) == 0) { return i; } } return -1; } void DelContact(struct Contact *ps) { char name[MAX_NAME]; printf("请输入你要删除联系人的名字:"); scanf("%s", name); int pos=FindByname(ps,name); if (pos == -1) { printf("你要找的人不存在\n"); } else { int j = 0; for (j = pos; j < ps->size - 1; j++) { ps->data[j] = ps->data[j + 1]; } ps->size--; printf("删除成功\n"); } } void SearchContact(const struct Contact *ps) { int i = 0; char name[MAX_NAME]; printf("请输入你要查找的联系人:"); scanf("%s", name); int pos = FindByname(ps, name); if (pos==-1) { printf("要查找的人不存在\n"); } else { printf("查找到了\n"); printf("%-20s\t%-4s\t%-5s\t%-12s\t%-20s\n", "名字", "年龄", "性别", "电话", "地址"); printf("%-20s\t%-4d\t%-5s\t%-12s\t%-20s\n", ps->data[pos].name, ps->data[pos].age, ps->data[pos].sex, ps->data[pos].tele, ps->data[pos].addr); } } void ModifyContact(struct Contact *ps) { char name[MAX_NAME]; printf("请输入你要修改的联系人:"); scanf("%s", name); int pos = FindByname(ps,name); if (pos == -1) { printf("你要修改的人不存在\n"); } else { printf("请输入名字:"); scanf("%s", ps->data[pos].name); printf("请输入年龄:"); scanf("%d", &(ps->data[pos].age)); printf("请输入性别:"); scanf("%s", ps->data[pos].sex); printf("请输入电话:"); scanf("%s", ps->data[pos].tele); printf("请输入地址:"); scanf("%s", ps->data[pos].addr); printf("修改成功\n"); } } void DesContact(struct Contact* ps) { free(ps->data); ps->data = NULL; } void SaveContact(struct Contact* ps) { FILE* pfWirte = fopen("contact.txt", "wb"); if (pfWirte == NULL) { printf("SaveConatct:%s\n", strerror(errno)); system("pasue"); return; } int i = 0; for (i = 0; i < ps->size; i++) { fwrite(&(ps->data[i]), sizeof(struct Proct), 1, pfWirte); } fclose(pfWirte); pfWirte = NULL; }
test.c源文件(测试):测试代码运行
#include "game.h" void menu() { printf("*******************************************\n"); printf("******** 1.add 2.del *********\n"); printf("******** 3.search 4.modify*********\n"); printf("******** 5.show 6.sort *********\n"); printf("************** 0.exit ****************\n"); printf("*******************************************\n"); } int main() { int inupt = 0; struct Contact con; InitContact(&con); do { menu(); printf("请输入选择:"); scanf("%d", &inupt); switch (inupt) { case ADD:AddContact(&con); break; case DEL:DelContact(&con); break; case SEARCH:SearchContact(&con); break; case MODIFY:ModifyContact(&con); break; case SHOW:ShowContact(&con); break; case SORT:break; case EXIT:SaveContact(&con); DesContact(&con); printf("退出通讯录\n"); break; case SAVE:SaveContact(&con); break; default:printf("选择错误,请重新选择\n"); } } while (inupt); system("pause"); return 0; }
通讯录(动态)到此设计结束了,感谢您的阅读!!!如果内容对您有所帮助,记得给我点赞,关注,收藏,谢谢!后续持续更新!!!