C语言学习(45)

  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 }

猜你喜欢

转载自www.cnblogs.com/Tobi/p/9239951.html