更多企业学院:
《中小企业管理全能版》 183 套讲座+89700 份资料
《总经理、高层管理》 49 套讲座+16388 份资料
《中层管理学院》 46 套讲座+6020 份资料
《国学智慧、易经》 46 套讲座
《人力资源学院》 56 套讲座+27123 份资料
《各阶段员工培训学院》 77 套讲座+ 324 份资料
《员工管理企业学院》 67 套讲座+ 8720 份资料
《工厂生产管理学院》 52 套讲座+ 13920 份资料
《财务管理学院》 53 套讲座+ 17945 份资料
《销售经理学院》 56 套讲座+ 14350 份资料
《销售人员培训学院》 72 套讲座+ 4879 份资料
淮海工学院计算机工程学院
实 验 报 告 书
课 程 名 : 《面向对象程序设计》
实验名称: Java 深入面向对象编程
商品销售系统
班 级: ^ ^
组 长:
组 员: ^ ^
评语:
成绩: 指导教师:
批阅时间: 年 月 日
一.实验目的
1. 掌握 Java 面向对象编程的初步知识,理解类的定义和使用,会正确运用 Java 的非访问控制符和
访问控制符来实现面向对象的编程思想;掌握 Java 类的修饰符、访问控制符的使用;
2. 培养团队合作精神和沟通能力。
二.实验题目
以与大学生学习、生活、娱乐相关的信息服务为例,各团队自选题目,用面向对象的方法进行需
求分析,划分功能模块,每位成员负责其中某些模块的设计与实现。
首先练习类的定义和使用,包括类、属性和方法的各种修饰符的使用、方法与构造函数的定义与
使用,练习修饰符的使用。
三.要求
1. 采用 Application 图形界面显示,请注意用户界面的友好性;
2. 源程序中必需对程序功能、方法、属性等加适当的注释;
3. 每个人一个包(即用英文命名的文件夹),所有类的命名都要用设计者姓名拼音缩写加若干能表
达功能意义的字符组成;
4. 每组有一个组长,组长除完成本身任务外,还要负责设计作为程序入口的主类、系统总的说明文
档;每位成员负责编写自己每次的说明文档;
5. 作业由组长以团队形式提交到教学平台上,压缩包名为三个成员汉语名字合成,第一个为组长。
6. 提交时间:
四、实验步骤与源程序
1. 选题与团队分工
选题: 商品销售系统
分工:
角色 姓名 承担的具体任务
组长 强余彬 程序的主入口、客户类、修改产品、修改客户、
下单及一些界面类
组员 李宏志 产品类、销添加删除客户、产品的类
组员 谢超 初始化数据类、、查询客户、产品类、用户类
2. 系统需求分析
系统功能描述
商品销售系统
系统管理员:添加客户资料、删除客户资料、修改客户资料、查询客户资料、添加商品、
删除商品、修改商品、查询商品、下单、取消下单、修改密码(包括销售人员)
销售人员:添加客户资料、修改客户资料、查询客户资料、修改商品、下单、取消下单、
修改密码
系统用例图
3. 系统类图设计
系统类图
(强余彬)
搜查实体类
异常类
(李宏志)
(谢超)
4. 源程序
五、测试数据与实验结果
登陆界面
输入错误
系统管理员主界面
修改客户(失败) 修改客户(成功)
下单 下单失败
添加产品
删除产品 修改产品
修改密码(输入密码错误) 未输入修改密码
输入密码不一致 修改成功
修改销售人员密码(账号错误) 修改销售人员密码成功
李宏志:
谢超
六、结果分析与实验体会
(强余彬)本次实验对系统的功能没有做修改,主要是优化了系统的结构。
首先是本次实验大量运用了继承,尤其是界面,大多数的界面继承的是
ReviseClientGUI 这个界面,重复利用了界面上的布局以及标签,大大简化
了工作量以及代码的长度,有些界面是继承的一些相似的界面,例如删除
客户继承了删除产品的界面,而删除产品又是继承于修改客户这个界面。
其次,本次实验添加了一个自定义异常类,当创建新用户的时候密码低于
三位数会自动派出此异常。本次试验还添加了一个 Search 类,里面有一些
常用函数,例如查找客户、查找产品、比较字符串、删除客户等方法,在
其他界面中要用可以调用此嘞的一些方法,实现了类的封装。此外,本次
实验还将以前在输入一些非法数据会产生的异常给补上了,例如有
NullPointerException、NumberFormatException 等等。有一些界面只需要 接
收一个用户输入的数据,所以就是用了 JOPtionPane 类中的 showInputDialog
函数用来接收数据,大大简化了代码量,优化了系统性能。本次实验画了
整体系统的类图之间的关系,大大加深了我对此系统的了解,形成了一个
严密的框架,对于今后的学习会有很大的帮助。
老师的代码对于我们的学习是有很大的帮助的,学习是一件长期的事,实
践着“痛并快乐着……”的感觉是非常好的,我会继续坚持下去的。
(李宏志)本次实验主要运用了属性以及函数的继承,隐藏,重载等操作。
通过遮羞方法的运用,能够明显简化代码的复杂度,尤其是继承的运用,
通过继承其他属性函数的操作,从而简化程序的复杂度,此外还需要运用
文本域的隐藏操作,对于新的操作需要重新定义标签和文本域,另外在继
承操作时需要注意继承的对象公共和私有,来避免错误。在编程时会出现
一些异常,对于异常的处理,可以通过 public void p(int x){
try{
}
catch(Exception e){
}
finally{
}
}语句来捕获异常,如果在 try 语句中出现异常,则会被抛出。对于处理不
了的异常或者要转型的异常,在方法的声明处通过 throws 语句抛出异常。
本次实验还练习了通过 visio 软件画系统类图和用例图,包括实体类、界面
类,特性与操作的参数的输入,顶层包的加载等等。
(谢超)第三次试验是在第二次的基础上的拓展,在这次试验中我完成了
我所有的包中的文件的测试,以及完成了相应的文件的类图的画图。在类
图的画画过程中还是有一些不懂得地方,对于系统中的集体的操作和特性
有的区分的不是很清楚,在画类图的时候参考了老师的类图的画法,还有
同学的帮助。这次试验掌握了类图的画法,和对继承的一些了解。
源代码
/* 一个简单的校园卡系统设计示例
版本:Ver
作者:强余彬
时间:
*/
/*对用户商品进行查找操作的业务类*/
package ; // 定义系统所属包名
import .*; //引入实体类所在包
import .*;
import .*;
import ;
public class Search //定义一个业务类,实现查找操作
{
//Client client;
public int clientflag;
public int goodsflag;
public Client findClient;
public Goods findGoods;
public Search()
{
clientflag=0;
goodsflag=0;
}
public Client searchClient(String name)
{
for(int i=0;i<;i++)
{
try{if([i].getId().equals(name))
findClient= [i];
clientflag=1;
}
catch(NullPointerException ee){}
}
if(clientflag==0)findClient= null;
return findClient;
}
public Goods searchGoods(String tmp)
{
for(int i=0;i<;i++)
{
try{
if([i].getName().equals(tmp))
{
findGoods=[i];
goodsflag=1;
}}
catch(Exception ee){}
}
if(goodsflag==0)findGoods= null;
return findGoods ;
}
public void deleteClient(String tmp)
{
int flag=0;
for(int i=0;i<;i++)
{
if([i].getId().equals(tmp))
{
int j;
for( j=i;j<;j++)
[j]=[j+1];
[j]=null;
--;
(null,"删除成功!");
flag=1;
}
}
if(flag==0)
{
(null,"不存在此顾客,无法删除","警告
",_MESSAGE);
(null ,"输入客户的名字","删除客户
",_MESSAGE);
}
}
public void deleteGoods(String tmp)
{
int flag=0;
for(int i=0;i<;i++)
{
if([i].getName().equals(tmp))
{
int j;
for( j=i;j<;j++)
[j]=[j+1];
[j]=null;
--;
(null,"
删除商品成功!");
flag=1;
}
}
if(flag==0)
{
(null,"不存在此
商品,无法删除");
tmp=(null ,"输入产
品的名字","删除产品",_MESSAGE);
}
}
public static boolean isEmpty(String tmp)
{
try{
if(()==0)
{
(null,"您未输入任何字符","错误
",_MESSAGE);
return false;
}
else return true;
}catch(NullPointerException ee){}
return false;
}
}
/* 一个简单的销售系统设计示例
版本:Ver
作者:强余彬
时间:
*/
/* 销售系统客户实体类 */
package ;
import .*;
public class Client extends User //继承了 user 实体类
{
private String Gender;
public String Goods[]=new String[15];//购买的商品名称
public int Price[]=new int[15];//相应的价格
public int Amount[]=new int[15];//买的数量
private int goodslth;
static
{
lth=0;
}
public Client(String id)
{
super(id);
Id=id;
Gender="男";
UserType="客户";
lth++;
goodslth=0;
}
public Client(String id, String sex) //构造用户 1,默认身份为销售人员
{
super();
Id=id;
Gender=sex;
UserType="客户";
lth++;
goodslth=0;
}
public int getGoodslth()
{
return goodslth;
}
public void alterGoodslth(int tmp)
{
goodslth=tmp;
}
public String getGender()
{
return Gender;
}
public void alterGender(String sex)
{
Gender=sex;
}
public void buyGoods(String goods,int price,int amount)
{
Goods[goodslth]=goods;
Price[goodslth]=price;
Amount[goodslth]=amount;
goodslth++;
}
public String printGoods()
{
String tmp="产品:";
for(int i=0;i<getGoodslth();i++)
{
tmp+=Goods[i]+"、";
}
return tmp;
}
public String printAmount()
{
String tmp="数量:";
for(int i=0;i<getGoodslth();i++)
{
tmp+=Amount[i]+"、";
}
return tmp;
}
}
/* 一个简单的销售系统设计示例
版本:Ver
作者:李宏志
时间:
*/
/* 销售系统产品实体类 */
package ;
import .*;
import .*;
public class Goods
{
private String Name;
private int Price;
private int TotalAmount;
private int Left;
public static int lth;
static
{
lth=0;
}
public Goods(String name,int price,int total,int left)
{
Name=name;
Price=price;
TotalAmount=total;
Left=left;
lth++;
}
public Goods(String name,int price,int total)//初始化余量等于总量
{
Name=name;
Price=price;
TotalAmount=total;
Left=total;
lth++;
}
public String getName()
{
return Name;
}
public void alterName(String tmp)
{
Name=tmp;
}
public int getPrice()
{
return Price;
}
public void alterPrice(int tmp)
{
Price=tmp;
}
public int getTotalAmount()
{
return TotalAmount;
}
public void alterTotalAmount(int tmp)
{
TotalAmount=tmp;
}
public int getLeft()
{
return Left;
}
public void alterLeft(int tmp)
{
Left=tmp;
}
public String tostring()
{
String s;
s="商品名:"+getName()+"\t 价格:"+getPrice()+"\t 总量:"+getTotalAmount()+"\t 余量:
"+getLeft();
return s;
}
}
/* 一个简单的销售系统设计示例
版本:Ver
作者:谢超
时间:
*/
/* 销售系统初始化客户、商品信息类 */
package ;
import .*;
import .*;
public class Init
{
public User user1;
public User user2;public User user4;
public User user3;
public Client client[]=new Client[20];
public Goods goods[]=new Goods[20];
public static Init init=new Init();
public Init()
{
try{
user1=new User("强余彬","0000","系统管理员");
user2=new User("谢超","0000","销售人员");
user3=new User("李宏志","0000","销售人员");
}
catch(UnexpectedCreat ee){(());}
client[0]=new Client("张三","男");
client[0].buyGoods("铅笔",1,50);
client[0].buyGoods("文具盒",10,2);
client[1]=new Client("李四","男");
client[1].buyGoods("铅笔",1,10);
client[1].buyGoods("本子",2,3);
client[2]=new Client("王五","男");
client[2].buyGoods("钢笔",9,8);
client[2].buyGoods("文具盒",10,3);
client[3]=new Client("小红","女");
client[3].buyGoods("钢笔",9,8);
client[3].buyGoods("文具盒",10,3);
client[4]=new Client("小明","男");
client[4].buyGoods("本子",2,10);
client[4].buyGoods("铅笔",1,20);
client[4].buyGoods("钢笔",9,2);
goods[0]=new Goods("铅笔",1,1000,800);
goods[1]=new Goods("钢笔",9,300,280);
goods[2]=new Goods("本子",2,600,590);
goods[3]=new Goods("文具盒",10,200,195);
goods[4]=new Goods("橡皮",1,200,200);
}
}
/* 一个简单的销售系统设计示例
版本:Ver
作者:强余彬
时间:
*/
/* 系统管理员图形界面类 */
//自定义异常类,当创建新用户密码过短时产生
package ;
import .*;
public class UnexpectedCreat extends Exception
{
private User user; //产生当前错误的 User 对象的引用
private String IllegalPsd; //产生当前错误的非法的密码
public UnexpectedCreat(User tmp,String psd) //构造函数
{
super("不合法的初始充值数额");//调用父类 Exception 的构造函数
user=tmp; //初始化两个属性
IllegalPsd=psd;
}
public String toString() //重载父类的方法,给出详细的错误信息
{
String s;
s="创建用户时出错:"+()
+" 该、用户的密码"
+IllegalPsd
+"不合规定";
return s;
}
}
/* 一个简单的销售系统设计示例
版本:Ver
作者:谢超
时间:
*/
/* 销售系统用户实体类 */
package ;
import .*;
import .*;
import .*;
public class User
{
public static int lth;//存的个数
protected String Id;
private String Password;
protected String UserType;//用户类型 管理员、普通用户
static
{
lth=0;
}
public User()
{
}
public User(String id)//构造用户,默认身份为销售人员,默认密码为 0000
{
Id=id;
Password="0000";
UserType="销售人员";
lth++;
}
public User(String id, String psd)throws UnexpectedCreat//构造用户,默认身份为销售人员
{ //根据用户名和密码,声
明了抛出异常
this(id);
if(()<4)
throw (new UnexpectedCreat(this,psd));
Password=psd;
UserType="销售人员";
lth++;
}
public User(String id,String psd,String type) throws UnexpectedCreat//构造用户
{
this(id,psd);
//Id=id;
//Password=psd;
UserType=type;
lth++;
}
public String getId()
{
return Id;
}
public void alterId(String id)
{
Id=id;
}
public String getPassword()
{
return Password;
}
public boolean alterPassword(String tmp)//密码新添了判断是否为空和限定密码长度不能太短的
功能
{
if(()==0)
{
(null,"您未输入任何字符","错误
",_MESSAGE);
return false;
}
else if(()<=3)
{
(null,"您输入的密码过短","警告
",_MESSAGE);
return false;
}
else
{
Password=tmp;
(null,"成功修改密码!");
return true;
}
}
public String getUserType()
{
return UserType;
}
public void alterUserType(String tmp)
{
UserType=tmp;
}
public boolean userTypeJudge(String name,String pwd,String type)
{
if((name) && (pwd) && (type))
return true;
else
return false;
}
public boolean userPsdJudge(String tmp,String pwd)
{
if((pwd))
return true;
else
return false;
}
public String tostring()
{
String s;
s="用户名:"+getId()+" 密码:"+getPassword()+" 用户类型:"+getUserType();
return s;
}
}
/* 一个简单的销售系统设计示例
版本:Ver
作者:强余彬
时间:
*/
/* 销售系统主入口类 */
package SalesSystem;
import .*;
import .*;
public class Main
{
public static void main (String args[])
{
(());
(());
(());
([0].tostring());
([1].tostring());
([2].tostring());
([3].tostring());
([4].tostring());
new GUI(); //构造一个新窗体对
}
}
/* 一个简单的销售系统设计示例
版本:Ver
作者:强余彬
时间:
*/
/* 销售系统主登陆窗口图形界面类 */
package SalesSystem;
import .*;
import .*;
import .*;
import .*;
import .*;
import .*;
public class GUI extends Frame implements ActionListener,ItemListener
{
TextField txId; //一定一个宽度为 10 个字符的文本框,用于答案输入
TextField txPassword;
Label lbTitle;
Label lbId;
Label lbPassword;
Button btOk;
Button btCancel;
Button btReset;
Label type;
Choice typeChoice;
Font myFont;
String chtype;
public User u;
GUI() //构造函数,用来初始化
{
super("主登陆界面"); //调用父类构造函数
btOk=new Button("确定");
btCancel=new Button("退出");
btReset=new Button("重置");
chtype="销售人员";
typeChoice=new Choice();
type=new Label("身份:");
lbTitle=new Label("商品销售系统 ");
(myFont);
lbId=new Label("用户账号 ");
txId=new TextField(10);
lbPassword=new Label("用户密码 ");
txPassword=new TextField(10);
('*');
myFont=new Font("黑体",,20); //定义字体为黑体、加粗、字号 18
GridBagLayout gbl=new GridBagLayout();
GridBagConstraints gbc=new GridBagConstraints();
setLayout(gbl );
// 设置标题控件的位置
=; //让标题顶部居中
=; //让标题成为所在行最后(也是唯一)一
个组件
add(lbTitle,gbc);
//设置姓名控件的位置
=; //让 ID 标签位于左侧
=1; //占一个单元格
add(lbId,gbc);
=; //让 ID 输入框成为所在行最后一个组件
add(txId,gbc);
//设置密码控件的位置
=1;
add(lbPassword,gbc);
=;
add(txPassword,gbc);
//设置身份控件的位置
=1;
add(type,gbc);
add(typeChoice,gbc);
("销售人员");
("系统管理员");
=; //让 ID 输入框成为所在行最后一个组件
add(typeChoice,gbc);
=;
=1;
add(btOk,gbc);
=1;
add(btCancel,gbc);
=; //让 ID 输入框成为所在行最后一个组件
add(btReset,gbc);
(this); //为输入文本框注册监听器对象
(this); //为按钮注册监听器对象
(this);
(this);
setBackground(); //设置背景色为黄色
setSize(300,260);
setBounds(450,220,300,260);
setVisible(true);
validate();
}
public void itemStateChanged(ItemEvent e)
{
if(() instanceof Choice)
{
chtype=((Choice)()).getSelectedItem();
}
}
public void actionPerformed(ActionEvent e) //实现 ActionListener 接口的 actionPerformed 方法
{
if(()==btOk)
{//判断事件源,如果是输入文本框
boolean a,b,c;
a=((),(),chtype);
b=((),(),chtype);
c=((),(),chtype);
if(a||b||c)
{
if(("系统管理员"))
{
new ManagerGUI("系统管理员:强余彬");
(false);
}
else
{
if(b)u=;
else u=;
new SalesmanGUI("销售人员:"+(),u);
(false);
}
}
else
if(((),())||(
xt(),())||((),()))
(null,"密码输入错误!");
else (null,"此账号不存
在!","错误",_MESSAGE);
}
else if(()==btReset)
{
("");
("");
}
else
(0); //系统正常退出,如果参数是 1,则为
异常退出
}
}
/* 一个简单的销售系统设计示例
版本:Ver
作者:强余彬
时间:
*/
/* 系统管理员图形界面类 */
package ;
import .*;
import .*;
import .*;
import .*;
import ;
import .*;
import .*;
public class ManagerGUI extends JFrame implements ActionListener
/**这里定义了一个图形用户界面主要按钮大类
*/
{//为了便于其它包继承访问 把标签都设为了公有的
public Font myFont=new Font("宋体",,20);
public JButton btnQuit=new JButton("退出");
public JRadioButton radResetData;
public JRadioButton radAddData;
public JRadioButton radDeleatData;
public JRadioButton radPrintData;
public JRadioButton radOrder;
public JRadioButton radCancelOrder;
public JRadioButton radConsultProduct;
public JRadioButton radAddProduct;
public JRadioButton radDeleteProduct;
public JRadioButton radResetProduct;
public JRadioButton radResetPassword;
public JLabel lbltittle=new JLabel("系统管理员",);
public ButtonGroup radioGroup=new ButtonGroup();
FrameListener fListener=new FrameListener(); //响应用户的退出操作
public ManagerGUI(String s)
{
super(s);
radResetData=new JRadioButton("1.修改客户资料",false);
radAddData=new JRadioButton("2.添加客户资料",false);
radDeleatData=new JRadioButton("3.删除客户资料",false);
radPrintData=new JRadioButton("4.查询客户资料",false);
radOrder=new JRadioButton("5.下单",false);
radCancelOrder=new JRadioButton("6.取消下单",false);
radConsultProduct=new JRadioButton("7.查询产品",false);
radAddProduct=new JRadioButton("8.添加产品",false);
radDeleteProduct=new JRadioButton("9.删除产品",false);
radResetProduct=new JRadioButton("10.修改产品",false);
radResetPassword=new JRadioButton("11.修改密码",false);
Container c=getContentPane();
(null);
(myFont);
(lbltittle);
(btnQuit);
(radResetData);
(radAddData);
(radDeleatData);
(radPrintData);
(radOrder);
(radCancelOrder);
(radConsultProduct);
(radAddProduct);
(radDeleteProduct);
(radResetProduct);
(radResetPassword);
(radResetData);
(radAddData);
(radDeleatData);
(radPrintData);
(radOrder);
(radCancelOrder);
(radConsultProduct);
(radAddProduct);
(radDeleteProduct);
(radResetProduct);
(radResetPassword);
(this);
(this);
(this);
(this);
(this);
(this);
(this);
(this);
(this);
(this);
(this);
(fListener);//关闭系统监听器
//给各个界面元素定位
(50,50,200,40);
(50,100,200,40);
(50,150,200,40);
(50,200,200,40);
(50,250,200,40);
(300,50,200,40);
(300,100,200,40);
(300,150,200,40);
(300,200,200,40);
(300,250,200,40);
(300,300,200,40);
(130,10,200,40);
(200,350,100,40);
(this);
setSize(500,500);
setVisible(true);
setResizable(false);
setBounds(300,160,500,500);
}
public void actionPerformed(ActionEvent e)
{
if(().equals("1.修改客户资料"))
{
new ReviseClientGUI("修改客户资料");
}
else if(().equals("2.添加客户资料"))
{
new AddClientGUI();
//("添加客户 ahahahah ");
}
else if(().equals("3.删除客户资料"))
{
new DeleteClient();
}
else if(().equals("4.查询客户资料"))
{
new InquiryClientGUI();
}
else if(().equals("5.下单"))
{
new DeliverGUI();
}
else if(().equals("6.取消下单"))
{
(null,"取消下单!");
}
else if(().equals("7.查询产品"))
{
new InquiryGoodsGUI();
}
else if(().equals("8.添加产品"))
{
new AddGoods("添加产品");
}
else if(().equals("9.删除产品"))
{
new DeleteGoods();
}
else if(().equals("10.修改产品"))
{
new ReviseGoodsGUI();
}
else if(().equals("11.修改密码"))
{
new ChangePsd();
}
if(()=="退出")
{
dispose();
(0);
}
}
}
/* 一个简单的销售系统设计示例
版本:Ver
作者:李宏志
时间:
*/
/* 销售系统销售人员图形界面类 */
package ;
import .*;
import ;
import .*;
import .*;
public class SalesmanGUI extends ManagerGUI//继承了系统管理员的界面类大大简化了代码量优化
了系统
{
User u;
public SalesmanGUI(String s,User tmp)
{
super(s);
u=tmp;
("1.修改客户资料");
("2.添加客户资料");
("3.下单");
("4.取消下单");
("5.查询产品");
("6.修改密码");
(50,50,130,40);
(50,100,130,40);
(50,150,130,40);
(180,50,130,40);
(180,100,130,40);
(180,150,130,40);
(130,200,70,40);
(70,10,200,40);
(this);
(this);
(this);
(this);
(this);
("销售人员");
(false);
(false);
(false);
(false);
(false);
setSize(350,300);
setBounds(300,160,350,300);
}
public void actionPerformed(ActionEvent e)
{
if(().equals("1.修改客户资料"))
new ReviseClientGUI("修改客户资料");
else if(().equals("2.添加客户资料"))
new AddClientGUI();
else if(().equals("3.下单"))
new DeliverGUI();
else if(().equals("4.取消下单"))
(null,"取消下
单!");
else if(().equals("5.查询产品"))
new InquiryGoodsGUI();
else if(().equals("6.修改密码"))
{
try{ ChangeSalesmanPsd a=new ChangeSalesmanPsd(u);}
catch(NullPointerException ee){}
}
if(()=="退出")
dispose();
}
}
/* 一个简单的销售系统设计示例
版本:Ver
作者:李宏志
时间:
*/
/* 销售系统添加客户图形界面类 */
package ;
import .*;
import .*;
import .*;
import .*;
import .*;
public class AddClientGUI extends AddGoods //继承与 AddGoods 因为 AddGoods 与其界面比较相似
{
Search search=new Search();
public AddClientGUI()
{
super("添加客户");
("客户姓名");
("客户性别");
("添加客户");
(false);
(false);
(30,130,80,40);
(110,130,80,40);
(190,130,80,40);
setSize(300,230);
setBounds(300,160,300,230);
}
public void actionPerformed(ActionEvent e)
{
if(()==btnQuit)
dispose();
else if(()==btnOK)
{
String tmpname=();
if((tmpname))//是否输入文字
{
try{
(tmpname);
if(!=null)
{(null,"此客户已存在");}
else
{
[++]=new
Client(tmpname,());
(null,"添加客户资料成功");
(false);
}
}
catch(NullPointerException ee){}
}
}
else
{
("");
("");
}
}
}
/* 一个简单的销售系统设计示例
版本:Ver
作者:李宏志
时间:
*/
/* 销售系统添加产品图形界面类 */
package ;
import .*;
import .*;
import .*;
import ;
import .*;
import .*;
public class AddGoods extends ReviseClientGUI//界面继承了 ReviseClientGUI 添加了异常处理 若未输
入弹出错误对话框
{
public JTextField txtGoodsname1;//引用
public JTextField txtGoodsprice1;
public JTextField txtGoodsamount1;
public JLabel lbGoodsname1;
public JLabel lbGoodsprice1;
public JLabel lbGoodsamount1;
Search sGoods;
public AddGoods(String s)
{
super(s);
sGoods=new Search();
txtGoodsname1=txtID;
txtGoodsprice1=txtGender;
txtGoodsamount1=txtGoodsname;
lbGoodsname1=lbID;
lbGoodsprice1=lbGender;
lbGoodsamount1=lbGoodsname;
("添加产品");
("产品名称");
("产品价格");
("产品总量");
(30,170,80,40);
(110,170,80,40);
(190,170,80,40);
(100,0,150,40);
(50,50,100,30);
(130,50,100,30);
(50,90,100,30);
(130,90,100,30);
(50,130,100,30);
(130,130,100,30);
setSize(300,270);
setBounds(300,160,300,270);
(false);
(false);
(false);
(false);
}
public void actionPerformed(ActionEvent e)
{
if(()==btnQuit)
dispose();
else if(()==btnOK)
{
String tmpname=();
if((tmpname))
{
try{
(tmpname);
if(!=null)
{(null,"此商品已存在");}
else
{
try{
[++]=new
Goods(tmpname,(()),(()),I
(()));
(null,"添加产品
成功");
(false);}
catch(NumberFormatException
ee){(null,"请在价格、数量一栏输入数字字符","警告
",_MESSAGE);}
}
}
catch(NullPointerException eee){}
}
}
else
{
("");
("");
("");
}
}
}
/* 一个简单的销售系统设计示例
版本:Ver
作者:强余彬
时间:
*/
/* 销售系统系统管理员修改密码图形界面类 */
package ;
import .*;
import .*;
import .*;
import .*;
public class ChangePsd extends ReviseClientGUI
{
JLabel lbTitle2;
JLabel lbPWD;
JLabel lbManagerPWD;
JLabel lbPWDAgain;
JLabel lbSalesmanID;
JLabel lbSalesmanPWD;
JTextField txtPWD;//原始密码
JPasswordField txtManagerPWD;
JPasswordField txtPWDAgain;
JTextField txtSalesmanID;
JPasswordField txtSalesmanPWD;
public ChangePsd()
{
super("修改密码");
lbPWD=lbID ;
lbManagerPWD=lbGender ;
lbPWDAgain=lbGoodsname ;
lbSalesmanID=lbGoodsprice ;
lbSalesmanPWD=lbGoodsamount ;
txtPWD= txtID;//原始密码
txtManagerPWD=new JPasswordField();
txtPWDAgain=new JPasswordField();
txtSalesmanPWD=new JPasswordField();
txtSalesmanID= txtGoodsprice;
("原始密码");
("修改密码");
lbTitle2=new JLabel("修改销售人员密码");
("新密码");
("重复输入");
("销售人员 ID");
("新密码");
(60,170,200,40);
(50,210,100,30);
(130,210,100,30);
(50,250,100,30);
(130,90,100,30);
(130,130,100,30);
(130,250,100,30);
add(lbTitle2);
add(txtManagerPWD);
add(txtPWDAgain);
add(txtSalesmanPWD);
(false);
(false);
(false);
}
public void actionPerformed(ActionEvent e)
{
if(()==btnQuit)
{
dispose();
}
if(()==btnOK)
{
if(().equals(""))
{
if(judge((),()))
{
if(judge((),()))
{
if(!().equals(""))
{
if((()))
(false);
}
else
(null,"输入
密码不能为空!");
}
else
(null,"两次输入
密码不一致!");
}
else
(null,"输入原密
码错误!");
}
else
{
if(judge((),()))
{
if(!().equals(""))
{
if((()))
(false);
}
else
(null,"输入密码
不能为空!");
}
else
if(judge((),()))
{
if(!().equals(""))
{
if((()))
(false);
}
else
(null,"输入密码
不能为空!");
}
else (null,"此账号不存
在!");
}
}
if(()==btnReset)
{
("");
("");
("");
("");
("");
}
}
public boolean judge(String psd,String tmp)
{
if((tmp) )
return true;
else
return false;
}
}
/* 一个简单的销售系统设计示例
版本:Ver
作者:李宏志
时间:
*/
/* 销售系统修改密码图形界面类 */
package ;
import .*;
import .*;
import .*;
import ;
import .*;
import .*;
import .*;
import SalesSystem.*;
public class ChangeSalesmanPsd extends InquiryGoodsGUI
{
JLabel lbname;
JLabel lbPWD;
JLabel lbNewPWD;
JLabel lbPWDAgain;
JTextField txtname;
JTextField txtPWD;
JPasswordField JPNewPWD;
JPasswordField txtPWDAgain;
User u;
public ChangeSalesmanPsd(User tmp)
{
super();
u=tmp;
setTitle("修改密码");
lbPWD=lbGender;
lbNewPWD=lbGoodsname;
lbPWDAgain=lbGoodsprice;
txtPWD=txtGender;
JPNewPWD=new JPasswordField();
txtPWDAgain=new JPasswordField();
("修改密码");
("原始密码");
("新密码");
("重复输入");
add(JPNewPWD);
add(txtPWDAgain);
(30,210,80,40);
(110,210,80,40);
(190,210,80,40);
(130,170,100,30);
(130,130,100,30);
(false);
(false);
(false);
(false);
(true);
}
public void actionPerformed(ActionEvent e)
{
if(()==btnQuit)
dispose();
if(()==btnOK)//将销售人员参数传过来,避免了输入用户名与数
据库中所有用户比较的麻烦
{
if(((),()))
{
if(((),()))
{
if((()))
(false);
}
else
(null,"两次输入密码
不一致!");
}
else
(null,"输入原密码错误!
","错误",_MESSAGE);
}
if(()==btnReset)
{
("");
("");
("");
}
}
}
/* 一个简单的销售系统设计示例
版本:Ver
作者:李宏志
时间:
*/
/* 销售系统删除客户类 */
package ;
import .*;
import .*;
import .*;
public class DeleteClient//改进后直接用系统自带的 showInputDialoge 方法获得输入字符大大简化代
码
{
String tmpname;
Search search;
public DeleteClient()
{
search=new Search();
tmpname=(null ,"输入产品的名字","删除产品
",_MESSAGE);
if((tmpname))//是否输入文字
(tmpname);//把删除客户坐在了业务类里
}
}
/* 一个简单的销售系统设计示例
版本:Ver
作者:李宏志
时间:
*/
/* 销售系统删除产品类 */
package ;
import .*;
import .*;
import .*;
public class DeleteGoods//使用了系统内置的输入框 简化了很多小步骤
{
String tmpname;
Search search;
public DeleteGoods()
{
search =new Search();
tmpname=(null ,"输入产品的名字","删除产品
",_MESSAGE);
if((tmpname))
(tmpname);
}
}
/* 一个简单的销售系统设计示例
版本:Ver
作者:强余彬
时间:
*/
/* 销售系统下单图形界面类 */
package ;
import .*;
import .*;
import .*;
import .*;
import .*;
public class DeliverGUI extends AddGoods//继承了添加产品的界面
{
JTextField txtGoodsname;
JTextField txtGoodsamount;
JTextField txtID;
public DeliverGUI()
{
super("下单");
("下单");
("商品名称");
("商品数量");
("用户名");
txtGoodsname=txtGoodsname1;
txtGoodsamount=txtGoodsprice1;
txtID=txtGoodsamount1;
}
public void actionPerformed(ActionEvent e)
{
if(()==btnQuit)
dispose();
else if(()==btnOK)
{
String username=();
String goodsname=();
try{
int amount=(().trim());
int flag=0; //记录是否存在此客户
int i2=0;
int success=0,goodsflag=0,amountflag=0;//success 记录是否操作成功
goodsflag 记录商品是否存在 amountflag 记录余量是否足够
for(int i=0;i<;i++)
{
if(success==1)break;
if([i].getId().equals(username))//存在此客户
{
flag=1;
for(int j=0;j<[i].getGoodslth();j++)
{
if(success==1)break;
if([i].Goods[j].equals(goodsname))//曾经购买了此商品
{
for(int
k=0;k<;k++)
{
if(success==1)break;
if([k].getName().equals(goodsname))//查询是否有这种产品
{
goodsflag=1;
if([k].getLeft()>=amount)
{
[i].Amount[j]+=amount; //更新该用户的购买量
int
left=[k].getLeft()-amount; // 更新库存
[k].alterLeft(left);
amountflag=1;success=1;
}
}
}
}
else //客户未购买此商品则新建此商品
{
i2=i;
int
num=[i2].getGoodslth()+1;
for(int k=0;k<;k++)
{
if([k].getName().equals(goodsname))
{
goodsflag=1;
if([k].getLeft()>=amount)
{
[i2].buyGoods(goodsname,[k].getPrice(),amount);
[i2].Amount[num]=amount;// 更新库存
int
left=[k].getLeft()-amount;
[k].alterLeft(left);
amountflag=1;
success=1;
break;
}
}
if(success==1)break;
}
}
}
}
}
if(flag==0) //新建客户
{
int numClient=++;
int numGoods=[i2].getGoodslth()+1;
for(int k=0;k<;k++)
{
if([k].getName().equals(goodsname))
{
goodsflag=1;
if([k].getLeft()>=amount)
{
int
left=[k].getLeft()-amount;
[k].alterLeft(left);
// 更新库存
[i2].alterGoodslth([i2].getGoodslth()-1);
[numClient]=new
Client(username);
[numClient].buyGoods(goodsname,[k].getPrice(),amount);
amountflag=1;
success=1;
}
}
if(success==1)break;
}
}
if(success==1)(null,"下单成功");
if(goodsflag==0)(null,"不存在此
商品,无法下单");
if(goodsflag==1&&amountflag==0)(null,"商品库存不够,无法下
单");
}
catch(NumberFormatException
ee){(null,"输入错误","警告",_MESSAGE);}
} //end btnok
else
{
("");
("");
("");
}
}
}
package ;
import .*;
import .*;
import .*;
import .*;
import .*;
public class FrameListener extends WindowAdapter //关闭系统
{
public void windowClosing(WindowEvent e)
{
(0);
}
}
/* 一个简单的销售系统设计示例
版本:Ver
作者:谢超
时间:
*/
/* 销售系统查询客户图形界面类 */
package ;
import .*;
import .*;
import .*;
import .*;
import .*;
public class InquiryClientGUI extends ReviseClientGUI
{
Search search;
public InquiryClientGUI()
{
super("查询客户资料");
search=new Search();
("查询客户资料");
("输入客户 ID:");
(false);
("");
("");
(false);
("");
(false);
(false);
(false);
(false);
(false);
(50,100,100,200);
(50,150,300,30);
(50,200,300,30);
(280,300,80,40);
(150,300,80,40);
setSize(500,390);
}
public void actionPerformed(ActionEvent e)
{
if(()==btnQuit)
dispose();
else
{
String goodsifo;
String amountifo;
String tmpname=().trim();
if((tmpname)!=null)//判断是否存在
此客户
{
goodsifo=();
amountifo=();
("性别:
"+());
(goodsifo);
(amountifo);}
else ("不存在此顾客!");
}
/*
else
{
String goodsifo;
String amountifo;
String tmpname=().trim();
int flag=0;
for(int i=0;i<;i++)
{
if([i].getId().equals(tmpname))
{
int j;
for( j=i;j<;j++)
{
goodsifo=[i].printGoods();
amountifo=[i].printAmount();
("性别:
"+[i].getGender());
(goodsifo);
(amountifo);
flag=1;
}
}
}*/
}
}
/* 一个简单的销售系统设计示例
版本:Ver
作者:谢超
时间:
*/
/* 销售系统查询商品图形界面类 */
package ;
import .*;
import .*;
import .*;
import .*;
import .*;
public class InquiryGoodsGUI extends ReviseClientGUI
{
Search search;
public InquiryGoodsGUI()
{
super("查询产品");
search=new Search();
(false);
(false);
(false);
("查询产品");
("输入产品名:");
("价格(元):");
("总量(件):");
("余量(件):");
(false);
(150,220,80,40);
(50,220,80,40);
setSize(300,320);
setBounds(300,160,300,320);
}
public void actionPerformed(ActionEvent e)
{
if(()==btnQuit)
dispose();
else{
String tmp=();
if((tmp))
{
if((tmp)!=null)
{
((())); //将数字转化为字符串
((()));
((()));}
else (null,"不存在
此商品!","警告",_MESSAGE);
}
}
}
}
/* 一个简单的销售系统设计示例
版本:Ver
作者:强余彬
时间:
*/
/* 销售系统修改客户图形界面类 */
package ;
import .*;
import .*;
import .*;
import ;
import .*;
import .*;
//修复了一些逻辑问题 捕获了一些异常
public class ReviseClientGUI extends JFrame implements ActionListener
{
public JButton btnOK;
public JButton btnQuit;
public JButton btnReset;
public Font myFont;
public JLabel lbTitle1;
public JLabel lbID;
public JLabel lbGender;
public JLabel lbGoodsname;
public JLabel lbGoodsprice;
public JLabel lbGoodsamount;
public JTextField txtID;
public JTextField txtGender;
public JTextField txtGoodsname;
public JTextField txtGoodsprice;
public JTextField txtGoodsamount;
public ReviseClientGUI(String s)
{
super(s);
btnOK=new JButton("确定");
btnQuit=new JButton("退出");
btnReset=new JButton("重置");
myFont=new Font("隶书",,20);
lbTitle1=new JLabel("修改客户资料");
lbID=new JLabel("用户 ID");
lbGender=new JLabel("用户性别");
lbGoodsname=new JLabel("商品名称");
lbGoodsprice=new JLabel("商品价格");
lbGoodsamount=new JLabel("商品数量");
txtID=new JTextField();
txtGender=new JTextField();
txtGoodsname=new JTextField();
txtGoodsprice=new JTextField();
txtGoodsamount=new JTextField();
setLayout(null);
(myFont);
//设置位置
(30,300,80,40);
(110,300,80,40);
(190,300,80,40);
(100,0,150,40);
(50,50,100,30);
(130,50,100,30);
(50,90,100,30);
(130,90,100,30);
(50,130,100,30);
(130,130,100,30);
(50,170,100,30);
(130,170,100,30);
(50,210,100,30);
(130,210,100,30);
add(lbTitle1);
add(btnOK);
add(btnQuit);
add(btnReset);
add(lbID);
add(lbGender);
add(lbGoodsname);
add(lbGoodsprice);
add(lbGoodsamount);
add(txtID);
add(txtGender);
add(txtGoodsname);
add(txtGoodsprice);
add(txtGoodsamount);
(this);
(this);
(this);
setSize(300,400);
setBounds(450,220,300,400);
setVisible(true);
setResizable(false);
validate();
}
public void actionPerformed(ActionEvent e)
{
if(()==btnQuit)
dispose();
if(()==btnOK)
{
int flagman=0;
int flaggoods=0;
int success=0;
for(int i=0;i< ;i++)
{
if([i].getId().equals(()))
{
success=1;
flagman=1;
if(!().equals(""))
[i].alterId(());
if(!().equals(""))
[i].alterGender(());
for(int j=0;j<[i].getGoodslth();j++)
{
if([i].Goods[j].equals(()))
{
flaggoods=1;
int
tmp=(().trim());
[i].Amount[j]=tmp;
}
}
if(flaggoods==0)
{
(null,"
该客户未购买此商品,无法修改!","错误",_MESSAGE);
success=0;
}
}
}
if(success==1)
(null,"修改客户资料
成功");
if(flagman==0&success==0)
(null,"不存在此客户,
无法修改!","警告",_MESSAGE);
}
if(()==btnReset)
{
("");
("");
("");
("");
("");
}
}
}
/* 一个简单的销售系统设计示例
版本:Ver
作者:强余彬
时间:
*/
/* 销售系统修改产品图形界面类 */
package ;
import .*;
import .*;
import .*;
import ;
import .*;
import .*;
public class ReviseGoodsGUI extends ReviseClientGUI//继承了修改客户的类是代码更精简 实现的效
果相同
{
Search search;
public ReviseGoodsGUI()
{
super("修改产品");
search =new Search ();
("修改产品");
("产品名");
("产品价格");
("产品余量");
(false);
(false);
(false);
(false);
(30,170,80,40);
(110,170,80,40);
(190,170,80,40);
setBounds(300,160,300,270);
}
public void actionPerformed(ActionEvent e)
{
if(()==btnQuit)
dispose();
else if(()==btnOK)
{
String tmp=();
int flag=0;
if((tmp))
{
try{
if((tmp)!=null)
{
(tmp);
((()));
((()));
(null,"修改产品成功
");}
else (null,"不存在此商品!
","警告",_MESSAGE);}
catch (NumberFormatException ee){}
}
}
else
{
("");
("");
("");
}
}
}