标签:
1 #include"stdio.h" 2 #include"string.h" 3 #include"stdlib.h" 4 FILE *fp; 5 #define M 100 6 typedef struct Record 7 { 8 char name[20]; 9 char age[3]; 10 char number[30],city[30],work[30],other[30]; 11 }R; 12 void cmd_1(); 13 void cmd_write(R info[],int n) //重新写入函数 14 { 15 fclose(fp); 16 if((fp=fopen("address.txl","wb"))==NULL) 17 { 18 printf("CANNOT OPEN FILE\n"); 19 exit(1); 20 } 21 fwrite(info,sizeof(R),n,fp); 22 fclose(fp); 23 } 24 25 void for_1(int n,char ch) //界面元素循环输出函数 26 { 27 int i; 28 for(i=1;i<=n;i++) 29 printf("%c",ch); 30 } 31 32 void cmd_4() //建立通讯录文件 33 { 34 35 if((fp=fopen("address.txl","wb"))==NULL) 36 { 37 printf("CANNOT OPEN FILE\n"); 38 exit(1); 39 } 40 fclose(fp); 41 printf("\n\n文件建立成功,请使用 3:新建联系人 功能\n"); 42 } 43 int cmd_2_turn_x(R info[],int n) //cmd_2_turn 附属函数:record结构体组 输出 44 { 45 int i; 46 printf("\n\n我 的 通 讯 录\n"); 47 for_1(30,‘*‘); 48 putchar(‘\n‘); 49 for(i=0;i<n;i++) 50 printf("%-5d%-10s%-4s%-15s%-10s%-4s %-s\n",i+1,info[i].name,info[i].age,info[i].number,info[i].city,info[i].work,info[i].other); 51 printf("\n\n显示结束,请选择序号:"); 52 53 int a; 54 scanf("%d",&a); 55 return a; 56 } 57 58 void cmd_2_turn(R info[],int n) //cmd_2附属函数 按循序修改 59 { 60 61 while(1) 62 { 63 int ask=cmd_2_turn_x(info,n); 64 if(ask>n||ask<=0) 65 { 66 printf("对不起,序号范围超出\n"); 67 return; 68 } 69 getchar(); 70 fflush(stdin); 71 printf("输入姓名:"); 72 gets(info[ask-1].name); 73 printf("\n输入年龄:"); 74 gets(info[ask-1].age); 75 printf("\n输入号码:"); 76 gets(info[ask-1].number); 77 printf("\n城市:"); 78 gets(info[ask-1].city); 79 printf("\n输入工作单位:"); 80 gets(info[ask-1].work); 81 printf("\n输入备注:"); 82 gets(info[ask-1].other); 83 printf("是否保存修改(y/n):"); 84 char a=getchar(); 85 if(a==‘y‘) 86 { 87 cmd_write(info,n); 88 printf("\n保存成功!\n"); 89 return; 90 } 91 else 92 { 93 for_1(30,‘*‘); 94 printf("\n1:返回到上级\n2:继续修改\n"); 95 printf("\n请输入指令:"); 96 int ask_1; 97 scanf("%d",&ask_1); 98 if(ask==1) return; 99 else continue; 100 } 101 102 } 103 104 } 105 void cmd_2_name(R info[],int n) //cmd_2附属函数 按名字修改 106 { 107 while(1) 108 { 109 printf("\n\n请输入待查找的姓名:"); 110 char ask_name[10]; 111 getchar(); 112 gets(ask_name); 113 int i; 114 for(i=0;i<n;i++) 115 if(strcmp(info[i].name ,ask_name)==0) break; 116 if(i>=n) {printf("\n查无此人\n"); return;} 117 else 118 { 119 printf("\n查找成功,请修改\n"); 120 fflush(stdin); 121 printf("输入姓名:"); 122 gets(info[i].name); 123 printf("\n输入年龄:"); 124 gets(info[i].age); 125 printf("\n输入号码:"); 126 gets(info[i].number); 127 printf("\n城市:"); 128 gets(info[i].city); 129 printf("\n输入工作单位:"); 130 gets(info[i].work); 131 printf("\n输入备注:"); 132 gets(info[i].other); 133 printf("是否保存修改(y/n):"); 134 char a=getchar(); 135 if(a==‘y‘) 136 { 137 cmd_write(info,n); 138 printf("\n修改成功!\n"); 139 printf("\n是否继续修改(y/n):"); 140 getchar(); 141 char b=getchar(); 142 if(b==‘y‘) continue; 143 if(b==‘n‘) return; 144 } 145 else 146 { 147 for_1(30,‘*‘); 148 printf("\n1:返回到上级\n2:继续修改\n"); 149 printf("\n请输入指令:"); 150 int ask_1; 151 scanf("%d",&ask_1); 152 if(ask_1==1) return; 153 else continue; 154 } 155 } 156 } 157 } 158 void cmd_1_1(R info[],int n); 159 void cmd_2() //修改联系人 160 { 161 if((fp=fopen("address.txl","rb"))==NULL) 162 { 163 printf("CANNOT OPEN FILE\n"); 164 exit(1); 165 } 166 R temp,info[M]; 167 int i=0; 168 while(fread(&temp,sizeof(R),1,fp)==1) 169 info[i++]=temp; 170 while(1) 171 { 172 173 printf("\n修 改 联 系 人\n"); 174 for_1(30,‘*‘); 175 printf("\n1:浏览通讯录"); 176 printf("\n2:按序号修改\n3:按姓名修改\n4:退出\n"); 177 printf("\n请输入指令:"); 178 int ask; 179 scanf("%d",&ask); 180 if(ask==1) cmd_1_1(info,i); 181 else if(ask==2) cmd_2_turn(info,i); 182 else if(ask==3) cmd_2_name(info,i); 183 else return; 184 } 185 } 186 void cmd_3() //新建联系人函数 187 { 188 R record; 189 char a; 190 FILE *fp; 191 if((fp=fopen("address.txl","ab"))==NULL) 192 { 193 printf("CANNOT OPEN FILE "); 194 exit(1); 195 } 196 197 printf("\n\n"); 198 while(1) //新建联系人界面 199 { 200 getchar(); 201 fflush(stdin); 202 printf("输入姓名:"); 203 gets(record.name); 204 printf("\n输入年龄:"); 205 gets(record.age); 206 printf("\n输入号码:"); 207 gets(record.number); 208 printf("\n城市:"); 209 gets(record.city); 210 printf("\n输入工作单位:"); 211 gets(record.work); 212 printf("\n输入备注:"); 213 gets(record.other); 214 printf("是否保存(y/n):"); 215 a=getchar(); 216 if(a==‘y‘) 217 { 218 fwrite(&record,sizeof(R),1,fp); 219 printf("\n····\n"); 220 printf("保存成功\n"); 221 } 222 getchar(); 223 printf("是否继续建立联系人(y/n):"); 224 a=getchar(); 225 if(a==‘n‘) break; 226 printf("\n"); 227 } 228 fclose(fp); 229 return; 230 } 231 void cmd_1_1(R info[],int n) //cmd_1附属函数:record结构体组 输出 232 { 233 int i; 234 printf("\n\n我 的 通 讯 录\n"); 235 for_1(30,‘*‘); 236 putchar(‘\n‘); 237 for(i=0;i<n;i++) 238 printf("%-5d%-10s%-4s%-15s%-10s%-4s %-s\n",i+1,info[i].name,info[i].age,info[i].number,info[i].city,info[i].work,info[i].other); 239 printf("\n\n显示结束,按任意键键返回上级目录:"); 240 getchar(); 241 char a=getchar(); 242 if(a!=NULL) return; 243 } 244 245 void sort_name(R info[],int n) //cmd_1附属函数姓名排序 246 { 247 int i,j; 248 R temp,info_t[M]; 249 for(i=0;i<n;i++) 250 info_t[i]=info[i]; 251 for(i=1;i<n;i++) 252 for(j=0;j<n-i;j++) 253 if(strcmp(info_t[j].name,info_t[j+1].name)>0) 254 { 255 temp=info_t[j]; 256 info_t[j]=info_t[j+1]; 257 info_t[j+1]=temp; 258 } 259 cmd_1_1(info_t,n); 260 return; 261 } 262 void sort_city(R info[],int n) //城市排序函数 263 { 264 int i,j; 265 R temp,info_t[M]; 266 for(i=0;i<n;i++) 267 info_t[i]=info[i]; 268 for(i=1;i<n;i++) 269 for(j=0;j<n-i;j++) 270 if(strcmp(info_t[j].city,info_t[j+1].city)>0) 271 { 272 temp=info_t[j]; 273 info_t[j]=info_t[j+1]; 274 info_t[j+1]=temp; 275 } 276 cmd_1_1(info_t,n); 277 return; 278 } 279 void cmd_1_2(R info[],int n) //显示联系人函数附属函数 转移函数 280 { 281 int ask; 282 int i; 283 R info_t[M]; 284 for(i=0;i<n;i++) 285 info_t[i]=info[i]; 286 while(1) 287 { 288 289 printf("\n\n排 序 显 示\n"); 290 for_1(30,‘*‘); 291 printf("\n1:按姓名排序\n"); 292 for_1(30,‘*‘); 293 printf("\n2:按城市输出\n"); 294 for_1(30,‘*‘); 295 printf("\n3:返回上一层\n"); 296 for_1(30,‘*‘); 297 printf("\n请输入指令:"); 298 scanf("%d",&ask); 299 if(ask==3) break; 300 else if(ask==1) sort_name(info,n); 301 else if(ask==2) sort_city(info,n); 302 else {printf("指令错误,重新输入"); continue;} 303 } 304 } 305 306 void cmd_1() //显示联系人函数 307 { 308 if((fp=fopen("address.txl","rb"))==NULL) 309 { 310 printf("CANNOT OPEN FILE"); 311 exit(1); 312 } 313 R temp,info[M]; 314 int i=0,cmd_x; 315 while(fread(&temp,sizeof(R),1,fp)==1) 316 info[i++]=temp; 317 318 while(1) //通讯录显示菜单界面 319 { 320 printf("\n显 示 联 系 人(共有 %d 条记录)\n",i); 321 for_1(30,‘*‘); 322 printf("\n1:按自然顺序输出\n"); 323 for_1(30,‘*‘); 324 printf("\n2:按排序顺序显示\n"); 325 for_1(30,‘*‘); 326 printf("\n3:退出显示程序\n"); 327 for_1(30,‘*‘); 328 printf("\n请输入指令:"); 329 scanf("%d",&cmd_x); 330 if(cmd_x==3) {fclose(fp); return;} 331 else if(cmd_x==1) cmd_1_1(info,i); 332 else if(cmd_x==2) cmd_1_2(info,i); 333 else {printf("指令错误,请重新输入!\n"); continue;} 334 } 335 fclose(fp); 336 } 337 void cmd_5_del(R info[],int n,int turn) //删除联系人函数附属函数 删除函数 338 { 339 int i; 340 if(turn==n-1) return; 341 for(i=turn-1;i<n-1;i++) 342 info[i]=info[i+1]; 343 } 344 void cmd_5_turn(R info[],int n) //删除联系人函数附属函数 序号删除函数 345 { 346 int i; 347 printf("\n\n我 的 通 讯 录\n"); 348 for_1(30,‘*‘); 349 putchar(‘\n‘); 350 for(i=0;i<n;i++) 351 printf("%-5d%-10s%-4s%-15s%-10s%-4s %-s\n",i+1,info[i].name,info[i].age,info[i].number,info[i].city,info[i].work,info[i].other); 352 printf("\n\n\n请输入序号:"); 353 int turn; 354 scanf("%d",&turn); 355 if(turn>n||turn<=0) 356 { 357 printf("\n对不起,超出已存范围\n"); 358 return; 359 } 360 printf("\n\n%-5d%-10s%-4s%-15s%-10s%-4s %-s\n\n",turn,info[turn-1].name,info[turn-1].age,info[turn-1].number,info[turn-1].city,info[turn-1].work,info[turn-1].other); 361 getchar(); 362 printf("确定删除?(y/n)"); 363 char ask=getchar(); 364 if(ask==‘y‘) 365 { 366 cmd_5_del(info,n,turn); 367 cmd_write(info,n-1); 368 printf("\n删除成功!\n"); 369 } 370 return; 371 } 372 void cmd_5_name(R info[],int n) //删除联系人函数附属函数 姓名删除 373 { 374 printf("\n请输入名字:"); 375 char name[10]; 376 getchar(); 377 gets(name); 378 int i; 379 for(i=0;i<n;i++) 380 if(strcmp(info[i].name,name)==0) break; 381 if(i>=n) 382 { 383 printf("\n查无此人\n"); 384 return; 385 } 386 else 387 { 388 printf("\n\n%-5d%-10s%-4s%-15s%-10s%-4s %-s\n\n",i+1,info[i].name,info[i].age,info[i].number,info[i].city,info[i].work,info[i].other); 389 //getchar(); 390 printf("确定删除?(y/n)"); 391 char ask=getchar(); 392 if(ask==‘y‘) 393 { 394 cmd_5_del(info,n,i+1); 395 cmd_write(info,n-1); 396 printf("\n删除成功!\n"); 397 } 398 return; 399 } 400 } 401 void cmd_5() //删除联系人函数 402 { 403 if((fp=fopen("address.txl","rb"))==NULL) 404 { 405 printf("CANNOT OPEN FILE"); 406 exit(1); 407 } 408 R temp,info[M]; 409 int i=0; 410 while(fread(&temp,sizeof(R),1,fp)==1) 411 info[i++]=temp; 412 while(1) 413 { 414 int ask; 415 printf("\n删 除 联 系 人\n"); 416 for_1(30,‘*‘); 417 printf("\n1:序号删除 2:姓名删除 3:退出"); 418 printf("\n\n请输入指令:"); 419 scanf("%d",&ask); 420 if(ask==1) cmd_5_turn(info,i); 421 else if(ask==2) cmd_5_name(info,i); 422 else return; 423 } 424 } 425 426 void cmd_6_city(R info[],int n) //查询联系人函数附属函数 城市查询函数 427 { 428 char city[10]; 429 int i,j; 430 printf("\n按 城 市 查 询 联 系 人\n"); 431 for_1(30,‘*‘); 432 printf("\n请输入城市:"); 433 getchar(); 434 gets(city); 435 j=1; 436 for(i=0;i<n;i++) 437 if(strcmp(city,info[i].city)==0) 438 printf("%-5d%-10s%-4s%-15s%-10s%-4s %-s\n",j++,info[i].name,info[i].age,info[i].number,info[i].city,info[i].work,info[i].other); 439 printf("\n共查询到 %d 条记录\n按任意键返回",j-1); 440 char a=getchar(); 441 if(a!=NULL) return; 442 } 443 void cmd_6_name(R info[],int n) //查询联系人函数附属函数 姓名查询函数 444 { 445 char name[10]; 446 int i,j; 447 printf("\n按 城 市 查 询 联 系 人 \n"); 448 for_1(30,‘*‘); 449 printf("\n请输入名字:"); 450 getchar(); 451 gets(name); 452 j=1; 453 for(i=0;i<n;i++) 454 if(strcmp(name,info[i].name)==0) 455 printf("%-5d%-10s%-4s%-15s%-10s%-4s %-s\n",j++,info[i].name,info[i].age,info[i].number,info[i].city,info[i].work,info[i].other); 456 printf("\n共查询到 %d 条记录\n按任意键返回",j-1); 457 char a=getchar(); 458 if(a!=NULL) return; 459 } 460 461 void cmd_6() //查询联系人函数 462 { 463 if((fp=fopen("address.txl","rb"))==NULL) 464 { 465 printf("CANNOT OPEN FILE"); 466 exit(1); 467 } 468 469 R temp,info[M]; 470 int i=0; 471 while(fread(&temp,sizeof(R),1,fp)==1) 472 info[i++]=temp; 473 474 int ask; 475 while(1) 476 { 477 for_1(30,‘*‘); 478 printf("\n查 询 联 系 人\n"); 479 for_1(30,‘*‘); 480 printf("\n查询方式:1:姓名 2:城市 3:退出\n\n请输入指令:"); 481 scanf("%d",&ask); 482 if(ask==1) cmd_6_name(info,i); 483 else if(ask==2) cmd_6_city(info,i); 484 else return; 485 } 486 fclose(fp); 487 } 488 void cmd_7() 489 { 490 char str[100]; 491 if((fp=fopen("help.txt","r"))==NULL) 492 { 493 printf("CANNOT OPEN FILE\n"); 494 exit(1); 495 } 496 while(fgets(str,10,fp)) 497 printf("%s",str); 498 system("mspaint a.jpg"); 499 printf("\n\n"); 500 return; 501 } 502 503 void face_1() //外界面函数 504 { 505 printf("\n\n\n"); 506 for_1(5,‘ ‘); 507 printf("通讯录管理程序\n"); 508 for_1(30,‘*‘); 509 putchar(‘\n‘); 510 for_1(5,‘ ‘); 511 printf("1:显示联系人\n"); 512 for_1(5,‘ ‘); 513 printf("2:修改联系人\n"); 514 for_1(5,‘ ‘); 515 printf("3:新建联系人\n"); 516 for_1(5,‘ ‘); 517 printf("4:新建联系文件\n"); 518 for_1(5,‘ ‘); 519 printf("5:删除联系人\n"); 520 for_1(5,‘ ‘); 521 printf("6:查询联系人\n"); 522 for_1(5,‘ ‘); 523 printf("7:帮助\n"); 524 for_1(5,‘ ‘); 525 printf("8:退出通讯录\n"); 526 for_1(30,‘*‘); 527 putchar(‘\n‘); 528 for_1(5,‘ ‘); 529 printf("请输入指令:"); 530 } 531 int main(void) 532 { 533 int cmd; 534 while(1) 535 { 536 face_1(); //外界面函数 537 scanf("%d",&cmd); 538 putchar(‘\n‘); 539 540 switch(cmd) 541 { 542 case 1: cmd_1();break; 543 case 2: cmd_2();break; 544 case 3: cmd_3();break; 545 case 4: cmd_4();break; 546 case 5: cmd_5();break; 547 case 6: cmd_6();break; 548 case 7: cmd_7();break; 549 case 8: return 0; 550 default: 551 { 552 printf("指令错误,无法识别\n\n"); 553 continue; 554 } 555 } 556 } 557 return 0; 558 }
这个代码很幼稚,但这是我第一次的尝试,我只是想分享我的点滴
标签:
原文地址:http://www.cnblogs.com/xyfs/p/5507158.html