【完整代码】网上书店信息管理系统--基于Mysql数据库与java

网上书店信息管理系统

  • 一、需求分析
    • (一)设计系统的意义以及用途
    • (二)实现的功能
      • 1.用户模块:
        • 1、全部图书浏览
        • 2、图书搜索
        • 3、购物车管理和订单查看
        • 4、修改密码
      • 2.书店管理员模块
          • 1、图书类别管理
          • 2、图书管理
          • 3、全部订单查看
          • 4、店员信息管理
          • 5、修改密码
  • 二、逻辑结构设计
  • 三、具体实现
    • (一)登录界面的实现
    • (二)注册模块实现
    • (三)用户模块的实现
      • 1.全部图书
      • 2.搜索图书
      • 3.我的购物车、我的订单
    • (四)管理员登录模块的实现
      • 1.图书类别添加、图书类别维护
      • 2.图书添加、图书修改
      • 3.全部订单
      • 4.店员信息管理
    • (五)通用功能
      • 1.修改密码
      • 2.用户退出

一、需求分析

(一)设计系统的意义以及用途

随着信息技术和网络技术的高速发展,图书网上选购工作应运而生,越来越的人开始在网上购买书籍。设计一个信息管理系统,使用MySQL和JAVA,模拟了网上书店,不仅科学地对书店的图书进行有效的分类管理,更是提高了人们对于图书的选购效率,可以有效的节约资源并且有效的存储、更新和查询信息,提高工作和服务的效率。

(二)实现的功能

本系统在区别用户身份时设定了两个主页面,使系统可以允许两种不同的角色进行访问,即用户(购买者)、管理员(店主),并赋予他们不同的访问权限。具体实现的功能如下:

1.用户模块:

1、全部图书浏览

对于书店可出售的全部图书基本信息(图书名称、图书类型、图书作者、图书价格)进行查看浏览

2、图书搜索

(1)对于感兴趣的图书进行关键词搜索,输入与书名相关的关键词,即可搜索显出全部相关的书籍信息;
(2)点击感兴趣的图书,即可查看图书的详细信息;
(3)选定图书,即可加入购物车

3、购物车管理和订单查看

(1)对于购物车中图书选中后,可下单处理;
(2)查看个人的全部购书记录(图书信息、下单金额、下单时间)

4、修改密码

2.书店管理员模块

1、图书类别管理

(1)图书类别添加,管理员输入新的图书类别以及类别的描述,即可在图书类别数据库中添加新的图书类别;
(2)图书类别修改,管理员可以对于现有的全部图书类别以及类别描述进行删除和修改的操作。

2、图书管理

(1)图书添加:在已有的图书类别中添加新的图书,输入图书名称、作者、价格、简介等信息;
(2)图书信息修改:对于数据库已有的全部图书信息进行删除和修改的操作。

3、全部订单查看

管理员可以对用户的全部订单进行查看。

4、店员信息管理
管理员可以对书店员工的基本信息(姓名、电话、薪资等)尽心查看和修改。
5、修改密码

二、逻辑结构设计

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

三、具体实现

(一)登录界面的实现

在这里插入图片描述

关键代码实现如下:

protected void LoginActionPerformed(ActionEvent e) {
        // 获取输入框中“用户名”和“密码”中的内容
		String name = this.userNameTxt.getText(); 
		String pwd = new String(this.PwdTxt.getPassword());
		String userid = "";
		String qxValue = (String) this.UserBoxTxt.getSelectedItem();
		if (qxValue.equals("用户")) {// 用户登录
			userid = "0";
            //根据用户输入的信息在表中进行查询
			List<User> list = UserDao.login(name, pwd, userid);
			if (list.size() != 0) {// 登录成功
				dispose();
				LoginConfig.save(new User(name, pwd, userid));
				new MainFrm().setVisible(true);
			} else {
                 // 弹框输出登录失败的提示内容
				JOptionPane.showMessageDialog(null, "账号或密码错误");
			}
		} else {// 管理员登录同理
			userid = "1";
}

(二)注册模块实现

在这里插入图片描述
关键代码实现如下:

**首先获取输入的用户名,利用函数userDao.selectUname(name)在数据库的user中进行表中进行查询,是否已经存在**
		String name = this.nameTxt.getText();
		User user = userDao.selectUname(name);
    //查询语句,写在selectUname(name)函数当中
    String sql = "select * from t_user where userName=?";
		if (user != null) {
			JOptionPane.showConfirmDialog(null, "用户名已经注册");//体现实体完整性,用户名是用户实体的主键,不允许重复
			reset();
 } else {
			int i = userDao.reg(name, pwd,sex,tel);
			if (StringUtil.isEmpty(name)) {
				JOptionPane.showMessageDialog(null, "用户名不能为空");
				return;
			}
			if (tel.length()!=11) {
				JOptionPane.showMessageDialog(null, "联系方式格式错误"); //体现用户自定义的完整性,要求telTxt长度必须为11
				return;
			}
//若用户名不存在则插入用户信息
		public int reg(String name, String pwd,String sex, String tel) {
		String sql = "insert into t_user(userName,password,userid,sex,telephone) value(?,?,?,?,?)";
		int jdbc_update = DButils.jdbc_update(sql, name, pwd, "0",sex,tel);
		return jdbc_update;
	}

(三)用户模块的实现

在这里插入图片描述

1.全部图书

在这里插入图片描述

  • 具体实现方法就是对于book表进行查询,利用SQL语句String sql = “select * from t_book,t_booktype where t_book.bookTypeId=t_booktype.id and isflag=0”;将表中需要的字段取出并且保存在集合List当中并且依次输出。
   public void fillTable() {
		DefaultTableModel dtm = (DefaultTableModel) table.getModel();
		dtm.setRowCount(0);// 设置成0行
		// 查询出书籍
		List<BooKAndBookType> b = userDao.listBook2();
		System.out.println(b);
		for (BooKAndBookType book2 : b) {
			Vector v = new Vector<>();
			v.add(book2.getId());
			v.add(book2.getBookName());
			v.add(book2.getBookTypeName());
			v.add(book2.getAuthor());
			v.add(book2.getPrice());
			dtm.addRow(v);
		}
}

2.搜索图书

在这里插入图片描述
在这里插入图片描述

上述功能的具体是实现如下:

//关键字查询的实现
String selectBook = this.selectBookTxt.getText();
	   //1.利用函数SelectBookClass(selectBook),查询是否存在与输入文字相关的t_book.booName
		List<BooKAndBookType> b =userDao.SelectBookClass(selectBook);
String sql = "select * from t_book where t_book.bookName like'%"+selectBook+"%' ";
//同时将信息存入集合当中
        while (rs.next()) {
				BooKAndBookType book = new BooKAndBookType(Bookid, bookName, author, price, bookDesc);
				list.add(book);
			}
//加入购物车按钮触发的事件处理
    protected void BookYJActionPerformed(ActionEvent e) {
			int i = userDao.borrowBook(bookid);
			if (i > 0) {
				List<String> reader = LoginConfig.reader();
				String name = reader.get(0);
				User u = userDao.selectUname(name);
				int id = u.getId();
     //将对应的图书存入borrow表当中
        int j = userDao.insertBorrow(id, bookid);
  String sql = "insert into t_borrow(userid,bookid) value(?,?)";
				if (j > 0) {
					JOptionPane.showMessageDialog(null, "加入购物车成功!");
					fillTable();
					reset();
	}

3.我的购物车、我的订单

在这里插入图片描述
在这里插入图片描述

具体实现如下:

//取出用户的“用户名”的信息,查找出对应的borrow表中的图书信息
    List<String> reader = LoginConfig.reader();
		String uname = reader.get(0);
		User u = userDao.selectUname(uname);
		List<BookAndBorrow> b = userDao.listBook(u.getId());

//同样的订单查看,也是根据获取用户名,对于下单记录进行查找
   List<BookAndBorrow> b = userDao.listBookHistory(userid);
		for (BookAndBorrow book2 : b) {
			Vector v = new Vector<>();
			v.add(dtm.getRowCount() + 1);
			v.add(book2.getBookName());
			v.add(book2.getAuthor());
			v.add(book2.getPrice());
			//v.add(book2.getBtime().toString());
			v.add(book2.getRtime().toString());
			dtm.addRow(v);
		}

(四)管理员登录模块的实现

1.图书类别添加、图书类别维护

在这里插入图片描述
在这里插入图片描述

2.图书添加、图书修改

在这里插入图片描述
在这里插入图片描述

上述四个功能的实现原理基本相似,这里以图书修改功能的具体实现作出说明:

//要求根据搜索框的内容进行搜索,然后显示对应的全部信息
    protected void SelectBookActionPerformed(ActionEvent e) {
		String bookName = this.bookName.getText();
		String author = this.author.getText();
		BookType booktype = (BookType) this.bookTypeName.getSelectedItem();
		String bookTypeName2 = booktype.getBookTypeName();
		fillTable(bookName, author, bookTypeName2);
	}
//信息修改,根据文本框的不同属性进行信息的修改
    protected void updateBookActionPerformed(ActionEvent e) {
		String id = this.bookId.getText();
		String bookName = this.bookName2.getText();
		String author = this.author2.getText();
		String price = this.price.getText();
		String bookDesc = this.bookDesc.getText();
		// 拿单选按钮
		String sex = "";
		if (nan.isSelected()) {
			sex = "男";
		} else {
			sex = "女";
		}
		// 下拉框的拿值
		BookType b = (BookType) bookTypeNameJcb.getSelectedItem();
		int bookTypeId = b.getId();
		Book book = new Book(Integer.parseInt(id), bookName, author, Float.parseFloat(price), bookDesc, sex,
				bookTypeId);
		int i = adminDao.updateBook(book);
		if (i > 0) {
			JOptionPane.showMessageDialog(null, "修改成功");
			reset();
			fillTable("", "", "");// 更新表格
		} else {
			JOptionPane.showMessageDialog(null, "修改失败");
			reset();
		}

//删除图书全部信息
 public int deleteBook(int id) {
		String sql = "delete from t_book where bookTypeid=?";
		return DButils.jdbc_update(sql, id);
	}

3.全部订单

在这里插入图片描述

具体实现与普通用户查看我的订单的功能相类似,不同之处只是只是管理员拥有对于全部下单表的查看权限。

public void fillTable() {
		DefaultTableModel dtm = (DefaultTableModel) table.getModel();
		dtm.setRowCount(0);// 设置成0行.
		// 查询出书籍
		List<BookAndBorrow> b = userDao.AllBookHistory();
		for (BookAndBorrow book2 : b) {
			Vector v = new Vector<>();
			v.add(book2.getUserName());
			v.add(book2.getBookName());
			v.add(book2.getAuthor());
			v.add(book2.getPrice());
			v.add(book2.getRtime().toString());
			dtm.addRow(v);
		}

4.店员信息管理

在这里插入图片描述

(五)通用功能

1.修改密码

在这里插入图片描述

具体代码实现如下:

//首先取出用户的用户名,密码等信息,放在List集合当中
List<String> reader = LoginConfig.reader();
  String oldPwd = reader.get(1);
		if (oldPwd.equals(pwd)) {// 原密码相同
			if (Newpwd.equals(Newpwd2)) {
				int i = userDao.updatePwd(Newpwd, name);
				if (i > 0) {
					JOptionPane.showMessageDialog(null, "修改成功");
					reset();
				}
			} else {
				JOptionPane.showMessageDialog(null, "两次密码不一致");
				reset();
			}
		} else {// 原密码不一致
			JOptionPane.showMessageDialog(null, "与原密码不相同");
			reset();

2.用户退出

在这里插入图片描述

比较容易实现,如下:

public void actionPerformed(ActionEvent e) {
				// 是 0 否 1
				int x = JOptionPane.showConfirmDialog(null, "是否退出系统");
				if (x == 0) {// 退出
					dispose();
					LoginConfig.clean();
				}
			}

需要完整代码看下面哦~欢迎留言

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/289535.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

【React】01-React 入门到放弃系列

01-React 入门 背景入门学生成绩录入的表单 小结 背景 由于捣鼓一些项目需要用到React&#xff0c;找了一些文档入门实践了一番。本篇文章以一个学生成绩录入的表单为例子&#xff0c;记录React 入门的一些基础操作。 入门 该操作的前提是本地安装了NodeJS环境。根据官网给的…

Docker入门教程(详解)

Docker容器化 一 入门 1. 引言 &#xff08;1&#xff09;单机部署 场景&#xff1a; 将多个应用部署一台服务器上。 问题 每个应用软件&#xff0c;都会消耗物理资源&#xff0c;共用计算机资源&#xff0c;彼此之间会形成竞争关系。 &#xff08;2&#xff09;多机部署 …

PHP反序列化漏洞利用及修复,示例代码讲解

您提到的PHP反序列化漏洞是一个重要的网络安全问题。在我的网络安全工程师的角色下&#xff0c;我可以提供关于此问题的深入分析。 PHP反序列化漏洞通常发生在当不可信的数据被反序列化时。序列化是将数据结构或对象状态转换为可存储或可传输的格式的过程&#xff0c;而反序列…

Springcloud 微服务实战笔记 Ribbon

使用 Configurationpublic class CustomConfiguration {BeanLoadBalanced // 开启负载均衡能力public RestTemplate restTemplate() {return new RestTemplate();}}可看到使用Ribbon&#xff0c;非常简单&#xff0c;只需将LoadBalanced注解加在RestTemplate的Bean上&#xff0…

AIGC时代-GPT-4和DALL·E 3的结合

在当今这个快速发展的数字时代&#xff0c;人工智能&#xff08;AI&#xff09;已经成为了我们生活中不可或缺的一部分。从简单的自动化任务到复杂的决策制定&#xff0c;AI的应用范围日益扩大。而在这个广阔的领域中&#xff0c;有两个特别引人注目的名字&#xff1a;GPT-4和D…

C/C++汇编学习(二)——学习使用IDA pro

学习使用IDA Pro是一项很有价值的技能&#xff0c;特别是对于那些对逆向工程和软件安全分析感兴趣的人。以下是一些基本步骤和概念&#xff0c;帮助你熟悉IDA Pro的界面和操作。 1. 熟悉IDA Pro界面和基本操作 主界面布局 IDA Pro的主界面包含多个组件&#xff0c;每个组件都…

pytest-yaml 测试平台-4.生成allure报告,报告反馈企业微信、钉钉、飞书通知

前言 定时任务执行完成后生成可视化allure报告&#xff0c;并把结果发到企业微信&#xff0c;钉钉&#xff0c;飞书通知群里。 生成allure报告 添加定时任务 执行完成后生成allure报告 查看报告详情 报告会显示详细的request 和 response 详细信息 也可以查看log日志 …

Vue3-35-路由-路由守卫的简单认识

什么是路由守卫 路由守卫&#xff0c;就是在 路由跳转 的过程中&#xff0c; 可以进行一些拦截&#xff0c;做一些逻辑判断&#xff0c; 控制该路由是否可以正常跳转的函数。常用的路由守卫有三个 &#xff1a; beforeEach() : 前置守卫&#xff0c;在路由 跳转前 就会被拦截&…

kube-promethues配置钉钉告警

kube-promethues配置钉钉告警 前置&#xff1a;k8s部署kube-promethues 一.配置钉钉机器人 打开钉钉的智能群助手&#xff0c;点击添加机器人 选择自定义机器人 勾选加签&#xff0c;复制后保存 复制webhook地址后点击保存 二.编写dingtalk的yaml部署文件 vi dingta…

74HC595驱动数码管程序

数码管的驱动分静态扫描和动态扫描两种&#xff0c;使用最多的是动态扫描&#xff0c;优点是使用较少的MCU的IO口就能驱动较多位数的数码管。数码管动态扫描驱动电路很多&#xff0c;其中最常见的是74HC164驱动数码管&#xff0c;这种电路一般用三极管作位选信号&#xff0c;用…

pytest conftest通过fixture实现变量共享

conftest.py scope"module" 只对当前执行的python文件 作用 pytest.fixture(scope"module") def global_variable():my_dict {}yield my_dict test_case7.py import pytestlist1 []def test_case001(global_variable):data1 123global_variable.u…

人工智能如何重塑金融服务业

在体验优先的世界中识别金融服务业中的AI使用场景 人工智能&#xff08;AI&#xff09;作为主要行业的大型组织的重要业务驱动力&#xff0c;持续受到关注。众所周知&#xff0c;传统金融服务业在采用新技术方面相对滞后&#xff0c;一些组织使用的还是上世纪50年代和60年代发…

华为云Sys-default、Sys-WebServer和Sys-FullAccess安全组配置规则

华为云服务器默认安全组可选Sys-default、Sys-WebServer或Sys-FullAccess。default是默认安全组规则&#xff0c;只开放了22和3389端口&#xff1b;Sys-WebServer适用于Web网站开发场景&#xff0c;开放了80和443端口&#xff1b;Sys-FullAccess开放了全部端口。阿腾云atengyun…

快速搭建知识付费小程序,3分钟即可开启知识变现之旅

产品服务 线上线下课程传播 线上线下活动管理 项目撮合交易 找商机找合作 一对一线下交流 企业文化宣传 企业产品销售 更多服务 实时行业资讯 动态学习交流 分销代理推广 独立知识店铺 覆盖全行业 个人IP打造 独立小程序 私域运营解决方案 公域引流 营销转化 …

使用jieba库进行中文分词和去除停用词

jieba.lcut jieba.lcut()和jieba.lcut_for_search()是jieba库中的两个分词函数&#xff0c;它们的功能和参数略有不同。 jieba.lcut()方法接受三个参数&#xff1a;需要分词的字符串&#xff0c;是否使用全模式&#xff08;默认为False&#xff09;以及是否使用HMM模型&…

unity学习笔记----游戏练习04

一、开发阳光生产功能 向日葵的生产过程需要动画和时间 1.生产动画 选中Sunflower&#xff0c;然后选中窗口再选中 创建新的剪辑开始制作动画&#xff0c;向日葵生产动画的过程是一个从暗到亮然后持续一段时间再到暗的过程。因此只需要在对应的时间改变颜色即可。 为了保证是…

Weblogic安全漫谈(二)

前言 继本系列上篇从CVE-2015-4852入手了解T3协议的构造后&#xff0c;本篇继续分析开启T3反序列化魔盒后的修复与绕过。 Weblogic对于10.3.6推出了p20780171和p22248372用于修复CVE-2015-4852&#xff0c;在补丁详情中又提示了p21984589是它的超集&#xff0c;所以可以直接装…

项目框架构建之2:主机程序的搭建

本文是“项目框架构建”系列之2&#xff0c;要编写一个项目框架&#xff0c;就好像一个操作系统似的&#xff0c;得有一些东西可以搭载项目结构&#xff0c;而.net core的主机框架正是可以实现这一目的的好帮手。 简单介绍一下主机程序&#xff0c;我们生产系统中往往需要构建…

清风数学建模笔记-聚类算法

K-maens算法&#xff1a; 算法的原理&#xff1a; 在论文中时&#xff0c;可以把一些可以流程化的算法的流程图加上去 优点&#xff1a; 缺点&#xff1a; 点容易受异常值的影响&#xff0c;且受影响较大 k-means算法&#xff1a; 使用SPSS进行聚类分析&#xff1a; S默认使用…

【JUC】Synchronized及JVM底层原理

Synchronized使用方式 Synchronized有三种应用方式 作用于实例方法&#xff0c;当前示实例加锁进入同步代码前要获得当前实例的锁&#xff0c;即synchronized普通同步方法&#xff0c;调用指令将会检查方法的ACC_SYNCHRONIZED访问标志是否被设置。 如果设置了&#xff0c;执行…