关于面向对象作业实例
面向对象分析实例

4
学生ID 自选习题,
5
习题解答 核对答案
练习本类的属性和方法
确定对象类
属性: 方法:
01
习题号 编写习题,
02
题目内容 编写答案,
03
答案 习题入库
04
所属课程
02
筛选对象原则:
发现对象
2
3
从需求中找名词作为侯选对象:
教师,系统,习题,答案,作业,时间,学生,试题,系统管理员,权限,学校,班,学期,课程,习题板,考试板,练习本,习题库.
共18项
具体做法:
发现对象
系统:太大的抽象,不能作为对象.
时间:只有考试板要求,可作为考试板属性处理.
作业:是习题的同义词,可舍弃.
系统需求说明按三方面描述:
01
系统问题域说明:应用系统的业务范围
02
系统边界说明:确定系统与用户之间接口
03
系统功能说明:系统需要实现的责任
04
实例描述:习题管理系统
对象
系统问题域说明:
在一个公共习题库的支持下, 负责各科习题的教师: 可用系统编写习题及答案,并存入习题库; 从习题库中选择一组习题去组成作业,并在要求时间公布习题答案; 从习题库中选择一组习题组成考试题公布; 可以批改学生的作业; 学生答题后收卷,阅卷评分.
用系统完成作业或答题并提交给系统; 可在习题库中选择习题自己练习; 可以在公布答案后核对自己的作业;
每个学生:
负责习题,编班和权限管理和维护习题库.
一名系统管理员:
壹
贰
系统问题域说明:
系统的用户有本校教师,学生,系统管理员.
学校以班组织学生,每班每学期有若干课程.
面向对象方法例(ATM)

卡片信息键入业务种类
取消做:请求总金额
ቤተ መጻሕፍቲ ባይዱ卡片弹出
做:弹出卡片做:非法帐户信息
要求取走卡片键入总数
业务成功
做:分配现金做:处理业务
请求取走现金
业务失败
结束取税金取消
做:打印收据做:失败信息
等待
终止取消5秒
做:请求继续中断
做:取消信息
继续
网络响应等待网络响应
其中:网络响应=合法帐户、非法帐户、非法营业部代码、非法密码、业务成功、业务失败
[有效]
[失败] [成功]
/营业部业务失败/营业部业务成功[无效]/
非法营业部代码
做:与营业部验证卡片
[有效]
/合法营业部帐户
三、系统设计
ATM系统的结构:
电话线电话线
说明:1)ATM系统软件总体结构:交互式界面和事务处理型系统的混合体。
用分析模型表示系统的总体结构包括:
对象模型——表示事务处理的各部分。
例题: ATM网络系统
问题陈述:
设计一个支持银行ATM计算机网络系统的软件。这个网络包括柜员机和自动取款机(ATM),由联营机构共享。每个营业部提供各自的计算机来维护它的帐户和处理面临的事务。柜员机属于各营业部,并且直接与营业部计算机通信,柜员输入帐务和处理数据。ATM与中心处理机通信。中心处理机分理事务到相应的营业部。ATM接收现金卡,与用户交互,与中心计算机通信完成事务处理,分配现金和打印收据。系统需要恰当的记录和安全保证。系统必须正确控制并发访问同一帐号。营业部提供自己的计算机软件。共享系统的费用由各营业部根据现金卡数量来分担。
四、ATM主控程序路径设计:
主屏
插入卡
面向对象练习题

