基于C語言打造高效便捷的通訊錄管理系統(tǒng)
引言
在我們大致學(xué)習(xí)完C語言之后,我們就可以利用目前所學(xué)的知識(shí)去做一些有意思的項(xiàng)目,而今天貝蒂就帶大家完成一個(gè)通訊錄的簡易實(shí)現(xiàn),
本章你可能需要的知識(shí):
動(dòng)態(tài)內(nèi)存的使用:動(dòng)態(tài)內(nèi)存管理
文件的創(chuàng)建與使用:文件操作
1. 通訊錄要求
通訊錄包括每個(gè)人的姓名,性別,年齡,電話與地址。
玩家可以自由選擇通訊錄的進(jìn)出。
玩家可以自由增刪查改通訊錄中的數(shù)據(jù)。
2. 多文件管理
為了方便代碼的管理和保證通訊錄實(shí)現(xiàn)邏輯的清晰性,我們將采用多文件管理的模式。
創(chuàng)建頭文件contact.c,包含所有頭文件(其他源文件只需引用它即可),以及所有通訊錄功能的展現(xiàn)。
創(chuàng)建源文件contact.c,負(fù)責(zé)通訊錄所有功能的具體代碼實(shí)現(xiàn)。
創(chuàng)建源文件text.c,負(fù)責(zé)展現(xiàn)通訊錄實(shí)現(xiàn)的總體邏輯。
3. 通訊錄的準(zhǔn)備
3.1 預(yù)處理信息
為了方便我們后續(xù)更換通訊的信息,我們可以利用宏來定義通訊錄的具體信息的大小。
#define MAX 100//最大人數(shù) #define MAX_NAME 20//名字最大長度 #define MAX_SEX 5//性別最大長度 #define MAX_TELE 12//電話最大長度 #define MAX_ADDR 30//地址最大長度
3.2 結(jié)構(gòu)體定義
每個(gè)人的通訊錄都要包含姓名,性別,年齡,電話與地址等信息,這時(shí)就需要我們創(chuàng)建一個(gè)結(jié)構(gòu)體來方便管理。
typedef struct PeoInfo { char name[MAX_NAME];//名字 int age;//年齡 char sex[MAX_SEX];//性別 char tele[MAX_TELE];//電話 char addr[MAX_ADDR];//地址 }PeoInfo;
而我們需要用這個(gè)結(jié)構(gòu)體創(chuàng)建一個(gè)大小為100的數(shù)組,并且我們還需要知道當(dāng)前通訊錄的大小才能進(jìn)行增刪查改的操作,這兩者息息相關(guān),為了簡化代碼和增加代碼的可讀性,我們可以將這兩者重新定義一個(gè)結(jié)構(gòu)體。
typedef struct contact { PeoInfo data[MAX];//一百個(gè)人的數(shù)據(jù) int sz;//通訊錄的大小 }contact;
4. 簡易菜單
void menu() { printf("***********************************\n"); printf("** 1.add 2.delete **\n"); printf("** 3.search 4.modify **\n"); printf("** 5.display 6.sort **\n"); printf("** 0.exit **\n"); printf("***********************************\n"); }
畫面展示:
5. 通訊錄具體功能
5.1 初始化
我們首先對(duì)通訊錄進(jìn)行初始化。
void InitContact(contact* pc)//初始化 { assert(pc); pc->sz = 0; memset(pc->data, 0, sizeof(pc->data)); }
5.2 展示聯(lián)系人
當(dāng)用戶選擇5時(shí)自動(dòng)展示通訊錄中的用戶,并且展示用戶過程中需要進(jìn)行對(duì)齊,便于用戶觀看。
void DisplayContact(contact* pc)//打印信息 { assert(pc); printf("%-15s\t%-5s\t%-5s\t%-12s\t%-30s\n", "姓名", "年紀(jì)", "性別", "電話", "地址");//默認(rèn)右對(duì)齊,修改為左對(duì)齊 //中間也要留下足夠的空間 for (int i = 0; i < pc->sz; i++) { printf("%-15s\t%-5d\t%-5s\t%-12s\t%-30s\n", pc->data[i].name, pc->data[i].age, pc->data[i].sex, pc->data[i].tele, pc->data[i].addr); } }
5.3 添加聯(lián)系人
用戶選擇1可以自由添加聯(lián)系人,如果通訊錄已滿,則提醒用戶通訊錄已滿,請(qǐng)先清理通訊錄。
(1) 檢查通訊錄是否已滿
如果通訊錄滿了返回0,未滿則返回1。
int CheckContact(contact*pc)//檢查大小 { assert(pc); if (pc->sz == 100) { return 0; } return 1; }
(2) 添加
當(dāng)通訊錄未滿時(shí),用戶可以輸入數(shù)據(jù)添加新用戶。
void AddContact(contact* pc)//增加聯(lián)系人 { assert(pc); int ret = CheckContact(pc);//檢查是否滿了 if (ret == 0) { printf("通訊錄已滿,請(qǐng)先清理通訊錄??!\n"); return; } printf("請(qǐng)輸入聯(lián)系人的姓名:> "); scanf("%s", pc->data[pc->sz].name); printf("請(qǐng)輸入聯(lián)系人的年齡:> "); scanf("%d", &(pc->data[pc->sz].age)); printf("請(qǐng)輸入聯(lián)系人的性別:> "); scanf("%s", pc->data[pc->sz].sex); printf("請(qǐng)輸入聯(lián)系人的電話:> "); scanf("%s", pc->data[pc->sz].tele); printf("請(qǐng)輸入聯(lián)系人的地址:> "); scanf("%s", pc->data[pc->sz].addr); printf("用戶添加成功!\n"); pc->sz++; }
5.4 刪除聯(lián)系人
用戶可以選擇2清理通訊錄,刪除指定聯(lián)系人。
(1) 尋找下標(biāo)
在刪除指定練習(xí)人時(shí)我們需通過其姓名尋找該聯(lián)系人的下標(biāo)。找到返回其下標(biāo),否則返回-1、
int FindName(contact* pc, char name[]) { assert(pc&&name); for (int pos = 0; pos < pc->sz; pos++) { if (strcmp(pc->data[pos].name, name) == 0) { return pos; } } return -1; }
(2) 刪除
通過尋找到的下標(biāo),我們可以利用后面的數(shù)據(jù)依次覆蓋來達(dá)到刪除的目的。
注意:我們不能覆蓋最后一個(gè)數(shù)據(jù)否則就會(huì)發(fā)生數(shù)組越界,這時(shí)我們只需減去通訊錄此時(shí)的大小就好了。
void DeleteContact(contact* pc)//刪除聯(lián)系人 { assert(pc); assert(pc->sz >= 0); char name[MAX_NAME]; printf("請(qǐng)輸入需要?jiǎng)h除人的姓名:> "); scanf("%s", name); int pos = FindName(pc, name); if (pos == -1) { printf("通訊錄中并沒有這個(gè)人!!\n"); return; } for (int i = pos; i < pc->sz - 1; i++) { pc->data[i] = pc->data[i + 1];//覆蓋 } printf("刪除成功\n"); pc->sz--; }
刪除前:
刪除后 :
5.5 查找聯(lián)系人
通過選擇3查找指定聯(lián)系人,沒有找到則提醒用戶沒有該用戶,查找到就打印其信息。
void SearchContact(contact* pc)//查找聯(lián)系人 { assert(pc); char name[MAX_NAME]; printf("請(qǐng)輸入需要查找人的姓名:> "); scanf("%s", name); int pos = FindName(pc, name); if (pos == -1) { printf("通訊錄中并沒有這個(gè)人!!\n"); return; } printf("%-15s\t%-5s\t%-5s\t%-12s\t%-30s\n", "姓名", "年紀(jì)", "性別", "電話", "地址"); printf("%-15s\t%-5d\t%-5s\t%-12s\t%-30s", pc->data[pos].name, pc->data[pos].age, pc->data[pos].sex, pc->data[pos].tele, pc->data[pos].addr); }
5.6 修改聯(lián)系人
我們可以通過選擇4修改指定聯(lián)系人的信息。
void ModifyContact(contact* pc)//修改聯(lián)系人 { assert(pc); char name[MAX_NAME]; printf("請(qǐng)輸入需要修改人的姓名:> "); scanf("%s", name); int pos = FindName(pc, name); if (pos == -1) { printf("通訊錄中并沒有這個(gè)人!!\n"); return; } printf("請(qǐng)輸入聯(lián)系人的姓名:> "); scanf("%s", pc->data[pos].name); printf("請(qǐng)輸入聯(lián)系人的年齡:> "); scanf("%d", &(pc->data[pos].age)); printf("請(qǐng)輸入聯(lián)系人的性別:> "); scanf("%s", pc->data[pos].sex); printf("請(qǐng)輸入聯(lián)系人的電話:> "); scanf("%s", pc->data[pos].tele); printf("請(qǐng)輸入聯(lián)系人的地址:> "); scanf("%s", pc->data[pos].addr); printf("修改成功\n"); }
修改前:
修改后:
5.7 排序聯(lián)系人
我們可以選擇6對(duì)通訊錄進(jìn)行排序,可以按照姓名,年紀(jì),性別,電話,地址排序。
int cmp1(const void* p1, const void* p2) { return strcmp(((PeoInfo*)p1)->name, ((PeoInfo*)p2)->name); } int cmp2(const void* p1, const void* p2) { return ((PeoInfo*)p1)->age- ((PeoInfo*)p2)->age; } int cmp3(const void* p1, const void* p2) { return strcmp(((PeoInfo*)p1)->sex, ((PeoInfo*)p2)->sex); } int cmp4(const void* p1, const void* p2) { return strcmp(((PeoInfo*)p1)->tele, ((PeoInfo*)p2)->tele); } int cmp5(const void* p1, const void* p2) { return strcmp(((PeoInfo*)p1)->addr, ((PeoInfo*)p2)->addr); } void SortByName(contact* pc) { qsort(pc, pc->sz, sizeof(PeoInfo), cmp1); } void SortByAge(contact* pc) { qsort(pc, pc->sz, sizeof(PeoInfo), cmp2); } void SortBySex(contact* pc) { qsort(pc, pc->sz, sizeof(PeoInfo), cmp3); } void SortByTele(contact* pc) { qsort(pc, pc->sz, sizeof(PeoInfo), cmp4); } void SortByAddr(contact* pc) { qsort(pc, pc->sz, sizeof(PeoInfo), cmp4); } void SortContact(contact* pc)//排序聯(lián)系人 { assert(pc); printf("請(qǐng)選擇如何排序:> "); char input[20]; scanf("%s", input); if (strcmp(input, "姓名")==0) { SortByName(pc);//按姓名排序 } else if (strcmp(input, "年齡") == 0) { SortByAge(pc);//按年齡排序 } else if (strcmp(input, "性別") == 0) { SortBySex(pc);//按性別排序 } else if (strcmp(input, "電話") == 0) { SortByTele(pc);//按電話排序 } else if (strcmp(input, "地址") == 0) { SortByAddr(pc);//按地址排序 } else { printf("輸入非法,請(qǐng)重新輸入\n"); } }
6. 改進(jìn)通訊錄
6.1 動(dòng)態(tài)內(nèi)存開辟
上述通訊錄有一個(gè)致命的缺點(diǎn)——通訊錄大小固定,為了解決這個(gè)問題我可以使用我們前面學(xué)過的動(dòng)態(tài)內(nèi)存開辟。
(1) 新增變量
為了方便我們知道此時(shí)的容量大小,我們將在結(jié)構(gòu)體中加入新的變量。
typedef struct contact { PeoInfo *data;//動(dòng)態(tài)開辟的數(shù)據(jù) int sz;//通訊錄的大小 int capacity;//通訊錄的容量 }contact;
(2) 初始化
void InitContact(contact* pc)//初始化 { assert(pc); pc->sz = 0; pc->data = (PeoInfo*)calloc(2, sizeof(PeoInfo)); if (pc->data == NULL) { perror("InitContact:"); return; } pc->capacity = 2; /*memset(pc->data, 0, sizeof(pc->data));*/ }
(3) 增容
當(dāng)通訊錄用戶數(shù)量滿時(shí)增加內(nèi)存空間。
void CheckCapacity(contact* pc)//增容 { if (pc->sz == pc->capacity) { PeoInfo* tmp = (PeoInfo*)realloc(pc->data, (pc->capacity + 2) * sizeof(PeoInfo)); if (tmp != NULL) { pc->data = tmp; } else { perror("CheckCapacity:"); return; } pc->capacity += 2; printf("增容成功\n"); } }
6.2 文件保存
我們發(fā)現(xiàn)每當(dāng)我們關(guān)閉程序時(shí)我們寫入的數(shù)據(jù)會(huì)被清空,我們要想保存上次寫入的數(shù)據(jù)就應(yīng)該使用文件操作。
(1) 加載數(shù)據(jù)
每次初始化時(shí)就要將上次文件的數(shù)據(jù)導(dǎo)入進(jìn)來。
void LoadContact(contact* pc)//加載上次數(shù)據(jù) { PeoInfo tmp = { 0 }; FILE* pf = fopen("contact.txt", "rb"); if (pf == NULL) { return; } //讀取文件,存放到通訊錄 while (fread(&tmp, sizeof(PeoInfo), 1, pf)) //返回值為0就是遇見文件末尾 { CheckCapacity(pc); pc->data[pc->sz] = tmp; pc->sz++; } fclose(pf); pf = NULL; }
(2) 保存數(shù)據(jù)
當(dāng)程序正常結(jié)束時(shí)保存數(shù)據(jù)。
void SaveContact(contact* pc)//保存數(shù)據(jù) { FILE* pfWrite = fopen("contact.txt", "wb"); if (pfWrite == NULL) { perror("fopen:"); return; } //寫通訊錄中數(shù)據(jù)到文件中 int i = 0; for (i = 0; i < pc->sz; i++) { fwrite(&(pc->data[i]), sizeof(PeoInfo), 1, pfWrite); } fclose(pfWrite); pfWrite = NULL; printf("保存成功\n"); }
7. 通訊錄邏輯的搭建
用戶通過數(shù)字選擇功能。
每次選擇完之后返回菜單。
選擇退出之后保存數(shù)據(jù),程序結(jié)束。
enum Option //利用枚舉增加代碼的可讀性 { EXIT,//0 ADD, DEL, SEARCH, MODIFY, DISPLAY, SORT }; void test() { int input = 0; contact con; InitContact(&con); do { menu(); printf("請(qǐng)輸入你的選擇:>"); scanf("%d", &input); switch (input) { case ADD: AddContact(&con); break; case DEL: DeleteContact(&con); break; case SEARCH: SearchContact(&con); break; case MODIFY: ModifyContact(&con); break; case DISPLAY: DisplayContact(&con); break; case SORT: SortContact(&con); break; case EXIT: SaveContact(&con);//退出保存數(shù)據(jù) DestroyContact(&con); break; default: printf("非法輸入,請(qǐng)重新輸入\n"); break; } } while (input); } int main() { test(); return 0; }
8. 完整代碼
8.1 contact.h
#include<stdio.h> #include<string.h> #include<stdlib.h> #include<assert.h> #define MAX_NAME 20//名字最大長度 #define MAX_SEX 5//性別最大長度 #define MAX_TELE 12//電話最大長度 #define MAX_ADDR 30//地址最大長度 typedef struct PeoInfo { char name[MAX_NAME];//名字 int age;//年齡 char sex[MAX_SEX];//性別 char tele[MAX_TELE];//電話 char addr[MAX_ADDR];//地址 }PeoInfo; typedef struct contact { PeoInfo *data;//動(dòng)態(tài)開辟的數(shù)據(jù) int sz;//通訊錄的大小 int capacity;//通訊錄的容量 }contact; void InitContact(contact* pc);//初始化 void DisplayContact(contact* pc);//打印信息 void AddContact(contact* pc);//增加聯(lián)系人 void DeleteContact(contact* pc);//刪除聯(lián)系人 void SearchContact(contact* pc);//查找聯(lián)系人 void ModifyContact(contact* pc);//修改聯(lián)系人 void SortContact(contact* pc);//排序聯(lián)系人 void SaveContact(contact* pc);//保存數(shù)據(jù) void DestroyContact(contact* pc);//銷毀內(nèi)存
8.2 contact.c
#include"contact.h" void CheckCapacity(contact* pc)//增容 { if (pc->sz == pc->capacity) { PeoInfo* tmp = (PeoInfo*)realloc(pc->data, (pc->capacity + 2) * sizeof(PeoInfo)); if (tmp != NULL) { pc->data = tmp; } else { perror("CheckCapacity:"); return; } pc->capacity += 2; printf("增容成功\n"); } } void LoadContact(contact* pc)//加載上次數(shù)據(jù) { PeoInfo tmp = { 0 }; FILE* pf = fopen("contact.txt", "rb"); if (pf == NULL) { return; } //讀取文件,存放到通訊錄 while (fread(&tmp, sizeof(PeoInfo), 1, pf)) //返回值為0就是遇見文件末尾 { CheckCapacity(pc); pc->data[pc->sz] = tmp; pc->sz++; } fclose(pf); pf = NULL; } void InitContact(contact* pc)//初始化 { assert(pc); pc->sz = 0; pc->data = (PeoInfo*)calloc(2, sizeof(PeoInfo)); if (pc->data == NULL) { perror("InitContact:"); return; } pc->capacity = 2; LoadContact(pc); /*memset(pc->data, 0, sizeof(pc->data));*/ } void DisplayContact(contact* pc)//打印信息 { assert(pc); printf("%-15s\t%-5s\t%-5s\t%-12s\t%-30s\n", "姓名", "年紀(jì)", "性別", "電話", "地址");//默認(rèn)右對(duì)齊,修改為左對(duì)齊 //中間也要留下足夠的空間 for (int i = 0; i < pc->sz; i++) { printf("%-15s\t%-5d\t%-5s\t%-12s\t%-30s\n", pc->data[i].name, pc->data[i].age, pc->data[i].sex, pc->data[i].tele, pc->data[i].addr); } } void AddContact(contact* pc)//增加聯(lián)系人 { assert(pc); CheckCapacity(pc);//檢查是否滿了 printf("請(qǐng)輸入聯(lián)系人的姓名:> "); scanf("%s", pc->data[pc->sz].name); printf("請(qǐng)輸入聯(lián)系人的年齡:> "); scanf("%d", &(pc->data[pc->sz].age)); printf("請(qǐng)輸入聯(lián)系人的性別:> "); scanf("%s", pc->data[pc->sz].sex); printf("請(qǐng)輸入聯(lián)系人的電話:> "); scanf("%s", pc->data[pc->sz].tele); printf("請(qǐng)輸入聯(lián)系人的地址:> "); scanf("%s", pc->data[pc->sz].addr); printf("用戶添加成功!\n"); pc->sz++; } int FindName(contact* pc, char name[]) { assert(pc&&name); for (int pos = 0; pos < pc->sz; pos++) { if (strcmp(pc->data[pos].name, name) == 0) { return pos; } } return -1; } void DeleteContact(contact* pc)//刪除聯(lián)系人 { assert(pc); assert(pc->sz >= 0); char name[MAX_NAME]; printf("請(qǐng)輸入需要?jiǎng)h除人的姓名:> "); scanf("%s", name); int pos = FindName(pc, name); if (pos == -1) { printf("通訊錄中并沒有這個(gè)人!!\n"); return; } for (int i = pos; i < pc->sz - 1; i++) { pc->data[i] = pc->data[i + 1];//覆蓋 } printf("刪除成功\n"); pc->sz--; } void SearchContact(contact* pc)//查找聯(lián)系人 { assert(pc); char name[MAX_NAME]; printf("請(qǐng)輸入需要查找人的姓名:> "); scanf("%s", name); int pos = FindName(pc, name); if (pos == -1) { printf("通訊錄中并沒有這個(gè)人!!\n"); return; } printf("%-15s\t%-5s\t%-5s\t%-12s\t%-30s\n", "姓名", "年紀(jì)", "性別", "電話", "地址"); printf("%-15s\t%-5d\t%-5s\t%-12s\t%-30s", pc->data[pos].name, pc->data[pos].age, pc->data[pos].sex, pc->data[pos].tele, pc->data[pos].addr); } void ModifyContact(contact* pc)//修改聯(lián)系人 { assert(pc); char name[MAX_NAME]; printf("請(qǐng)輸入需要修改人的姓名:> "); scanf("%s", name); int pos = FindName(pc, name); if (pos == -1) { printf("通訊錄中并沒有這個(gè)人!!\n"); return; } printf("請(qǐng)輸入聯(lián)系人的姓名:> "); scanf("%s", pc->data[pos].name); printf("請(qǐng)輸入聯(lián)系人的年齡:> "); scanf("%d", &(pc->data[pos].age)); printf("請(qǐng)輸入聯(lián)系人的性別:> "); scanf("%s", pc->data[pos].sex); printf("請(qǐng)輸入聯(lián)系人的電話:> "); scanf("%s", pc->data[pos].tele); printf("請(qǐng)輸入聯(lián)系人的地址:> "); scanf("%s", pc->data[pos].addr); printf("修改成功\n"); } int cmp1(const void* p1, const void* p2) { return strcmp(((PeoInfo*)p1)->name, ((PeoInfo*)p2)->name); } int cmp2(const void* p1, const void* p2) { return ((PeoInfo*)p1)->age- ((PeoInfo*)p2)->age; } int cmp3(const void* p1, const void* p2) { return strcmp(((PeoInfo*)p1)->sex, ((PeoInfo*)p2)->sex); } int cmp4(const void* p1, const void* p2) { return strcmp(((PeoInfo*)p1)->tele, ((PeoInfo*)p2)->tele); } int cmp5(const void* p1, const void* p2) { return strcmp(((PeoInfo*)p1)->addr, ((PeoInfo*)p2)->addr); } void SortByName(contact* pc) { qsort(pc, pc->sz, sizeof(PeoInfo), cmp1); } void SortByAge(contact* pc) { qsort(pc, pc->sz, sizeof(PeoInfo), cmp2); } void SortBySex(contact* pc) { qsort(pc, pc->sz, sizeof(PeoInfo), cmp3); } void SortByTele(contact* pc) { qsort(pc, pc->sz, sizeof(PeoInfo), cmp4); } void SortByAddr(contact* pc) { qsort(pc, pc->sz, sizeof(PeoInfo), cmp4); } void SortContact(contact* pc)//排序聯(lián)系人 { assert(pc); printf("請(qǐng)選擇如何排序:> "); char input[20] = { 0 }; scanf("%s", input); if (strcmp(input, "姓名")==0) { SortByName(pc);//按姓名排序 } else if (strcmp(input, "年齡") == 0) { SortByAge(pc);//按年齡排序 } else if (strcmp(input, "性別") == 0) { SortBySex(pc);//按性別排序 } else if (strcmp(input, "電話") == 0) { SortByTele(pc);//按電話排序 } else if (strcmp(input, "地址") == 0) { SortByAddr(pc);//按地址排序 } else { printf("輸入非法,請(qǐng)重新輸入\n"); } } void DestroyContact(contact* pc) { free(pc->data); pc->data= NULL; pc->capacity = 0; pc->sz = 0; printf("銷毀成功\n"); } void SaveContact(contact* pc)//保存數(shù)據(jù) { FILE* pfWrite = fopen("contact.txt", "wb"); if (pfWrite == NULL) { perror("fopen:"); return; } //寫通訊錄中數(shù)據(jù)到文件中 int i = 0; for (i = 0; i < pc->sz; i++) { fwrite(&(pc->data[i]), sizeof(PeoInfo), 1, pfWrite); } fclose(pfWrite); pfWrite = NULL; printf("保存成功\n"); }
8.3 text.c
#include"contact.h" enum Option //利用枚舉增加代碼的可讀性 { EXIT,//0 ADD, DEL, SEARCH, MODIFY, DISPLAY, SORT }; void menu() { printf("***********************************\n"); printf("** 1.add 2.delete **\n"); printf("** 3.search 4.modify **\n"); printf("** 5.display 6.sort **\n"); printf("** 0.exit **\n"); printf("***********************************\n"); } void test() { int input = 0; contact con; InitContact(&con); do { menu(); printf("請(qǐng)輸入你的選擇:>"); scanf("%d", &input); switch (input) { case ADD: AddContact(&con); break; case DEL: DeleteContact(&con); break; case SEARCH: SearchContact(&con); break; case MODIFY: ModifyContact(&con); break; case DISPLAY: DisplayContact(&con); break; case SORT: SortContact(&con); break; case EXIT: SaveContact(&con);//退出保存數(shù)據(jù) DestroyContact(&con); break; default: printf("非法輸入,請(qǐng)重新輸入\n"); break; } } while (input); } int main() { test(); return 0; }
以上就是基于C語言打造高效便捷的通訊錄管理系統(tǒng)的詳細(xì)內(nèi)容,更多關(guān)于C語言通訊錄管理系統(tǒng)的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!
相關(guān)文章
C語言字符函數(shù)與字符串函數(shù)的實(shí)現(xiàn)示例
C語言標(biāo)準(zhǔn)庫中的<ctype.h>和<string.h>頭文件分別提供了豐富的字符處理和字符串處理函數(shù),本文就來介紹一下C語言字符函數(shù)與字符串函數(shù)的實(shí)現(xiàn)示例,感興趣的可以了解一下2024-11-11C語言實(shí)現(xiàn)24點(diǎn)游戲計(jì)算器的示例代碼
24點(diǎn)是一種益智游戲,24點(diǎn)是把4個(gè)整數(shù)(一般是正整數(shù))通過加減乘除以及括號(hào)運(yùn)算,使最后的計(jì)算結(jié)果是24的一個(gè)數(shù)學(xué)游戲,24點(diǎn)可以考驗(yàn)人的智力和數(shù)學(xué)敏感性,它能在游戲中提高人們的心算能力。本文將用C語言實(shí)現(xiàn)這一游戲,感興趣的可以了解一下2022-08-08在Visual Studio中用C++語言創(chuàng)建DLL動(dòng)態(tài)鏈接庫圖文教程
這篇文章主要介紹了在Visual Studio中用C++語言創(chuàng)建DLL動(dòng)態(tài)鏈接庫圖文教程,本文詳細(xì)講解了DLL庫的創(chuàng)建過程,并給出了代碼示例,需要的朋友可以參考下2014-09-09C++作用域與函數(shù)重載的實(shí)現(xiàn)
本文主要介紹了C++作用域與函數(shù)重載的實(shí)現(xiàn),文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2023-02-02java string對(duì)象上的操作,常見的用法你知道嗎
今天給大家?guī)淼氖顷P(guān)于Java的相關(guān)知識(shí),文章圍繞著Java String類用法展開,文中有非常詳細(xì)的介紹及代碼示例,需要的朋友可以參考下2021-08-08C++超詳細(xì)講解隱藏私有屬性和方法的兩種實(shí)現(xiàn)方式
為了避免因?yàn)閷㈩悗熘械乃接谐蓡T開放給類的使用方而導(dǎo)致的軟件邏輯外泄,因此需要將對(duì)外代碼中的私有成員隱藏起來,下面我們來了解一下隱藏私有屬性和方法的兩種實(shí)現(xiàn)方式2022-05-05