程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> 關於C語言 >> 菜鳥修煉C語言小設計之——通訊錄(一)

菜鳥修煉C語言小設計之——通訊錄(一)

編輯:關於C語言

 

這次的設計用到C語言的單向鏈表實現。

包括的C語言重點知識有

1.typedef的使用

2.自定義宏的使用

3.單向鏈表的實現和操作

1.1 設計題目

本課程設計的目的是學習建立鏈表,使用鏈表存儲結構信息,增加鏈表結點及刪除鏈表結點等基本操作。實際設計時,可增加數據信息及檢索等功能。

1.2 設計要求

1.2.1功能設計要求

本設計要求實現如下功能:

(1)本設計將重點放在整體設計上,信息只選成員代號和電話。

(2)如果已經有記錄,只能在其後追加。

(3)顯示整個記錄的內容(含新追加的新記錄)。

(4)使代號可由6位字符和數字的混合編碼組成,如:A201,34011D等。

(5)使電話號碼可由18位字符和數字組成,如(86)-551-34443535,1396786678等。

(6)可以刪除全部記錄,可以隨時增加新記錄。

(7)可以使用菜單實現增加、刪除和顯示等功能的選擇。

(8)使用宏定義動態申請存儲空間。

1.2.2總體設計

本設計對模塊設計的要求如下:

(1)要求使用多文件方式實現鏈表設計。

(2)要求將它們分成3個模塊編制。一個模塊負責輸入;一個模塊負責顯示記錄的內容;一個模塊含有主程序,主程序負責菜單選擇和命令處理。

2.設計代碼

2.1main.c

 

<pre name="code" class="cpp">#include <stdio.h> 

#include "record.h" 

 

int menu_select(void); 

void hand_menu(int cmd, ADDR *list_head); 

 

int main(int argc, char *argv[]) 

    int cmd = 0; 

    ADDR *list_head; 

    ASK(list_head); 

    list_head->next = NULL; 

     

    while(1){ 

        cmd = menu_select(); 

        if(cmd == '0') 

            return 0; 

             

        hand_menu(cmd, list_head); 

    } 

 

int menu_select(void) 

    int select; 

     

    printf("    <------通信薄-------->\n"); 

    printf("1:添加聯系人     2:刪除聯系人\n"); 

    printf("3:顯示所有聯系人   0:退出\n"); 

    printf("請輸入:\n"); 

     

    select = getch(); 

    while(select  < '0'|| select>'3') { 

        printf("輸入錯誤,請重新輸入:\n"); 

        select = getch(); 

    } 

    return select; 

 

void hand_menu(int cmd, ADDR *list_head) 

    switch(cmd){ 

        case '1': 

            add_person(list_head); 

            break; 

        case '2': 

            list_head = del_person(list_head); 

            break; 

        case '3': 

            dis_person(list_head); 

            break; 

        default: 

            break; 

    } 

 

 

2.2 record.h

 

<pre name="code" class="cpp">#ifndef _RECORD_H_ 

#define _RECORD_H_ 

typedef struct{ 

    char name[8]; 

    char tel[20]; 

}DATA; 

 

typedef struct node{ 

    DATA data; 

    struct node *next; 

}ADDR; 

 

#define ASK(p) do{\ 

    p = (ADDR *)malloc(sizeof(ADDR));\ 

    if(p==NULL){printf("malloc memory failed!");exit(-1);}\ 

}while(0) 

 

#endif 

 

2.3 opre.c

 

<pre name="code" class="cpp">#include <stdio.h> 

#include "record.h" 

 

void add_person(ADDR *node) 

    ADDR *new_p; 

    ASK(new_p); 

    new_p->next = NULL; 

     

    printf("請輸入姓名:"); 

    scanf("%s", new_p->data.name); 

    printf("請輸入電話號碼:"); 

    scanf("%s", new_p->data.tel); 

     

    while(node->next) 

        nodenode=node->next; 

         

    node->next = new_p; 

 

void del_person(ADDR *node) 

    char name[8]; 

    ADDR *pre = NULL; 

     

    printf("請輸入要刪除的名字:"); 

    scanf("%s", name); 

    while(node){ 

        if(!strcmp(node->data.name, name)){ 

            pre->next = node->next; 

            free(node); 

            printf("成功刪除!\n"); 

            return; 

        } 

        pre = node; 

        nodenode = node->next; 

    } 

    printf("沒有找到該名字!\n"); 

 

void dis_person(ADDR *node) 

    if(!node) 

        return ; 

         

    nodenode = node->next;    

    dis_person(node); 

    if(node) 

        printf("姓名:%s號碼:%s\n", node->data.name, node->data.tel);       

 



摘自 K-Style的技術宅

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved