C++
文件流方式
要实现的功能
增加数据成员(已写),
查询数据成员(已写),
修改数据成员(已写),
删除数据成员,
显示所有数据成员。
(如果可以再写个排序功能)
有没有能教会我接着写完后面两个,用文件流中最简单最基础的方法
vx2087714055
运行结果:
代码私下给你。
如果你需要的话,我之前写过一个c版本的,可以给你。
不清楚的可以问我,删除数据成员,显示所有数据成员。对应
//TelephoneBookMain.cpp文件
#include "Address.h"
#include "AddressBook.h"
#include <iostream>
#include <fstream>
#include <iomanip>
#include <string>
using namespace std;
int MenuSelect(void);
int main()
{
char g_choice;
AddressBook g_maillist;
for(;;)
{
//循环,直到键盘输入结束代码
g_choice = MenuSelect();
switch(g_choice)
{
case 1:
g_maillist.Enter();
break;
case 2:
g_maillist.Erase();
break;
case 3:
g_maillist.List();
break;
case 4:
g_maillist.Save();
break;
case 5:
g_maillist.Load();
break;
case 6:
exit(0);
}
}
return 0;
}
int MenuSelect(void)
{
//显示主菜单
char c;
cout<<"******************************************"<<endl;
cout<<"* 模拟电话薄 v1.0 *"<<endl;
cout<<"* 1.添加通讯录 *"<<endl;
cout<<"* 2.删除通讯录 *"<<endl;
cout<<"* 3.显示通讯录 *"<<endl;
cout<<"* 4.电话薄存盘 *"<<endl;
cout<<"* 5.读出电话薄 *"<<endl;
cout<<"* 6.退出 *"<<endl;
cout<<"******************************************"<<endl;
cout<<"请输入(1~6):"<<endl;
do
{
//键盘输入循环
cin.get(c);
} while (c < '1' || c > '6');
return c - '0';
}
//Address.h文件
#ifndef ADDRESS_H
#define ADDRESS_H
#include <iostream>
#include <iomanip>
#include <fstream>
#include <string>
using namespace std;
// 通讯录类
class Address
{
public:
Address(){m_status = true;}//构造时清空通讯录
~Address(){}
string GetName() const;
string GetPhone() const;
void Enter(string &name, string &phone); //输入通讯录
bool IsEmptry();
void Set(); //置通讯录状态0,非空
void Clear();//置通讯录状态1,空
private:
char m_name[31];
char m_phone[21];
bool m_status; //通讯录状态,true表示空,false表示该通讯录已经被占用
};
#endif
//AddressBook.h文件
#ifndef ADDRESS_BOOK_H
#define ADDRESS_BOOK_H
#include "Address.h"
#include <iostream>
#include <fstream>
#include <iomanip>
#include <string>
using namespace std;
const int ItemNum = 100; //通讯录最大数量
//电话薄类
class AddressBook
{
public:
AddressBook(){m_num = 0;}//构造函数,对象创建时通讯薄为空
~AddressBook(){}
void Enter(); //输入通讯录条目
void Erase(); //删除通讯录条目
void Load(); //从文件中读取电话薄的内容
void Save(); //电话薄存盘
void List(); //显示电话薄的内容
private:
int m_num; //通讯录条目数
Address Item[ItemNum]; //通讯录
int FineFree(); //查找空的通讯录
};
#endif
//Address.cpp文件
#include "Address.h"
#include <iostream>
#include <iomanip>
#include <fstream>
#include <string>
using namespace std;
string Address::GetName() const
{
string s = m_name;
return s;
}
string Address::GetPhone() const
{
string s = m_phone;
return s;
}
void Address::Enter(string &name, string &phone)
{
int len = name.length();
if (len > 30) //输入超长时截断
{
len = 30;
}
name.copy(m_name, len, 0);
m_name[len] = 0; //字符串结束符,把string转换成char*
len = phone.length();
if (len > 20) //输入超长时截断
{
len = 20;
}
phone.copy(m_phone, len, 0);
m_phone[len] = 0; //字符串结束符,把string转换成char*
}
bool Address::IsEmptry()
{
return m_status;
}
void Address::Set()//置通讯录状态0,非空
{
m_status = false;
}
void Address::Clear()//置通讯录状态1,空
{
m_status = true;
}
//AddressBook.cpp文件
参考代码
#include<iostream>
#include<string>
using namespace std;
#define MAX 100 //通讯录最大人数
void showMenu();
void addPerson(struct addressList* adl);
void showLinkman(struct addressList* adl);
int isExist(struct addressList* adl, string name);
void deleteLinkman(struct addressList* adl);
void findLinkman(struct addressList* adl);
void modifyLinkman(struct addressList* adl);
void cleanList(struct addressList* adl);
//联系人结构体
struct linkman {
string Name; //姓名
int Sex; //性别 1代表男 2代表女
int Age; //年龄
string PhoneNum;//电话号码
};
//通讯录结构体
struct addressList {
struct linkman linkmanArray[MAX]; //联系人数组
int list_Size = 0; //已存在联系人个数
};
int main()
{
addressList adl;
while (1) {
showMenu();
cout << "请输入您要进行的操作: ";
int choice = -1;
cin >> choice;
switch (choice) {
case 1: //1.添加联系人
addPerson(&adl);
break;
case 2: //2.显示联系人
showLinkman(&adl);
break;
case 3: //3.删除联系人
deleteLinkman(&adl);
break;
case 4: //4.查找联系人
findLinkman(&adl);
break;
case 5: //5.修改联系人
modifyLinkman(&adl);
break;
case 6: //6.清空联系人
cleanList(&adl);
break;
case 0: //0.退出系统
system("pause");
return 0;
break;
default:
cout << "非法输入, 请重新输入!!" << endl;
break;
}
system("pause");
system("cls");
}
system("pause");
return 0;
}
//现实操作菜单信息
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;
}
//添加联系人
void addPerson(struct addressList* adl) {
if (adl->list_Size < MAX) {
cout << "请输入联系人姓名:";
cin >> adl->linkmanArray[adl->list_Size].Name;
int sex = -1;
cout << "1 - 男, 2 - 女";
cout << "\n请输入联系人性别:";
while (sex != 1 && sex != 2) { //若输入不为1或2,则重新输入
cin >> sex;
if (sex == 1 || sex == 2) {
adl->linkmanArray[adl->list_Size].Sex = sex;
}
else {
cout << "输入不合法,请重新输入!" << endl;
}
}
cout << "\n请输入联系人年龄:";
cin >> adl->linkmanArray[adl->list_Size].Age;
cout << "\n请输入联系人电话号码:";
cin >> adl->linkmanArray[adl->list_Size].PhoneNum;
cout << "\n新加联系人成功!!" << endl;
adl->list_Size++;
}
else {
cout << "通讯录已满,无法添加新联系人。" << endl;
}
}
//显示通讯录
void showLinkman(struct addressList* adl) {
if (adl->list_Size != 0) {
for (int i = 0; i < adl->list_Size; i++) {
cout << "\t姓名:" << adl->linkmanArray[i].Name
<< "\t\t性别:" << (adl->linkmanArray[i].Sex == 1 ? "男" : "女")
<< "\t\t年龄:"<<adl->linkmanArray[i].Age
<< "\t\t电话号码:" << adl->linkmanArray[i].PhoneNum<<endl;
}
}
else {
cout << "通讯录为空!" << endl;
}
}
//判断某姓名是否在通讯录中存在
int isExist(struct addressList* adl, string name) {
int flag = -1;
for (int i = 0; i < adl->list_Size;i++) {
if (name == adl->linkmanArray[i].Name)
{
cout << "\t姓名:" << adl->linkmanArray[i].Name
<< "\t\t性别:" << (adl->linkmanArray[i].Sex == 1 ? "男" : "女")
<< "\t\t年龄:" << adl->linkmanArray[i].Age
<< "\t\t电话号码:" << adl->linkmanArray[i].PhoneNum << endl;
flag = 1;
}
}
return flag;
}
//删除联系人
void deleteLinkman(struct addressList* adl) {
string name;
cout << "请输入要删除的联系人姓名:" << endl;
cin >> name;
int ret = isExist(adl, name);
if (ret == 1) {
for (int i = 0; i < adl->list_Size; i++) {
if (adl->linkmanArray[i].Name == name) {
for (int j = i; j < adl->list_Size; j++) {
adl->linkmanArray[j] = adl->linkmanArray[j + 1];
}
adl->list_Size--;
cout << "删除 "<<name<<" 成功" << endl;
}
}
}
else {
cout << "不存在姓名为 - " << name << " - 的联系人!" << endl;
}
}
//查找联系人
void findLinkman(struct addressList* adl) {
string name;
cout << "请输入要查找的联系人姓名:" << endl;
cin >> name;
int ret = isExist(adl, name);
if (ret == 1) {
for (int i = 0; i < adl->list_Size; i++) {
if (adl->linkmanArray[i].Name == name) {
cout << "查找完毕!" << endl;
}
}
}
else {
cout << "不存在姓名为 - " << name << " - 的联系人!" << endl;
}
}
//修改联系人信息
void modifyLinkman(struct addressList* adl) {
string name;
cout << "请输入要查找的联系人姓名:" << endl;
cin >> name;
int ret = isExist(adl, name);
if (ret == 1) {
for (int i = 0; i < adl->list_Size; i++) {
if (adl->linkmanArray[i].Name == name) {
int flag = -1;
while(flag != 1){
cout << "\n\n请输入要修改信息编号:\t1 - 姓名 \n\t\t\t2 - 性别 \n\t\t\t3 - 年龄 \n\t\t\t4 - 电话 \n\t\t\t0 - 完成修改\n ";
int choice = -1;
cin >> choice;
switch (choice) {
case 1:
cout << "请输入新的联系人姓名:";
cin >> adl->linkmanArray[i].Name;
cout << "\n修改姓名成功!";
break;
case 2: {
int sex = -1;
cout << "1 - 男, 2 - 女";
cout << "\n请输入新的联系人性别:";
while (sex != 1 && sex != 2) {
cin >> sex;
if (sex == 1 || sex == 2) {
adl->linkmanArray[i].Sex = sex;
cout << "\n修改性别成功!";
}
else {
cout << "输入不合法,请重新输入!" << endl;
}
}
}
break;
case 3:
cout << "\n请输入新的联系人年龄:";
cin >> adl->linkmanArray[i].Age;
cout << "\n修改年龄成功!";
break;
case 4:
cout << "\n请输入新的联系人电话号码:";
cin >> adl->linkmanArray[i].PhoneNum;
cout << "\n修改电话号码成功!";
break;
case 0:
cout << "\n完成修改操作。";
flag = 1;
break;
default:
cout << "\n非法输入,请重新输入!";
break;
}
}
}
}
}
else {
cout << "不存在姓名为 - " << name << " - 的联系人!" << endl;
}
}
//清空通讯录
void cleanList(struct addressList* adl) {
int choice = -1;
while(1){
cout << "确定删除全部联系人信息吗?\t1 - yes \t0 - no\n";
cin >> choice;
if (choice == 1) {
adl->list_Size = 0; //做逻辑清空操作
cout << "通信录已清空!" << endl;
break;
}
else if (choice == 0) {
cout << "取消删除全部联系人信息!" << endl;
break;
}
else {
cout << "非法输入,请重新输入!" << endl;
}
}
}
如有帮助,请点击我的回答下方的【采纳该答案】按钮帮忙采纳下,谢谢!