计算机工程系实验报告
课程名称:Java面向对象程序设计
班级:姓名:学号:
一、实验目的:
1.掌握String类的常用方法。
2.掌握StringBuffer类的常用方法。
二、实验要求:
1.编写一个Java应用程序,判断两个字符串是否相同,判断字符串的前缀、后缀是否于某个字符串相同,比较两个字符串的大小关系,进行字符串检索,创建子字符串,将数字型字符串转化为数字,将字符串放到数组中,用字符数组创建字符串等。
2. 编写一个应用程序,使用StringBuffer对象实现对字符串的编辑操作,如替换字符串中的某些字符、删除字符串中的某些字符、在字符串中插入或追加新的字符串等。
三、程序代码:
1.class StringExample
{
public static void main(String args[])
{
String s1=new String("you are a student"),
s2=new String("how are you");
if(s2.equals(s1)) //判断s1与s2是否相同
{
System.out.println("s1与s2相同");
}
else
{
System.out.println("s1与s2不相同");
}
String s3=new String("22030219851022024");
if(s3.startsWith("220302")) //判断s3的前缀是否“220302”
{
System.out.println("吉林省的身份证");
}
String s4=new String("你"),
s5=new String("我");
if(https://www.wendangku.net/doc/ae4014379.html,pareTo(s5)>0) //s4大于s5的表达式
{
System.out.println("按字典序s4大于s5");
}
else
{
System.out.println("按字典序s4小于s5");
}
int position=0;
String path="c:\\java\\jsp\\A.java";
position=https://www.wendangku.net/doc/ae4014379.html,stIndexOf("\\"); //获取path中最后出现目录分割符号的位置
System.out.println("c:\\java\\jsp\\A.java中最后出现\\的位置:"+position);
String fileName=path.substring(12,18); //获取path中“A.java”子字符串
System.out.println("c:\\java\\jsp\\A.java中含有的文件名:"+fileName);
String s6=new String("100");
String s7=new String("123.678");
int n1=Integer.parseInt(s6); //将s6转化成int类型数据
double n2=Double.parseDouble(s7); //将s7转化成double类型数据
double n=n1+n2;
System.out.println(n);
String s8=new String("ABCDEF");
char a[ ]=s8.toCharArray(); //将s8存放到数组a中
for(int i=a.length-1;i>=0;i--)
{
System.out.printf("%3c",a[i]);
}
}
}
2. class StringBufferExample
{
public static void main(String args[ ])
{
StringBuffer str=new StringBuffer("ABCDEFG");
str.append("123456789"); //向str尾加“123456789”
System.out.println(str);
str.replace(1,2,"b"); //将str中的字符‘B’替换为‘b’
System.out.println(str);
str.insert(7,"Game"); //在str中的“123456789”前面插入“Game”
System.out.println(str);
int index=str.indexOf("1"); //获取str中首次出现“1”的位置
str.replace(11,14,""); //删除str中的“1234”
int n=str.length(); //获取str中字符个数
str.replace(14,17,"七八九"); //将str中“789”替换为“七八九”
System.out.println(str);
StringBuffer otherStr=new StringBuffer("we love you");
int start=0;
char c='\0';
while(start!=-1)
{
if(start!=0)
{
start=start+1;
}
c=otherStr.charAt(start);
if(Character.isLowerCase(c))
{
c=Character.toUpperCase(c);
otherStr.setCharAt(start,c);
}
start=otherStr.indexOf(" ",start); //查找下一个空格。
}
System.out.println(otherStr);
StringBuffer yourStr=new StringBuffer("i Love THIS GaME");
int start0=0;
char c0='\0';
while(start0<=15)
{
c0=yourStr.charAt(start0);
if(Character.isLowerCase(c0))
{
c0=Character.toUpperCase(c0);
yourStr.setCharAt(start0,c0);
}
else
{
c0=Character.toLowerCase(c0);
yourStr.setCharAt(start0,c0);
}
start0=start0+1;
}
System.out.println(yourStr);
}
//将yourStr中的大写字符换成小写字符,小写字符换成大写字符}
四、运行结果:
五、思考题:
1.针对程序1思考以下问题:
1)程序中的s6改写成
String s6=new String(“1a12b”);
运行时提示怎样的错误?
2)如何用数组a的前3个元素创建一个字符串并输出该字符串?
Char p[]={a[0],a[1],a[2]};
String ss=new String(p);
System.out.println(ss);
3)如何获取path中的“jsp”子字符串?
String fileName=path.substring(8,11);
2. 针对程序2思考以下问题:
1)StringBuffer类的length()方法和capacity()方法有何不同?
通过调用length()方法可以得到当前StringBuffer的长度。而通过调用capacity()方法可以得到总的分配容量。
2)若在上述程序中的最后添加代码:
System.out.println(str.length());
System.out.println(str.capacity());
输出的结果是多少?
简答题 1、传统的结构化程序设计的优点和缺点是什么? 优点: (1)这种程序设计方法力求算法描述准确。 (2)对每一子过程模块容易进行程序正确性证明。 缺点: (1)这种程序设计方法本质上是面向“过程”的,而“过程”和“操作”又是不稳定和多变的,因此不能直接反映人类求解问题的思路。 (2)程序代码可重用性差。程序中除少数标准库函数外,每设计一个程序时,程序员几乎从零做起。即使重用代码,通常也是通过拷贝或编辑重新生成一份。 (3)维护程序的一致性困难。该种方法将数据与对数据进行处理的程序代码分离。 2、什么是对象? 每个对象都具有属性(Attribute)和方法(Method)这两方面的特征。对象的属性描述了对象的状态和特征,对象的方法说明了对象的行为和功能,并且对象的属性值只应由这个对象的方法来读取和修改,两者结合在一起就构成了对象的完整描述。 3、什么是消息? 在面向对象的程序设计中,由于对象描述了客观实体,它们之间的联系通过对象间的联系来反映。当一个对象需要另外一个对象提供服务时,它向对方发出一个服务请求,而收到请求的对象会响应这个请求并完成指定的服务。这种向对象发出的服务请求就称为消息。4、什么是多态性? 所谓多态性是指当程序中的其他部分发出同样的消息时,按照接收消息对象的不同能够自动执行类中相应的方法。其好处是,用户不必知道某个对象所属的类就可以执行多态行为,从而为程序设计带来更大方便。 5、什么是面向对象的程序设计方法? 这种方法将设计目标从模拟现实世界的行为转向了模拟现实世界中存在的对象及其各自的行为。 在OOP中,将“对象”作为系统中最基本的运行实体,整个程序即由各种不同类型的对象组成,各对象既是一个独立的实体,又可通过消息相互作用,对象中的方法决定要向哪个对象发消息、发什么消息以及收到消息时如何进行处理等。 6、面向对象方法的特点是什么? (1)OOP以“对象”或“数据”为中心。由于对象自然地反映了应用领域的模块性,因此具有相对稳定性,可以被用作一个组件去构成更复杂的应用,又由于对象一般封装的是某一实际需求的各种成分,因此,某一对象的改变对整个系统几乎没有影响。 (2)引入了“类”(class)的概念。类与类以层次结构组织,属于某个类的对象除具有该类所描述的特性外,还具有层次结构中该类上层所有类描述的全部性质,OOP中称这种机制为继承。 (3)OOP方法的模块性与继承性,保证了新的应用程序设计可在原有对象的数据类型和功能的基础上通过重用、扩展和细化来进行,而不必从头做起或复制原有代码,这样,大大减少了重新编写新代码的工作量,同时降低了程序设计过程中出错的可能性,达到了事半功倍的效果。 7、面向对象的程序设计方法与结构化程序设计方法的比较 (1)传统的结构化程序设计方法以过程为中心构造应用程序,数据和处理数据的过程代码是分离的、相互独立的实体,设计出的程序可重用代码少,且当代码量增加时维护数据和代码的一致性困难。
《面向对象程序设计》 大作业 题目学生成绩管理系统 学院 专业 班级 姓名 指导教师 2015 年11 月11 日
目录 一大作业的目的 (1) 二大作业的内容............................ . .. (2) 三大作业的要求与数据............... ...... . (3) 四大作业应完成的工作.................. . (4) 五总体设计(包含几大功能模块)........... . (5) 六详细设计(各功能模块的具体实现算法——流程图) (6) 七调试分析(包含各模块的测试用例,及测试结果) (7) 八总结 (8) 十参考资料 (9)
一大作业的目的 《面向对象程序设计》是一门实践性很强的课程,通过大作业不仅可以全方位检验学生知识掌握程度和综合能力,而且还可以进一步加深、巩固所学课程的基本理论知识,理论联系实际,进一步培养自己综合分析问题和解决问题的能力。更好地掌握运用C++语言独立地编写、调试应用程序和进行其它相关设计的技能。 二大作业的内容 对学生信息(包括学号、语文、数学、英语、平均分)进行管理,包括学生成绩的信息输入、输出、查询、删除、排序、统计、退出.将学生的成绩信息进行记录,信息内容包含:(1)学生的学号(2)学生的姓名(3)学生的成绩。假设,现收集到了一个班学生的所有成绩信息,要求用C语言编写一个简单的成绩管理系统,可进行录入、查询、修改和浏览等功能。学习相关开发工具和应用软件,熟悉系统建设过程。 三大作业的要求与数据 1、用C++语言实现系统; 2、对学生信息(包括学号、姓名、语文、数学、英语、平均分)进行管理,包括学生成绩的信息输入、输出、查询、删除、排序、统计、退出. 3、学生信息包括:其内容较多,为了简化讨论,要求设计的管理系统能够完成以下功能: (1) 每一条记录包括一个学生的学号、姓名、3门课成绩 (2)、成绩信息录入功能:(成绩信息用文件保存,可以一次完成若干条记录 的输入。) (3)、成绩信息显示浏览功能:完成全部学生记录的显示。 (4)、查询功能:完成按姓名查找学生记录,并显示。 (5)成绩信息的删除:按学号进行删除某学生的成绩. (6)、排序功能:按学生平均成绩进行排序。 (7)、应提供一个界面来调用各个功能,调用界面和各个功能的操作界面应尽可能清晰美观!
1.对象 (1)从概念层面讲,对象是某种拥有责任的抽象。 (2)从规格层面讲,对象是一系列可以被其他对象使用的公共接口。 (3)从语言实现层面讲,对象封装了代码和数据。 2.软件开发中的经典阶段:需求、分析、设计、规范、实现、测试、部署、维护。 3.设计7原则:开闭原则、里氏代换原则、依赖倒转原则、合成/聚合复用原则、 迪M特原则、接口隔离原则、单一职责原则。 4.面向对象的方法学:UML(统一建模语言)、RUP(统一软件开发过程)、XP(极限 编程)。 开发方法:Booch、Coad、OMT、UML、OOSE、Wirfs—Brock 5.OOA——运用面向对象方法进行需求分析。 OOD——运用面向对象方法进行系统设计。 OOP——运用面向对象方法进行程序设计。 6.OOA的基本任务:是运用面向对象的方法,对问题域和系统责任进行分析和理解,对其中的事物和它们之间的关系产生正确的认识,找出描述问题域及系统责任所需的类及对象,定义这些类和对象的属性和操作,以及它们之间所形成的结构、静态联系和动态联系。最终目的:是产生一个符合用户需求,并能够直接反映问题域和系统责任的OOA模型及其详细说明。 优点:(1)加强了对问题域和系统责任的理解。(2)改进与分析有关的各类人员之间的交流。(3)对需求的变化具有较强的适应性。(4)支持软件复用。 OOA的三大策略是:属性策略、方法策略、对象策略。 7.(1)封装:是指对象在其操作中隐藏属性。它是一种信息隐蔽技术,用户只能看见对象封装界面上的信息,对象的内部实现对用户是隐蔽的。封装的目的是使对象的使用者和生产者分开,使对象的定义和实现分开。 例如:要从同事那里借钱,在商店购买食物,就不会抢夺同事的钱包,大翻一通,看看里 面是否有足够的钱。而应该询问他们是否可以借你一些钱,他们就会自己翻钱包。 以表示圆的一个对象作为封装的例子。圆的操作应能计算出半径、直径、周长和面积。假定选择存储直径,要访问直径的程序员都会选择存储直径属性,而不是通过“获取直径”的操作来访问。如果在软件的后续版本中要存储的是半径,就必须找出系统中直接访问直径的所有代码,并更正它们,有了封装,就不会有问题。 (2)继承:可以指定类从父类中获取一些特性,再添加它自己的独特特性。继承是类间的 基本关系,它是基于层次关系的不同类共享数据和操作的一种机制。父类中定义了其所有子类的公共属性和操作,在子类中除了定义自己特有的属性和操作外,可以继承父类的属性和操作,也可以对父类中的操作重新定义其实现方法。 例如:在面向对象中,我们可以把洗衣机、电冰箱、微波炉、收音机看成是家用电气类的 子类,也可以说家用电器类是这些类的超类。家用电器类具有的属性OnOffSwitch和electricWire,具有turnOn()和turnOff()操作。因此,如果你知道某物是家用电器,那么就会立即知道它 具有家用电器类的属性和操作,这种关系就是继承。每个家用电器类的子类都继承了家用电器类的特征。同时,每个子类都增加了自己的属性和操作。 (3)多态:是指同一操作作用于不同的对象上可以有不同的解释,并产生不同的执行结果。例如:“画”操作,作用在“矩形”对象上,则在屏幕上画一个矩形;作用在“圆”对象上, 则在屏幕上画一个圆。也就是说,相同操作的消息发送给不同对象时,每个对象将根据自1 / 9