上課的時候老師佈置了一個作業,利用結構體實現一個簡單地通訊錄,這可是我們大一的時候學期末的課設題目啊,不過還好現在的水平比之前高了那麼一點。。
實現一個通訊錄;
通訊錄可以用來存儲1000個人的信息,每個人的信息包括:
姓名、性別、年齡、電話、住址
提供方法:
1. 添加聯繫人信息
2. 刪除指定聯繫人信息
3. 查找指定聯繫人信息
4. 修改指定聯繫人信息
5. 顯示所有聯繫人信息
6. 清空所有聯繫人
7. 以名字排序所有聯繫人
這個是通訊錄的主要功能。
這個比較大,所以我們寫在三個文件裏。
首先是頭文件:
#pragma once//宏定義,避免文件多次編譯。。。 #include<stdio.h> #include<string.h> #include<stdlib.h> #define MAX_NAME 10//使用簡單宏定義可用宏代替一個在程序中經常使用的常量,方便程序的修改 #define MAX_SEX 5 #define MAX_TELE 12 #define MAX_ADDR 20 #define MAX 1000 //人信息的結構體的定義 typedef struct People { char name[MAX_NAME]; char sex[MAX_SEX]; int age; char tele[MAX_TELE]; char addr[MAX_ADDR]; }peo; //人數的結構體定義 typedef struct Contact { peo con[MAX]; int count; }contact; //枚舉,在下面使用的switch case 語句中,不用關心函數的順序對齊,比較方便 enum OP { EXIT, ADD, DEL, SEARCH, MODIFY, SHOW, CLEAR, SORT }; //函數聲明 void init_contact(contact *pcon); void add_contact(contact *pcon); void del_contact(contact *pcon); void search_contact(contact *pcon); void modify_contact(contact *pcon); void show_contact(contact *pcon); void clear_contact(contact *pcon); void sort_contact(contact *pcon);
函數實現部分:
#define _CRT_SECURE_NO_WARNINGS 1 #include"contact.h" //初始化通訊錄 void init_contact(contact *pcon) { pcon->count = 0; } //添加聯繫人 void add_contact(contact *pcon) { if (pcon->count >= MAX) { printf("電話本已滿,無法添加"); return; } printf("請輸入名字:"); scanf("%s", pcon->con[pcon->count].name); printf("請輸入性別:"); scanf("%s", pcon->con[pcon->count].sex); printf("請輸入年齡:"); scanf("%d", &pcon->con[pcon->count].age); printf("請輸入電話:"); scanf("%s", pcon->con[pcon->count].tele); printf("請輸入地址:"); scanf("%s", pcon->con[pcon->count].addr); pcon->count++; printf("添加成功!\n"); } //內部查找函數 static int find(contact *pcon,const char *name)//name用const保護,名字不被改變 { int i = 0; for (i = 0; i < pcon->count; i++) { if (strcmp(name, pcon->con[i].name) == 0) return i; } return -1; } //刪除聯繫人 void del_contact(contact *pcon) { char name[MAX_NAME]; int i = 0; printf("請輸入要刪除的人的姓名"); scanf("%s", &name); int ret = find(pcon,name); if (ret == -1) { printf("要刪除的人不存在!\n"); return; } else { for (i = ret; i < pcon->count - 1; i++) { pcon->con[i] = pcon->con[i + 1];//從要刪除的那位開始,後面依次向 //前覆蓋 } } pcon->count--; printf("刪除成功\n"); } //查找聯繫人 void search_contact(contact *pcon) { char name[MAX_NAME]; int i = 0; printf("請輸入要查找的人的姓名"); scanf("%s", &name); int ret = find(pcon, name); if (ret == -1) { printf("要查找的人不存在\n"); return; } else { printf("%10s %5s %d %12s %20s\n" , pcon->con[ret].name, pcon->con[ret].sex, pcon->con[ret].age, pcon->con[ret].tele, pcon->con[ret].addr); } } //修改聯繫人 void modify_contact(contact *pcon) { char name[MAX_NAME]; int i = 0; printf("請輸入要修改的人的姓名"); scanf("%s", &name); int ret = find(pcon, name); if (ret == -1) { printf("要修改的人不存在\n"); return; } else { printf("請輸入名字:"); printf("%s", pcon->con[ret].name); printf("請輸入性別:"); printf("%s", pcon->con[ret].sex); printf("請輸入年齡:"); printf("%d", pcon->con[ret].age); printf("請輸入電話:"); printf("%s", pcon->con[ret].tele); printf("請輸入地址:"); printf("%s", pcon->con[ret].addr); } } //顯示聯繫人 void show_contact(contact *pcon) { int i = 0; printf("%10s %5s %5s %12s %20s\n", "name", "sex", "age", "tele", "addr"); for (i = 0; i < pcon->count; i++) { printf("%10s %5s %5d %12s %20s\n", pcon->con[i].name, pcon->con[i].sex, pcon->con[i].age, pcon->con[i].tele, pcon->con[i].addr); } } //清空聯繫人 void clear_contact(contact *pcon) { pcon->count = 0; printf("清空成功\n"); } //排序聯繫人,此函數用的是冒泡排序 void sort_contact(contact *pcon) { int i = 0; int j = 0; peo tmp; for (i = 0; i < pcon->count - 1; i++) { for (j = 0; j < pcon->count - 1 - i; j++) { if (strcmp(pcon->con[j].name, pcon->con[j + 1].name)>0) { tmp = pcon->con[j]; pcon->con[j + 1] = pcon->con[j]; pcon->con[j] = tmp; } } } printf("排序完成\n"); }
測試部分:
#define _CRT_SECURE_NO_WARNINGS 1 #include"contact.h" //簡易菜單 void menu() { printf("***************************************\n"); printf(" 通訊錄 \n"); printf(" 1.添加 \n"); printf(" 2.刪除 \n"); printf(" 3.查找 \n"); printf(" 4.修改 \n"); printf(" 5.顯示 \n"); printf(" 6.清空 \n"); printf(" 7.以名字排序 \n"); printf(" 0.EXIT \n"); printf("***************************************\n"); } void test() { contact mycon; init_contact(&mycon); int input = 1; while (input) { menu(); printf("請輸入選擇:"); scanf("%d", &input); switch (input) { case ADD: add_contact(&mycon); break; case DEL: del_contact(&mycon); break; case SHOW: show_contact(&mycon); break; case SEARCH: search_contact(&mycon); break; case MODIFY: modify_contact(&mycon); break; case CLEAR: clear_contact(&mycon); break; case SORT: sort_contact(&mycon); break; case EXIT: exit(0); break; default: break; } } } int main() { test(); system("pause"); return 0; }
這是一個簡單的通訊錄,以後會有更好更嚴謹,功能更完善的呈獻給大家。希望大家能一起交流,寫的不好的能多多指正。(*^__^*)