疯狂java实战演义第章 图书进存销系统Word格式文档下载.docx
《疯狂java实战演义第章 图书进存销系统Word格式文档下载.docx》由会员分享,可在线阅读,更多相关《疯狂java实战演义第章 图书进存销系统Word格式文档下载.docx(59页珍藏版)》请在冰豆网上搜索。
销售治理界面
销售治理界面主要用于进行书的销售操纵,添加一本需要生意业务的书、从生意业务列表中移除该书、进行生意业务等操纵,在本界面的上半部门为生意业务记载列表,我们约定生意业务记载列表所显示的为今天进行的生意业务,并提供一个输入日期的输入框,可以凭据日期进行查询该天的生意业务记载。
本界面的下半部门为显示某笔生意业务的具体信息,包罗该笔生意业务所涉及的金额、销售量、生意业务日期、生意业务所涉及的书等信息。
开端的界面如图9.2所示。
图9.2销售界面
如图9.2,销售治理界面的生意业务记载列表中,每列的字段分别为该生意业务所涉及的书本名、总价、生意业务日期、总数量。
销售治理界面的下面部门,是显示具体某笔生意业务的界面,显示对应某笔生意业务的总价、生意业务日期、总数量、生意业务涉及书的列表,其中生意业务中涉及书的列表中,包罗书的书名、单价、和本次生意业务中该本书出售的数量。
生意业务中涉及的书列表下,可以选择书和输入书的数量,并提供添加和删除按钮,当选择了一本书并输入相应的生意业务数量,再点击添加时,即可向生意业务涉及的书列表中添加书的记载,固然也可以进行删除操纵。
在界面的最上面,有一个查询按键,可以输入日期进行生意业务记载查询。
注:
具体某笔生意业务的界面(界面的下面部门),总价、生意业务日期和总数量是不可输入的,这是由于总价是由各本书的单价乘以生意业务数量得出来的,生意业务日期是当前生意业务时系统的时间为准的,总数量是各本书的生意业务数量总和,因此并不需要人手进行输入。
另外,如果在书本的下拉框中选择了某本书时,将会带出该本书的单介和库存,好让使用者在操纵时对该本书的状况有所了解。
在本例中,每一个界面对应一个JPanel,每个界面都是一个JPanel类的子类,销售治理界面里面是一个JSplitPane东西,上面放一个个JScrollPane东西,下面部门也是一个JScrollPane东西。
上面的JScrollPane东西主要存放一个JTable,下面的JScrollPane主要放一些Box东西进行结构,详细请看图书进存销系统代码清单中的SalePanel类。
9.2.3入库治理界面
入库治理界面和销售治理界面的结构大抵相同,只是其中的数据列和文字有所差距。
入加治理界面如图9.3所示。
图9.3库存治理界面
与销售治理界面类似,上面的列表是入库记载,一条入库记载包罗入库时所涉及的书本、入库日期和入库书本的总数量。
界面下面部门是具体某条入库记载的具体信息,包罗入库日期、总数量和入库书本的列表,同样地,入库日期与总数量都不可以手动输入。
在新增一条入库记载时,可以向书本列表添加和删除书本,体现该入库记载中所涉及的书本及对应的数量。
在选择某本书时,需要自动带出该书的库存。
在本例中,入库治理界面对应的类为RepertoryPanel类,是JPanel的子类。
9.2.4书本治理界面
书本治理界面主要包罗书本的查询、列表、检察等功效,书本在本例中作为底子数据的脚色,主要用于销售和入库。
这里需要注意的是,在新增一本书的时候,该书的库存为0,只有经过销售和入库才会对书的库存量产生影响。
书的根本信息除了书名、代价介绍、所属出书社和书的种类外,还需要有书的图片,为简朴起见,本例中的每本书只有一张图片,因此不需要另外创建表来存放书的图片。
书本治理界面如图9.4所示。
图9.4书本治理界面
书本治理界面上面的列表主要显示书本名称、简介、所属种类、出书社、库存数量和代价这些信息,此处的书本名称与销售治理(入库治理)界面中的书本名称有所区别,这里的书本名称的列宽较窄,这是由于销售(入库)中所涉及的是多本书,而书本治理界面中每一条书的记载只是代表一本书。
在界面的下方有一个表单,用于检察、修改和添加书本操纵,表单的右边是书的图片显示区,用于显示书本所对应的缩略图,当用户点击缩略图的时候,可以弹出新的窗口用于展示大图。
与前面的界面一样,在步伐中,我们新增一个BookPanel作为该界面。
9.2.5种类治理界面
书的种类,体现一本书是属于哪个种类的,例如盘算机、文学、执法等等,这些都是书的种类,我们提供一个种类治理界面,可以用于治理各个种类。
种类在本例中与书本一样,属于底子数据。
新增种类并不需要任何约束,只需要输入种类的名称即可。
在书的治理界面中,如果需要添加一本书,必须选择该书所对应的种类。
种类治理界面如图9.5所示。
图9.5种类治理界面
如图9.5所示,种类治理界面并不庞大,上面是一个简朴的列表,下面是普通的检察、新增与修改的表单。
在步伐中,我们新增一个TypePanel作为该界面。
出书社治理界面
添加一本书,除了需要有种类之外,还需要选择该书的出书社,我们提供一个出书社治理界面。
如图9.6所示。
图9.6出书社治理界面
出书社列表中,主要显示出书社名称、联系人、联系电话和简介这些信息,下面的表单与前面几个界面的表单类似,都是用于检察、修改和新增。
在步伐中,我们新增一个ConcernPanel来体现这个界面。
从
到此,我们所需要的界面已经全部完成了,在中我们将对各个界面的代码进行优化,再去为主界面加上相应的菜单,我们的界面就全部完成。
修改界面代码
本例中涉及的各个界面,我们可以发明界面险些都大同小异,界面上面部门是一个列表,下面是一个表单,因此,我们可以将这几个界面的配合部门提取出来,作为每个界面东西(JPanel)的父类,将一些可以重用的代码提升至父类,并可以使用“模板要领”,提供一些抽象的要领让各个子类去实现。
以下代码为各个界面东西的父类(CommonPanel)的代码。
代码清单:
code\book\src\org\crazyit\book\ui\CommonPanel.java
privateJTabletable;
//存放数据的table
protectedVector<
Vector>
datas;
//列表数据
publicvoidsetJTable(JTabletable){
this.table=table;
}
publicJTablegetJTable(){
returnthis.table;
publicVector<
getDatas(){
returndatas;
publicvoidsetDatas(Vector<
datas){
this.datas=datas;
//将数据设置进JTable中
publicvoidinitData(){
if(this.table==null)return;
DefaultTableModeltableModel=(
//将数据设入表格Model中
tableModel.setDataVector(getDatas(),getColumns());
//设置表格样式
setTableFace();
//刷新列表的要领
publicvoidrefreshTable(){
initData();
getJTable().repaint();
//获取表列聚集,由子类去实现
publicabstractVector<
String>
getColumns();
//设置列表的样式,由子类去实现
publicabstractvoidsetTableFace();
//设置数据列表的要领,由子类去实现
publicabstractvoidsetViewDatas();
//清空界面下边的列表
publicabstractvoidclear();
//给子类使用的要领,用于获取一个列表的id列值
publicStringgetSelectId(JTabletable){
introw=table.getSelectedRow();
intcolumn=table.getColumn("
id"
).getModelIndex();
Stringid=(String)table.getValueAt(row,column);
returnid;
以上的代码,提供一个JTable的属性,这是因为每个界面中都有一个主要的列表东西,例如销售治理界面中的销售记载列表、书本治理界面中的书本列表等。
注意代码中的黑体部门,都是由子类去实现的要领,getColumns()由子类去提供列表的列聚集;
setTableFace()是由子类去设置JTable的显示,例如需要设置某一列的宽度大概设置列表的行高等等;
而setViewDatas()要领是重新去数据库读取数据,由子类去实现;
clear()要领是刷新每个界面下边的表单,同样由子类去实现。
在CommonPanel中提供了一个getSelectId要领,用来得到JTable属性中所选中的某一行中id列的值,也就是意味着在列表中,必须要有一个列名叫做id的列。
父类界说好范例之后,子类就可以凭据差别的情况,给父类差别的列,让父类进行显示,除了需要提供列的聚集外,还需要提供数据,也就是CommonPanel中的datas属性。
我们这里提供了一个setViewDatas的要领,主要从数据库中读取相关的数据,再调用父类的initDatas要领构建列表。
那么存放各个界面东西的JFrame类中,可以提供一个要领,当界面产生转换时,就调用setViewDatas要领,具体代码如下。
code\book\src\org\crazyit\book\ui\MainFrame.java
//切换各个界面
privatevoidchangePanel(CommonPanelcommonPanel){
//移除当前显示的JPanel
this.remove(currentPanel);
//添加需要显示的JPanel
this.add(commonPanel);
//设置当前的JPanel
this.currentPanel=commonPanel;
this.repaint();
this.setVisible(true);
//调用CommonPanel的要领重新读取数据并刷新列表
commonPanel.setViewDatas();
//清空界面下边的表单
commonPanel.clear();
以上代码的黑体部门,调各个界面东西父类的se