面向对象练习题及答案一、用例图1.请就以下需求建立用例图:一个新的音像商店准备采用计算机系统向比较广泛的人群销售或租借录像带和光碟。
该音像商店将存有大约1000 盘录像带和500 张光碟,这些订购涉及多家订购商。
所有的录像带和光碟都有一个条码,可以使用条码扫描仪来支持销售和返还,客户会员卡也同时条码化。
客户可以预定录像带并在指定日期来取。
系统必须拥有灵活的搜索机制来回答客户的询问,包括关于该音像商店还没有进货的电影(但可能是已经请求订购了)。
评分标准:画图格式标准3 分,用例全面正确4 分,角色与用例之间的关系正确3 分2.试用用例图描述小型图书资料管理系统。
某学院打算开发一个小型图书资料管理系统MiniLibrary,该系统基于Internet实现教师和学生对各种图书资料的借阅、查询和管理。
图书管理员负责管理各种图书资料,查询图书资料信息,并进行图书的借阅管理。
注册用户可以通过Internet 随时查询图书资料信息和个人借阅情况,预订目前借不到的图书资料,并可以快捷地查找和浏览所需要的电子资料。
系统可以提供适当的浏览器供用户阅读电子文献资料。
3.试用用例图描述系统简介:航空公司为给旅客乘机提供方便,需要开发一个机票预定系统。
各个旅行社把预定机票的旅客信息输入到系统中,系统为旅客安排航班。
当旅客交付了预订金后,系统打印出取票通知和帐单给旅客,旅客在飞机起飞前一天凭取票通知和帐单到航空公司交款取票,系统核对无误即打印出机票给旅客。
此外航空公司为随时掌握各个航班飞机的乘载情况,需要定期进行查询统计,以便适当调整。
技术要求和限制条件(1)在分析系统功能时要考虑有关证件的合法性验证(如身份证、取票通知和交款发票)等。
(2)对于本系统还应补充一下功能:1)旅客延误了取票时间的处理2)航班取消后的处理4 .请就此需求建立功能模型:某报社采用面向对象技术实现报刊征订的计算机管理系统,该系统基本需求如下:报社发行多种刊物,每种刊物通过订单来征订,订单中有代码、名称、订期、单价、份数等项目,订户通过填写订单来订阅报刊。
面向对象 典型案例

面向对象典型案例
面向对象编程是一种编程方法论,它的核心思想是将现实世界中的事物抽象成对象,通过对象之间的交互来实现程序的功能。
下面我们来介绍一些典型的面向对象案例。
1. 银行账户管理系统
银行账户管理系统是面向对象编程的典型案例之一。
在这个系统中,每个账户都是一个对象,它有自己的属性(如账号、余额、户主姓名等)和方法(如存款、取款、查询余额等)。
通过对象之间的交互,可以实现账户的管理和操作。
2. 游戏开发
游戏开发也是面向对象编程的一个重要应用领域。
在游戏中,每个角色、道具、场景等都可以抽象成一个对象。
通过对象之间的交互,可以实现游戏的运行和交互。
3. 汽车租赁系统
汽车租赁系统也是一个典型的面向对象案例。
在这个系统中,每辆汽车都是一个对象,它有自己的属性(如车型、租金、出租状态等)和方法(如租车、还车、查询车辆列表等)。
通过对象之间的交互,可以实现汽车租赁的管理和操作。
4. 医院管理系统
医院管理系统也是一个常见的面向对象案例。
在这个系统中,每个病人、医生、药品等都可以抽象成一个对象。
通过对象之间的交互,可以实现医院的管理和操作,如病人挂号、医生诊断、药品配药等。
总结:面向对象编程是一种非常实用的编程范式,它可以提高程序的可维护性、可扩展性和可重用性。
以上介绍的典型案例只是冰山一角,面向对象编程在各个领域都有着广泛的应用。
Java面向对象编程实战案例

