c++课设实验报告 1.docx
《c++课设实验报告 1.docx》由会员分享,可在线阅读,更多相关《c++课设实验报告 1.docx(42页珍藏版)》请在冰豆网上搜索。
c++课设实验报告1
C与C++
课程设计报告
设计题目:
公司员工管理系统
专业网络工程
班级网络141
学生
学号
指导教师
起止时间2015.12.28-2015.12.31
2015年秋季学期
一、具体任务
设计一个利用文件处理方式实现对公司人员(包括工程师、领导和主任工程师)进行管理,要求具有增加数据、更新数据、查询数据、删除数据以及现实数据的功能。
设计一个虚基类Staff(员工),包含编号、姓名和年龄保护数据成员以及相关的成员函数;由Staff派生出工程师类Engineer,包含专业和职称保护数据成员以及相关的成员函数;再由Staff派生出领导类Leader,包含职务和部门保护数据成员以及相关的成员函数;然后由Engineer和Leader类派生出主任工程师类Chairman。
二、软件环境
本实验用到的编程环境为CodeBlocks
三、算法设计思想
1.实现
由于本实验共有4个类,需要实现数据的插入,删除,修改,查询,显示等功能,所以可以用单链表来实现,这样就需要建立一个链表类和一个节点的结构体。
2.定义类
本实验中公司共有4种员工,且员工之间有继承和派生关系,所以应该有4个类,外加链表,一共5个类
(1)设计一个虚基类Staff(员工),包含编号、姓名和年龄保护数据成员以及相关的成员函数;
(2)由Staff派生出工程师类Engineer,包含专业和职称保护数据成员以及相关的成员函数;
(3)再由Staff派生出领导类Leader,包含职务和部门保护数据成员以及相关的成员函数。
(4)然后由Engineer和Leader类派生出主任工程师类Chairman。
(5)链表类,包含头结点head和指针r以及相关的成员函数,即针对链表的各个数据处理功能的实现。
3.功能实现
链表内需要各个数据的处理功能,但是由于共有其他的4种类,所以对于某些操作,例如修改,显示每个类里面需要有自己的函数实现。
4.函数实现
(1)对于链表的成员函数,用于实现数据的插入,删除,修改,查询,显示的功能:
①LinkList();对头结点和指针r初始化;
②intInsert_LinkList();插入函数
③intDel_LinkList(inti);删除函数
④voidmodify_LinkList(inti);修改函数,其中不同的类调用各自的修改函数
⑤voidprint_LinkList();显示函数,其中不同的类调用各自的显示函数
⑥Node*Get_LinkList(inti);查找函数
⑦voidsave_LinkList();保存函数,其中不同的类调用各自的保存函数
(2)对于类的成员函数
a.Staff职工类
①Staff()职工的构造函数,输入职工的数据
②voidprint()职工的显示函数,显示职工的数据
③voidprint1()职工的显示函数,用于派生类的调用
④voidmodify()职工的修改函数,修改职工的数据
⑤voidsave()职工的保存函数,保存数据到staff.txt文件
⑥voidsave1()职工的保存函数,将工程师的针对职工的数据存入engineer.txt文件,后用于派生类Engineer的调用
⑦voidsave2()职工的保存函数,将领导的针对职工的数据存入leader.txt文件,后用于派生类Leader的调用
⑧voidsave3()职工的保存函数,将主任工程师的针对职工的数据存入chairman.txt文件,后用于派生类chairman的调用
b.Engineer工程师类
①Engineer()工程师的构造函数,输入工程师的数据
②voidprint()工程师的显示函数,显示工程师的数据,先调用基类Staff的print1(),显示满足职工的条件的数据,再显示自己特有的数据。
③voidprint1()工程师的显示函数,用于派生类Chairman的调用
④voidmodify()工程师的修改函数,修改工程师的信息,先调用基类Staff的modify(),修改满足职工条件的数据,再修改自己特有的数据。
⑤voidsave()工程师的保存函数,保存工程师的数据到engineer.txt文件,先调用基类的save1(),保存满足职工条件的数据信息,再保存自己特有的数据信息。
⑥voidsave1()工程师的保存函数,将Chairman满足工程师的信息存入chairman.txt文件,用于派生类Chairman的调用
c.Leader领导类
①Leader()领导的构造函数
②voidprint()领导的显示函数,显示领导的信息,先调用基类Staff的print1(),显示满足职工的条件的信息,再显示自己特有的数据信息。
③voidprint1()领导的显示函数,用于派生类Chairman的调用
④voidmodify()领导的修改函数,修改领导的信息,先调用基类Staff的modify(),修改满足职工条件的数据,再修改自己特有的数据。
⑤voidsave()领导的保存函数,保存领导的数据到leader.txt文件,先调用基类的save1(),保存满足职工条件的数据信息,再保存自己特有的数据信息。
⑥voidsave1()领导的保存函数,将Chairman满足领导的信息存入chairman.txt文件,用于派生类Chairman的调用
d.Chairman主任工程师类
①Chairman();主任工程师的构造函数
②voidprint();主任工程师的显示函数,显示主任工程师的信息,先调用基类工程师的print1(),再调用基类领导的print1()。
③voidmodify();主任工程师的修改函数,修改主任工程师的信息,先调用基类工程师的modify(),再调用基类领导的modify()。
④voidsave();主任工程师的保存函数,保存主任工程师的信息,先调用基类工程师的save1(),再调用基类领导的save1()。
(3)其他的普通函数,操作函数及选择,菜单函数
①voidoperation1();职工类的操作函数,若选择职工类,则进入该函数,调用菜单函数,利用switch语句供用户做相应得选择来对职工类进行操作,其中调用链表的操作函数。
②voidoperation2();工程师类的操作函数,若选择工程师类,则进入该函数,调用菜单函数,利用switch语句供用户做相应得选择来对工程师类进行操作,其中调用链表的操作函数。
③voidoperation3();领导类的操作函数,若选择领导类,则进入该函数,调用菜单函数,利用switch语句供用户做相应得选择来对职工类进行操作,其中调用链表的操作函数。
④voidoperation4();主任工程师类的操作函数,若选择主任工程师类,则进入该函数,调用菜单函数,利用switch语句供用户做相应得选择来对职工类进行操作,其中调用链表的操作函数。
⑤voidchoose();选择函数,供用户选择要操作的公司员工类别
⑥voidmenu();菜单函数,供用户选择要进行的数据处理操作
(4).主函数main()
利用switch语句,调用选择函数,供用户选择要操作的公司员工的类别的编号,然后调用对应的operation函数。
四、源代码
#include
#include
#include
#include
usingnamespacestd;
voidmenu();
intchoose();
voidoperation1();
voidoperation3();
voidoperation2();
voidoperation4();
classStaff
{
private:
intnum;
charname[100];
intage;
public:
Staff()
{
cout<<"请输入职工编号"<cin>>num;
cout<<"请输入职工姓名"<cin>>name;
cout<<"请输入职工年龄"<cin>>age;
}
voidprint()
{
cout<<"编号"<}
voidprint1()
{
cout<<"编号"<}
voidmodify()
{
inta;
cout<<"------------------------------------"<cout<<"请输入要修改的信息号(输入0退出):
"<cout<<"1.编号"<cout<<"2.姓名"<cout<<"3.年龄"<cout<<"------------------------------------"<cin>>a;
switch(a)
{
case1:
{
cout<<"请输入要修改后的编号:
"<cin>>num;
break;
}
case2:
{
cout<<"请输入要修改后的姓名:
"<cin>>name;
break;
}
case3:
{
cout<<"请输入要修改后的年龄:
"<cin>>age;
break;
}
case0:
break;
default:
break;
}
}
voidsave()
{
ofstreamout;
out.open("staff.txt",ios:
:
app);
if(out)
{
out<<"编号"<out<out.close();
}
}
voidsave1()
{
ofstreamout;
out.open("engineer.txt",ios:
:
app);
if(out)
{
out<<"编号"<out.close();
}
}
voidsave2()
{
ofstreamout;
out.open("leader.txt",ios:
:
app);
if(out)
{
out<<"编号"<out.close();
}
}
voidsave3()
{
ofstreamout;
out.open("chairman.txt",ios:
:
app);
if(out)
{
out<<"编号"<out.close();
}
}
};
classEngineer:
virtualpublicStaff
{
private:
charmajor[100];
charpost[100];
public:
Engineer()
{
cout<<"请输入工程师专业"<cin>>major;
cout<<"请输入工程师职称"<cin>>post;
}
voidprint()
{
Staff:
:
print1();
cout<<"专业"<}
voidprint1()
{
Staff:
:
print1();
cout<}
voidmodify()
{
Staff:
:
modify();
inta;
cout<<"------------------------------------"<cout<<"请输入要修改的信息号(输入0退出):
"<cout<<"1.专业"<cout<<"2.职称"<cout<<"------------------------------------"<cin>>a;
switch(a)
{
case1:
{
cout<<"请输入要修改后的专业:
"<cin>>major;
break;
}
case2:
{
cout<<"请输入要修改后的职称:
"<cin>>post;
break;
}
default:
break;
}
}
voidsave()
{
ofstreamout;
if(out)
{
Staff:
:
save1();
out.open("engineer.txt",ios:
:
app);
out<out.close();
}
}
voidsave1()
{
ofstreamout;
if(out)
{
Staff:
:
save3();
out.open("chairman.txt",ios:
:
app);
out<out.close();
}
}
};
classLeader:
virtualpublicStaff
{
private:
charposition[100];
charpart[100];
public:
Leader()
{
cout<<"请输入领导职务"<cin>>position;
cout<<"请输入领导部门"<cin>>part;
}
voidprint()
{
Staff:
:
print1();
cout<}
voidprint1()
{
cout<}
voidmodify()
{
Staff:
:
modify();
inta;
cout<<"------------------------------------"<cout<<"请输入要修改的信息号(输入0退出):
"<cout<<"1.职务"<cout<<"2.部门"<cout<<"------------------------------------"<cin>>a;
switch(a)
{
case1:
{
cout<<"请输入要修改后的职务:
"<cin>>position;
break;
}
case2:
{
cout<<"请输入要修改后的部门:
"<cin>>part;
break;
}
default:
break;
}
}
voidsave()
{
ofstreamout;
if(out)
{
Staff:
:
save2();
out.open("leader.txt",ios:
:
app);
out<<"职务"<out.close();
}
}
voidsave1()
{
ofstreamout;
if(out)
{
out.open("chairman.txt",ios:
:
app);
out<<"职务"<out.close();
}
}
};
classChairman:
publicEngineer,publicLeader
{
public:
Chairman(){}
voidprint()
{
Engineer:
:
print1();
Leader:
:
print1();
}
voidmodify()
{
Engineer:
:
modify();
Leader:
:
modify();
}
voidsave()
{
Engineer:
:
save1();
Leader:
:
save1();
}
};
template
structNode{
Tdata;
Node*next;
};
template
classLinkList
{
private:
Node*head;
Node*r;
public:
LinkList();
intInsert_LinkList();
intDel_LinkList(inti);
voidmodify_LinkList(inti);
voidprint_LinkList();
Node*Get_LinkList(inti);
voidsave_LinkList();
};
intmain()
{
intm;
while(m)
{
inta;
a=choose();
switch(a)
{
case1:
{
operation1();
break;
}
case2:
{
operation2();
break;
}
case3:
{
operation3();
break;
}
case4:
{
operation4();
break;
}
case0:
{
m=0;
break;
}
}
}
return0;
}
voidoperation1()
{
LinkLists;
intn,m;
while(m)
{
menu();
cin>>n;
switch(n)
{
case1:
{
intflag;
flag=s.Insert_LinkList();
if(flag==1)
{
cout<<"------------"<cout<<"插入成功"<cout<<"------------"<}
else
{
cout<<"------------"<cout<<"插入失败"<cout<<"------------"<}
break;
}
case2:
{
inti,flag;
cout<<"请输入要删除的员工的编号:
";
cin>>i;
flag=s.Del_LinkList(i);
if(flag==1)
{
cout<<"------------"<cout<<"删除成功"<cout<<"------------"<}
else
{
cout<<"------------"<cout<<"删除失败"<cout<<"------------"<}
break;
}
case3:
{
cout<<"---------员工信息---------"<s.print_LinkList();
break;
}
case4:
{
cout<<"请输入要修改的员工的编号:
";
intb;
cin>>b;
s.modify_LinkList(b);
cout<<"---------------"<cout<<"修改成功"<cout<<"---------------"<break;
}
case5:
{
cout<<"请输入要查询的员工的编号:
";
intb;
cin>>b;
s.Get_LinkList(b);
break;
}
case6:
{
s.save_LinkList();
cout<<"---------------"<cout<<"保存成功"<cout<<"---------------"<break;
}
case0:
{
m=0;
break;
}
default:
cout<<"输入有误,请重新输入"<break;
}
}
}
voidoperation2()
{
LinkListe;
intn,m;
while(m)
{
menu();
cin>>n;
switch(n)
{
case1:
{
intflag;
flag=e.Insert_LinkList();
if(flag==1)
{
cout<<"------------"<cout<<"插入成功"<cout<<"------------"<}
else
{
cout<<"------------"<cout<<"插入失败"<cout<<"------------"<}
break;
}
case2:
{
int