- 38.50 KB
- 2021-04-14 发布
- 1、本文档由用户上传,淘文库整理发布,可阅读全部内容。
- 2、本文档内容版权归属内容提供方,所产生的收益全部归内容提供方所有。如果您对本文有版权争议,请立即联系网站客服。
- 3、本文档由用户上传,本站不保证质量和数量令人满意,可能有诸多瑕疵,付费之前,请仔细阅读内容确认后进行付费下载。
- 网站客服QQ:403074932
实训总结报告
实训总结报告
实训总结报告
实训总结报告
实训总结报告
1、目的:
(1)掌握面向对象设计开发的基本思想和方法,培养学生在已有的知识基础上进一步获取新知识的能力,提高分析问题和解决问题的能力。
(2)进一步巩固《面向对象程序设计》课程中所学到的知识,熟练掌握C++语言程序设计,加强对VC++编程环境的使用能力,掌握VC++编程环境中的调试功能,增强实际编程能力。
(3)培养和提高逻辑思维、抽象思维和统筹规划能力,培养独立完成程序设计开发的工作能力。为今后从事专业性软件开发工作打下基础。
2、 功能
通过将不同类型的人员设计成相应的类,完成的人员的管理。
3、 系统概述
学校的人员包括学生、职工;职工又分为教师和行政人员;在职进修教师又具备学生和教师的属性和行为。
a) 人员具有姓名、年龄、性别、地址和人员类别等属性,有显示属性的功能和设置属性的功能。
b) 学生具有人员的属性和行为,此外,添加学号、成绩属性。具有的行为有:设置属性的函数:让用户能够通过键盘的输入设置除了成绩之外的基本属性;录入成绩:输入学生的各门成绩;显示:显示基本属性和他的平均成绩。
c) 职工具有人员的属性和行为,此外,添加职工号、职称和工资属性。
d) 教师具有职工的属性和行为,此外,添加教研室、教授的课程属性。具有的行为有:设置属性的函数:让用户能够通过键盘的输入设置除了课程信息之外的基本属性;录入课程:输入教师所教的各门成绩;显示:显示基本属性。
e) 行政人员具有职工的属性和行为,此外,添加办公室属性。
f) 在职进修教师具有教师与学生的属性和行为,此外,添加进修时间,工作单位属性。
通过实现此系统,让我综合运用所学知识,掌握面向对象设计开发的基本思想和方法和C++的编程思想来完成简单的面向对象的程序设计。让我在已有的知识基础上进一步获取新知识的能力,提高分析问题、解决问题和独立完成程序设计开发的工作能力。为今后从事专业性软件开发工作打下基础。
类的实现
编程实现上面类的设计。
主程序中的验证
创建对象,检验类的功能是否能够实现。
1、遇到的困难、解决办法及收获:
①各类属性的实现。
利用对象数组即方便又能固定调用哪个属性。在构造函数中定义属性类型,利用对象数组调用。
②对象数组中字符串的赋值。
分配(new实现)一个char型变量长度加一的字符串,再利用拷贝函数拷贝原变量并放在name里,如:
name=new char[strlen(na)+1];strcpy(name,na);
③因为没有给原带参构造函数的形参赋值,主函数中不能声明类的无参对象。
在定义一个无参构造函数,如:
person(){}
④在派生类带参构造函数与基类带参构造函数所带参数不同时没有对基类构造函数的参数初始化。
构造函数无法被继承,当派生类带参构造函数与基类带参构造函数所带参数不同时,要在派生类构造函数中对基类构造函数的参数进行初始化,如:
worker(int num,char *v,int p,char *na,int a,char *s,char *ad,char *l):person(na,a,s,ad,l){}
⑤平均分的实现。
利用对象数组正确调用分数属性再利用返回值为float的成员函数实现平均分,如:
float getaverage(student st[],int i){
int a=st[i].mathscore;
int b=st[i].cscore;
return st[i].average=(a+b)/2;}
⑥正确输入和调用属性。
利用p[n].属性名实现属性的各种行为,如:
cin p[n+1].age;
cout 姓名: p[n].name endl;
⑦switch语句总执行完一个case后还继续执行。
加入break语句跳出switch语句。
2、 程序中还需要改进的地方。
姓名,年龄,地址等属性限制的实现。
附件:源程序
#include iostream.h
#include string
using namespace std;
class person{
protected:
char *name;
int age;
char *sex;
char *address;
char *lb;
public:
person(char *na,int a,char *s,char *ad,char *l){//对象数组
name=new char[strlen(na)+1];
strcpy(name,na);
age
=a;
sex=new char[strlen(s)+1];
strcpy(sex,s);
address=new char[strlen(ad)+1];
strcpy(address,ad);
lb=new char[strlen(l)+1];
strcpy(lb,l);}
person(){}//无参构造函数,方便声明无参对象
virtual void getinf(person p[],int n){
char na1[128];
cout 姓名:
cin na1;
p[n].name=new char[strlen(na1)+1];//分配na1长度+1的字符串
strcpy(p[n].name,na1);//拷贝字符串
cout endl;
cout 年龄:
cin p[n+1].age;
cout endl;
char s1[2];
cout 性别:(n:男,w:女)
cin s1;
p[n+2].sex=new char[strlen(s1)+1];
strcpy(p[n+2].sex,s1);
cout endl;
char ad1[128];
cout 地址:
cin ad1;
p[n+3].address=new char[strlen(ad1)+1];
strcpy(p[n+3].address,ad1);
cout endl;
}
virtual void disp(person p[],int n){//有参虚函数,对象数组输出的事现
cout 姓名: p[n].name endl;
cout 年龄: p[n+1].age endl;
cout 性别: p[n+2].sex endl;
cout 地址: p[n+3].address endl;}
};
class student:public virtual person
{
protected:
int number;
int mathscore,cscore;
float average;
public:
student(int nu,int ms,int cs,float av,char *na,int a,char *s,char *ad,char *l):person(na,a,s,ad,l){//构造函数无法被继承,在派生类构造函数带参数与基类构造函数所带参数不同时要先对基类构造函数初始化
number=nu;mathscore=ms;cscore=cs;average=av;}
student(){}
virtual void getvalue(student st[],int i){
cout 学号:
cin st[i].number;
cout endl;}
void getscore(student st[],int i){
cout 数学成绩:
cin st[i].mathscore;
cout endl;
cout C++成绩:
cin st[i].cscore;
cout endl;}
float getaverage(student st[],int i){//平均分的实现
int a=st[i].mathscore;
int b=st[i].cscore;
return st[i].average=(a+b)/2;}
void show(student st[],int i){
cout 学号: st[i].number endl;
}
virtual void show1(student st[],int i){
st[i].show(st,i);
cout 数学成绩: st[i].mathscore endl;
cout C++成绩: st[i].cscore endl;
st[i].getaverage(st,i);
cout 平均成绩: st[i].average endl;
}
};
class worker:public virtual person
{
protected:
int number;
float pay;
char *value;
public:
worker(int num,char *v,int p,char *na,int a,char *s,char *ad,char *l):person(na,a,s,ad,l){
number=num;
value=new char[strlen(v)+1];
strcpy(value,v);
pay=p;}
worker(){}
void getvalue(worker w[],int i){
cout 职工号:
cin w[i].number;
cout endl;
char v1[128];
cout 职称:
cin v1;
w[i].value=new char[strlen(v1)+1];
strcpy(w[i].value,v1);
cout endl;
cout 工资:
cin w[i].pay;
cout endl;
}
void show(worker w[],int i){
cout 职工号: w[i].number endl;
cout 职称: w[i].value endl;
cout 工资: w[i].pay endl;
}
};
class teacher:public virtual worker,public virtual person{
protected:
char *kemu;
int chengji;
char *office;
public:
teacher(char *of,char *ke,int ch,int num,char *v,int p,char *na,int a,char *s,char *ad,char *l):worker(num,v,p,na,a,s,ad,l),person(na,a,s,ad,l){
office=new char[strlen(of)+1];
strcpy(office,of);
kemu=new char[strlen(ke)+1];
strcpy(kemu,ke);
chengji=ch;}
teacher(){}
void getmessage(teacher t[],int i) {
char of1[128];
cout 教研室:
cin of1;
t[i].office=new char[strlen(of1)+1];
strcpy(t[i].office,of1);
cout endl;
char
ke1[128];
cout 科目:
cin ke1;
t[i].kemu=new char[strlen(ke1)+1];
strcpy(t[i].kemu,ke1);
cout endl;
cout 成绩:
cin t[i].chengji;
cout endl;
}
void show1(teacher t[],int i){
cout 教研室: t[i].office endl;
cout 科目: t[i].kemu endl;
cout 成绩: t[i].chengji endl;
}
};
class employee:public virtual worker,public virtual person{
private:
char *office;
public:
employee(char *of,int num,char *v,int p,char *na,int a,char *s,char *ad,char *l):worker(num,v,p,na,a,s,ad,l),person(na,a,s,ad,l){
office=new
char[strlen(of)+1];
strcpy(office,of);
}
employee(){}
void getmessage(employee e[],int i) {
char of1[128];
cout 教研室:
cin of1;
e[i].office=new char[strlen(of1)+1];
strcpy(e[i].office,of1);
cout endl;
}
void show1(employee e[],int i){
cout 教研室: e[i].office endl;
}
};
class jingx:public virtual student,public virtual teacher,public virtual worker,public virtual person{
private:
int time;
char *danwei;
public:
jingx(int ti,char *da,int nu,int ms,int cs,float av,char *of,char *ke,int ch,int num,char *v,int p,char *na,int a,char *s,char *ad,char
*l):student(nu,ms,cs,av,na,a,s,ad,l),teacher(of,ke,ch,num,v,p,na,a,s,ad,l),worker(num,v,p,na,a,s,ad,l),person(na,a,s,ad,l){
time=ti;
danwei=new char[strlen(da)+1];
strcpy(danwei,da);}
jingx(){}
void getmessage1(jingx j[],int i){
cout 进修时间:
cin j[i].time;
cout endl;
char da1[128];
cout 单位属性:
cin da1;
j[i].danwei=new char[strlen(da1)+1];
strcpy(j[i].danwei,da1);
cout endl;
}
void show2(jingx j[],int i) {
cout 进修时间: j[i].time endl;
cout 单位属性: j[i].danwei endl;
}
};
int
i;
person p[1]; student st[1]; worker wo[1]; teacher te[1]; employee em[1]; jingx jx[1];
void main(){
cout 请选择人员类别: endl;
cout 1、普通人 2、学生 3、学生及成绩 4、员工 5、教师 6、行政人员 7、在职进修教师 endl;
cin i;
cout 请依次录入信息 endl;
switch(i){//录入信息种类选择的实现
case 1:{
p[1].getinf(p,1);
cout ************************************* endl;
p[1].disp(p,1);
break;}//要有break语句否则将执行case2
case 2:{
st[1].getvalue(st,1);
p[1].getinf(p,1);
cout ************************************* endl;
st[1].show(st,1);
p[1].disp(p,1);
break;}
case 3:{
st[1].getvalue(st,1);
p[1].getinf(p,1);
st[1].getscore(st,1);
cout ************************************* endl;
st[1].show1(st,1);
p[1].disp(p,1);
break;}
case 4:{
wo[1].getvalue(wo,1);
p[1].getinf(p,1);
cout ************************************* endl;
wo[1].show(wo,1);
p[1].disp(p,1);
break;}
case 5:{
te[1].getmessage(te,1);
p[1].getinf(p,1);
wo[1].getvalue(wo,1);
cout ************************************* endl;
te[1].show1(te,1);
p[1].disp(p,1);
wo[1].show(wo,1);
break;}
case
6:{
em[1].getmessage(em,1);
p[1].getinf(p,1);
wo[1].getvalue(wo,1);
cout ************************************* endl;
em[1].show1(em,1);
p[1].disp(p,1);
wo[1].show(wo,1);
break;}
case 7:{
jx[1].getmessage1(jx,1);
te[1].getmessage(te,1);
st[1].getvalue(st,1);
wo[1].getvalue(wo,1);
p[1].getinf(p,1);
st[1].getscore(st,1);
cout ************************************* endl;
jx[1].show2(jx,1);
p[1].disp(p,1);
te[1].show1(te,1);
wo[1].show(wo,1);
st[1].show1(st,1);
break;}
default :
cout 输入错误! endl;
}
}
《》
实训总结报告