这是本人经过Spring框架的学习,根据其他人项目的参考与改进,由此实现了一个较为基本的图书管理系统,也算是自己的一个学习经历吧,好了废话不多说,下面进入正题。


文章目录

  • 一、项目概述
    • 功能性需求描述
    • 设计概述
    • 实现功能
    • 功能展示
      • 登录
      • 管理员身份操作
      • 用户(读者)身份操作
      • 用户\管理员密码修改
  • 二、系统详细设计
    • 1、大框架的构建
    • 2、项目前期的准备工作
  • 三、各个功能的详细实现
    • 1、创建spring配置文件
    • 2、配置mybatis
    • 3、实现登录业务
    • 4、管理员业务实现
      • (1)相关业务的实现
      • (2)相关业务的数据操作
      • (3)mybatis数据库操作
      • (4)相关业务的交互操作
    • 5、用户(读者)业务实现
      • (1)相关业务的实现
      • (2)相关业务的数据操作
      • (3)mybatis数据库操作
      • (4)相关业务的交互操作


一、项目概述

功能性需求描述

图书(馆)管理系统是典型的信息管理系统,其开发主要包括以下部分:后台数据库的建立、维护,前端应用程序的开发。
对于前者,要建立起数据一致性和完整性强、数据安全性较好的数据库。而对于后者来说,需要的是应用程序功能完备,易使用等特点。

设计概述

1、界面设计简洁,友好(易于人机交互)
2、信息分类清晰,准确(全部图书,图书借阅情况,用户信息情况)
3、提高较好的查询能力(支持模糊查询)
4、支持图书馆工作人员对图书借阅、归还等基本的功能

实现功能

1、管理员对图书进行管理
2、管理员对借阅者(读者)信息的管理
3、管理员对借阅者借阅书本的归还管理
4、管理员登入管理
5、用户借阅查询,个人信息查询,借阅信息查询等
6、管理员/用户的密码更改

功能展示

登录

登陆界面
在这里插入图片描述

管理员身份操作

以管理员身份登录后的首页,在这里可以进行图书的相关操作
在这里插入图片描述
管理员对读者进行管理
在这里插入图片描述
管理员查看所有用户书目借还记录
在这里插入图片描述

用户(读者)身份操作

以用户(读者)身份登陆后的首页,在这里可以进行图书的相关操作
在这里插入图片描述
用户(读者)修改个人账号信息
在这里插入图片描述
用户(读者)查看个人的借还记录
在这里插入图片描述

用户\管理员密码修改

在这里插入图片描述


二、系统详细设计

1、大框架的构建

要写好一个项目,首先最重要的就是构建项目的框架。有了框架,写一个项目就不会手忙脚乱,就会变得有计划,有规律,效率才能提高。
根据SpringMVC的三层架构,我们可以将项目分为这三大部分:

  • Model(模型)是应用程序中用于处理应用程序数据逻辑的部分,通常模型对象负责在数据库中存取数据。
  • View(视图)是应用程序中处理数据显示的部分,通常视图是依据模型数据创建的。
  • Controller(控制器)是应用程序中处理用户交互的部分,通常控制器负责从视图读取数据,控制用户输入,并向模型发送数据。

在此三大模型之上,可以再细分:

  • dao层:这一层是数据持久层,正所谓数据持久化,就要和数据库打交道,所以这一层,需要做的便是有关于数据库的操作,例如图书的增删改查之类的。
  • controller层:这一层是控制层,控制前端界面-后台的数据交互与逻辑操作,例如从页面读取数据,发送数据之类的操作。(具体的业务)
  • entity层:这一层便是实体层,放置一个个实体,及其相应的set、get方法。如果想要对数据库进行一些操作(比如说读取)的话,就要先写entity层。
  • service层:这一层是服务层,负责模块间的数据交互与逻辑操作(模块间的业务)

做好大框架的构造后,下面就可以进行项目的准备工作了!


2、项目前期的准备工作

项目的前期准备工作有:

相关技术名称
前端jsp、css、html、JQuery、BootStrap
后端SpringMVC、Mybatis
数据库Mysql
开发环境IDEA

预期实现的功能有:

角色功能
普通用户(借阅者)图书查询(查看全部图书),个人信息(查看或修改个人信息),借还情况,密码修改
管理员图书管理(查看全部图书,增加图书),读者管理(查看全部读者,增加读者),借还管理,修改密码
未登录人员登录系统,进入管理员或者普通用户界面

项目文件框架如下:

  1. book:里面有controller,dao,entity,service
  2. resources:里面放xml等配置文件
  3. webapp:里面放网页有关的东西,static(里面放静态加载的文件,css,images,js),WEB-INF(jsp,web.xml文件等)
  4. pom.xml文件:通过maven远程仓库,引入相关依赖包
  5. mybatis映射文件:通过mybatis映射找到相应的sql语句

项目结构如图所示:
项目结构
项目前期的准备工作基本上就做完了,下面进行项目中各逻辑方法的实现


三、各个功能的详细实现

此篇章较多,各位客官可以慢慢看,也可以选择最喜欢的部分看,话不多说,开始项目!

1、创建spring配置文件

由于项目基于Spring框架,需要用到spring配置文件来进行bean类的注入

<!-- 扫描类包,将标注Spring注解的类自动转化为Bean,同时完成Bean的注入  --><context:component-scan base-package="com.book.dao"/><context:component-scan base-package="com.book.service"/><!--  定义一个数据库连接池的数据源 --><bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource"destroy-method="close"p:driverClassName="com.mysql.cj.jdbc.Driver"p:url="jdbc:mysql://localhost:3306/spring_book?useUnicode=true&amp;characterEncoding=UTF8"p:username="root"p:password="123456"/><!-- JDBC模板Bean --><bean id="jdbcTemplate" class="org.springframework.jdbc.core.JdbcTemplate"p:dataSource-ref="dataSource"/>

2、配置mybatis

db.properties:

#mysql jdbc
spring.datasource.driverClassName=com.mysql.jdbc.Driver
spring.datasource.url=jdbc:mysql://localhost:3306/library?useUnicode=true&characterEncoding=UTF-8&serverTimezone=GMT%2B8
spring.datasource.username=root
spring.datasource.password=123456

pom.xml

 <!--mybatis-spring适配器 --><dependency><groupId>org.mybatis</groupId><artifactId>mybatis-spring</artifactId><version>1.3.0</version></dependency><!-- mybatis ORM框架 --><dependency><groupId>org.mybatis</groupId><artifactId>mybatis</artifactId><version>3.4.1</version></dependency><!--jdbc连接池--><dependency><groupId>com.alibaba</groupId><artifactId>druid</artifactId><version>1.1.18</version></dependency><!--分页--><dependency><groupId>com.github.pagehelper</groupId><artifactId>pagehelper</artifactId><version>5.2.0</version></dependency>

3、实现登录业务

先创建管理员实体类Admin和普通借阅用户实体类ReadCard
实现getter和setter方法

private long admin_id;private String password;private String username;public long getAdminId() {return admin_id;}public void setAdminId(long admin_id) {this.admin_id = admin_id;}public String getPassword() {return password;}public void setPassword(String password) {this.password = password;}public String getUsername() {return username;}public void setUsername(String username) {this.username = username;}

ReadCard的setter与getter此处省略,之后的也一样,只写对应的实体属性

	private long reader_id;private String username;private String password;

开始写Dao数据访问层接口和实现类:
接口:

public interface AdminDao {int getMatchCount(final long admin_id, final String password);int resetPassword(final long admin_id, final String password);String getPassword(final long admin_id);String getUsername(final long admin_id);
}
public interface ReaderCardDao {int getIdMatchCount(final long reader_id, final String password);ReaderCard findReaderByReaderId(final long reader_id);int resetPassword(final long reader_id, final String newPassword);int addReaderCard(final ReaderInfo readerInfo, final String password);String getPassword(final long reader_id);int deleteReaderCard(final long reader_id);
}

实现类:以AdminDao接口AdminDaoImpl为例

@Repository
public class AdminDaoImpl implements AdminDao {private final static String NAMESPACE = "com.book.dao.impl.AdminDaoImpl.";@Resourceprivate SqlSessionTemplate sqlSessionTemplate;@Overridepublic int getMatchCount(final long admin_id, final String password) {Map<String, Object> paramMap = new HashMap<>();paramMap.put("admin_id", admin_id);paramMap.put("password", password);return sqlSessionTemplate.selectOne(NAMESPACE + "getMatchCount", paramMap);}@Overridepublic int resetPassword(final long admin_id, final String password) {Map<String, Object> paramMap = new HashMap<>();paramMap.put("admin_id", admin_id);paramMap.put("password", password);return sqlSessionTemplate.update(NAMESPACE + "resetPassword", paramMap);}@Overridepublic String getPassword(final long admin_id) {return sqlSessionTemplate.selectOne(NAMESPACE + "getPassword", admin_id);}@Overridepublic String getUsername(final long admin_id) {return sqlSessionTemplate.selectOne(NAMESPACE + "getUsername", admin_id);}}

开始写Service服务层接口和实现类:
LoginService定义方法:

	boolean hasMatchReader(long readerId,String password);String getAdminUsername(long adminId);ReaderCard findReaderCardByReaderId(long readerId);boolean hasMatchAdmin(long adminId,String password);boolean adminRePassword(long adminId, String newPassword);String getAdminPassword(long adminId);boolean readerRePassword(long readerId, String newPassword);String getReaderPassword(long readerId);

对应的实现类写逻辑方法
注入数据交互,使得通过数据交互层对数据库进行访问,实现登录功能

@Service
public class LoginServiceImpl implements LoginService{@Autowiredprivate ReaderCardDaoImpl readerCardDaoImpl;@Autowiredprivate AdminDaoImpl adminDaoImpl;@Overridepublic boolean hasMatchReader(long readerId, String password){return  readerCardDaoImpl.getIdMatchCount(readerId, password)>0;}@Overridepublic String getAdminUsername(long adminId) {return adminDaoImpl.getUsername(adminId);}@Overridepublic ReaderCard findReaderCardByReaderId(long readerId){return readerCardDaoImpl.findReaderByReaderId(readerId);}@Overridepublic boolean hasMatchAdmin(long adminId, String password){return adminDaoImpl.getMatchCount(adminId, password) == 1;}@Overridepublic boolean adminRePassword(long adminId, String newPassword){return adminDaoImpl.resetPassword(adminId,newPassword)>0;}@Overridepublic String getAdminPassword(long adminId){return adminDaoImpl.getPassword(adminId);}@Overridepublic boolean readerRePassword(long readerId, String newPassword) {return readerCardDaoImpl.resetPassword(readerId, newPassword) > 0;}@Overridepublic String getReaderPassword(long readerId) {return readerCardDaoImpl.getPassword(readerId);}}

4、管理员业务实现

(1)相关业务的实现

与登陆有关的业务

@Autowiredprivate ReaderCardDaoImpl readerCardDaoImpl;@Autowiredprivate AdminDaoImpl adminDaoImpl;@Overridepublic boolean hasMatchReader(long readerId, String password){return  readerCardDaoImpl.getIdMatchCount(readerId, password)>0;}@Overridepublic String getAdminUsername(long adminId) {return adminDaoImpl.getUsername(adminId);}@Overridepublic ReaderCard findReaderCardByReaderId(long readerId){return readerCardDaoImpl.findReaderByReaderId(readerId);}@Overridepublic boolean hasMatchAdmin(long adminId, String password){return adminDaoImpl.getMatchCount(adminId, password) == 1;}@Overridepublic boolean adminRePassword(long adminId, String newPassword){return adminDaoImpl.resetPassword(adminId,newPassword)>0;}@Overridepublic String getAdminPassword(long adminId){return adminDaoImpl.getPassword(adminId);}@Overridepublic boolean readerRePassword(long readerId, String newPassword) {return readerCardDaoImpl.resetPassword(readerId, newPassword) > 0;}@Overridepublic String getReaderPassword(long readerId) {return readerCardDaoImpl.getPassword(readerId);}

与图书相关的业务

