求C++课程设计题答案啊~~急。。。
C++语言课程设计题目设计题目:1、职工信息表设计要求:设计要求实现如下功能:(1)建立职工信息数据,包括职工编号、姓名、性别、工资、出生时间、参加工作时间和年龄(必须计...
C++语言课程设计题目
设计题目:1、职工信息表
设计要求:
设计要求实现如下功能:
(1)建立职工信息数据,包括职工编号、姓名、性别、工资、出生时间、参加工作时间和年龄(必须计算得到)。
(2)根据职工信息表,建立只含有姓名和年龄的职工信息简表。(可选功能)
(3)使用继承的方法构造3个类,(即雇员类——虚基类,教师类和工人类——派生类)使用相应的对象放置10个职工信息。
(4)编写同名display()成员函数,用来输出数组的内容。
(5)按不同类别输出职工信息,比如按系输出教师信息。(可选功能)
(6)要求对“<<”和“>>”运算符进行重载。考虑到输人职工编号时,也会因不小心引人空格,而且名字中也需要有空格,所以重载“>>’’运算符时,需要满足这个要求。
(7)检索(查找)指定信息。(如按姓名检索)
(8)参考界面如下:
*****************************
职工信息管理
*****************************
*增加一位教师记录
*增加一位工人记录
*显示全部职工记录
*删除一个教师
*删除一个工人
*按系输出教师信息(可选)
*按姓名检索所有信息
*结束程序运行
题目如上,求答案答案啊,最后能写的简单点,要能运行的出来的,我也写了半天,就是运行不出来啊,我的课程设计报告还要程序截图了,没办法啊~~希望哪位高手帮下忙哈。。。。感激感激不胜感激啊,我急~~~ 展开
设计题目:1、职工信息表
设计要求:
设计要求实现如下功能:
(1)建立职工信息数据,包括职工编号、姓名、性别、工资、出生时间、参加工作时间和年龄(必须计算得到)。
(2)根据职工信息表,建立只含有姓名和年龄的职工信息简表。(可选功能)
(3)使用继承的方法构造3个类,(即雇员类——虚基类,教师类和工人类——派生类)使用相应的对象放置10个职工信息。
(4)编写同名display()成员函数,用来输出数组的内容。
(5)按不同类别输出职工信息,比如按系输出教师信息。(可选功能)
(6)要求对“<<”和“>>”运算符进行重载。考虑到输人职工编号时,也会因不小心引人空格,而且名字中也需要有空格,所以重载“>>’’运算符时,需要满足这个要求。
(7)检索(查找)指定信息。(如按姓名检索)
(8)参考界面如下:
*****************************
职工信息管理
*****************************
*增加一位教师记录
*增加一位工人记录
*显示全部职工记录
*删除一个教师
*删除一个工人
*按系输出教师信息(可选)
*按姓名检索所有信息
*结束程序运行
题目如上,求答案答案啊,最后能写的简单点,要能运行的出来的,我也写了半天,就是运行不出来啊,我的课程设计报告还要程序截图了,没办法啊~~希望哪位高手帮下忙哈。。。。感激感激不胜感激啊,我急~~~ 展开
2个回答
展开全部
#include <fstream.h> 文件操作头文件
#include <string.h> 字符串流
class Person //人员类(抽象类)
{
protected:
double num; //编号
char Name[20]; //姓名
int Duty; //人员类别标志(1-教师,2-实验员,3-行政人员,4-教师兼实验员,5-行政兼教师)
double Salary; //基本工资
Person *next; //指针域
public:
Person() //基类构造
{
next=0; //指针域设置为空
}
virtual ~Person() //基类虚析构
{
}
virtual void Input()=0; //从键盘输入数据
virtual void Input(ifstream& ifs)=0; //从文件输入数据
virtual void Output()=0; //向屏幕输出数据
virtual void Output(ofstream& ofs)=0; //向文件输出数据
virtual double Incoming()=0; //计算收入
friend class College;
};
class Teacher:virtual public Person //教师类
{
protected:
int Hours; //教师课时
public:
//为对象设置数据分为两种途径,通过1)构造函数,2)一般成员函数
//分开可以使得程序中应用更加灵活
//本程序采用:缺省构造+Input()
Teacher() //构造函数,初始化部分数据
{
Duty=1;
Salary=800;
}
void Input() //键盘补充输入其它数据
{
cout<<"\n编号:"; cin>>num;
cout<<"\n姓名:"; cin>>Name;
cout<<"\n教师上学期课时:"; cin>>Hours;
Salary=Incoming();
}
void Input(ifstream& ifs)
{
ifs>>num>>Name>>Duty>>Hours>>Salary;
}
void Output()
{
cout<<num<<"\t"<<Name<<"\t"<<Duty<<"\t"<<Hours<<"\t"<<Salary<<"\t"<<endl;
}
void Output(ofstream& ofs)
{
ofs<<num<<"\t"<<Name<<"\t"<<Duty<<"\t"<<Hours<<"\t"<<Salary<<"\t"<<endl;
}
double Incoming()
{
if(Hours>120)
return Salary+(Hours-120)*20;
else
return Salary;
}
};
class Assistant:virtual public Person //实验员
{
protected:
int Allowance;
int Hours;
public:
Assistant()
{
Duty=2;
Salary=650;
Allowance=150;
}
void Input()
{
cout<<"\n编号:"; cin>>num;
cout<<"\n姓名:"; cin>>Name;
cout<<"\n实验员上学期实验课时:"; cin>>Hours;
Salary=Incoming();
}
void Input(ifstream& ifs)
{
ifs>>num>>Name>>Duty>>Hours>>Salary;
}
void Output()
{
cout<<num<<"\t"<<Name<<"\t"<<Duty<<"\t"<<Hours<<"\t"<<Salary<<"\t"<<endl;
}
void Output(ofstream& ofs)
{
ofs<<num<<"\t"<<Name<<"\t"<<Duty<<"\t"<<Hours<<"\t"<<Salary<<"\t"<<endl;
}
double Incoming()
{
if(Salary>70)
return Salary+Allowance+(Hours-70)*20;
else
return Salary+Allowance;
}
};
class Manager:virtual public Person //行政人员
{
protected:
int Allowance;
public:
Manager()
{
Duty=3;
Salary=750;
Allowance=250;
}
void Input()
{
cout<<"编号:"; cin>>num;
cout<<"姓名:"; cin>>Name;
Salary=Incoming();
}
void Input(ifstream& ifs)
{
ifs>>num>>Name>>Duty>>Salary;
}
void Output()
{
cout<<num<<"\t"<<Name<<"\t"<<Duty<<"\t"<<"\t"<<Salary<<"\t"<<endl;
}
void Output(ofstream& ofs)
{
ofs<<num<<"\t"<<Name<<"\t"<<Duty<<"\t"<<Salary<<"\t"<<endl;
}
double Incoming()
{
return Salary+Allowance;
}
};
class Teacher_Assistant:public Teacher,public Assistant //教师兼实验员
{
public:
Teacher_Assistant()
{
Duty=4;
Teacher::Salary=800;
Assistant::Allowance=150;
}
void Input()
{
cout<<"\n编号:"; cin>>num;
cout<<"\n姓名:"; cin>>Name;
cout<<"\n教师上学期课时:"; cin>>Teacher::Hours;
Salary=Incoming();
}
void Input(ifstream& ifs)
{
ifs>>num>>Name>>Duty>>Teacher::Hours>>Salary;
}
void Output()
{
cout<<num<<"\t"<<Name<<"\t"<<Duty<<"\t"<<Teacher::Hours
<<"\t"<<Salary<<endl;
}
void Output(ofstream& ofs)
{
ofs<<num<<"\t"<<Name<<"\t"<<Duty<<"\t"<<Teacher::Hours<<"\t"
<<Salary<<"\t"<<endl;
}
double Incoming()
{
if(Teacher::Hours>120)
return Salary+(Teacher::Hours-120)*20
+Allowance;
else
return Salary+Allowance;
}
};
class Manager_Teacher:public Manager,public Teacher //行政人员兼教师
{
public:
Manager_Teacher()
{
Duty=5;
Manager::Salary=750;
}
void Input()
{
cout<<"\n编号:"; cin>>num;
cout<<"\n姓名:"; cin>>Name;
cout<<"\n行政人员兼职教师上学期课时:"; cin>>Hours;
Salary=Incoming();
}
void Input(ifstream& ifs)
{
ifs>>num>>Name>>Duty>>Hours>>Salary;
}
void Output()
{
cout<<num<<"\t"<<Name<<"\t"<<Duty<<"\t"<<Hours<<"\t"<<Salary<<"\t"<<endl;
}
void Output(ofstream& ofs)
{
ofs<<num<<"\t"<<Name<<"\t"<<Duty<<"\t"<<Hours<<"\t"<<Salary<<"\t"<<endl;
}
double Incoming()
{
return Manager::Salary+Allowance+Hours*20;
}
};
class College
{
private:
Person *PL;
void Clear();
int College::Cfind(int ID,Person **p1,Person **p2);
public:
College(); //构造
~College(); //析构
void Add(); //增加职工
void Delete(); //删除职工
void Modify(); //修改职工
void Print(); //输出职工信息
void Save(); //职工信息存盘
void Load(); //职工信息装入
void Find(); //查找
void Build(); //导引
void Stat(); //统计
};
College::College() //构造函数(创建1个头结点的链表)
{
Person *p=new Teacher;
PL=p;
cout<<"自动装入数据……………………\n";
Build();
}
College::~College() //析构函数(仅保留1个头结点)
{
Person *p=PL;
while(p) //逐个删除结点,包括头结点
{
PL=p->next;
delete p;
p=PL;
}
PL=0;
}
void College::Add() //增加职工
{
char c;
do
{
cout<<"\n** 增加职工 **\n";
//查找尾结点
Person *p=PL;
while(p->next)p=p->next;
int ch;
cout<<"输入职工分类码[1-教师,2-实验员,3-行政人员,4-教师兼实验员,5-行政兼教师]:\n"; cin>>ch;
//创建新结点,录入数据,连接到链表
Teacher *pt;
Assistant *pa;
Manager *pm;
Teacher_Assistant *pta;
Manager_Teacher *pmt;
switch(ch)
{
case 1: pt=new Teacher; pt->Input();
p->next=pt;
break;
case 2: pa=new Assistant; pa->Input();
p->next=pa;
break;
case 3: pm=new Manager; pm->Input();
p->next=pm;
break;
case 4: pta=new Teacher_Assistant; pta->Input();
p->next=pta;
break;
case 5: pmt=new Manager_Teacher; pmt->Input();
p->next=pmt;
break;
default: return;
}
cout<<"是否进行循环?y/n\n";
cin>>c;
}while(c=='y'||c=='Y');
Save();
}
void College::Clear() //清除所有的职工结点(仅保留头结点)
{
Person *p=PL->next;
while(p)
{
PL->next=p->next;
delete p;
p=PL->next;
}
}
//查找
void College::Find()
{
double ID;
Person *p1;
Person *p2;
cout<<"输入你要查询的编号:";
cin>>ID;
p1=PL->next;
p2=PL;
while(p1)
{
if(p1->num==ID)
break; //找到
else
{
p2=p1; //继续查找
p1=p1->next;
}
}
if(!p1) {cout<<"找不到你所查询的人!!!\n请确认你所查询的编号是否出错!!!\n";return;}
else
{ cout<<"\n** 职工信息表 **\n";
cout<<"编号 姓名 岗位 课时 收入情况(元)\n";
p1->Output();}
}
//查找职工结点(返回1-找到,0-未找到.结点指针由p1返回,p2为前看指针)
int College::Cfind(int ID,Person **p1,Person **p2)
{
*p1=PL->next;
*p2=PL;
while(*p1)
{
if((*p1)->num==ID)
break; //找到
else
{
*p2=*p1; //继续查找
*p1=(*p1)->next;
}
}
return *p1?1:0;
}
void College::Delete() //删除职工
{
cout<<"\n** 删除职工 **\n";
int num;
Person *p1,*p2;
cout<<"编号:"; cin>>num;
if(!Cfind(num,&p1,&p2))
{
cout<<"指定的人员没有找到!\n";
}
else
{
p2->next=p1->next; //连接
delete p1;
cout<<"正确删除!\n";
}
Save();
}
void College::Modify() //修改职工
{
cout<<"\n** 修改职工 **\n";
int num;
Person *p1,*p2;
cout<<"编号:"; cin>>num;
if(!Cfind(num,&p1,&p2))
{
cout<<"指定的人员没有找到!\n";
}
else
{
p1->Output(); //输出原来的职工信息(做提示)
p1->Input(); //输入新的职工信息(更新)
cout<<"修改完成!\n";
}
Save();
}
void College::Print() //输出职工信息
{
cout<<"\n** 职工信息表 **\n";
cout<<"编号 姓名 岗位 课时 收入情况(元)\n";
Person *p=PL->next;
if(!p)
{
cout<<"无职工记录!\n";
return;
}
while(p) //遍历链表,输出职工信息
{
p->Output();
p=p->next;
}
}
void College::Save() //职工信息存盘?
{
ofstream f("Person.dat",ios::out); //打开文件
//遍历输出至文件
Person *p=PL->next;
while(p)
{
p->Output(f);
p=p->next;
}
f.close(); //关闭文件
cout<<"职工信息已经保存在Person.dat.\n";
}
void College::Build() //职工信息
{
char buf[81]; //临时空间
int Duty; //人员类型
Person *p2; //新建结点的指针
long t; //读写位置
//清除现有结点(保留头结点)
Clear();
//打开文件
ifstream f("Person.dat",ios::in);
//建立结点,读数据
Person *p=PL; //尾结点指针
while(1)
{
//读取人员类型
t=f.tellg();
f>>buf>>buf>>Duty;
if(f)
{
//根据人员类型创建新结点
switch(Duty)
{
case 1: p2=new Teacher; break;
case 2: p2=new Assistant; break;
case 3: p2=new Manager; break;
case 4: p2=new Teacher_Assistant; break;
case 5: p2=new Manager_Teacher; break;
default: f.close(); return;
}
p->next=p2;
p=p->next;
f.seekg(t);
p->Input(f);
}
else
break;
}
//关闭文件
f.close();
}
void College::Load() //职工信息录入
{
char ah;
int c;
cout<<"\n** 职工信息录入 **\n";
do
{
cout<<"输入要录入的职工个数:\n";
cin>>c;
for(int i=1;i<=c;i++)
{
//查找尾结点
Person *p=PL;
while(p->next)p=p->next;
int ch;
cout<<"输入职工分类码[1-教师,2-实验员,3-行政人员,4-教师兼实验员,5-行政兼教师]:"; cin>>ch;
//创建新结点,录入数据,连接到链表
Teacher *pt;
Assistant *pa;
Manager *pm;
Teacher_Assistant *pta;
Manager_Teacher *pmt;
switch(ch)
{
case 1: pt=new Teacher; pt->Input();
p->next=pt;
break;
case 2: pa=new Assistant; pa->Input();
p->next=pa;
break;
case 3: pm=new Manager; pm->Input();
p->next=pm;
break;
case 4: pta=new Teacher_Assistant; pta->Input();
p->next=pta;
break;
case 5: pmt=new Manager_Teacher; pmt->Input();
p->next=pmt;
break;
default: return;
}
}
Save();
cout<<"是否还要继续录入职工信息?? y/n\n";
cin>>ah;
}while(ah=='Y'||ah=='y');
}
void College::Stat()
{
Person *p1;
Person *p2;
double Sa=0;
int a,b,i=0;
double c,d;
cout<<"选择你要统计的类别\n[1—类别;2—工资;3—要发的工资总数;4—总的人数]\n";
cin>>a;
if(a==1)
{
cout<<"输入你要统计的类别:\n[1-教师,2-实验员,3-行政人员,4-教师兼实验员,5-行政兼教师]\n";
cin>>b;
p1=PL->next;
p2=PL;
while(p1)
{
if(p1->Duty==b)
{
i++;
//找到
p2=p1; //继续查找
p1=p1->next;
}
else
{
p2=p1; //继续查找
p1=p1->next;
}
}cout<<b<<"类职工的个数是:"<<i<<endl;
}
else if(a==2)
{
cout<<"输入工资下限:";cin>>c;
cout<<"\n输入工资上限:";cin>>d;
p1=PL->next;
p2=PL;
while(p1)
{
if(p1->Salary>=c&&p1->Salary<=d)
{
p1->Output();//找到
p2=p1; //继续查找
p1=p1->next;
}
else
{
p2=p1; //继续查找
p1=p1->next;
}
}
}
else if(a==3)
{
Person *p=PL->next;
while(p) //遍历链表
{
Sa=Sa+(p->Salary);
p=p->next;
}
cout<<"工资总数是:"<<Sa<<endl;
}
else if(a==4)
{
Person *p=PL->next;
while(p)
{
i=i+1;
p=p->next;
}
cout<<"总人数是:"<<i<<endl;
}
cout<<"统计完成!!!\n";
}
void main()
{
char ch;
College c; //定义大学对象
//显示主菜单,接受选择,并分支调用大学类的相应功能的成员函数
do
{
cout<<"\n☆☆ 高校工资管理系统 ☆☆\n";
cout<<"1—数据录入\n";
cout<<"2—查询\n";
cout<<"3—修改职工\n";
cout<<"4—增加职工\n";
cout<<"5—删除职工\n";
cout<<"6—统计\n";
cout<<"7—浏览\n";
cout<<"8—退出\n"<<"请选择:\n";
cin>>ch;
switch(ch)
{
case '1': c.Load(); break;
case '2': c.Find(); break;
case '3': c.Modify(); break;
case '4': c.Add(); break;
case '5': c.Delete(); break;
case '6': c.Stat(); break;
case '7': c.Print(); break;
}
}while(ch!='8');
}
#include <string.h> 字符串流
class Person //人员类(抽象类)
{
protected:
double num; //编号
char Name[20]; //姓名
int Duty; //人员类别标志(1-教师,2-实验员,3-行政人员,4-教师兼实验员,5-行政兼教师)
double Salary; //基本工资
Person *next; //指针域
public:
Person() //基类构造
{
next=0; //指针域设置为空
}
virtual ~Person() //基类虚析构
{
}
virtual void Input()=0; //从键盘输入数据
virtual void Input(ifstream& ifs)=0; //从文件输入数据
virtual void Output()=0; //向屏幕输出数据
virtual void Output(ofstream& ofs)=0; //向文件输出数据
virtual double Incoming()=0; //计算收入
friend class College;
};
class Teacher:virtual public Person //教师类
{
protected:
int Hours; //教师课时
public:
//为对象设置数据分为两种途径,通过1)构造函数,2)一般成员函数
//分开可以使得程序中应用更加灵活
//本程序采用:缺省构造+Input()
Teacher() //构造函数,初始化部分数据
{
Duty=1;
Salary=800;
}
void Input() //键盘补充输入其它数据
{
cout<<"\n编号:"; cin>>num;
cout<<"\n姓名:"; cin>>Name;
cout<<"\n教师上学期课时:"; cin>>Hours;
Salary=Incoming();
}
void Input(ifstream& ifs)
{
ifs>>num>>Name>>Duty>>Hours>>Salary;
}
void Output()
{
cout<<num<<"\t"<<Name<<"\t"<<Duty<<"\t"<<Hours<<"\t"<<Salary<<"\t"<<endl;
}
void Output(ofstream& ofs)
{
ofs<<num<<"\t"<<Name<<"\t"<<Duty<<"\t"<<Hours<<"\t"<<Salary<<"\t"<<endl;
}
double Incoming()
{
if(Hours>120)
return Salary+(Hours-120)*20;
else
return Salary;
}
};
class Assistant:virtual public Person //实验员
{
protected:
int Allowance;
int Hours;
public:
Assistant()
{
Duty=2;
Salary=650;
Allowance=150;
}
void Input()
{
cout<<"\n编号:"; cin>>num;
cout<<"\n姓名:"; cin>>Name;
cout<<"\n实验员上学期实验课时:"; cin>>Hours;
Salary=Incoming();
}
void Input(ifstream& ifs)
{
ifs>>num>>Name>>Duty>>Hours>>Salary;
}
void Output()
{
cout<<num<<"\t"<<Name<<"\t"<<Duty<<"\t"<<Hours<<"\t"<<Salary<<"\t"<<endl;
}
void Output(ofstream& ofs)
{
ofs<<num<<"\t"<<Name<<"\t"<<Duty<<"\t"<<Hours<<"\t"<<Salary<<"\t"<<endl;
}
double Incoming()
{
if(Salary>70)
return Salary+Allowance+(Hours-70)*20;
else
return Salary+Allowance;
}
};
class Manager:virtual public Person //行政人员
{
protected:
int Allowance;
public:
Manager()
{
Duty=3;
Salary=750;
Allowance=250;
}
void Input()
{
cout<<"编号:"; cin>>num;
cout<<"姓名:"; cin>>Name;
Salary=Incoming();
}
void Input(ifstream& ifs)
{
ifs>>num>>Name>>Duty>>Salary;
}
void Output()
{
cout<<num<<"\t"<<Name<<"\t"<<Duty<<"\t"<<"\t"<<Salary<<"\t"<<endl;
}
void Output(ofstream& ofs)
{
ofs<<num<<"\t"<<Name<<"\t"<<Duty<<"\t"<<Salary<<"\t"<<endl;
}
double Incoming()
{
return Salary+Allowance;
}
};
class Teacher_Assistant:public Teacher,public Assistant //教师兼实验员
{
public:
Teacher_Assistant()
{
Duty=4;
Teacher::Salary=800;
Assistant::Allowance=150;
}
void Input()
{
cout<<"\n编号:"; cin>>num;
cout<<"\n姓名:"; cin>>Name;
cout<<"\n教师上学期课时:"; cin>>Teacher::Hours;
Salary=Incoming();
}
void Input(ifstream& ifs)
{
ifs>>num>>Name>>Duty>>Teacher::Hours>>Salary;
}
void Output()
{
cout<<num<<"\t"<<Name<<"\t"<<Duty<<"\t"<<Teacher::Hours
<<"\t"<<Salary<<endl;
}
void Output(ofstream& ofs)
{
ofs<<num<<"\t"<<Name<<"\t"<<Duty<<"\t"<<Teacher::Hours<<"\t"
<<Salary<<"\t"<<endl;
}
double Incoming()
{
if(Teacher::Hours>120)
return Salary+(Teacher::Hours-120)*20
+Allowance;
else
return Salary+Allowance;
}
};
class Manager_Teacher:public Manager,public Teacher //行政人员兼教师
{
public:
Manager_Teacher()
{
Duty=5;
Manager::Salary=750;
}
void Input()
{
cout<<"\n编号:"; cin>>num;
cout<<"\n姓名:"; cin>>Name;
cout<<"\n行政人员兼职教师上学期课时:"; cin>>Hours;
Salary=Incoming();
}
void Input(ifstream& ifs)
{
ifs>>num>>Name>>Duty>>Hours>>Salary;
}
void Output()
{
cout<<num<<"\t"<<Name<<"\t"<<Duty<<"\t"<<Hours<<"\t"<<Salary<<"\t"<<endl;
}
void Output(ofstream& ofs)
{
ofs<<num<<"\t"<<Name<<"\t"<<Duty<<"\t"<<Hours<<"\t"<<Salary<<"\t"<<endl;
}
double Incoming()
{
return Manager::Salary+Allowance+Hours*20;
}
};
class College
{
private:
Person *PL;
void Clear();
int College::Cfind(int ID,Person **p1,Person **p2);
public:
College(); //构造
~College(); //析构
void Add(); //增加职工
void Delete(); //删除职工
void Modify(); //修改职工
void Print(); //输出职工信息
void Save(); //职工信息存盘
void Load(); //职工信息装入
void Find(); //查找
void Build(); //导引
void Stat(); //统计
};
College::College() //构造函数(创建1个头结点的链表)
{
Person *p=new Teacher;
PL=p;
cout<<"自动装入数据……………………\n";
Build();
}
College::~College() //析构函数(仅保留1个头结点)
{
Person *p=PL;
while(p) //逐个删除结点,包括头结点
{
PL=p->next;
delete p;
p=PL;
}
PL=0;
}
void College::Add() //增加职工
{
char c;
do
{
cout<<"\n** 增加职工 **\n";
//查找尾结点
Person *p=PL;
while(p->next)p=p->next;
int ch;
cout<<"输入职工分类码[1-教师,2-实验员,3-行政人员,4-教师兼实验员,5-行政兼教师]:\n"; cin>>ch;
//创建新结点,录入数据,连接到链表
Teacher *pt;
Assistant *pa;
Manager *pm;
Teacher_Assistant *pta;
Manager_Teacher *pmt;
switch(ch)
{
case 1: pt=new Teacher; pt->Input();
p->next=pt;
break;
case 2: pa=new Assistant; pa->Input();
p->next=pa;
break;
case 3: pm=new Manager; pm->Input();
p->next=pm;
break;
case 4: pta=new Teacher_Assistant; pta->Input();
p->next=pta;
break;
case 5: pmt=new Manager_Teacher; pmt->Input();
p->next=pmt;
break;
default: return;
}
cout<<"是否进行循环?y/n\n";
cin>>c;
}while(c=='y'||c=='Y');
Save();
}
void College::Clear() //清除所有的职工结点(仅保留头结点)
{
Person *p=PL->next;
while(p)
{
PL->next=p->next;
delete p;
p=PL->next;
}
}
//查找
void College::Find()
{
double ID;
Person *p1;
Person *p2;
cout<<"输入你要查询的编号:";
cin>>ID;
p1=PL->next;
p2=PL;
while(p1)
{
if(p1->num==ID)
break; //找到
else
{
p2=p1; //继续查找
p1=p1->next;
}
}
if(!p1) {cout<<"找不到你所查询的人!!!\n请确认你所查询的编号是否出错!!!\n";return;}
else
{ cout<<"\n** 职工信息表 **\n";
cout<<"编号 姓名 岗位 课时 收入情况(元)\n";
p1->Output();}
}
//查找职工结点(返回1-找到,0-未找到.结点指针由p1返回,p2为前看指针)
int College::Cfind(int ID,Person **p1,Person **p2)
{
*p1=PL->next;
*p2=PL;
while(*p1)
{
if((*p1)->num==ID)
break; //找到
else
{
*p2=*p1; //继续查找
*p1=(*p1)->next;
}
}
return *p1?1:0;
}
void College::Delete() //删除职工
{
cout<<"\n** 删除职工 **\n";
int num;
Person *p1,*p2;
cout<<"编号:"; cin>>num;
if(!Cfind(num,&p1,&p2))
{
cout<<"指定的人员没有找到!\n";
}
else
{
p2->next=p1->next; //连接
delete p1;
cout<<"正确删除!\n";
}
Save();
}
void College::Modify() //修改职工
{
cout<<"\n** 修改职工 **\n";
int num;
Person *p1,*p2;
cout<<"编号:"; cin>>num;
if(!Cfind(num,&p1,&p2))
{
cout<<"指定的人员没有找到!\n";
}
else
{
p1->Output(); //输出原来的职工信息(做提示)
p1->Input(); //输入新的职工信息(更新)
cout<<"修改完成!\n";
}
Save();
}
void College::Print() //输出职工信息
{
cout<<"\n** 职工信息表 **\n";
cout<<"编号 姓名 岗位 课时 收入情况(元)\n";
Person *p=PL->next;
if(!p)
{
cout<<"无职工记录!\n";
return;
}
while(p) //遍历链表,输出职工信息
{
p->Output();
p=p->next;
}
}
void College::Save() //职工信息存盘?
{
ofstream f("Person.dat",ios::out); //打开文件
//遍历输出至文件
Person *p=PL->next;
while(p)
{
p->Output(f);
p=p->next;
}
f.close(); //关闭文件
cout<<"职工信息已经保存在Person.dat.\n";
}
void College::Build() //职工信息
{
char buf[81]; //临时空间
int Duty; //人员类型
Person *p2; //新建结点的指针
long t; //读写位置
//清除现有结点(保留头结点)
Clear();
//打开文件
ifstream f("Person.dat",ios::in);
//建立结点,读数据
Person *p=PL; //尾结点指针
while(1)
{
//读取人员类型
t=f.tellg();
f>>buf>>buf>>Duty;
if(f)
{
//根据人员类型创建新结点
switch(Duty)
{
case 1: p2=new Teacher; break;
case 2: p2=new Assistant; break;
case 3: p2=new Manager; break;
case 4: p2=new Teacher_Assistant; break;
case 5: p2=new Manager_Teacher; break;
default: f.close(); return;
}
p->next=p2;
p=p->next;
f.seekg(t);
p->Input(f);
}
else
break;
}
//关闭文件
f.close();
}
void College::Load() //职工信息录入
{
char ah;
int c;
cout<<"\n** 职工信息录入 **\n";
do
{
cout<<"输入要录入的职工个数:\n";
cin>>c;
for(int i=1;i<=c;i++)
{
//查找尾结点
Person *p=PL;
while(p->next)p=p->next;
int ch;
cout<<"输入职工分类码[1-教师,2-实验员,3-行政人员,4-教师兼实验员,5-行政兼教师]:"; cin>>ch;
//创建新结点,录入数据,连接到链表
Teacher *pt;
Assistant *pa;
Manager *pm;
Teacher_Assistant *pta;
Manager_Teacher *pmt;
switch(ch)
{
case 1: pt=new Teacher; pt->Input();
p->next=pt;
break;
case 2: pa=new Assistant; pa->Input();
p->next=pa;
break;
case 3: pm=new Manager; pm->Input();
p->next=pm;
break;
case 4: pta=new Teacher_Assistant; pta->Input();
p->next=pta;
break;
case 5: pmt=new Manager_Teacher; pmt->Input();
p->next=pmt;
break;
default: return;
}
}
Save();
cout<<"是否还要继续录入职工信息?? y/n\n";
cin>>ah;
}while(ah=='Y'||ah=='y');
}
void College::Stat()
{
Person *p1;
Person *p2;
double Sa=0;
int a,b,i=0;
double c,d;
cout<<"选择你要统计的类别\n[1—类别;2—工资;3—要发的工资总数;4—总的人数]\n";
cin>>a;
if(a==1)
{
cout<<"输入你要统计的类别:\n[1-教师,2-实验员,3-行政人员,4-教师兼实验员,5-行政兼教师]\n";
cin>>b;
p1=PL->next;
p2=PL;
while(p1)
{
if(p1->Duty==b)
{
i++;
//找到
p2=p1; //继续查找
p1=p1->next;
}
else
{
p2=p1; //继续查找
p1=p1->next;
}
}cout<<b<<"类职工的个数是:"<<i<<endl;
}
else if(a==2)
{
cout<<"输入工资下限:";cin>>c;
cout<<"\n输入工资上限:";cin>>d;
p1=PL->next;
p2=PL;
while(p1)
{
if(p1->Salary>=c&&p1->Salary<=d)
{
p1->Output();//找到
p2=p1; //继续查找
p1=p1->next;
}
else
{
p2=p1; //继续查找
p1=p1->next;
}
}
}
else if(a==3)
{
Person *p=PL->next;
while(p) //遍历链表
{
Sa=Sa+(p->Salary);
p=p->next;
}
cout<<"工资总数是:"<<Sa<<endl;
}
else if(a==4)
{
Person *p=PL->next;
while(p)
{
i=i+1;
p=p->next;
}
cout<<"总人数是:"<<i<<endl;
}
cout<<"统计完成!!!\n";
}
void main()
{
char ch;
College c; //定义大学对象
//显示主菜单,接受选择,并分支调用大学类的相应功能的成员函数
do
{
cout<<"\n☆☆ 高校工资管理系统 ☆☆\n";
cout<<"1—数据录入\n";
cout<<"2—查询\n";
cout<<"3—修改职工\n";
cout<<"4—增加职工\n";
cout<<"5—删除职工\n";
cout<<"6—统计\n";
cout<<"7—浏览\n";
cout<<"8—退出\n"<<"请选择:\n";
cin>>ch;
switch(ch)
{
case '1': c.Load(); break;
case '2': c.Find(); break;
case '3': c.Modify(); break;
case '4': c.Add(); break;
case '5': c.Delete(); break;
case '6': c.Stat(); break;
case '7': c.Print(); break;
}
}while(ch!='8');
}
上海华然企业咨询
2024-10-28 广告
2024-10-28 广告
作为上海华然企业咨询有限公司的一员,我们深知大模型测试对于企业数字化转型与智能决策的重要性。在应对此类测试时,我们注重数据的精准性、算法的先进性及模型的适用性,确保大模型能够精准捕捉市场动态,高效分析企业数据,为管理层提供科学、前瞻的决策支...
点击进入详情页
本回答由上海华然企业咨询提供
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询