
一、通讯录 通讯录可以用来存储1000个人的信息,每个人的信息包括:姓名、电话。 功能:
这是一个简单的通讯录,实现方案是初级版。只能在程序运行期间存在(没有写入文件)。 二、菜单实现和用户交互 菜单实现和用户的交互 int menu(){ printf("=====================\n"); printf(" 1. 新增联系人\n"); printf(" 2. 查找联系人\n"); printf(" 3. 删除联系人\n"); printf(" 4. 修改联系人\n"); printf(" 5. 查看所有联系人\n"); printf(" 6. 清空所有联系人\n"); printf(" 7. 以名字排序所有联系人\n"); printf(" 0. 退出\n"); printf("=====================\n"); printf(" 请输入您的选择:"); int choice = 0; scanf("%d", &choice); return choice; } 12345678910111213141516 三、主函数 1.转移表 使用转移表的方式来简化代码。定义函数指针Func,参数类型是结构体指针。 typedef void(*Func)(AddressBook*);1 2.choice判断 int main() { Func funcs[] = { NULL, addPerson, findPerson, delPerson, updatePerson, printPerson, clearPerson, sortPerson, }; init(&addressbook); while (1){ int choice = menu(); if (choice == 0){ printf("GoodBye!!!"); break; } if (choice<0 || choice > sizeof(funcs)/sizeof(funcs[0])){ printf("您的输入无效!\n"); continue; } funcs[choice](&addressbook); } system("pause"); return 0; } 1234567891011121314151617181920212223242526272829 四、定义联系人和通讯录 1.定义联系人结构体 表示一个联系人,包含联系人姓名和电话。 typedef struct Person{char name[1024]; char tel[1024]; }Person; 1234 2.定义通讯录结构体 表示整个通讯录,管理所有联系人,包含联系人。 #define MAX_PERSON 1000 typedef struct AddressBook { Person persons[MAX_PERSON]; int size; }AddressBook; 12345 3.定义结构体变量 全局变量addressbook AddressBook addressbook;1 五、通讯录初始化 针对整个通讯录初始化,只需要将size设置为0。 void init(AddressBook* addressbook) {addressbook->size = 0; } 123 六、新增联系人 首先,判断通讯录是不是满了,满了给出提示,没满让用户输入联系人姓名和电话。此处不能直接使用结构体变量 Person p 这种形式,必须使用结构体指针Person* p。 #define MAX_PERSON 1000 void addPerson(AddressBook* addressbook){ printf("新增联系人\n"); int cursize = addressbook->size; if (cursize >= MAX_PERSON){ printf("通讯录已满,增加失败!\n"); } Person* p = &addressbook->persons[cursize]; printf("请输入联系人姓名:"); scanf("%s", p->name); printf("请输入联系人电话:"); scanf("%s", p->tel); printf("新增联系人成功!\n"); addressbook->size++; } 123456789101112131415 七、查找联系人 采用按照姓名查找电话号码的方法。用户输入姓名后查找,输出编号、姓名和电话。 void findPerson(AddressBook* addressbook){printf("按照姓名查找联系人\n"); printf("请输入要查找的姓名: "); char name[1024] = { 0 }; scanf("%s", name); for (int i = 0; i < addressbook->size; i++) { Person* p = &addressbook->persons; if (strcmp(name, p->name) == 0) { printf("[%d]\t\t%s\t\t%s\n", i, p->name, p->tel); } } printf("查找联系人完成!\n"); } 1234567891011121314 八、删除联系人 用户输入联系人的编号来进行删除(数组下标),删除下标为 id 的元素。 void delPerson(AddressBook* addressbook){ printf("删除联系人\n"); printf("请输入要删除的联系人的编号: "); int id = 0; scanf("%d", &id); if (id < 0 || id >= addressbook->size) { printf("您输入的编号有误!\n"); return; } if (id == addressbook->size - 1){ addressbook->size--; printf("删除成功!\n"); return; } addressbook->persons[id] = addressbook->persons[addressbook->size - 1]; addressbook->size--; printf("删除成功!\n"); } 123456789101112131415161718 九、修改联系人 用户输入联系人的编号来进行修改,更改下标为 id 的元素。用户重新输入姓名和电话,输出更新成功。 void updatePerson(AddressBook* addressbook){printf("更新联系人\n"); printf("请输入要更新的联系人的编号: "); int id = 0; scanf("%d", &id); if (id < 0 || id >= addressbook->size) { printf("您输入的编号有误!\n"); return; } Person* p = &addressbook->persons[id]; printf("请输入联系人姓名:"); scanf("%s", p->name); printf("请输入联系人电话:"); scanf("%s", p->tel); printf("更新联系人成功!\n"); } 1234567891011121314151617 十、查看所有联系人 打印所有联系人和通讯录中记录条数。 void printPerson(AddressBook* addressbook){printf("查所有联系人:\n"); for (int i = 0; i < addressbook->size; i++) { Person* p = &addressbook->persons; printf("[%d]\t\t%s\t\t%s\n", i, p->name, p->tel); } printf("共计 [%d] 条记录\n", addressbook->size); } 12345678 十一、清空所有联系人 size--清空所有联系人,到0为止。 void clearPerson(AddressBook* addressbook){for (int i = 0; i < addressbook->size; i++) { addressbook->size--; if (addressbook->size == 0){ break; } } printf("清空成功\n"); } 123456789 十二、以名字排序所有联系人 使用strcmp比较姓名,然后进行交换排序。 void sortPerson(AddressBook* addressbook){if (addressbook->size <= 0){ printf("通讯录中没有联系人,请添加!\n"); } int i = 0; int j = 0; for (i = 0; i<addressbook->size - 1; i++) { for (j = 0; j<addressbook->size - i - 1; j++) { if (strcmp(addressbook->persons[j].name, (addressbook->persons[j + 1]).name)>0) { Person tmp = addressbook->persons[j]; addressbook->persons[j] = addressbook->persons[j + 1]; addressbook->persons[j + 1] = tmp; } } printf("排序成功!\n"); } } 1234567891011121314151617181920 十三、演示 1. 新增联系人 新增联系人:张三 001 、李四 002。 2. 查找联系人查找联系人:张三 3. 删除联系人删除联系人:编号0,张三 4. 修改联系人修改联系人:李四 002 更新为 李五 003. 5. 查看所有联系人查看所有联系人和记录数 6. 清空所有联系人清空所有联系人 7. 以名字排序所有联系人重新录入联系人:张三 001 、李四 002。按名字排序: 十四、完整代码代码已经验证过了,可以直接使用
|
请教楼主,VC6上能不能运行? |