Java面向对象编程实战案例1. 简介Java面向对象编程(Object-Oriented Programming,OOP)是一种常用的编程范式,它以对象为中心,通过封装、继承和多态等特性来组织和管理代码。
本文将介绍一些实战案例,展示Java面向对象编程的实际应用。
2. 案例一:学生管理系统学生管理系统是一个典型的Java面向对象编程案例,它常用于学校、培训机构等管理学生信息。
在这个案例中,可以定义一个Student类,包含学生的姓名、年龄、学号等属性,以及学生的增删改查等方法。
可以使用面向对象的思想,将学生信息封装到一个对象中,并使用集合类来管理多个学生对象。
3. 案例二:图形计算器图形计算器是另一个有趣的Java面向对象编程案例。
可以定义一个Shape类作为图形的基类,包含计算图形面积和周长的方法,并派生出Circle、Rectangle和Triangle等子类,分别表示圆形、长方形和三角形。
通过面向对象的继承特性,可以调用对应子类的计算方法,根据用户的输入来计算所需图形的面积和周长。
4. 案例三:银行账户管理系统银行账户管理系统是一个常见的Java面向对象编程案例,用于管理银行的账户信息。
可以定义一个Account类,包含账户的姓名、余额、存取款等方法,并通过封装特性将账户信息隐藏在对象中。
可以使用ArrayList类来存储多个账户对象,实现对账户信息的管理和操作。
5. 案例四:图书馆管理系统图书馆管理系统是另一个典型的Java面向对象编程案例,用于管理图书馆的图书信息。
可以定义一个Book类,包含图书的书名、作者、价格等属性,并封装对应的get和set方法。
可以使用HashMap类来存储图书编号和对应的图书对象,实现图书的检索和借还功能。
还可以定义一个User类表示图书馆的用户,包含用户的姓名、借书数量等属性。
6. 案例五:游戏角色管理系统游戏角色管理系统是一个有趣的Java面向对象编程案例,用于管理游戏中的角色信息。
Java面向对象经典案例10个

J a v a面向对象经典案例10个------------------------------------------作者xxxx------------------------------------------日期xxxx1class Anthropoid //类人猿{private int n=100;void crySpeak(String s){System.out.println(s);}}class People extends Anthropoid{void computer(int a,int b){int c=a*b;System.out.println(c);}void crySpeak(String s){System.out.println("**"+s+"**");}}public class Monkey{public static void main(String args[]){Anthropoid monkey=new People();//monkey是People对象的上转型对象//puter(10,10); //非法monkey.crySpeak("我喜欢这个运动");People people=(People)monkey;//把上转型对象强制转化为子类的对象puter(10,10);}}2class ManyArea{public double area(double radius){return Math.PI*radius*radius;}public double area(double len,double width){return len*width;}public double area(int len,int width){return len*width;}public double area(double len,double width,double height){return len*width*height;}}public class OverLoad{public static void main(String args[]){ManyArea ob=new ManyArea();System.out.println("半径为3.0的圆的面积:"+ob.area(3.0)); System.out.println("长2.0、宽3.0的面积:"+ob.area(2.0,3.0)); System.out.println("长2、宽3的面积:"+ob.area(2,3));System.out.println("立方体的面积:"+ob.area(2.0,3.0,4.0));}}3class Animal{public void shout(){}}class Dog extends Animal{public void newDog(){System.out.println("Dog的新特性");}public void shout(){System.out.println("汪");}}class Cat extends Animal{public void shout(){System.out.println("喵");}}class Test{public void animalshout(Animal a){a.shout();}}public class PolyEx{public static void main(String[] args){Animal d=new Dog();//(1)Dog d1= (Dog)d;//(3)父类对象强制转换成子类对象d1.newDog();//d.newDog();d.shout();Test t=new Test();t.animalshout(d);//(2)t.animalshout(d1);}}4class ArrayEx{public int[] subarray(int a[],int start,int end){int subarr[] = new int[end-start];for(int i=0,j=start;j<end;i++,j++){subarr[i] = a[j];}return subarr;}}public class Test{public static void main(String args[]){ArrayEx arrex = new ArrayEx();int arr[] = new int[10];for(int i = 0;i<arr.length;i++){arr[i] = i+10;}int sub[] = arrex.subarray(arr,2,6);for(int temp:sub){System.out.println(temp);}}}5class Box{int length;int width;int height;void set(int len,int wid,int hei){length = len;width = wid;height = hei;}}class ShowBox{void show(Box b){System.out.println(b.length+" "+b.width+" "+b.height); }}class TestTwo{public static void main(String args[]){Box a = new Box();a.set(3,4,5);ShowBox sbox = new ShowBox();sbox.show(a);}}6.class One{int a = 5;void showB(){int a = 3;int b = this.a;System.out.println("b = "+b);}}public class ThisOne{public static void main(String args[]){One test = new One();test.showB();}}7.class Mystatic{private int x=3;public static void showx(){System.out.println("x="+x);}public static int add(int m){return m+x;}}class UseMystatic{public static void main(String args[]){Mystatic.showx();System.out.println("add="+Mystatic.add(2));}}8.class Point{int x;int y;Point(){x=0;y=0;//this(1,1);}Point(int a,int b){x=a;y=b;}void show(){System.out.println("x="+x+" y="+y); }}public class UsePoint{public static void main(String args[]){ Point p = new Point();p.show();}}9.class Point{private int x,y;Point(){x=1;y=3;}void showPoint(Point t){System.out.println("x="+t.x+" y="+t.y);}void seeit(){showPoint(this);}}public class UsePointThis{public static void main(String args[]){Point p=new Point();p.seeit();}}10class Point{static int x=2;int y=0;}public class UseStatic{public static void main(String args[]){System.out.println("利用类调用静态变量"); System.out.println("x="+Point.x);//System.out.println("y="+Point.y);Point p1=new Point();System.out.println("利用对象调用");System.out.println("x="+p1.x);System.out.println("y="+p1.y);Point p2=new Point();p2.y=3;System.out.println("对象p1中y的值"+"y="+p1.y); System.out.println("对象p2中y的值"+"y="+p2.y); p1.x=6;System.out.println("对象p1中x的值"+"x="+p1.x); System.out.println("对象p2中x的值"+"x="+p2.x);}}。
面向对象案例

