Java第七次作业 1502 马 帅
《Java技术》第七次作业
(一)学习总结
1.写出事件处理模型中的几个关键词,并通过具体代码实例说明你对事件处理模型的理解。
事件源与事件:图形用户界面中的每一个组件,如一个按钮、一个文本框等,在进行点击按钮或向文本框输入字符时,发生动作,则称该按钮或文本框为事件源,发生的动作称为事件。
import javax.swing.JButton;
import javax.swing.JDialog;
import javax.swing.JTextField;
public class Test extends JDialog{
public static void main(String[] args) {
JButton testButton = new JButton("测试按钮"); //事件源:按钮
JTextField testTextField = new JTextField(20); //事件源:文本框
}
}
其中testButton与testTextField就是事件源,点击按钮或向文本框中输入字符称为事件。
事件对象:包含有事件发生时的信息,可以说是事件发生时被传递的参数。
监听器:监听事件源的动作,当事件源产生事件时,调用不同的方法并执行。
testButton.addActionListener(new ActionListener(){ //添加监听器,当点击按钮时
public void actionPerformed(ActionEvent e){ //执行test()方法
test();
}
});
public void test(){ //输出文本框testTextField中的内容
System.out.println(testTextField.getText());
}
2.其他需要总结的内容。
对于图形用户界面的程序设计思路来说,首先写出界面,即窗体,定义窗体中的组件,添加事件源和监听器,然后再写出监听到事件后要执行的方法和方法具体的内容。
使用setBounds(int x , int y , int width , int height)方法定义各个组件的具体位置,其有四个参数,x和y是位于窗体的具体位置,width和height是组件的大小长和宽。
(二)实验总结
实验内容:
基本要求:
使用GUI,编写一个宠物商店管理系统实现对宠物信息的统一管理。假设宠物种类有猫、狗,宠物信息包括:编号、品种、年龄、数量、价格。系统启动进入登录界面,登录成功进入管理界面,否则提出错误信息后退出系统。
在管理界面实现以下功能:
(1)显示所有宠物列表
(2)添加宠物到列表
(3)删除宠物
(4)对宠物信息进行修改
(5)退出
功能扩展:
用户分为管理员和普通用户两种,增加普通用户注册功能,增加普通用户界面。
实现以下功能:
(1)显示所有宠物
(2)能够按照品种对宠物进行查找
(3)购买宠物
(4)显示购买清单
(5)退出
- 程序设计思路:
首先,把图形化界面的程序分成两个部分:图形界面的代码和信息的存储与增删改查。
其中,信息的存储与增删改查是之前写过的,比较简单,而新增加的内容就是图形界面。
一共有6个包:
items:用来声明物品的信息和用户信息,包含三个类:
PetItem:用来记录商品的信息;
UserItem:用来记录各个用户的信息;
PetBought:用来记录用户购买的物品信息。
data:用来初始化和声明上述构造方法:
DataBase:初始化商品信息;
UserInformation:初始化用户信息;
UserBought:声明购买到的物品信息。
functions:具体的数据操作方法:
Function:全部商品的展示、增加、修改和删除操作;
LoginJudge:对比用户登录时的用户名和密码;
CheckRegister:对比注册时用户名是否重复,如果不重复则向UserItem里添加一个用户。
BuyPets:购买商品时的服务,包含增加、删除购买到的物品,计算购买到的物品的总价;需要参数里的用户名,先使用循环和equals方法查找到当前用户,然后调用UserItem里面的getPetbought()来声明一个PetBought类的对象,使用add方法和remove方法进行修改和删除。
changeData:用来调用展示、增加和删除数据:
ChangeData:对商品信息进行操作;
Register:添加用户信息。
tool:GUI工具:
GUITools:设置窗口图标和设置居中。
view:所有用到的界面,下面详细解释一下各个界面:
WelcomeFrame:简单的进入系统的窗口,设置一个按钮,添加监听器,点击按钮进入登录界面LoginView。
LoginView:登录界面。设置文本框和密文文本框,分别用来输入用户名和密码;设置两个按钮,一个“登录”按钮一个“注册”按钮。当点击“注册”按钮时,进入注册界面RegisterView,点击“登录”按钮 时,按登录的用户名判断是进入管理员界面AdminView或者用户界面UserView。添加一个set和get方法,用来记录用户名文本框中的用户名。
RegisterView:注册界面。设置一个文本框和两个密文文本框,分别用来输入用户名、密码和确认密码;设置一个“注册”按钮和一个“返回”按钮。添加监听器。点击“注册”按钮时,调用function包中的CheckRegister类中的方法,进行注册用户名的比对,如果返回true则注册成功,返回false注册失败,然后关闭当前窗口,进入登录LoginView界面;“返回”按钮是返回LoginView登录界面。
AdminView:通过登录界面登录成功后管理员进入的界面。对商品信息类PetItem里面所有的属性设置一个文本框,用来方便添加和修改商品信息。添加两个按钮,“添加”和“修改”,分别将对应的信息进行操作。声明一个表,定义queryPetItem()方法用来输出表格,定义listToArray()方法用来添加表中的数据,通过functions包中的Function类中的queryPetItem()方法来查询所有的商品信息。修改时,调用functions包中Function类里的changePetItem方法进行修改,删除时则调用functions包中Function类里的deletePetItem方法进行删除,每次添加、修改和删除后重新调用本类的queryPetItem方法刷新列表。
UserView:通过登录界面登录成功后用户进入的界面。设置一个文本框,用来输入商品编号。添加一个表,与上述界面中的表的操作相同,输出所有商品的信息。添加“加入购物车”和“已买到的宠物”按钮。添加监听器。“加入购物车”,按文本框中的编号进行添加,调用functions包中BuyPets类的buyPetItem方法,参数为编号和登录界面LoginView中记录的用户名,返回true则提示信息“成功加入购物车”,返回false提示信息“加入购物车失败...”。“已买到的宠物”进入BoughtView界面。添加“注销”按钮,点击时返回LoginView登录界面。
BoughtView:已购买到的物品界面。添加一个表,按照LoginView的getUser()方法返回的用户名进行查找,将该用户名里的PetBought对象的信息全部输出,写入表中。添加文本框,输入要删除的物品编号。添加按钮“删除”,点击时调用functions包里的BuyPets类中的deleteBuyPetItem方法,按照登录界面getUser()方法返回的用户名进行查找,按文本框中的编号删除。每次删除后,关闭当前窗口再打开当前窗口,用来刷新总价。添加一个对象,使用functions包的BuyPets中sumPrice()方法计算购买的总价,参数为登录界面getUser()返回的用户名。添加按钮“支付”,点击后转到PayView支付界面。
PayView:支付界面。很简单的一个窗口,展示最后的合计价格,添加一个按钮“退出”,点击后关闭所有界面,System.exit(0)。
缺省包中包含一个Start类,作用是在main方法中打开WelcomeFrame界面开始程序。
-
实验问题分析:
问题1:不同用户购买后不进行结算,但会显示出其他用户购买的物品
原因:因为一开始定义的是只有一个购买的类,所有的购买和删除操作都会对同一个对象做处理,没用通过用户区分
解决方案:在用户对象中声明购买物品对象,即PetBought对象,使每个用户都对应不同的购买对象,每次进行购买和删除操作时,通过判断LoginView(登录界面)getUser方法得到的用户名进行判断,然后操作。问题2:在解决问题1后,仍然会显示其它用户的信息
原因:在用户对象中声明的购买类是静态变量
解决方案:改为非静态后成功...(深刻认识到了静态变量和非静态变量的区别和重要性.........!)
(三)代码托管
- 码云commit历史截图