有趣的通讯录—<静态版>
来源:互联网 发布:windows驱动器被锁定 编辑:程序博客网 时间:2024/05/21 05:58
在这里我们要解决的问题是采用顺序表的形式制作一个通讯录。
对于顺序表就是一种静态的模式,后续会有动态模式,以及文件操作模式,敬请期待!!!
后续我会更新其他方式的操作。
在这里,我们需要三个文件,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 1000struct 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;}
2 0
- 有趣的通讯录—<静态版>
- 有趣的通讯录—动态版
- 有趣的通讯录—最终版
- 静态版通讯录的实现
- 通讯录的静态实现
- 静态通讯录的实现
- 简单静态通讯录的实现
- 通讯录(静态版)一
- 通讯录——静态实现
- C语言——简易的静态通讯录实现
- 静态通讯录、动态通讯录
- 静态通讯录
- 静态通讯录
- 通讯录.静态
- 静态通讯录
- 简单的静态通讯录的实现。
- 模拟实现通讯录-静态的方法
- 静态顺序表实现简单的通讯录
- 颜色代码大全
- 常用排序算法总结(五)
- sqlite基本sql语句使用
- Servlet路径跳转问题
- LeetCode刷题之旅(6)
- 有趣的通讯录—<静态版>
- 求最长等差数列长度
- Scheme
- Android学习笔记之AndroidManifest.xml文件解析
- 解决RecyclerView上拉加载、下拉刷新、Header和Footer的第三方解决方案
- c++ 内存申请释放,构造函数,析构函数,执行顺序
- Generate Parentheses
- Android分包(MultiDex)后编译加速方案
- [SDOI2011] [BZOJ2242] 计算器 - bsgs,快速幂,逆元,map/hash