面向对象案例在面向对象的编程中,我们经常会遇到各种不同的案例,这些案例涉及到了对象、类、继承、多态等概念的应用。
下面,我将通过几个具体的案例来说明面向对象编程的应用。
案例一,图书管理系统。
假设我们需要设计一个图书管理系统,这个系统需要包括图书的借阅、归还、查询等功能。
在面向对象的设计中,我们可以将图书、读者、图书管理员等抽象成对象,然后通过类来描述它们的属性和行为。
比如,我们可以设计一个Book类来表示图书,包括书名、作者、出版社等属性,以及借阅、归还等行为;再设计一个Reader类来表示读者,包括姓名、借阅的图书等属性,以及借阅、归还等行为;还可以设计一个Librarian类来表示图书管理员,包括姓名、管理的图书等属性,以及借阅、归还等行为。
通过这样的设计,我们可以很好地模拟出一个图书管理系统,并且可以方便地对其进行扩展和维护。
案例二,银行账户管理系统。
另一个常见的案例是银行账户管理系统。
在这个系统中,我们需要对账户进行存款、取款、查询等操作。
同样地,我们可以将账户、客户、银行职员等抽象成对象,然后通过类来描述它们的属性和行为。
比如,我们可以设计一个Account类来表示账户,包括账号、余额等属性,以及存款、取款等行为;再设计一个Customer类来表示客户,包括姓名、账户等属性,以及存款、取款等行为;还可以设计一个Banker类来表示银行职员,包括姓名、管理的账户等属性,以及存款、取款等行为。
通过这样的设计,我们可以很好地模拟出一个银行账户管理系统,并且可以方便地对其进行扩展和维护。
案例三,汽车租赁系统。
最后,我们来看一个汽车租赁系统的案例。
在这个系统中,我们需要对汽车进行租赁、归还、查询等操作。
同样地,我们可以将汽车、租户、租赁员等抽象成对象,然后通过类来描述它们的属性和行为。
比如,我们可以设计一个Car类来表示汽车,包括车牌号、品牌、型号等属性,以及租赁、归还等行为;再设计一个Tenant类来表示租户,包括姓名、租赁的汽车等属性,以及租赁、归还等行为;还可以设计一个RentalAgent类来表示租赁员,包括姓名、管理的汽车等属性,以及租赁、归还等行为。
生活实例解释面向对象的多态

