AAAA种地小黄 2023-05-28 17:44 采纳率: 75%
浏览 6

公司管理系统以及重组文件

我现在做一个公司管理系统的work
设计一个系统,利用文件处理方式实现对公司人员(包括工程师、领导和主任工程师)进行管理,
具有增加数据、更新数据、查询数据、删除数据以及重组文件的功能。
【设计提示】设计一个虚基类Staff(员工),包含编号、姓名和年龄保护数据成员以及相关的成员函数;
由Staff派生出工程师类Engineer,包含专业和职称保护数据成员以及相关的成员函数;
由Staff派生出领导类Leader,包含职务和部门保护数据成员以及相关成员函数;
然后由Engineer和Leader类派生出主任工程师类
但不知道为什么第一个功能函数增加数据的可以打开我的engineer文件,但我写第二个的时候却打不开,然后报错。求解惑

#include <iostream>
#include <fstream>
#include <stdlib.h>
#include <string.h>
using namespace std;

class Staff//员工类
{
protected:
    int number;
    string name;
    int age;
public:
    Staff(int Number,string Name,int Age):number(Number),name(Name),age(Age)
    {

    }
    void print()
    {
        cout<<"staff: number:"<<number<<" name:"<<name<<" age:"<<age<<endl;
    }
    friend void add();


};
class Engineer:virtual public Staff//工程师类
{
protected:
    string major;//专业
    string title;//职称
public:
    Engineer(int Number,string Name,int Age,string Major,string Title):Staff(Number,Name,Age),major(Major),title(Title)
    {

    }
    void print()
    {
        cout<<"Engineer: number:"<<number<<" name:"<<name<<" age:"<<age<<" major:"<<major<<" title:"<<title<<endl;
    }
    friend void add();

};
class Leader:virtual public Staff//领导类
{
protected:
    string post;//职务
    string dept;//部门
public:
    Leader(int Number,string Name,int Age,string Post,string Dept):Staff(Number,Name,Age),post(Post),dept(Dept)
    {

    }
    void print()
    {
        cout<<"Leader: number:"<<number<<" name:"<<name<<" age:"<<age<<" post:"<<post<<" dept:"<<dept<<endl;
    }
    friend void add();



};
class Chairman:public Engineer,public Leader//主任工程师类
{
public:
     Chairman(int Number,string Name,int Age,string Major,string Title,string Post,string Dept):Staff(Number,Name,Age),Engineer(Number,Name,Age,Major,Title), Leader(Number,Name,Age,Post,Dept)
     {

     }
     void print()
     {
          cout<<"Engineer: number:"<<number<<" name:"<<name<<" age:"<<age<<" major:"<<major<<" title:"<<title;
          cout<<" post:"<<post<<" dept:"<<dept<<endl;
     }
     friend void add();

};
void add()//增加数据成员
{
    fstream file,file1,file2;
    cout<<"增加工程师数据按 1"<<endl;
    cout<<"增加领导数据按 2"<<endl;
    cout<<"增加主任工程师数据按 3"<<endl;
    cout<<"返回按 0"<<endl;
    int choice;
    cin>>choice;
    if(choice==1)//更新工程师
    {
        file.open("C:\\Users\\86138\\Desktop\\test\\engineer",ios::out|ios::app);
        if(!file)
        {
             cout<<"engineer.txt 不存在"<<endl;
             abort();
        }
        int num,age;
        string name,major,title;
        cout<<"请按该格式输入编号 姓名 年龄 专业 职称 "<<endl;
        cin>>num>>name>>age>>major>>title;
        Engineer s(num,name,age,major,title);
        s.print();
        cout<<"增加成功"<<endl;
        file<<"编号:"<<s.number<<" 姓名:"<<s.name<<" 年龄:"<<s.age<<" 专业:"<<s.major<<" 职称:"<<s.title<<endl;
        file.close();

    }
    if(choice==2)//增加领导
    {
        file.open("C:\\Users\\86138\\Desktop\\test\\leader",ios::out|ios::app);
        if(!file1)
        {
             cout<<"leader.txt 不存在"<<endl;
             abort();
        }
        int num,age;
        string name,post,dept;
        cout<<"请按该格式输入编号 姓名 年龄 职务 部门 "<<endl;
        cin>>num>>name>>age>>post>>dept;
        Leader s(num,name,age,post,dept);
        s.print();
        cout<<"增加成功"<<endl;
        file1<<"编号:"<<s.number<<" 姓名:"<<s.name<<" 年龄:"<<s.age<<" 职务:"<<s.post<<" 部门:"<<s.dept<<endl;
        file1.close();

    }
      if(choice==3)//增加领导
    {
        file.open("C:\\Users\\86138\\Desktop\\test\\chairman",ios::out|ios::app);
        if(!file2)
        {
             cout<<"chairman.txt 不存在"<<endl;
             abort();
        }
        int num,age;
        string name,post,dept,major,title;
        cout<<"请按该格式输入编号 姓名 年龄 专业 职称 职务 部门 "<<endl;
        cin>>num>>name>>age>>post>>dept;
        Chairman s(num,name,age,major,title,post,dept);
        s.print();
        cout<<"增加成功"<<endl;
        file2<<"编号:"<<s.number<<" 姓名:"<<s.name<<" 年龄:"<<s.age<<" 专业:"<<s.major<<" 职称:"<<s.title<<" 职务:"<<s.post<<" 部门:"<<s.dept<<endl;
        file2.close();

    }
    if(choice==0)
        cout<<"已返回"<<endl;

}

