今天我们来编程一个通讯录,内容要求是通信录可以用来存储1000个联系人的信息,具体信息分为姓名,性别,年龄,电话,地址,同时还要有各种功能:(1)添加联系人信息。(2)删除联系人信息。(3)修改联系人信息。(4)打印联系人信息。(5)查找联系人信息。(6)清空联系人信息。(7)根据姓名排序联系人信息。
首先这个题我们需要有三个部分,头文件test.h, 各种功能函数文件test.c, 主函数文件main.c 。
1.test.h
#ifndef _TEST_H_ #define _TEST_H_ #include<stdio.h> #include<stdlib.h> #include<Windows.h> #pragma warning(disable:4996) #define N 1000 typedef struct Stu //建立一个结构体来保存每个联系人的信息。 { char name[20]; char sex[20]; int age; int number[30]; char address[50]; }stu; typedef struct People //把通讯录和人员统计放在结构体内。 { stu num[N]; int count; }people; void menu1(); //修改信息的菜单函数。 void init(people *p); //初始化函数。 void my_add(people *p); //添加联系人函数。 void my_delect(people *p); //删除联系人信息函数。 void my_find(people *p); //查找联系人函数。 void my_modify(people *p); //修改联系人信息的函数。 void my_show(people *p); //展示联系人信息函数。 void my_empty(people *p); //清空联系人信息函数。 void my_sort(people *p); //排序函数。 #endif
2.test.c
#include"test.h" void menu1() //修改函数中的菜单函数。 { printf("*************************\n"); printf("***** 1.name *****\n"); printf("***** 2.sex *****\n"); printf("***** 3.age *****\n"); printf("***** 4.number *****\n"); printf("***** 5.address *****\n"); printf("***** 0.exit1 *****\n"); printf("*************************\n"); } void init(people *p) { int count=sizeof(p->num); //开辟一个sizeof(p->num)大的空间并给其附上0. p->count=0; memset(p->num,0,count); } int find(people *p,char *pname) //用来检验输入的名字是否与通讯录中的一致。有利于后面的查找,删除,修改函数的使用。 { int i=0; for(i=0;i<p->count;i++) { if(strcmp(p->num[i].name,pname)==0) //一致的话就返回它的位置,否则返回-1。 { return i; } } return -1; } void my_add(people *p) { printf("请输入姓名:\n"); //直接添加联系人信息。 scanf("%s",p->num[p->count].name); printf("请输入性别: \n"); scanf("%s",p->num[p->count].sex); printf("请输入年龄: \n"); scanf("%d",&p->num[p->count].age); printf("请输入电话: \n"); scanf("%d",&p->num[p->count].number); printf("请输入地址: \n"); scanf("%s",p->num[p->count].address); if(p->count>1000) //如果联系人数大于1000上限,就提醒满了。 { printf("It is empty!\n"); } else { p->count++; } } void my_delect(people *p) { char name[20]={0}; int result=0; int i=0; int n=0; printf("请输入删除人的姓名: \n"); scanf("%s",&name); result=find(p,name); //输入想删除人的姓名。 if(result!=-1) //如果和通讯录中的一样,就进行操作,否则提示联系人不存在。 { printf("你是否要删除该联系人?\n"); printf("删除请按1,不删除请按0\n"); //提醒用户是否确认删除信息。 scanf("%d", &n); if (n == 1) { for (i = 0; i < (p->count)-1; i++) { p->num[i] = p->num[i + 1]; } p->count --; printf("删除成功\n"); } else { printf("删除失败\n"); } } else { printf("你要删除的联系人不存在\n"); } } void my_find(people *p) { int i=0; int ret=0; char name[20]; printf("请输入查找人的姓名:\n"); scanf("%s",&name); ret=find(p,name); if(ret!=-1) //如果姓名一致,就展示出该联系人的信息,否则提示不存在。 { printf("name :%s sex:%s age:%d number:%d adress:%s",p->num[ret].name,p->num[ret].sex,p->num[ret].age,p->num[ret].number,p->num[ret].address); printf("\n"); } else { printf("你要查找的联系人不存在\n"); } } void my_modify(people *p) { int i=0; int ret=0; int n=0; char name[20]; printf("请输入你要修改联系人的姓名:\n"); scanf("%s",&name); ret=find(p,name); if(ret!=-1) //如果姓名一致进行操作。 { printf("name :%s sex:%s age:%d number:%d adress:%s",p->num[ret].name,p->num[ret].sex,p->num[ret].age,p->num[ret].number,p->num[ret].address); do{ menu1(); printf("请选择修改哪一项:\n"); scanf("%d",&n); //选择修改哪一项。 switch(n) { case 1: printf("请输入修改后的姓名:\n"); scanf("%s",p->num[ret].name); break; case 2: printf("请输入修改后的性别:\n"); scanf("%s",p->num[ret].sex); break; case 3: printf("请输入修改后的年纪:\n"); scanf("%d",p->num[ret].age); break; case 4: printf("请输入修改后的电话:\n"); scanf("%d",p->num[ret].number); break; case 5: printf("请输入修改后的地址:\n"); scanf("%s",p->num[ret].address); break; case 0: break; default: printf("Input error\n"); break; } }while(n); } else { printf("这个联系人不存在\n"); } } void my_show(people *p) { int i=0; for(i=0;i<p->count;i++) //直接展示通讯录中所有联系人的信息。 { printf("name :%s sex:%s age:%d number:%d adress:%s",p->num[i].name,p->num[i].sex,p->num[i].age,p->num[i].number,p->num[i].address); } } void my_empty(people *p) { p->count=0; //将通讯录中联系人的信息清空。 } void my_sort(people *p) //用冒泡法排序每个联系人的姓名,然后再输出每个人的所有信息。 { int i=0; int j=0; for(i=0;i<p->count-1;i++) { for(j=0;j<p->count-1-i;j++) { if(strcmp(p->num[i].name,p->num[j+1].name)>0) { stu t; t=p->num[j]; p->num[j]=p->num[j+1]; p->num[j+1]=t; } } } for(i=0;i<p->count;i++) { printf("name :%s sex:%s age:%d number:%d adress:%s",p->num[i].name,p->num[i].sex,p->num[i].age,p->num[i].number,p->num[i].address); printf("\n"); } }3.main.c
#include"test.h" people con; //定义一个参数。 void menu() //通信录的菜单。 { printf("+++++++++++++++++++++++++++++++++++++++++\n"); printf("+++++ 1.add 2.delect +++++\n"); printf("+++++ 3.modify 4.find +++++\n"); printf("+++++ 5.show 6.empty +++++\n"); printf("+++++ 7.sort 0.exit +++++\n"); printf("+++++++++++++++++++++++++++++++++++++++++\n"); printf("Pleaese select:\n"); } int main() { int select=0; while(1){ //可以循环使用菜单。 menu(); scanf("%d",&select); //输入你想操作的选项。 switch(select) //用switch来表示各个选项的实际操作。 { case 1: my_add(&con); //调用添加函数。 break; case 2: my_delect(&con); //调用删除函数。 break; case 3: my_modify(&con); //调用修改函数。 break; case 4: my_find(&con); //调用查找函数。 break; case 5: my_show(&con); //调用打印函数。 break; case 6: my_empty(&con); //调用清空函数。 break; case 7: my_sort(&con); //调用排序函数。 break; case 0: //退出程序。 exit(1); default: printf("Input error"); //如果输入错误会提醒。 break; } } system("pause"); return 0; }这样我们的通讯录就完成了。