通訊錄(動態)

//////////////////////////////// .h文件  /////////////////////////////
#pragma once 

#include <stdio.h>
#include <malloc.h>
#include <stdlib.h>
#include <string.h>
#include <assert.h>
//實現一個通訊錄;
//通訊錄可以用來存儲1000個人的信息,每個人的信息包括:
//姓名、性別、年齡、電話、住址
//
//提供方法:

//1. 添加聯繫人信息
//2. 刪除指定聯繫人信息
//3. 查找指定聯繫人信息
//4. 修改指定聯繫人信息
//5. 顯示所有聯繫人信息
//6. 清空所有聯繫人
//7. 以名字排序所有聯繫人


#define MAX_SIZE 1000

typedef struct Measage
{
    char name[20];
    int gender;
    int age;
    char tel[20];
    char addr[20];
}*MList;

typedef struct List
{
    MList Man[MAX_SIZE];
    int Size;
}People;       // people * s          s->Man[s->Size]->name


void AddMan(People* s);
void InitMan(People* s);
void DeleteMan(People* s);
int FindMan(People* s);
void ReviseMan(People* s);
void Display(People* s);
void SortMan(People* s);

//////////////////////////// .c 實現文件 //////////////////////////////

#include "標頭.h"
#pragma warning(disable:4996)
void InitMan(People* s)
{
    s->capasize = MAX_SIZE;
    s->Man = malloc(MAX_SIZE * sizeof(List));
    s->Size = 0;
    printf("清理成功\n");
}

void IncreaseMan(People* s)
{
    assert(s);
    s->capasize = s->capasize + INCREASEMENT;
    s->Man = realloc(s->Man, s->capasize * sizeof(List));
}

//引發了異常: 讀取訪問權限衝突。
//**s** 是 0x34F42096。 出現了
void AddMan(People* s)
{
    if (s->Size == MAX_SIZE - 1) {
        IncreaseMan(s);
    }
    printf("\n");
    printf("\n");
    printf("現在進行添加聯繫人操作\n");
    getchar();
    printf("請輸入姓名\n");
    gets(s->Man[s->Size].name);
    printf("請輸入性別 1.男性   2.女性\n");
    scanf_s("%d", &(s->Man[s->Size].gender));
    getchar();
    printf("請輸入地址\n");
    gets(s->Man[s->Size].addr);
    printf("請輸入年齡\n");
    scanf_s("%d", &(s->Man[s->Size].age));
    getchar();
    printf("請輸入十一位電話號碼\n");
    gets(s->Man[s->Size].tel);
    ++s->Size;
}

void DeleteMan(People* s)
{
    int i = 0;
    int flag = 1;
    char str[20];
    if (s == NULL) {
        printf("空\n");
        return;
    }
    printf("\n");
    printf("\n");
    printf("請輸入您要刪除的聯繫人的姓名\n");
    getchar();
    gets(str);
    while (i < s->Size) {
        if (strcmp(s->Man[i].name, str) == 0) {
            flag = 0;
            while (i < (s->Size) - 1) {
                s->Man[i] = s->Man[i + 1];
                ++i;
            }
            --s->Size;
            break;
        }
        ++i;
    }
    if (flag) {
        printf("無此聯繫人信息\n");
    }
    printf("聯繫人信息已刪除\n");
    printf("\n");
    printf("\n");
}


int FindMan(People* s)
{
    assert(s);
    int i = 0;
    int flag = 1;
    char str[20];
    printf("請輸入您要查找的聯繫人的姓名\n");
    getchar();
    gets(str);
    while (i < s->Size) {
        if (strcmp(s->Man[i].name, str) == 0) {
            flag = 0;
            printf("\n");
            printf("\n");
            printf("電話:%s\n", s->Man[i].tel);
            if ((s->Man[i]).gender == 1) {
                printf("性別男\n");
            }
            else {
                printf("性別女\n");
            }
            printf("年齡 %d\n", s->Man[i].age);
            printf("地址:%s\n", s->Man[i].addr);
            printf("\n");
            printf("\n");
            break;
        }
        ++i;
    }
    if (flag) {
        printf("未找到聯繫人信息\n");
        return -1;
    }
    return i;
}