@Autowiredprivate BookDaoImpl bookDaoImpl;@Overridepublic PageInfo<Book> queryBook(String searchWord,int pageNum,int pageSize) {//分页PageHelper.startPage(pageNum,pageSize);ArrayList<Book> list = bookDaoImpl.queryBook(searchWord);PageInfo pageInfo = new PageInfo(list);return pageInfo;}@Overridepublic PageInfo<Book> getAllBooks(int pageNum,int pageSize) {//分页PageHelper.startPage(pageNum,pageSize);ArrayList<Book> list = bookDaoImpl.getAllBooks();PageInfo pageInfo = new PageInfo(list);return pageInfo;}@Overridepublic boolean matchBook(String searchWord) {return bookDaoImpl.matchBook(searchWord) > 0;}@Overridepublic boolean addBook(Book book) {return bookDaoImpl.addBook(book) > 0;}@Overridepublic Book getBook(Long bookId) {return bookDaoImpl.getBook(bookId);}@Overridepublic boolean editBook(Book book) {return bookDaoImpl.editBook(book) > 0;}@Overridepublic boolean deleteBook(Long bookId) {return bookDaoImpl.deleteBook(bookId) > 0;}@Overridepublic ArrayList<Type> getAllTypes() {return bookDaoImpl.getAllTypes();}//通过book_id找对应类型  进而找出book_id 对应的 类号和分类名@Overridepublic Type getTypesById(Long bookId) {return bookDaoImpl.getTypesById(bookId);}

(2)相关业务的数据操作

管理员登陆

private final static String NAMESPACE = "com.book.dao.impl.AdminDaoImpl.";@Resourceprivate SqlSessionTemplate sqlSessionTemplate;@Overridepublic int getMatchCount(final long admin_id, final String password) {Map<String, Object> paramMap = new HashMap<>();paramMap.put("admin_id", admin_id);paramMap.put("password", password);return sqlSessionTemplate.selectOne(NAMESPACE + "getMatchCount", paramMap);}@Overridepublic int resetPassword(final long admin_id, final String password) {Map<String, Object> paramMap = new HashMap<>();paramMap.put("admin_id", admin_id);paramMap.put("password", password);return sqlSessionTemplate.update(NAMESPACE + "resetPassword", paramMap);}@Overridepublic String getPassword(final long admin_id) {return sqlSessionTemplate.selectOne(NAMESPACE + "getPassword", admin_id);}@Overridepublic String getUsername(final long admin_id) {return sqlSessionTemplate.selectOne(NAMESPACE + "getUsername", admin_id);}

图书管理

private final static String NAMESPACE = "com.book.dao.impl.BookDaoImpl.";@Resourceprivate SqlSessionTemplate sqlSessionTemplate;@Overridepublic int matchBook(final String searchWord) {String search = "%" + searchWord + "%";return sqlSessionTemplate.selectOne(NAMESPACE + "matchBook", search);}@Overridepublic ArrayList<Book> queryBook(final String searchWord) {String search = "%" + searchWord + "%";List<Book> result = sqlSessionTemplate.selectList(NAMESPACE + "queryBook", search);return (ArrayList<Book>) result;}@Overridepublic ArrayList<Book> getAllBooks() {List<Book> result = sqlSessionTemplate.selectList(NAMESPACE + "getAllBooks");return (ArrayList<Book>) result;}@Overridepublic int addBook(final Book book) {return sqlSessionTemplate.insert(NAMESPACE + "addBook", book);}@Overridepublic Book getBook(final long bookId) {return sqlSessionTemplate.selectOne(NAMESPACE + "getBook", bookId);}@Overridepublic int editBook(final Book book) {return sqlSessionTemplate.update(NAMESPACE + "editBook", book);}@Overridepublic int deleteBook(final long bookId) {return sqlSessionTemplate.delete(NAMESPACE + "deleteBook", bookId);}@Overridepublic ArrayList<Type> getAllTypes() {List<Type> result = sqlSessionTemplate.selectList(NAMESPACE + "getAllTypes");return (ArrayList<Type>) result;}@Overridepublic Type getTypesById(final long TypeId){return sqlSessionTemplate.selectOne(NAMESPACE + "getTypesById", TypeId);}

(3)mybatis数据库操作

admin.xml

<select id="getMatchCount" resultType="int">select count(*) from adminwhere admin_id = #{admin_id}and password = #{password}</select><update id="resetPassword">update admin set password = #{password}where admin_id = #{admin_id}</update><select id="getPassword" resultType="String" parameterType="long">select password from admin where admin_id = #{admin_id}</select><select id="getUsername" resultType="String" parameterType="long">select username from admin where admin_id = #{admin_id}</select>

book.xml

<select id="getAllTypes" resultType="com.book.entity.Type">select * from class_info</select><select id="getTypesById" resultType="com.book.entity.Type" parameterType="long">select c.class_id,c.class_namefrom book_info b inner join class_info c on b.class_id = c.class_id and b.book_id = #{book_id}</select><insert id="addBook" parameterType="com.book.entity.Book">insert into book_info values(null, #{name}, #{author}, #{publish}, #{ISBN},#{introduction}, #{language}, #{price}, #{pub_date}, #{picture},#{class_id}, #{number})</insert><update id="editBook" parameterType="com.book.entity.Book">update book_info set name=#{name}, author=#{author},publish=#{publish}, ISBN=#{ISBN}, introduction=#{introduction},language=#{language}, price=#{price}, pub_date=#{pub_date},picture=#{picture},class_id=#{class_id}, number=#{number} where book_id=#{book_id}</update><select id="getAllBooks" resultType="com.book.entity.Book">select * from book_info</select><select id="queryBook" resultType="com.book.entity.Book" parameterType="String">select * from book_info where name like #{search}or author like #{search} or introduction like #{search}</select><select id="matchBook" resultType="int" parameterType="String">select count(*) from book_info where name like #{search}or author like #{search} or introduction like #{search}</select><select id="getBook" resultType="com.book.entity.Book" parameterType="long">select * from book_info where book_id = #{book_id}</select><delete id="deleteBook" parameterType="long">delete from book_info where book_id = #{book_id}</delete>

(4)相关业务的交互操作

登录业务的交互操作

//负责处理loginCheck.html请求//请求参数会根据参数名称默认契约自动绑定到相应方法的入参中@RequestMapping(value = "/api/loginCheck", method = RequestMethod.POST)public @ResponseBodyObject loginCheck(HttpServletRequest request) {long id = Long.parseLong(request.getParameter("id"));String passwd = request.getParameter("passwd");boolean isReader = loginServiceImpl.hasMatchReader(id, passwd);boolean isAdmin = loginServiceImpl.hasMatchAdmin(id, passwd);HashMap<String, String> res = new HashMap<>();if (isAdmin) {Admin admin = new Admin();admin.setAdminId(id);admin.setPassword(passwd);String username = loginServiceImpl.getAdminUsername(id);admin.setUsername(username);request.getSession().setAttribute("admin", admin);res.put("stateCode", "1");res.put("msg", "管理员登陆成功!");} else if (isReader) {ReaderCard readerCard = loginServiceImpl.findReaderCardByReaderId(id);request.getSession().setAttribute("readercard", readerCard);res.put("stateCode", "2");res.put("msg", "读者登陆成功!");} else {res.put("stateCode", "0");res.put("msg", "账号或密码错误!");}return res;}@RequestMapping("/admin_main.html")public ModelAndView toAdminMain(HttpServletResponse response) {return new ModelAndView("admin_main");}@RequestMapping("/reader_main.html")public ModelAndView toReaderMain(HttpServletResponse response) {return new ModelAndView("reader_main");}@RequestMapping("/admin_repasswd.html")public ModelAndView reAdminPasswd() {return new ModelAndView("admin_repasswd");}

图书业务的交互操作

@RequestMapping("/querybook.html")public ModelAndView queryBookDo(String searchWord,@RequestParam(required = false,defaultValue = "1")int pageNum,@RequestParam(required = false,defaultValue = "10")int pageSize) {if (bookServiceImpl.matchBook(searchWord)) {PageInfo<Book> pageInfo = bookServiceImpl.queryBook(searchWord,pageNum,pageSize);ModelAndView modelAndView = new ModelAndView("admin_books");modelAndView.addObject("pageInfo", pageInfo);return modelAndView;} else {return new ModelAndView("admin_books", "error", "没有匹配的图书");}}@RequestMapping("/reader_querybook_do.html")public ModelAndView readerQueryBookDo(String searchWord,@RequestParam(required = false,defaultValue = "1")int pageNum,@RequestParam(required = false,defaultValue = "10")int pageSize) {if (bookServiceImpl.matchBook(searchWord)) {PageInfo<Book> pageInfo = bookServiceImpl.queryBook(searchWord,pageNum,pageSize);ModelAndView modelAndView = new ModelAndView("reader_books");modelAndView.addObject("pageInfo", pageInfo);return modelAndView;} else {return new ModelAndView("reader_books", "error", "没有匹配的图书");}}@RequestMapping("/admin_books.html")public ModelAndView adminBooks(@RequestParam(required = false,defaultValue = "1")int pageNum,@RequestParam(required = false,defaultValue = "10")int pageSize) {PageInfo<Book> pageInfo = bookServiceImpl.getAllBooks(pageNum,pageSize);ModelAndView modelAndView = new ModelAndView("admin_books");modelAndView.addObject("pageInfo", pageInfo);return modelAndView;}@RequestMapping("/book_add.html")public ModelAndView addBook() {ArrayList<Type> types = bookServiceImpl.getAllTypes();ModelAndView modelAndView = new ModelAndView("admin_book_add");modelAndView.addObject("types",types);return modelAndView;}

5、用户(读者)业务实现

(1)相关业务的实现

与借阅有关的业务

@Autowiredprivate LendDaoImpl lendDaoImpl;@Overridepublic boolean returnBook(long bookId, long readerId){return lendDaoImpl.returnBookOne(bookId, readerId)>0 && lendDaoImpl.returnBookTwo(bookId)>0;}@Overridepublic boolean lendBook(long bookId, long readerId, String name){return lendDaoImpl.lendBookOne(bookId,readerId,name)>0 && lendDaoImpl.lendBookTwo(bookId)>0;}@Overridepublic PageInfo<Lend> lendList(int pageNum,int pageSize){//分页PageHelper.startPage(pageNum,pageSize);ArrayList<Lend> list = lendDaoImpl.lendList();PageInfo pageInfo = new PageInfo(list);return pageInfo;}@Overridepublic PageInfo<Lend> myLendList(long readerId,int pageNum,int pageSize){//分页PageHelper.startPage(pageNum,pageSize);ArrayList<Lend> list = lendDaoImpl.myLendList(readerId);PageInfo pageInfo = new PageInfo(list);return pageInfo;}@Overridepublic int deleteLend(long serNum) {return lendDaoImpl.deleteLend(serNum);}

与读者有关的业务

@Autowiredprivate ReaderInfoDaoImpl readerInfoDaoImpl;@Overridepublic PageInfo<ReaderInfo> readerInfos(int pageNum,int pageSize) {//分页PageHelper.startPage(pageNum,pageSize);ArrayList<ReaderInfo> list = readerInfoDaoImpl.getAllReaderInfo();PageInfo pageInfo = new PageInfo(list);return pageInfo;}@Overridepublic boolean deleteReaderInfo(long readerId) {return readerInfoDaoImpl.deleteReaderInfo(readerId) > 0;}@Overridepublic ReaderInfo getReaderInfo(long readerId) {return readerInfoDaoImpl.findReaderInfoByReaderId(readerId);}@Overridepublic boolean editReaderInfo(ReaderInfo readerInfo) {return readerInfoDaoImpl.editReaderInfo(readerInfo) > 0;}@Overridepublic boolean editReaderCard(ReaderInfo readerInfo) {return readerInfoDaoImpl.editReaderCard(readerInfo) > 0;}@Overridepublic long addReaderInfo(ReaderInfo readerInfo) {return readerInfoDaoImpl.addReaderInfo(readerInfo);}

(2)相关业务的数据操作

借阅图书

@Resourceprivate SqlSessionTemplate sqlSessionTemplate;private final static String NAMESPACE = "com.book.dao.impl.LendDaoImpl.";@Overridepublic int returnBookOne(final long book_id, long reader_id) {Map<String, Object> map = new HashMap<>();map.put("book_id", book_id);map.put("reader_id", reader_id);return sqlSessionTemplate.update(NAMESPACE + "returnBookOne", map);}@Overridepublic int returnBookTwo(final long book_id) {return sqlSessionTemplate.update(NAMESPACE + "returnBookTwo", book_id);}@Overridepublic int lendBookOne(final long book_id, final long reader_id,final String name) {Map<String, Object> map = new HashMap<>();map.put("book_id", book_id);map.put("reader_id", reader_id);map.put("name",name);return sqlSessionTemplate.insert(NAMESPACE + "lendBookOne", map);}@Overridepublic int lendBookTwo(final long book_id) {return sqlSessionTemplate.update(NAMESPACE + "lendBookTwo", book_id);}@Overridepublic ArrayList<Lend> lendList() {List<Lend> result = sqlSessionTemplate.selectList(NAMESPACE + "lendList");return (ArrayList<Lend>) result;}@Overridepublic ArrayList<Lend> myLendList(final long reader_id) {List<Lend> result = sqlSessionTemplate.selectList(NAMESPACE + "myLendList", reader_id);return (ArrayList<Lend>) result;}@Overridepublic int deleteLend(final long ser_num) {return sqlSessionTemplate.delete(NAMESPACE + "deleteLend", ser_num);}

读者信息管理

private final static String NAMESPACE = "com.book.dao.impl.ReaderInfoDaoImpl.";@Resourceprivate SqlSessionTemplate sqlSessionTemplate;@Overridepublic ArrayList<ReaderInfo> getAllReaderInfo() {List<ReaderInfo> result = sqlSessionTemplate.selectList(NAMESPACE + "getAllReaderInfo");return (ArrayList<ReaderInfo>) result;}@Overridepublic ReaderInfo findReaderInfoByReaderId(final long reader_id) {return sqlSessionTemplate.selectOne(NAMESPACE + "findReaderInfoByReaderId", reader_id);}@Overridepublic int deleteReaderInfo(final long reader_id) {return sqlSessionTemplate.delete(NAMESPACE + "deleteReaderInfo", reader_id);}@Overridepublic int editReaderInfo(final ReaderInfo readerInfo) {return sqlSessionTemplate.update(NAMESPACE + "editReaderInfo", readerInfo);}@Overridepublic int editReaderCard(final ReaderInfo readerInfo) {return sqlSessionTemplate.update(NAMESPACE + "editReaderCard", readerInfo);}@Overridepublic final long addReaderInfo(final ReaderInfo readerInfo) {if (sqlSessionTemplate.insert(NAMESPACE + "addReaderInfo", readerInfo) > 0) {return sqlSessionTemplate.selectOne(NAMESPACE + "getReaderId", readerInfo);} else {return -1;}}

(3)mybatis数据库操作

lend.xml

<update id="returnBookOne">update lend_list set back_date = sysdate() where book_id = #{book_id}and reader_id = #{reader_id} and back_date is null</update><update id="returnBookTwo" parameterType="long">update book_info set number = number + 1 where book_id = #{book_id}</update><insert id="lendBookOne">insert into lend_list values(null , #{book_id} , #{reader_id} , sysdate() , null, #{name})</insert><update id="lendBookTwo" parameterType="long">update book_info set number = number - 1 where book_id = #{book_id}</update><select id="lendList" resultType="com.book.entity.Lend">select * from lend_list</select><select id="myLendList" resultType="com.book.entity.Lend" parameterType="long">select * from lend_list where reader_id = #{reader_id}</select><delete id="deleteLend" parameterType="long">delete from lend_list where ser_num = #{ser_num}</delete>

readerInfo.xml

<select id="getAllReaderInfo" resultType="com.book.entity.ReaderInfo">select * from reader_info</select><select id="findReaderInfoByReaderId" resultType="com.book.entity.ReaderInfo" parameterType="long">select * from reader_info where reader_id = #{reader_id}</select><delete id="deleteReaderInfo" parameterType="long">delete from reader_info where reader_id = #{reader_id}</delete><update id="editReaderInfo" parameterType="com.book.entity.ReaderInfo">update reader_info set name = #{name} , sex = #{sex},birth = #{birth} ,address = #{address} ,phone = #{phone}where reader_id = #{reader_id}</update><update id="editReaderCard" parameterType="com.book.entity.ReaderInfo">update reader_card set username = #{name}where reader_id = #{reader_id}</update><insert id="addReaderInfo" parameterType="com.book.entity.ReaderInfo">insert into reader_info values(null, #{name},#{sex},#{birth},#{address},#{phone})</insert><select id="getReaderId" resultType="long" parameterType="com.book.entity.ReaderInfo">select reader_id from reader_info wherename = #{name} and sex = #{sex} andbirth = #{birth} and address = #{address}and phone = #{phone}</select>

(4)相关业务的交互操作

借阅业务的交互操作

@Autowiredprivate BookServiceImpl bookServiceImpl;@RequestMapping("/deletebook.html")public String deleteBook(HttpServletRequest request, RedirectAttributes redirectAttributes) {long bookId = Long.parseLong(request.getParameter("bookId"));if (bookServiceImpl.deleteBook(bookId)) {redirectAttributes.addFlashAttribute("succ", "图书删除成功!");} else {redirectAttributes.addFlashAttribute("error", "图书删除失败!");}return "redirect:/admin_books.html";}@RequestMapping("/lendlist.html")public ModelAndView lendList(HttpServletRequest request,@RequestParam(required = false,defaultValue = "1")int pageNum, @RequestParam(required = false,defaultValue = "10")int pageSize) {ModelAndView modelAndView = new ModelAndView("admin_lend_list");modelAndView.addObject("pageInfo", lendServiceImpl.lendList(pageNum,pageSize));return modelAndView;}@RequestMapping("/mylend.html")public ModelAndView myLend(HttpServletRequest request, @RequestParam(required = false,defaultValue = "1")int pageNum, @RequestParam(required = false,defaultValue = "10")int pageSize) {ReaderCard readerCard = (ReaderCard) request.getSession().getAttribute("readercard");ModelAndView modelAndView = new ModelAndView("reader_lend_list");modelAndView.addObject("pageInfo", lendServiceImpl.myLendList(readerCard.getReaderId(),pageNum,pageSize));return modelAndView;}@RequestMapping("/deletelend.html")public String deleteLend(HttpServletRequest request, RedirectAttributes redirectAttributes) {long serNum = Long.parseLong(request.getParameter("serNum"));if (lendServiceImpl.deleteLend(serNum) > 0) {redirectAttributes.addFlashAttribute("succ", "记录删除成功!");} else {redirectAttributes.addFlashAttribute("error", "记录删除失败!");}return "redirect:/lendlist.html";}@RequestMapping("/lendbook.html")public String bookLend(HttpServletRequest request, RedirectAttributes redirectAttributes) {long bookId = Long.parseLong(request.getParameter("bookId"));long readerId = ((ReaderCard) request.getSession().getAttribute("readercard")).getReaderId();String name = request.getParameter("name");if (lendServiceImpl.lendBook(bookId, readerId, name)) {redirectAttributes.addFlashAttribute("succ", "图书借阅成功!");} else {redirectAttributes.addFlashAttribute("succ", "图书借阅成功!");}return "redirect:/reader_books.html";}

读者业务的交互操作

@Autowiredprivate ReaderInfoServiceImpl readerInfoServiceImpl;@Autowiredprivate LoginServiceImpl loginServiceImpl;@Autowiredprivate ReaderCardServiceImpl readerCardServiceImpl;private ReaderInfo getReaderInfo(long readerId, String name, String sex, String birth, String address, String phone) {ReaderInfo readerInfo = new ReaderInfo();Date date = new Date();try {SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd");date = df.parse(birth);} catch (ParseException e) {e.printStackTrace();}readerInfo.setAddress(address);readerInfo.setName(name);readerInfo.setReaderId(readerId);readerInfo.setPhone(phone);readerInfo.setSex(sex);readerInfo.setBirth(date);return readerInfo;}@RequestMapping("allreaders.html")public ModelAndView allBooks(@RequestParam(required = false,defaultValue = "1")int pageNum,@RequestParam(required = false,defaultValue = "10")int pageSize) {PageInfo<ReaderInfo> pageInfo = readerInfoServiceImpl.readerInfos(pageNum,pageSize);ModelAndView modelAndView = new ModelAndView("admin_readers");modelAndView.addObject("pageInfo", pageInfo);return modelAndView;}@RequestMapping("reader_delete.html")public String readerDelete(HttpServletRequest request, RedirectAttributes redirectAttributes) {long readerId = Long.parseLong(request.getParameter("readerId"));if (readerInfoServiceImpl.deleteReaderInfo(readerId) && readerCardServiceImpl.deleteReaderCard(readerId)) {redirectAttributes.addFlashAttribute("succ", "删除成功!");} else {redirectAttributes.addFlashAttribute("error", "删除失败!");}return "redirect:/allreaders.html";}@RequestMapping("/reader_info.html")public ModelAndView toReaderInfo(HttpServletRequest request) {ReaderCard readerCard = (ReaderCard) request.getSession().getAttribute("readercard");ReaderInfo readerInfo = readerInfoServiceImpl.getReaderInfo(readerCard.getReaderId());ModelAndView modelAndView = new ModelAndView("reader_info");modelAndView.addObject("readerinfo", readerInfo);return modelAndView;}@RequestMapping("reader_edit.html")public ModelAndView readerInfoEdit(HttpServletRequest request) {long readerId = Long.parseLong(request.getParameter("readerId"));ReaderInfo readerInfo = readerInfoServiceImpl.getReaderInfo(readerId);ModelAndView modelAndView = new ModelAndView("admin_reader_edit");modelAndView.addObject("readerInfo", readerInfo);return modelAndView;}@RequestMapping("reader_edit_do.html")public String readerInfoEditDo(HttpServletRequest request, String name, String sex, String birth, String address, String phone, RedirectAttributes redirectAttributes) {long readerId = Long.parseLong(request.getParameter("readerId"));ReaderInfo readerInfo = getReaderInfo(readerId, name, sex, birth, address, phone);if (readerInfoServiceImpl.editReaderInfo(readerInfo) && readerInfoServiceImpl.editReaderCard(readerInfo)) {redirectAttributes.addFlashAttribute("succ", "读者信息修改成功!");} else {redirectAttributes.addFlashAttribute("error", "读者信息修改失败!");}return "redirect:/allreaders.html";}@RequestMapping("reader_add.html")public ModelAndView readerInfoAdd() {return new ModelAndView("admin_reader_add");}@RequestMapping("reader_add_do.html")public String readerInfoAddDo(String name, String sex, String birth, String address, String phone, String password, RedirectAttributes redirectAttributes) {ReaderInfo readerInfo = getReaderInfo(0, name, sex, birth, address, phone);long readerId = readerInfoServiceImpl.addReaderInfo(readerInfo);readerInfo.setReaderId(readerId);if (readerId > 0 && readerCardServiceImpl.addReaderCard(readerInfo, password)) {redirectAttributes.addFlashAttribute("succ", "添加读者信息成功!");} else {redirectAttributes.addFlashAttribute("succ", "添加读者信息失败!");}return "redirect:/allreaders.html";}@RequestMapping("reader_info_edit.html")public ModelAndView readerInfoEditReader(HttpServletRequest request) {ReaderCard readerCard = (ReaderCard) request.getSession().getAttribute("readercard");ReaderInfo readerInfo = readerInfoServiceImpl.getReaderInfo(readerCard.getReaderId());ModelAndView modelAndView = new ModelAndView("reader_info_edit");modelAndView.addObject("readerinfo", readerInfo);return modelAndView;}@RequestMapping("reader_edit_do_r.html")public String readerInfoEditDoReader(HttpServletRequest request, String name, String sex, String birth, String address, String phone, RedirectAttributes redirectAttributes) {ReaderCard readerCard = (ReaderCard) request.getSession().getAttribute("readercard");ReaderInfo readerInfo = getReaderInfo(readerCard.getReaderId(), name, sex, birth, address, phone);if (readerInfoServiceImpl.editReaderInfo(readerInfo) && readerInfoServiceImpl.editReaderCard(readerInfo)) {ReaderCard readerCardNew = loginServiceImpl.findReaderCardByReaderId(readerCard.getReaderId());request.getSession().setAttribute("readercard", readerCardNew);redirectAttributes.addFlashAttribute("succ", "信息修改成功!");} else {redirectAttributes.addFlashAttribute("error", "信息修改失败!");}return "redirect:/reader_info.html";}
查看全文
如若内容造成侵权/违法违规/事实不符,请联系编程学习网邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!

相关文章

  1. OAK空间人工智能,让机器人slam技术“开眼”看世界

    机器人想实现自主移动和导航必须知道自己在哪&#xff0c;周围什么情况等&#xff1b;SLAM就是帮助机器人实现定位与地图构建功能的一种方案或技术。SLAM的全称为Simultaneous Localization And Mapping即「同时定位与地图构建」&#xff0c;最早用于军事核潜艇中的海底定位。 …...

    2024/4/15 4:13:38
  2. 看完这一篇,解决Mac电脑90%的软件烦恼

    狂欢节双11又要到了&#xff0c;无论买什么都可以遇到全年最低价格&#xff0c;提前做好功课&#xff0c;才能买到真正值得的东西。如果平时常用Mac电脑&#xff0c;那么购物清单里这些功能强大的实用软件不可错过呦&#xff0c;既然早晚用得上&#xff0c;不如趁着优惠力度大入…...

    2024/4/7 1:01:26
  3. 关于服务器代码函数参数这件事

    可见在服务器端有很多函数&#xff0c;可他们的参数都是什么含义呢&#xff1f; 首先我们说一下socket这个函数 int socket(int domain, int type, int protocol); &#xff08;1&#xff09;domain&#xff1a;套接字要服务的网络类型【传宏】 AF_INET:表示服务于IPV4的网络…...

    2024/4/17 8:43:35
  4. Android开发之动态添加Fragment

    1、创建Fragment子类 public class Fragment1 extends Fragment {private View root;Overridepublic void onCreate(Nullable Bundle savedInstanceState) {super.onCreate(savedInstanceState);}Overridepublic View onCreateView(NonNull LayoutInflater inflater, Nullable…...

    2024/4/15 4:13:43
  5. 基于SpringMVC的图书管理系统(一)

    这是本人经过Spring框架的学习&#xff0c;根据其他人项目的参考与改进&#xff0c;由此实现了一个较为基本的图书管理系统&#xff0c;也算是自己的一个学习经历吧&#xff0c;好了废话不多说&#xff0c;下面进入正题。 文章目录一、项目概述功能性需求描述设计概述实现功能功…...

    2024/4/7 1:01:23
  6. PTA练习6-2 使用函数输出指定范围内的Fibonacci数

    本题要求实现一个计算Fibonacci数的简单函数&#xff0c;并利用其实现另一个函数&#xff0c;输出两正整数m和n&#xff08;0<m≤n≤10000&#xff09;之间的所有Fibonacci数。所谓Fibonacci数列就是满足任一项数字是前两项的和&#xff08;最开始两项均定义为1&#xff09;…...

    2024/4/15 4:14:08
  7. Linux常用工具(yum/vim/gcc/g++/gdb/make/makefile/git)

    Linux常用工具 文章目录Linux常用工具1.yum软件包管理工具2.vim编辑器3.gcc/g编译器4.gdb调试器&#xff08;调试程序运行过程&#xff09;5.make/makefile(项目自动化构建工具)6.git(项目的版本管理工具)1.yum软件包管理工具 功能:yum是一个软件包管理工具,可以完成第三方工具…...

    2024/4/15 4:13:58
  8. 免费的才是最贵的

    长大后才明白的道理&#xff1a;免费的才是最贵的 很多年前听过一句话&#xff1a;这个世界上最珍贵的东西都是免贵的&#xff0c;比如阳光&#xff0c;比如空气&#xff0c;比如爱。 确实&#xff0c;这个世界上我们所需要的很多东西都不需要花一分钱。但是&#xff0c;随着…...

    2024/4/15 4:14:49
  9. [Linux基础]-- linux下查端口是否被占用、查看所有端口

    1、查看端口是否被占用>lsof -i:80802、查看所有端口>netstat -ntlp3、查看是否开放某端口tcp端口:>netstat -ntpludp端口:>netstat -nupl常用参数:-a (all)显示所有选项,默认不显示LISTEN相关 -t (tcp)仅显示tcp相关选项 -u (udp)仅显示udp相关选项 -n 拒绝显…...

    2024/4/17 21:02:33
  10. C#中get和set

    http://blog.sina.com.cn/s/blog_82526aa60100txtx.html 在程序中经常碰到get、set&#xff0c;不甚明白&#xff0c;在网上查询时也说的迷迷糊糊&#xff0c;所以整理下&#xff0c;以学的明白透彻点。 有两个类person&#xff1a;public class person{public string name;}…...

    2024/4/15 4:14:39
  11. JavaScript数据类型的分类

    js是动态语言&#xff0c;变量的数据类型是可以变化的<script>// 整数、小数var nnn3.14;console.log(nnn);var nn78;console.log(nn);// 八进制var nn20o10;console.log(nn2)var nn30o12;console.log(nn3);// 十六进制var nn40x9;console.log(nn4);// 数值型的最大值con…...

    2024/4/17 2:32:04
  12. Mysql设计层优化整理总结

    设计层优化主要包括&#xff1a;索引的使用、分表分区等。 目录 一、索引 索引的基本概念&#xff1a; B-tree索引&#xff1a; hash索引&#xff1a; 使用索引好处&#xff1a; 索引速度快的原因&#xff1a; 索引类型&#xff1a; 索引的数据结构&#xff1a; Myis…...

    2024/4/8 9:26:15
  13. 计操理论课01 -- openEuler操作系统及图形界面安装步骤(全网最详细)

    openEuler操作系统及图形界面安装步骤 文章目录openEuler操作系统及图形界面安装步骤一、写在前面二、openEuler操作系统安装1.检查网络连接2.增加软件源3.检查软件源是否配置成功三、openEuler图形界面安装&#xff08;GNOME&#xff09;1.GNOME安装2.设置 gdm 开机自启3.补全…...

    2024/4/17 23:02:54
  14. 洛谷P1085

    题目描述 津津上初中了。妈妈认为津津应该更加用功学习&#xff0c;所以津津除了上学之外&#xff0c;还要参加妈妈为她报名的各科复习班。另外每周妈妈还会送她去学习朗诵、舞蹈和钢琴。但是津津如果一天上课超过八个小时就会不高兴&#xff0c;而且上得越久就会越不高兴。假…...

    2024/4/15 4:14:44
  15. 修改dedecms添加栏目时“文章命名规则”默认路径

    <iframe frameborder”0″ src”文章介绍dedecms在添加栏目的时候&#xff0c;文章命名规则默认的路径是“{typedir}/{Y}/{M}{D}/{aid}.html”&#xff0c;但是我们通常只要这样{typedir}/{Y}{M}{D}/{aid}.html或者{typedir}/{Y}{M}/{aid}.html改减少文章内容页的目录层级&a…...

    2024/4/15 4:14:39
  16. 张飞电子第一部学习笔记和文档

    ​ 更多资料&#xff0c;完整笔记&#xff0c;请看我的个人主页&#xff0c;0积分下载&#xff0c;共同学习&#xff0c;共同进步 项目一 门控开关&#xff0c;用于电柜的LED灯 电容相关&#xff1a; 对负载供电使用电容滤波&#xff08;储能放电&#xff09;&#xff0c;会是…...

    2024/4/15 4:14:29
  17. CF691A Fashion in Berland

    题目描述 According to rules of the Berland fashion, a jacket should be fastened by all the buttons except only one, but not necessarily it should be the last one. Also if the jacket has only one button, it should be fastened, so the jacket will not swingin…...

    2024/4/15 4:14:29
  18. springboot 配置 tomcat

    springboot 配置, 或集成 tomcat springboot 配置, 或集成 tomcat项目前提idea配置 tomcat修改 Simple2Application 中的 main 方法springboot 配置, 或集成 tomcat springboot项目跑起来了, 但是自带的 tomcat 使用起来非常麻烦, 还等什么, 开始入坑吧 项目前提 项目前提: …...

    2024/4/15 4:14:54
  19. Windows 安装配置java环境jdk

    目录 下载&#xff1a; 安装&#xff1a; 配置&#xff1a; 测试&#xff1a; 下载&#xff1a; 官网下载地址&#xff1a;Java Downloads | Oracle &#xff08;建议下载java8 因为后面好多其他工具不支持高版本&#xff09; 安装&#xff1a; 双击exe文件指定目录安装…...

    2024/4/15 4:14:54
  20. 何时适合进行自动化测试?(下)

    通过上篇文章&#xff0c;可以意识到自动化的重要性和优势&#xff0c;必须确定可以自动化的用例。为此&#xff0c;必须考虑所追求的目标&#xff0c;以及这个目标在测试金字塔中处于什么层次。 尝试回答以下问题&#xff1a; 目标是什么&#xff1f; 需要确认的第一件事是…...

    2024/4/15 4:14:39

最新文章

  1. 代码随想录算法训练营第44天| 70. 爬楼梯(进阶版)*、 322. 零钱兑换*、 279.完全平方数*

    ## 70. 爬楼梯&#xff08;进阶版&#xff09;* 卡码网&#xff1a;57. 爬楼梯 代码 示例代码 #include <iostream> #include <vector> using namespace std; int main() {int n, m;while (cin >> n >> m) {vector<int> dp(n 1, 0);dp[0] …...

    2024/4/19 13:12:29
  2. 梯度消失和梯度爆炸的一些处理方法

    在这里是记录一下梯度消失或梯度爆炸的一些处理技巧。全当学习总结了如有错误还请留言&#xff0c;在此感激不尽。 权重和梯度的更新公式如下&#xff1a; w w − η ⋅ ∇ w w w - \eta \cdot \nabla w ww−η⋅∇w 个人通俗的理解梯度消失就是网络模型在反向求导的时候出…...

    2024/3/20 10:50:27
  3. linuxday05

    1、makedile原理&#xff08;增量编译生成代码&#xff09; # &#xff08;注释符&#xff09; 目标------依赖 目标不存在//目标比依赖旧才会执行命令&#xff1b; makefile的实现 1、命名要求&#xff08;Makefile/makefile&#xff09; 2、规则的集合 目标文件&#…...

    2024/4/18 11:02:57
  4. 小核引导RTOS

    参考 参考1. How does FSBL load the FreeRTOS on the small core and execute it?参考2. Duo now supports big and little cores?Come and play!Milk-V Duo, start&#xff01; 日志 FSBL Jb2829:g362832ac6-dirty:2024-04-02T13:31:1100:00 # 版本信息 st_on_reason…...

    2024/4/17 23:20:36
  5. 【外汇早评】美通胀数据走低,美元调整

    原标题:【外汇早评】美通胀数据走低,美元调整昨日美国方面公布了新一期的核心PCE物价指数数据,同比增长1.6%,低于前值和预期值的1.7%,距离美联储的通胀目标2%继续走低,通胀压力较低,且此前美国一季度GDP初值中的消费部分下滑明显,因此市场对美联储后续更可能降息的政策…...

    2024/4/19 11:57:09
  6. 【原油贵金属周评】原油多头拥挤,价格调整

    原标题:【原油贵金属周评】原油多头拥挤,价格调整本周国际劳动节,我们喜迎四天假期,但是整个金融市场确实流动性充沛,大事频发,各个商品波动剧烈。美国方面,在本周四凌晨公布5月份的利率决议和新闻发布会,维持联邦基金利率在2.25%-2.50%不变,符合市场预期。同时美联储…...

    2024/4/19 10:27:58
  7. 【外汇周评】靓丽非农不及疲软通胀影响

    原标题:【外汇周评】靓丽非农不及疲软通胀影响在刚结束的周五,美国方面公布了新一期的非农就业数据,大幅好于前值和预期,新增就业重新回到20万以上。具体数据: 美国4月非农就业人口变动 26.3万人,预期 19万人,前值 19.6万人。 美国4月失业率 3.6%,预期 3.8%,前值 3…...

    2024/4/19 11:57:31
  8. 【原油贵金属早评】库存继续增加,油价收跌

    原标题:【原油贵金属早评】库存继续增加,油价收跌周三清晨公布美国当周API原油库存数据,上周原油库存增加281万桶至4.692亿桶,增幅超过预期的74.4万桶。且有消息人士称,沙特阿美据悉将于6月向亚洲炼油厂额外出售更多原油,印度炼油商预计将每日获得至多20万桶的额外原油供…...

    2024/4/19 11:57:31
  9. 【外汇早评】日本央行会议纪要不改日元强势

    原标题:【外汇早评】日本央行会议纪要不改日元强势近两日日元大幅走强与近期市场风险情绪上升,避险资金回流日元有关,也与前一段时间的美日贸易谈判给日本缓冲期,日本方面对汇率问题也避免继续贬值有关。虽然今日早间日本央行公布的利率会议纪要仍然是支持宽松政策,但这符…...

    2024/4/19 11:57:52
  10. 【原油贵金属早评】欧佩克稳定市场,填补伊朗问题的影响

    原标题:【原油贵金属早评】欧佩克稳定市场,填补伊朗问题的影响近日伊朗局势升温,导致市场担忧影响原油供给,油价试图反弹。此时OPEC表态稳定市场。据消息人士透露,沙特6月石油出口料将低于700万桶/日,沙特已经收到石油消费国提出的6月份扩大出口的“适度要求”,沙特将满…...

    2024/4/19 11:57:53
  11. 【外汇早评】美欲与伊朗重谈协议

    原标题:【外汇早评】美欲与伊朗重谈协议美国对伊朗的制裁遭到伊朗的抗议,昨日伊朗方面提出将部分退出伊核协议。而此行为又遭到欧洲方面对伊朗的谴责和警告,伊朗外长昨日回应称,欧洲国家履行它们的义务,伊核协议就能保证存续。据传闻伊朗的导弹已经对准了以色列和美国的航…...

    2024/4/19 11:58:14
  12. 【原油贵金属早评】波动率飙升,市场情绪动荡

    原标题:【原油贵金属早评】波动率飙升,市场情绪动荡因中美贸易谈判不安情绪影响,金融市场各资产品种出现明显的波动。随着美国与中方开启第十一轮谈判之际,美国按照既定计划向中国2000亿商品征收25%的关税,市场情绪有所平复,已经开始接受这一事实。虽然波动率-恐慌指数VI…...

    2024/4/19 11:58:20
  13. 【原油贵金属周评】伊朗局势升温,黄金多头跃跃欲试

    原标题:【原油贵金属周评】伊朗局势升温,黄金多头跃跃欲试美国和伊朗的局势继续升温,市场风险情绪上升,避险黄金有向上突破阻力的迹象。原油方面稍显平稳,近期美国和OPEC加大供给及市场需求回落的影响,伊朗局势并未推升油价走强。近期中美贸易谈判摩擦再度升级,美国对中…...

    2024/4/19 11:58:32
  14. 【原油贵金属早评】市场情绪继续恶化,黄金上破

    原标题:【原油贵金属早评】市场情绪继续恶化,黄金上破周初中国针对于美国加征关税的进行的反制措施引发市场情绪的大幅波动,人民币汇率出现大幅的贬值动能,金融市场受到非常明显的冲击。尤其是波动率起来之后,对于股市的表现尤其不安。隔夜美国股市出现明显的下行走势,这…...

    2024/4/19 11:58:39
  15. 【外汇早评】美伊僵持,风险情绪继续升温

    原标题:【外汇早评】美伊僵持,风险情绪继续升温昨日沙特两艘油轮再次发生爆炸事件,导致波斯湾局势进一步恶化,市场担忧美伊可能会出现摩擦生火,避险品种获得支撑,黄金和日元大幅走强。美指受中美贸易问题影响而在低位震荡。继5月12日,四艘商船在阿联酋领海附近的阿曼湾、…...

    2024/4/19 11:58:51
  16. 【原油贵金属早评】贸易冲突导致需求低迷,油价弱势

    原标题:【原油贵金属早评】贸易冲突导致需求低迷,油价弱势近日虽然伊朗局势升温,中东地区几起油船被袭击事件影响,但油价并未走高,而是出于调整结构中。由于市场预期局势失控的可能性较低,而中美贸易问题导致的全球经济衰退风险更大,需求会持续低迷,因此油价调整压力较…...

    2024/4/19 11:59:02
  17. 氧生福地 玩美北湖(上)——为时光守候两千年

    原标题:氧生福地 玩美北湖(上)——为时光守候两千年一次说走就走的旅行,只有一张高铁票的距离~ 所以,湖南郴州,我来了~ 从广州南站出发,一个半小时就到达郴州西站了。在动车上,同时改票的南风兄和我居然被分到了一个车厢,所以一路非常愉快地聊了过来。 挺好,最起…...

    2024/4/19 11:59:15
  18. 氧生福地 玩美北湖(中)——永春梯田里的美与鲜

    原标题:氧生福地 玩美北湖(中)——永春梯田里的美与鲜一觉醒来,因为大家太爱“美”照,在柳毅山庄去寻找龙女而错过了早餐时间。近十点,向导坏坏还是带着饥肠辘辘的我们去吃郴州最富有盛名的“鱼头粉”。说这是“十二分推荐”,到郴州必吃的美食之一。 哇塞!那个味美香甜…...

    2024/4/19 11:59:23
  19. 氧生福地 玩美北湖(下)——奔跑吧骚年!

    原标题:氧生福地 玩美北湖(下)——奔跑吧骚年!让我们红尘做伴 活得潇潇洒洒 策马奔腾共享人世繁华 对酒当歌唱出心中喜悦 轰轰烈烈把握青春年华 让我们红尘做伴 活得潇潇洒洒 策马奔腾共享人世繁华 对酒当歌唱出心中喜悦 轰轰烈烈把握青春年华 啊……啊……啊 两…...

    2024/4/19 11:59:44
  20. 扒开伪装医用面膜,翻六倍价格宰客,小姐姐注意了!

    原标题:扒开伪装医用面膜,翻六倍价格宰客,小姐姐注意了!扒开伪装医用面膜,翻六倍价格宰客!当行业里的某一品项火爆了,就会有很多商家蹭热度,装逼忽悠,最近火爆朋友圈的医用面膜,被沾上了污点,到底怎么回事呢? “比普通面膜安全、效果好!痘痘、痘印、敏感肌都能用…...

    2024/4/19 11:59:48
  21. 「发现」铁皮石斛仙草之神奇功效用于医用面膜

    原标题:「发现」铁皮石斛仙草之神奇功效用于医用面膜丽彦妆铁皮石斛医用面膜|石斛多糖无菌修护补水贴19大优势: 1、铁皮石斛:自唐宋以来,一直被列为皇室贡品,铁皮石斛生于海拔1600米的悬崖峭壁之上,繁殖力差,产量极低,所以古代仅供皇室、贵族享用 2、铁皮石斛自古民间…...

    2024/4/19 12:00:06
  22. 丽彦妆\医用面膜\冷敷贴轻奢医学护肤引导者

    原标题:丽彦妆\医用面膜\冷敷贴轻奢医学护肤引导者【公司简介】 广州华彬企业隶属香港华彬集团有限公司,专注美业21年,其旗下品牌: 「圣茵美」私密荷尔蒙抗衰,产后修复 「圣仪轩」私密荷尔蒙抗衰,产后修复 「花茵莳」私密荷尔蒙抗衰,产后修复 「丽彦妆」专注医学护…...

    2024/4/19 12:00:17
  23. 广州械字号面膜生产厂家OEM/ODM4项须知!

    原标题:广州械字号面膜生产厂家OEM/ODM4项须知!广州械字号面膜生产厂家OEM/ODM流程及注意事项解读: 械字号医用面膜,其实在我国并没有严格的定义,通常我们说的医美面膜指的应该是一种「医用敷料」,也就是说,医用面膜其实算作「医疗器械」的一种,又称「医用冷敷贴」。 …...

    2024/4/19 12:00:25
  24. 械字号医用眼膜缓解用眼过度到底有无作用?

    原标题:械字号医用眼膜缓解用眼过度到底有无作用?医用眼膜/械字号眼膜/医用冷敷眼贴 凝胶层为亲水高分子材料,含70%以上的水分。体表皮肤温度传导到本产品的凝胶层,热量被凝胶内水分子吸收,通过水分的蒸发带走大量的热量,可迅速地降低体表皮肤局部温度,减轻局部皮肤的灼…...

    2024/4/19 12:00:40
  25. 配置失败还原请勿关闭计算机,电脑开机屏幕上面显示,配置失败还原更改 请勿关闭计算机 开不了机 这个问题怎么办...

    解析如下&#xff1a;1、长按电脑电源键直至关机&#xff0c;然后再按一次电源健重启电脑&#xff0c;按F8健进入安全模式2、安全模式下进入Windows系统桌面后&#xff0c;按住“winR”打开运行窗口&#xff0c;输入“services.msc”打开服务设置3、在服务界面&#xff0c;选中…...

    2022/11/19 21:17:18
  26. 错误使用 reshape要执行 RESHAPE,请勿更改元素数目。

    %读入6幅图像&#xff08;每一幅图像的大小是564*564&#xff09; f1 imread(WashingtonDC_Band1_564.tif); subplot(3,2,1),imshow(f1); f2 imread(WashingtonDC_Band2_564.tif); subplot(3,2,2),imshow(f2); f3 imread(WashingtonDC_Band3_564.tif); subplot(3,2,3),imsho…...

    2022/11/19 21:17:16
  27. 配置 已完成 请勿关闭计算机,win7系统关机提示“配置Windows Update已完成30%请勿关闭计算机...

    win7系统关机提示“配置Windows Update已完成30%请勿关闭计算机”问题的解决方法在win7系统关机时如果有升级系统的或者其他需要会直接进入一个 等待界面&#xff0c;在等待界面中我们需要等待操作结束才能关机&#xff0c;虽然这比较麻烦&#xff0c;但是对系统进行配置和升级…...

    2022/11/19 21:17:15
  28. 台式电脑显示配置100%请勿关闭计算机,“准备配置windows 请勿关闭计算机”的解决方法...

    有不少用户在重装Win7系统或更新系统后会遇到“准备配置windows&#xff0c;请勿关闭计算机”的提示&#xff0c;要过很久才能进入系统&#xff0c;有的用户甚至几个小时也无法进入&#xff0c;下面就教大家这个问题的解决方法。第一种方法&#xff1a;我们首先在左下角的“开始…...

    2022/11/19 21:17:14
  29. win7 正在配置 请勿关闭计算机,怎么办Win7开机显示正在配置Windows Update请勿关机...

    置信有很多用户都跟小编一样遇到过这样的问题&#xff0c;电脑时发现开机屏幕显现“正在配置Windows Update&#xff0c;请勿关机”(如下图所示)&#xff0c;而且还需求等大约5分钟才干进入系统。这是怎样回事呢&#xff1f;一切都是正常操作的&#xff0c;为什么开时机呈现“正…...

    2022/11/19 21:17:13
  30. 准备配置windows 请勿关闭计算机 蓝屏,Win7开机总是出现提示“配置Windows请勿关机”...

    Win7系统开机启动时总是出现“配置Windows请勿关机”的提示&#xff0c;没过几秒后电脑自动重启&#xff0c;每次开机都这样无法进入系统&#xff0c;此时碰到这种现象的用户就可以使用以下5种方法解决问题。方法一&#xff1a;开机按下F8&#xff0c;在出现的Windows高级启动选…...

    2022/11/19 21:17:12
  31. 准备windows请勿关闭计算机要多久,windows10系统提示正在准备windows请勿关闭计算机怎么办...

    有不少windows10系统用户反映说碰到这样一个情况&#xff0c;就是电脑提示正在准备windows请勿关闭计算机&#xff0c;碰到这样的问题该怎么解决呢&#xff0c;现在小编就给大家分享一下windows10系统提示正在准备windows请勿关闭计算机的具体第一种方法&#xff1a;1、2、依次…...

    2022/11/19 21:17:11
  32. 配置 已完成 请勿关闭计算机,win7系统关机提示“配置Windows Update已完成30%请勿关闭计算机”的解决方法...

    今天和大家分享一下win7系统重装了Win7旗舰版系统后&#xff0c;每次关机的时候桌面上都会显示一个“配置Windows Update的界面&#xff0c;提示请勿关闭计算机”&#xff0c;每次停留好几分钟才能正常关机&#xff0c;导致什么情况引起的呢&#xff1f;出现配置Windows Update…...

    2022/11/19 21:17:10
  33. 电脑桌面一直是清理请关闭计算机,windows7一直卡在清理 请勿关闭计算机-win7清理请勿关机,win7配置更新35%不动...

    只能是等着&#xff0c;别无他法。说是卡着如果你看硬盘灯应该在读写。如果从 Win 10 无法正常回滚&#xff0c;只能是考虑备份数据后重装系统了。解决来方案一&#xff1a;管理员运行cmd&#xff1a;net stop WuAuServcd %windir%ren SoftwareDistribution SDoldnet start WuA…...

    2022/11/19 21:17:09
  34. 计算机配置更新不起,电脑提示“配置Windows Update请勿关闭计算机”怎么办?

    原标题&#xff1a;电脑提示“配置Windows Update请勿关闭计算机”怎么办&#xff1f;win7系统中在开机与关闭的时候总是显示“配置windows update请勿关闭计算机”相信有不少朋友都曾遇到过一次两次还能忍但经常遇到就叫人感到心烦了遇到这种问题怎么办呢&#xff1f;一般的方…...

    2022/11/19 21:17:08
  35. 计算机正在配置无法关机,关机提示 windows7 正在配置windows 请勿关闭计算机 ,然后等了一晚上也没有关掉。现在电脑无法正常关机...

    关机提示 windows7 正在配置windows 请勿关闭计算机 &#xff0c;然后等了一晚上也没有关掉。现在电脑无法正常关机以下文字资料是由(历史新知网www.lishixinzhi.com)小编为大家搜集整理后发布的内容&#xff0c;让我们赶快一起来看一下吧&#xff01;关机提示 windows7 正在配…...

    2022/11/19 21:17:05
  36. 钉钉提示请勿通过开发者调试模式_钉钉请勿通过开发者调试模式是真的吗好不好用...

    钉钉请勿通过开发者调试模式是真的吗好不好用 更新时间:2020-04-20 22:24:19 浏览次数:729次 区域: 南阳 > 卧龙 列举网提醒您:为保障您的权益,请不要提前支付任何费用! 虚拟位置外设器!!轨迹模拟&虚拟位置外设神器 专业用于:钉钉,外勤365,红圈通,企业微信和…...

    2022/11/19 21:17:05
  37. 配置失败还原请勿关闭计算机怎么办,win7系统出现“配置windows update失败 还原更改 请勿关闭计算机”,长时间没反应,无法进入系统的解决方案...

    前几天班里有位学生电脑(windows 7系统)出问题了&#xff0c;具体表现是开机时一直停留在“配置windows update失败 还原更改 请勿关闭计算机”这个界面&#xff0c;长时间没反应&#xff0c;无法进入系统。这个问题原来帮其他同学也解决过&#xff0c;网上搜了不少资料&#x…...

    2022/11/19 21:17:04
  38. 一个电脑无法关闭计算机你应该怎么办,电脑显示“清理请勿关闭计算机”怎么办?...

    本文为你提供了3个有效解决电脑显示“清理请勿关闭计算机”问题的方法&#xff0c;并在最后教给你1种保护系统安全的好方法&#xff0c;一起来看看&#xff01;电脑出现“清理请勿关闭计算机”在Windows 7(SP1)和Windows Server 2008 R2 SP1中&#xff0c;添加了1个新功能在“磁…...

    2022/11/19 21:17:03
  39. 请勿关闭计算机还原更改要多久,电脑显示:配置windows更新失败,正在还原更改,请勿关闭计算机怎么办...

    许多用户在长期不使用电脑的时候&#xff0c;开启电脑发现电脑显示&#xff1a;配置windows更新失败&#xff0c;正在还原更改&#xff0c;请勿关闭计算机。。.这要怎么办呢&#xff1f;下面小编就带着大家一起看看吧&#xff01;如果能够正常进入系统&#xff0c;建议您暂时移…...

    2022/11/19 21:17:02
  40. 还原更改请勿关闭计算机 要多久,配置windows update失败 还原更改 请勿关闭计算机,电脑开机后一直显示以...

    配置windows update失败 还原更改 请勿关闭计算机&#xff0c;电脑开机后一直显示以以下文字资料是由(历史新知网www.lishixinzhi.com)小编为大家搜集整理后发布的内容&#xff0c;让我们赶快一起来看一下吧&#xff01;配置windows update失败 还原更改 请勿关闭计算机&#x…...

    2022/11/19 21:17:01
  41. 电脑配置中请勿关闭计算机怎么办,准备配置windows请勿关闭计算机一直显示怎么办【图解】...

    不知道大家有没有遇到过这样的一个问题&#xff0c;就是我们的win7系统在关机的时候&#xff0c;总是喜欢显示“准备配置windows&#xff0c;请勿关机”这样的一个页面&#xff0c;没有什么大碍&#xff0c;但是如果一直等着的话就要两个小时甚至更久都关不了机&#xff0c;非常…...

    2022/11/19 21:17:00
  42. 正在准备配置请勿关闭计算机,正在准备配置windows请勿关闭计算机时间长了解决教程...

    当电脑出现正在准备配置windows请勿关闭计算机时&#xff0c;一般是您正对windows进行升级&#xff0c;但是这个要是长时间没有反应&#xff0c;我们不能再傻等下去了。可能是电脑出了别的问题了&#xff0c;来看看教程的说法。正在准备配置windows请勿关闭计算机时间长了方法一…...

    2022/11/19 21:16:59
  43. 配置失败还原请勿关闭计算机,配置Windows Update失败,还原更改请勿关闭计算机...

    我们使用电脑的过程中有时会遇到这种情况&#xff0c;当我们打开电脑之后&#xff0c;发现一直停留在一个界面&#xff1a;“配置Windows Update失败&#xff0c;还原更改请勿关闭计算机”&#xff0c;等了许久还是无法进入系统。如果我们遇到此类问题应该如何解决呢&#xff0…...

    2022/11/19 21:16:58
  44. 如何在iPhone上关闭“请勿打扰”

    Apple’s “Do Not Disturb While Driving” is a potentially lifesaving iPhone feature, but it doesn’t always turn on automatically at the appropriate time. For example, you might be a passenger in a moving car, but your iPhone may think you’re the one dri…...

    2022/11/19 21:16:57