#pragma once typedef struct Peo//每一個人的信息用一個結構來接收,包括姓名,性別,年齡,電話,地址 { char name[20]; char sex[4]; int age; char tell[12]; char address[20]; }Peo; typedef struct Contact//將通訊錄和人員計數也聲明在結構體裡 { Peo Dhb[1000]; int count; }Contact; void add_stu(Contact *p);//相應函數 void del_stu(Contact *p); void find_stu(Contact *p); void modify_stu(Contact *p); void show_stu(Contact *p); void clear_stu(Contact *p); void sort_stu(Contact *p);
模塊2:(測試功能)
#include<stdio.h> #include"contact.h" #include<stdlib.h> Contact con;//類型為Contact變量,裡面包含電話本和計數變量 void menu() { printf("menu:\n"); printf("**********1.添加聯系人信息************\n"); printf("********2.刪除指定聯系人信息**********\n"); printf("********3.查找指定聯系人信息**********\n"); printf("********4.修改指定聯系人信息**********\n"); printf("********5.顯示所有聯系人信息**********\n"); printf("**********6.清空聯系人信息************\n"); printf("******7.以名字排序所有聯系人信********\n"); } void test()//測試函數 { int input = 1; menu(); while (input) { printf("請輸入選項:"); scanf_s("%d", &input); switch (input)//方法選擇功能的實現 { case 1: add_stu(&con); break; case 2: del_stu(&con); break; case 3: find_stu(&con); break; case 4: modify_stu(&con); break; case 5: show_stu(&con); break; case 6: clear_stu(&con); break; case 7: sort_stu(&con); break; case 0: exit(1); break; } } } int main() { test(); return 0; }
模塊3:(方法的具體實現)
#include"contact.h" #include<string.h> int search(Contact *p,char *pname)//分裝的函數利於刪除,查找,修改方法的實現 { int ret; int i; for (i = 0; i < p->count; i++) { if(strcmp(p->Dhb[i].name, pname)==0) return i; } return -1; } void add_stu(Contact *p)//添加聯系人 { printf("請輸入姓名:"); scanf("%s", p->Dhb[p->count].name); printf("請輸入性別:"); scanf("%s", p->Dhb[p->count].sex); printf("請輸入年齡:"); scanf("%d", &p->Dhb[p->count].age); printf("請輸入電話:"); scanf("%s", p->Dhb[p->count].tell); printf("請輸入地址:"); scanf("%s", p->Dhb[p->count].address); p->count++; printf("聯系人添加成功\n"); } void del_stu(Contact *p)//刪除聯系人 { int ret; int n; int i = 0; char name[20]; printf("請輸入要刪除人的姓名:"); scanf("%s",name); ret=search(p,name); if (ret !=-1) { printf("要刪除的人存在\n"); printf("你是否確定刪除該聯系人?\n"); printf("確定輸入1,不刪除輸入0\n"); scanf("%d",&n); if (n == 1) { for (i = 0; i < p->count; i++) { p->Dhb[i] = p->Dhb[i + 1];//使i後面的元素向前覆蓋便可以刪掉 } printf("刪除成功\n"); } else { printf("刪除失敗\n"); } } } void find_stu(Contact *p)//查找聯系人 { int ret; char name[20]; printf("請輸入要查找人的姓名:"); scanf("%s", name); ret = search(p, name); if (ret !=-1) { printf("要查找的人存在\n"); printf("%s ", p->Dhb[ret].name); printf("%s ", p->Dhb[ret].sex); printf("%d ", p->Dhb[ret].age); printf("%s ", p->Dhb[ret].tell); printf("%s ", p->Dhb[ret].address); } } void modify_stu(Contact *p)//修改聯系人 { int ret; char name[20]; printf("請輸入要修改人的姓名:"); scanf("%s", name); ret = search(p, name); if (ret != -1) { printf("請把姓名修改成:"); scanf("%s", p->Dhb[ret].name); printf("請把性別修改成:"); scanf("%s", p->Dhb[ret].sex); printf("請把年齡修改成:"); scanf("%d", &p->Dhb[ret].age); printf("請把電話修改成:"); scanf("%s", p->Dhb[ret].tell); printf("請把地址修改成:"); scanf("%s", p->Dhb[ret].address); } else { printf("不存在此人\n"); } } void show_stu(Contact *p)//顯示聯系人信息 { int i = 0; printf("輸出所有人的信息:"); for (i = 0; i <( p->count); i++) { printf("%s ",p->Dhb[i].name); printf("%s ", p->Dhb[i].sex); printf("%d ", p->Dhb[i].age); printf("%s ", p->Dhb[i].tell); printf("%s ", p->Dhb[i].address); } printf("\n"); } void clear_stu(Contact *p)//清空聯系人 { p->count = 0;//是人員計數的變量置0就可以實現清空 } void sort_stu(Contact *p)//以名字排序所有聯系人 { int i = 0; int j = 0; for (i = 0; i < p->count-1;i++)//冒泡法 for (j = 0; j < p->count - 1 - i;j++) { if (strcmp(p->Dhb[j].name, p->Dhb[j + 1].name)>0) { Peo tmp; tmp=p->Dhb[j]; p->Dhb[j] =p-> Dhb[j + 1]; p->Dhb[j + 1] = tmp; } } void show_stu( p); }
總結:此題只是利用了相關結構體的知識,主要難處就是三個模塊各自的分工不好想到,其他地方便只是基本方法的實現。