上课的时候老师布置了一个作业,利用结构体实现一个简单地通讯录,这可是我们大一的时候学期末的课设题目啊,不过还好现在的水平比之前高了那么一点。。
实现一个通讯录;
通讯录可以用来存储1000个人的信息,每个人的信息包括:
姓名、性别、年龄、电话、住址
提供方法:
1. 添加联系人信息
2. 删除指定联系人信息
3. 查找指定联系人信息
4. 修改指定联系人信息
5. 显示所有联系人信息
6. 清空所有联系人
7. 以名字排序所有联系人
这个是通讯录的主要功能。
这个比较大,所以我们写在三个文件里。
首先是头文件:
#pragma once//宏定义,避免文件多次编译。。。 #include<stdio.h> #include<string.h> #include<stdlib.h> #define MAX_NAME 10//使用简单宏定义可用宏代替一个在程序中经常使用的常量,方便程序的修改 #define MAX_SEX 5 #define MAX_TELE 12 #define MAX_ADDR 20 #define MAX 1000 //人信息的结构体的定义 typedef struct People { char name[MAX_NAME]; char sex[MAX_SEX]; int age; char tele[MAX_TELE]; char addr[MAX_ADDR]; }peo; //人数的结构体定义 typedef struct Contact { peo con[MAX]; int count; }contact; //枚举,在下面使用的switch case 语句中,不用关心函数的顺序对齐,比较方便 enum OP { EXIT, ADD, DEL, SEARCH, MODIFY, SHOW, CLEAR, SORT }; //函数声明 void init_contact(contact *pcon); void add_contact(contact *pcon); void del_contact(contact *pcon); void search_contact(contact *pcon); void modify_contact(contact *pcon); void show_contact(contact *pcon); void clear_contact(contact *pcon); void sort_contact(contact *pcon);
函数实现部分:
#define _CRT_SECURE_NO_WARNINGS 1 #include"contact.h" //初始化通讯录 void init_contact(contact *pcon) { pcon->count = 0; } //添加联系人 void add_contact(contact *pcon) { if (pcon->count >= MAX) { printf("电话本已满,无法添加"); return; } printf("请输入名字:"); scanf("%s", pcon->con[pcon->count].name); printf("请输入性别:"); scanf("%s", pcon->con[pcon->count].sex); printf("请输入年龄:"); scanf("%d", &pcon->con[pcon->count].age); printf("请输入电话:"); scanf("%s", pcon->con[pcon->count].tele); printf("请输入地址:"); scanf("%s", pcon->con[pcon->count].addr); pcon->count++; printf("添加成功!\n"); } //内部查找函数 static int find(contact *pcon,const char *name)//name用const保护,名字不被改变 { int i = 0; for (i = 0; i < pcon->count; i++) { if (strcmp(name, pcon->con[i].name) == 0) return i; } return -1; } //删除联系人 void del_contact(contact *pcon) { char name[MAX_NAME]; int i = 0; printf("请输入要删除的人的姓名"); scanf("%s", &name); int ret = find(pcon,name); if (ret == -1) { printf("要删除的人不存在!\n"); return; } else { for (i = ret; i < pcon->count - 1; i++) { pcon->con[i] = pcon->con[i + 1];//从要删除的那位开始,后面依次向 //前覆盖 } } pcon->count--; printf("删除成功\n"); } //查找联系人 void search_contact(contact *pcon) { char name[MAX_NAME]; int i = 0; printf("请输入要查找的人的姓名"); scanf("%s", &name); int ret = find(pcon, name); if (ret == -1) { printf("要查找的人不存在\n"); return; } else { printf("%10s %5s %d %12s %20s\n" , pcon->con[ret].name, pcon->con[ret].sex, pcon->con[ret].age, pcon->con[ret].tele, pcon->con[ret].addr); } } //修改联系人 void modify_contact(contact *pcon) { char name[MAX_NAME]; int i = 0; printf("请输入要修改的人的姓名"); scanf("%s", &name); int ret = find(pcon, name); if (ret == -1) { printf("要修改的人不存在\n"); return; } else { printf("请输入名字:"); printf("%s", pcon->con[ret].name); printf("请输入性别:"); printf("%s", pcon->con[ret].sex); printf("请输入年龄:"); printf("%d", pcon->con[ret].age); printf("请输入电话:"); printf("%s", pcon->con[ret].tele); printf("请输入地址:"); printf("%s", pcon->con[ret].addr); } } //显示联系人 void show_contact(contact *pcon) { int i = 0; printf("%10s %5s %5s %12s %20s\n", "name", "sex", "age", "tele", "addr"); for (i = 0; i < pcon->count; i++) { printf("%10s %5s %5d %12s %20s\n", pcon->con[i].name, pcon->con[i].sex, pcon->con[i].age, pcon->con[i].tele, pcon->con[i].addr); } } //清空联系人 void clear_contact(contact *pcon) { pcon->count = 0; printf("清空成功\n"); } //排序联系人,此函数用的是冒泡排序 void sort_contact(contact *pcon) { int i = 0; int j = 0; peo tmp; for (i = 0; i < pcon->count - 1; i++) { for (j = 0; j < pcon->count - 1 - i; j++) { if (strcmp(pcon->con[j].name, pcon->con[j + 1].name)>0) { tmp = pcon->con[j]; pcon->con[j + 1] = pcon->con[j]; pcon->con[j] = tmp; } } } printf("排序完成\n"); }
测试部分:
#define _CRT_SECURE_NO_WARNINGS 1 #include"contact.h" //简易菜单 void menu() { 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(" 0.EXIT \n"); printf("***************************************\n"); } void test() { contact mycon; init_contact(&mycon); int input = 1; while (input) { menu(); printf("请输入选择:"); scanf("%d", &input); switch (input) { case ADD: add_contact(&mycon); break; case DEL: del_contact(&mycon); break; case SHOW: show_contact(&mycon); break; case SEARCH: search_contact(&mycon); break; case MODIFY: modify_contact(&mycon); break; case CLEAR: clear_contact(&mycon); break; case SORT: sort_contact(&mycon); break; case EXIT: exit(0); break; default: break; } } } int main() { test(); system("pause"); return 0; }
这是一个简单的通讯录,以后会有更好更严谨,功能更完善的呈献给大家。希望大家能一起交流,写的不好的能多多指正。(*^__^*)