void lookfor()//查询函数,有大问题
{
    char no[10];
    cout<<"请输入编号:";
    cin>>no;
    fstream file,file2,file3;
    int flag=0,l,len;
    char t,s[100];
    l=strlen(no);
    file.open("C:\\Users\\86138\\Desktop\\test\\engineer.txt",ios::in);
    if(!file)
    {
        cout<<"engineer.txt 不存在"<<endl;
        abort();
    }
    while(!file.eof())//file.eof(),判断是否到了文件结尾
    {
        s[0]='\0';
        file.getline(s,100);             //读取文本,逐行读取
        t=s[l];
        s[l]='\0';
        if(strcmp(s,no)==0)//strcmp()比较两个字符串的长度,二者相等则为0
        {
            s[l]=t;
            len=strlen(s);
            int i,j=0;
            for(i=0;i<5;i++)
            {
                if(i==0)
                {
                    cout<<"编号:";
                }
                else if(i==1)
                {
                    cout<<"姓名:";
                }
                else if(i==2)
                {
                    cout<<"年龄:";
                }
                else if(i==3)
                {
                    cout<<"专业:";
                }
                else if(i==4)
                {
                    cout<<"职称:";
                }
                while(s[j]!=' '&&j<len)
                {
                    cout<<s[j];
                    j++;
                }
                cout<<endl;
                while(s[j]==' '&&j<len)
                {
                    j++;
                }
            }
            cout<<s<<endl;
            flag=1;//flag充当计数,一旦从当前文件中找到即1,结束循环
            break;
        }
    }
    file.close();
    if(flag==0)
    {
        file2.open("C:\\Users\\86138\\Desktop\\test\\leader",ios::in);
        if(!file2)
        {
            cout<<"leader.txt 不存在"<<endl;
            abort();
        }
        while(!file2.eof())
        {
            s[0]='\0';
            file2.getline(s,100);
            t=s[l];
            s[l]='\0';
            if(strcmp(s,no)==0)
            {
                s[l]=t;
                len=strlen(s);
                int i,j=0;
                for(i=0;i<5;i++)
                {
                    if(i==0)
                    {
                        cout<<"员工号:";
                    }
                    else if(i==1)
                    {
                        cout<<"姓名:";
                    }
                    else if(i==2)
                    {
                        cout<<"年龄:";
                    }
                    else if(i==3)
                    {
                        cout<<"职务:";
                    }
                    else if(i==4)
                    {
                        cout<<"部门:";
                    }
                    while(s[j]!=' '&&j<len)
                    {
                        cout<<s[j];
                        j++;
                    }
                    cout<<endl;
                    while(s[j]==' '&&j<len)
                    {
                        j++;
                    }
                }
                cout<<s<<endl;
                flag=1;
                break;
            }
        }
        file2.close();
    }
    if(flag==0)
    {
        file3.open("C:\\Users\\86138\\Desktop\\test\\chairman",ios::in);
        if(!file3)
        {
            cout<<"chairman.txt 不存在"<<endl;
            abort();
        }
        while(!file3.eof())
        {
            s[0]='\0';
            file3.getline(s,100);
            t=s[l];
            s[l]='\0';
            if(strcmp(s,no)==0)
            {
                s[l]=t;
                len=strlen(s);
                cout<<s<<endl;
                int i,j=0;
                for(i=0;i<7;i++)
                {
                    if(i==0)
                    {
                        cout<<"员工号:";
                    }
                    else if(i==1)
                    {
                        cout<<"姓名:";
                    }
                    else if(i==2)
                    {
                        cout<<"年龄:";
                    }
                    else if(i==3)
                    {
                        cout<<"专业:";
                    }
                    else if(i==4)
                    {
                        cout<<"职称:";
                    }
                    else if(i==5)
                    {
                        cout<<"职务:";
                    }
                    else if(i==6)
                    {
                        cout<<"部门:";
                    }
                    while(s[j]!=' '&&j<len)
                    {
                        cout<<s[j];
                        j++;
                    }
                    cout<<endl;
                    while(s[j]==' '&&j<len)
                    {
                        j++;
                    }
                }
                cout<<s<<endl;
                flag=1;
                break;
            }
        }
        file3.close();
    }
    if(flag==0)
    {
        cout<<"未找到该记录"<<endl;//三个文件中均未找到
    }
}




