产品销售管理系统Word文件下载.docx
- 文档编号:22199055
- 上传时间:2023-02-03
- 格式:DOCX
- 页数:83
- 大小:570.84KB
产品销售管理系统Word文件下载.docx
《产品销售管理系统Word文件下载.docx》由会员分享,可在线阅读,更多相关《产品销售管理系统Word文件下载.docx(83页珍藏版)》请在冰豆网上搜索。
产品销售管理系统
分工:
角色
姓名
承担的具体任务
组长
黄国辉
程序的主入口、客户类、修改产品、修改客户、下单及一些界面类
组员
陈旦旦
产品类、销添加删除客户、产品的类
赵晓涛
初始化数据类、查询客户、产品类、用户类
2.系统需求分析
系统功能描述
商品销售系统
系统管理员:
添加客户资料、删除客户资料、修改客户资料、查询客户资料、添加商品、删除商品、修改商品、查询商品、下单、取消下单、修改密码(包括销售人员)
销售人员:
添加客户资料、修改客户资料、查询客户资料、修改商品、下单、取消下单、修改密码
系统用例图
(黄国辉)
搜查实体类
异常类
(陈旦旦)
(赵晓涛)
四、测试数据与实验结果
登陆界面
输入错误
系统管理员主界面
修改客户(失败)
修改客户(成功)
添加产品
查询客户资料
销售人员主界面
下单
查询产品
修改密码
五、结果分析与实验体会
(黄国辉)本次实验对系统的功能没有做修改,主要是优化了系统的结构。
首先是本次实验大量运用了继承,尤其是界面,大多数的界面继承的是ReviseClientGUI这个界面,重复利用了界面上的布局以及标签,大大简化了工作量以及代码的长度,有些界面是继承的一些相似的界面,例如删除客户继承了删除产品的界面,而删除产品又是继承于修改客户这个界面。
其次,本次实验添加了一个自定义异常类,当创建新用户的时候密码低于三位数会自动派出此异常。
本次试验还添加了一个Search类,里面有一些常用函数,例如查找客户、查找产品、比较字符串、删除客户等方法,在其他界面中要用可以调用此嘞的一些方法,实现了类的封装。
此外,本次实验还将以前在输入一些非法数据会产生的异常给补上了,例如有NullPointerException、NumberFormatException等等。
有一些界面只需要接收一个用户输入的数据,所以就是用了JOPtionPane类中的showInputDialog函数用来接收数据,大大简化了代码量,优化了系统性能。
本次实验画了整体系统的类图之间的关系,大大加深了我对此系统的了解,形成了一个严密的框架,对于今后的学习会有很大的帮助。
老师的代码对于我们的学习是有很大的帮助的,学习是一件长期的事,实践着“痛并快乐着……”的感觉是非常好的,我会继续坚持下去的。
(陈旦旦)本次实验主要运用了属性以及函数的继承,隐藏,重载等操作。
通过遮羞方法的运用,能够明显简化代码的复杂度,尤其是继承的运用,通过继承其他属性函数的操作,从而简化程序的复杂度,此外还需要运用文本域的隐藏操作,对于新的操作需要重新定义标签和文本域,另外在继承操作时需要注意继承的对象公共和私有,来避免错误。
在编程时会出现一些异常,对于异常的处理,可以通过publicvoidp(intx){
try{
}
catch(Exceptione){
finally{
}
}语句来捕获异常,如果在try语句中出现异常,则会被抛出。
对于处理不了的异常或者要转型的异常,在方法的声明处通过throws语句抛出异常。
本次实验还练习了通过visio软件画系统类图和用例图,包括实体类、界面类,特性与操作的参数的输入,顶层包的加载等等。
(赵晓涛)第三次试验是在第二次的基础上的拓展,在这次试验中我完成了我所有的包中的文件的测试,以及完成了相应的文件的类图的画图。
在类图的画画过程中还是有一些不懂得地方,对于系统中的集体的操作和特性有的区分的不是很清楚,在画类图的时候参考了老师的类图的画法,还有同学的帮助。
这次试验掌握了类图的画法,和对继承的一些了解。
源代码
/*销售系统主登陆窗口图形界面类*/
packageSalesSystem;
importjava.awt.*;
importjava.awt.event.*;
importjavax.swing.*;
importSalesSystem.lhz.*;
importSalesSystem.xc.*;
importSalesSystem.qyb.*;
importjava.util.*;
publicclassGUIextendsFrameimplementsActionListener,ItemListener
{
TextFieldtxId;
//一定一个宽度为10个字符的文本框,用于答案输入
TextFieldtxPassword;
LabellbTitle;
LabellbId;
LabellbPassword;
ButtonbtOk;
ButtonbtCancel;
ButtonbtReset;
Labeltype;
ChoicetypeChoice;
FontmyFont;
Stringchtype;
publicUseru;
GUI()//构造函数,用来初始化
{
super("
主登陆界面"
);
//调用父类构造函数
btOk=newButton("
确定"
btCancel=newButton("
退出"
btReset=newButton("
重置"
chtype="
销售人员"
;
typeChoice=newChoice();
type=newLabel("
身份:
"
lbTitle=newLabel("
商品销售系统"
lbTitle.setFont(myFont);
lbId=newLabel("
用户账号"
txId=newTextField(10);
lbPassword=newLabel("
用户密码"
txPassword=newTextField(10);
myFont=newFont("
宋体"
Font.BOLD,20);
//定义字体为黑体、加粗、字号18
GridBagLayoutgbl=newGridBagLayout();
GridBagConstraintsgbc=newGridBagConstraints();
setLayout(gbl);
//设置标题控件的位置
gbc.anchor=GridBagConstraints.NORTH;
//让标题顶部居中
gbc.gridwidth=GridBagConstraints.REMAINDER;
//让标题成为所在行最后(也是唯一)一个组件
add(lbTitle,gbc);
//设置姓名控件的位置
gbc.anchor=GridBagConstraints.WEST;
//让ID标签位于左侧
gbc.gridwidth=1;
//占一个单元格
add(lbId,gbc);
//让ID输入框成为所在行最后一个组件
add(txId,gbc);
//设置密码控件的位置
add(lbPassword,gbc);
add(txPassword,gbc);
//设置身份控件的位置
add(type,gbc);
add(typeChoice,gbc);
typeChoice.add("
typeChoice.add("
系统管理员"
gbc.anchor=GridBagConstraints.SOUTH;
add(btOk,gbc);
add(btCancel,gbc);
add(btReset,gbc);
btOk.addActionListener(this);
//为输入文本框注册监听器对象
btReset.addActionListener(this);
//为按钮注册监听器对象
btCancel.addActionListener(this);
typeChoice.addItemListener(this);
setBackground(Color.yellow);
//设置背景色为黄色
setSize(300,260);
setBounds(450,220,300,260);
setVisible(true);
validate();
}
publicvoiditemStateChanged(ItemEvente)
if(e.getItemSelectable()instanceofChoice)
chtype=((Choice)e.getItemSelectable()).getSelectedItem();
publicvoidactionPerformed(ActionEvente)//实现ActionListener接口的actionPerformed方法
if(e.getSource()==btOk)
{//判断事件源,如果是输入文本框
booleana,b,c;
a=Init.init.user1.userTypeJudge(txId.getText(),txPassword.getText(),chtype);
b=Init.init.user2.userTypeJudge(txId.getText(),txPassword.getText(),chtype);
c=Init.init.user3.userTypeJudge(txId.getText(),txPassword.getText(),chtype);
if(a||b||c)
{
if(chtype.equals("
))
{
newManagerGUI("
黄国辉"
this.setVisible(false);
}
else
if(b)u=Init.init.user2;
elseu=Init.init.user3;
newSalesmanGUI("
+txId.getText(),u);
this.setVisible(false);
}
elseif(Init.init.user1.userPsdJudge(txId.getText(),txPassword.getText())||Init.init.user2.userPsdJudge(txId.getText(),txPassword.getText())||Init.init.user3.userPsdJudge(txId.getText(),txPassword.getText()))
JOptionPane.showMessageDialog(null,"
密码输入错误!
elseJOptionPane.showMessageDialog(null,"
此账号不存在!
"
错误"
JOptionPane.ERROR_MESSAGE);
}
elseif(e.getSource()==btReset)
{
txId.setText("
txPassword.setText("
else
System.exit(0);
//系统正常退出,如果参数是1,则为异常退出
/*销售系统主入口类*/
importjava.io.*;
publicclassMain
publicstaticvoidmain(Stringargs[])
System.out.println(Init.init.user1.tostring());
System.out.println(Init.init.user2.tostring());
System.out.println(Init.init.user3.tostring());
System.out.println(Init.init.goods[0].tostring());
System.out.println(Init.init.goods[1].tostring());
System.out.println(Init.init.goods[2].tostring());
System.out.println(Init.init.goods[3].tostring());
System.out.println(Init.init.goods[4].tostring());
newGUI();
//构造一个新窗体对
/*销售系统添加客户图形界面类*/
packageSalesSystem.lhz;
publicclassAddClientGUIextendsAddGoods//继承与AddGoods因为AddGoods与其界面比较相似
Searchsearch=newSearch();
publicAddClientGUI()
添加客户"
lbID.setText("
客户姓名"
lbGender.setText("
客户性别"
lbTitle1.setText("
lbGoodsamount1.setVisible(false);
txtGoodsamount1.setVisible(false);
btnOK.setBounds(30,130,80,40);
btnQuit.setBounds(110,130,80,40);
btnReset.setBounds(190,130,80,40);
setSize(300,230);
setBounds(300,160,300,230);
publicvoidactionPerformed(ActionEvente)
if(e.getSource()==btnQuit)
dispose();
elseif(e.getSource()==btnOK)
{
Stringtmpname=txtGoodsname1.getText();
if(Search.isEmpty(tmpname))//是否输入文字
{
try{
search.searchClient(tmpname);
if(search.findClient!
=null)
{JOptionPane.showMessageDialog(null,"
此客户已存在"
else
Init.init.client[Client.lth++]=newClient(tmpname,txtGoodsprice1.getText());
JOptionPane.showMessageDialog(null,"
添加客户资料成功"
this.setVisible(false);
}
catch(NullPointerExceptionee){}
}
else
txtID.setText("
txtGender.setText("
}
/*销售系统添加产品图形界面类*/
importjavax.swing.JOptionPane;
publicclassAddGoodsextendsReviseClientGUI//界面继承了ReviseClientGUI添加了异常处理若未输入弹出错误对话框
publicJTextFieldtxtGoodsname1;
//引用
publicJTextFieldtxtGoodsprice1;
publicJTextFieldtxtGoodsamount1;
publicJLabellbGoodsname1;
publicJLabellbGoodsprice1;
publicJLabellbGoodsamount1;
SearchsGoods;
publicAddGoods(Strings)
super(s);
sGoods=newSearch();
txtGoodsname1=txtID;
txtGoodsprice1=txtGender;
txtGoodsamount1=txtGoodsname;
lbGoodsname1=lbID;
lbGoodsprice1=lbGender;
lbGoodsamount1=lbGoodsname;
添加产品"
lbGoodsname1.setText("
产品名称"
lbGoodsprice1.setText("
产品价格"
lbGoodsamount1.setText("
产品总量"
btnOK.setBounds(30,170,80,40);
btnQuit.setBounds(110,170,80,40);
btnReset.setBounds(190,170,80,40);
lbTitle1.setBounds(100,0,150,40);
lbGoodsname1.setBounds(50,50,100,30);
txtGoodsname1.setBounds(130,50,100,30);
lbGoodsprice1.setBounds(50,90,100,30);
txtGoodsprice1.setBounds(130,90,100,30);
lbGoodsamount1.setBounds(50,130,100,30);
txtGoodsamount1.setBounds(130,130,100,30);
setSize(300,270);
setBounds(300,160,300,270);
lbGoodsprice.setVisible(false);
txtGoodsprice.setVisible(false);
lbGoodsamount.setVisible(false);
txtGoodsamount.setVisible(false);
if(e.getSource()==btnQuit)
elseif(e.getSource()==btnOK)
Stringtmpname=txtGoodsname1.getText();
if(sGoods.isEmpty(tmpname))
sGoods.searchGoods(tmpname);
if(sGoods.findGoods!
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 产品 销售 管理 系统
![提示](https://static.bdocx.com/images/bang_tan.gif)