公司信息管理系统,公司人员管理系统
在的第一篇博文中
系统管理的内容:工号、姓名、性别、手机号、部门、工资等。
基本功能要求:
用c面向对象编程设计了一个简单的公司员工信息管理系统,包括使用类、数组、循环体、函数调用、封装等。系统需要定义员工类别,包括工号、姓名、性别、电话号码、部门、薪资等信息。实现以下基本功能:
(1)设计菜单实现功能选择;
(2)添加功能:录入人员信息,保存在文件中;
(3)显示功能:可以显示人员信息;
(4)删除功能:输入要删除的人员编号,保存在文件中;
(5)修改功能:输入人员编号等相关信息,进行修改,保存在文件中;
(6)查询功能:可根据人数或姓名准确查询人员信息;
(7)排序功能:可将人员信息按编号升序或降序排序,并保存在文件中;
(8)统计功能:按部门统计各部门员工平均工资并输出结果;
(9)清除文档的所有信息。
软件环境:Visual Studio 2022
工程:
部门. h:
#杂注一次
#包含字符串
#包含“worker.h”
使用命名空间std
类别:公务员//行政部门
{
公共:
AD(int id,字符串名称,字符串性别,字符串电话,int dId,int salary);//构造函数
虚拟void显示();//显示员工信息子类覆盖父类中的虚函数导致多态。
虚拟字符串getDeptName();//获取部门名称
};
HRD类:公共工作者//人力资源部
{
公共:
HRD(int id,字符串名称,字符串性别,字符串电话,int dId,int salary);//构造函数
虚拟void显示();//显示员工信息
虚拟字符串getDeptName();//获取部门名称
};
FD类:公务员//财政部
{
公共:
FD(int id,字符串名称,字符串性别,字符串电话,int dId,int salary);//构造函数
虚拟void显示();//显示员工信息
虚拟字符串getDeptName();//获取部门名称
};
类别:公共工作者//技术部门
{
公共:
TD(int id,字符串名称,字符串性别,字符串电话,int dId,int salary);//构造函数
虚拟void显示();//显示员工信息
虚拟字符串getDeptName();//获取部门名称
};
类别:公共工作者//营销部门
{
公共:
MD(int id,字符串名称,字符串性别,字符串电话,int dId,int salary);//构造函数
虚拟void显示();//显示员工信息
虚拟字符串getDeptName();//获取部门名称
};
SD类:公共工作者//安全部门
{
公共:
SD(int id,字符串名称,字符串性别,字符串电话,int dId,int salary);//构造函数
虚拟void显示();//显示员工信息
虚拟字符串getDeptName();//获取部门名称
};
工人. h:
#杂注一次
#包含字符串
使用命名空间std
工人阶级
{
公共:
虚拟void display()=0;//显示员工信息
虚拟字符串getDeptName()=0;//获取部门名称
int m _ Id=0;//工号
字符串m _ Name=“”;//名称
string m _ Sex=“”;//性别
string m _ Phone=“”;//手机号码
int m _ DeptId=0;//部门:1。行政部2。人力资源部。财务部。技术部5。市场部。安全部。
int m _ Salary=0;//工资
};
WorkManager.h:
#杂注一次
#包括iostream
#包含“worker.h”
#包含“department.h”
#包括fstream
#定义文件名员工信息. txt
使用命名空间std
班级工作管理器
{
公共:
work manager();//构造函数
void Show _ Menu();//显示菜单
void exit system();//0.退出系统。
int m _ EmpNum//记录员工人数
工人* * m _ EmpArray//雇员数组指针
void Add _ Emp();//1.添加员工
void save();//保存文件,将员工信息写入文件。
bool m _ FileIsEmpty//确定文件是否为空标志。
int get _ EmpNum();//统计文件中的人数
void init_Emp()。//初始化雇员,读取文件中的雇员信息。
void Show _ Emp();//2.显示员工
void Del _ Emp();//3.删除员工
int is exist(int id);//确定该员工是否存在。如果有返回员工的位置,则没有返回-1。
void Mod _ Emp();//4.修改员工
void Find _ Emp();//5.查找员工
void Sort _ Emp();//6.按照编号排序
void add();//7.统计工资
void Clean _ File();//8.清空文件
~工作管理器();//析构函数
};
department.cpp:
#define _CRT_SECURE_NO_WARINGS 1
#包括输入输出流
#包含"部门. h "
AD:AD(int id,字符串名称,字符串性别,字符串电话,int dId,int salary)
{
this-m _ Id=Id;
this-m _ Name=Name;
this-m _ Sex=Sex;
this-m _ Phone=Phone;
this-m _ DeptId=dId;
this- m_Salary=薪水;
}
void AD:display()
{
cout 工号: this- m_Id
\t姓名: this- m_Name
\t性别:这个- m_Sex
\t手机号码:这是手机
\t科室: this- getDeptName()
\t工资: this-m _ Salary endl;
}
string AD:getDeptName()
{
返回字符串(行政部);
}
HRD:HRD(int id,字符串名称,字符串性别,字符串电话,int dId,int salary)
{
this-m _ Id=Id;
this-m _ Name=Name;
this-m _ Sex=Sex;
this-m _ Phone=Phone;
this-m _ DeptId=dId;
this- m_Salary=薪水;
}
void HRD:display()
{
cout 工号: this- m_Id
\t姓名: this- m_Name
\t性别:这个- m_Sex
\t手机号码:这是手机
\t科室: this- getDeptName()
\t工资: this-m _ Salary endl;
}
字符串HRD:getDeptName()
{
返回字符串(人力资源部);
}
FD:FD(int id,字符串名称,字符串性别,字符串电话,int dId,int salary)
{
this-m _ Id=Id;
this-m _ Name=Name;
this-m _ Sex=Sex;
this-m _ Phone=Phone;
this-m _ DeptId=dId;
this- m_Salary=薪水;
}
void FD:display()
{
cout 工号: this- m_Id
\t姓名: this- m_Name
\t性别:这个- m_Sex
\t手机号码:这是手机
\t科室: this- getDeptName()
\t工资: this-m _ Salary endl;
}
字符串FD:getDeptName()
{
返回字符串(财务部);
}
TD:TD(int id,字符串名称,字符串性别,字符串电话,int dId,int salary)
{
this-m _ Id=Id;
this-m _ Name=Name;
this-m _ Sex=Sex;
this-m _ Phone=Phone;
this-m _ DeptId=dId;
this- m_Salary=薪水;
}
void TD:display()
{
cout 工号: this- m_Id
\t姓名: this- m_Name
\t性别:这个- m_Sex
\t手机号码:这是手机
\t科室: this- getDeptName()
\t工资: this-m _ Salary endl;
}
字符串TD:getDeptName()
{
返回字符串(技术部);
}
MD:MD(int id,字符串名称,字符串性别,字符串电话,int dId,int salary)
{
this-m _ Id=Id;
this-m _ Name=Name;
this-m _ Sex=Sex;
this-m _ Phone=Phone;
this-m _ DeptId=dId;
this- m_Salary=薪水;
}
void MD:display()
{
cout 工号: this- m_Id
\t姓名: this- m_Name
\t性别:这个- m_Sex
\t手机号码:这是手机
\t科室: this- getDeptName()
\t工资: this-m _ Salary endl;
}
string MD:getDeptName()
{
返回字符串(市场部);
}
SD:SD(int id,字符串名称,字符串性别,字符串电话,int dId,int salary)
{
this-m _ Id=Id;
this-m _ Name=Name;
this-m _ Sex=Sex;
this-m _ Phone=Phone;
this-m _ DeptId=dId;
this- m_Salary=薪水;
}
void SD:display()
{
cout 工号: this- m_Id
\t姓名: this- m_Name
\t性别:这个- m_Sex
\t手机号码:这是手机
\t科室: this- getDeptName()
\t工资: this-m _ Salary endl;
}
字符串SD:getDeptName()
{
返回字符串(安全部);
}
main.cpp:
#define _CRT_SECURE_NO_WARINGS 1
#包括输入输出流
#包含"工作管理器. h "
#包含"部门. h "
使用命名空间标准
int main()
{
工作管理器WM;//实例化管理者对象
int choice=0;//用来存储用户的选项
而(真)
{
wm .show _ Menu();//用于展示菜单成员函数
cout 请输入你的选择: endl
宫颈癌前病变的选择;//接受用户的选项
开关(选择)
{
案例0: //退出系统
wm .退出系统();
打破;
案例1: //增加员工
wm .add _ Emp();
打破;
案例二://显示员工
wm .show _ Emp();
打破;
案例3: //删除员工
wm .del _ Emp();
打破;
案例4: //修改员工
wm .mod _ Emp();
打破;
案例5: //查找员工
wm .find _ Emp();
打破;
案例6: //排序员工
wm .sort _ Emp();
打破;
案例7: //统计工资
WM。add();
打破;
案例8: //清空文档
wm .clean _ File();
打破;
默认值:
系统(“cls”);//清屏
打破;
}
}
系统("暂停");
返回0;
}
WorkManager.cpp:
#define _CRT_SECURE_NO_WARINGS 1
#包含"工作管理器. h "
#包括输入输出流
工作管理器:工作管理器()
{
ifstream ifs
ifs.open(文件名,IOs:in);//读文件
//1.文件不存在
如果(!ifs.is_open())
{
//初始化属性
this-m _ EMP num=0;//初始化记录员工数
this-m _ EmpArray=NULL;//初始化数组指针
this-m _ file is empty=true;//初始化文件是否为空
如果。close();
返回;
}
//2.文件存在数据为空
char ch
ifs ch
if (ifs.eof())
{
this-m _ EMP num=0;//初始化记录人数
this-m _ EmpArray=NULL;//初始化数组指针
this-m _ file is empty=true;//初始化文件是否为空
如果。close();
返回;
}
//3.文件存在,并且记录数据
int num=this-get _ EmpNum();
this-m _ EMP num=num;
//开辟空间
this- m_EmpArray=新工人*[this-m _ EMP num];
//将文件中的数据存到数组中
this-init _ Emp();
}
void WorkManager:Show_Menu()
{
cout * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * endl;
cout * * * * * * * * * * * * * * *欢迎使用员工管理系统!* * * * * * * * * * * " endl
cout * * * * * * * * * * * * * * * * * * 0 .退出管理程序* * * * * * * * * * * * * * endl
cout * * * * * * * * * * * * * * * * * * 1 .增加员工信息* * * * * * * * * * * * * * endl
cout * * * * * * * * * * * * * * * * * * 2 .显示员工信息* * * * * * * * * * * * * * endl
cout * * * * * * * * * * * * * * * * * * 3 .删除员工信息* * * * * * * * * * * * * * endl
cout * * * * * * * * * * * * * * * * * * 4 .修改员工信息* * * * * * * * * * * * * * endl
cout * * * * * * * * * * * * * * * * * * 5 .查找员工信息* * * * * * * * * * * * * * endl
cout * * * * * * * * * * * * * * * * * .按照编号排序* * * * * * * * * * * * * * endl
cout * * * * * * * * * * * * * * * .统计科室平均工资* * * * * * * * * * * " endl
cout * * * * * * * * * * * * * * * * * * 8 .清空所有文档* * * * * * * * * * * * * * endl
cout * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * endl;
cout结束
}
void WorkManager:ExitSystem()
{
cout 欢迎下次使用!恩德尔
系统("暂停");
退出(0);//退出系统
}
void WorkManager:Add_Emp()
{
cout 请输入增加员工数量: endl
int addNum=0;//保存用户的输入数量
宫颈癌前病变阿德纳姆;
if (addNum 0)//添加
{
//计算新空间大小
int newSize=this-m _ EmpNum addNum;//新空间订单数=原来记录订单数新增订单数
//开辟新空间
Worker * * newSpace=new Worker *[newSize];
//将原来空间下数据拷贝到新空间下
如果(这- m_EmpArray!=空)
for(int I=0;我这-m _ EMP num;我)
new space[I]=this-m _ EmpArray[I];
//批量添加新数据
for(int I=0;我addNum我)
{
进程号
字符串名称;
弦性;
串音电话;
int dSelect//员工科室
(同Internationalorganizations)国际组织薪金;
cout 请输入第我1 个员工编号: endl
宫颈癌前病变身份证;
cout 请输入第我1 个员工姓名: endl
宫颈癌前病变名字;
cout 请输入第我1 个员工性别: endl
宫颈癌前病变性爱;
cout 请输入第我1 个员工手机号码: endl
宫颈癌前病变电话;
cout 请输入第我1 个员工科室: endl
cout 1 .行政部恩德尔
cout 2 .人力资源部恩德尔
cout 3 .财务部恩德尔
cout 4 .技术部恩德尔
cout 5 .市场部恩德尔
1966年的cout .安全部恩德尔
CIN dSelect;
cout 请输入第我1 个员工工资: endl
宫颈癌前病变工资;
Worker * worker=NULL//由于有不同的员工,所以指针设置为空,用来指向不同的员工
开关(数字选择)
{
案例1:
工人=新广告(id,姓名,性别,电话,dSelect,工资);
打破;
案例二:
工人=新的HRD(id,姓名、性别、电话、dSelect、薪金);
打破;
案例三:
工人=新FD(id,姓名,性别,电话,dSelect,薪金);
打破;
案例4:
工人=新TD(id,姓名,性别,电话,dSelect,薪水);
打破;
案例5:
工人=新MD(id,姓名,性别,电话,dSelect,薪水);
打破;
案例6:
工人=新SD(id,姓名,性别,电话,dSelect,薪金);
打破;
默认值:
打破;
}
//将创建的新员工信息保存到数组中
new space[this-m _ EMP num I]=worker;
}
//释放原有空间因为是指针所以别忘记加【】
delete[]this-m _ EmpArray;
//更改新空间的指向
this-m _ EmpArray=新闻空间;
//更改新的订单数
this-m _ EMP num=新大小;
//提示添加成功
cout 成功添加 addNum 个员工!恩德尔
//更新员工不为空的标志
this-m _ file is empty=false;
//保存数据到文件中
this-save();
}
else cout 输入数据有误!恩德尔
//按任意键后清屏回到上级目录
系统("暂停");
系统(“cls”);
}
void WorkManager:save()
{
ofstream ofs
ofs.open(文件名,IOs:out);//用输出的方式打开文件——写文件
for(int I=0;我这-m _ EMP num;我)
{
ofs this-m _ EmpArray[I]-m _ Id " ";
ofs this-m _ EmpArray[I]-m _ Name " ";
ofs this-m _ EmpArray[I]-m _ Sex " ";
ofs this-m _ EmpArray[I]-m _ Phone " ";
ofs this-m _ EmpArray[I]-m _ DeptId " ";
ofs this-m _ EmpArray[I]-m _ Salary endl;
}
}
int WorkManager:get_EmpNum()
{
ifstream ifs
ifs.open(文件名,IOs:in);
进程号
字符串名称;
弦性;
串音电话;
(同Internationalorganizations)国际组织做到了;
(同Internationalorganizations)国际组织薪金;
int num=0;//统计人数变量
而(如果id如果名字如果性别
可安装文件系统电话如果做了如果工资)
{
数字
}
退货数量;
}
void WorkManager:init_Emp()
{
ifstream ifs
ifs.open(文件名,IOs:in);
进程号
字符串名称;
弦性;
串音电话;
(同Internationalorganizations)国际组织做到了;
(同Internationalorganizations)国际组织薪金;
int index=0;
而(如果id如果名字如果性别
可安装文件系统电话如果做了如果工资)
{
工人*工人=空
if (dId==1)//行政部
工人=新广告(id,姓名,性别,电话,做了,工资);
else if (dId==2)//人力资源部
工人=新HRD(id,姓名、性别、电话、做了、工资);
else if (dId==3)//财务部
工人=新FD(id,姓名,性别,电话,做了,工资);
else if (dId==4)//技术部
工人=新TD(id,姓名,性别,电话,做了,工资);
else if (dId==5)//市场部
工人=新MD(id,姓名,性别,电话,做了,工资);
else if (dId==6)//安全部
工人=新SD(id,姓名,性别,电话,做了,工资);
this-m _ EmpArray[index]=worker;
指数;
}
如果。close();
}
void WorkManager:Show_Emp()
{
if (this- m_FileIsEmpty)//判断文件是否为空
cout 文件不存在或记录为空!恩德尔
否则{
for(int I=0;我这-m _ EMP num;i ) {
this-m _ EmpArray[I]-display();//利用多态调用程序接口
}
}
//按任意键后清屏
系统("暂停");
系统(“cls”);
}
void WorkManager:Del_Emp()
{
if (this- m_FileIsEmpty)
cout 文件不存在或记录为空恩德尔
其他
{
//按照工号删除
cout 请输入想要删除员工的编号: endl
int id=0;
宫颈癌前病变身份证;
int index=this-is exist(id);
如果(索引!=-1)//说明员工存在,并且要删除指数位置上的员工
{
for(int I=index;我这-m _ EMP num;我)
{
//数据前移
this-m _ EmpArray[I]=this-m _ EmpArray[I 1];
}
this-m _ EmpNum-;//更新数组中记录的员工个数
this-save();//数据同步更新到文件中
cout 员工id 号删除成功!恩德尔
}
其他
{
cout 删除失败,该员工不存在!恩德尔
}
}
系统("暂停");
系统(“cls”);
}
int WorkManager:IsExist(int id)
{
int index=-1;
for(int I=0;我这-m _ EMP num;我)
{
if (this- m_EmpArray[i]- m_Id==id)
{
index=I;//找到员工
打破;
}
}
回报指数;
}
void WorkManager:Mod_Emp()
{
if (this- m_FileIsEmpty)
{
cout 文件不存在或记录为空恩德尔
}
其他
{
cout 请输入修改员工的编号: endl
进程号
宫颈癌前病变身份证;
int ret=this-is exist(id);
如果(ret!=-1)
{
//查找到员工的编号
删除this-m _ EmpArray[ret];
int newid=0;
string newname=
string newsex=
string new phone=
int new dselect=0;//员工科室
int new salary=0;
cout 请输入新的员工编号: endl
宫颈癌前病变纽德;
cout 请输入新的员工姓名: endl
宫颈癌前病变新名字;
cout 请输入新的员工性别: endl
宫颈癌前病变新闻通讯社;
cout 请输入新的员工手机号码: endl
宫颈癌前病变新电话;
cout 请输入新的员工科室: endl
cout 1 .行政部恩德尔
cout 2 .人力资源部恩德尔
cout 3 .财务部恩德尔
cout 4 .技术部恩德尔
cout 5 .市场部恩德尔
1966年的cout .安全部恩德尔
宫颈癌前病变纽泽西;
cout 请输入新的员工工资: endl
宫颈癌前病变新闻;
Worker * worker=NULL//由于有不同的员工,所以指针设置为空,用来指向不同的员工
开关(新选择)
{
案例1:
worker=new AD(newid,newname,newsex,newphone,newdSelect,newsalary);
打破;
案例二:
worker=new HRD(newid,newname,newsex,newphone,newdSelect,new salary);
打破;
案例三:
worker=new FD(newid,newname,newsex,newphone,newdSelect,new salary);
打破;
案例4:
worker=new TD(newid,newname,newsex,newphone,newdSelect,newsalary);
打破;
案例5:
worker=new MD(newid,newname,newsex,newphone,newdSelect,newsalary);
打破;
案例6:
worker=new SD(newid,newname,newsex,newphone,newdSelect,newsalary);
打破;
默认值:
打破;
}
//更新数据到数组中
this-m _ EmpArray[ret]=worker;
cout 修改成功!恩德尔
//保存到文件中
this-save();
}
其他
cout 修改失败,该员工不存在!恩德尔
}
系统("暂停");
系统(“cls”);
}
void WorkManager:Find_Emp()
{
if (this- m_FileIsEmpty)
{
cout 文件不存在或记录为空恩德尔
}
其他
{
cout 请输入查找的方式: endl
cout 1 .按员工编号查找恩德尔
cout 2 .按员工姓名查找恩德尔
int select=0;
宫颈癌前病变精选;
if (select==1)
{
//按员工编号查找
进程号
cout 请输入查找的员工编号: endl
宫颈癌前病变身份证;
int ret=this-is exist(id);
如果(ret!=-1)
{
//找到员工
cout 查找成功!该员工信息如下: endl
this-m _ EmpArray[ret]-display();
}
其他
{
cout 查找失败!恩德尔
}
}
else if (select==2)
{
//按员工姓名查找
字符串名称;
cout 请输入查找的姓名: endl
宫颈癌前病变名字;
//加入判断是否查到的标志
bool flag=false//默认未找到订单
for(int I=0;我这-m _ EMP num;我)
{
if(this-m _ EmpArray[I]-m _ Name==Name)
{
cout 查找成功!员工编号为: this- m_EmpArray[i]- m_Id
号员工信息如下: endl
标志=真
//调用显示信息接口
this-m _ EmpArray[I]-display();
}
}
if (flag==false)
{
cout 查找失败,该员工不存在!恩德尔
}
}
其他
{
cout 输入的选项有误!恩德尔
}
}
系统("暂停");
系统(“cls”);
}
void WorkManager:Sort_Emp()
{
if (this- m_FileIsEmpty)
{
cout 文件不存在或记录为空恩德尔
系统("暂停");
系统(“cls”);
}
其他
{
cout 请选择排序方式: endl
cout 1 .按订单号进行升序恩德尔
cout 2 .按订单号进行降序恩德尔
int select=0;
宫颈癌前病变精选;
//选择排序
if (select==1 select==2)
{
for(int I=0;我这-m _ EMP num;我)
{
int minor max=I;//声明最大值或最小值下标
for(int j=I 1;j this-m _ EmpNum;j)
{
if (select==1)//升序
{
if(this-m _ EmpArray[minor max]-m _ Id this-m _ EmpArray[j]-m _ Id)
{
minor max=j;
}
}
else if (select==2)//降序
{
if(this-m _ EmpArray[minor max]-m _ Id this-m _ EmpArray[j]-m _ Id)
{
minor max=j;
}
}
}
//判断一开始认定的最大值或最小值是不是计算的最大值或最小值,如果不是,交换数据
如果(我!=minOrmax)
{
worker * temp=this-m _ EmpArray[I];
this-m _ EmpArray[I]=this-m _ EmpArray[minor max];
this-m _ EmpArray[minor max]=temp;
}
}
}
其他
{
cout 输入有误!恩德尔
系统("暂停");
系统(“cls”);
返回;
}
this-save();//将排序后的结果保存到文件中
cout 排序成功!排序后的结果为: endl
this-Show _ Emp();//展示所有订单
}
}
void WorkManager:add()
{
if (this- m_FileIsEmpty)
{
cout 文件不存在或记录为空恩德尔
}
其他
{
cout 请输入科室: endl
cout 1 .行政部恩德尔
cout 2 .人力资源部恩德尔
cout 3 .财务部恩德尔
cout 4 .技术部恩德尔
cout 5 .市场部恩德尔
1966年的cout .安全部恩德尔
int dId=0;
宫颈癌前病变做到了;
int sum=0;//记录科室总工资
int n=0;//记录科室员工人数
int mean _ salary=0;
for(int I=0;我这-m _ EMP num;我)
{
if(this-m _ EmpArray[I]-m _ DeptId==dId)
{
sum=this-m _ EmpArray[I]-m _ Salary;
n;
}
}
均值_薪资=总和/n;
cout 该科室员工的平均工资:平均工资结束
}
系统("暂停");
系统(“cls”);
}
void WorkManager:Clean_File()
{
cout 是否确认清空?确认操作后所有数据将会丢失!恩德尔
cout 1 .确任恩德尔
cout 2 .取消恩德尔
int select=0;
宫颈癌前病变精选;
if (select==1)//清空文件
{
ofstream ofs(文件名,IOs:trunc);//删除文件后重建
ofs。close();
如果(这- m_EmpArray!=空)
{
//清空堆区的每个订单对象
for(int I=0;我这-m _ EMP num;我)
{
删除this-m _ EmpArray[I];
this-m _ EmpArray[I]=NULL;
}
//清空堆区数组指针
delete[]this-m _ EmpArray;
this-m _ EmpArray=NULL;
this-m _ EMP num=0;
this-m _ file is empty=true;
}
cout 清空成功!恩德尔
}
系统("暂停");
系统(“cls”);
}
工作管理器:~工作管理器()
{
如果(这- m_EmpArray!=空)
{
for(int I=0;我这-m _ EMP num;我)
{
if (this- m_EmpArray[i]!=空)
{
删除this-m _ EmpArray[I];//清空数据
}
}
delete[]this-m _ EmpArray;//清空指针
this-m _ EmpArray=NULL;
}
}
郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。