1 //编写个人通讯录管理系统,实现以下功能 2 //1.管理系统提供菜单 3 //2.将通讯录存入文件中,并且命名为PersonInfo.txt 4 //3.管理系统将执行以下操作 5 //(1)查看通讯录的所有信息 6 //(2)输入要查找的姓名,查找通讯录,如果找到则显示相关信息 7 //(3)添加某人的基本信息,输入通讯录的相应信息,将该信息添加到通讯录中 8 //(4)删除某人的基本信息,输入名字查找,如果存在这个人则删除 9 //4.人员基本信息包括姓名、性别、电话、生日和地址等基本信息 10 //5.人员信息文件中每一行存放一个人的信息 11 //6.每个功能均通过独立的函数实现 12 //7.在主函数中调用每个功能函数 13 //8.键盘输入前有提示 14 #include<stdio.h> 15 #include<stdlib.h> 16 #include<string.h> 17 18 //个人信息结构体 19 struct person{ 20 char name[20]; 21 char sex[3]; 22 char birthday[15]; 23 char telephone[20]; 24 char address[40]; 25 }per; 26 27 struct node{ 28 struct person data; 29 struct node *next; 30 }; 31 struct node *head; 32 struct node *curr; 33 34 void LoadAllPerson();//将文件中的信息读入链表 35 void ShowMainMenu();//显示主菜单 36 void ViewAllPersonInfo();//显示所有的人员信息 37 void ViewAPersonInfo();//显示一个人的信息 38 void AddAPersonInfo();//添加一个人员的信息 39 int ShowInputAPerson();//添加用户信息时显示输入提示 40 void DelAPersonInfo();//删除一个人员的信息 41 int ShowDeleteAPerson();//判断是否结束用户输入 42 int FindPerson(char *name);//查看某人信息是否存在 43 void ModifyAPersonInfo();//修改指定人员的信息 44 int ShowModifyAPerson();//判断是否结束用户输入 45 void Exit();//退出程序 46 47 int main(){ 48 int chioce; 49 LoadAllPerson(); 50 while(1){ 51 ShowMainMenu(); 52 scanf("%d",&chioce); 53 switch(chioce){ 54 case 1:ViewAllPersonInfo();break; 55 case 2:ViewAPersonInfo();break; 56 case 3:AddAPersonInfo();break; 57 case 4:DelAPersonInfo();break; 58 case 5:ModifyAPersonInfo();break; 59 case 6:Exit();break; 60 default:printf("请输入正确的选项\n");break; 61 } 62 } 63 return 0; 64 } 65 66 //将文件中的信息读入链表 67 void LoadAllPerson(){ 68 FILE *fp; 69 struct node *pointer; 70 head=NULL; 71 fp=fopen("PersonInfo.txt","r"); 72 while(!feof(fp)){ 73 fscanf(fp,"%s%s%s%s%s\n",per.name,per.sex,per.birthday,per.telephone,per.address); 74 if(head==NULL){ 75 head=(struct node*)malloc(sizeof(struct node)); 76 head->data=per; 77 head->next=NULL; 78 curr=head; 79 }else{ 80 pointer=(struct node*)malloc(sizeof(struct node)); 81 pointer->data=per; 82 pointer->next=NULL; 83 curr->next=pointer; 84 curr=pointer; 85 } 86 } 87 fclose(fp); 88 } 89 90 91 //显示主菜单 92 void ShowMainMenu(){ 93 printf("=========Welcome to Person Management System!========= \n"); 94 printf("1.查看所有人员的信息\n"); 95 printf("2.查看指定人员的信息\n"); 96 printf("3.添加一个人员的信息\n"); 97 printf("4.删除一个人员的信息\n"); 98 printf("5.修改一个人员的信息\n"); 99 printf("6.退出\n"); 100 printf("=======================================================\n"); 101 printf("请选择\n"); 102 } 103 104 //显示所有的人员信息 105 void ViewAllPersonInfo(){ 106 int count=1; 107 int flag=0; 108 if(head==NULL){ 109 printf("\n没有信息\n"); 110 }else{ 111 curr=head; 112 printf("\n名字 性别电话 生日 电话号码 地址:\n"); 113 while(curr!=NULL){ 114 printf("%-10s",curr->data.name); 115 printf("%-10s",curr->data.sex); 116 printf("%-15s",curr->data.birthday); 117 printf("%-15s",curr->data.telephone); 118 printf("%-15s\n",curr->data.address); 119 curr=curr->next; 120 } 121 } 122 printf("\n"); 123 } 124 125 //显示一个人的信息 126 void ViewAPersonInfo(){ 127 char input[10]; 128 int flag; 129 while(1){ 130 printf("请输入要显示的人员信息的名字:"); 131 scanf("%s",input); 132 if(strcmp(input,"$")==0){//如果输入的是$,那么退出 133 break; 134 }else{ 135 curr=head; 136 flag=0; 137 while(curr!=NULL){ 138 if(strcmp(input,curr->data.name)==0){ 139 flag=1; 140 printf("找到了一个符合条件的人员信息:\n"); 141 printf("%s %s %s %s %s\n\n",curr->data.name,curr->data.sex,curr->data.birthday,curr->data.telephone,curr->data.address); 142 } 143 curr=curr->next; 144 } 145 if(flag==0){ 146 printf("找不到相应的人员信息\n"); 147 } 148 } 149 } 150 } 151 152 //添加一个人员的信息 153 void AddAPersonInfo(){ 154 if(ShowInputAPerson()==1){ 155 struct node *pointer; 156 pointer=(struct node*)malloc(sizeof(struct node)); 157 pointer->data=per; 158 pointer->next=NULL; 159 curr=head; 160 if(curr==NULL){ 161 pointer->next=head; 162 head=pointer; 163 }else{ 164 while(curr->next!=NULL){//将新信息添加到结尾 165 curr=curr->next; 166 } 167 curr->next=pointer; 168 } 169 // pointer=curr->next; 170 // printf("%s",pointer->data.name); 171 // exit(0); 172 printf("插入用户信息成功!\n"); 173 } 174 } 175 176 //添加用户信息时显示输入提示 177 int ShowInputAPerson(){ 178 printf("请输入用户的名字:"); 179 scanf("%s",per.name); 180 if(strcmp(per.name,"$")!=0){//如果用户输入的名字不等于"$",那么继续 181 printf("输入用户的性别:"); 182 scanf("%s",per.sex); 183 printf("输入用户的生日:"); 184 scanf("%s",per.birthday); 185 printf("输入用户的电话号码:"); 186 scanf("%s",per.telephone); 187 printf("输入用户的地址:"); 188 scanf("%s",per.address); 189 return 1; 190 }else{//否则返回 191 return 0; 192 } 193 } 194 195 //删除一个人员的信息 196 void DelAPersonInfo(){ 197 if(ShowDeleteAPerson()==1){ 198 if(!FindPerson(per.name)){ 199 printf("这个要删除的人员不存在\n"); 200 DelAPersonInfo(); 201 }else{ 202 curr=head; 203 //如果是删除首节点 204 if( strcmp(per.name,curr->data.name)==0 ){ 205 head=curr->next; 206 free(curr); 207 printf("删除成功\n"); 208 return; 209 } 210 211 curr=head; 212 struct node *back; 213 back=(struct node*)malloc(sizeof(struct node)); 214 //如果是删除中间和尾节点 215 while(curr->next!=NULL){//让curr指向尾节点 216 back=curr; 217 curr=curr->next; 218 if( strcmp(per.name,curr->data.name)==0 ){ 219 back->next=curr->next; 220 free(curr); 221 printf("删除成功\n"); 222 return; 223 } 224 } 225 printf("找不到指定的删除人员信息\n"); 226 227 } 228 229 } 230 } 231 232 //判断是否结束用户输入 233 int ShowDeleteAPerson(){ 234 printf("请输入你要删除的那个人员的名字:"); 235 scanf("%s",per.name); 236 if(strcmp(per.name,"$")!=0){ 237 return 1; 238 }else{ 239 return 0; 240 } 241 } 242 243 244 //查看某人信息是否存在 245 int FindPerson(char *name){ 246 curr=head; 247 while(curr!=NULL){ 248 if(strcmp(name,curr->data.name)==0){ 249 return 1; 250 } 251 curr=curr->next; 252 } 253 return 0; 254 } 255 256 //修改指定人员的信息 257 void ModifyAPersonInfo(){ 258 if(ShowModifyAPerson()==1){ 259 if(!FindPerson(per.name)){//如果没有找到要修改的指定人员信息 260 printf("没有找到要修改的指定人员信息\n"); 261 ModifyAPersonInfo(); 262 }else{ 263 printf("请输入人员的性别:"); 264 scanf("%s",per.sex); 265 printf("请输入人员的生日:"); 266 scanf("%s",per.birthday); 267 printf("请输入人员的电话号码:"); 268 scanf("%s",per.telephone); 269 printf("请输入人员的地址:"); 270 scanf("%s",per.address); 271 while(1){ 272 if(curr==NULL){ 273 printf("没有找到要修改的指定人员信息\n"); 274 break; 275 } 276 if(strcmp(per.name,curr->data.name)==0){//如果找到了要修改的人员信息 277 curr->data=per; 278 printf("修改成功\n"); 279 break; 280 } 281 curr=curr->next; 282 } 283 } 284 } 285 } 286 287 int ShowModifyAPerson(){ 288 printf("请输入要修改的人员的名字:"); 289 scanf("%s",per.name); 290 if(strcmp(per.name,"$")!=0){ 291 return 1; 292 }else{ 293 return 0; 294 } 295 } 296 297 //退出程序 298 void Exit(){ 299 FILE *fp; 300 fp=fopen("PersonInfo.txt","w"); 301 curr=head; 302 while(curr!=NULL){ 303 fprintf(fp,"%s %s %s %s %s\n",curr->data.name,curr->data.sex,curr->data.birthday,curr->data.telephone,curr->data.address); 304 curr=curr->next; 305 } 306 fclose(fp); 307 printf("输入任意字符退出\n"); 308 getchar(); 309 exit(0); 310 }
C语言学习(45)
猜你喜欢
转载自www.cnblogs.com/Tobi/p/9239951.html
今日推荐
周排行