生活实例解释面向对象的多态一、引言在现实生活中,多态是一个普遍存在的现象。
例如,动物世界中的狮子、老虎和豹,它们都属于猫科动物,但各自有着不同的特点。
同样,在人类社会中,人们从事着各种不同的职业,如医生、教师和工程师等。
这些生活实例都可以用来解释面向对象的多态。
二、多态的应用场景1.动物世界中的多态现象在动物世界中,多态现象无处不在。
以猫科动物为例,狮子、老虎和豹虽然都属于猫科,但它们在体型、毛色和习性等方面都有明显的差异。
这种多态性使得猫科动物能够在不同的生态环境中生存和繁衍。
2.人类职业的多态性在人类社会中,人们从事着各种不同的职业。
这些职业在职责、技能和待遇等方面都有所不同。
例如,医生、教师和工程师这三个职业,虽然都属于专业人士,但它们的职业特点和收入水平有很大差异。
这种多态性反映了社会分工的细化,使得人类社会能够更加繁荣发展。
三、面向对象编程中的多态1.基本概念与原理面向对象编程(OOP)是一种编程范式,它强调用对象来表示和处理问题。
多态是OOP的核心概念之一,它指的是同一操作在不同对象上具有不同的行为。
在面向对象编程中,多态主要有三种形式:继承、接口和抽象类。
2.多态的优势多态性使得程序具有更好的可扩展性和可维护性。
通过继承、接口和抽象类,我们可以轻松地为新对象添加新的行为,而无需修改原有代码。
这有助于降低代码的耦合度,提高代码的复用性。
四、多态的实现方法1.继承与多态继承是子类继承父类的属性和方法,从而实现多态。
例如,从动物类Animal继承出鸟类Bird和猫类Cat,使得Bird和Cat都具有Animal的属性和方法,但它们各自也有自己的特点。
2.接口与多态接口是一种抽象类型,它只定义了一些方法的签名,没有具体的实现。
实现类可以实现接口中的方法,从而实现多态。
例如,定义一个动物接口Animal,包含跑、跳和叫的方法。
猫类Cat和狗类Dog都可以实现这个接口,从而实现多态。
3.抽象类与多态抽象类是一种特殊的类,它不能被实例化,但可以被继承。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
private: int pri3; }; class D2:virtual public P { public: D2(int p1,int p2,int p4):P(p1,p2) { pri4=4; } int inc1() { P::inc1(); P::inc2(); return P::inc1(); } int inc4() {return++pri4;} void display(); { P::display; cout<<"pri4="<<pri4<<endl; } private: int pri4; }; class D12:private D1,public D2 { public: D12(int p11,int p12,int p13,int p21,int D1(p11,p12,p13),D2(p21.p22.p23),P(p11,p21) { pri12=p; } int inc1() { D2::inc1();
pa->setx(2,10); pa->print(); } (2)某学校教授与讲师的月工资计算办法规定如下:教授每月工资固 定工资为4000元,讲师每月工资与讲课学时数有关,计算方法是每学时 50元,另加补助1000元。 编程显示某个教员的月工资数目。
第4次作业(1)分析下列程序,并回答提出的问题,且编程实现求子串 操作的函数Substring(&sub,*str,pos,len) (注释:初始条件:串*str存在,1<=pos<=str->Getlength()且0<=len<=str>Getlength()-pos+1操作结果:用sub返回串*str的第pos个字符起长度为 len的子串) #include<iostream.h> #include<string.h> class String() { public: String() {Length=0;Buffer=0;} String(const char *str); void Setc(int index,char newchar); char Getc(int index) const; int GetLength()const {return Length;} void Print() const { if(Buffer==0) cout<<"empty.\n"; else cout<<Buffer<<endl; } void append(comst char *Tail); ~String(){delete[]Buffer;} private: int Length; char *Buffer; }; String::String(const char *str) { Length=strlen(str); Buffer=new char[Length+1]; strcpy(Buffer,str);
int x,y; }; class B:public A { public: void print() { cout<<"x="<<x<<':'<<"x*x="<<x*x<<endl; } }; class C:public A { public: void print() { cout<<"x="<<x<<':'<<"x*x*x="<<x*x*x<<endl; } }; class D:public A { public: void print() { cout<<"x="<<x<<','<<"y="<<y<<':'; cout<<"pow(x,y)="<<pow(double(x),double(y))<<endl; } }; void main() { A *pa; B b; C c; D d; pa=&b; pa->setx(5); pa->print(); pa=&c; pa->setx(8); pa->print(); pa=&d;
{ }; 设有 C *pc; (1) pc->a=1;是否有二义性? (2) pc->b();是否有二义性? (3) pc->f();是否有二义性? (4) pc->f(10); 是否有二义性? (5) pc->g();是否有二义性? //提示:二义性检查时在访问控制权限或类型检查之前进行的。 (2)写出运行结果 #include<iostream.h> class P { public: P(int p1,int p2){pri1=p1;pri2=p2;} int inc1(){return++pri1;} int inc2(){return++pri2;} void display(){cout<<"pri1="<<pri1<<",pri2="<<pri2<<endl;} private: int pri1,pri2; }; class D1:virtual private P { public: D1(int p1,int p2,int p3):P(p1,p2) { pri3=p3; } int inc1() {return P::inc1();} int inc3() {return++pri3;} void display() { P::display;(); cout<<pri3="<<pri3<<endl; }
} void String::Setc(int index,char newchar) { if(index>0&&index<=Length) Buffer[index-1]=newchar; }
char String::Getc(int index) const { if(index>0&&index<=Length) return Buffer[index-1]; else return 0; } void String::Append(const char*Tail) { char *tmp; Length+=strlen(Tail); tmp=new char[Length+1]; strcpy(tmp,Buffer); strcat(tmp,Tail); delete[]Buffer; Buffer=tmp; } void main() { String s0,s1("a string."); s0.Print(); s1.Print(); cout<<s1.GetLength()<<endl; s1.Setc(5,'p'); s1.Print(); cout<<s1.Getc;this"); s2.Append("a string."); s2.Print(); } (1) 该程序调用了哪些在string.h中包含的函数? (2) 该程序的String类中是否用了函数的重载的方法?哪些函数 是重载的? (3) 简述Setc()函数有何功能? (4) 简述Getc()函数有何功能? (5) 简述Append()函数有何功能? (6) 该程序的成员函数Print()中不用if语句,只写成如下一条语 句,行否?cout<<Buffer<<endl; (7) 该程序中有几处使用了new运算符? (8) 写出该程序执行后的输出结果。 第5次作业 (1)根据下面给定的继承结构,回答问题。 class A { public: int a; int b(); int f(); int f(int); int g(); }; class B { public: char f(); int g(); private: int a; int b(); }; class C:public A,public B
p22,int
p23,int
p):
return D2::inc1(); } int inc5(){return++pri12;} void display() { cout<<"D2::display()\n"; D2::display(); cout<<"pri12="<<pri12<<endl; } private: int pri12; }; void main() { D12 d(1,2,3,4,5,6,7); d.display(); cout<<endl; d.inc1(); d.inc4(); d.inc5(); d.D12::inc1(); d.display(); } 第6次作业 (1)下面是一个具有纯虚函数和抽象类的程序。分析下列程序的输出 结果。程序内容如下所示。 #include<iostream.h> #include<math.h> class A { public: virtual void setx(int i,int j=0) {x=i;y=j;} virtual void print()=0; protected: