147380124 发表于 2021-6-19 21:28:14

c++友元类成员变量问题


w.name是Staffoperation类的成员变量,然后在message类里面输出就为乱码,但是如第三张图片所示,在Staffoperatio类的成员函数里面输出,他的结果就是正常的,比如说内容是张三,在第一张图片里面输出就为烫烫烫,但是在第三张图片里面输出就是张三。
求求各位大佬帮帮忙{:10_266:} {:10_266:} {:10_266:}

人造人 发表于 2021-6-19 21:28:15

147380124 发表于 2021-6-19 22:06
大佬,你就给我指点指点大概修改方向吧我自己再研究研究,就不麻烦大佬了谢谢大佬指 ...

另一个问题
      strcpy_s(name_m, strlen(w.name) + 1, w.name);

w 是什么?是一个数组
至少也是 w.name 吧?
直接 w.name 吗?

人造人 发表于 2021-6-19 21:41:47

发代码

147380124 发表于 2021-6-19 21:43:29

人造人 发表于 2021-6-19 21:41
发代码

代码有点多,因为是项目出了毛病

人造人 发表于 2021-6-19 21:46:23

147380124 发表于 2021-6-19 21:43
代码有点多,因为是项目出了毛病

你只发个代码片段,我没办法把程序运行起来调试呀

147380124 发表于 2021-6-19 21:46:24

人造人 发表于 2021-6-19 21:41
发代码

#include<iostream>
using namespace std;


void menu()//定义菜单函数
{
    cout << endl;
    cout << "---------------------------人事档案管理系统---------------------------" << endl << endl;
    cout << "\t\t\t 1:添加职员具体信息" << endl;
    cout << "\t\t\t 2:按姓名查找职员信息" << endl;
    cout << "\t\t\t 3:按编号查找职员信息" << endl;
    cout << "\t\t\t 4:按姓名删除职员信息" << endl;
    cout << "\t\t\t 5:按编号删除职员信息" << endl;
    cout << "\t\t\t 6:显示人事管理系统中所有职员信息" << endl;
    cout << "\t\t\t 7:清空人事管理系统中所有职员信息" << endl;
    cout << "\t\t\t 8:统计人事管理系统中的职员总数" << endl;
    cout << "\t\t\t 0:退出人事档案管理系统" << endl;
    cout << "**********************************************************************" << endl;
}

class Person {//普通人
public:
    char name;
    char sex;
    char age;


};

//职工职位
class PersonPosition :virtual public Person {//Person为虚基类
public:
    char position;//职位
    PersonPosition() {
      //Null
    }
    ~PersonPosition() {
      //Null
    }
};

//操作时间
class OperationTime :virtual public Person {//Person为虚基类
public:
    char engage_time;//聘用时间
    char add_time;//记录时间
    OperationTime() {
      //Null
    }
    ~OperationTime() {
      //Null
    }
};

//职工基本信息
class Worker :public PersonPosition, public OperationTime {//继承PersonPosition、OperationTime类,多重继承。
private:
    char num;//编号
    char address;//地址
    char tel;//手机号
    char nation;//民族
    char political_status;//政治面貌
    char marital_status;//婚姻状况
    char school;//毕业院校
    char identity;//身份证号
    char email;//邮箱

    friend class message;//友元类message

    Worker() {
      //Null
    }
    ~Worker() {
      //Null
    }
    friend class Staffoperation;//定义友元操作类

};

//操作函数
class Staffoperation :public PersonPosition, public OperationTime {//多重继承
private:
    Worker w;//100为员工最多数量
    int Num;//用于表示记录时员工的序号
    int all;//用于表示系统含有多少名员工

public:
    Staffoperation() {
      Num = 1;
      all = 0;
    }
    virtual void show() {
      //Null
      //定义虚函数show,供message类调用
    }

    void add_person();//添加员工具体信息
    void searchname();//按姓名查找
    void searchnum();//按编号查找
    void delname();//按姓名删除
    void delnum();//按编号删除
    void showall();//显示人事管理系统中所有员工信息
    void delall();//清空人事管理系统中所有员工信息
    void total();//统计人事管理系统中的员工总数

    friend ostream& operator<<(ostream& out, int a[]);

    friend class message;//定义友元类

};

//message类用于重载运算符
class message :public Staffoperation {
private:
    char name_m;
    char sex_m;
    char age_m;
    char num_m;//编号
    char address_m;//地址
    char tel_m;//手机号
    char nation_m;//民族
    char political_status_m;//政治面貌
    char marital_status_m;//婚姻状况
    char school_m;//毕业院校
    char identity_m;//身份证号
    char email_m;//邮箱
    char position_m;//职位
    char engage_time_m;//聘用时间
    char add_time_m;//记录时间
public:
    message(int i) {
      strcpy_s(name_m, strlen(w.name) + 1, w.name);
      strcpy_s(sex_m, strlen(w.sex) + 1, w.sex);
      strcpy_s(age_m, strlen(w.age) + 1, w.age);
      strcpy_s(num_m, strlen(w.num) + 1, w.num);
      strcpy_s(address_m, strlen(w.name) + 1, w.name);
      strcpy_s(tel_m, strlen(w.tel) + 1, w.tel);
      strcpy_s(nation_m, strlen(w.nation) + 1, w.nation);
      strcpy_s(political_status_m, strlen(w.political_status) + 1, w.political_status);
      strcpy_s(marital_status_m, strlen(w.marital_status) + 1, w.marital_status);
      strcpy_s(school_m, strlen(w.school) + 1, w.school);
      strcpy_s(identity_m, strlen(w.identity) + 1, w.identity);
      strcpy_s(email_m, strlen(w.email) + 1, w.email);
      strcpy_s(position_m, strlen(w.position) + 1, w.position);
      strcpy_s(engage_time_m, strlen(w.engage_time) + 1, w.engage_time);
      strcpy_s(add_time_m, strlen(w.add_time) + 1, w.add_time);
    }
    //拷贝构造函数
    message(const message& me) {
      strcpy_s(name_m, strlen(me.name_m) + 1, me.name_m);
      strcpy_s(sex_m, strlen(me.sex_m) + 1, me.sex_m);
      strcpy_s(age_m, strlen(me.age_m) + 1, me.age_m);
      strcpy_s(num_m, strlen(me.num_m) + 1, me.num_m);
      strcpy_s(address_m, strlen(me.name_m) + 1, me.name_m);
      strcpy_s(tel_m, strlen(me.tel_m) + 1, me.tel_m);
      strcpy_s(nation_m, strlen(me.nation_m) + 1, me.nation_m);
      strcpy_s(political_status_m, strlen(me.political_status_m) + 1, me.political_status_m);
      strcpy_s(marital_status_m, strlen(me.marital_status_m) + 1, me.marital_status_m);
      strcpy_s(school_m, strlen(me.school_m) + 1, me.school_m);
      strcpy_s(identity_m, strlen(me.identity_m) + 1, me.identity_m);
      strcpy_s(email_m, strlen(me.email_m) + 1, me.email_m);
      strcpy_s(position_m, strlen(me.position_m) + 1, me.position_m);
      strcpy_s(engage_time_m, strlen(me.engage_time_m) + 1, me.engage_time_m);
      strcpy_s(add_time_m, strlen(me.add_time_m) + 1, me.add_time_m);
    }
    friend ostream& operator<<(ostream& out, message& m);//重载运算符<<
    void show() {
      cout << *this;
    }
};

