竟然栽倒在这里!(通讯录一)
来源:互联网 发布:淘宝助理是免费的吗 编辑:程序博客网 时间:2024/05/17 06:54
#define _CRT_SECURE_NO_WARNINGS 1 #ifndef __CONTACT_H//防止重复引入 #define __CONTACT_H__ #include <stdio.h> #include <string.h> #include<stdlib.h> enum OP//使用枚举,让switch语句更清晰明了 { EXIT, ADD, DEL, MODIFY, SEARCH, DISPLAY, SORT, CLEAR }; #define NAME_MAX 20 #define SEX_MAX 5 #define TELE_MAX 12 #define ADDR_MAX 25 #define MAX 1000 typedef struct Person//通讯录成员的具体信息 { char name[NAME_MAX]; int age; char sex[SEX_MAX]; char tele[TELE_MAX]; char addr[ADDR_MAX]; }Person;typedef struct Contact { Person data[MAX];//通讯录能保存的最多人数 int size;//当前包含的人数 }Contact,*con;//指针用来在函数内部接收结构体指针
void menu();//打印菜单void _add_contact(con pcon);//增加成员 void _del_contact(con pcon);//删除成员 void _search_contact(con pcon);//查询成员 void _modify_contact(con pcon);//修改成员 void _display_contact(con pcon);//显示所有成员 void _clear_contact(con pcon);//清空所有成员 void _sort_contact(con pcon);//按姓名排序所有成员 #endif //__CONTACT_H__
#include"contact.h"int main(){int input=1;Contact pcon={0};pcon.size=0;while(input){ menu(); printf("请选择:"); scanf("%d",&input); switch(input) { case ADD: _add_contact(&pcon); break; case DEL: _del_contact(&pcon); break; case SEARCH: _search_contact(&pcon); break; case MODIFY: _modify_contact(&pcon); break; case DISPLAY: _display_contact(&pcon); break; case CLEAR: _clear_contact(&pcon); break; case SORT: _sort_contact(&pcon); break; case EXIT: break; default: printf("选择参数错误\n"); break; }}system("pause");return 0;}</span>
#include"contact.h"void 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");}int find(con pcon,char arr[])//由于后面的很多函数都用到查找函数,所以将其封装为函数{ int i=0; for(i=0; i<pcon->size; i++) { if(strcmp(pcon->data[i].name,arr)) { return i; } } return -1;}void _add_contact(con pcon)//增加成员{ if(pcon->size<MAX){printf("请输入你要添加的成员信息:\n"); printf("请输入姓名:"); scanf("%s",(pcon->data[pcon->size].name )); printf("请输入年龄:");scanf("%d",&(pcon->data[pcon->size].age )); printf("请输入性别:");scanf("%s",(pcon->data[pcon->size].sex)); printf("请输入电话:");scanf("%s",(pcon->data[pcon->size].tele )); printf("请输入地址:"); scanf("%s",(pcon->data[pcon->size].addr ));printf("添加成功!\n");pcon->size++;}elseprintf("通讯录已满!\n");}void _display_contact(con pcon)//显示所有成员{int i=0;for(i=0; i<pcon->size; i++){printf("%s%10d%10s%10s%10s\n",pcon->data[i].name, pcon->data[i].age, pcon->data[i].sex, pcon->data[i].tele, pcon->data[i].addr);}printf("打印成功!\n");}void _del_contact(con pcon)//删除成员{ int i=0; char name[20]={0}; printf("请输入你要删除的成员姓名:"); scanf("%s",&name); i=find(pcon,name); if(i>=0) { pcon->data[i]=pcon->data[pcon->size-1]; (pcon->size)--; printf("删除成功!\n"); } else printf("没找到要删除的成员!\n");}void _search_contact(con pcon)//查询成员{ int i=0; char name[20]={0}; printf("请输入你要查询成员的姓名:"); scanf("%s",&name); i=find(pcon,name); if(i>=0) { printf("%s%10d%10s%10s%10s\n",pcon->data[i].name, pcon->data[i].age, pcon->data[i].sex, pcon->data[i].tele, pcon->data[i].addr); printf("查询成功!\n"); } else printf("没找到你要查询的成员!\n");}void _modify_contact(con pcon)//修改成员{int i=0;char name[20]={0};printf("请输入你要修改的成员:");scanf("%s",name);i=find(pcon,name);if(i>=0){ printf("请输入你要修改的成员信息:\n"); printf("请输入姓名:"); scanf("%s",(pcon->data[i].name )); printf("请输入年龄:");scanf("%d",&(pcon->data[i].age )); printf("请输入性别:");scanf("%s",(pcon->data[i].sex)); printf("请输入电话:");scanf("%s",(pcon->data[i].tele )); printf("请输入地址:"); scanf("%s",(pcon->data[i].addr ));printf("修改成功!");}elseprintf("没找到你要修改的成员!\n");}void _sort_contact(con pcon)//按姓名排序所有成员{int i=0;int j=0;int flag=0;for(i=0; i<pcon->size-1; i++)//控制排序趟数,最后一次不需要交换{flag=1; for(j=0; j<pcon->size-1-i; j++) { if(strcmp((pcon->data[j].name),(pcon->data[j+1].name))>0){ Person tmp= pcon->data[j]; pcon->data[j]=pcon->data[j+1]; pcon->data[j+1]=tmp; flag=0;}if(flag==1) break; } }printf("排序成功!\n");//_display_contact(pcon);}void _clear_contact(con pcon)//清空所有成员{pcon->size=0;//因为刚开始时通讯录为空,所以这条语句可达到清空目的}
一定要注意,打印菜单的顺序要和枚举成员的定义顺序一致,而不是主函数的switch语句,呜呜呜,浪费了我好长时间才找出错误!
2 0
- 竟然栽倒在这里!(通讯录一)
- 真是老了,竟然错在这里
- 竟然没有在这里写过博客
- 不要栽倒在feof上
- 这里竟然也开博客了:)
- 我竟然四年前在这里写过一篇文章。。
- 太变态了, opengl的下载链接竟然在这里
- 设计模式---状态模式(今天CSDN竟然上不去,暂时发在这里) (从百度空间转回来的)
- DEMO:通讯录(一)
- 上次机试, 栽倒在求最值的问题上, 哎
- PHP 制作通讯录(一)
- iOS 通讯录访问(一)
- android通讯录实例(一)
- 通讯录(静态版)一
- 实现动态版本通讯录(在简易通讯录的基础上)
- 关于移动视频直播技术,关键干货都在这里(一)采集
- 关于直播,所有的技术细节都在这里了(一)
- 关于直播,所有的技术细节都在这里了(一)
- HDU4300 Clairewd’s message 扩展kmp
- 解决building workplace 导致的卡死,使得eclipse加速
- 一段snmp代码
- QWebView
- 关于const用法小结
- 竟然栽倒在这里!(通讯录一)
- 关注的计算机视觉研究组和个人主页列表
- Objective-C中NSObject.h详解
- 【好】Java 类中各成分加载顺序 和 内存中的存放位置
- mktime函数实现获取当前系统时间
- hitTest
- 配置各类硬件
- C++——Const总结
- .NET执行SQL插入时间的问题