生活随笔
收集整理的這篇文章主要介紹了
                                
基于C语言通讯录管理系统编程设计
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.                        
 
                                
                            
                            
                            1.課程目的
 本程序旨在訓練學生的C語言基本編程能力,通過串聯C語言輸入輸出、循環語句、子函數設計、數組、結構體、指針等知識點,完成一個簡單系統的設計開發。
 2.系統功能
 (1)通過菜單的形式實現人機交互界面
 (2)實現批量錄入聯系人基本信息功能
 (3)實現查詢指定聯系人的基本信息
 (4)實現添加單個聯系人的基本信息
 (5)實現刪除指定聯系人的基本信息
 (6)實現對所有聯系人打印顯示
 3.設計思想
 (1)人機交互界面
 使用printf()和scanf()輸入輸出函數設計出主界面交互菜單,通過switch case語句判斷輸入的選項值,執行相對應得子函數。
 設計程序保存菜單選項,用戶執行其選項后,需要使用C語言文件操作,保存當前錄入得全部聯系人的基本信息。
 程序啟動時需要打開上次保存得數據文件,讀入到內存中,如果沒有則新建一個文件用于程序退出時保存數據。
 人機交互界面可以自己設計,可以加上開發者信息,體現每個學生的差異。
 展示如下:
 
 2)批量添加聯系人信息
 設計為單獨的子函數供主函數調用。
 定義一個結構體類型,包括四個成員變量(姓名,職業,手機號,電子郵件,通訊地址),并用該類型定義一個全局的結構體數組,供外部錄入聯系人信息時存儲。
 定義一個全局變量來存儲當前聯系人個數。
 添加聯系人信息時,需要從外部讀入聯系人的姓名,職業,手機號,電子郵件以及通訊地址,聯系人個數變量加一,并根據當前聯系人個數將其保存在結構體數組對應序號的元素中。
 當聯系人姓名為“0”時,表示錄入結束。
 (3)顯示全部聯系人信息
 通過對當前結構體數組進行遍歷,并顯示輸出
 展示如下:
 
 (4)查找單個聯系人
 根據輸入需要查找聯系人的信息,遍歷當前結構體數組,判斷是否含有一致姓名的元素,若有則顯示輸出對應的信息,否則顯示此人未在本通訊錄中。
 顯示如下:
 
 
 5)添加單個聯系人
 此項功能與(2)中批量添加聯系人類似,本功能為添加一個聯系人,顯示如下:
 
 (6)刪除指定聯系人
 根據輸入需要刪除聯系人的姓名,遍歷當前結構體數組,判斷是否含有一致姓名的元素,若有則從該元素之后依次將下一個元素賦值到上一個元素,直至最后一個賦值完成,最后當前聯系人個數變量減一。
 顯示如下:
 
 7)保存通訊錄
 將通訊錄文件內容保存到本地。
 展示如下:
 
 
 
