您好,登錄后才能下訂單哦!
不是有一句話叫做學(xué)生給學(xué)生當(dāng)老師,學(xué)生最容易聽懂明白嗎?沒錯,我這個菜鳥給你講講這個通訊錄項目的實現(xiàn),讓你更能清楚明白其中的奧秘。
這個代碼沒有經(jīng)過過多的優(yōu)化,只是為了代碼能夠讓更多的人讀懂,所以也不是最好的代碼,你們可以理解了以后自己去做做優(yōu)化。
代碼用的知識就是C語言中最基本的操作。
項目要求:
實現(xiàn)一個通訊錄;
通訊錄可以用來存儲1000個人的信息,每個人的信息包括:
姓名、性別、年齡、電話、住址
提供方法:
1. 添加聯(lián)系人信息
2. 刪除指定聯(lián)系人信息
3. 查找指定聯(lián)系人信息
4. 修改指定聯(lián)系人信息
5. 顯示所有聯(lián)系人信息
6. 清空所有聯(lián)系人
7. 以名字排序所有聯(lián)系人
代碼實現(xiàn):
AddRess.h
#ifndef __ADDRESS_H__ #define __ADDRESS_H__ #include <stdio.h> #include <stdlib.h> #include <assert.h> #include <string.h> #define MAX 10 //這里我為了調(diào)試方便取了一個較小的數(shù)值 enum OP { EXIT = 0,//退出 ADD, //增加聯(lián)系人 DEL, //刪除聯(lián)系人 SEEK, //查找聯(lián)系人 REVISE, //修改聯(lián)系人 SHOW, //顯示所有聯(lián)系人 EMPTY, //清空所有聯(lián)系人 SORT, //以名字排序所有聯(lián)系人 }; //姓名、性別、年齡、電話、住址 typedef struct PesonMessage { char name[20]; char sex[5]; int age; char tel[15]; char address[20]; }PesonMessage; //通訊錄成員結(jié)構(gòu)體; typedef struct Peson { PesonMessage people[MAX]; int size; }Peson,*pPeson; void Print_AddRess(); void Add_AddRess(pPeson peson); void Show_AddRess(pPeson peson); void Empty_AddRess(pPeson peson); void Del_AddRess(pPeson peson); void Seek_AddRess(pPeson peson); void Revise_AddRess(pPeson peson); void Sort_AddRess(pPeson peson); void Cheak(pPeson peson); #endif//__ADDRESS_H__
AddRess.c
#define _CRT_SECURE_NO_WARNINGS 1 #include "AddRess.h" void Print_AddRess() { printf("**************************\n");//輸出的時候要保證屏幕上干凈整齊 printf("*****0. 退出系統(tǒng) *****\n");//讓別人有讀下去的興趣 printf("*****1.添加聯(lián)系人信息*****\n"); printf("*****2.刪除聯(lián)系人信息*****\n"); printf("*****3.查找聯(lián)系人信息*****\n"); printf("*****4.修改聯(lián)系人信息*****\n"); printf("*****5.顯示聯(lián)系人信息*****\n"); printf("*****6.清空所有聯(lián)系人*****\n"); printf("*****7.名字排序聯(lián)系人*****\n"); printf("**************************\n"); } void Add_AddRess(pPeson peson) { assert(peson);//斷言指針是否有效 if(peson->size < MAX)//判斷peson->size是否合法 { //簡單的輸入輸出 printf("添加聯(lián)系人信息\n");//姓名、性別、年齡、電話、住址 printf("請輸入聯(lián)系人姓名:\n"); scanf("%s",&(peson->people[peson->size].name)); printf("請輸入聯(lián)系人的性別:\n"); scanf("%s",&(peson->people[peson->size].sex)); printf("請輸入聯(lián)系人的年齡:\n"); scanf("%d",&(peson->people[peson->size].age)); printf("請輸入聯(lián)系人的電話:\n"); scanf("%s",&(peson->people[peson->size].tel)); printf("請輸入聯(lián)系人的住址:\n"); scanf("%s",&(peson->people[peson->size].address)); peson->size++;//每次增加一個聯(lián)系人,有效的size都要+1 } else { printf("通訊錄已滿\n");//如果peson->size >= MAX } } void Show_AddRess(pPeson peson) { int i = 0; assert(peson);//斷言指針是否有效 printf("%5s\t","name");//%Xs 的方式使字符串從最右邊開始打印對齊 X可是是隨意的值,這里的取了一個較小的數(shù)字 printf("%5s\t","sex"); printf("%5s\t","age"); printf("%5s\t","tel"); printf("%5s\t","address"); printf("\n"); for (i = 0;i <peson->size;i++) { printf("%5s\t",peson->people[i].name); printf("%5s\t",peson->people[i].sex); printf("%5d\t",peson->people[i].age); printf("%5s\t",peson->people[i].tel); printf("%5s\t",peson->people[i].address); printf("\n"); } } void Empty_AddRess(pPeson peson) { assert(peson);//斷言指針是否有效 peson->size = 0; } void Del_AddRess(pPeson peson) { char name[20] = {0}; int i = 0; assert(peson);//斷言指針是否有效 if (peson->size == 0) { printf("通訊錄已空\n"); } printf("請輸入需要刪除聯(lián)系人的姓名"); scanf("%s",&name); for (i = 0;i < peson->size; i++) { if (strcmp(name,peson->people[i].name) == 0)//判斷輸入的姓名和通訊錄的姓名是否一致 { for (;i < peson->size;i++) { peson->people[i] = peson->people[i + 1];//發(fā)現(xiàn)一致的名字后,從當(dāng)前下標(biāo)的后一個下標(biāo)的所有有效值賦值給前一個 } //覆蓋掉需要刪除的值,注意這里不能從最后一個有效值開始往前賦值,會丟失數(shù)據(jù)的 peson->size--;//每次刪除一個數(shù)據(jù),有效size要減掉一個 } } if (i == peson->size) { printf("對不起,找不到您所要刪除的聯(lián)系人\n"); } } void Seek_AddRess(pPeson peson) { char name[20] = {0}; int i = 0; assert(peson);//斷言指針是否有效 if (peson->size == 0) { printf("通訊錄已空\n"); } printf("請輸入需要查找聯(lián)系人的姓名"); scanf("%s",&name); for (i = 0;i < peson->size; i++) { if (strcmp(name,peson->people[i].name) == 0) { printf("%5s\t","name"); printf("%5s\t","sex"); printf("%5s\t","age"); printf("%5s\t","tel"); printf("%5s\t","address"); printf("\n"); printf("%5s\t",peson->people[i].name); printf("%5s\t",peson->people[i].sex); printf("%5d\t",peson->people[i].age); printf("%5s\t",peson->people[i].tel); printf("%5s\t",peson->people[i].address); printf("\n"); } } } void Revise_AddRess(pPeson peson) { char name[20] = {0}; char Char_Tmp[20] = {0}; int Int_Tmp = 0; int i = 0; int num = 0; assert(peson);//斷言指針是否有效 if (peson->size == 0) { printf("通訊錄已空\n"); } printf("請輸入需要修改的聯(lián)系人的姓名"); scanf("%s",&name); for (i = 0;i < peson->size; i++) { if (strcmp(name,peson->people[i].name) == 0) { printf("1.name\n"); printf("2.sex\n"); printf("3.age\n"); printf("4.tel\n"); printf("5.address\n"); printf("請輸入需要修改的對應(yīng)序號:\n"); scanf("%d",&num); switch (num) { case 1: printf("請輸入聯(lián)系人姓名\n"); scanf("%s",&Char_Tmp); strcpy(peson->people[i].name,Char_Tmp); break; case 2: printf("請輸入聯(lián)系人性別\n"); scanf("%s",&Char_Tmp); strcpy(peson->people[i].sex,Char_Tmp); break; case 3: printf("請輸入聯(lián)系人年齡\n"); scanf("%d",&Int_Tmp); peson->people[i].age = Int_Tmp; break; case 4: printf("請輸入聯(lián)系人電話\n"); scanf("%s",&Char_Tmp); strcpy(peson->people[i].tel,Char_Tmp); break; case 5: printf("請輸入聯(lián)系人住址\n"); scanf("%s",&Char_Tmp); strcpy(peson->people[i].address,Char_Tmp); break; default: printf("對不起,輸入錯誤\n"); break; } } } } void Sort_AddRess(pPeson peson)//冒泡排序 { char name[20] = {0}; int i = 0; int j = 0; PesonMessage tmp; assert(peson);//斷言指針是否有效 if (peson->size == 0) { printf("通訊錄已空\n"); } for (i = 0; i < peson->size-1; i++)//排序的趟數(shù) { for (j = 0;j < peson->size - i - 1;j++)//比較的個數(shù) { if (strcmp(peson->people[j].name,peson->people[j + 1].name) < 0) { //strcpy(tmp,peson->people[j].name); //剛開始欠缺考慮只是交換了兩組姓名而已 //strcpy(peson->people[j].name,peson->people[j + 1].name); //strcpy(peson->people[j + 1].name,tmp); tmp = peson->people[j]; peson->people[j] = peson->people[j+1]; peson->people[j+1] = tmp; } } } } void Cheak(pPeson peson) { int index = 0; while(1) { Print_AddRess(); printf("請選擇:\n"); scanf("%d",&index); switch(index) { case EXIT: exit(0); break; case ADD: Add_AddRess(peson); break; case DEL: Del_AddRess(peson); break; case SEEK: Seek_AddRess(peson); break; case REVISE: Revise_AddRess(peson); break; case SHOW: Show_AddRess(peson); break; case EMPTY: Empty_AddRess(peson); break; case SORT: Sort_AddRess(peson); break; default: printf("輸入有誤\n"); break; } } }
test.c
#define _CRT_SECURE_NO_WARNINGS 1 #include "AddRess.h" int main() { Peson peson; peson.size = 0; Cheak(&peson); system("pause"); return 0; }
免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進行舉報,并提供相關(guān)證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權(quán)內(nèi)容。