偷偷拿来记录一下萌新的cs路——day15 历时15天,边上课边写作业边敲代码,至此终于补完大一程序设计进度= =呜呜呜 呜呜呜 呜哇哇哇哇哇
用C++模拟一个通讯录,能且仅能存储1000个人的信息;
每个人的信息包括:姓名、电话、性别(提示输入正确性别)、住址、年龄(提示输入正确年龄);
功能包括:
- 添加联系人
- 显示联系人
- 删除联系人
- 查找联系人
- 修改联系人
- 清空联系人
choices.h
#include<iostream>
using namespace std;
void showMenu();
struct person;
struct addressbooks;
void addPerson(addressbooks* abs); //注意顺序!
void showPerson(addressbooks* abs);
int scanPerson(addressbooks* abs, string name);
void deletePerson(addressbooks* abs);
void findPerson(addressbooks* abs);
void modifyPerson(addressbooks* abs);
void clearPerson(addressbooks* abs);
void quitMenu();
choices.cpp
#include"choices.h"
#define max 1000
void showMenu() {
cout << "***************" << endl;
cout << "1、添加联系人" << endl;
cout << "2、显示联系人" << endl;
cout << "3、删除联系人" << endl;
cout << "4、查找联系人" << endl;
cout << "5、修改联系人" << endl;
cout << "6、清空联系人" << endl;
cout << "0、退出通讯录" << endl;
cout << endl;
cout << endl;
cout << " * * " << endl;
cout << " | " << endl;
cout << " / \\ " << endl;
cout << "***************" << endl;
}
struct person { //人员结构体
string name;
short sex; //1男2女
short age;
string phoneNumber;
string address;
};
struct addressbooks { //通讯录结构体
struct person personArr[max];
int num; //当前通讯录人数
};
void addPerson(addressbooks* abs) {
if (abs->num == max) { //判断人数
cout << "人数已满,添加失败" << endl;
return;
}
else {
string name;
cout << "请输入姓名:" << endl;
cin >> name;
abs->personArr[abs->num].name = name;
short sex;
cout << "请输入性别(男1女2):" << endl;
while (1) {
cin >> sex;
if (sex == 1 || sex == 2) { //防输错装置
abs->personArr[abs->num].sex = sex;
break;
}
cout << "请输入1或2:" << endl;
}
short age;
cout << "请输入年龄:" << endl;
while (1) {
cin >> age;
if (age >= 0 && age <= 150) {
abs->personArr[abs->num].age = age;
break;
}
cout << "请输入正确年龄:" << endl;
}
string phoneNumber;
cout << "请输入电话:" << endl;
cin >> phoneNumber;
abs->personArr[abs->num].phoneNumber = phoneNumber;
string address;
cout << "请输入地址:" << endl;
cin >> address;
abs->personArr[abs->num].address = address;
abs->num++;
cout << "添加联系人成功 ^-^ 按任意键返回菜单" << endl;
system("pause"); //按任意键继续
system("cls"); //清屏
}
}
void showPerson(addressbooks* abs) {
if (abs->num == 0) {
cout << "记录为空,请添加联系人" << endl;
}
else {
for (int i = 0; i < abs->num; i++) {
cout << endl;
cout << "姓名:" << abs->personArr[i].name << "\t";
/*if (abs->personArr[i].sex == 1) {
cout << "性别:男" << "\t";
}
else if (abs->personArr[i].sex == 2) {
cout << "性别:女" << "\t";
}*/
cout << "性别:" << (abs->personArr[i].sex == 1 ? "男" : "女") << "\t"; //三目运算符输出男女
cout << "年龄:" << abs->personArr[i].age << "\t";
cout << "电话:" << abs->personArr[i].phoneNumber << "\t";
cout << "地址:" << abs->personArr[i].address << "\t";
cout << endl;
}
}
cout << "已显示所有联系人 ^-^ 按任意键返回菜单" << endl;
system("pause"); //按任意键继续
system("cls"); //清屏
}
int scanPerson(addressbooks* abs, string name) { //遍历人名,比对是否一致
for (int i = 0; i < abs->num; i++) {
if (abs->personArr[i].name == name) {
return i; //找到,返回人名
}
}
return -1; //未找到,返回-1
}
void deletePerson(addressbooks* abs) {
string name;
cout << "请输入联系人姓名" << endl;
cin >> name; //先判断联系人是否存在
int result = scanPerson(abs, name);
if (result != -1) {
for (int i = result; i < abs->num; i++) {
abs->personArr[i] = abs->personArr[i + 1]; //数据前移
}
abs->num--; //更新通讯录人数
cout << "删除成功 ^-^ 按任意键返回菜单" << endl;
}
else {
cout << "查无此人 ^-^ 按任意键返回菜单" << endl;
}
system("pause"); //按任意键继续
system("cls"); //清屏
}
void findPerson(addressbooks* abs) {
string name;
cout << "请输入联系人姓名" << endl;
cin >> name;
int result = scanPerson(abs, name);
if (result != -1) {
cout << endl;
cout << "姓名:" << abs->personArr[result].name << "\t";
cout << "性别:" << (abs->personArr[result].sex == 1 ? "男" : "女") << "\t"; //三目运算符判断男女
cout << "年龄:" << abs->personArr[result].age << "\t";
cout << "电话:" << abs->personArr[result].phoneNumber << "\t";
cout << "地址:" << abs->personArr[result].address << "\t";
cout << endl;
}
else {
cout << "查无此人 ^-^ 按任意键返回菜单" << endl;
}
system("pause"); //按任意键继续
system("cls"); //清屏
}
void modifyPerson(addressbooks* abs) {
string name;
cout << "请输入联系人姓名" << endl;
cin >> name;
int result = scanPerson(abs, name);
if (result != -1) {
string name;
cout << "请输入姓名:" << endl;
cin >> name;
abs->personArr[result].name = name;
short sex;
cout << "请输入性别(男1女2):" << endl;
while (1) {
cin >> sex;
if (sex == 1 || sex == 2) { //防输错装置
abs->personArr[result].sex = sex;
break;
}
cout << "请输入1或2:" << endl;
}
short age;
cout << "请输入年龄:" << endl;
while (1) {
cin >> age;
if (age >= 0 && age <= 150) {
abs->personArr[result].age = age;
break;
}
cout << "请输入正确年龄:" << endl;
}
string phoneNumber;
cout << "请输入电话:" << endl;
cin >> phoneNumber;
abs->personArr[result].phoneNumber = phoneNumber;
string address;
cout << "请输入地址:" << endl;
cin >> address;
abs->personArr[result].address = address;
cout << "修改成功 ^-^ 按任意键返回菜单" << endl;
}
else {
cout << "查无此人 ^-^ 按任意键返回菜单" << endl;
}
system("pause"); //按任意键继续
system("cls"); //清屏
}
void clearPerson(addressbooks* abs) {
abs->num = 0;
cout << "通讯录已清空 ^-^ 按任意键返回菜单" <<endl;
system("pause");
system("cls");
}
void quitMenu() {
cout << "欢迎下次使用 ^-^" << endl;
system("pause");
//return 0;
}
main.cpp
#include<iostream>
#include<string>
#include"choices.h"
using namespace std;
#define max 1000 //宏常量定义最大人数
struct person { //人员结构体
string name;
short sex; //1男2女
short age;
string phoneNumber;
string address;
};
struct addressbooks { //通讯录结构体
struct person personArr[max];
int num; //当前通讯录人数
};
int main() {
//struct addressbooks;
addressbooks abs; //c++自上而下编译,故struct须放在main前,否则报错
abs.num = 0;
while (1) {
showMenu();
int select = 0;
cin >> select;
switch (select) {
case 1: //1、添加联系人
addPerson(&abs); //指针修饰实参
break;
case 2: //2、显示联系人
showPerson(&abs);
break;
case 3: //3、删除联系人
deletePerson(&abs);
break;
case 4: //4、查找联系人
findPerson(&abs);
break;
case 5: //5、修改联系人
modifyPerson(&abs);
break;
case 6: //6、清空联系人
clearPerson(&abs);
break;
case 0: //0、退出通讯录
quitMenu();
return 0;
break;
default:
break;
}
}
system("pause");
return 0;
}
运行结果示例
以后学了更多知识还会回来更新的!有误之处恳请大佬们指正,提前感谢!