int main()
{
    fstream file,file1,file2;
    cout<<"*********菜单*********"<<endl;
    cout<<"  增加成员数据请按 1"<<endl;
    cout<<"  更新成员数据请按 2"<<endl;
    cout<<"  查询成员数据请按 3"<<endl;
    cout<<"  删除成员数据请按 4"<<endl;
    cout<<"  结束请按 0"<<endl;
    cout<<"  请输入选项:";
    int a;
    while(cin>>a)
    {
        if(a==1)
        {
            add();
        }

        if(a==2)
        {
            update();

        }
        if(a==3)
        {
            lookfor();
        }
        if(a==4)
        {

        }
        if(a==0)
        {
            cout<<"已结束"<<endl;
            break;
        }

    }
    return 0;

}


  • 写回答

1条回答 默认 最新

  • CSDN-Ada助手 CSDN-AI 官方账号 2023-05-28 21:54
    关注
    • 这篇博客: 我的前端成长之路-写给在迷茫路上的人中的 我是一名毕业于江西城市学院软件技术专业的一名编程人员,从2013年毕业到现在已经有将近7年的工作经验,有一个新手慢慢成长为一个经验丰富的编程者,也从初级工程师慢慢变成以前前端负责人,我这几年的职业生涯里,在外包公司待过,也在创业公司里奋斗过,也在电子厂迷茫过,回想这7年的工作生涯,我一路成长,渐渐的学到了很多,也用自己的技术帮助很多人,现在在这家公司组建了自己的团队,为公司,为各个产品线提供各种各样的前端支持和开发,我和我的团队一起克服种种困难,由稚嫩变成熟,逐渐形成我们自己的前端文化,我相信未来更好!我把我的经历分为四个时期,迷茫期、学习期、沉淀期、发展期。 部分也许能够解决你的问题, 你可以仔细阅读以下内容或跳转源博客中阅读:
      • 以下回答由chatgpt基于相关博客总结生成:

        我可以看到你提到了一个具体的问题,但是在你的参考资料中并没有任何与解决这个问题相关的信息。因此,我不能给出具体的解决方案。建议提供更多与问题相关的信息和代码,以便我和其他IT专家可以更好地帮助你解决这个问题。

    评论

    报告相同问题?

    问题事件

    • 创建了问题 5月28日

    悬赏问题

    • ¥15 matlab有svec这个函数吗?
    • ¥15 无法调用VideoWriter_fourcc
    • ¥15 VB6.0无法加载网页验证码图片到picturebox中,求解。
    • ¥15 C#和GDAL对栅格处理
    • ¥15 我现在有一些关于提升机故障的专有文本数据,量也不多,我在label studio上进行了关系和实体的标注,完成了知识图谱的构造,那么我使用生成式模型的话,我能做哪些工作来写我的论文?
    • ¥15 电脑连不上无线网络如下诊断反馈应该如何操作
    • ¥15 telegram api 使用forward_messages方法转发消息时,目标群组里面会出现此消息来源,如何隐藏?
    • ¥15 关于#tensorflow#的问题:有没有什么方法可以让机器自己学会像素风格的图片
    • ¥15 Oracle触发器字段变化时插入指定值
    • ¥15 docker无法进入容器内部