//重载运算符<<
ostream& operator<<(ostream& out, message& m) {
    out << " 编号:" << m.num_m << endl;
    out << " 姓名:" << m.name_m << endl;
    out << " 年龄:" << m.age_m << endl;
    out << " 性别:" << m.sex_m << endl;
    out << " 地址:" << m.address_m << endl;
    out << " 手机号:" << m.tel_m << endl;
    out << " 国家:" << m.nation_m << endl;
    out << " 政治面貌:" << m.political_status_m << endl;
    out << " 婚姻状况:" << m.marital_status_m << endl;
    out << " 毕业院校:" << m.school_m << endl;
    out << " 身份证号:" << m.identity_m << endl;
    out << " 邮箱:" << m.email_m << endl;
    out << " 聘用时间:" << m.engage_time_m << endl;
    out << " 记录时间:" << m.add_time_m << endl;
    return out;
}

//密码系统(如需使用管理系统,需要输入正确的密码,若连续三次密码错误,则系统推出)
void password()
{

    int password;
    int j = 1;
    cout << "欲使用本系统,请输入本系统的密码:" << endl;
    cin >> password;
    while (password != 888 && j < 3)
    {
      try {//应用异常出来来验证密码
            if (password != 888)
                throw - 1; //抛出int类型异常

      }

      catch (int e) {
            cout << "您输入的密码有误,请再次输入: " << endl;
            j++;
            cin >> password;
      }

    }
    if (password != 888 && j >= 3)
    {
      cout << "您连续三次输入密码有误,系统自动退出" << endl;
      exit(0);
    }
    else {
      cout << endl << "欢迎进入人事档案管理系统\n请根据系统功能列表选择相应的功能(请输入选项对应的数字) " << endl;
    }
}

//添加员工具体信息
void Staffoperation::add_person() {
    string choice = "Y";
    char num1;
    while (choice == "Y" || choice == "y")
    {
      cout << "-----新建人事档案职员信息----" << endl;
      cout << "请输入职员的的编号:(1 - 100) " << endl;
      cin >> num1;
      for (int x = 0; x <= all; x++)//判断是否有重复的编号
      {
            while (strcmp(w.num, num1) == 0)
            {
                cout << "此职工编号已存在,请重新输入:" << endl;
                cout << "请输入职员的的编号:(1 - 100) " << endl;
                cin >> num1;
                x = 0;
            }
      }
      strcpy_s(w.num, num1);
      cout << "请输入职员姓名:" << endl;
      cin >> w.name;
      //cout << "请输入性别:" << endl;
      //cin >> w.sex;
      //while (strcmp(w.sex,"男")!=0 && strcmp(w.sex, "女") != 0)
      //{
      //    cout << "您输入的性别有误,请核对后再输入: " << endl;
      //    cin >> w.sex;
      //}
      //cout << "请输入年龄:" << endl;
      //cin >> w.age;
      //cout << "请输入该职员的职位:(经理,管理员,员工) " << endl;
      //cin >> w.position;
      //while ((string)w.position != "经理" && (string)w.position != "管理员" && (string)w.position != "员工")
      //{
      //    cout << "您输入的职工职位有误,请核对后再输入: " << endl;
      //    cin >> w.position;
      //}
      //cout << "请输入该职员的家庭地址: " << endl;
      //cin >> w.address;
      //cout << "请输入该职员的民族:" << endl;
      //cin >> w.nation;
      //cout << "请输入职员的政治面貌:(群众,团员,党员)" << endl;
      //cin >> w.political_status;
      //while ((string)w.political_status != "群众" && (string)w.political_status != "团员" && (string)w.political_status != "党员")
      //{
      //    cout << "您输入的职工政治面貌有误,请核对后再输入: " << endl;
      //    cin >> w.political_status;
      //}
      //cout << "请输入职员的婚姻状况(未婚,已婚)" << endl;
      //cin >> w.marital_status;
      //while ((string)w.marital_status != "未婚" && (string)w.marital_status != "已婚")
      //{
      //    cout << "您输入的职工的婚姻状况有误,请核对后再输入: " << endl;
      //    cin >> w.marital_status;
      //}
      //cout << "请输入职员的毕业学校: " << endl;
      //cin >> w.school;
      //cout << "请输入职员的身份证号:" << endl;
      //cin >> w.identity;
      //cout << "请输入职员的手机号:" << endl;
      //cin >> w.tel;
      //cout << "请输入职员的邮箱: " << endl;
      //cin >> w.email;
      //cout << "请输人职员的聘用时间:" << endl;
      //cin >> w.engage_time;
      //cout << "请输入此次记录的添加时间:" << endl;
      //cin >> w.add_time;
      cout << "信息添加成功!" << endl;
      cout << "您还想继续添加吗?( y/n) " << endl;
      cin >> choice;
      while (choice != "Y" && choice != "y" && choice != "N" && choice != "n")
      {
            cout << "请按要求键入(y/n) " << endl;
            cin >> choice;
      }
      if (choice == "N" || choice == "n")
      {
            Num++;
            all++;
            break;
      }
      Num++;
      all++;
    }
}

//按姓名查找
void Staffoperation::searchname() {
    if (all == 0) {
      cout << "目前还没有员工计入系统,即将返回主菜单....." << endl;
      menu();
    }
    else {
      char name1;
      int flag = 0;//查询成功标志
      cout << "请输入你想要查询的姓名:" << endl;
      cin >> name1;
      for (int i = 0; i < 100; i++) {
            if (strcmp(name1, w.name) == 0) {
                cout << "查询成功!该员工的信息如下: " << endl;
                int l = i;
                message A(l);
                cout << A.name << endl;
                cout << w.name << endl;
                //message B(A);//调用拷贝构造函数
                //B.show();
                flag = 1;
                break;
            }
      }
      if (flag == 0) {
            cout << "查询失败!系统中没有此人信息!即将返回主菜单....." << endl;
      }
    }
}

