《面向对象程序设计》课程设计指导书一、课程设计目的通过本课程设计,培养上机动手能力,使学生巩固《面向对象程序设计》课程学习的内容,掌握工程软件设计的基本方法,强化上机动手能力,闯过编程关。
二、课程设计题目0、人事管理系统1、物业管理系统2、客房管理系统3、学生管理系统4、民航订票系统5、商场销售管理系统6、通讯录7、图书馆管理系统8、商场(工厂)库存管理系统9、“一二九”合唱评委打分系统学生课设选题根据学号的尾数确定。
(例学号为17号的学生做7号题目)三、课程设计任务1、任务:在两周内独立正确完成至少1道题目。
2、学生完成课设后,向指导老师提出答辩申请。
答辩时要检查的内容为:(1) 课程设计纸质文档;(2) 课程设计源代码及其运行结果;(3) 老师提出相关问题,学生对问题进行作答。
3、时间:指导:第十六,十七周。
答辩时间:第十七周四、课程设计考核方式课程设计成绩评定的依据有设计文档资料、具体实现设计方案的程序及课程设计考勤登记表,其中平时成绩占总成绩的30%。
优(90分以上):按要求完成,有完整的符合标准的文档,文档有条理、文笔通顺,格式正确,其中有总体设计思想的论述,有正确的流程图,程序完全实现设计方案,设计方案先进,软件可靠性好,能很好的回答老师所提出的问题;良(80 - 90分):按要求完成,有完整的符合标准的文档,文档有条理、文笔通顺,格式正确;有完全实现设计方案的软件,设计方案较先进,能较好的回答老师所提出的问题;中(70 - 80分):按要求完成,有完整的符合标准的文档,有基本实现设计方案的软件,设计方案正确,能基本回答老师所提出的问题;及格(60 - 70分):按要求完成,有完整的符合标准的文档,有基本实现设计方案的软件,但不能完全运行,设计方案基本正确,不能完全回答老师所提出的问题;不及格(60分以下):不能完成程序,没有完整的符合标准的文档,软件没有基本实现设计方案,设计方案不正确,不能回答老师所提出的问题。
五、提交的资料1、软件软件需提供源程序,并能正常运行。
注:对于程序中未能实现的部分需要加以说明。
对于程序中所参考的部分代码需要加以声明,并说明出处。
2、文档(1)设计文档的格式尽量按照《中华人民共和国国家标准UDC 681. 3计算机软件产品开发文件编制指南GB 8567-88》的标准书写。
(2)内容(以下仅提供参考)1、需求分析;2、类设计及说明;3、定义的函数主要功能说明;4、主要算法说明:举例说明1、2个比较有特点的算法;5、系统总框图;6、存在的问题与不足及对策;7、使用说明(操作手册);8、程序源代码及说明;(3)文档要求1、程序中必须使用类定义对象完成设计。
2、所写的有效代码不得少于200行。
3、用A4幅面的纸打印出文档。
4、在程序中,使用结构体数组或文件作为数据载体。
5、使用Visual C++6.0编译器。
附:课程设计范例课程设计文档 ----简单的人员信息管理系统1.需求分析:需要实现的主要功能如下:(1)存储雇员的编号,级别,月薪(2)修改雇员的编号,级别,月薪(3)删除雇员的编号,级别,月薪(4)查询雇员的编号,级别,月薪(5)显示雇员的编号,级别,月薪………………………………………2.类设计及说明3.定义的函数主要功能说明:(1)employee类setname-----设置姓名;getname------提取成员姓名;getindividualempno--------提取成员编号;…………………………..(2)technician类Setworkhours -----设置工作时间…………………(3)salesman类…………………..(4)manager类…………………………….(5)salesmanager类…………………4.主要算法说明(1) Main函数中主要利用循环实现雇员姓名的连续录入,利用基类指针访问各派生类函数…….(2)………..5.系统总框图:6.存在的问题:(1)功能不是很完善,只实现了对人员工资级别等的存储及输出,对于员工级别,工资,薪级的修改,删除的功能还未实现。
(2)系统的操作界面需进一步优化,如能用菜单形式实现更为方便。
7.操作手册:运行程序后,先出现一蓝色背景,显示提示语:"Welcome to information management system!"它会在屏幕上运动一周,然后自行消失。
随之出现一红色背景,上面有提示语句,分别按照这些提示语句输入信息,就会出现一个菜单。
根据菜单的提示即可进行操作。
8.源程序代码及说明://employee.hclass employee{protected:char name[20]; //姓名int individualEmpNo; //个人编号int grade; //级别float accumPay; //月薪总额static int employeeNo; //本公司职员编号目前最大值public:employee(); //构造函数~employee(); //析构函数virtual void pay()=0; //计算月薪函数(纯虚函数)virtual void promote(int increment=0); //升级函数(虚函数)void SetName(char *); //设置姓名函数char * GetName(); //提取姓名函数int GetindividualEmpNo(); //提取编号函数int Getgrade(); //提取级别函数float GetaccumPay(); //提取月薪函数};class technician:public employee //兼职技术人员类{private:float hourlyRate; //每小时酬金int workHours; //当月工作时数public:technician(); //构造函数void SetworkHours(int wh); //设置工作时数函数void pay(); //计算月薪函数void promote(int); //升级函数};class salesman:virtual public employee //兼职推销员类{protected:float CommRate; //按销售额提取酬金的百分比float sales; //当月销售额public:salesman(); //构造函数void Setsales(float sl); //设置销售额函数void pay(); //计算月薪函数void promote(int); //升级函数};class manager:virtual public employee //经理类{protected:float monthlyPay; //固定月薪数public:manager(); //构造函数void pay(); //计算月薪函数void promote(int); //升级函数};class salesmanager:public manager,public salesman //销售经理类{public:salesmanager(); //构造函数void pay(); //计算月薪函数void promote(int); //升级函数};//employee.cpp#include<iostream>#include<cstring>#include"employee.h"using namespace std;int employee::employeeNo=1000; //员工编号基数为1000employee::employee(){ individualEmpNo=employeeNo++; //新输入的员工编号为目前最大编号加1 grade=1; //级别初值为1accumPay=0.0;} //月薪总额初值为0employee::~employee(){}void employee::promote(int increment){ grade+=increment; } //升级,提升的级数由increment指定void employee::SetName(char* names){ strcpy(name,names); } //设置姓名char* employee::GetName(){ return name;} //提取成员姓名int employee::GetindividualEmpNo(){ return individualEmpNo;} //提取成员编号int employee::Getgrade(){ return grade;} //提取成员级别float employee::GetaccumPay(){ return accumPay;} //提取月薪technician::technician(){ hourlyRate=100;} //每小时酬金100元void technician::SetworkHours(int wh){ workHours=wh;} //设置工作时间void technician::pay(){ accumPay=hourlyRate*workHours;} //计算月薪,按小时计酬void technician::promote(int){ employee::promote(2); } //调用基类升级函数,升2级salesman::salesman(){ CommRate=0.04;} //销售提成比例4%void salesman::Setsales(float sl){ sales=sl;} //设置销售额void salesman::pay(){ accumPay=sales*CommRate;} //月薪=销售提成void salesman::promote(int){ employee::promote(0); } //调用基类升级函数,升0级manager::manager(){ monthlyPay=8000;} //固定月薪8000元void manager::pay(){ accumPay=monthlyPay;} //月薪总额即固定月薪数void manager::promote(int ){ employee::promote(3);} //调用基类升级函数,升3级salesmanager::salesmanager(){ monthlyPay=5000;CommRate=0.005;}void salesmanager::pay(){ accumPay=monthlyPay+CommRate*sales; } //月薪=固定月薪+销售提成void salesmanager::promote(int){ employee::promote(2);} //调用基类升级函数,升2级#include<iostream>#include<cstring>#include"employee.h"using namespace std;void main(){manager m1;technician t1;salesmanager sm1;salesman s1;char namestr[20]; //输入雇员姓名时首先临时存放在namestr中employee *emp[4]={&m1,&t1,&sm1,&s1};int i;for(i=0;i<4;i++){cout<<"请输下一个雇员的姓名:";cin>>namestr;emp[i]->SetName(namestr); //设置每个成员的姓名emp[i]->promote(); //升级,通过基类指针访问各派生类函数}cout<<"请输入兼职技术人员"<<t1.GetName()<<"本月的工作时数:";int ww;cin>>ww;t1.SetworkHours(ww); //设置工作时间cout<<"请输入销售经理"<<sm1.GetName()<<"所管辖部门本月的销售总额:";float sl;cin>>sl;sm1.Setsales(sl); //设置销售额cout<<"请输入推销员"<<s1.GetName()<<"本月的销售额:";cin>>sl;s1.Setsales(sl); //设置销售额for(i=0;i<4;i++){emp[i]->pay(); //计算月薪,通过基类指针访问各派生类函数cout<<emp[i]->GetName()<<"编号"<<emp[i]->GetindividualEmpNo() <<"级别为"<<emp[i]->Getgrade()<<"级,本月工资"<<emp[i]->GetaccumPay()<<endl;}}。