Java第七次作业 李新磊

Java第七次作业--图形用户界面

(一)学习总结

1.写出事件处理模型中的几个关键词,并通过具体代码实例说明你对事件处理模型的理解。

addActionListener:在进行某一个操作的时候触发某项功能。

addActionListener:用于接收操作事件的监听器接口。

ActionEvent:按下按钮、在文本框中回车、双击一个列表项或选中某个菜单时发生

private JButton addBtn = new JButton("添加宠物");//添加“添加宠物”按钮
    addBtn.setBounds(460, 280, 90, 25);
    this.add(addBtn);
......
private void addListener() {
		//添加按钮监听
		addBtn.addActionListener(new ActionListener(){ //添加监听器,按下“添加宠物”按钮时,实现添加功能
			public void actionPerformed(ActionEvent e){ //actionPerformed:用于接收操作事件的侦听器接口 ActionEvent:按下addBtn(添加宠物)按钮时发生
				addPetItem();  //调用添加方法
			}
		});
}

2.JTextArea与TextArea自动换行和滚动条的对比

1.自动换行

  • JTextArea自动换行代码:
JTextArea jtextArea = new JTextArea();  // 新建jtextArea
jtextArea.setLineWrap(true);   //实现自动换行
  • TextArea,在创建文本区时直接设置TextArea.SCROLLBARS_VERTICAL_ONLY,意为仅垂直方向设置,达到了自动换行的效果;
    如果通过TextArea的其他构造方法,创建出来的文本区是含垂直和水平两个方向的滚动条,不支持自动换行