//按编号查找
void Staffoperation::searchnum() {
    if (all == 0) {
      cout << "目前还没有员工计入系统,即将返回主菜单....." << endl;
      menu();
    }
    else {
      char num1;
      int flag = 0;//查询成功标志
      cout << "请输入你想要查询的编号:" << endl;
      cin >> num1;
      for (int i = 0; i < 100; i++) {
            if (strcmp(w.num, num1) == 0) {
                cout << "查询成功!该员工的信息如下: " << endl;
                message A(i);
                //message B(A);//调用拷贝构造函数
/*               B.show();*/
                flag = 1;
                break;
            }
      }
      if (flag == 0) {
            cout << "查询失败!系统中没有此人信息!即将返回主菜单....." << endl;
      }
    }
}

//按姓名删除
void Staffoperation::delname() {
    if (all == 0) {
      cout << "目前还没有员工计入系统!" << endl;
    }
    char name2;
    cout << "请输入你想要删除的员工姓名:" << endl;
    cin >> name2;
    int flag = 0;//删除标志
    for (int i = 0; i < 100; i++) {
      if (strcmp(name2, w.name) == 0) {
            cout << "你想要删除的员工的信息如下: " << endl;
            message A(i);
            //message B(A);//调用拷贝构造函数
            //B.show();
            flag = 1;
            break;
      }
    }
    if (flag == 0) {
      cout << "系统中没有此人信息!" << endl;
    }
    cout << "确认删除请输入Y,返回主菜单请输入N " << endl;
    string p;
    int j = 0;
    cin >> p;
    while (1)
    {
      if (p == "y" || p == "Y")
      {
            for (int i = 0; i < 100; i++) {
                if (strcmp(name2, w.name) == 0) {
                  j = i;
                }
            }
            for (; j <= 99; j++) {
                w = w;
            }
            all--;
            cout << "员工信息已删除!" << endl;
            break;
      }
      else if (p == "n" || p == "N")
      {
            menu();
            break;
      }
      else
      {
            cout << "输入有误,请重新输入:";
            cin >> p;
      }
    }

}

//按编号删除
void Staffoperation::delnum() {
    if (all == 0) {
      cout << "目前还没有员工计入系统!." << endl;
    }
    char num2;
    cout << "请输入你想要删除的员工编号:" << endl;
    cin >> num2;
    int flag = 0;//删除标志
    for (int i = 0; i < 100; i++) {
      if (strcmp(w.num, num2) == 0) {
            cout << "你想要删除的员工的信息如下: " << endl;
            message A(i);
            //message B(A);//调用拷贝构造函数
            //B.show();
            flag = 1;
            break;
      }
    }
    if (flag == 0) {
      cout << "系统中没有此人信息!" << endl;
    }
    cout << "确认删除请输入Y,返回主菜单请输入N " << endl;
    string p;
    int j;
    cin >> p;
    while (1)
    {
      if (p == "y" || p == "Y")
      {
            for (int i = 0; i < 100; i++) {
                if (strcmp(w.num, num2) == 0) {
                  j = i;
                }
            }
            for (; j <= 99; j++) {
                w = w;
            }
            all--;
            cout << "员工信息已删除!" << endl;
            break;
      }
      else if (p == "n" || p == "N")
      {
            menu();
            break;
      }
      else
      {
            cout << "输入有误,请重新输入:";
            cin >> p;
      }
    }

}

//显示人事管理系统中所有员工信息
void Staffoperation::showall() {
    if (all == 0) {
      cout << "信息库为空,请添加职员!" << endl;
      menu();
    }
    else {
      cout << "所有员工的信息如下: " << endl;
      for (int i = 1; i <= all; i++) {
            message A(i);
            //message B(A);//调用拷贝构造函数
            //B.show();
      }
      ///////////////////////////////////////////
    }
}

//清空人事管理系统中所有员工信息
void Staffoperation::delall() {
    for (int x = 1; x <= all; x++) {
      w = w;
    }
    all = 0;
    Num = 1;
    cout << "数据已清空!" << endl;
}

//统计人事管理系统中的员工总数
void Staffoperation::total() {
    cout << "系统中一共有:" << all << "名职工的信息。" << endl;
}

//定义控制函数
void manage()
{
    Staffoperation per;
    int choice, k = 1;
    menu();
    cout << "请根据系统功能列表选择相应的功能(请输入选项对应的数字)" << endl;
    //password();
    while (k)
    {
      cin >> choice;
      switch (choice)
      {
      case 1:
            per.add_person();//调用增加人事档案中职员信息函数
            break;
      case 2:
            per.searchname();//调用按姓名查找职工信息函数
            break;
      case 3:
            per.searchnum();//调用按编号查找职工信息函数
            break;
      case 4:
            per.delname();//调用按姓名删除职工信息函数
            break;
      case 5:
            per.delnum();//调用按编号删除职工信息函数
            break;
      case 6:
            per.showall();//调用显示人事档案管理系统中所有职员信息的函数
            break;
      case 7:
            per.delall();//调用清空人事档案管理系统中所有数据的函数
            break;
      case 8:
            per.total();//调用输出人事档案管理系统中职员数的函数
            break;
      case 0:
            cout << endl << "即将退出人事档案管理系统,再见!" << endl << endl;
            k = 0;
            break;
      default:
            cout << "您输入的选项有错,请重新选择! ";
      }
      if (k != 0)
      {
            menu();
            cout << "请根据系统功能列表选择相应的功能(请输入选项对应的数字)" << endl;
      }
    }
}

int main()
{
    manage();

    return 0;
}

147380124 发表于 2021-6-19 21:48:22

人造人 发表于 2021-6-19 21:46
你只发个代码片段,我没办法把程序运行起来调试呀

大佬,我知道我这个代码有些是脱了裤子放屁,但是有的像拷贝构造函数这些是老师的要求,必须要加。。。。{:10_266:}

人造人 发表于 2021-6-19 22:02:00

147380124 发表于 2021-6-19 21:48
大佬,我知道我这个代码有些是脱了裤子放屁,但是有的像拷贝构造函数这些是老师的要求,必须要加。。。。 ...

不要用微软的安全函数,因为不可移植
这么多报错

main.cpp: In constructor ‘message::message(int)’:
main.cpp:133:35: error: request for member ‘name’ in ‘((message*)this)->message::<anonymous>.Staffoperation::w’, which is of non-class type ‘Worker ’
133 |         strcpy_s(name_m, strlen(w.name) + 1, w.name);
      |                                 ^~~~
main.cpp:133:26: error: ‘strlen’ was not declared in this scope
133 |         strcpy_s(name_m, strlen(w.name) + 1, w.name);
      |                        ^~~~~~
main.cpp:2:1: note: ‘strlen’ is defined in header ‘<cstring>’; did you forget to ‘#include <cstring>’?
    1 | #include <iostream>
+++ |+#include <cstring>
    2 |
main.cpp:133:48: error: request for member ‘name’ in ‘((message*)this)->message::<anonymous>.Staffoperation::w’, which is of non-class type ‘Worker ’
133 |         strcpy_s(name_m, strlen(w.name) + 1, w.name);
      |                                                ^~~~
