通讯录管理系统的设计与实现

一个高效地通讯录管理系统需要具备以下几项功能:

(1):新增联系人                     

(2):按姓名首字母冒泡排序显示             

(3):按手机号码选择排序显示             

(4):按QQ号码插入排序显示

(5):按姓名查找                     

(6):按手机号码查找                 

(7):修改联系人信息                         

(8):删除联系人信息                  

(9):返回联系人个数                                    

(10):保存联系人信息到文件中                                      

(11):读取文件中的联系人信息 

  1 #include<iostream>
  2 #include<stdio.h>
  3 #include<stdlib.h>
  4 #include<string.h>
  5 #include<cstring>
  6 using namespace std;
  7 typedef int elemtype;
  8 typedef struct Links{
  9     char name[100];//姓名
 10     char sex[100];//性别 
 11     char  num[100];//手机号
 12     char  QQ[100];//QQ号
 13     char email[100];//邮箱
 14     char address[100];//地址
 15 }Links;
 16 typedef struct Sqlist           //顺序表存储结构
 17 {
 18     Links elem[100];
 19     int length=0;
 20 } Sqlist;
 21 
 22 bool empty(Sqlist &L)  //判断列表是否为空 
 23 {
 24     if(L.length==0)
 25     return true;
 26     else return false;
 27 }
 28 
 29 void  Length(Sqlist &L)        //返回联系人个数 
 30 {
 31     printf("联系人的个数为:%d\n",L.length);
 32     return ;
 33 }
 34 
 35 int Main_Menu()
 36 {
 37     int choice;
 38     printf("****************************菜单*******************************\n");
 39     printf("                       1:新增联系人                            \n");
 40     printf("                       2:按姓名首字母冒泡排序显示              \n");
 41     printf("                       3:按手机号码选择排序显示                \n");
 42     printf("                       4:按QQ号码插入排序显示                  \n");
 43     printf("                       5:按姓名查找                            \n");
 44     printf("                       6:按手机号码查找                        \n");
 45     printf("                       7:修改联系人信息                        \n");
 46     printf("                       8:删除联系人信息                        \n");
 47     printf("                       9:返回联系人个数                        \n");
 48     printf("                       10:保存联系人信息到文件中               \n");
 49     printf("                       11:读取文件中的联系人信息               \n");
 50     printf("               12:退出系统                               \n");
 51     printf("请输入选择:");
 52     scanf("%d",&choice);
 53     while(choice>12||choice<0)//判断是否输入正确
 54     {
 55         printf("请重新选择:");
 56         scanf("%d",&choice);
 57     }
 58     return choice;
 59 }
 60 void Printlist(Sqlist &L);
 61 
 62 void Add(Sqlist &L)//输入联系人信息 
 63 {
 64     int i=0;
 65     while(1)
 66     {
 67         printf("请输入姓名:");
 68         scanf("%s",L.elem[i].name);
 69         if(L.elem[i].name[0]=='@')//姓名输入为空结束循环 
 70         break;
 71         printf("请输入性别:");
 72         scanf("%s",L.elem[i].sex);
 73         printf("请输入手机号码:");
 74         scanf("%s",L.elem[i].num);
 75         printf("请输入QQ号码:");
 76         scanf("%s",L.elem[i].QQ);
 77         printf("请输入邮箱:");
 78         scanf("%s",L.elem[i].email);
 79         printf("请输入地址:");
 80         scanf("%s",L.elem[i].address);
 81         L.length++;
 82         i++;
 83         printf("******\n");
 84         Printlist(L);
 85         printf("******\n");
 86     }
 87 } 
 88 
 89 void Printlist(Sqlist &L) //列表遍历输出 
 90 {
 91     for(int i=0;i<L.length;i++)
 92     {
 93         printf("姓名:%s 性别:%s 手机号:%s  QQ:%s 邮箱:%s 地址:%s \n",L.elem[i].name,L.elem[i].sex,L.elem[i].num,L.elem[i].QQ,L.elem[i].email,L.elem[i].address);
 94     }
 95 }
 96 
 97 
 98 void PPsort_name(Sqlist &L)//按名字进行冒泡排序
 99 {
100     int i,j;
101     Links temp;
102     for(i=0;i<L.length;i++)
103     {
104         for(j=i+1;j<L.length;j++)//冒泡排序
105         {
106             if(strcmp(L.elem[i].name,L.elem[j].name)<0)//当s1<s2时,返回为负数;当s1=s2时,返回值= 0当s1>s2时,返回正数
107             {
108                 temp=L.elem[i];
109                 L.elem[i]=L.elem[j];
110                 L.elem[j]=temp;
111             }
112         }
113     }
114 }
115 
116 void Selectsort_num(Sqlist &L)//按手机号码进行选择排序
117 {
118     int i,j;
119     for(i=0;i<L.length;i++)
120     {
121         int k=i;
122         for( j=i+1;j<L.length;j++)
123             if(strcmp(L.elem[j].num,L.elem[k].num)>0) k=j;
124         if(k!=i)
125         {
126             Links temp;
127             temp=L.elem[i];
128             L.elem[i]=L.elem[k];
129             L.elem[k]=temp;
130         }    
131     }
132 }
133 
134 void Insertsort(Sqlist &L)  //QQ直接插入排序 
135 {
136     int i,j;
137     Links temp;
138     for(i=1;i<L.length;i++)
139     {
140         if(strcmp(L.elem[i].QQ,L.elem[i-1].QQ)>0)
141         {
142             temp=L.elem[i];
143             for(j=i-1;j>=0&&strcmp(L.elem[j].QQ,temp.QQ)<0;j--)  
144                 L.elem[j+1]=L.elem[j];
145             L.elem[j+1]=temp;
146         }
147     }
148 }
149 void Search_name(Sqlist &L)  //根据姓名查找 
150 {
151     int i,flag=0;
152     char a[20];
153     char temp[100];
154     printf("请输入要查询的联系人姓名:");
155     scanf("%s",temp);
156     for(i=0;i<L.length;i++)
157     {
158         if(!strcmp(temp,L.elem[i].name))//如果名字相同
159         {
160             printf("姓名:%s 性别:%s 手机号:%s  QQ:%s 邮箱:%s 地址:%s \n",L.elem[i].name,L.elem[i].sex,L.elem[i].num,L.elem[i].QQ,L.elem[i].email,L.elem[i].address);
161             flag=1;
162         }        
163     }
164     if(flag==0)
165     {
166         printf("无该联系人!\n");
167         return ;
168     }
169 }
170 void Search_num(Sqlist &L)//根据电话号码查找 
171 {
172     int i,flag=0;
173     char b[20];
174     printf("请输入要查询的联系人号码:");
175     scanf("%s",b);
176     for(i=0;i<L.length;i++)
177     {
178         if(strcmp(b,L.elem[i].num)==0)
179         {
180             printf("姓名:%s 性别:%s 手机号:%s  QQ:%s 邮箱:%s 地址:%s \n",L.elem[i].name,L.elem[i].sex,L.elem[i].num,L.elem[i].QQ,L.elem[i].email,L.elem[i].address);//如果号码相同显示
181             flag=1;
182         }    
183     }
184     if(flag==0)
185     {
186         printf("无该联系人!\n");
187         return ;
188     }
189 }
190 void Save(Sqlist &L)//保存文件 
191 {
192     FILE *fp;
193     if((fp=fopen("Links.txt","w"))==NULL)
194     {
195         printf("文件打开失败\n");
196         getchar();
197         exit(1);
198     }
199 
200     for(int i =0; i<L.length; i++)
201     {
202         fprintf(fp,"%s %s %s %s %s %s \n",L.elem[i].name,L.elem[i].sex,L.elem[i].num,L.elem[i].QQ,L.elem[i].email,L.elem[i].address);
203      }
204     fclose(fp);                                   
205 }
206 void Read(Sqlist &L)//读取文件 
207 {
208     int i=0;
209     FILE *fp;
210     if((fp=fopen("Links.txt","r"))==NULL)
211     {
212         printf("文件打开失败\n");
213         getchar();
214         exit(1);
215     }
216     while(fscanf(fp,"%s %s %s %s %s %s \n",L.elem[i].name,L.elem[i].sex,L.elem[i].num,L.elem[i].QQ,L.elem[i].email,L.elem[i].address)!=EOF)
217      {
218        printf("%s %s %s %s %s %s \n",L.elem[i].name,L.elem[i].sex,L.elem[i].num,L.elem[i].QQ,L.elem[i].email,L.elem[i].address);//输出到显示器屏幕 
219        i++;
220      } 
221     fclose(fp);                                   
222 }
223 
224 
225 
226 void Modify(Sqlist &L)
227 {
228     int i;
229     char a[20];
230     char name[100];
231     char sex[100];
232     char  num[100];
233     char  QQ[100];
234     char email[100];
235     char address[100];
236     printf("请输入要修改的联系人姓名:");
237     scanf("%s",a);
238     for(i=0;i<L.length;i++)
239     {
240         if(strcmp(a,L.elem[i].name)==0)
241         {
242              
243             printf("请你输入修改的联系人姓名");
244             scanf("%s",&name);
245             if(name)
246             strcpy(L.elem[i].name,name);//strcpy()会将参数2字符串拷贝至参数1所指的地址
247             printf("请你输入修改的联系人性别:");
248             scanf("%s",&sex);
249             if(sex)
250             strcpy(L.elem[i].sex,sex);
251             printf("请你输入修改的联系人手机号:");
252             scanf("%s",&num);
253             if(num)
254             strcpy(L.elem[i].num,num);
255             printf("请你输入修改的联系人QQ:");
256             scanf("%s",&QQ);
257             if(QQ)
258             strcpy(L.elem[i].QQ,QQ);
259             printf("请你输入修改的联系人邮箱:");
260             scanf("%s",&email);
261             if(email)
262             strcpy(L.elem[i].email,email);
263             printf("请你输入修改的联系人地址:");
264             scanf("%s",&address);
265             if(address)
266             strcpy(L.elem[i].address,address);
267             break;
268         }
269     }
270     
271 }
272 
273 void Delete(Sqlist &L)
274 {
275     printf("输入要删除的联系人姓名:");
276     char name[100];
277     scanf("%s",name);
278     int i=0;
279     while(i<L.length&&strcmp(name,L.elem[i].name))
280         i++;
281     while(i<L.length-1)
282     {
283         L.elem[i]=L.elem[i+1];
284         i++;
285     }
286     L.length-=1;
287     printf("已删除\n"); 
288 }
289 
290 int main()
291 {
292     system("color F0"); 
293     Sqlist L;
294     while(1)
295     {
296         switch(Main_Menu())
297         {
298         case 1:
299             Add(L);
300             break;
301         case 2:
302             PPsort_name(L);
303             Printlist(L);
304             break;
305         case 3:
306             Selectsort_num(L);
307             Printlist(L);
308             break;
309         case 4:
310             Insertsort(L);
311             Printlist(L);
312             break;
313         case 5:
314             Search_name(L);
315             break;
316         case 6:
317             Search_num(L);
318             break;
319         case 7:
320             Modify(L);
321             break;
322         case 8:
323             Delete(L);
324             break;
325         case 9:
326             Length(L);
327             break;
328         case 10:
329             Save(L);
330             break;
331         case 11:
332             Read(L);
333             break;
334         case 12:
335             exit(0);
336         }
337     }
338     return 0;
339  } 

  大一上写的,现在感觉好纯真,留个纪念。C语言,拜拜。

posted on 2022-03-16 17:34  保护小徐同学的头发  阅读(441)  评论(0)    收藏  举报