void ReviseMan(People* s)
{
    int i = FindMan(s);
    if (i == -1) {
        return;
    }
    else {
        printf("\n");
        printf("\n");
        printf("現在進行修改聯繫人操作\n");
        getchar();
        printf("請輸入姓名\n");
        gets(s->Man[s->Size].name);
        printf("請輸入性別 1.男性   2.女性\n");
        scanf_s("%d", &(s->Man[s->Size].gender));
        getchar();
        printf("請輸入地址\n");
        gets(s->Man[s->Size].addr);
        printf("請輸入年齡\n");
        scanf_s("%d", &(s->Man[s->Size].age));
        getchar();
        printf("請輸入十一位電話號碼\n");
        gets(s->Man[s->Size].tel);
        printf("\n");
        printf("\n");
    }
}


void Display(People* s)
{
    assert(s);
    int i = 0;
    while (i < s->Size) {
        printf("\n");
        printf("\n");
        printf("姓名:%s\n", s->Man[i].name);
        printf("電話:%s\n", s->Man[i].tel);
        if (s->Man[i].gender == 1) {
            printf("性別男\n");
        }
        else {
            printf("性別女\n");
        }
        printf("年齡 %d\n", s->Man[i].age);
        printf("地址:%s\n", s->Man[i].addr);
        ++i;
        printf("\n");
        printf("\n");
    }
}


void SortMan(People* s)//按照名字首字母排序
{
    int i = 0;
    int j = 0;
    char tmp[20];
    int flag = 1;
    for (; i < s->Size - 1; ++i) {
        for (; j < s->Size - 1 - i; ++j) {
            if (strcmp(s->Man[i].name, s->Man[i + 1].name) == 1) {
                flag = 0;
                strcpy(tmp, s->Man[i].name);
                strcpy(s->Man[i].name, s->Man[i + 1].name);
                strcpy(s->Man[i + 1].name, tmp);
            }//交換功能代碼塊
        }
        if (flag)
            break;
    }
}
///////////////////////////  測試文件  /////////////////////////////

#include "標頭.h"
//1. 添加聯繫人信息
//2. 刪除指定聯繫人信息
//3. 查找指定聯繫人信息
//4. 修改指定聯繫人信息
//5. 顯示所有聯繫人信息
//6. 清空所有聯繫人
//7. 以名字排序所有聯繫人
void MENU()
{
    printf("/////////////////// 通訊錄 ////////////////////\n");
    printf("////////////// 按鍵選擇相應服務 ///////////////\n");
    printf("//1. 添加聯繫人信息     2. 刪除指定聯繫人信息//\n");
    printf("//3. 查找指定聯繫人信息 4. 修改指定聯繫人信息//\n");
    printf("//5. 顯示所有聯繫人信息 6. 清空所有聯繫人//////\n");
    printf("////////////7. 以名字排序所有聯繫人////////////\n");
}


int main() {
    People p;
    int i = 1, j;
    while (i != 0) {
        MENU();
        scanf_s("%d", &i);
        switch (i)
        {
        case 1:
            AddMan(&p);
            break;
        case 2:
            DeleteMan(&p);
            break;
        case 3:
            j = FindMan(&p);
            break;
        case 4:
            ReviseMan(&p);
            break;
        case 5:
            Display(&p);
            break;
        case 6:
            InitMan(&p);
            break;
        case 7:
            SortMan(&p);
            break;
        default:
            break;
        }
    }
    printf("退出\n");
    system("pause");
    return 0;
}
發佈了41 篇原創文章 · 獲贊 12 · 訪問量 3萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章