问题12:
编写一个简单的通讯录管理系统。通讯录包括:姓名、通讯地址、邮编、联系电话,现编写一个通讯录管理系统,可以对通讯录进行输入、显示、查找,通讯录保存到一个文件中。(50分)
(提示:可能用到以下库函数:
malloc(),功能:分配size字节的存储区,
用法:(类型 *)malloc(size *sizeof(你要定义的类型));包含于<stdlib.h>库中
feof(),功能:检测文件是否结束
用法: int feof(fp)
FILE *fp;包含于<stdio.h>库中。) 问题12实现代码:
/* author:宋金时 */ /* date:2011/11/03 */ #include "Stdio.h" #include "Conio.h" #define N 20 #define FILE_NAME "add_book" typedef struct addbook { char name[N]; char add[N]; long p_code; long phone_num; }a_book; int g_pos=0; void init(a_book add[]); void menu(void); void input(a_book add[]); void display(a_book add[]); int find(a_book add[]); void save(a_book add[]); void clear_add(void); void delete_add(a_book add[]); void quit_save(a_book add[]); int main(void) { a_book arr_add[N]; int m_select; init(arr_add); while(1) { menu(); scanf("%d",&m_select); getchar(); switch(m_select) { case 1:input(arr_add);break; case 2:display(arr_add);break; case 3:find(arr_add);break; case 4:save(arr_add);break; case 5:delete_add(arr_add);break; case 6:clear_add();break; case 7:quit_save(arr_add); } } getch(); return 0; } void init(a_book add[]) { int m_i; char m_temp; FILE* fp; if((fp=fopen(FILE_NAME,"r"))==NULL) { if((fp=fopen(FILE_NAME,"wb+"))==NULL) { puts("open file error!\n"); getch(); exit(1); } } for(m_i=0;m_i<N;m_i++) { m_temp = fgetc(fp); if(m_temp==EOF) break; fseek(fp,-1,SEEK_CUR); fscanf(fp,"%s %s %ld %ld\n",add[m_i].name,\ add[m_i].add,&add[m_i].p_code,&add[m_i].phone_num); } g_pos = m_i; puts("init update success!\n"); /* rewind(fp);*/ fclose(fp); } void menu(void) { puts("1.input a new.\n"); puts("2.display contents of address book.\n"); puts("3.find infomation from address book.\n"); puts("4.save address book.\n"); puts("5.delete a address book.\n"); puts("6.clear address book.\n"); puts("7.save quit.\n"); puts("please select a number:"); } void input(a_book add[]) { puts("please input name address post code telephone number:\n"); /* gets(add[g_pos].name); gets(add[g_pos].add);*/ scanf("%s%s%ld%ld",add[g_pos].name,add[g_pos].add,\ &add[g_pos].p_code,&add[g_pos].phone_num); g_pos++; } void display(a_book add[]) { int m_i; save(add); /* init(add);*/ puts("name address postcode telephone\n"); for(m_i=0;m_i<g_pos;m_i++) { printf("%s %s %ld %ld\n",add[m_i].name,\ add[m_i].add,add[m_i].p_code,add[m_i].phone_num); } } int find(a_book add[]) { char m_name[N]; int m_i; puts("please name:"); gets(m_name); for(m_i=0;m_i<g_pos;m_i++) { if(strcmp(add[m_i].name,m_name)==0) { puts("name address postcode telephone\n"); printf("%s %s %ld %ld\n",add[m_i].name,\ add[m_i].add,add[m_i].p_code,add[m_i].phone_num); break; } } if(m_i==g_pos) puts("not find!\n"); return m_i; } void save(a_book add[]) { int m_i; FILE* fp; if((fp=fopen(FILE_NAME,"w"))==NULL) { puts("open file error!\n"); getch(); exit(1); } for(m_i=0;m_i<g_pos;m_i++) { fprintf(fp,"%s %s %ld %ld\n",add[m_i].name,add[m_i].add,\ add[m_i].p_code,add[m_i].phone_num); /* printf("%ld %ld\n",add[m_i].p_code,add[m_i].phone_num); */ } /* rewind(fp);*/ fclose(fp); puts("save success!\n"); /* getch(); exit(1); */ } void quit_save(a_book add[]) { save(add); exit(1); } void clear_add(void) { FILE* fp; if((fp=fopen(FILE_NAME,"wb+"))==NULL) { printf("not clear!\n"); } else { g_pos=0; fclose(fp); printf("clear success!\n"); } } void delete_add(a_book add[]) { int m_i = find(add); for(;m_i<g_pos;m_i++) { strcpy(add[m_i].name,add[m_i+1].name); strcpy(add[m_i].add,add[m_i+1].add); add[m_i].p_code = add[m_i+1].p_code; add[m_i].phone_num = add[m_i+1].phone_num; } g_pos--; printf("delete success!\n"); }