我现在做一个公司管理系统的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;
}