数据库课程设计(电脑配件库存管理系统)

来源:互联网 发布:网络转换地址优缺点 编辑:程序博客网 时间:2024/04/30 07:28

   又是一年课程设计时,此次做的是数据库管理系统:电脑配件库存管理系统

主要包括以下基本内容:

1)电脑配件资料的添加与删除;

2)电脑配件的进货与出货管理;

3)电脑配件的库存管理与信息统计;

4)各种信息统计分析功能;

5)完成程序的最终调试,必须能正常运行

    此次课程设计中比较有用的知识点(会在下面一一展示):

1.在java程序中调用事先在数据库中写好的存储过程(而不用再苦逼地写sql语句了);

2.本个系统中,通过触发器实现当向入库表或者出库表插入数据时,动态更新库存表中的库存量;

   如:库存表中原来有键盘10个,然后执行了向入库表中插入数据,又采购了20个键盘,通过触发器数据库自身更新库存表中键盘库存量为10+20=30个了。我们只用关心向入库表中添加数据,而库存表中相应配件的数量则交给相应的触发器去更新。

3.复习了一下如何将通过select语句返回回来的结果集,以表格的形式显示出来(利用了JTable插件来表格显示


1和2. 在数据库中创建存储过程和相应的触发器

表的结构

create table 商品表
(商品编号 char(5) not null primary  key,
商品名称 varchar(50) not null,
生产厂家 varchar(50) not null,
型号 varchar(20) not null,
规格 varchar(20) not null)

create table 仓库表
(仓库号 char(10) not null primary  key,
仓库名称 varchar(50) not null,)

create table 库存表
(商品编号 char(5) not null ,
仓库号  char(10) not null,
库存数量 int     not null,
primary  key(商品编号,仓库号) ,
foreign key (商品编号)  references 商品表(商品编号),
foreign key (仓库号) references 仓库表(仓库号))


create table 入库表
(入库号 char(10) not null  primary key,
商品编号 char(5) not null,
仓库号 char(10) not null,
foreign key (商品编号)  references 商品表(商品编号),
foreign key (仓库号) references 仓库表(仓库号),
入库数量 int not null,
入库日期 datetime not null,
入库单位名称 varchar(50) not null,
送货人姓名 varchar(10) not null,
性别 char(2) default '男' check(性别 in ('男','女')))


create table 出库表
(出库号 char(10) not null  primary key,
商品编号 char(5) not null,
仓库号 char(10) not null,
foreign key (商品编号)  references 商品表(商品编号),
foreign key (仓库号) references 仓库表(仓库号),
出库数量 int not null,
出库日期 datetime not null,
出库单位名称 varchar(50) null,
提货人姓名 varchar(10) not null,
性别 char(2)  default('男') check (性别 in ('男','女')))

/*定义相关的约束条件*/
alter table 商品表
add unique (商品名称,生产厂家,型号,规格)

alter table 商品表
add  constraint  CS1 check(型号 like'[D][A][0-1][0-9][0-9][0-9]')



对应的触发器:

在java中调用rukuinsert存储过程(同时数据库隐式调用触发器rkb_into):

CallableStatement  callableStatement3 = con.prepareCall("{call rukuinsert(?,?,?,?,?,?,?,?,?)}") ; 
callableStatement3.setString(1,jt1.getText());
callableStatement3.setString(2,jt2.getText());
callableStatement3.setString(3,jt3.getText());
callableStatement3.setString(4,jt4.getText());
callableStatement3.setString(5,jt5.getText());
callableStatement3.setString(6,jt6.getText());
callableStatement3.setString(7,jt7.getText());
callableStatement3.setString(8,jt8.getText());
callableStatement3.registerOutParameter(9,java.sql.Types.VARCHAR);
callableStatement3.execute();
flag = callableStatement3.getString(9);
JOptionPane.showMessageDialog(null,flag,"温馨提示",JOptionPane.WARNING_MESSAGE);

3.利用了JTable插件来表格显示

//声明表用到的组件
JScrollPane pane = null;
JTable table;
//使用JTable的相关参数
String[] columnNames = {"商品编号","商品名称","总入库数量"};
Object[][] data = new Object[8][3];

int count = 0;
Connection con = null;
String connectDB="jdbc:sqlserver://127.0.0.1:1433;DatabaseName=Test";//数据源
String user="sa";
String password="123";
try {
       con=DriverManager.getConnection(connectDB,user,password);  //连接数据库对象
} catch (SQLException e1) {e1.printStackTrace();}

try{
String 商品编号,商品名称,总入库数量;
CallableStatement  callableStatement3 = con.prepareCall("{call ruku_info4(?,?)}") ; 
callableStatement3.setString(1,jt11.getText());
callableStatement3.setString(2,jt12.getText());
ResultSet rs = callableStatement3.executeQuery();
while(rs.next())
{
商品编号 = rs.getString("商品编号");
商品名称 = rs.getString("商品名称");
总入库数量 = rs.getString("总入库数量");

data[count][0] = 商品编号;
data[count][1] = 商品名称;
data[count][2] = 总入库数量;
//System.out.println("getData() is running!");
count++;
}
rs.close();

//另外创建一个界面JFrame来显示表格
JFrame frame = new JFrame("按  年或月或日  为周期对入库商品统计");  
frame.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
TableModel model = new DefaultTableModel(data, columnNames);  
table = new JTable(model);  
RowSorter<TableModel> sorter = new TableRowSorter<TableModel>(model);  
table.setRowSorter(sorter);  
pane = new JScrollPane(table);
frame.add(pane, BorderLayout.CENTER); 
frame.setSize(600,200);  
frame.setVisible(true);  

  我希望通过自己的总结,让自己这个课程设计不白做,更希望自己可以帮助别人。趁着自己记忆最清楚的时候记录这些美妙的领悟。^_^



1 0
原创粉丝点击