main.cpp:133:9: error: ‘strcpy_s’ was not declared in this scope
133 |         strcpy_s(name_m, strlen(w.name) + 1, w.name);
      |         ^~~~~~~~
main.cpp:134:34: error: request for member ‘sex’ in ‘((message*)this)->message::<anonymous>.Staffoperation::w’, which is of non-class type ‘Worker ’
134 |         strcpy_s(sex_m, strlen(w.sex) + 1, w.sex);
      |                                  ^~~
main.cpp:134:46: error: request for member ‘sex’ in ‘((message*)this)->message::<anonymous>.Staffoperation::w’, which is of non-class type ‘Worker ’
134 |         strcpy_s(sex_m, strlen(w.sex) + 1, w.sex);
      |                                              ^~~
main.cpp:135:34: error: request for member ‘age’ in ‘((message*)this)->message::<anonymous>.Staffoperation::w’, which is of non-class type ‘Worker ’
135 |         strcpy_s(age_m, strlen(w.age) + 1, w.age);
      |                                  ^~~
main.cpp:135:46: error: request for member ‘age’ in ‘((message*)this)->message::<anonymous>.Staffoperation::w’, which is of non-class type ‘Worker ’
135 |         strcpy_s(age_m, strlen(w.age) + 1, w.age);
      |                                              ^~~
main.cpp:136:34: error: request for member ‘num’ in ‘((message*)this)->message::<anonymous>.Staffoperation::w’, which is of non-class type ‘Worker ’
136 |         strcpy_s(num_m, strlen(w.num) + 1, w.num);
      |                                  ^~~
main.cpp:136:46: error: request for member ‘num’ in ‘((message*)this)->message::<anonymous>.Staffoperation::w’, which is of non-class type ‘Worker ’
136 |         strcpy_s(num_m, strlen(w.num) + 1, w.num);
      |                                              ^~~
main.cpp:137:38: error: request for member ‘name’ in ‘((message*)this)->message::<anonymous>.Staffoperation::w’, which is of non-class type ‘Worker ’
137 |         strcpy_s(address_m, strlen(w.name) + 1, w.name);
      |                                    ^~~~
main.cpp:137:51: error: request for member ‘name’ in ‘((message*)this)->message::<anonymous>.Staffoperation::w’, which is of non-class type ‘Worker ’
137 |         strcpy_s(address_m, strlen(w.name) + 1, w.name);
      |                                                   ^~~~
main.cpp:138:34: error: request for member ‘tel’ in ‘((message*)this)->message::<anonymous>.Staffoperation::w’, which is of non-class type ‘Worker ’
138 |         strcpy_s(tel_m, strlen(w.tel) + 1, w.tel);
      |                                  ^~~
main.cpp:138:46: error: request for member ‘tel’ in ‘((message*)this)->message::<anonymous>.Staffoperation::w’, which is of non-class type ‘Worker ’
138 |         strcpy_s(tel_m, strlen(w.tel) + 1, w.tel);
      |                                              ^~~
main.cpp:139:37: error: request for member ‘nation’ in ‘((message*)this)->message::<anonymous>.Staffoperation::w’, which is of non-class type ‘Worker ’
139 |         strcpy_s(nation_m, strlen(w.nation) + 1, w.nation);
      |                                     ^~~~~~
main.cpp:139:52: error: request for member ‘nation’ in ‘((message*)this)->message::<anonymous>.Staffoperation::w’, which is of non-class type ‘Worker ’
139 |         strcpy_s(nation_m, strlen(w.nation) + 1, w.nation);
      |                                                    ^~~~~~
main.cpp:140:47: error: request for member ‘political_status’ in ‘((message*)this)->message::<anonymous>.Staffoperation::w’, which is of non-class type ‘Worker ’
140 |         strcpy_s(political_status_m, strlen(w.political_status) + 1, w.political_status);
      |                                             ^~~~~~~~~~~~~~~~
main.cpp:140:72: error: request for member ‘political_status’ in ‘((message*)this)->message::<anonymous>.Staffoperation::w’, which is of non-class type ‘Worker ’
140 |         strcpy_s(political_status_m, strlen(w.political_status) + 1, w.political_status);
      |                                                                        ^~~~~~~~~~~~~~~~
main.cpp:141:45: error: request for member ‘marital_status’ in ‘((message*)this)->message::<anonymous>.Staffoperation::w’, which is of non-class type ‘Worker ’
141 |         strcpy_s(marital_status_m, strlen(w.marital_status) + 1, w.marital_status);
      |                                             ^~~~~~~~~~~~~~
main.cpp:141:68: error: request for member ‘marital_status’ in ‘((message*)this)->message::<anonymous>.Staffoperation::w’, which is of non-class type ‘Worker ’
141 |         strcpy_s(marital_status_m, strlen(w.marital_status) + 1, w.marital_status);
      |                                                                  ^~~~~~~~~~~~~~
main.cpp:142:37: error: request for member ‘school’ in ‘((message*)this)->message::<anonymous>.Staffoperation::w’, which is of non-class type ‘Worker ’
142 |         strcpy_s(school_m, strlen(w.school) + 1, w.school);
      |                                     ^~~~~~
main.cpp:142:52: error: request for member ‘school’ in ‘((message*)this)->message::<anonymous>.Staffoperation::w’, which is of non-class type ‘Worker ’
142 |         strcpy_s(school_m, strlen(w.school) + 1, w.school);
      |                                                    ^~~~~~
main.cpp:143:39: error: request for member ‘identity’ in ‘((message*)this)->message::<anonymous>.Staffoperation::w’, which is of non-class type ‘Worker ’
143 |         strcpy_s(identity_m, strlen(w.identity) + 1, w.identity);
      |                                       ^~~~~~~~
main.cpp:143:56: error: request for member ‘identity’ in ‘((message*)this)->message::<anonymous>.Staffoperation::w’, which is of non-class type ‘Worker ’
143 |         strcpy_s(identity_m, strlen(w.identity) + 1, w.identity);
      |                                                      ^~~~~~~~
main.cpp:144:36: error: request for member ‘email’ in ‘((message*)this)->message::<anonymous>.Staffoperation::w’, which is of non-class type ‘Worker ’
144 |         strcpy_s(email_m, strlen(w.email) + 1, w.email);
      |                                    ^~~~~
main.cpp:144:50: error: request for member ‘email’ in ‘((message*)this)->message::<anonymous>.Staffoperation::w’, which is of non-class type ‘Worker ’
144 |         strcpy_s(email_m, strlen(w.email) + 1, w.email);
      |                                                ^~~~~
