这是主函数
#include<iostream>
#include<string>
#include<cstdlib>
#include "functions.h"
#include "account.h"
using namespace std;
int main()
{
//创建账号录结构体
Accountrecords ads;
//初始化账号录中账号个数
int select = 0;
while (true)
{
showMenu();//显示菜单
cin >> select;
switch (select)
{
case 1://1、添加账号
addaccount(&ads);//利用地址传递
break;
case 2://2、显示账号
showAccount(&ads);
break;
case 3://3、删除账号
deleteAccount(&ads);
break;
case 4://4、查找账号
break;
case 5:// 5、修改账号
break;
case 6://6、清空账号
break;
case 0://0、退出账号录
cout << "欢迎下次使用!" << endl;
system("pause");
return 0;
break;
}
}
system("pause");
return 0;
}
这是函数声明
#pragma once
#include "account.h"
void showMenu();//显示菜单
void addaccount(Accountrecords* ads);//case 1添加账号
void showAccount(Accountrecords* ads);//case2显示账号
void deleteAccount(Accountrecords* ads);//case3删除账号
这是函数定义实现
#include <iostream>
#include "account.h"
using namespace std;
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 addaccount(Accountrecords *ads)//case 1添加账号
{
//判断账号录是否已满,如果满了就不在添加
if (ads->m_Size == Max)
{
cout<<"账号录已满,无法添加" << endl;
return;
}
else
{
//添加具体账号
//平台名称
string name;
cout << "请输入账号名称:" << endl;
cin >> name;
ads->accountArray[ads->m_Size].m_Name = name;
//账号
string account;
cout << "请输入账号:" << endl;
cin >> account;
ads->accountArray[ads->m_Size].m_account = account;
//密码
string password;
cout << "请输入密码:" << endl;
cin >> password;
ads->accountArray[ads->m_Size].m_password = password;
}
//更新账号录人数
ads->m_Size++;
cout << "添加成功!" << endl;
system("pause");//按任意键继续、
system("cls");//清屏
}
void showAccount(Accountrecords *ads)//case2显示账号
{
//判断账号录中人数是否为0
if (ads->m_Size == 0)
{
cout << "当前记录为空" << endl;
}
else
{
for (int i = 0; i < ads->m_Size; i++)
{
cout << "平台名称:" << ads->accountArray[ads->m_Size].m_Name << '\t';
cout << "账号:" << ads->accountArray[ads->m_Size].m_account << '\t';
cout << "密码:" << ads->accountArray[ads->m_Size].m_password<< endl;
}
}
system("pause");//按任意键继续、
system("cls");//清屏
}
//检测账号是否存在,如果存在,返回账号所在数组中的具体位置,不存在,返回-1
int isExist(Accountrecords * ads, string name)
{
for (int i = 0; i < ads->m_Size; i++)
{//找到用户输入的平台名称
if (ads->accountArray[i].m_Name == name)
{
return i;//找到返回平台名称的下标编号
}
}
return -1;//如果遍历结束都没有找到,返回-1
}
void deleteAccount(Accountrecords* ads)//case3删除账号
{
cout << "请输入您要账号平台名称" << endl;
string name;
cin >> name;
int ret = isExist(ads, name);
if (ret != -1)
{
//查到此账号,删除
for (int i = ret; i < ads->m_Size; i++)
{
//数据前移
ads->accountArray[i] = ads->accountArray[i + 1];
ads->m_Size--;//更新账号录中的账号数
cout << "删除成功!" << endl;
}
}
else
{
cout << "没有此账号" << endl;
}
system("pause");
system("cls");
}
这是结构体
#pragma once
#include<string>
#define Max 1000
using namespace std;
struct Account
{
//平台名称
string m_Name;
//账号
string m_account;
//密码
string m_password;
};
struct Accountrecords
{
//保存账号的数组
struct Account accountArray[Max];
//当前记录的账号个数
int m_Size = 0;
};
这是运行结果
没什么大问题,for循环下标错了,怎么能使用ads->m_Size作为下标呢,下次注意就行了
添加和显示的都应该是i为下标
for (int i = 0; i < ads->m_Size; i++)
{
cout << "平台名称:" << ads->accountArray[i].m_Name << '\t';
cout << "账号:" << ads->accountArray[i].m_account << '\t';
cout << "密码:" << ads->accountArray[i].m_password << endl;
}
另外,建议在你添加成功一个账号后就打印,
就是
//更新账号录人数
ads->m_Size++;
cout << "添加成功!" << endl;
后面加上打印
这样能更好的定位问题,是cin的问题还是show函数传递参数不正确而导致无法输出,比如此处你传递的参数不是指针,那么在show中也是无法打印的
我用#CSDN#这个app发现了有技术含量的博客,小伙伴们求同去《C++期末大作业——通讯录系统(基于结构体struct)》, 一起来围观吧 https://blog.csdn.net/weixin_47974364/article/details/121069256?utm_source=app&app_version=5.3.0&code=app_1562916241&uLinkId=usr1mkqgl919blen