TextArea textArea = new TextArea("", 20, 43, TextArea.SCROLLBARS_VERTICAL_ONLY); //  创建文本区
```   
#### 2.滚动条

- JTextArea添加滚动条(JScrollPane)代码:

JScrollPane scrollPane = new JScrollPane(textArea); //创建滚动条,需要指定添加位置
scrollPane.setVerticalScrollBarPolicy( JScrollPane.VERTICAL_SCROLLBAR_ALWAYS); //设置滚动条的形式

- TextArea 默认自带滚动条(默认为SCROLLBARS_BOTH),如果不用滚动条,把 TextArea.SCROLLBARS_VERTICAL_ONLY 改为 SCROLLBARS_NONE

## (二)实验总结

### 程序设计思路

- 设计一个欢迎界面、登录界面、用户注册界面、管理员界面、用户界面;程序启动时显示欢迎界面,欢迎界面有管理员登录、用户登录、用户注册3个按钮;
- 如果用户选择管理员登录按钮,则进入登录界面:用户输入用户名、密码,输入正确后进入管理员界面:管理员界面包括添加、修改、删除三个按钮,分别实现添加、修改、删除功能;
- 如果用户选择用户登录按钮,则进入登录界面:用户输入用户名、密码,输入正确后进入用户界面:用户界面包括购买、查找、显示所有购买三个按钮,分别实现购买、查找、显示所有购买功能;
- 如果用户选择注册按钮,则进入注册界面:用户输入注册信息(用户名、密码、邮箱、手机号),当输入格式正确并且用户名、邮箱、手机号不重复,则注册成功,进入登录界面

### 类图

![](http://images2015.cnblogs.com/blog/1079801/201705/1079801-20170504235306273-1800677180.jpg)

### 问题1.注册界面与登录界面的设计

注册界面包括输入用户名、密码、确认密码、邮箱、手机号

![](http://images2015.cnblogs.com/blog/1079801/201705/1079801-20170504205741289-637580247.png)

输入信息后,点击“注册”按钮,执行监听器,实现判断格式功能和判断重复注册功能:如果格式不合格或重复注册,则提示用户重新注册;
如果信息合格且不重复,则进入用户登录界面。

public void judjeUserItem() {
String addName = addNameText.getText();
String addKey = addKeyText.getText();
String addKey2 = addKey2Text.getText();
String addEmail = addEmailText.getText();
String addNumber = addNumberText.getText();
int Success = registerServie.checkUserData(addKey, addKey2, addEmail, addNumber);//判断格式是否合格
int Success2 = registerServie.judjeUserData(addName,addEmail,addNumber); //判断是否重复注册
if(Success0&&Success20){ //当格式合格且不重复时,执行添加新用户功能,同事进入用户登录界面
addUserItem(); //将新注册的用户信息存入User数据库中
showSignDialog(); //显示用户登录界面
}else if(Success1){
//没有添加成功弹窗错误提示
JOptionPane.showMessageDialog(this, "密码不一致");
}else if(Success
2){
JOptionPane.showMessageDialog(this, "手机号格式不合法");
}else if(Success3){
JOptionPane.showMessageDialog(this, "邮箱格式不合法");
}else if(Success2
1){
JOptionPane.showMessageDialog(this, "用户名已存在");
}else if(Success22){
JOptionPane.showMessageDialog(this, "邮箱已注册");
}else if(Success2
3){
JOptionPane.showMessageDialog(this, "手机号已注册");
}
}

//判断格式方法
public int checkUserData(String key,String key2,String email,String number){
if(!key.equals(key2)){
return 1;
}else{
}
String emailCheck="\w+@\w+.(com|cn|edu|net|gov|org)";
Pattern p2 = Pattern.compile(emailCheck);
Matcher m2 =p2.matcher(email);
if(m2.matches()){
}else{
return 3;
}
String phoneCheck="^(18|15|17|13)\d{9}$";
Pattern p1 = Pattern.compile(phoneCheck);
Matcher m1 =p1.matcher(number);
if(m1.matches()){
}else{
return 2;
}
return 0;
}

    //判断重复注册方法
	public int judjeUserData(String name,String email,String number){
		ArrayList<UserItem> userData = queryUserItem();
		for(int i = 0; i < userData.size();i++){
			UserItem User = userData.get(i);
			if(User.getName().equals(name)){
				return 1;
			}else if(User.getEmail().equals(email)){
				return 2;
			}else if(User.getNumber().equals(number)){
				return 3;
			}				
		}
		return 0;
	}
用户登录界面包括输入用户名、密码功能,当用户点击“登录”按钮时,执行监听器,判断用户名和密码是否正确,如果错误,提示重新输入;
如果正确,则进入用户界面

![](http://images2015.cnblogs.com/blog/1079801/201705/1079801-20170504210512320-1071505151.png)

public void findUserItem(){
String addName = addNameText.getText();
String addKey = addKeyText.getText();
boolean Success = signServie. findUserData(addName,addKey);//判断用户名和密码是否正确
if(Success){
showUserDialog(); //显示用户界面
}else{
JOptionPane.showMessageDialog(this, "用户名或密码错误");
}
}


### 问题2.用户界面的设计

管理员界面包括显示宠物列表、添加宠物、修改宠物信息、删除宠物功能,当管理员执行操作时,监听器同时执行;
当操作无误时,宠物信息数据库更新,同时界面重新显示更改后的宠物列表。

![](http://images2015.cnblogs.com/blog/1079801/201705/1079801-20170504211240445-1009363763.png)

用户界面包括购买宠物、按品种查找宠物、显示购买的所有宠物信息功能,当用户执行操作时,监听器同时执行;
当操作无误时,宠物信息数据库更新,同时界面重新显示更改后的宠物列表;
界面下方的文本框同时显示操作信息。

![](http://images2015.cnblogs.com/blog/1079801/201705/1079801-20170504211303836-858806978.png)

//购买方法
public void buyPetItem() {
String buyId = buyIdText.getText();
boolean buySuccess = userService.buyPetItem(buyId);
String output = userService.outputBuyPetItem(buyId);//判断是否购买成功
if(buySuccess){
queryPetItem(); //购买后刷新表格
buyIdText.setText("");
show.append(output+"\n"); //购买后,在文本框输出购买的宠物信息
}else{
//没有添加成功弹窗错误提示
JOptionPane.showMessageDialog(this, "没有这个宠物");
}
}

//查找方法
public void findPetItem() {
	String findKind = findKindText.getText();
	boolean findSuccess = userService.findPetItem(findKind);//判断是否查找成功
	String output = userService.outputFindPetItem(findKind);
	if(findSuccess){
		show.append(output+"\n");
		findKindText.setText("");        //查找后,在文本框输出购买的宠物信息
	}else{
		JOptionPane.showMessageDialog(this, "没有这个品种的宠物");
	}		
}
    //显示方法
public void showPetItem() {
	boolean showSuccess = userService.showBuyItem();//判断是否显示成功(已购买宠物类集内有无数据)
	if(showSuccess){
		userService.outputShowBuyItem();    //调用显示所有购买方法
	}else{
		JOptionPane.showMessageDialog(this, "您未购买宠物");
	}	
}

### 问题3.购买宠物、查找宠物功能的实现

购买宠物后,需要将宠物数量减一,并且将购买的这个宠物的信息输出在文本框中

//购买服务
public boolean buyPetItem(String id){
ArrayList data = queryPetItem();
for(int i = 0; i < data.size();i++){
PetItem Pet = data.get(i);
if(Pet.getId().equals(id)&&Pet.getNumber()>0){
PetItem thisPet = new PetItem(id,Pet.getKind(),Pet.getPrice(),Pet.getAge(),(Pet.getNumber()-1));//购买后的宠物,数量减1,相当于给该宠物信息做了修改
BuyItem thisBuy = new BuyItem(Pet.getKind(),Pet.getPrice());
adminDao.delPetItem(id); //删除原有的宠物信息
adminDao.addPetItem(thisPet); //存入修改后的宠物信息
adminDao.addBuyItem(thisBuy);
return true;
}
}
return false;
}

//当购买成功时,输出购买信息
public String outputBuyPetItem(String id) {
	ArrayList<PetItem> data = queryPetItem();
	for(int i = 0; i < data.size();i++){
		PetItem Pet = data.get(i);
		if(Pet.getId().equals(id)){
			return "您购买的宠物:"+"编号:"+Pet.getId()+" 品种:"+Pet.getKind()+" 价格:"+Pet.getPrice()+" 年龄:"+Pet.getAge();
		}			
	}
	return "没有这个宠物";
}
按照宠物品种查找宠物信息,查找成功时,在文本框中输出宠物信息

//查找服务
public boolean findPetItem(String kind){
	ArrayList<PetItem> data = queryPetItem();
	for(int i = 0; i < data.size();i++){
		PetItem Pet = data.get(i);
		if(Pet.getKind().equals(kind)){       //遍历宠物类集,查找有无该品种的宠物
			return true;
		}			
	}
	return false;
}
//当查找成功时,输出查找信息
public String outputFindPetItem(String kind) {
	ArrayList<PetItem> data = queryPetItem();
	for(int i = 0; i < data.size();i++){
		PetItem Pet = data.get(i);
		if(Pet.getKind().equals(kind)){  //遍历宠物类集,找到该品种的宠物,输出宠物信息
			return "编号:"+Pet.getId()+" 品种:"+Pet.getKind()+" 价格:"+Pet.getPrice()+" 年龄:"+Pet.getAge()+" 数量:"+Pet.getNumber();
		}			
	}
	return "没有这个品种";
}

### 问题4.显示购买的所有宠物的品种、数量、总价

设计一个已购买的宠物类、已购买宠物数据库,将已购买宠物信息存储在其中

public class BuyDataBase {
public static ArrayList buyData = new ArrayList();
}

每次购买宠物时,将宠物信息存储到已购买宠物数据库中

//购买服务
public boolean buyPetItem(String id){
ArrayList data = queryPetItem();
for(int i = 0; i < data.size();i++){
PetItem Pet = data.get(i);
if(Pet.getId().equals(id)&&Pet.getNumber()>0){
adminDao.delPetItem(id);
PetItem thisPet = new PetItem(id,Pet.getKind(),Pet.getPrice(),Pet.getAge(),(Pet.getNumber()-1));
BuyItem thisBuy = new BuyItem(Pet.getKind(),Pet.getPrice());
adminDao.addPetItem(thisPet);
adminDao.addBuyItem(thisBuy); //将购买的宠物添加到已购买宠物数据库中
return true;
}
}
return false;
}

输出所有已购买的宠物的品种、单价、总数、总价

//显示服务
public boolean showBuyItem(){
ArrayList data = queryBuyItem(); //判断数据库内有无信息,如果没有,代表尚未购买;如果有,代表可以显示
if(data.size()>0){
return true;
}
return false;
}

//当可以显示时,输出显示
public void outputShowBuyItem(){
	ArrayList<BuyItem> data = queryBuyItem();
	double sum=0.0;
	for(int i = 0; i < data.size();i++){
		BuyItem Buy = data.get(i);                 //输出所有购买宠物的品种和单价
		sum+=Buy.getPrice();
		UserDialog.show.append("您已购买"+" 品种:"+Buy.getKind()+" 价格:"+Buy.getPrice()+"\n");		
	}
		UserDialog.show.append("总数 :"+data.size()+" 总价:"+sum+"\n");    //输出购买宠物的总数和总价	
}

## (三)代码托管

https://git.oschina.net/hebau_cs15/Java-CS02lxl/tree/master/

- **请下载压缩文件**

![](http://images2015.cnblogs.com/blog/1079801/201705/1079801-20170504170111164-614137135.png)

posted on 2017-05-04 21:44  押沙龙  阅读(306)  评论(0)    收藏  举报