一道C++实验题 求高手解答。(200分求解,对的继续加分)

题:定义一个档案类,包含档案编号,档案名称数据成员,要求:1.分别编写成员函数用于实现对档案信息的输入输出与修改(注:不能修改档案编号)。2.以此档案类为基类公有派生出学... 题:
定义一个档案类,包含档案编号,档案名称数据成员,要求:
1.分别编写成员函数用于实现对档案信息的输入 输出与修改(注:不能修改档案编号)。
2.以此档案类为基类公有派生出学生档案类,其中包含学生的学号、姓名、性别、年龄、3门课程成绩数据:定义成员函数用于实现数据的输入 输出 与修改(注:不能修改学号)。
3.以此档案类为基类公有派生出教师档案类,其中包含教师的教工号 姓名 性别 年龄 工资数据;定义成员函数用于实现数据的输入、输出与修改(注:不能修改教工号)。
4.在主函数中实现对10个学生与10个教师的档案操作(输入 输出 修改)。

请各位高手用基础C++的知识来回答 谢谢....
请发到 w12qew12qe@163.com
展开
 我来答
叶之所思
2009-12-25 · TA获得超过101个赞
知道小有建树答主
回答量:73
采纳率:0%
帮助的人:95.1万
展开全部
//定义一个档案类,包含档案编号,档案名称数据成员,要求:
//1.分别编写成员函数用于实现对档案信息的输入 输出与修改(注:不能修改档案编号)。
//2.以此档案类为基类公有派生出学生档案类,其中包含学生的学号、姓名、性别、年龄、3门课程成绩数据:
//定义成员函数用于实现数据的输入 输出 与修改(注:不能修改学号)。
//3.以此档案类为基类公有派生出教师档案类,其中包含教师的教工号 姓名 性别 年龄 工资数据;
//定义成员函数用于实现数据的输入、输出与修改(注:不能修改教工号)。
//4.在主函数中实现对10个学生与10个教师的档案操作(输入 输出 修改)。

