Java面向对象程序设计课程设计.docx
《Java面向对象程序设计课程设计.docx》由会员分享,可在线阅读,更多相关《Java面向对象程序设计课程设计.docx(34页珍藏版)》请在冰豆网上搜索。
Java面向对象程序设计课程设计
面
向
对
象
程
序
设
计
课
程
设
计
系别:
商学系
专业:
信息管理与信息系统
班级:
信管12班
组别:
第十五组
组员:
面向对象程序设计课程设计
一、课程设计目的
1、熟练掌握java面向对象编程。
2、选择合适的数据结构实现需求。
3、熟练使用各种控制结构。
4、GUI组件、事件处理技术。
二、课程设计任务
1.字符串操作编程
设计字符串操作类,该类主要处理字符串的相关信息,完成以下的操作:
通过键盘输入初始化字符串、获得字符串长度、在字符串中查找一个字符、字符串比较等。
提示:
1)键盘输入建立字符串对象(System.in;IO流类;String类)
2)字符串信息的输出
3)获得字符串长度(length()方法)
4)在字符串中查找一个字符(IndexOf()方法)
5)比较字符串(equals()方法)
2.22选5彩票号码生成器
设计一个彩票号码生成器,主要处理5位数字序列的排列组合,要求每一位上的数字为1~22区间上的任意一个,且数字不可重复。
提示:
1)数字存放的数据结构(Array)
2)随机数的获得(random()方法)
3)循环语句的使用(for语句)
3.设计一个简易的计算器,可以进行四则运算:
加、减、乘、除等(限于十进制下)
程序要求:
1)应具有相应的界面,可参考Windows操作系统自带的计算器界面。
2)操作符号定为:
“+”,“-”,“*”,“/”,“+/-”等。
(按国际惯例设计)
3)用户通过点击程序界面上按钮,实现数字、运算符的输入操作。
4)以上部分为必须完成的内容。
选作部分:
具有操作符号“1/x”,“sqrt”(开方),“.”(小数功能)等。
三、开发工具与平台
1.开发工具
JavaSEDevelopmentKit8u25
2.开发平台
UltraEdit
四、设计思路
第一个人:
赵贯强
1.字符串操作编程
(1)界面设计
importjava.util.*;
publicclassZifuchuan{
publicstaticvoidmain(Stringargs[]){
ScannerZ1=newScanner(System.in);
System.out.print("请您输入一个字符串:
");
StringgetString=Z1.next();
System.out.println("您输入的字符串的长度是:
"+getString.length());
System.out.print("请输入查找的字符:
");
Stringq=Z1.next();
System.out.println("您查找的字符位置在字符串的:
"+getString.indexOf(q));
System.out.print("请您再输入一个字符串:
");
StringgetString2=Z1.next();
booleanZ2=getString.equals(getString2);
System.out.println("您输入的两个字符串是否相等:
"+Z2);
}
}
(2)逻辑设计
导入util类包,使用System.in键盘输入获得Z1字符串对象,再使用length()方法获取Z1下的函数next()返回的字符串长度,接着使用IndexOf()方法获取Z1下的函数next()所查找字符或字符串首次出现的位置;同一个类中,调用System.in键盘输入获得Z2字符串对象,把第二个字符串赋值给Z1下的函数next()返回的字符串,使用equals()方法比较两个字符串字符序列是否相同,输出为布尔类型,即true或false。
(3)程序测试
1)键盘输入建立字符串对象(System.in;IO流类;String类)。
ScannerZ1=newScanner(System.in);
2)字符串信息的输出。
System.out.print("请您输入一个字符串:
");
3)获得字符串长度(length()方法)。
System.out.println("您输入的字符串的长度是:
"+getString.length());
4)在字符串中查找一个字符(IndexOf()方法)。
System.out.println("您查找的字符位置在字符串的:
"+getString.indexOf(q));
5)比较字符串(equals()方法)。
booleanZ2=getString.equals(getString2);
2.22选5彩票号码生成器
(1)界面设计
importjava.util.*;
publicclassCaipiao{
publicstaticvoidmain(Stringargs[]){
RandomZ1=newRandom();
HashSetset=newHashSet();
while(set.size()<5){
intranNubmer=Z1.nextInt(22)+1;
if(ranNubmer!
=0){
set.add(ranNubmer);
}
}
System.out.println(set);
}
}
(2)逻辑设计
导入util类包,使用Random()方法创建一个Z1随机数生成器,使用HashSet构造一个set空容器,定义set集合为int型数据。
使用while循环语句,返回set.size()<5的元素数,即五个元素;定义一个随机数,这个随机数用nextInt(22)+1函数产生,使用if语句,如果随机数不为零,则使用set.add()方法,使产生的随机数添加到set集合中;如果为零,则不添加set集合中。
并使用set接口,自动去掉重复的数字。
最后输出随机产生的五个1~22之间的数。
(3)程序测试
1)创建一个Random类的变量Z1使它成为一个新的随机数生成器。
RandomZ1=newRandom();
2)定义一个set变量,使set在HashSet容器类中装的都是类型为Integer的对象,使用符号规定对象的类型,是java泛型类的体现。
HashSetset=newHashSet();
3)使用while循环语句实现22选5,set.size()<5即循环五次,返回set中的元素数。
while(set.size()<5){
4)返回一个伪随机数,它是从此随机数生成器的序列中取出的、在0(包括)和指定值(不包括)之间均匀分布的int值。
nextInt(22)生成的随机数为0(包括)~22(不包括),nextInt(22)+1生成的随机数即为1(包括)~23(不包括)。
intranNubmer=Z1.nextInt(22)+1;
5)使用if语句,如果随机数不为零,则使用set.add()方法,使产生的随机数添加到set容器中;如果为零,则不添加set容器中。
if(ranNubmer!
=0){
6)使用set接口,使得所生成的随机数不重复,使用set.add()把随机数ranNubmer添加到set容器内。
set.add(ranNubmer);
7)输出set容器内的随机数。
System.out.println(set);
第二个人:
付勃达
1.字符串操作编程
(1)界面设计
importjava.util.*;
publicclassTestString{
publicstaticvoidmain(String[]args){
Scannersc=newScanner(System.in);
System.out.println("请输入一串字符串");
Strings1=sc.next();
System.out.println("你输入的字符串的长度是"+s1.length());
System.out.println("请输入一个字符");
Stringc=sc.next();
System.out.println("你输入的字符位置在字符串的"+s1.indexOf(c));
System.out.println("请您再输入一串字符串");
Strings2=sc.next();
booleantf=s1.equals(s2);
System.out.println("您输入的两个字符串相等吗"+tf);
}
}
(2)逻辑设计
1)通过import语句导入until类包。
importjava.util.*;
2)通过键盘输入初始化字符串,建立字符串对象。
System.in是获取输入的字符串。
Scannersc=newScanner(System.in);
3)获取输入的字符串并封装在s1中。
Strings1=sc.next();
4)通过调用length()方法返回字符串的字符个数,即获取字符串的长度。
System.out.println("你输入的字符串的长度是"+s1.length());
5)通过调用indexOf()方法返回字符c在字符串s1中出现的第一个位置,如果查找成功,则返回匹配成功的字符的位置;如果没有查找到,则返回-1。
System.out.println("你输入的字符位置在字符串的"+s1.indexOf(c));
6)通过调用equals()方法比较输入的两个字符串s1和s2的字符序列是否相同;equals()方法返回类型为布尔类型。
booleantf=s1.equals(s2);
(3)程序测试
1)键盘输入建立字符串对象。
Scannersc=newScanner(System.in);
2)字符串信息的输出。
System.out.println("请输入一串字符串");
Strings1=sc.next();
3)获得字符串长度(length()方法)。
System.out.println("你输入的字符串的长度是"+s1.length());
4)在字符串中查找一个字符(IndexOf()方法)。
System.out.println("你输入的字符位置在字符串的"+s1.indexOf(c));
5)比较字符串(equals()方法)。
booleantf=s1.equals(s2);
2.22选5彩票号码生成器
(1)界面设计
publicclassLottery{
publicint[]getValue(intmax,intn){
intL[]=newint[n];
inti=1;
intj=0;
L[j]=(int)(Math.random()*max)+1;
while(iintr=(int)(Math.random()*max)+1;
for(j=0;j
if(r==L[j])
break;
}
if(i!
=j)
continue;
L[i]=r;i++;
}
returnL;
}
publicstaticvoidmain(String[]args){
intv[]=newLottery().getValue(22,5);
for(inti=0;iSystem.out.print(v[i]+"");
}
}
}
(2)逻辑设计
1)根据题目要求,设计一个22选5彩票号码生成器。
getValue()获取数组中指定位置的值,该代码显示的是设定数组v容量为22个元素,每次所选择使用的元素为5个。
intv[]=newLottery().getValue(22,5);
2)使用整形数组存放数字。
publicint[]getValue(intmax,intn){
3)给数组L分配n个整型的数据空间,并赋初始值为0。
intL[]=newint[n];
4)调用random()方法令系统产生一个大于等于0,小于1的随机数,并且返回的随机数指定范围在m~n之间。
Math.random()*(n-m+1)+m;
5)由于random()方法默认的返回类型为double类型,但需要的是整型的随机数,因此需要强制类型转换(int)使得所取得的随机数为整型;题目还要求每一位上的数字为1~22区间上的任意一个,但random()方法所生成的随机数为[0,1)之间,因此使用(Math.random()*max)+1语句使得所生成的随机数范围在1~22之间。
L[j]=(int)(Math.random()*max)+1;
6)通过while循环语句和for循环语句的结合使用可以保证每次所生成的5位随机数均不重复。
while(iintr=(int)(Math.random()*max)+1;
for(j=0;j
if(r==L[j])
break;
}
if(i!
=j)
continue;
L[i]=r;i++;
}
7)最终通过for循环语句和打印输出语句结合使用完成该程序设计的目的。
for(inti=0;iSystem.out.print(v[i]+"");
}
(3)程序测试
1)数字存放的数据结构(Array)。
intv[]=newLottery().getValue(22,5);
2)随机数的获得(random()方法)。
L[j]=(int)(Math.random()*max)+1;
intr=(int)(Math.random()*max)+1;
3)循环语句的使用(for语句)。
for(inti=0;ifor(j=0;j
3.设计一个简易的计算器,可以进行四则运算:
加、减、乘、除等(限于十进制下)
(1)界面设计
importjava.awt.*;
importjava.awt.event.*;
importjavax.swing.*;
publicclassCalculatorextendsJFrameimplementsActionListener{
privatestaticfinallongserialVersionUID=1L;
JPanelmainpanel=newJPanel();
JPanelcenterpanel=newJPanel();
JTextFieldtxt=newJTextField("");
StringBuffersb1=newStringBuffer();
StringBuffersb2=newStringBuffer();
charsign;
booleanflag=false;
JButton[]buttons=newJButton[16];{
buttons[0]=newJButton("1");
buttons[1]=newJButton("2");
buttons[2]=newJButton("3");
buttons[3]=newJButton("+");
buttons[4]=newJButton("4");
buttons[5]=newJButton("5");
buttons[6]=newJButton("6");
buttons[7]=newJButton("-");
buttons[8]=newJButton("7");
buttons[9]=newJButton("8");
buttons[10]=newJButton("9");
buttons[11]=newJButton("*");
buttons[12]=newJButton("0");
buttons[13]=newJButton("c");
buttons[14]=newJButton("=");
buttons[15]=newJButton("/");
}
{
centerpanel.setLayout(newGridLayout(4,4,8,8));
for(inti=0;icenterpanel.add(buttons[i]);
buttons[i].addActionListener(this);
}
}
publicCalculator(intx,inty){
this.setTitle("我的计算器");
this.setContentPane(mainpanel);
this.setResizable(true);
BorderLayoutbl=newBorderLayout();
mainpanel.setLayout(bl);
mainpanel.add(txt,BorderLayout.NORTH);
mainpanel.add(centerpanel,BorderLayout.CENTER);
this.setBounds(x,y,300,240);
this.setVisible(true);
}
publicstaticvoidmain(String[]args){
newCalculator(750,200);
}
publicvoidactionPerformed(ActionEvente){
JButtonjb=(JButton)e.getSource();
charc=jb.getText().charAt(0);
switch(c){
case'0':
case'1':
case'2':
case'3':
case'4':
case'5':
case'6':
case'7':
case'8':
case'9':
{
addNum(c);
break;
}
case'+':
case'-':
case'*':
case'/':
{
signEvent(c);
break;
}
case'c':
{
Calculator.this.dispose();
newCalculator(Calculator.this.getLocation().x,Calculator.this.getLocation().y);
break;
}
case'=':
{
if(!
flag)this.txt.setText(sb1.toString());;
sb1=newStringBuffer(getAnswer());
sb2=newStringBuffer();
this.txt.setText(sb1.toString());
sign='=';
flag=false;
break;
}
default:
break;
}
}
privatevoidsignEvent(charc){
if(flag&&sb2.length()!
=0){
sb1=newStringBuffer(""+getAnswer());
this.txt.setText(sb1.toString());
}
else{
flag=!
flag;
this.txt.setText("");
}
this.sign=c;
}
privateStringgetAnswer(){
doublea=0;
if(sb1.length()!
=0)
a=Double.parseDouble(sb1.toString());
doubleb=0;
if(sb2.length()!
=0)
b=Double.parseDouble(sb2.toString());
doubleanswer=0;
switch(sign){
case'+':
answer=a+b;
this.txt.setText("");
break;
case'-':
answer=a-b;
this.txt.setText("");
break;
case'*':
answer=a*b;
this.txt.setText("");
break;
case'/':
answer=a/b;
this.txt.setText("");
break;
default:
returnnull;
}
this.sb1=newStringBuffer("");
this.sb2=newStringBuffer("");
return""+answer;
}
privatevoidaddNum(charc){
if(!
flag){
sb1.append(c);
this.txt.setText(sb1.toString());
}
else{
sb2.append(c);
this.txt.setText(sb2.toString());
}
}
}
例如:
45-6=45+6=
45*6=45/6=
(2)逻辑设计
定义计算器类calculator,该类继承JFrame类并实现ActionListener接口。
整体窗口采用边界布局,通过另外建立若干面板组件。
再用GridLayout(网格布局)对数字控件和操作按钮进行布局。
使用容器类组件的常用方法如setBounds(x,y,300,240)方法设置窗口的位置和大小;setTitle("我的计算器")方法设置窗口的标题栏;setVisible(true)方法控制了窗口的可见性。
此外,单击任何一个按钮都会触发ActionEvent事件,要处理这些事件就必须实现ActionListener接口的actionPerformed方法。
计算器的程序设计,必然有数据输入,其中数据包括运算符和数字,均要通过计算器上的button按钮选项按钮输入进去,里面录入的必然是字符型的数据,如果进行运算要将输入的数据转化成Double型,以防出错。
(3)程序测试
1)具有相应的界面。
publicCalculator(intx,inty){
this.setTitle("我的计算器");
this.setContent