}
doubleIncoming()
{
returnSalary+Allowance+Hours*20;
}
};
3.7College类
3.7.1头文件
classCollege
{
private:
Person*PL;
voidClear();
intCollege:
:
Find(intID,Person**p1,Person**p2);
public:
College();//构造
~College();//析构
voidAdd();//增加职工
voidDelete();//删除职工
voidModify();//修改职工
voidPrint();//输出职工信息
voidSave();//职工信息存盘
voidLoad();//职工信息装入
voidFinding();//查找职工
};
3.7.2构造函数
College:
:
College()//构造函数(创建个头结点的链表)
{
Person*p=newTeacher;
PL=p;
cout<<"自动装入数据...\n";
Load();
}
3.7.3析构函数
College:
:
~College()//析构函数(仅保留个头结点)
{
Person*p=PL;
while(p)//逐个删除结点,包括头结点
{
PL=p->next;
deletep;
p=PL;
}
PL=0;
}
3.7.4Add函数
voidCollege:
:
Add()//增加职工
{
cout<<"\t\t****************高校工资管理系统*******************\n\n\n";
cout<<"\n\t\t\t\t**增加职工,输入x结束**\n\n";
//查找尾结点
Person*p=PL;
while(p->next)p=p->next;
charch='m';
//创建新结点,录入数据,连接到链表
Teacher*pt;
Assistant*pa;
Manager*pm;
Teacher_Assistant*pta;
Manager_Teacher*pmt;
cout<<"职工分类码[0-教师,1-实验员,2-行政人员,3-教师兼实验员,4-行政兼教师]:
\n\n";
for(;ch!
='x';)
{
cout<<"类别:
";
cin>>ch;
switch(ch)
{
case'0':
pt=newTeacher;pt->Input();
p->next=pt;
break;
case'1':
pa=newAssistant;pa->Input();
p->next=pa;
break;
case'2':
pm=newManager;pm->Input();
p->next=pm;
break;
case'3':
pta=newTeacher_Assistant;pta->Input();
p->next=pta;
break;
case'4':
pmt=newManager_Teacher;pmt->Input();
p->next=pmt;
break;
}
p=p->next;
}
}
3.7.5Find函数
//查找职工结点(返回-找到,-未找到.结点指针由p1返回,p2为前看指针)
intCollege:
:
Find(intID,Person**p1,Person**p2)
{
*p1=PL->next;
*p2=PL;
while(*p1)
{
if((*p1)->No==ID)
break;//找到
else
{
*p2=*p1;//继续查找
*p1=(*p1)->next;
}
}
return*p1?
1:
0;
}
3.7.6Clear函数
voidCollege:
:
Clear()//清除所有的职工结点(仅保留头结点)
{
Person*p=PL->next;
while(p)
{
PL->next=p->next;
deletep;
p=PL->next;
}
}
3.7.7Delete函数
voidCollege:
:
Delete()//删除职工
{
cout<<"\t\t****************高校工资管理系统*******************\n\n\n";
cout<<"\n\t\t\t\t**删除职工**\n";
intNo;
Person*p1,*p2;
cout<<"编号:
";cin>>No;
if(!
Find(No,&p1,&p2))
{
cout<<"指定的人员没有找到!
\n";
}
else
{
p2->next=p1->next;//连接
deletep1;
cout<<"正确删除!
\n";
}
}
3.7.8Modify函数
voidCollege:
:
Modify()//修改职工
{
cout<<"\t\t****************高校工资管理系统*******************\n\n\n";
cout<<"\n\t\t\t\t**修改职工**\n";
intNo;
Person*p1,*p2;
cout<<"编号:
";cin>>No;
if(!
Find(No,&p1,&p2))
{
cout<<"指定的人员没有找到!
\n";
}
else
{
p1->Output();//输出原来的职工信息(做提示)
p1->Input();//输入新的职工信息(更新)
cout<<"修改完成!
\n";
}
}
3.7.9Print函数
voidCollege:
:
Print()//输出职工信息
{
cout<<"\t\t****************高校工资管理系统*******************\n\n\n";
cout<<"\n**职工信息表**\n\n";
cout<<"编号\t姓名\t岗位\t\t其它\t工资\n";
Person*p=PL->next;
if(!
p)
{
cout<<"无职工记录!
\n";
return;
}
while(p)//遍历链表,输出职工信息
{
p->Output();
p=p->next;
}
}
3.7.10Save函数
voidCollege:
:
Save()//职工信息存盘
{
ofstreamf("Person.dat",ios:
:
out);//打开文件
//遍历输出至文件
Person*p=PL->next;
while(p)
{
p->Output(f);
p=p->next;
}
f.close();//关闭文件
cout<<"职工信息已经保存在Person.dat.\n";
}
3.7.11Load函数
voidCollege:
:
Load()//职工信息装入
{
charbuf[81];//临时空间
charDuty;//人员类型
Person*p2;//新建结点的指针
longt;//读写位置
//清除现有结点(保留头结点)
Clear();
//打开文件
ifstreamf("Person.dat",ios:
:
in);
//建立结点,读数据
Person*p=PL;//尾结点指针
while
(1)
{
//读取人员类型
t=f.tellg();
f>>buf>>buf>>Duty;
if(f)
{
//根据人员类型创建新结点
switch(Duty)
{
case'0':
p2=newTeacher;break;
case'1':
p2=newAssistant;break;
case'2':
p2=newManager;break;
case'3':
p2=newTeacher_Assistant;break;
case'4':
p2=newManager_Teacher;break;
default:
f.close();return;
}
p->next=p2;
p=p->next;
f.seekg(t);
p->Input(f);
}
else
break;
}
//关闭文件
f.close();
cout<<"Person.dat数据已装入.\n";
}
3.7.12Finding函数
voidCollege:
:
Finding()
{
cout<<"\t\t****************高校工资管理系统*******************\n\n\n";
cout<<"\n\t\t\t\t**查找职工**\n";
Person*p1,*p2;
intID;
cout<<"编号;";
cin>>ID;
cout<<"\n\n";
p1=PL->next;
p2=PL;
while(p1)
{
if((p1)->No==ID)
{
cout<<"编号\t姓名\t岗位\t\t其它\t工资\n";
(p1)->Output();
break;
}//找到
else
{
p2=p1;//继续查找
p1=(p1)->next;
}
}
}
3.8界面函数
charMeau()
{
charc;
intflag;
do
{
system("cls");
flag=1;
cout<<"\t\t****************高校工资管理系统*******************\n\n\n";
cout<<"\t\t\t┏━━━━━━━━━━━━━━━━┑\n";
cout<<"\t\t\t┃┃\n";
cout<<"\t\t\t┃1、增加职工┃\n";
cout<<"\t\t\t┃2、删除职工┃\n";
cout<<"\t\t\t┃3、查找职工┃\n";
cout<<"\t\t\t┃4、修改职工┃\n";
cout<<"\t\t\t┃5、输出职工信息┃\n";
cout<<"\t\t\t┃6、数据存盘┃\n";
cout<<"\t\t\t┃7、数据装入┃\n";
cout<<"\t\t\t┃8、退出┃\n";
cout<<"\t\t\t┗━━━━━━━━━━━━━━━━┛\n";
cout<<"\n\n\n\t\t请输入您的选择:
";
cin>>c;
if(c=='1'||c=='2'||c=='3'||c=='4'||c=='5'||c=='6'||c=='7'||c=='8')
flag=0;
}while(flag);
returnc;
}//显示主菜单,接受选择
3.9主函数
voidmain()
{
charch;
Collegec;//定义大学对象
do{
ch=Meau();
switch(ch)
{
case'1':
system("cls");c.Add();cout<<"\n\n\t\t按任意键结束...\n";getchar();getchar();break;
case'2':
system("cls");c.Delete();cout<<"\n\n\t\t按任意键结束...\n";getchar();getchar();break;
case'3':
system("cls");c.Finding();cout<<"\n\n\t\t按任意键结束...\n";getchar();getchar();break;
case'4':
system("cls");c.Modify();cout<<"\n\n\t\t按任意键结束...\n";getchar();getchar();break;
case'5':
system("cls");c.Print();cout<<"\n\n\t\t按任意键结束...\n";getchar();getchar();break;
case'6':
system("cls");c.Save();cout<<"\n\n\t\t按任意键结束...\n";getchar();getchar();break;
case'7':
system("cls");c.Load();cout<<"\n\n\t\t按任意键结束...\n";getchar();getchar();
};
}while(ch!
='8');
}
4.系统评价
该系统实现了职工的添加,删除,查找,显示,修改,和数据的存盘与装入操作,总体上来说功能比较全面,但仍有一些不足,如界面问题,以及程序中的许多繁琐之处。
5.设计结果与分析
5.1主界面
实现各种功能的选择:
5.2添加功能
实现添加功能,输入“x“结束:
5.3删除功能