#include<iostream.h>
#include<string.h>
class DangAn{
public:
int number;
char name[10];
public:
DangAn(){}//无参构造函数
DangAn(int _number,char Name[10]){//有函数构造参
strcpy(name,Name);
number=_number;
}
void setDangAn(){//修改档案名的成员函数
char Name[10];
cout<<"请输入修改的档案名称:";
cin>>Name;
strcpy(name,Name);
}
void logIn(){//输入成员函数
cout<<"请输入档案号:";
cin>>number;
cout<<"请输入档案名称:";
cin>>name;
}
void display(){
cout<<"档案编号:"<<number<<endl;
cout<<"档案名称:"<<name<<endl;
}
};
class Student:public DangAn{
private:
int xueHao;
char Name[10];
char Sex[5];
int age;
int score[3];
public:
Student(){}
Student(int _number,char _Name[10],int _xueHao,char _name[10],char _sex[5],
int _age,int score1,int score2,
int score3):DangAn(_number,_Name){
xueHao=_xueHao;
strcpy(Name,_name);
age=_age;
strcpy(Sex,_sex);
score[0]=score1;
score[1]=score2;
score[2]=score3;
}
void setStudent(){

this->setDangAn();//调用父类的修改档案函数

//修改姓名
char name[10];
cout<<"请输入修改的姓名:";
cin>>name;
strcpy(Name,name);

//修改性别
char sex[5];
cout<<"请输入修改的性别:";
cin>>sex;
strcpy(Sex,sex);
//修改年龄
int _age;
cout<<"请输入修改的年龄:";
cin>>_age;
age=_age;
//修改分数
int score1, score2,score3;
cout<<"请输入修改的成绩1:";
cin>>score1;
cout<<"请输入修改的成绩2:";
cin>>score2;
cout<<"请输入修改的成绩3:";
cin>>score3;
score[0]=score1;
score[1]=score2;
score[2]=score3;
}
void Display(){
this->display();//调用父类的显示档案函数
cout<<"学号:"<<xueHao<<endl;
cout<<"姓名:"<<Name<<endl;
cout<<"性别:"<<Sex<<endl;
cout<<"年龄:"<<age<<endl;
cout<<"成绩1:"<<score[0]<<"成绩2:"<<score[1]<<"成绩3:"<<score[2]<<endl;
}
void _logIn(){//输入成员函数
this->logIn();//调用父类的输入档案函数
cout<<"请输入学号:";
cin>>xueHao;
cout<<"请输入姓名:";
cin>>Name;
cout<<"请输入性别:";
cin>>Sex;
cout<<"请输入年龄:";
cin>>age;
cout<<"请输入成绩1:";
cin>>score[0];
cout<<"请输入成绩2:";
cin>>score[1];
cout<<"请输入成绩3:";
cin>>score[2];
}

};
class Teacher:public DangAn{
private:
int jiaoGongHao;
char Name[10];
char Sex[5];
int age;
int gongZi;
public:
Teacher(){}//无参构造函数
Teacher(int _number,char _Name[10],int _jiaoGongHao,char _name[10],char _sex[5],//有参构造函数
int _age,int _gongZi):DangAn(_number,_Name){
jiaoGongHao=_jiaoGongHao;
strcpy(Name,_name);
age=_age;
strcpy(Sex,_sex);
gongZi=_gongZi;
}
void setTeacher(){
this->setDangAn();//调用父类的修改档案函数
//修改姓名
char name[10];
cout<<"请输入修改的姓名:";
cin>>name;
strcpy(Name,name);

//修改性别
char sex[5];
cout<<"请输入修改的性别:";
cin>>sex;
strcpy(Sex,sex);

//修改年龄
int _age;
cout<<"请输入修改的年龄:";
cin>>_age;
age=_age;

//修改工资
int _gongZi;
cout<<"请输入修改的工资:";
cin>>_gongZi;
gongZi=_gongZi;
}
void Display(){//调用父类的显示档案函数
this->display();
cout<<"教工号:"<<jiaoGongHao<<endl;
cout<<"姓名:"<<Name<<endl;
cout<<"性别:"<<Sex<<endl;
cout<<"年龄:"<<age<<endl;
cout<<"工资:"<<gongZi<<endl;
}
void _logIn(){//输入成员函数
this->logIn();//调用父类的输入档案函数
cout<<"请输入教工号:";
cin>>jiaoGongHao;
cout<<"请输入姓名:";
cin>>Name;
cout<<"请输入性别:";
cin>>Sex;
cout<<"请输入年龄:";
cin>>age;
cout<<"请输入工资:";
cin>>gongZi;
}
};
void main()
{
int i,j;
Student s[10];//定义10个学生对象
Teacher t[10];//定义10个老师对象
for(i=0;i<10;i++){//对学生对象进行输入数据
s[i]._logIn();
}
for(j=0;j<10;j++){//对老师对象进行输入数据
t[i]._logIn();
}
for(i=0;i<10;i++){//对学生对象进行输出数据
s[i].Display();
}
for(j=0;j<10;j++){//对老师对象进行输出数据
t[i].Display();
}
for(i=0;i<10;i++){//对学生对象进行修改数据
s[i].setStudent();
}
for(j=0;j<10;j++){//对老师对象进行修改数据
t[i].setTeacher();
}
for(i=0;i<10;i++){//对学生对象进行输出修改后数据
s[i].Display();
}
for(j=0;j<10;j++){//对老师对象进行输出修改后数据
t[i].Display();
}
}
VC6.0下运行没问题
//已经发送过去了~注意查收
pjl110
2009-12-23 · TA获得超过587个赞
知道小有建树答主
回答量:285
采纳率:0%
帮助的人:97.5万
展开全部
又来一个纯手工打磨的。
vs2005下运行没问题!
源程序已经发到你邮箱!
=========下面是代码:注意头文件.h和.cpp文件=============

//////这是头文件doc.h
#pragma once
#include <string.h>
#include <iostream>
#include <iomanip>

#define MAX_GRADE 3
#define MAX_INCOME 1
#define MAX_NAME 256
#define NUM_START 48
#define MAX_DOC 20
#define MAX_TMP 256
enum Sex{MAIL,FEMAIL};

using namespace std;
class Document
{
protected:
int m_SN;
string m_Name;
public:
Document(){}
Document(int _sn,string _name)
{
m_SN = _sn;
m_Name = _name;
}
int Init(int _sn,string _name)
{
m_SN = _sn;
m_Name = _name;
return 1;
}
Document(Document &doc)
{
m_SN = doc.m_SN;
m_Name = doc.m_Name;
}
~Document(){}
public:
int GetDocSN()
{
return m_SN;
}
string GetDocName()
{
return m_Name;
}
int SetDocName(string _name)
{
m_Name =_name;
return 1;
}
};

class StudentDoc:public Document
{
private:
int m_StdNum;
string m_Name;
Sex m_Sex;
int m_Age;
int m_Grade[MAX_GRADE];
public:
StudentDoc(Document &doc,int _stdnum,string _name,Sex _sex,int _age,int *_grade):Document(doc)
{
m_StdNum = _stdnum;
m_Name = _name;
m_Sex = _sex;
m_Age = _age;
for(int i=0;i<MAX_GRADE;i++)
{
m_Grade[i] = _grade[i];
}
}
int Init(Document doc,int _stdnum,string _name,Sex _sex,int _age,int *_grade)
{
m_StdNum = _stdnum;
m_Name = _name;
m_Sex = _sex;
m_Age = _age;
for(int i=0;i<MAX_GRADE;i++)
{
m_Grade[i] = _grade[i];
}
Document::m_SN = doc.GetDocSN ();
Document::m_Name = doc.GetDocName ();
return 1;
}
StudentDoc(){}
~StudentDoc(){};
public:
int GetStdNum()
{
return m_StdNum;
}
Sex GetSex()
{
return m_Sex;
}
int GetAge()
{
return m_Age;
}
string GetName()
{
return m_Name;
}
int* GetGrade()
{
return m_Grade;
}
int SetSex(Sex _sex)
{
m_Sex = _sex;
return 1;
}
int SetName(string _name)
{
m_Name=_name;
return 1;
}
int SetAge(int _age)
{
m_Age = _age;
return 1;
}
int SetGrade(int* _grade)
{
for(int i=0;i<MAX_GRADE;i++)
{
m_Grade[i] = _grade[i];
}
return 1;
}
public:
int Print(bool mdfy=false);
int Modify();
};

class TeacherDoc:public Document
{
private:
int m_TchNum;
string m_Name;
Sex m_Sex;
int m_Age;
int m_Income[MAX_INCOME];
public:
TeacherDoc(Document doc,int _Tchnum,string _name,Sex _sex,int _age,int *_income):Document(doc)
{
m_TchNum = _Tchnum;
m_Name = _name;
m_Sex = _sex;
m_Age = _age;
for(int i=0;i<MAX_INCOME;i++)
{
m_Income[i] = _income[i];
}
}
int Init(Document doc,int _Tchnum,string _name,Sex _sex,int _age,int *_income)
{
m_TchNum = _Tchnum;
m_Name = _name;
m_Sex = _sex;
m_Age = _age;
for(int i=0;i<MAX_INCOME;i++)
{
m_Income[i] = _income[i];
}
Document::m_SN = doc.GetDocSN ();
Document::m_Name = doc.GetDocName ();
return 1;
}
TeacherDoc(){};
~TeacherDoc(){};
public:
int GetTchNum()
{
return m_TchNum;
}
Sex GetSex()
{
return m_Sex;
}
int GetAge()
{
return m_Age;
}
string GetName()
{
return m_Name;
}
int* GetIncome()
{
return m_Income;
}
int SetSex(Sex _sex)
{
m_Sex = _sex;
return 1;
}
int SetName(string _name)
{
m_Name=_name;
return 1;
}
int SetAge(int _age)
{
m_Age = _age;
return 1;
}
int SetIncome(int* _income)
{
for(int i=0;i<MAX_INCOME;i++)
{
m_Income[i] = _income[i];
}
return 1;
}
public:
int Print(bool mdfy=false);
int Modify();
};

////这是cpp文件doc.cpp
#include "Doc.h"
#include <math.h>
#include <time.h>
int Char2Int(char *p,int size)
{
int res=0;
for(int i=0;i<size;i++)
{
int itp=p[i]-48;
res+=(int)itp*pow(10.0,(size-i-1));
}
return res;
}
int StudentDoc::Print(bool mdfy)
{
cout.setf(ios::left);
cout<<"=========学生档案=========="<<endl;
cout<<"档案号:"<<setw(10)<<StudentDoc::GetDocSN ()<<endl;
cout<<"档案名:"<<setw(10)<<StudentDoc::GetDocName ().c_str ()<<endl;
cout<<"学号:"<<setw(10)<<StudentDoc::GetStdNum ()<<endl;
cout<<"姓名:"<<setw(10)<<StudentDoc::GetName ().c_str ()<<endl;
cout<<"年龄:"<<setw(10)<<StudentDoc::GetAge ()<<endl;
if(StudentDoc::GetSex ()==MAIL)
{
cout<<"性别:"<<setw(10)<<"男"<<endl;
}
else
{
cout<<"性别:"<<setw(10)<<"女"<<endl;
}
for(int i=0;i<MAX_GRADE;i++)
{
cout<<"第"<<i+1<<"门成绩:"<<setw(5)<<StudentDoc::GetGrade ()[i]<<endl;
}
cout<<"=========档案结束=========="<<endl;
cout<<endl;
if(mdfy==false)
{
return 0;
}
char sel=0;
cout<<"是否对档案进行修改y/n(y):";
cin>>sel;
cin.get();
switch(sel)
{
case 'y':
Modify();
break;
case 'n':
return 0;
default:
Modify();
break;
}
return 1;
}