main.cpp:145:39: error: request for member ‘position’ in ‘((message*)this)->message::<anonymous>.Staffoperation::w’, which is of non-class type ‘Worker ’
145 |         strcpy_s(position_m, strlen(w.position) + 1, w.position);
      |                                       ^~~~~~~~
main.cpp:145:56: error: request for member ‘position’ in ‘((message*)this)->message::<anonymous>.Staffoperation::w’, which is of non-class type ‘Worker ’
145 |         strcpy_s(position_m, strlen(w.position) + 1, w.position);
      |                                                      ^~~~~~~~
main.cpp:146:42: error: request for member ‘engage_time’ in ‘((message*)this)->message::<anonymous>.Staffoperation::w’, which is of non-class type ‘Worker ’
146 |         strcpy_s(engage_time_m, strlen(w.engage_time) + 1, w.engage_time);
      |                                          ^~~~~~~~~~~
main.cpp:146:62: error: request for member ‘engage_time’ in ‘((message*)this)->message::<anonymous>.Staffoperation::w’, which is of non-class type ‘Worker ’
146 |         strcpy_s(engage_time_m, strlen(w.engage_time) + 1, w.engage_time);
      |                                                            ^~~~~~~~~~~
main.cpp:147:39: error: request for member ‘add_time’ in ‘((message*)this)->message::<anonymous>.Staffoperation::w’, which is of non-class type ‘Worker ’
147 |         strcpy_s(add_time_m, strlen(w.add_time) + 1, w.add_time);
      |                                       ^~~~~~~~
main.cpp:147:56: error: request for member ‘add_time’ in ‘((message*)this)->message::<anonymous>.Staffoperation::w’, which is of non-class type ‘Worker ’
147 |         strcpy_s(add_time_m, strlen(w.add_time) + 1, w.add_time);
      |                                                      ^~~~~~~~
main.cpp: In copy constructor ‘message::message(const message&)’:
main.cpp:151:26: error: ‘strlen’ was not declared in this scope
151 |         strcpy_s(name_m, strlen(me.name_m) + 1, me.name_m);
      |                        ^~~~~~
main.cpp:151:26: note: ‘strlen’ is defined in header ‘<cstring>’; did you forget to ‘#include <cstring>’?
main.cpp:151:9: error: ‘strcpy_s’ was not declared in this scope
151 |         strcpy_s(name_m, strlen(me.name_m) + 1, me.name_m);
      |         ^~~~~~~~
main.cpp: In member function ‘void Staffoperation::add_person()’:
main.cpp:236:20: error: ‘strcmp’ was not declared in this scope
236 |             while (strcmp(w.num, num1) == 0)
      |                  ^~~~~~
main.cpp:236:20: note: ‘strcmp’ is defined in header ‘<cstring>’; did you forget to ‘#include <cstring>’?
main.cpp:244:9: error: ‘strcpy_s’ was not declared in this scope
244 |         strcpy_s(w.num, num1);
      |         ^~~~~~~~
