《 Java 语言程序设计》专业实习任务(一)
一、设计目的:
本次设计是对教材前7章的总结。在学习Java基本语法的基础上,利用面向对象的程序设计方法解决一些简单的问题。设计的目的在于掌握 Java 的基本原理、设计方法和使用规则;能够运用面向对象方法分析问题,并利用所学知识合理地进行设计;熟练掌握Application的编写和运行过程;并能够进行简单的GUI设计。
二、设计题目:
㈠程序改错。根据题目要求调试下面的程序, 分析错误原因并改正 ,直到运行正确, 写出运行结果 。
⒈输出 40 以内的素数,每行输出 6 个数。
public class Prime_1_1{
public static void main(String[] args){
final int MAX=40;
int i,j,num;
System.out.print(2+"/t");
counter++;
for(num=3;num<=MAX;num=num+2);
{int k=3;
while(num%k!=0&&k<num) k=k+2;
if(k==num)
{ System.out.print(num+"/t");
counter++;
if(counter%6==0) System.out.println();
}
}
}
}
⒉给对象 u 初始化 ( 姓名: liqiang 性别: m) ,并显示该对象的数据成员值。
public class Hide_1_2{
String name;
char gender;
public Hide_1_2(String name,char ch)
{
name=name;
gender=ch;
}
public showInfor()
{
System.out.println("Name: "+name);
System.out.println("Gender: "+gender);
}
public static void main(String[] args){
Hide_1_2 u= new Hide_1_2("liqiang",'m');
u.showInfor();
}
}
⒊调用 Link 类的方法完成两个字符串的连接和输出。
class Link{
public String connect(String str1,String str2)
{
return str1.concat(str2);
}
}
public class Method_1_3{
public static void main(String[] args){
String str;
str=Link.connect("Hello ","Java!"); // 不要改动这条语句
System.out.println(str);
}
}
⒋利用父类的 print() 方法输出年龄
class Mankind{
int age;
private void print()
{
System.out.println("Age is: "+age);
}
}
public class Kids_1_4 extends Mankind{
public Kids_1_4(int x)
{
age=x;
}
public static void main(String[] args){
Kids_1_4 u=new Kids_1_4(13);
u.print();
}
}
㈡根据提示功能, 补充 下面的程序, 写出运行结果 。
⒈找出数组中的最大值并显示;同时显示出它在数列中的位置(如:值是 70 位置是 5 )
public class Find_2_1{
public static void main(String[] args){
int a[]={11,21,9,12,70,4};
int max=a[0],i,position=0;
for( ① ;i<a.length;i++)
if(max<a[i])
{max=a[i];
position= ② ;
}
for(i=0;i<a.length;i++)
System.out.print(" "+a[i]);
System.out.println();
System.out.println("The max is: "+max);
System.out.println("The position in the list is: "+ ③ );
}
}
⒉为一只 4 岁的鄂鱼设置名称和年龄,并显示这些信息,均用方法完成。根据提示,仿照已有的方法完成下面的程序。
class Animal{
private String name;
private int age;
public String getName(){
return name;
}
① 得到年龄 :getAge()
② 设置姓名 :setName()
public void setAge(int x){
age=x;
}
}
public class Animal_2_2 extends Animal{
public static void main(String[] args){
Animal_2_2 u=new Animal_2_2();
u.setName("crocodile");
u.setAge(4);
System.out.println("It's name is: "+ ③ ); // 输出姓名
System.out.println("It's age is: "+ ④ ); // 输出年龄
}
}
㈢分析程序,根据场景描述, 设计程序的存储路径,并输出运行结果 。
有 3 个程序如下所示:( Package_4_1.java ; Show1.java ; Show2.java )
源文件: Package_4_1.java
import exam.Show1;
import exam.pour.Show2;
public class Package_4_1{
public static void main(String[] args){
Show1 u1=new Show1();
Show2 u2=new Show2();
System.out.println("Disp come from Show1:");
u1.print();
System.out.println();
System.out.println("Disp come from Show2:");
u2.print();
}
}
源文件:Show1.java
package exam;
public class Show1{
public void print()
{
System.out.println("Hello! I am a class named Show1");
}
}
源文件: Show2.java
package exam.pour;
public class Show2{
public void print()
{
System.out.println("OK! I am a class named Show2");
}
}
题目要求 :
假设把源文件 Package_4_1.java 放到E 盘的Java 子目录里,如下所示:
在这个目录底下,为了正确编译和运行该文件,如何存放Show1.java和Show2.java两个源文件。 画出设置正确的目录结构 。
E:/java>java Package_4_1
Disp come from Show1:
Hello! I am a class named Show1
Disp come from Show2:
OK! I am a class named Show2
㈣根据题目要求, 编写程序 , 写出运行结果 。
⒈求 1 ! +2 ! +3 ! + … +10 !
⒉动物都可以呼吸,于是有一个方法叫 breathe() ,可以输出信息“ Breathing …”;
鱼是动物的一种,也可以呼吸,但输出信息“ Bubbling …”会更好;
有一种鱼叫肺鱼,能够像陆地动物那样呼吸,所以对于它们用“ Breathing …”就可以了。
要求:
① 根据上面的描述,确定类的继承关系。
② 显示一条肺鱼的呼吸方式—— Breathing …
③ 显示一条鱼(不是肺鱼)的呼吸方式—— Bubbling …
提示:
鱼继承于动物;
利用覆盖或调用父类方法等手段完成显示要求。
3. 通过接口和继承实现下述功能:
⑴ 定义一个接口 IPerson ,封装一个方法: void print()// 输出人员有关信息。
⑵ 利用 IPerson 接口规范,定义一个类 Teacher ,表示某学校教师的最基本信息。
4 个属性:工号 ID ,姓名 name , 性别 sex ,年龄 age ,工龄 workAge ,工资 salary ,职务 job ;
2 个构造方法: Teacher ( String ID, String name, char sex , int age , int workAge, double salary , String job) ; Teacher( String ID, int workAge, double salary , String job) ;
13 个成员方法:使用 set/get 方法设置或获取教师的姓名、性别、年龄、工龄、工资、职务;输出教师的工号、姓名、工龄、工资和职务信息: print() ;
⑶ 再定义一个 Teacher 类的子类 Director ,表示教师中的主任。主任有专门的助理。
3 个成员变量:工号 ID ,姓名 name ,助理名 assistantName ;
2 个构造方法: Director ( String ID, String name, char sex , int age , int workAge, double salary , String job, String assistantName) ; Director ( String ID, String name, String assistantName) ;
3 个成员方法:使用 set/get 方法设置或获取主任的助理名;输出主任的工号、姓名、工龄、工资、职务和他的助理: print() ;
⑷ 利用 IPerson 接口规范,定义一个类 Student ,表示某学校学生的最基本信息。
8 个属性:学号 ID , 姓名 name , 性别 sex , 年龄 age ,平时成绩 ordiScore ,期末成绩 fianlScore ;
2 个构造方法: Student(String ID) ; Student(String ID, String name, char sex , int age) ;
12 个成员方法:使用 set/get 方法设置或获取学生的姓名、性别、年龄、平时成绩、期末成绩。统计总成绩,总成绩的计算方式是:平时成绩 *20%+ 期末成绩 *80% : CalculateTotalScore( ) ;输出学生的学号、姓名、平时成绩、期末成绩: print( ) ;
⑸ 定义一个主类 Test1, 该类中利用 Teacher 类和 Director 类,使用 set/get 方法为每个教师的相关属性设置值,输出每个教师的工号、姓名、工龄、工资和职务以及主任的助理名。
⑹ 定义一个主类 Test2 ,该类中利用 Student 类,使用 set/get 方法为每个学生的相关属性设置值,输出每个学生的学号、姓名、平时成绩、期末成绩及总成绩。
㈤程序 Caculate.java 完成的功能是:进行消费金额的结算。运行界面如下所示。
1. 功能描述
①在没有进行消费茶品的选择前,文本域内不可输入;只有选择后,才可以输入数量。
②取消某一个费茶品的选择时,文本域内不可输入。
③如果是“内用”,附加 100 元的消费金额。
2. 题目要求
①完成程序段①~⑤的编写。
②回答问题①~③。
3. 提示信息
① JCheckBox 提供方法 . : boolean isSelected()____ 得到按钮的状态
② JRadioButton 提供方法 . : boolean isSelected()____ 得到按钮的状态
4. 程序清单( Caculate.java )
import java.awt.*;
import javax.swing.*;
import java.awt.event.*;
public class Caculate extends JFrame implements ActionListener
{
// 定义出现的组件:由上而下,自左致右
JLabel jLabel0 = new JLabel();
JCheckBox jCheckBox1 = new JCheckBox();
JCheckBox jCheckBox2 = new JCheckBox();
JCheckBox jCheckBox3 = new JCheckBox();
JTextField jTextField1 = new JTextField(8);
JTextField jTextField2 = new JTextField(8);
JTextField jTextField3 = new JTextField(8);
JLabel jLabel1 = new JLabel(); JLabel jLabel2 = new JLabel(); JLabel jLabel3 = new JLabel();
JRadioButton jRadioButton1 = new JRadioButton();
JRadioButton jRadioButton2 = new JRadioButton();
// 问题 1 :定义 buttonGroup1 对象的作用是什么?
ButtonGroup buttonGroup1 = new ButtonGroup();
JLabel jLabel4= new JLabel(); JButton jButton1 = new JButton();
// 定义用到的容器
JPanel jPanel1 = new JPanel(); JPanel jPanel2 = new JPanel(); JPanel jPanel3 = new JPanel();
JPanel jPanel4 = new JPanel(); JPanel jPanel5 = new JPanel(); JPanel jPanel6 = new JPanel();
public Caculate() {
try {
/* 设置关闭窗口
问题 2 :记住这种关闭窗口的方式: JFrame 类提供的方法,设置用户关闭这个框架时默认发生的操作。写出利用事件监听机制关闭窗口的 4 个关键步骤和代码,并做必要的阐述。
*/
setDefaultCloseOperation(EXIT_ON_CLOSE);
jbInit();
}
catch (Exception exception) {
exception.printStackTrace();
}
}
private void jbInit()
{
// 获取根容器、设置布局、大小、标题
Container cp = getContentPane();
cp.setLayout(new GridLayout(6,1));
// 设置用到的容器布局
jPanel1.setLayout(new FlowLayout()); jPanel2.setLayout(new FlowLayout());
jPanel3.setLayout(new FlowLayout()); jPanel4.setLayout(new FlowLayout());
jPanel5.setLayout(new FlowLayout()); jPanel6.setLayout(new FlowLayout());
// 设置组件属性:由上而下,自左致右
jLabel0.setFont(new Font(" 隶书 ", Font.PLAIN, 24));
jLabel0.setText("/" 酷 /" 泡沫红茶店 ");
jCheckBox1.setText(" 泡沫红茶( 35 元) ");
jCheckBox2.setText(" 菊 花 茶( 50 元) ");
jCheckBox3.setText(" 木瓜奶茶( 40 元) ");
// 填充程序①:注册事件源
jTextField1.setText("0"); jTextField2.setText("0"); jTextField3.setText("0");
jTextField1.setEditable(false); jTextField2.setEditable(false); jTextField3.setEditable(false);
jLabel1.setText(" 杯 "); jLabel2.setText(" 杯 "); jLabel3.setText(" 杯 ");
jRadioButton1.setText(" 内用 "); jRadioButton1.setSelected(true);
jRadioButton2.setText(" 外带 ");
buttonGroup1.add(jRadioButton1); buttonGroup1.add(jRadioButton2);
// 使得 jLabel4 对象呈现凹下去的外观,用于突出显示结算金额
jLabel4.setBorder(BorderFactory.createLoweredBevelBorder());
// 设置 jLabel4 对象外观的大小
jLabel4.setPreferredSize(new Dimension(60, 20)); jButton1.setText(" 结帐 ");
jButton1.addActionListener(this);
// 将组件加载到容器里 : 自上而下
jPanel1.add(jLabel0 );
jPanel2.add(jCheckBox1); jPanel2.add(jTextField1); jPanel2.add(jLabel1);
jPanel3.add(jCheckBox2); jPanel3.add(jTextField2); jPanel3.add(jLabel2);
jPanel4.add(jCheckBox3); jPanel4.add(jTextField3); jPanel4.add(jLabel3);
jPanel5.add(jRadioButton1); jPanel5.add(jRadioButton2);
jPanel6.add(jButton1); jPanel6.add(jLabel4);
// 问题 3 :下面这 6 条语句完成了什么功能?
cp.add(jPanel1); cp.add(jPanel2); cp.add(jPanel3);
cp.add(jPanel4); cp.add(jPanel5); cp.add(jPanel6);
}
public void actionPerformed(ActionEvent e) {
int money = 0;
//getSource() 方法返回事件源对象
if(e.getSource()==jCheckBox1)
{ // 填充程序②:对 jCheckBox1 的选择做处理 }
if(e.getSource()==jCheckBox2)
{ // 填充程序③:对 jCheckBox2 的选择做处理 }
if(e.getSource()==jCheckBox3)
{ // 填充程序④:对 jCheckBox3 的选择做处理 }
if(e.getSource()==jButton1)
{ // 填充程序⑤:计算价钱并显示 }
}
public static void main(String[] args){
Caculate cc = new Caculate();
cc.setSize(400,350);
cc.setTitle("Please caculat:");
cc.setVisible(true);
}
}
三、设计要求 :
1 . ㈠~㈤题必做。
2 .积极查阅相关教材、资料,独立完成。
四、实习报告撰写内容和要求
(一)内容
1. 系统环境(硬件环境、软件环境)
2. 设计内容:
①设计题目
②题目分析:根据题目要求写(没有则省略)
③程序清单(或者补充程序段,如第㈡题;对于第㈠题,用彩笔画出修改的地方)
④ 运行结果
3. 设计难点及解决办法
4. 创新及技巧:根据自己的设计过程进行汇总,如果没有就不用写。
5. 心得体会
(二)要求
1. 统一书写在实习报告上。
2. 认真填写实习报告,程序要写完整,补充程序段要做特殊标记。
五、设计时间:一 周(第17周)。具体时间参考实验室安排表。
六、说明:
①考勤占评分的 20% (提前完成的同学需要找老师登记) ,程序调试占评分的 40% ,设计报告占评分的 40% 。严禁抄袭、复印实习报告,否则相同报告均以零分计。
②设计中,要提前编制下次调试的程序,计划好每次上机的内容,积极、高效、独立地完成这次设计任务。对没有准备的同学,禁止上机。