1、Java大作业要求大作业一 在线购物系统一、实验目的1. 结合前面的知识编写网上购物系统2. 进一步掌握自定义类的编写3. 进一步掌握Stack类的一些常用消息4. 掌握通过List类定义列表对象的方法5. 掌握通过ScrollPane类定义滚动窗口对象的方法6. 进一步掌握GridLayout布局管理器7. 进一步掌握事件监听器的使用;二、准备工作1.复习教材中的有关内容;2.完成实验一到实验七;3.预习将要用到的类和消息;三、实验内容今天,我们浏览Internet时会看见许多在线商店。在作业一中,你将要定义一个简单的applet,该applet将会给顾客提供“在线购物”的界面。假设“电子商
2、店”的购货清单里只包括4件不同的商品供顾客选择,还有4个按钮供顾客操作。它们是:“购买项目”按钮(给购货车添加所选项目),“删除项目”按钮(从购货车删除所购项目),“结帐”按钮(结算顾客应交款额)和“重置”按钮(购货车清空)。顾客每轮最多只能买5件商品,即:购货车一次最多只能装5件商品。如果顾客想购买更多的商品,必须得先“结帐”“重置”,然后再开始新一轮的购物。如果顾客结帐时所付款额小于$100.00,则除了要交纳税款(GST)外,再另加$2.00运送费。如果顾客结帐时所付款额多于$100.00,则免去运送费。1. 程序设计注意事项及规则 你不能创建,除了在该文档描述的类之外的任何类。 你不能
3、在你的任何类创建,除了在该文档描述的非私有方法之外的任何非私有方法。你不能修改任何public方法的属性(变量名可以改)你不能定义任何非私有实例变量或非私有静态变量。2. 完成作业的步骤 在开始编程之前,请仔细阅读以下说明:该作业只允许你创建一个项目,且项目名只能为:asn1,否则我们不会批改你的作业,你的成绩为0分。跟该项目有关的类都必须存放在项目文件夹中,确保项目中包括ShoppingCart.java(购货车类)、ShoppingCart.class、 和Estore.java、Estore.class、Estore.html文件。该作业包括3部分,包括2个类的编写任务。它们是:Shop
4、pingCart(购货车) 和Estore(电子商店)类 。在你没有完成下列实验前,你不能着手做各部分。 完成实验五之后,你可以开始做作业的第一部分。完成实验六之后,你可以开始做作业的第二部分。完成实验七之后,你可以开始做作业的第三部分。 3. 购物过程演示applet运行后,应出现如图1所示的用户界面,项目列表中不能有被选择的项目。图1 系统启动时的界面现在,顾客从项目列表中选择了商品UofA CAP,然后单击按钮“购买商品”,即: Purchase Item按钮。 购货车里,就有总计价格为$10.00的商品。 界面如图2所示:图2 往购物框中添加商品时的界面购完 UofA CAP, WIN
5、TER COAT和 LONG SLEEVE SHIRT后, 总价格变为 $85.50,当用Remove Item按钮,删除被选项UofA CAP后,总价格立即变为$75.50。界面如图3所示:图3 从购物框删除商品时的界面若想开始新一轮的购物,请单击 RESET 按钮。结帐后界面如图4所示:图4 结帐时的界面现在,顾客通过点击Check Out 按钮,进行结帐。屏幕上输出:感谢信息和当前的总价格。结帐后的总价格包括:GST和运输费(如果total$100.00)。界面如图5所示。图5 重置购物框时的界面4. 大作业第一部分 (1) 完成第一部分应具备的条件 你应该具备能够完成作业的第一部分的能
6、力,当你已经: 完成实验5并开始做实验6。 (2)第一部分的任务在第一部分,你要实现:ShoppingCart类。ShoppingCart 是一个允许我们创建ShoppingCart对象的一个类。该对象将模拟一个虚拟的购物篮。ShoppingCart对象将会跟踪计算被购买商品的价格换句话说,它将不断地计算被购买商品的价格,直到客户结帐。该类不涉及任何跟applet,按钮,及用户在屏幕上的点击操作等有关内容(这些问题将会在第二部分的Estore类中解决)。ShoppingCart.java只考虑到有关购物篮的一些概念。编写该类的代码时,请牢记这一点。现在,在第一部分你要实现的任务有: 建立一名为
7、asn1的applet项目,切记必须为asn1,如果你起名为Asn1,asn1或其他任何名称,你的作业成绩将会为0。 开始编写 ShoppingCart 类。(你只能从作业的第二部分开始编写Estore类 )。(3)ShoppingCart 类现在你可以开始编写ShoppingCart 类。用文件名 ShoppingCart.java保存你的文件 (你必须将其保存在你的项目文件夹Asn1中 )。现在你可以将以下的骨架代码拷贝到你的ShoppingCart.java文件里,开始编辑代码。 重要!我们已经提供了ShoppingCart.java的“骨架”代码。你的任务是在“骨架”的周围填充“肉”
8、!你必须分析我们给你提供的实例变量和常量,并仔细阅读方法中的注释,按照注释陈述的功能编写代码,将语句写在方法体中,当它们被执行时,能够实现注释语句中指定的功能。因为没有认真阅读红色的注释语句,有些学生可能不太理解每个方法应该完成的任务,时常会陷入问题中,所以编写代码前必须认真阅读注释语句!也很重要! 当你给每个方法填充完语句,请测试一下你的类。你可以通过运行该页低部的连接中的代码,测试ShoppingCart.java 。import java.util.Stack; /* * 该类的一个实例将会:模拟一个购物篮,该购物篮里将会保存在“在线购物商店”中所购买的商品(最多可以容纳5件商品)以及购
9、物总额。public class ShoppingCart /常量 private static final float TAX = 0.07f; private static final float SHIPPING = 2.00f; private static final int CARTSIZE = 5; /实例变量 private Stack cart; private int count; private float total; private boolean checkedOut; public ShoppingCart () /* 构造方法: * 初始化购物篮的状态:购物总额
10、(total)为0.00f,结帐状态(checkedOut)为false,购物总数(count)为0。*/ cart=new Stack();this.total=0;this.checkedOut=false;this.count=0; public boolean add(String item, float price) /* *如果购物篮非空(例如:小于5件商品),就把该商品添加到购物篮并修改购物总额(total)*的值,然后返回true,否则返回false。 */ if (count5)cart.add(item); this.total+=price; count+;return
11、true;else return false; public boolean remove(String item, float price ) /* *如果购物篮里有该商品,就删除该商品并修改购物总额(total)的值,然后返回true,*否则返回false。*/ if public void checkOut( ) /* * 如果购物篮里的商品还没有被结帐,对其进行结帐,并修改购物总额的值:此处购物总额中要*包括GST和运输费(如果total$100)。*/ public boolean isCheckedOut() /* * 返回当前购物篮的结帐状态(true或false)。*/ pub
12、lic float getTotal( ) /* * 返回购物总额,保留2位小数。*/ public void reset() /* *重新初始化该购物篮,以便于开始新一轮的购物。*/ (4) 第一部分测试代码完成第一部分后,将下列代码拷贝到名为test.java的文件中,并将其添加到你的项目文件夹里用来测试你的ShoppingCart类。/* * Test.java * 说明: 作业一第一部分测试代码。 */ public class Test public static void main(String arg) ShoppingCart cart = new ShoppingCart()
13、; System.out.println(cart.getTotal()+ 0.0); cart.add(“UofA CAP”,10); cart.remove(“UofA CAP”,10); System.out.println(cart.isCheckedOut()+ false); System.out.println(cart.getTotal()+ 0.0); cart.reset(); /. /. /为测试购物篮的各项功能,你可以多次调用ShoppingCart的各个方法。 (5) 第一部分结束后,你的项目文件夹应包含: 名为asn1的项目文件 一名为ShoppingCart.ja
14、va 的,通过编译的类。 在开始第二部分前,测试第一部分。 现在,可以开始阅读该作业的第二部分。5. 购物过程操作有误时,程序应提示的信息顾客没有从列表中选择商品就单击Purchase Item来购买商品,界面中提示的信息如图6所示。图6 没有选择任何项目时的界面如果顾客购买了4个UofA CAP后,但选择一双LEATHER SHOES来进行删除。注意以下出错的信息。 只能删除预先放在购货车里的商品。界面中提示的信息如图7所示。图7 删除购物框中没有的商品时的界面假设购货车里已经有4个帽子,顾客继续试着购买两件冬季大衣,将会产生以下出错信息: Your cart is full, check
15、out then start again,即:“你的购货车以满,请先结帐,再重新开始购物”。界面中提示的信息如图8所示。图8 购物框满时的界面如果顾客想对一个空的购货车进行结帐,将会显示如图9所示的信息: 图9对一个空的购货车进行结帐时的界面6. 程序风格要求(1) 应该给所有的变量和私有方法使用描述性的名称。(对表示某一点的坐标值:x和y时,可以使用x和y作为变量名,但这是一个例外)(2)在定义的每个类和方法的开头加上简洁的注释语句,以说明类和方法的功能。(3)应该尽可能地让每个方法只完成一件事情,即:编写轻巧简短的方法。如果你认为你的方法太长,那就定义私有的实例方法,把一些代码写在私有方法
16、内。如果你程序里的私有方法太少,将会被扣分。*(4)应该对左缩进,空格和空行使用一致、易读的方案。(5)如果一个变量只局部使用于一个方法,那么就应该把它定义成局部变量而不是实例变量。(6)应该尽可能少地使用实例变量,尽可能多地使用参数。(7)不能更改任务说明中给出的任何公共方法(public method)的属性。(8)必须适当地使用关键字this:1. 必须在所有私有实例变量前加上this。2. 在调用私有实例方法时,必须在所有私有实例方法前面加上this。该规则只使用于在当前类中定义的私有实例方法前。 (9)你的代码中不能有除了0, 1, true, false 和 null之外的任何文字
17、常量。如果你需要使用其它的常量,你需要定义一个private static final constant (私有的静态final常量): /* 实验5*/ private static final int WIDTH = 190; private static final int ROOF_HEIGHT = 50; private static final String A_STRING = Just an example; /* 作业一 */ private static final String RED = Red; private static final String YELLOW =
18、 Yellow; private static final String BLUE = Blue; /* 作业2 */ private static final String QUESTION = Do you really want to quit?;(10)前述的private static final constants 只是个例子,这些常量并没有出现在实验五,作业一或作业二中。(11)当比较两个对象时(不是简单类型,如:int,float),要使用消息equals而不是=,(而且使用!equals 而不是 !=)。(12)如果完成一件事有两种不同方法,请挑选较容易理解的哪一个。 (13
19、)作业一的第一部分,不需要你定义任何实例变量,因为我们已经替你定义好了。但在第二部分,第三部分中你需要定义自己的实例变量。(14)如果需要,你可以定义静态final常量 static final constants 。 (15)你不能定义任何自己的公共方法 public methods,你只能使用任务描述中给出的公共方法,但如果需要你可以定义自己的私有方法。7. 大作业第二部分(1)完成第二部分的应具备的条件你应该能够完成该作业的第二部分,当你已经: 完成了实验5 并阅读了每个实验中要你预习的材料 完成了作业的第一部分(2)第二部分的任务在第一部分,你已经定义了 ShoppingCart类。在
20、第二部分,你将要编写另外一个类(Estore类),在该类中将要创建一个小应用程序(Applet)。小应用程序Estore将要显示所有的图形用户部件。第二部分结束时,applet将显示所有的用户部件,但各部件到第三部分结束时才起作用。(3)EStore 类现在,你可以开始编写Estore类。将你的文件保存为Estore.java。(确保将其填加到你的项目文件夹中它应该出现在项目的程序列表当中)。将下列程序“骨架”拷贝下来后,你可以开始编辑Estore.java。 请仔细阅读红色的注释语句,先搞明白每个方法中要完成的功能。 import java.awt.*;/* * E-Store * 如果所购
21、商品总额大于$100,免费运送,否则加$2.00的运送费。 */public class EStore extends Applet /常量 private static final float COAT_PRICE = 50.00f; private static final float SHIRT_PRICE = 25.50f; private static final float SHOES_PRICE = 39.99f; private static final float HAT_PRICE = 10.00f; private static final String TOTAL_ST
22、R = Your current total = $; private static final String RESET = RESET; private static final String PURCHASE = Purchase Item; private static final String REMOVE = Remove Item; private static final String CHECK_OUT = Check out; private static final String COAT_STR = WINTER COAT; private static final S
23、tring SHIRT_STR = LONG SLEEVE SHIRT; private static final String SHOES_STR = LEATHER SHOE; private static final String HAT_STR = UofA CAP; private static final String WELCOME = Welcome to CMPUT 114 E-Store; private static final int MAX_ITEMS = 5; / 购物篮中最多能容纳的商品件数 / 实例变量 public void init() /* *这是被app
24、let调用的第一个方法*初始化Applet:初始化变量,添加部件等 */ /* 为完成你的类,你可以创建一些私有方法 */ private Panel makeButtonPanel() /* * 定义按钮并将其添加到面板(Panel)里,并返回该面板 */ private ScrollPane makeListPanel() /* 为列表定义一个滚动窗口(ScrollPane),并返回该滚动窗口 */ private void makeMainPanel() /* * 给主面板添加所有的组件:标签,列表,按钮面板等。 */ private List makeList() /* *给4件商品定
25、义一个列表,一次只能选择一件商品 */ (4) HTML 文件将你的HTML文件保存为EStore.html。其内容如下: Assignment 1 EStore The source. (5) Applet的布局为帮你形象化并理解applet中组件的布局,我们给你提供以下的图10所示的界面:图10 购物框布局图(6)第二部分结束后,你的VISUAL J+项目文件夹中应该包含: 有一名为asn1.mcp的项目文件 有一名为EStore.html 的HTML文件 有一名为ShoppingCart.java 的编译过的java文件 有一名为 EStore.java的编译过的java文件 第二部分结
26、束后,当你运行你的applet时,它应该能在屏幕上显示所有的组件(但并没有编写响应用户操作的任何代码)。现在你可以开始阅读作业的第三部分。8大作业第三部分(1) 完成第三部分应具备的条件你应该能够完成作业的第三部分,当你已经: 完成实验7 阅读完每次实验的预习资料 已完成作业的第一部分和第二部分(2)第三部分的任务在第一部分和第二部分中,你已经定义了ShoppingCart 类和 EStore 类。在第三部分你将要继续编辑Estore类,使得该applet能够响应用户的行为(例如:当用户/客户点击按钮时,它的确能做一些事情)。作业的这一部分比较难,因为你必须使得每个按钮都生效。你将会用栈(St
27、ack)对象来保存购物篮中的商品。例如,当用户购买一件商品时,该商品将会被押入栈对象内,当用户删除一件商品时, 该商品会被弹出栈外。你可以假设栈对象代表你的购物篮,该购物篮最多只能存放5件商品。 完成作业的第三部分后,你应该实现了 EStore和 ShoppingCart类的所有功能。 ShoppingCart.java类中的变化: 你将要在ShoppingCart类中增加一个方法,以便客户结帐。 public void checkOut( ) /*如果购物篮中的商品还没有被结帐的话,给其结帐: * 修改total的值 * 计算GST和运输费(如果total$100) */ EStore.ja
28、va类中的变化:你将要对Estore类进行如下改变,以便你的applet: 让applet做各个组件的监听器。 实现一个actionPerformed() 方法。由于这些变化,你将要增加几个import语句,并且编辑Estore 类的第一行,如下所示:import java.awt.*;import java.awt.event.*;import java.util.Stack;import java.applet.Applet;/* * E-Store *如果所购商品总额大于$100,免费运送,否则加$2.00的运送费及GST。 */public class EStore extends A
29、pplet implements ActionListener 你必须增加并编写下列方法: private void addListeners() /* * 让Applet作为各个组件的事件监听器(ActionListener)。* public void actionPerformed(ActionEvent event) /*对所点击的任何按钮作出适当的响应。 *购买商品 *点击购买按钮之前:选择预购商品 * 不允许选择多件商品 * 还没有给当前所购商品结帐 *点击购买按钮之后:更新购物总额(total标签)的值 * 往栈对象添加所购商品 * *从购物篮中删除商品 * 点击删除按钮之前:选择一件预删商品 * 只能删除已经放在购物篮里的商品 * 还没有给当前所购商品结帐 * 点击删除按钮之后:要从商品总额(total)中减去被删除商品的价格。更新*购物篮中商品总额(total)的值,修改total标签的值,从栈对象中删除所选商*品 *结帐 * 点击结帐按钮之前:购物篮中至少有一件商品,还没有给购物篮中
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1