第8题职工信息表 报告.docx
《第8题职工信息表 报告.docx》由会员分享,可在线阅读,更多相关《第8题职工信息表 报告.docx(20页珍藏版)》请在冰豆网上搜索。
第8题职工信息表报告
课程设计报告
课程设计名称:
从职工信息表
系别:
3
学生姓名:
班级:
学号:
成绩:
指导教师:
汤亮
开课时间:
2010——2011学年二学期
一、课程设计目的(宋体四号加粗)
**************************************************
二、课程设计要求 (宋体四号加粗)
**************************************************
三、课程设计内容 (宋体四号加粗)
**************************************************
四、课程设计概要设计(宋体四号加粗)
**************************************************
五、课程设计详细设计与实现 (宋体四号加粗)
**************************************************
六、源代码与注释 (宋体四号加粗)
**************************************************
七、总结(宋体四号加粗)
***************************************************
一、课程设计目的
根据课程讲内容,自主作相应的练习,消化自己所学的内容,同时也培养自己综合运用c++程序设计课程所学到的知识和编写c++程序解决实际问题的能力,以及良好的课程设计习惯。
通过课程设计的训练,学生了解程序开发的过程,掌握编写、调试和测试c++语言程序的基本技巧,充分理解结构化程序设计的基本方法。
二、课程设计要求
1、基本要求:
(1)要求利用面向对象的方法以及C++的编程思想来完成系统的设计;
(2)要求在设计的过程中,建立清晰的类层次;
(3)在系统设计中要分析和定义各个类,每个类中要有各自的属性和方法;
(4)在系统的设计中,要求运用面向对象的机制(继承、派生及多态性)来实现系统功能。
2、创新要求:
在基本要求达到后,可进行创新设计,如根据查找结果进行修改的功能及设计出比较友好的界面等。
三、课程设计内容
职工信息表(★★)
设计要求:
使用C++类实现
设计要求实现如下功能:
(1)建立职工信息数据,包括职工编号、姓名、性别、工资、出生时间、参加工作时间和年龄(必须计算得到)。
(2)根据职工信息表,建立只含有姓名和年龄的职工信息简表。
(可选功能)
(3)使用继承的方法构造3个类,(即雇员类——虚基类,教师类和工人类——派生类)使用相应的对象放置10个职工信息。
(4)编写同名display()成员函数,用来输出数组的内容。
(5)按不同类别输出职工信息,比如按系输出教师信息。
(可选功能)
(6)要求对“<<”和“>>”运算符进行重载。
考虑到输人职工编号时,也会因不小心引人空格,而且名字中也需要有空格,所以重载“>>’’运算符时,需要满足这个要求。
(7)抽取并计算职工的平均年龄。
(8)检索(查找)指定信息。
(如按姓名检索、按年龄检索)
(9)显示年龄分布的柱状图,示例如下:
(10)参考界面如下:
增加一位教师记录
增加一位工人记录
显示全部职工记录
计算教师平均年龄
计算工人平均年龄
删除一个教师
删除一个工人
按系输出教师信息(可选)
按姓名检索所有信息
结束程序运行
四、课程设计概要设计
这个题目根据教师、两个对象可知先设两个类,即Teacher、Work类,并由此分别建立对象数组,然后在这两个类中分别将编号、姓名、年龄、性别等数据成员和删除、添加、查找、计算平均年龄等成员函数等封装起来,将每个功能函数在类外定义,主函数中通过菜单进行选择调用各功能函数。
五、课程设计详细设计与实现
1.由于有“<<”、“>>”的重载,顾应用“#include、#include、#include”。
2.设计一个雇员虚基类guyuan,并派生出教师Teacher工人Works两个类,同时在这两个类里分别添加数据成员和成员函数,成员函数包括录入、添加、查询、删除、显示、主函数、<<及>>的重载函数。
3.各函数的具体实现:
(由于教师类与工人类功能及数据成员几乎都相同,所以在这里只介绍一下教师类)
(1)录入函数
可以创建一个txt文件。
并向这个文件中输出10个教师的信息,然后再从文件中将这10个教师的信息录入到教师数组10个对象中。
(2)主菜单函数
输出主菜单界面信息,返回一个菜单选项的值。
(3)添加函数
输入要添加教师的信息并返回主菜单。
(4)删除函数
输入要删除教师的编号,根据编号定位到数组的这个同学,将此后的教师的编号依次向前移一个。
(5)按系查询函数
输入要查询的教师的系别,然后输出该教师的信息。
(6)显示函数
用一个循环和插入重载函数,依次将对象输出。
(7)求平均年龄函数
用循环将各元素的年龄加起来,然后除以总人数。
4.主函数
通过菜单选项来调用各函数,菜单可以用swich语句实现。
六、源代码与注释
#include
#include
#include
#include
usingnamespacestd;
staticintsum=0;//教师总数
staticintsum1=0;//工人总数
classGuyuan
{public:
charnum[20];
charname[20];
intage;
};
//教师类
classTeacher:
virtualpublicGuyuan//继承虚基类
{
public:
charxi[5];
intzhucaidan();//主菜单函数
voidrecord();//录入函数
voidadd();//添加函数
voidchaxun();//查询函数
voiddel();//删除函数
floataverage_age();//平均年龄函数
voidxichaxun();//按系查询函数
voidxianshi();//显示全部教师函数
voidnamejiansuo();//按姓名检索函数
friendostream&operator<<(ostream&,Teacher&);重载<<
friendistream&operator>>(istream&,Teacher&);重载<<
};
Teacherteacher[20];//全局对象数组
//主菜单定义
intTeacher:
:
zhucaidan()
{
cout<<"\t\t\t----------------------------------------------------\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+[0]----退出系统+\n";
cout<<"\t\t\t----------------------------------------------------\n";
cout<<"请输入您的选择:
";
intchoice;
cin>>choice;
return(choice);
}
//定义录入函数
voidTeacher:
:
record()
{ofstreamoutfile("教师信息.txt",ios:
:
out);//向文件输出
charc;
cout<<"请输入教师信息,以#结束:
"<while(c!
='#')
{
Cout<<输入教师编号:
";cin>>teacher[sum].num;outfile<cout<<"输入教师姓名:
";cin>>teacher[sum].name;outfile<cout<<"输入教师年龄:
";cin>>teacher[sum].age;outfile<cout<<"输入教师系别:
";cin>>teacher[sum].xi;outfile<cout<<"若想要结束输入请按#:
";cin>>c;
sum++;
cout<}
cout<<"输入信息结束!
"<ifstreaminfile("教师信息.txt",ios:
:
in);
for(inti=0;i{infile>>teacher[sum].num;
infile>>teacher[sum].name;
infile>>teacher[sum].age;
infile>>teacher[sum].xi;
}
}
//添加一个教师信息
voidTeacher:
:
add()
{cout<cout<<"输入教师编号:
";cin>>teacher[sum].num;
cout<<"输入教师姓名:
";cin>>teacher[sum].name;
cout<<"输入教师年龄:
";cin>>teacher[sum].age;
cout<<"输入教师系别:
";cin>>teacher[sum].xi;
sum++;
}
//查询教师信息
voidTeacher:
:
chaxun()
{cout<charnum[20];inti=0;
cout<<"请输入要查询教师的编号:
"<cin>>num;
for(i=0;i<=sum;i++)
if(strcmp(teacher[i].num,num)==0)
{cout<<"你要查询的信息是:
"<cout<}
}
//删除教师信息
voidTeacher:
:
del()
{cout<charnum1[20];intj;
cout<<"请输入您要删除的教师的编号:
";
cin>>num1;
for(inti=0;i<=sum;i++)
if(strcmp(teacher[i].num,num1)==0)
{j=i;}
for(;j{teacher[j]=teacher[j+1];
}
sum--;
cout<<"你要删除的信息已经删除成功!
"<}
floatTeacher:
:
average_age()
{cout<floatave;floathe=0;
for(inti=0;i<=sum;i++)
{he=he+teacher[i].age;
}
ave=he/sum;
cout<<"所有教师年龄的平均数为:
"<returnave;
}}
//按系输出教师信息
voidTeacher:
:
xichaxun()
{cout<charxi[5];inti=0;
cout<<"请输入要查询教师的系别:
"<cin>>xi;
for(i=0;i<=sum;i++)
if(strcmp(teacher[i].xi,xi)==0)
{cout<<"你要查询的信息是:
"<cout<}
elsecout<<"您要查询的教师不存在!
"<}
//显示函数定义
voidTeacher:
:
xianshi()
{cout<<"。
。
。
。
。
。
。
。
。
。
。
。
全部教师信息。
。
。
。
。
。
。
。
。
。
。
/t/t"<for(inti=0;i{cout<}
cout<<"共有教师人数:
"<}
//按姓名检索函数定义
voidTeacher:
:
namejiansuo()
{cout<charname[10];inti=0;
cout<<"请输入要查询教师的名字:
"<cin>>name;
for(i=0;iif(strcmp(teacher[i].name,name)==0)
{cout<<"你要查询的信息是:
"<cout<}
}
//重载>>
istream&operator>>(istream&in,Teacher&t)
{cout<<"输入教师编号:
";cin>>t.num;
cout<<"输入教师姓名:
";cin>>teacher[sum].name;
cout<<"输入教师年龄:
";cin>>teacher[sum].age;
returnin;
}
//
ostream&operator<<(ostream&out,Teacher&t)
{cout<<"编号:
"<cout<<"姓名:
"<cout<<"年龄:
"<cout<<"系别:
"<cout<returnout;
}
classWorks:
virtualpublicGuyuan
{
public:
voidrecord();
voidadd();
voidchaxun();
voiddel();
floataverage_age();
voidxichaxun();
voidxianshi();
voidnamejiansuo();
friendostream&operator<<(ostream&,Works&);
friendistream&operator>>(istream&,Works&);
}works[10];
voidWorks:
:
record()
{ofstreamoutfile("工人信息.txt",ios:
:
out);
charc;
cout<<"请输入工人信息,以#结束:
"<while(c!
='#')
{
cout<<"输入工人编号:
";cin>>works[sum1].num;outfile<cout<<"输入工人姓名:
";cin>>works[sum1].name;outfile<cout<<"输入工人年龄:
";cin>>works[sum1].age;outfile<cout<<"若想要结束输入请按#:
";cin>>c;cout<sum1++;
cout<}
cout<<"输入信息结束!
"<
ifstreaminfile("工人信息.txt",ios:
:
in);
for(inti=0;i{infile>>works[sum1].num;
infile>>works[sum1].name;
infile>>works[sum1].age;
}
}
//添加一个工人信息
voidWorks:
:
add()
{cout<cout<<"输入工人编号:
";cin>>works[sum1].num;
cout<<"输入工人姓名:
";cin>>works[sum1].name;
cout<<"输入工人年龄:
";cin>>works[sum1].age;
sum1++;
}
//查询工人信息
voidWorks:
:
chaxun()
{cout<charnum[20];inti=0;
cout<<"请输入要查询工人的编号:
"<cin>>num;
for(i=0;iif(works[i].num==num)
{cout<<"你要查询的信息是:
"<//cout<}
}
//删除工人信息
voidWorks:
:
del()
{cout<charnum1[20];intj;
cout<<"请输入您要删除的工人的编号:
";
cin>>num1;
for(inti=0;iif(strcmp(works[i].num,num1)==1)
{j=i;}
for(;j{works[j]=works[j+1];
}
cout<<"你要删除的信息已经删除成功!
"<}
floatWorks:
:
average_age()
{cout<floatave;floathe=0;
for(inti=0;i{he=he+works[i].age;
}
ave=he/sum1;
cout<<"所有工人年龄的平均数为:
"<returnave;
}
voidWorks:
:
xianshi()
{cout<<"。
。
。
。
。
。
。
。
。
。
。
。
全部工人信息。
。
。
。
。
。
。
。
。
。
。
/t/t"<for(inti=0;i{//cout<}
}
voidWorks:
:
namejiansuo()
{cout<charname[10];inti=0;
cout<<"请输入要查询工人的名字:
"<cin>>name;
for(i=0;iif(strcmp(works[i].name,name)==0)
{cout<<"你要查询的信息是:
"<//cout<}
}
istream&operator>>(istream&in,Works&w)
{cout<<"输入编号:
";cin>>w.num;
cout<<"输入工人姓名:
";cin>>w.name;
cout<<"输入工人年龄:
";cin>>w.age;
returnin;
}
ostream&operator<<(ostream&out,Works&w)
{out<<"编号:
"<out<<"姓名:
"<out<<"年龄:
"<out<returnout;
}
intmain()
{cout<cout<<"\t\t\t|-------------------------------|\n";
cout<<"\t\t\t||\n";
cout<<"\t\t\t|欢迎使用职工信息表管理系统|\n";
cout<<"\t\t\t||\n";
cout<<"\t\t\t|-------------------------------|\n";
cout<cout<<"\t\t\t+------------------------------+\n";
cout<<"\t\t\t|管理教师信息请按1|\n";
cout<<"\t\t\t|管理工人信息请按2|\n";
cout<<"\t\t\t|退出请按0|\n";
cout<<"\t\t\t+------------------------------+\n";
intchoice;Teachert;Worksw;
cout<<"请输入你的选择:
\n";
cin>>choice;
switch(choice)
{case0:
break;
case1:
t.record();
break;
case2:
w.record();
break;
}
intx;
while
(1)
{x=t.zhucaidan();
if(x==0)
{cout<<"谢谢使用!
"<break;
}
else
switch(x)
{case1:
t.average_age();
cout<<"请按回车键返回主菜单..."<getchar();getchar();
break;
case2:
t.chaxun();
cout<<"请按回车键返回主菜单..."<getchar();getchar();
break;
case3:
t.xichaxun();
cout<<"请按回车键返回主菜单..."<getchar();getchar();
break;