竟然栽倒在这里!(通讯录一)

来源:互联网 发布:淘宝助理是免费的吗 编辑:程序博客网 时间: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