【数据库课程设计】:OpenGauss+java+swing

OpenGauss数据库课程设计

本课程设计以OpenGauss作为数据库,使用java的图形化界面实现窗口间的信息交互。
特色: 实现了 表的增删改查触发器的建立,数据的转储,精确查询与模糊查询

1.触发器

主要的借还书功能用数据库的触发器实现,且OpenGauss数据库需要先创建触发器函数,再调用,比较特殊。函数如下:

【借书触发器函数代码:】

CREATE OR REPLACE FUNCTION public.update_books()
 RETURNS trigger
 LANGUAGE plpgsql
 NOT FENCED NOT SHIPPABLE
AS $$
           DECLARE
           BEGIN
                   UPDATE books SET stock=stock-1 WHERE title=NEW.book;
                   RETURN NEW;
           END
           $$;

【还书触发器函数代码:】

CREATE OR REPLACE FUNCTION public.update_books2()
 RETURNS trigger
 LANGUAGE plpgsql
 NOT FENCED NOT SHIPPABLE
AS $$
           DECLARE
           BEGIN
                   UPDATE books SET stock=stock+1 WHERE title=OLD.book;
                   RETURN NEW;
           END
           $$;

【OpenGauss数据库表的代码】

CREATE TABLE admindt (
  id bigint NOT NULL,
  username varchar(30) NOT NULL,
  password varchar(30) NOT NULL,
  againcode char(30) NOT NULL,
  PRIMARY KEY (id)
);
CREATE TABLE books (
  ID bigint NOT NULL ,
  ISBN varchar(30) NOT NULL,
  TITLE varchar(30) NOT NULL,
  PUBLISH varchar(30) NOT NULL,
  STOCK bigint NOT NULL,
  PRIMARY KEY (ID)
);
CREATE TABLE borrow (
  ID bigint NOT NULL,
  book varchar(30) NOT NULL,
  reader varchar(30) NOT NULL,
  borrow_date date NOT NULL,
  return_date date NOT NULL,
  PRIMARY KEY (ID)
);
CREATE TABLE readers (
  ID bigint NOT NULL,
  name varchar(50) NOT NULL,
  code varchar(30) NOT NULL,
  major varchar(30) NOT NULL,
  stu_id varchar(30) NOT NULL,
  sex varchar(6) check(sex=‘男’or sex=‘女’),
  born bigint NOT NULL,
  fine bigint DEFAULT NULL,
  date date NOT NULL,
  PRIMARY KEY (ID)
);

2.转储 和 模糊查询

1.对查询到的图书信息进行转储,在桌面自动生成一个.txt文件进行保存。
2.模糊插叙是使用SQL的LIKE语句。
【java代码:】

public void actionPerformed(ActionEvent e) {
		try {
			
			if(e.getSource()==query[0]){
				String txstr[]=new String[4];
				for(int i=0;i<4;i++){
					txstr[i]=jtfarr[i].getText().trim();
				}
				if(txstr[0].equals("")&&txstr[1].equals("")&&txstr[2].equals("")&&txstr[3].equals("")){
					JOptionPane.showMessageDialog(null, "不能全为空");
					return;
				}
				if(!txstr[0].equals("")){
					sql="select * from books where ID ="+txstr[0];
				    
				}else if(!txstr[1].equals("")){
					sql="select * from books where ISBN ='"+txstr[1]+"'";
				}else if(!txstr[2].equals("")){
					sql="select * from books where TITLE ='"+txstr[2]+"'";
				}else if(!txstr[3].equals("")){
					sql="select * from books where PUBLISH ='"+txstr[3]+"'";
				}
				ResultSet rs = stmt.executeQuery(sql);
				if(rs.next()){
					
					rs.getMetaData();
					int column = rs.getMetaData().getColumnCount();//表格列数
					do{
						tabstr=tabstr+bbnume[0];
						for (int i = 0; i < column; i++) {//获取除表头的每一行
							tabstr=tabstr+rs.getString(i + 1)+bbnume[i+1];
						}
						tabstr=tabstr+"\n";
					}while(rs.next());
					tabArea.setText(tabstr);
					JSP.add(tabArea);
                      //数据的转储,outFilepath已经声明
					try {
						BufferedWriter bw=new BufferedWriter(new FileWriter(outFilePath));
						bw.append(tabArea.getText());
						bw.close();
					}catch(IOException ee) {
						ee.printStackTrace();
					}
					
					tabstr="";//置空字符串,使下一次正常输出
					
				}else{
					JOptionPane.showMessageDialog(null, "输入不存在");
					return;
				}
			}else if(e.getSource()==query[1]){
				String vastr[]=new String[2];
				for(int i=0;i<2;i++){
					vastr[i]=v_search[i].getText().trim();
				}
				if(v_str[0].equals(vastr[0])&&v_str[1].equals(vastr[1])){
					JOptionPane.showMessageDialog(null, "请输入关键词");
					return;
				}
				if(!v_str[0].equals(vastr[0])){
					sql="select * from books where TITLE like '%"+vastr[0]+"%';";//模糊查询
				}else if(!v_str[1].equals(vastr[1])){
					sql="select * from books where PUBLISH like '%"+vastr[1]+"%';";
				}

界面视图如下
【主界面】
在这里插入图片描述

【未登录查书/借书界面】
在这里插入图片描述

【读者/管理员用户登记】
在这里插入图片描述

【读者中心】
在这里插入图片描述

【借书成功】
在这里插入图片描述

【还书】
在这里插入图片描述

【管理员中心】
在这里插入图片描述

【用户注册】
在这里插入图片描述

【注册管理员】
在这里插入图片描述

【删除用户】
在这里插入图片描述

【增加图书】
在这里插入图片描述

【删除图书】
在这里插入图片描述

【全部java代码和图片】:https://download.csdn.net/download/SuperOnly2222/21090031

在这里插入图片描述

评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

橘子潜水

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值