int StudentDoc::Modify()
{
char stp[MAX_NAME];
int itp[MAX_GRADE];
bool isnum=true;
cout<<"=========开始档案修改=========="<<endl;
cout<<"注意回车键表示不修改!"<<endl;
cout<<"<不可修改>档案号:"<<setw(10)<<StudentDoc::GetDocSN ()<<endl;
cout<<"新档案名("<<GetDocName ().c_str ()<<"):";
cin.getline (stp,MAX_NAME);
if(stp[0]!=0)
{
StudentDoc::SetDocName (stp);
}
cout<<"<不可修改>学号:"<<setw(10)<<StudentDoc::GetStdNum ()<<endl;
cout<<"新姓名("<<StudentDoc::GetName ().c_str ()<<"):";
cin.getline (stp,MAX_NAME);
if(stp[0]!=0)
{
StudentDoc::SetName (stp);
}
cout<<"新年龄("<<StudentDoc::GetAge ()<<"):";
cin.getline (stp,MAX_NAME);
for(int i=0;i<strlen(stp);i++)
{
if(stp[i]<NUM_START||stp[i]>NUM_START+9)
{
isnum = false;
break;
}
}
if(stp[0]!=0 && isnum==true)
{
itp[0] = Char2Int(stp,strlen(stp));
StudentDoc::SetAge (itp[0]);
}
isnum = true;
cout<<"男输入0,女输入1"<<endl;
if(StudentDoc::GetSex ()==MAIL)
{
cout<<"新性别(男):";
}
else
{
cout<<"新性别(女):";
}
cin.getline (stp,MAX_NAME);
for(int i=0;i<strlen(stp);i++)
{
if(stp[i]<NUM_START||stp[i]>NUM_START+1)
{
isnum = false;
break;
}
}
if(stp[0]!=0 && isnum==true)
{
itp[0] = Char2Int(stp,strlen(stp));
StudentDoc::SetSex ((Sex)itp[0]);
}
isnum = true;
for(int i=0;i<MAX_GRADE;i++)
{
cout<<"新第"<<i+1<<"门成绩("<<StudentDoc::GetGrade ()[i]<<"):";
cin.getline (stp,MAX_NAME);
for(int i=0;i<strlen(stp);i++)
{
if(stp[i]<NUM_START||stp[i]>NUM_START+9)
{
isnum = false;
break;
}
}
if(stp[0]!=0 && isnum==true)
{
itp[i] = Char2Int(stp,strlen(stp));
}
else
{
itp[i] = GetGrade ()[i];
}

isnum = true;
}
StudentDoc::SetGrade (itp);
cout<<"=========档案修改结束=========="<<endl;
return 1;
}
int TeacherDoc::Print(bool mdfy)
{
cout.setf(ios::left);
cout<<"=========教工档案=========="<<endl;
cout<<"档案号:"<<setw(10)<<TeacherDoc::GetDocSN ()<<endl;
cout<<"档案名:"<<setw(10)<<TeacherDoc::GetDocName ().c_str ()<<endl;
cout<<"学号:"<<setw(10)<<TeacherDoc::GetTchNum ()<<endl;
cout<<"姓名:"<<setw(10)<<TeacherDoc::GetName ().c_str ()<<endl;
cout<<"年龄:"<<setw(10)<<TeacherDoc::GetAge ()<<endl;
if(TeacherDoc::GetSex ()==MAIL)
{
cout<<"性别:"<<setw(10)<<"男"<<endl;
}
else
{
cout<<"性别:"<<setw(10)<<"女"<<endl;
}
for(int i=0;i<MAX_INCOME;i++)
{
cout<<"第"<<i+1<<"笔收入:"<<setw(5)<<TeacherDoc::GetIncome ()[i]<<endl;
}
cout<<"=========档案结束=========="<<endl;
cout<<endl;
if(mdfy==false)
{
return 0;
}
char sel=0;
cout<<"是否对档案进行修改y/n(y):";
cin>>sel;
cin.get();
switch(sel)
{
case 'y':
Modify();
break;
case 'n':
return 0;
default:
Modify();
break;
}
return 1;
}
int TeacherDoc::Modify()
{
char stp[MAX_NAME];
int itp[MAX_INCOME];
bool isnum=true;
cout<<"=========开始档案修改=========="<<endl;
cout<<"注意回车键表示不修改!"<<endl;
cout<<"<不可修改>档案号:"<<setw(10)<<TeacherDoc::GetDocSN ()<<endl;
cout<<"新档案名("<<GetDocName ().c_str ()<<"):";
cin.getline (stp,MAX_NAME);
if(stp[0]!=0)
{
TeacherDoc::SetDocName (stp);
}
cout<<"<不可修改>工号:"<<setw(10)<<TeacherDoc::GetTchNum ()<<endl;
cout<<"新姓名("<<TeacherDoc::GetName ().c_str ()<<"):";
cin.getline (stp,MAX_NAME);
if(stp[0]!=0)
{
TeacherDoc::SetName (stp);
}
cout<<"新年龄("<<TeacherDoc::GetAge ()<<"):";
cin.getline (stp,MAX_NAME);
for(int i=0;i<strlen(stp);i++)
{
if(stp[i]<NUM_START||stp[i]>NUM_START+9)
{
isnum = false;
break;
}
}
if(stp[0]!=0 && isnum==true)
{
itp[0] = Char2Int(stp,strlen(stp));
TeacherDoc::SetAge (itp[0]);
}
isnum = true;
cout<<"男输入0,女输入1"<<endl;
if(TeacherDoc::GetSex ()==MAIL)
{
cout<<"新性别(男):";
}
else
{
cout<<"新性别(女):";
}
cin.getline (stp,MAX_NAME);
for(int i=0;i<strlen(stp);i++)
{
if(stp[i]<NUM_START||stp[i]>NUM_START+1)
{
isnum = false;
break;
}
}
if(stp[0]!=0 && isnum==true)
{
itp[0] = Char2Int(stp,strlen(stp));
TeacherDoc::SetSex ((Sex)itp[0]);
}
isnum = true;
for(int i=0;i<MAX_INCOME;i++)
{
cout<<"新第"<<i+1<<"笔收入("<<TeacherDoc::GetIncome ()[i]<<"):";
cin.getline (stp,MAX_NAME);
for(int i=0;i<strlen(stp);i++)
{
if(stp[i]<NUM_START||stp[i]>NUM_START+9)
{
isnum = false;
break;
}
}
if(stp[0]!=0 && isnum==true)
{
itp[i] = Char2Int(stp,strlen(stp));
}
else
{
itp[i] = GetIncome ()[i];
}

isnum = true;
}
TeacherDoc::SetIncome (itp);
cout<<"=========档案修改结束=========="<<endl;
return 1;
}