struct address_list
{int num
;           char name
[30];     char work
[30];     char handset
[30];  char email
[30];    char address
[30];  struct address_list *next
;
}peo
[30];
struct address_list *shifang(struct address_list *head
); 
struct address_list *creat(void)       
{struct address_list *head
,*p1
,*p2
;char name
[20];n
=0;p1
=(struct address_list *)malloc(LEN
);p2
=p1
;   printf("請輸入通訊錄的內容!\n姓名輸入為0時表示創建完畢!\n");printf("請輸入姓名:");gets(name
);if(strcmp(name
,"0")!=0){strcpy(p1
->name
,name
);printf("請輸入職業:");     gets(p1
->work
);printf("請輸入手機:");     gets(p1
->handset
);printf("請輸入電子郵件:"); gets(p1
->email
);printf("請輸入通訊地址:");  gets(p1
->address
);head
=NULL;while(1){n
=n
+1;   if(n
==1)head
=p1
;elsep2
->next
=p1
;p2
=p1
;printf("請輸入姓名:");gets(name
);if(strcmp(name
,"0")==0){break;}else{p1
=(struct address_list *)malloc(LEN
);strcpy(p1
->name
,name
);printf("請輸入職業:"); gets(p1
->work
);printf("請輸入手機:"); gets(p1
->handset
);printf("請輸入電子郵件:"); gets(p1
->email
);printf("請輸入通訊地址:");  gets(p1
->address
);}}p2
->next
=NULL;return head
;}elsereturn 0;
}
void print(struct address_list *head
)   
{struct address_list *p
;if(head
!=NULL){p
=head
;printf("本通訊錄現在共有%d人:\n",n
);printf("---姓名-------職業--------手機-------Email-------通訊地址\n");printf("==================================\n");do{printf("== %s",p
->name
); printf("       ");printf("%s",p
->work
); printf("       ");printf("%s",p
->handset
); printf("       ");printf("%s",p
->email
); printf("       ");printf("%s",p
->address
); printf("       \n");p
=p
->next
;}while(p
!=NULL);printf("==================================\n");}elseprintf("通訊錄為空,無法輸出!\n");
}
struct address_list *insert(struct address_list *head
) 
{struct address_list *p0
,*p1
,*p2
;char name
[20];p1
=head
;printf("請輸入增加的內容:\n");printf("請輸入姓名:"); gets(name
);if(strcmp(name
,"0")==0){printf("姓名不能為0,增加失敗!\n");return(head
);}else{p0
=(struct address_list *)malloc(LEN
);strcpy(p0
->name
,name
);printf("請輸入職業:"); gets(p0
->work
);printf("請輸入手機:"); gets(p0
->handset
);printf("請輸入電子郵件:"); gets(p0
->email
);printf("請輸入通訊地址:");  gets(p0
->address
);n
=n
+1;if(head
==NULL){head
=p0
;p0
->next
=NULL;return head
;}else{while(strcmp(p0
->name
,p1
->name
)>0&&(p1
->next
!=NULL)){p2
=p1
;p1
=p1
->next
;}if(strcmp(p0
->name
,p1
->name
)<0 || strcmp(p0
->name
,p1
->name
)==0){if(head
==p1
){head
=p0
;}else{p2
->next
=p0
;}p0
->next
=p1
;}else{p1
->next
=p0
;p0
->next
=NULL;}return head
;}}
}
struct address_list* delete_txl(struct address_list *head
)
{struct address_list *p
,*q
;char name
[30];if(head
==NULL){printf("通訊錄為空,無法顯示!\n");return head
;}p
=head
;printf("請輸入需要刪除的人的姓名:");gets(name
);if(strcmp(head
->name
,name
)==0){head
=head
->next
;free(p
);printf("刪除操作成功!\n");return head
;}else{q
=head
,p
=head
->next
;while(p
!=NULL){if(strcmp(p
->name
,name
)==0){q
->next
=p
->next
;free(p
);printf("刪除操作成功!\n");return head
;}p
=p
->next
;q
=q
->next
;}}
}
struct address_list *display(struct address_list *head
)
{struct address_list *p1
,*p2
;char name
[30];int m
;if(head
==NULL){printf("通訊錄為空,無法顯示!\n");return head
;}p1
=head
;m
=0;printf("請輸入需要顯示人的姓名:");gets(name
);while(p1
!=NULL){while((strcmp(p1
->name
,name
))!=0 && p1
->next
!=NULL){p2
=p1
;p1
=p1
->next
;}if(strcmp(p1
->name
,name
)==0){m
++;printf("%s的通訊內容如下:\n",name
);printf("---姓名--------職業--------手機-------Email------通訊地址\n");printf("==================================\n");printf("== %s",p1
->name
);printf("       ");printf("%s",p1
->work
);printf("       ");printf("%s",p1
->handset
);printf("       ");printf("%s",p1
->email
);printf("       ");printf("%s",p1
->address
); printf("       \n");printf("==================================\n");}p1
=p1
->next
;}if(m
==0){printf("此人未在本通訊錄中!\n");}return(head
);
}
struct address_list *search(struct address_list *head
)
{struct address_list *p1
,*p2
;int m
;char name
[30];if(head
==NULL){printf("通訊錄為空,無法分類查找!\n");return(head
);}p1
=head
;printf("********************\n");printf("**  請輸入需要查找的姓名  **\n");printf("********************\n");m
=0;gets(name
);while(p1
!=NULL){while(strcmp(p1
->name
,name
)!=0&&p1
->next
!=NULL){p2
=p1
;p1
=p1
->next
;}if(strcmp(p1
->name
,name
)==0){m
++;printf("你查找的內容是:\n");printf("+++++++++++++++++++++++++++++++++++\n");printf("++ %s        %s       %s       %s        %s\n",p1
->name
,p1
->work
,p1
->handset
,p1
->email
,p1
->address
);printf("+++++++++++++++++++++++++++++++++++\n");}p1
=p1
->next
;if(m
==0){printf("此人未在本通訊錄中!\n");}break;}return(head
);
}
struct address_list *shifang(struct address_list *head
)
{struct address_list *p1
;while(head
!=NULL){p1
=head
;head
=head
->next
;free(p1
);}return(head
);
}
void save(struct address_list *head
)
{FILE 
*fp
;struct address_list *p1
;char tong
[30];if(head
==NULL){printf("通訊錄為空,無法存儲!\n");return;}printf("請輸入保存后的文件名:");gets(tong
);fp
=fopen("(tong).txt","w");if(fp
==NULL){printf("cannot open file\n");return;}p1
=head
;fprintf(fp
,"姓名    職業      手機     Email     通訊地址\n");for(;p1
!=NULL;) {fprintf(fp
,"%s       %s       %s        %s       %s\n",p1
->name
,p1
->work
,p1
->handset
,p1
->email
,p1
->address
);p1
=p1
->next
;}printf("保存完畢!\n");fclose(fp
);
}
void main()
{struct address_list *head
=NULL;char num
[10];printf("*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*\n");printf("*=*               程序說明                *=*\n");printf("*=*    請及時保存創建完畢的通訊錄內容!    *=*\n");printf("*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*\n");while(1){printf("************************\n");printf("***     1 批量添加聯系人     ****\n");printf("***     2 查找聯系人         ****\n");printf("***     3 添加聯系人         ****\n");printf("***     4 刪除聯系人         ****\n");printf("***     5 保存通訊錄         ****\n"); printf("***     6 退出系統           ****\n");printf("************************\n");printf("請輸入您選擇的操作:");gets(num
);switch(*num
){case '1':{if(head
==NULL){head
=creat();                                print(head
);}else{head
=shifang(head
);head
=creat();                                print(head
);}}break;case '2':{head
=display(head
);                           }break;case '3':{head
=insert(head
);                           print(head
);                                 }break;case '5':{save(head
);                                   print(head
);}break;case '4':{head
=delete_txl(head
);                           print(head
);}break;case '6':head
=shifang(head
);break;default:printf("操作錯誤,此項不存在!\n");break;}if(strcmp(num
,"6")==0)break;}
}
                            總結
                            
                                以上是生活随笔為你收集整理的基于C语言通讯录管理系统编程设计的全部內容,希望文章能夠幫你解決所遇到的問題。
                            
                            
                                如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。