main.cpp: In member function ‘void Staffoperation::searchname()’:
main.cpp:324:33: error: request for member ‘name’ in ‘((Staffoperation*)this)->Staffoperation::w’, which is of non-class type ‘Worker ’
324 |             if (strcmp(name1, w.name) == 0) {
      |                                 ^~~~
main.cpp:324:17: error: ‘strcmp’ was not declared in this scope
324 |             if (strcmp(name1, w.name) == 0) {
      |               ^~~~~~
main.cpp:324:17: note: ‘strcmp’ is defined in header ‘<cstring>’; did you forget to ‘#include <cstring>’?
main.cpp:329:27: error: request for member ‘name’ in ‘((Staffoperation*)this)->Staffoperation::w’, which is of non-class type ‘Worker ’
329 |               cout << w.name << endl;
      |                           ^~~~
main.cpp: In member function ‘void Staffoperation::searchnum()’:
main.cpp:354:26: error: request for member ‘num’ in ‘((Staffoperation*)this)->Staffoperation::w’, which is of non-class type ‘Worker ’
354 |             if (strcmp(w.num, num1) == 0) {
      |                        ^~~
main.cpp:354:17: error: ‘strcmp’ was not declared in this scope
354 |             if (strcmp(w.num, num1) == 0) {
      |               ^~~~~~
main.cpp:354:17: note: ‘strcmp’ is defined in header ‘<cstring>’; did you forget to ‘#include <cstring>’?
main.cpp: In member function ‘void Staffoperation::delname()’:
main.cpp:379:29: error: request for member ‘name’ in ‘((Staffoperation*)this)->Staffoperation::w’, which is of non-class type ‘Worker ’
379 |         if (strcmp(name2, w.name) == 0) {
      |                           ^~~~
main.cpp:379:13: error: ‘strcmp’ was not declared in this scope
379 |         if (strcmp(name2, w.name) == 0) {
      |             ^~~~~~
main.cpp:379:13: note: ‘strcmp’ is defined in header ‘<cstring>’; did you forget to ‘#include <cstring>’?
main.cpp:400:37: error: request for member ‘name’ in ‘((Staffoperation*)this)->Staffoperation::w’, which is of non-class type ‘Worker ’
400 |               if (strcmp(name2, w.name) == 0) {
      |                                     ^~~~
main.cpp:400:21: error: ‘strcmp’ was not declared in this scope
400 |               if (strcmp(name2, w.name) == 0) {
      |                     ^~~~~~
main.cpp:400:21: note: ‘strcmp’ is defined in header ‘<cstring>’; did you forget to ‘#include <cstring>’?
main.cpp: In member function ‘void Staffoperation::delnum()’:
main.cpp:435:22: error: request for member ‘num’ in ‘((Staffoperation*)this)->Staffoperation::w’, which is of non-class type ‘Worker ’
435 |         if (strcmp(w.num, num2) == 0) {
      |                      ^~~
main.cpp:435:13: error: ‘strcmp’ was not declared in this scope
435 |         if (strcmp(w.num, num2) == 0) {
      |             ^~~~~~
main.cpp:435:13: note: ‘strcmp’ is defined in header ‘<cstring>’; did you forget to ‘#include <cstring>’?
main.cpp:456:30: error: request for member ‘num’ in ‘((Staffoperation*)this)->Staffoperation::w’, which is of non-class type ‘Worker ’
456 |               if (strcmp(w.num, num2) == 0) {
      |                              ^~~
main.cpp:456:21: error: ‘strcmp’ was not declared in this scope
456 |               if (strcmp(w.num, num2) == 0) {
      |                     ^~~~~~
main.cpp:456:21: note: ‘strcmp’ is defined in header ‘<cstring>’; did you forget to ‘#include <cstring>’?

人造人 发表于 2021-6-19 22:02:59

本帖最后由 人造人 于 2021-6-19 22:04 编辑

147380124 发表于 2021-6-19 21:48
大佬,我知道我这个代码有些是脱了裤子放屁,但是有的像拷贝构造函数这些是老师的要求,必须要加。。。。 ...

另一个问题
      strcpy_s(name_m, strlen(w.name) + 1, w.name);

w 是什么?是一个数组
至少也是 w.name 吧?
直接 w.name 吗?

人造人 发表于 2021-6-19 22:03:48

这么多的 _s 函数,全部改一遍,实在头疼

147380124 发表于 2021-6-19 22:06:08

人造人 发表于 2021-6-19 22:03
这么多的 _s 函数,全部改一遍,实在头疼

大佬,你就给我指点指点大概修改方向吧{:10_266:}我自己再研究研究,就不麻烦大佬了{:10_266:}谢谢大佬指点!!!{:10_254:}

147380124 发表于 2021-6-19 22:07:47

人造人 发表于 2021-6-19 22:07


好的,谢谢大佬!{:10_254:}

147380124 发表于 2021-6-19 22:09:57

人造人 发表于 2021-6-19 22:02


大佬,我刚刚看了下,我是写的w.name,但是复制过来就没了我重新修改一下

人造人 发表于 2021-6-19 22:11:06

147380124 发表于 2021-6-19 22:09
大佬,我刚刚看了下,我是写的w.name,但是复制过来就没了我重新修改一下

所以要用代码格式发代码

147380124 发表于 2021-6-19 22:11:52

人造人 发表于 2021-6-19 22:02


#include<iostream>
using namespace std;


void menu()//定义菜单函数
{
    cout << endl;
    cout << "---------------------------人事档案管理系统---------------------------" << endl << endl;
    cout << "\t\t\t 1:添加职员具体信息" << endl;
    cout << "\t\t\t 2:按姓名查找职员信息" << endl;
    cout << "\t\t\t 3:按编号查找职员信息" << endl;
    cout << "\t\t\t 4:按姓名删除职员信息" << endl;
    cout << "\t\t\t 5:按编号删除职员信息" << endl;
    cout << "\t\t\t 6:显示人事管理系统中所有职员信息" << endl;
    cout << "\t\t\t 7:清空人事管理系统中所有职员信息" << endl;
    cout << "\t\t\t 8:统计人事管理系统中的职员总数" << endl;
    cout << "\t\t\t 0:退出人事档案管理系统" << endl;
    cout << "**********************************************************************" << endl;
}

class Person {//普通人
public:
    char name;
    char sex;
    char age;


};

//职工职位
class PersonPosition :virtual public Person {//Person为虚基类
public:
    char position;//职位
    PersonPosition() {
      //Null
    }
    ~PersonPosition() {
      //Null
    }
};

//操作时间
class OperationTime :virtual public Person {//Person为虚基类
public:
    char engage_time;//聘用时间
    char add_time;//记录时间
    OperationTime() {
      //Null
    }
    ~OperationTime() {
      //Null
    }
};

//职工基本信息
class Worker :public PersonPosition, public OperationTime {//继承PersonPosition、OperationTime类,多重继承。
private:
    char num;//编号
    char address;//地址
    char tel;//手机号
    char nation;//民族
    char political_status;//政治面貌
    char marital_status;//婚姻状况
    char school;//毕业院校
    char identity;//身份证号
    char email;//邮箱

    friend class message;//友元类message

    Worker() {
      //Null
    }
    ~Worker() {
      //Null
    }
    friend class Staffoperation;//定义友元操作类

};

//操作函数
class Staffoperation :public PersonPosition, public OperationTime {//多重继承
private:
    Worker w;//100为员工最多数量
    int Num;//用于表示记录时员工的序号
    int all;//用于表示系统含有多少名员工

public:
    Staffoperation() {
      Num = 1;
      all = 0;
    }
    virtual void show() {
      //Null
      //定义虚函数show,供message类调用
    }

    void add_person();//添加员工具体信息
    void searchname();//按姓名查找
    void searchnum();//按编号查找
    void delname();//按姓名删除
    void delnum();//按编号删除
    void showall();//显示人事管理系统中所有员工信息
    void delall();//清空人事管理系统中所有员工信息
    void total();//统计人事管理系统中的员工总数

    friend class message;//定义友元类

};

//message类用于重载运算符
class message:public Staffoperation,public Worker {
private:
    char name_m;
    char sex_m;
    char age_m;
    char num_m;//编号
    char address_m;//地址
    char tel_m;//手机号
    char nation_m;//民族
    char political_status_m;//政治面貌
    char marital_status_m;//婚姻状况
    char school_m;//毕业院校
    char identity_m;//身份证号
    char email_m;//邮箱
    char position_m;//职位
    char engage_time_m;//聘用时间
    char add_time_m;//记录时间
public:
    message(int i) {
      cout << w.name << endl;
      strcpy_s(name_m, strlen(w.name) + 1,w.name);
      strcpy_s(sex_m, strlen(w.sex) + 1, w.sex);
      strcpy_s(age_m, strlen(w.age) + 1, w.age);
      strcpy_s(num_m, strlen(w.num) + 1, w.num);
      strcpy_s(address_m, strlen(w.name) + 1, w.name);
      strcpy_s(tel_m, strlen(w.tel) + 1, w.tel);
      strcpy_s(nation_m, strlen(w.nation) + 1, w.nation);
      strcpy_s(political_status_m, strlen(w.political_status) + 1, w.political_status);
      strcpy_s(marital_status_m, strlen(w.marital_status) + 1, w.marital_status);
      strcpy_s(school_m, strlen(w.school) + 1, w.school);
      strcpy_s(identity_m, strlen(w.identity) + 1, w.identity);
      strcpy_s(email_m, strlen(w.email) + 1, w.email);
      strcpy_s(position_m, strlen(w.position) + 1, w.position);
      strcpy_s(engage_time_m, strlen(w.engage_time) + 1, w.engage_time);
      strcpy_s(add_time_m, strlen(w.add_time) + 1, w.add_time);
    }
    //拷贝构造函数
    message(const message& me) {
      strcpy_s(name_m, strlen(me.name_m) + 1, me.name_m);
      strcpy_s(sex_m, strlen(me.sex_m) + 1, me.sex_m);
      strcpy_s(age_m, strlen(me.age_m) + 1, me.age_m);
      strcpy_s(num_m, strlen(me.num_m) + 1, me.num_m);
      strcpy_s(address_m, strlen(me.name_m) + 1, me.name_m);
      strcpy_s(tel_m, strlen(me.tel_m) + 1, me.tel_m);
      strcpy_s(nation_m, strlen(me.nation_m) + 1, me.nation_m);
      strcpy_s(political_status_m, strlen(me.political_status_m) + 1, me.political_status_m);
      strcpy_s(marital_status_m, strlen(me.marital_status_m) + 1, me.marital_status_m);
      strcpy_s(school_m, strlen(me.school_m) + 1, me.school_m);
      strcpy_s(identity_m, strlen(me.identity_m) + 1, me.identity_m);
      strcpy_s(email_m, strlen(me.email_m) + 1, me.email_m);
      strcpy_s(position_m, strlen(me.position_m) + 1, me.position_m);
      strcpy_s(engage_time_m, strlen(me.engage_time_m) + 1, me.engage_time_m);
      strcpy_s(add_time_m, strlen(me.add_time_m) + 1, me.add_time_m);
    }
    friend ostream& operator<<(ostream& out, message& m);//重载运算符<<
    void show() {
      cout << *this;
    }
};

//重载运算符<<
ostream& operator<<(ostream& out, message& m) {
    out << " 编号:" << m.num_m << endl;
    out << " 姓名:" << m.name_m << endl;
    out << " 年龄:" << m.age_m << endl;
    out << " 性别:" << m.sex_m << endl;
    out << " 地址:" << m.address_m << endl;
    out << " 手机号:" << m.tel_m << endl;
    out << " 国家:" << m.nation_m << endl;
    out << " 政治面貌:" << m.political_status_m << endl;
    out << " 婚姻状况:" << m.marital_status_m << endl;
    out << " 毕业院校:" << m.school_m << endl;
    out << " 身份证号:" << m.identity_m << endl;
    out << " 邮箱:" << m.email_m << endl;
    out << " 聘用时间:" << m.engage_time_m << endl;
    out << " 记录时间:" << m.add_time_m << endl;
    return out;
}

//密码系统(如需使用管理系统,需要输入正确的密码,若连续三次密码错误,则系统推出)
void password()
{

    int password;
    int j = 1;
    cout << "欲使用本系统,请输入本系统的密码:" << endl;
    cin >> password;
    while (password != 888 && j < 3)
    {
      try {//应用异常出来来验证密码
            if (password != 888)
                throw - 1; //抛出int类型异常

      }

      catch (int e) {
            cout << "您输入的密码有误,请再次输入: " << endl;
            j++;
            cin >> password;
      }

    }
    if (password != 888 && j >= 3)
    {
      cout << "您连续三次输入密码有误,系统自动退出" << endl;
      exit(0);
    }
    else {
      cout << endl << "欢迎进入人事档案管理系统\n请根据系统功能列表选择相应的功能(请输入选项对应的数字) " << endl;
    }
}

//添加员工具体信息
void Staffoperation::add_person() {
    string choice = "Y";
    char num1;
    while (choice == "Y" || choice == "y")
    {
      cout << "-----新建人事档案职员信息----" << endl;
      cout << "请输入职员的的编号:(1 - 100) " << endl;
      cin >> num1;
      for (int x = 0; x <= all; x++)//判断是否有重复的编号
      {
            while (strcmp(w.num, num1) == 0)
            {
                cout << "此职工编号已存在,请重新输入:" << endl;
                cout << "请输入职员的的编号:(1 - 100) " << endl;
                cin >> num1;
                x = 0;
            }
      }
      strcpy_s(w.num, num1);
      cout << "请输入职员姓名:" << endl;
      cin >> w.name;
      //cout << "请输入性别:" << endl;
      //cin >> w.sex;
      //while (strcmp(w.sex,"男")!=0 && strcmp(w.sex, "女") != 0)
      //{
      //    cout << "您输入的性别有误,请核对后再输入: " << endl;
      //    cin >> w.sex;
      //}
      //cout << "请输入年龄:" << endl;
      //cin >> w.age;
      //cout << "请输入该职员的职位:(经理,管理员,员工) " << endl;
      //cin >> w.position;
      //while ((string)w.position != "经理" && (string)w.position != "管理员" && (string)w.position != "员工")
      //{
      //    cout << "您输入的职工职位有误,请核对后再输入: " << endl;
      //    cin >> w.position;
      //}
      //cout << "请输入该职员的家庭地址: " << endl;
      //cin >> w.address;
      //cout << "请输入该职员的民族:" << endl;
      //cin >> w.nation;
      //cout << "请输入职员的政治面貌:(群众,团员,党员)" << endl;
      //cin >> w.political_status;
      //while ((string)w.political_status != "群众" && (string)w.political_status != "团员" && (string)w.political_status != "党员")
      //{
      //    cout << "您输入的职工政治面貌有误,请核对后再输入: " << endl;
      //    cin >> w.political_status;
      //}
      //cout << "请输入职员的婚姻状况(未婚,已婚)" << endl;
      //cin >> w.marital_status;
      //while ((string)w.marital_status != "未婚" && (string)w.marital_status != "已婚")
      //{
      //    cout << "您输入的职工的婚姻状况有误,请核对后再输入: " << endl;
      //    cin >> w.marital_status;
      //}
      //cout << "请输入职员的毕业学校: " << endl;
      //cin >> w.school;
      //cout << "请输入职员的身份证号:" << endl;
      //cin >> w.identity;
      //cout << "请输入职员的手机号:" << endl;
      //cin >> w.tel;
      //cout << "请输入职员的邮箱: " << endl;
      //cin >> w.email;
      //cout << "请输人职员的聘用时间:" << endl;
      //cin >> w.engage_time;
      //cout << "请输入此次记录的添加时间:" << endl;
      //cin >> w.add_time;
      cout << "信息添加成功!" << endl;
      cout << "您还想继续添加吗?( y/n) " << endl;
      cin >> choice;
      while (choice != "Y" && choice != "y" && choice != "N" && choice != "n")
      {
            cout << "请按要求键入(y/n) " << endl;
            cin >> choice;
      }
      if (choice == "N" || choice == "n")
      {
            Num++;
            all++;
            break;
      }
      Num++;
      all++;
    }
}

//按姓名查找
void Staffoperation::searchname() {
    if (all == 0) {
      cout << "目前还没有员工计入系统,即将返回主菜单....." << endl;
      menu();
    }
    else {
      char name1;
      int flag = 0;//查询成功标志
      cout << "请输入你想要查询的姓名:" << endl;
      cin >> name1;
      for (int i = 0; i < 100; i++) {
            if (strcmp(name1, w.name) == 0) {
                cout << "查询成功!该员工的信息如下: " << endl;
                int l = i;
                message A(l);
                cout << A.name << endl;
                cout << w.name << endl;
                //message B(A);//调用拷贝构造函数
                //B.show();
                flag = 1;
                break;
            }
      }
      if (flag == 0) {
            cout << "查询失败!系统中没有此人信息!即将返回主菜单....." << endl;
      }
    }
}

//按编号查找
void Staffoperation::searchnum() {
    if (all == 0) {
      cout << "目前还没有员工计入系统,即将返回主菜单....." << endl;
      menu();
    }
    else {
      char num1;
      int flag = 0;//查询成功标志
      cout << "请输入你想要查询的编号:" << endl;
      cin >> num1;
      for (int i = 0; i < 100; i++) {
            if (strcmp(w.num, num1) == 0) {
                cout << "查询成功!该员工的信息如下: " << endl;
                message A(i);
                //message B(A);//调用拷贝构造函数
/*               B.show();*/
                flag = 1;
                break;
            }
      }
      if (flag == 0) {
            cout << "查询失败!系统中没有此人信息!即将返回主菜单....." << endl;
      }
    }
}

//按姓名删除
void Staffoperation::delname() {
    if (all == 0) {
      cout << "目前还没有员工计入系统!" << endl;
    }
    char name2;
    cout << "请输入你想要删除的员工姓名:" << endl;
    cin >> name2;
    int flag = 0;//删除标志
    for (int i = 0; i < 100; i++) {
      if (strcmp(name2, w.name) == 0) {
            cout << "你想要删除的员工的信息如下: " << endl;
            message A(i);
            //message B(A);//调用拷贝构造函数
            //B.show();
            flag = 1;
            break;
      }
    }
    if (flag == 0) {
      cout << "系统中没有此人信息!" << endl;
    }
    cout << "确认删除请输入Y,返回主菜单请输入N " << endl;
    string p;
    int j = 0;
    cin >> p;
    while (1)
    {
      if (p == "y" || p == "Y")
      {
            for (int i = 0; i < 100; i++) {
                if (strcmp(name2, w.name) == 0) {
                  j = i;
                }
            }
            for (; j <= 99; j++) {
                w = w;
            }
            all--;
            cout << "员工信息已删除!" << endl;
            break;
      }
      else if (p == "n" || p == "N")
      {
            menu();
            break;
      }
      else
      {
            cout << "输入有误,请重新输入:";
            cin >> p;
      }
    }

}

//按编号删除
void Staffoperation::delnum() {
    if (all == 0) {
      cout << "目前还没有员工计入系统!." << endl;
    }
    char num2;
    cout << "请输入你想要删除的员工编号:" << endl;
    cin >> num2;
    int flag = 0;//删除标志
    for (int i = 0; i < 100; i++) {
      if (strcmp(w.num, num2) == 0) {
            cout << "你想要删除的员工的信息如下: " << endl;
            message A(i);
            //message B(A);//调用拷贝构造函数
            //B.show();
            flag = 1;
            break;
      }
    }
    if (flag == 0) {
      cout << "系统中没有此人信息!" << endl;
    }
    cout << "确认删除请输入Y,返回主菜单请输入N " << endl;
    string p;
    int j;
    cin >> p;
    while (1)
    {
      if (p == "y" || p == "Y")
      {
            for (int i = 0; i < 100; i++) {
                if (strcmp(w.num, num2) == 0) {
                  j = i;
                }
            }
            for (; j <= 99; j++) {
                w = w;
            }
            all--;
            cout << "员工信息已删除!" << endl;
            break;
      }
      else if (p == "n" || p == "N")
      {
            menu();
            break;
      }
      else
      {
            cout << "输入有误,请重新输入:";
            cin >> p;
      }
    }

}

//显示人事管理系统中所有员工信息
void Staffoperation::showall() {
    if (all == 0) {
      cout << "信息库为空,请添加职员!" << endl;
      menu();
    }
    else {
      cout << "所有员工的信息如下: " << endl;
      for (int i = 1; i <= all; i++) {
            message A(i);
            //message B(A);//调用拷贝构造函数
            //B.show();
      }
      ///////////////////////////////////////////
    }
}

//清空人事管理系统中所有员工信息
void Staffoperation::delall() {
    for (int x = 1; x <= all; x++) {
      w = w;
    }
    all = 0;
    Num = 1;
    cout << "数据已清空!" << endl;
}

//统计人事管理系统中的员工总数
void Staffoperation::total() {
    cout << "系统中一共有:" << all << "名职工的信息。" << endl;
}

//定义控制函数
void manage()
{
    Staffoperation per;
    int choice, k = 1;
    menu();
    cout << "请根据系统功能列表选择相应的功能(请输入选项对应的数字)" << endl;
    //password();
    while (k)
    {
      cin >> choice;
      switch (choice)
      {
      case 1:
            per.add_person();//调用增加人事档案中职员信息函数
            break;
      case 2:
            per.searchname();//调用按姓名查找职工信息函数
            break;
      case 3:
            per.searchnum();//调用按编号查找职工信息函数
            break;
      case 4:
            per.delname();//调用按姓名删除职工信息函数
            break;
      case 5:
            per.delnum();//调用按编号删除职工信息函数
            break;
      case 6:
            per.showall();//调用显示人事档案管理系统中所有职员信息的函数
            break;
      case 7:
            per.delall();//调用清空人事档案管理系统中所有数据的函数
            break;
      case 8:
            per.total();//调用输出人事档案管理系统中职员数的函数
            break;
      case 0:
            cout << endl << "即将退出人事档案管理系统,再见!" << endl << endl;
            k = 0;
            break;
      default:
            cout << "您输入的选项有错,请重新选择! ";
      }
      if (k != 0)
      {
            menu();
            cout << "请根据系统功能列表选择相应的功能(请输入选项对应的数字)" << endl;
      }
    }
}

int main()
{
    manage();

    return 0;
}

147380124 发表于 2021-6-19 22:13:10

人造人 发表于 2021-6-19 22:11


就看看按姓名查找这个功能就可以了,其他应该问题是一样的,劳烦大佬了{:10_266:}

人造人 发表于 2021-6-19 22:26:18

147380124 发表于 2021-6-19 22:13
就看看按姓名查找这个功能就可以了,其他应该问题是一样的,劳烦大佬了

给个输入样例,输入什么会出现你图片上的错误?

147380124 发表于 2021-6-19 22:28:02

人造人 发表于 2021-6-19 22:26
给个输入样例,输入什么会出现你图片上的错误?

比如说输入张三,message内的那个就会输出乱码,是烫烫烫,而查询姓名那个成员函数里面输出就不会有乱码,就是张三

人造人 发表于 2021-6-19 22:47:49

147380124 发表于 2021-6-19 22:28
比如说输入张三,message内的那个就会输出乱码,是烫烫烫,而查询姓名那个成员函数里面输出就不会有乱码 ...

先选 1 进行添加?
选了 1,然后呢?编号也选 1 ?
我要 你输入的每一步,直到出现错误

147380124 发表于 2021-6-19 22:49:55

人造人 发表于 2021-6-19 22:47
先选 1 进行添加?
选了 1,然后呢?编号也选 1 ?
我要 你输入的每一步,直到出现错误

先按1添加,然后输入编号1,姓名张三,然后在输入n退出,再选择按照姓名查询,在输入张三,然后就报错了
页: [1] 2
查看完整版本: c++友元类成员变量问题