Document doc[MAX_DOC];
TeacherDoc tchr[MAX_DOC/2];
StudentDoc stdt[MAX_DOC/2];

void Init()
{
srand(::time(NULL));
for(int i=0;i<MAX_DOC;i++)
{

int itp[MAX_GRADE+3];
char ich[MAX_TMP];
for(int i=0;i<MAX_TMP;i++)
{
ich[i]='\0';
}
string stp[MAX_DOC];
sprintf(ich,"%d",i);
stp[0]="第";
stp[0]+=ich;
stp[0]+="号档案";
doc[i].Init (i,stp[0]);
if(i<MAX_DOC/2)
{
stp[0]="学生";
stp[0]+=ich;
itp[4]=rand()%2;
while(1)
{
itp[5]=rand()%25;
if(itp[5]>18)
{
break;
}
}
for(int i=0;i<MAX_GRADE;i++)
{
itp[i]=rand()%100;
}
stdt[i].Init(doc[i],i+200900,stp[0],(Sex)itp[4],itp[5],itp);
}
else
{
stp[0]="教工";
stp[0]+=ich;
itp[4]=rand()%2;
while(1)
{
itp[5]=rand()%70;
if(itp[5]>24)
{
break;
}
}
for(int i=0;i<MAX_INCOME;i++)
{
itp[i]=rand()%10000;
if(itp[i]>3000)
{
break;
}
}
tchr[i-MAX_DOC/2].Init(doc[i],i+198400,stp[0],(Sex)itp[4],itp[5],itp);
}
}
}
void main()
{
Init();
while(1)
{
char sel = 0;
int iinput =0;
char input[MAX_TMP];
for(int i=0;i<MAX_TMP;i++)
{
input[i]='\0';
}
cout<<setw(30)<<"档案管理系统"<<endl;
cout<<"1、查阅档案;"<<endl;
cout<<"2、修改档案;"<<endl;
cout<<"3、退出。"<<endl;
cout<<"请选择:";
cin>>sel;
cin.get ();
cin.clear ();
if(sel=='3')
{
break;
}
switch(sel)
{
case '1':
cout<<"输入档案号(0~19):";
cin>>input;
cin.get ();
cin.clear ();
iinput = Char2Int(input,strlen(input));
if(iinput < MAX_DOC/2)
{
stdt[iinput].Print();
}
else
{
tchr[iinput-MAX_DOC/2].Print();
}
break;
case '2':
cout<<"输入档案号(0~19):";
cin>>input;
cin.get ();
cin.clear ();
iinput = Char2Int(input,strlen(input));
if(iinput < MAX_DOC/2)
{
stdt[iinput].Print(true);
}
else
{
tchr[iinput-MAX_DOC/2].Print(true);
}
break;
case '3':
break;
default:
break;
}

}
return;
}
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式