有趣的通讯录—<静态版>
2016-05-14 09:45
239 查看
在这里我们要解决的问题是采用顺序表的形式制作一个通讯录。
对于顺序表就是一种静态的模式,后续会有动态模式,以及文件操作模式,敬请期待!!!
后续我会更新其他方式的操作。
在这里,我们需要三个文件,contact.h封装结构体以及函数声明,conteact.c封装函数算法,最后,test.c封装主函数和测试函数。
对于顺序表就是一种静态的模式,后续会有动态模式,以及文件操作模式,敬请期待!!!
后续我会更新其他方式的操作。
在这里,我们需要三个文件,contact.h封装结构体以及函数声明,conteact.c封装函数算法,最后,test.c封装主函数和测试函数。
contact.h
#include<stdio.h> #include<stdlib.h> #include<string.h> #define NAME_MAX 20 #define SEX_MAX 5 #define TELE_MAX 20 #define ADD_MAX 50 #define MAX_SIZE 1000 struct contact { char name[NAME_MAX]; char sex[SEX_MAX]; int age; char tele[TELE_MAX]; char address[ADD_MAX]; }; struct A { struct contact arr[MAX_SIZE]; int i; }; enum op { EXIT, ADD, DEL, SEARCH, MODIFY, DISPLAY, CLEAR, SORT }; void Add(struct A *con); void print_contact(struct A *con); int find_position(struct A *pcon); int delete_contact(struct A *pcon); int find_contacts(struct A *pcon); int revise_contact(struct A *pcon); void put_empty(struct A *pcon); void sort_name(struct A *pcon); void _init_contact(struct A *pcon); void print_menu();
contact.c
#define _CRT_SECURE_NO_WARNINGS 1 #include"contact.h" //添加联系人信息 void Add(struct A *con) { printf("请输入名字:"); scanf("%s", con->arr[con->i].name); printf("请输入性别:"); scanf("%s", con->arr[con->i].sex); printf("请输入年龄:"); scanf("%d", &(con->arr[con->i].age)); printf("请输入电话号码:"); scanf("%s", con->arr[con->i].tele); printf("请输入地址:"); scanf("%s", con->arr[con->i].address); con->i++; printf("添加完毕。\n"); } //打印所有联系人信息 void print_contact(struct A *con) { printf("打印联系人信息\n"); int i = 0; printf("%-10s%-5s%-5s%-15s%-20s\n", "name", "sex", "age", "tele", "ddress"); for (i = 0; i < con->i; i++) { printf("%-10s%-5s%-5d%-15s%-20s\n", con->arr[i].name, con->arr[i].sex, con->arr[i].age, con->arr[i].tele, con->arr[i].address); } printf("\n"); } //查找指定联系人所在位置 int find_position(struct A *pcon) { int i = 0; char name[20]; printf("请输入你所要查找的名字:"); scanf("%s", name); for (i = 0; i < pcon->i; i++) { if (strcmp(pcon->arr[i].name, name) == 0) { return i; } } return -1; } //删除所有联系人信息 int delete_contact(struct A *pcon) { int i = 0; printf("删除联系人\n"); int ret = find_position(pcon); if (ret != -1) { for (i = ret; i < pcon->i - 1; i++) { pcon->arr[i] = pcon->arr[i + 1]; } pcon->i--; return 1; } else printf("没有找到这个人,无法删除!\n"); return 0; } //查找并且输出这个找到的信息。 int find_contacts(struct A *pcon) { printf("查找联系人\n"); int ret = find_position(pcon); if (ret != -1) { printf("姓名:%s\n", pcon->arr[ret].name); printf("性别:%s\n", pcon->arr[ret].sex); printf("年龄:%d\n", pcon->arr[ret].age); printf("电话号码:%s\n", pcon->arr[ret].tele); printf("地址:%s\n", pcon->arr[ret].address); return 1; } printf("没有找到\n"); return 0; } //修改指定联系人的信息 int revise_contact(struct A *pcon) { int ret = find_position(pcon); printf("修改联系人\n"); if (ret != -1) { printf("请输入你所想要修改的数据:"); printf("请输入名字:"); scanf("%s", pcon->arr[ret].name); printf("请输入性别:"); scanf("%s", pcon->arr[ret].sex); printf("请输入年龄:"); scanf("%d", &(pcon->arr[ret].age)); printf("请输入电话号码:"); scanf("%s", pcon->arr[ret].tele); printf("请输入地址:"); scanf("%s", pcon->arr[ret].address); return 1; } printf("没有找到你所需要修改的联系人。\n"); return 0; } //清空所有联系人 void put_empty(struct A *pcon) { printf("清空联系人\n"); memset(pcon->arr, 0, 1000 * sizeof(struct contact)); pcon->i = 0; } //以名字排序所有联系人 void sort_name(struct A *pcon) { printf("排序\n"); char ch = 0; int i = 0; int j = 0; printf("请选择排序方式(‘<’代表由z->a,'>'代表由a->z):"); fflush(stdin); scanf("%c", &ch); int flag = 0; if (ch == '>') { for (i = 0; i < pcon->i; i++) { flag = 0; for (j = 0; j < pcon->i - i - 1; j++) { if (strcmp(pcon->arr[j].name, pcon->arr[j + 1].name)>0) { struct contact tmp = { 0 }; tmp = pcon->arr[j]; pcon->arr[j] = pcon->arr[j + 1]; pcon->arr[j + 1] = tmp; flag = 1; } } if (flag == 0) break; } } else if (ch == '<') { for (i = 0; i < pcon->i; i++) { flag = 0; for (j = 0; j < pcon->i - i - 1; j++) { if (strcmp(pcon->arr[j].name, pcon->arr[j + 1].name)<0) { struct contact tmp = { 0 }; tmp = pcon->arr[j]; pcon->arr[j] = pcon->arr[j + 1]; pcon->arr[j + 1] = tmp; flag = 1; } } if (flag == 0) break; } } else printf("选择错误,请返回重新选择:\n"); printf("排序结束!\n"); } void _init_contact(struct A *pcon) { pcon->i = 0; memset(pcon->arr, 0, MAX_SIZE*sizeof(struct contact)); } void print_menu() { printf("$$$$$$$$CONTACT-TEXT$$$$$$$$\n"); 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"); }
test.c
#define _CRT_SECURE_NO_WARNINGS 1 #include"contact.h" void Test() { struct A con; int input = 1; _init_contact(&con); while (input) { print_menu(); printf("请选择:"); scanf("%d", &input); switch (input) { case ADD: Add(&con); break; case DEL: delete_contact(&con); break; case SEARCH: find_contacts(&con); break; case MODIFY: revise_contact(&con); break; case DISPLAY: print_contact(&con); break; case CLEAR: put_empty(&con); break; case SORT: sort_name(&con); break; case EXIT: break; default: break; } } } int main() { Test(); system("pause"); return 0; }
相关文章推荐
- 递归和尾递归的比较,斐波那契
- 常用排序算法总结(五)
- sqlite基本sql语句使用
- matlab文件IO(读取写入)2 低级例程
- ...python の 学习
- 动态创建Lambda表达式实现高级查询
- 初见android
- 常用排序算法总结(四)
- 颜色代码大全
- Servlet获取表单提交过来的数据
- 前++和后++引发的血案~~!!
- C/C++ 堆与栈的区别
- 运行时的多态与多重继承
- ACM 搜索 hdu1010 Tempter of the Bone
- Android开发中出现的低级错误之没有android jar包
- LeetCode刷题之旅(5)
- javaWeb(一)---html表单
- HTML5——应用缓存与Web Workers
- Python Django Web服务搭建基础
- color.xml