通讯录管理系统的设计与实现
一个高效地通讯录管理系统需要具备以下几项功能:
(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语言,拜拜。