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

news2024/12/26 0:54:10

网上书店信息管理系统

  • 一、需求分析
    • (一)设计系统的意义以及用途
    • (二)实现的功能
      • 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();
				}
			}

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

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

互联网加竞赛 Yolov安全帽佩戴检测 危险区域进入检测 - 深度学习 opencv

1 前言 &#x1f525; 优质竞赛项目系列&#xff0c;今天要分享的是 &#x1f6a9; Yolov安全帽佩戴检测 危险区域进入检测 &#x1f947;学长这里给一个题目综合评分(每项满分5分) 难度系数&#xff1a;3分工作量&#xff1a;3分创新点&#xff1a;4分 该项目较为新颖&am…

ISCTF 2023 miscweb wp

web 圣杯战争!!! 题目: PHP <?php highlight_file(__FILE__); error_reporting(0); class artifact{ public $excalibuer; public $arrow; public function __toString(){ echo "为Saber选择了对的武器!<br>"; return $this…

阿里云性能测评ESSD Entry云盘、SSD云盘、ESSD和高效云盘

阿里云服务器系统盘或数据盘支持多种云盘类型&#xff0c;如高效云盘、ESSD Entry云盘、SSD云盘、ESSD云盘、ESSD PL-X云盘及ESSD AutoPL云盘等&#xff0c;阿里云百科aliyunbaike.com详细介绍不同云盘说明及单盘容量、最大/最小IOPS、最大/最小吞吐量、单路随机写平均时延等性…

Python中的垃圾回收机制是什么

一、写在前面&#xff1a; 我们都知道Python一种面向对象的脚本语言&#xff0c;对象是Python中非常重要的一个概念。在Python中数字是对象&#xff0c;字符串是对象&#xff0c;任何事物都是对象&#xff0c;而它们的核心就是一个结构体--PyObject。 typedef struct_object{i…

data.TensorDataset解析

data.TensorDataset 是 PyTorch 中的一个类&#xff0c;用于创建一个包含多个张量的数据集。这个类的主要作用是将输入的张量组合成一个数据集&#xff0c;使得在训练过程中可以方便地进行数据加载和迭代。 具体来说&#xff0c;TensorDataset 接受一系列的张量作为输入参数&a…

正负样本分配策略simOTA

simOTA是YOLOX中提出的 正负样本分配策略&#xff08;OTA, SimOTA&#xff0c;TAS&#xff09; OTA源于2021年cvpr的论文&#xff0c;使训练和验证的标签有着更好的对应关系。 yolov5没有用到&#xff0c;只有一种loss&#xff1a; from utils.loss import ComputeLoss comput…

图像识别快速实现

文本的跑通了&#xff0c;接下来玩玩图片场景 1. 引入模型 再另起类test_qdrant_img.py&#xff0c;转化图片用到的模型和文本不太一样&#xff0c;我们这里使用ResNet-50模型 import unittest from qdrant_client.http.models import Distance, VectorParams from qdrant_cl…

im6ull学习总结(三-2)文字显示中文字符

承接上篇文章 中文字符的点阵显示 使用点阵字库时&#xff0c;中文字符的显示原理跟 ASCII 字符是一样的。要注意的地方在于中文的编码&#xff1a;在 C 源文件中它的编码方式是 GB2312 还是 UTF-8&#xff1f;编译出的可执行程序&#xff0c;其中的汉字编码方式是 GB2312 还…

Java 第23章 反射 本章作业

文章目录 反射修改私有成员变量反射和File 反射修改私有成员变量 public class Homework01 {public static void main(String[] args) throws IllegalAccessException, InstantiationException, NoSuchFieldException, NoSuchMethodException, InvocationTargetException {/***…

c盘扩容时,d盘无法删除卷问题

C盘扩容时&#xff0c;磁盘管理中D盘右键无法删除卷的原因 首先&#xff0c;D盘下文件夹为空&#xff0c;但是显示可用空间不是100%&#xff0c;经过排查&#xff0c;发现是虚拟内存设置在了D盘导致无法删除卷&#xff0c;这里只需要将虚拟内存放到其他盘&#xff0c;如E盘即可…

bootstrap5实现的在线商城网站Parlo

一、需求分析 在线商城网站是指基于互联网技术搭建的电子商务平台&#xff0c;通过网站提供商品和服务的展示、销售和交易功能。它的主要作用包括以下几个方面&#xff1a; 商品展示和销售&#xff1a;在线商城网站是商家展示商品的平台&#xff0c;可以通过图片、文字、视频等…

阿里巴巴开源异构数据源离线/全量/增量同步工具 - DataX

&#x1f604; 19年之后由于某些原因断更了三年&#xff0c;23年重新扬帆起航&#xff0c;推出更多优质博文&#xff0c;希望大家多多支持&#xff5e; &#x1f337; 古之立大事者&#xff0c;不惟有超世之才&#xff0c;亦必有坚忍不拔之志 &#x1f390; 个人CSND主页——Mi…

web component - 使用HTML Templates和Shadow DOM构建现代UI组件

Web Component是一种用于构建可重用的UI组件的技术。它使用标准化的浏览器API&#xff0c;包括Custom Elements、Shadow DOM和HTML Templates来实现组件化开发方式。这些API都是现代浏览器原生支持的&#xff0c;因此不需要引入第三方库或框架即可使用。 在这篇博客中&#xf…

如何学习TS?

文章目录 一. 8种内置基础类型.ts二. void、never、any、unknown类型void类型never类型any类型unknown类型总结&#xff1a;void和any在项目中是比较常见的&#xff0c;never和unknown不常用。 三. 数组和函数类型定义.ts四. 元组与交叉类型使用元组数组一般有同类型的值组成&a…

页面间动画之放大缩小视图

目录 1、Exchange类型的共享元素转场 2、Static类型的共享元素转场 3、场景示例 在不同页面间&#xff0c;有使用相同的元素&#xff08;例如同一幅图&#xff09;的场景&#xff0c;可以使用共享元素转场动画衔接。为了突出不同页面间相同元素的关联性&#xff0c;可为它们…

管理文件传输的工具CopyQueue mac功能特点

CopyQueue for mac是用于管理文件传输的工具&#xff0c;可以有效地复制多个文件&#xff0c;并且比OS X的速度更快&#xff0c;暂停和恢复文件传输&#xff0c;日程任务和更多&#xff0c;使用和管理起来都非常的简单方便。如果你要复制很多文件&#xff0c;CopyQueue更快更高…

pytest conftest定义一个fixtrue获取测试环境地址

方便全局切换地址 pytest.fixture() def config():data {测试环境: {A环境: 127.0.0.1,B环境: 127.0.0.2,C环境: 127.0.0.3,D环境: 127.0.0.4},}return data.get(测试环境, {}).get(A环境)import pytestdef test_case001(config):url http://str(config):8080/api/user/logi…

从零开始了解大数据(七):总结

系列文章目录 从零开始了解大数据(一)&#xff1a;数据分析入门篇-CSDN博客 从零开始了解大数据(二)&#xff1a;Hadoop篇-CSDN博客 从零开始了解大数据(三)&#xff1a;HDFS分布式文件系统篇-CSDN博客 从零开始了解大数据(四)&#xff1a;MapReduce篇-CSDN博客 从零开始了解大…

基于rk3568 Android H265推流SRS低延迟网页播放方案

在音视频领域&#xff0c;融合推流&#xff0c;低码流&#xff0c;低延迟&#xff0c;浏览器H5化是一个降低成本&#xff0c;提升用户体验的重要手段。同时适配现有直播的生态也是一个必要条件。 在满足上述要求的情况下&#xff0c;我做了以下实践&#xff0c;取得了良好的效果…

每天五分钟计算机视觉:揭秘迁移学习

本文重点 随着人工智能的迅速发展,深度学习已经成为了许多领域的关键技术。然而,深度学习模型的训练需要大量的标注数据,这在很多情况下是不现实的。迁移学习作为一种有效的方法,可以在已有的数据和模型上进行训练,然后将其应用于新的任务。这种方法大大降低了对新任务的…