目次
アドレス帳管理システム
例証します:
システムに実装する機能は以下の通りです。
- 連絡先の追加: アドレス帳に新しい人を追加します。情報には (名前、性別、年齢、連絡先番号、自宅の住所) が含まれ、最大 1000 人を記録します。
- 連絡先を表示: アドレス帳内のすべての連絡先情報を表示します。
- 連絡先の削除: 指定した連絡先を名前で削除します。
- 連絡先の検索: 指定した連絡先情報を名前で表示します。
- 連絡先の変更: 指定された連絡先を名前に従って再変更します。
- 連絡先のクリア: アドレス帳のすべての情報をクリアします。
- アドレス帳を終了: 現在のアドレス帳を終了します。
アドレス帳システムの各サブ機能
1. ヘッダファイル、構造
#include<iostream>
#include<string>
#include<ctype.h>
#define M 1000 // 定义联系人的最大个数
using namespace std;
struct person { // 联系人结构体
string name; // 姓名
string sex; // 性别
int age; // 年龄
string phone; // 电话
string addr; // 地址
};
struct addr_book {
struct person p_arr[M];
int size; // 通讯录中人的个数
};
// 菜单界面
void showmenu();
// 1.添加联系人
void add_person(addr_book* abs);
// 2.显示联系人
void show_person(addr_book* abs);
// 3.删除联系人
// 首先判断联系人是否存在
int isexist(addr_book* abs, string name);
// 具体的删除
void del_person(addr_book* abs);
// 4.查找联系人
void find_person(addr_book* abs);
// 5.修改联系人信息
void change_person(addr_book* abs);
// 6.清空联系人
void clear_person(addr_book* abs);
// 0.退出函数
bool quite();
2. 主な機能
int main()
{
struct addr_book abs;
abs.size = 0;
int select = 0;// 用户输入
bool flag = true;
while (flag) {
// 菜单调用
showmenu();
cin >> select;
switch (select) {
case 1:
// 1.添加联系人
add_person(&abs); // 利用地址传递,可以修饰实参
break;
case 2:
// 2.显示联系人
show_person(&abs);
break;
case 3:
// 3.删除联系人
del_person(&abs);
break;
case 4:
// 4.查找联系人
find_person(&abs);
break;
case 5:
// 5.修改联系人
change_person(&abs);
break;
case 6:
// 6.清空联系人
clear_person(&abs);
break;
case 0:
flag = quite();
//cout << "欢迎下次使用!" << endl;
//flag = false;
system("pause");
system("cls");
break;
}
}
return 0;
}
3. メニューインターフェース
// 菜单界面
void showmenu()
{
cout << "--------通讯录管理系统--------" << endl;
cout << "\t1.添加联系人" << endl;
cout << "\t2.显示联系人" << endl;
cout << "\t3.删除联系人" << endl;
cout << "\t4.查找联系人" << endl;
cout << "\t5.修改联系人" << endl;
cout << "\t6.清空联系人" << endl;
cout << "\t0.推出通讯录" << endl;
cout << "------------------------------" << endl;
}
4.連絡先機能の追加
1 を押して連絡先の追加インターフェイスに入ります
まず、アドレス帳システムに連絡先の上限がすでに保存されているかどうかを確認します。
名前と性別をそれぞれ入力(入力が「男性」か「女性」かを判断し、それ以外の場合は出力して再入力)、
年齢(10歳以上100歳以下の範囲内か判断し、範囲を超える場合は再入力が必要)、
電話(電話番号が3桁かどうかを判断し、桁が間違っている場合は再入力が必要です)(他の桁も利用でき、3桁の方が便利です)、
住所の後に入力を完了します。
入力が完了したら、アドレス帳の連絡先の数を更新し、メニュー インターフェイスに戻ります。
// 1.添加联系人
void add_person(addr_book* abs)
{
// 判断通讯录是否已满
if (abs->size == M) {
cout << "通讯录已满,无法添加!" << endl;
return;
}else{
string name;
// 添加姓名
cout << "请输入姓名: ";
cin >> name;
abs->p_arr[abs->size].name=name;
// 添加性别
string sex;
cout << "请输入性别: ";
while (true) {
cin >> sex;
if (sex == "男" || sex == "女") {
abs->p_arr[abs->size].sex = sex;
break;
}
else {
cout << "请重新输入: ";
}
}
// 添加年龄
int age;
cout << "请输入年龄: ";
while (true) {
cin >> age;
if (age >= 10 && age <= 100) {
abs->p_arr[abs->size].age = age;
break;
}
else {
cout << "请重新输入: ";
}
}
// 添加电话
cout << "请输入电话: ";
string phone;
while (true) {
cin >> phone;
if (phone.length() == 3) {
abs->p_arr[abs->size].phone = phone;
break;
}
else {
cout << "你输入的电话位数不对,请重新输入: ";
}
}
// 添加地址
cout << "请输入家庭住址: ";
cin >> abs->p_arr[abs->size].addr;
abs->size++;
cout << "--------添加成功--------" << endl;
// 清屏的操作
system("pause");// 请按任意键继续
system("cls");
}
}
5. 連絡先を表示する
アドレス帳内のすべての連絡先を印刷します。同様に、最初にアドレス帳が空かどうかを確認します。
// 2.显示联系人
void show_person(addr_book* abs)
{
// 判断通讯录中人数是否为0
if (abs->size == 0) {
cout << "当前的记录为空" << endl;
}
else {
for (int i = 0; i < abs->size; i++) {
cout << "姓名\t性别\t年龄\t电话\t家庭地址" << endl;
cout << abs->p_arr[i].name << "\t" << abs->p_arr[i].sex << "\t" << abs->p_arr[i].age
<< "\t" << abs->p_arr[i].phone << "\t" << abs->p_arr[i].addr << endl;
}
}
system("pause");
system("cls");
}
6.連絡先を削除する
アドレス帳のサブ関数に連絡先が存在するかどうかを判断することで、削除する連絡先がアドレス帳に存在するかどうかを調べ、存在する場合は、アドレス帳配列内の現在の連絡先の添字位置を返し、-を返します。見つからない場合は 1。
アドレス帳で削除する連絡先を連絡先の名前で検索します。見つからない場合は、ユーザーが存在しないというフィードバックをユーザーに与えます。
連絡先が見つかった場合は、配列内の次の場所の情報で現在の場所を上書きし、削除する連絡先の後に各連絡先の場所を更新すると、アドレス帳のサイズは -1 になります。
// 3.删除联系人
// 首先判断联系人是否存在
int isexist(addr_book* abs, string name)
{
for (int i = 0; i < abs->size; i++) {
if (abs->p_arr[i].name == name) {
return i; // 找到返回在数组中的编号
}
}
return -1;
}
// 具体的删除
void del_person(addr_book* abs)
{
string name;
cout << "请输入您要删除的联系人: ";
cin >> name;
int ret = isexist(abs, name);
if (ret == -1) {
cout << "查无此人" << endl;
}
else {
// 得到的是要删除的人的数组下标
// 要删除可以直接将后一个数据覆盖到要删除的数据上
for (int i = ret; i < abs->size; i++) {
abs->p_arr[i] = abs->p_arr[i + 1];
}
abs->size--;
cout << "--------删除成功--------" << endl;
}
system("pause");
system("cls");
}
7. 連絡先を探す
連絡先を削除するのと同じように、まず連絡先がアドレス帳システムに存在するかどうかを確認し、
見つからない場合は、連絡先が存在しないことを示すメッセージが表示され、連絡先が見つかった場合は、連絡先のすべての情報が出力されます。
// 4.查找联系人
void find_person(addr_book* abs)
{
cout << "请输入您要查找的联系人: ";
string name;
cin >> name;
int ret = isexist(abs, name);
if (ret == -1) {
cout << "您要查找的联系人不存在。" << endl;
}
else {
cout << "姓名\t性别\t年龄\t电话\t家庭地址" << endl;
cout << abs->p_arr[ret].name << "\t" << abs->p_arr[ret].sex << "\t" << abs->p_arr[ret].age
<< "\t" << abs->p_arr[ret].phone << "\t" << abs->p_arr[ret].addr << endl;
cout << "--------查找完毕--------" << endl;
}
system("pause");
system("cls");
}
8.連絡先情報の変更
探している連絡先が連絡先の名前でアドレス帳システムに存在するかどうかを確認し、見つからない場合は、そのような人は存在しないことをユーザーにフィードバックします。
変更する連絡先の場所を見つけたら、新しく入力した情報を元の場所に上書きするだけです。
// 5.修改联系人信息
void change_person(addr_book* abs)
{
cout << "请输入您要修改的联系人: ";
string name;
cin >> name;
int ret = isexist(abs, name);
if (ret == -1) {
cout << "查无此人。" << endl;
system("pause");// 请按任意键继续
system("cls");
}
else {
string name;
// 修改姓名
cout << "请输入姓名: ";
cin >> name;
abs->p_arr[ret].name = name;
// 修改性别
string sex;
cout << "请输入性别: ";
while (true) {
cin >> sex;
if (sex == "男" || sex == "女") {
abs->p_arr[ret].sex = sex;
break;
}
else {
cout << "请重新输入: ";
}
}
// 添加年龄
int age;
cout << "请输入年龄: ";
while (true) {
cin >> age;
if (age >= 10 && age <= 100) {
abs->p_arr[ret].age = age;
break;
}
else {
cout << "请重新输入: ";
}
}
// 添加电话
cout << "请输入电话: ";
string phone;
while (true) {
cin >> phone;
if (phone.length() == 3) {
abs->p_arr[ret].phone = phone;
break;
}
else {
cout << "你输入的电话位数不对,请重新输入: ";
}
}
// 添加地址
cout << "请输入家庭住址: ";
cin >> abs->p_arr[ret].addr;
cout << "--------修改成功--------" << endl;
// 清屏的操作
system("pause");// 请按任意键继续
system("cls");
}
}
9. 連絡先をクリアする
サイズを直接ゼロに設定するだけです。
// 6.清空联系人
void clear_person(addr_book* abs)
{
// 直接将size的数量置为0就ok
abs->size = 0;
cout << "--------所有联系人已经全部清空--------" << endl;
system("pause");
system("cls");
}
10. アドレス帳管理システムを終了します。
ユーザー入力によってシステムを終了するかどうかを決定し、ユーザーが入力した y または n を比較のために大文字に変換します。
y でシステムを終了し、n でメニュー インターフェイスに戻り、他のコンテンツを入力し、再入力を求めるプロンプトを表示します。
// 0.退出函数
bool quite()
{
char n;
cout << "是否确认退出(Y/N): ";
while (true)
{
cin >> n;
if (toupper(n) == 'Y') {
cout << "欢迎下次使用!" << endl;
return false;
break;
}
else if (toupper(n) == 'N') {
return true;
break;
}
else {
cout << "输入错误,请重新输入: ";
}
}
}
ソースコード
#include<iostream>
#include<string>
#include<ctype.h>
#define M 1000 // 定义联系人的最大个数
using namespace std;
struct person { // 联系人结构体
string name; // 姓名
string sex; // 性别
int age; // 年龄
string phone; // 电话
string addr; // 地址
};
struct addr_book {
struct person p_arr[M];
int size; // 通讯录中人的个数
};
// 菜单界面
void showmenu();
// 1.添加联系人
void add_person(addr_book* abs);
// 2.显示联系人
void show_person(addr_book* abs);
// 3.删除联系人
// 首先判断联系人是否存在
int isexist(addr_book* abs, string name);
// 具体的删除
void del_person(addr_book* abs);
// 4.查找联系人
void find_person(addr_book* abs);
// 5.修改联系人信息
void change_person(addr_book* abs);
// 6.清空联系人
void clear_person(addr_book* abs);
// 0.退出函数
bool quite();
int main()
{
struct addr_book abs;
abs.size = 0;
int select = 0;// 用户输入
bool flag = true;
while (flag) {
// 菜单调用
showmenu();
cin >> select;
switch (select) {
case 1:
// 1.添加联系人
add_person(&abs); // 利用地址传递,可以修饰实参
break;
case 2:
// 2.显示联系人
show_person(&abs);
break;
case 3:
// 3.删除联系人
del_person(&abs);
break;
case 4:
// 4.查找联系人
find_person(&abs);
break;
case 5:
// 5.修改联系人
change_person(&abs);
break;
case 6:
// 6.清空联系人
clear_person(&abs);
break;
case 0:
flag = quite();
//cout << "欢迎下次使用!" << endl;
//flag = false;
system("pause");
system("cls");
break;
}
}
return 0;
}
// 菜单界面
void showmenu()
{
cout << "--------通讯录管理系统--------" << endl;
cout << "\t1.添加联系人" << endl;
cout << "\t2.显示联系人" << endl;
cout << "\t3.删除联系人" << endl;
cout << "\t4.查找联系人" << endl;
cout << "\t5.修改联系人" << endl;
cout << "\t6.清空联系人" << endl;
cout << "\t0.推出通讯录" << endl;
cout << "------------------------------" << endl;
}
// 1.添加联系人
void add_person(addr_book* abs)
{
// 判断通讯录是否已满
if (abs->size == M) {
cout << "通讯录已满,无法添加!" << endl;
return;
}else{
string name;
// 添加姓名
cout << "请输入姓名: ";
cin >> name;
abs->p_arr[abs->size].name=name;
// 添加性别
string sex;
cout << "请输入性别: ";
while (true) {
cin >> sex;
if (sex == "男" || sex == "女") {
abs->p_arr[abs->size].sex = sex;
break;
}
else {
cout << "请重新输入: ";
}
}
// 添加年龄
int age;
cout << "请输入年龄: ";
while (true) {
cin >> age;
if (age >= 10 && age <= 100) {
abs->p_arr[abs->size].age = age;
break;
}
else {
cout << "请重新输入: ";
}
}
// 添加电话
cout << "请输入电话: ";
string phone;
while (true) {
cin >> phone;
if (phone.length() == 3) {
abs->p_arr[abs->size].phone = phone;
break;
}
else {
cout << "你输入的电话位数不对,请重新输入: ";
}
}
// 添加地址
cout << "请输入家庭住址: ";
cin >> abs->p_arr[abs->size].addr;
abs->size++;
cout << "--------添加成功--------" << endl;
// 清屏的操作
system("pause");// 请按任意键继续
system("cls");
}
}
// 2.显示联系人
void show_person(addr_book* abs)
{
// 判断通讯录中人数是否为0
if (abs->size == 0) {
cout << "当前的记录为空" << endl;
}
else {
for (int i = 0; i < abs->size; i++) {
cout << "姓名\t性别\t年龄\t电话\t家庭地址" << endl;
cout << abs->p_arr[i].name << "\t" << abs->p_arr[i].sex << "\t" << abs->p_arr[i].age
<< "\t" << abs->p_arr[i].phone << "\t" << abs->p_arr[i].addr << endl;
}
}
system("pause");
system("cls");
}
// 3.删除联系人
// 首先判断联系人是否存在
int isexist(addr_book* abs, string name)
{
for (int i = 0; i < abs->size; i++) {
if (abs->p_arr[i].name == name) {
return i; // 找到返回在数组中的编号
}
}
return -1;
}
// 具体的删除
void del_person(addr_book* abs)
{
string name;
cout << "请输入您要删除的联系人: ";
cin >> name;
int ret = isexist(abs, name);
if (ret == -1) {
cout << "查无此人" << endl;
}
else {
// 得到的是要删除的人的数组下标
// 要删除可以直接将后一个数据覆盖到要删除的数据上
for (int i = ret; i < abs->size; i++) {
abs->p_arr[i] = abs->p_arr[i + 1];
}
abs->size--;
cout << "--------删除成功--------" << endl;
}
system("pause");
system("cls");
}
// 4.查找联系人
void find_person(addr_book* abs)
{
cout << "请输入您要查找的联系人: ";
string name;
cin >> name;
int ret = isexist(abs, name);
if (ret == -1) {
cout << "您要查找的联系人不存在。" << endl;
}
else {
cout << "姓名\t性别\t年龄\t电话\t家庭地址" << endl;
cout << abs->p_arr[ret].name << "\t" << abs->p_arr[ret].sex << "\t" << abs->p_arr[ret].age
<< "\t" << abs->p_arr[ret].phone << "\t" << abs->p_arr[ret].addr << endl;
cout << "--------查找完毕--------" << endl;
}
system("pause");
system("cls");
}
// 5.修改联系人信息
void change_person(addr_book* abs)
{
cout << "请输入您要修改的联系人: ";
string name;
cin >> name;
int ret = isexist(abs, name);
if (ret == -1) {
cout << "查无此人。" << endl;
system("pause");// 请按任意键继续
system("cls");
}
else {
string name;
// 修改姓名
cout << "请输入姓名: ";
cin >> name;
abs->p_arr[ret].name = name;
// 修改性别
string sex;
cout << "请输入性别: ";
while (true) {
cin >> sex;
if (sex == "男" || sex == "女") {
abs->p_arr[ret].sex = sex;
break;
}
else {
cout << "请重新输入: ";
}
}
// 添加年龄
int age;
cout << "请输入年龄: ";
while (true) {
cin >> age;
if (age >= 10 && age <= 100) {
abs->p_arr[ret].age = age;
break;
}
else {
cout << "请重新输入: ";
}
}
// 添加电话
cout << "请输入电话: ";
string phone;
while (true) {
cin >> phone;
if (phone.length() == 3) {
abs->p_arr[ret].phone = phone;
break;
}
else {
cout << "你输入的电话位数不对,请重新输入: ";
}
}
// 添加地址
cout << "请输入家庭住址: ";
cin >> abs->p_arr[ret].addr;
cout << "--------修改成功--------" << endl;
// 清屏的操作
system("pause");// 请按任意键继续
system("cls");
}
}
// 6.清空联系人
void clear_person(addr_book* abs)
{
// 直接将size的数量置为0就ok
abs->size = 0;
cout << "--------所有联系人已经全部清空--------" << endl;
system("pause");
system("cls");
}
// 0.退出函数
bool quite()
{
char n;
cout << "是否确认退出(Y/N): ";
while (true)
{
cin >> n;
if (toupper(n) == 'Y') {
cout << "欢迎下次使用!" << endl;
return false;
break;
}
else if (toupper(n) == 'N') {
return true;
break;
}
else {
cout << "输入错误,请重新输入: ";
}
}
}
アドレス帳の使用結果が表示されます。
1. メニューインターフェース
2.連絡先を追加する
普通に追加する
入力が間違っていたら追記
3. 連絡先を表示する
4.連絡先を削除する
削除する連絡先が存在します
削除する連絡先が存在しません
5. 連絡先を探す
アドレス帳管理システムに存在する連絡先を検索する
連絡先が存在しないことを検索
6.連絡先を変更する
7. 連絡先をクリアする
8.連絡先を終了する