教师课程管理系统.docx
《教师课程管理系统.docx》由会员分享,可在线阅读,更多相关《教师课程管理系统.docx(26页珍藏版)》请在冰豆网上搜索。
教师课程管理系统
《C++程序设计》
综合项目报告
项目名称:
教师课程管理系统
专业:
软件
班级:
软件9021
项目成员:
孙毅,周文亮,马丽莉
报告日期:
2010年12月23日
一、设计任务
①设计一个简单的教师课程管理系统能按课程名字或者老师编号显示、查找、增加、删除和保存各种课程和老师信息。
②能够熟练掌握C++语言的基本知识和技能。
③基本掌握面向对象程序设计的基本思路和方法。
④能够利用所学的基本知识和技能,解决简单的面向对象程序设计问题。
⑤学习并掌握程序开发的一般步骤和方法。
⑥熟悉异常处理的特点和用法;
⑦理解面向对象的思想,熟悉类、对象、继承及多态性概念;
二、系统分析
1)需求分析
在现代信息社会里,随着个人电脑的普及,简单的教师课程管理系统不仅可以减轻统计的操作负担,而且更明了,更有效的把课程,老师,班级联系在一起,思路明了,管理,查询,修改方便。
高效省时。
2)功能分析
①课程编号在生成课程信息时同时生成,每输入一个课程信息编号顺序加1。
②程序对部分课程有提升级别的功能。
③能按课程名字或者老师编号显示、查找、增加、删除和保存各种课程和老师信息。
3)性能分析
①硬件环境。
处理器:
InterCR300或更高。
内存:
128M(建议196MB)。
硬盘空间:
20MB。
②软件环境。
操作系统:
WindowsXP/Windows7。
支持环境:
MicrosoftVisualStudio6.0
4)结构模块分析
1:
类的层次图
2:
程序流程图
否
三、系统总体设计或详细设计
1.课程类
//课程基类
classCT
{
friendclassCTManage;
public:
CT(){};
~CT(){};
CT(CourseInforCoIn,TeacherInforTeIn)//构造函数
{CI=CoIn;TI=TeIn;}
voidDisplay();//显示信息
CourseInforGetCI(){returnCI;}
protected:
CourseInforCI;//课程信息
TeacherInforTI;//教师信息
};
//公共基础课
classPublicBC:
publicCT
{
public:
PublicBC(){};
~PublicBC(){};
PublicBC(CourseInforCoIn,TeacherInforTeIn):
CT(CoIn,TeIn){}//构造函数
voidCalcuCPay();//计算课酬
};
//专业基础课
classProfessionBC:
publicCT
{
public:
ProfessionBC(){};
~ProfessionBC(){};
ProfessionBC(CourseInforCoIn,TeacherInforTeIn):
CT(CoIn,TeIn){}//构造函数
voidCalcuCPay();//计算课酬
};
//专业课
classProCourse:
publicCT
{
public:
ProCourse(){};
~ProCourse(){};
ProCourse(CourseInforCoIn,TeacherInforTeIn):
CT(CoIn,TeIn){}//构造函数
voidCalcuCPay();//计算课酬
};
//公选课
classPubCourse:
publicCT
{
public:
PubCourse(){};
~PubCourse(){};
PubCourse(CourseInforCoIn,TeacherInforTeIn):
CT(CoIn,TeIn){}//构造函数
voidCalcuCPay();//计算课酬
};
2.教师课程管理类
templateclassCTManage
{
public:
CTManage(){}
~CTManage(){};
CTManage(TypeCTInf){CTI=CTInf;}//构造函数
voidAddCourse(inti);//课程添加
voidSaveCourse(constchar*filename);//课程保存
voidSearchCourse(constchar*filename,char*Cname);//课程查询
voidDeleteCourse(constchar*filename,char*Cname);//课程移除
voidCourseDisplay();//课程显示
TypeGetCTI(){returnCTI;}
intGetMaxCID(constchar*filename);
private:
TypeCTI;//课程类对象
intMaxCID;
};
四:
调试信息
1:
进入程序界面
2:
输入数字2选择专业基础课
3:
选择1添加课程输入课程信息
4:
返回查询课程
5:
返回删除课程
6:
确认删除课程
五:
程序代码
(1)menu.h(显示程序主界面)
#ifndefMENU_H
#defineMENU_H
voidmenu1()
{
cout<cout<cout<<"\t\t\t\t【教师课程管理系统】"<cout<cout<cout<<"\t\t[1]{公共基础课}"<cout<cout<<"\t\t[2]{专业基础课}"<cout<cout<<"\t\t[3]{专业课}"<cout<cout<<"\t\t[4]{公共课}"<cout<cout<<"\t\t【按Q键退出系统】"<cout<cout<<"\t\t请选择课程回车进入下一页面:
";
}
voidmenu2()
{
cout<cout<cout<cout<cout<<"\t\t[1]{课程添加}"<cout<cout<<"\t\t[2]{课程查询}"<cout<cout<<"\t\t[3]{课程删除}"<cout<cout<cout<<"\t\t【按R键回到主菜单】"<cout<cout<<"\t\t请选择操作回车进入下一页面:
";
}
#endif
(2)course(课程类体)
#ifndefCOURSE_H
#defineCOURSE_H
templateclassCTManage;
/////////////////////////////////////////////////////////////
//课程信息结构体
structCourseInfor
{
intCourseID;//课程编号
charCourseNam[20];//课程名称
intGrad;//课程等级
intHours;//课时
doubleBasePay;//基本课酬
};
//设置课程信息
voidSetCI(CourseInfor&CI,intID,char*CN,intgrad,inthour,doublepay)
{CI.CourseID=ID;strcpy(CI.CourseNam,CN);
CI.Grad=grad;CI.Hours=hour;CI.BasePay=pay;}
/////////////////////////////////////////////////////////////
//教师信息结构体
structTeacherInfor
{
intTeacherID;//教师编号
charTeacherNam[10];//教师姓名
intClassID;//所授课班编号
intClassNum;//班级数
doubleCoursePay;//课酬
};
//设置教师信息
voidSetTI(TeacherInfor&TI,intID,char*TN,intCID,intCNum,doublepay)
{TI.TeacherID=ID;strcpy(TI.TeacherNam,TN);
TI.ClassID=CID;TI.ClassNum=CNum;TI.CoursePay=pay;}
/////////////////////////////////////////////////////////////
//课程基类
classCT
{
friendclassCTManage;
public:
CT(){};
~CT(){};
CT(CourseInforCoIn,TeacherInforTeIn)//构造函数
{CI=CoIn;TI=TeIn;}
voidDisplay();//显示信息
CourseInforGetCI(){returnCI;}
protected:
CourseInforCI;//课程信息
TeacherInforTI;//教师信息
};
voidCT:
:
Display()//显示信息
{
cout<<"\t课程名称:
"<cout<<"\t课程编号:
"<cout<<"\t课程等级:
"<cout<<"\t课时:
"<cout<<"\t基本课酬:
"<cout<<"\t教师姓名:
"<cout<<"\t教师编号:
"<cout<<"\t班级编号:
"<cout<<"\t班级数目:
"<cout<<"\t课酬:
"<}
/////////////////////////////////////////////////////////////
//公共基础课
classPublicBC:
publicCT
{
public:
PublicBC(){};
~PublicBC(){};
PublicBC(CourseInforCoIn,TeacherInforTeIn):
CT(CoIn,TeIn){}//构造函数
voidCalcuCPay();//计算课酬
};
voidPublicBC:
:
CalcuCPay()
{
doublea=1.1,b=1.2;
if(1<=TI.ClassNum&&TI.ClassNum<=3)//班级数目1—3
{TI.CoursePay=CI.BasePay*TI.ClassNum;}
if(4<=TI.ClassNum&&TI.ClassNum<=6)//班级数目4—6
{TI.CoursePay=CI.BasePay*TI.ClassNum*a;}
if(TI.ClassNum>6)//班级数目大于6
{TI.CoursePay=CI.BasePay*TI.ClassNum*b;}
}
/////////////////////////////////////////////////////////////
//专业基础课
classProfessionBC:
publicCT
{
public:
ProfessionBC(){};
~ProfessionBC(){};
ProfessionBC(CourseInforCoIn,TeacherInforTeIn):
CT(CoIn,TeIn){}//构造函数
voidCalcuCPay();//计算课酬
};
voidProfessionBC:
:
CalcuCPay()
{
doublea=1.2;
TI.CoursePay=CI.BasePay*TI.ClassNum*a;
}
/////////////////////////////////////////////////////////////
//专业课
classProCourse:
publicCT
{
public:
ProCourse(){};
~ProCourse(){};
ProCourse(CourseInforCoIn,TeacherInforTeIn):
CT(CoIn,TeIn){}//构造函数
voidCalcuCPay();//计算课酬
};
voidProCourse:
:
CalcuCPay()
{
doublea=1.2;
TI.CoursePay=CI.BasePay*TI.ClassNum*a;
}
/////////////////////////////////////////////////////////////
//公选课
classPubCourse:
publicCT
{
public:
PubCourse(){};
~PubCourse(){};
PubCourse(CourseInforCoIn,TeacherInforTeIn):
CT(CoIn,TeIn){}//构造函数
voidCalcuCPay();//计算课酬
};
voidPubCourse:
:
CalcuCPay()
{
TI.CoursePay=CI.BasePay*TI.ClassNum;
}
#endif
(3)CTManage()
#ifndefCTMANAGE_H
#defineCTMANAGE_H
#include
#include"course.h"
templateclassCTManage
{
public:
CTManage(){}
~CTManage(){};
CTManage(TypeCTInf){CTI=CTInf;}//构造函数
voidAddCourse(inti);//课程添加
voidSaveCourse(constchar*filename);//课程保存
voidSearchCourse(constchar*filename,char*Cname);//课程查询
voidDeleteCourse(constchar*filename,char*Cname);//课程移除
voidCourseDisplay();//课程显示
TypeGetCTI(){returnCTI;}
intGetMaxCID(constchar*filename);
private:
TypeCTI;//课程类对象
intMaxCID;
};
template
voidCTManage:
:
AddCourse(inti)//课程添加
{
intCoID=i,TID,grad,ClaID,Hour,CNum;
charCN[20],TN[10];
doubleBP,CP=0;
CourseInforCIf;//课程信息
TeacherInforTIf;//教师信息
cout<<"输入课程名称:
";cin>>CN;
cout<<"输入课程等级:
";cin>>grad;
cout<<"输入课时:
";cin>>Hour;
cout<<"输入基本课酬:
";cin>>BP;
cout<<"输入教师姓名:
";cin>>TN;
cout<<"输入教师编号:
";cin>>TID;
cout<<"输入教室编号:
";cin>>ClaID;
cout<<"输入班级数目:
";cin>>CNum;
SetCI(CIf,CoID,CN,grad,Hour,BP);
SetTI(TIf,TID,TN,ClaID,CNum,CP);
TypeCTIf(CIf,TIf);//构造类对象
CTIf.CalcuCPay();//计算教师课酬
CTI=CTIf;//把课程类对象赋给私有成员
}
template
intCTManage:
:
GetMaxCID(constchar*filename)
{
fstreamfile;
TypeCTIf;
file.open(filename,ios:
:
in|ios:
:
out|ios:
:
binary);
file.seekg(0,ios:
:
beg);
file.read((char*)&CTIf,sizeof(CTIf));
longlength=sizeof(CTIf);
file.seekg(0,ios:
:
end);
longendoffset=file.tellg();
if(endoffset==0)
{MaxCID=0;}
else
{
file.seekg(endoffset-length,ios:
:
beg);
file.read((char*)&CTIf,sizeof(CTIf));
MaxCID=CTIf.GetCI().CourseID;
}
returnMaxCID;
}
template
voidCTManage:
:
SaveCourse(constchar*filename)//课程保存
{
fstreamfile;//文件对象
file.open(filename,ios:
:
in|ios:
:
out|ios:
:
binary);//打开文件
file.seekp(0,ios:
:
end);//定位到文件尾
file.write((char*)&CTI,sizeof(CTI));//把课程信息写入文件
file.clear();
file.close();//关闭文件
}
template
voidCTManage:
:
SearchCourse(constchar*filename,char*Cname)//课程查询
{
fstreamfile;//文件对象
TypeCTIf;//课程对象
inttag=1;//查找标志,1为查找失败,0尾查找成功
file.open(filename,ios:
:
in|ios:
:
out|ios:
:
binary);
file.seekg(0,ios:
:
end);
longEndoffset=file.tellg();//取文件尾位置
if(Endoffset==0){cout<<"文件为空!
"<file.clear();
file.seekg(0,ios:
:
beg);//定位到文件头
while(Endoffset!
=file.tellg())//不是文件尾时读取文件
{
file.read((char*)&CTIf,sizeof(CTIf));
if(!
strcmp(CTIf.GetCI().CourseNam,Cname))
{CTI=CTIf;tag=0;break;}//找到课程,标志置0
}
if(tag==1)
{cout<<"未找到匹配的课程,请确认!
"<else
{cout<<"查找成功!
"<}
template
voidCTManage:
:
DeleteCourse(constchar*filename,char*Cname)//删除课程
{
fstreamfile;
TypeCTIf[20];//课程对象数组
inti=0,tag=1;
file.open(filename,ios:
:
in|ios:
:
out|ios:
:
binary);
file.seekg(0,ios:
:
end);
longEndoffset=file.tellg();
file.clear();
file.seekg(0,ios:
:
beg);
while(Endoffset!
=file.tellg())//读取文件
{
file.read((char*)&CTIf[i],sizeof(CTIf[i]));
if(!
strcmp(CTIf[i].GetCI().CourseNam,Cname))
{i--;tag=0;}//读到要删除的文件,跳过
file.clear();
i++;
}
file.close();
file.open(filename,ios:
:
trunc|ios:
:
binary);//清空文件
file.close();
file.open(filename,ios:
:
in|ios:
:
out|ios:
:
binary);
file.seekp(0,ios:
:
beg);
for(intj=0;j
{
file.write((char*)&CTIf[j],sizeof(CTIf[j]));
file.clear();
}
file.close();//关闭文件
if(tag==1)
{cout<<"系统无该课程,无需删除!
"<else
{cout<<"该课程已成功删除!
"<}
template
voidCTManage:
:
CourseDisplay()//课程显示
{
CTI.Display();//输出信息
}
#endif
(4)main(主程序)
#include
#include
#include
#include"menu.h"
#include"CTManage.h"