基于C#+SQL Server2008 开发三层架构(WinForm)图书管理系统【100010014】

news2024/11/15 23:46:14

图书管理系统

一、项目背景及意义

当今由于信息技术的飞速发展,图书馆作为社会知识信息媒介的功能日益重要,网络环境下的信息资源建设知识仓库的设计,开放存取学术交流模式,知识管理系统,智能检索,数字参考咨询,数字图书馆领域成为图书馆系统的研究方向。

管理发展至今,综合发展的整体趋势已日渐明显。引进新方法,吸收新思想是促进图书馆系统发展的必要条件。因此,图书馆系统的研究要坚持理论与技术相融合,开展跨学科的交叉研究;要坚持理论与实践相结合,而对现实,回答现实所提出的最迫切的问题;要坚持基础研究和应用研究,前者对后者起指导作用,后者反过来对前者起丰富和发展的作用;要正确处理现实、历史、理论三者之间的关系,这是推进管理系统研究的重要方法。

二、需求分析

2.1 现状分析

以往,人们使用传统的人工方式管理图书馆的日常业务,其操作流程比较繁琐。在借书时,读者首先将要借的书好借阅证交给工作人员,然后工作人员将每本书的信息卡片好读者的借阅证放在一个小格栏里,最后在借阅证和每本书贴的借阅条上填写借阅信息。在还书时,读者首先将要还的书交给工作人员,然后工作人员根据图书信息找到相应的书卡好借阅证,并填写相应的还书信息。

学校图书馆有许多书,如果靠人工的方式来进行管理,那么工作量会非常大。图书的统计和管理会成为让人头疼的问题,读者借阅图书进行登记也会十分的不方便。这时,利用计算机来为我们进行这些统计管理的工作,可以给我们的生活带来大大的便利,并且提高工作效率。由于条件有限,只能使用键盘输入书的信息,所以在输入图书的ISBN号时有些麻烦。所以在课设里,采用了图书编号。在现实生活中,采用扫描的方式录入ISBN号会更加准确,高效。

2.2 系统功能需求

图书管理系统是针对图书馆工作人员开发的管理软件,实现对图书信息、用户信息的管理功能。

本系统主要能够完成以下功能:

  • 图书信息管理(查询、修改、新增、删除)

  • 用户信息管理(查询、修改、新增、删除)

  • 借书操作、还书操作、续借操作、借书记录查看

  • 图书和用户分类管理(查询、修改、新增、删除)

2.3 系统设计目标

  • 系统中的数据表设计合理、高效、数据冗余少

  • 软件界面友好、安全性高

  • 易于维护、方便升级

三、系统可行性分析

3.1 技术可行性

图书管理系统的开发环境是Visual Studio 2010、Microsoft SQL Server 2008R2 SP3。系统是应用C/S的交互方式实现,本系统具有稳定性、安全性、美观性、先进性。系统现阶段的发展过程中,利用现有的人力物力是完全具备的能力开发出来的,作为阶段性产品,日后的发展空间大,实现方法逐步简单容易,所以图书管理系统的技术上是完全可行的。在当前的限制条件下,该系统的功能目标能达到。

3.2 经济可行性

计算机专业师生团队可以进行日常的系统维护,工作量少,经济支出少。

3.3 操作可行性

所有界面具有风格统一,不同栏目的页面文字风格统一,重点突出图书管理平台的特点,系统页面友好,操作简单,即使没有计算机基础的老师也很好上手。

四、使用的相关技术

4.1 C#

C#是微软公司发布的一种面向对象的、运行于.NET Framework之上的高级程序设计语言。并定于在微软职业开发者论坛(PDC)上登台亮相。C#是一种安全的、稳定的、简单的、优雅的,由C和C++衍生出来的面向对象的编程语言。它在继承C和C++强大功能的同时去掉了一些它们的复杂特性(例如没有宏以及不允许多重继承)。C#综合了VB简单的可视化操作和C++的高运行效率,以其强大的操作能力、优雅的语法风格、创新的语言特性和便捷的面向组件编程的支持成为.NET开发的首选语言。

4.2 SQL server

SQL Server是由Microsoft开发和推广的关系数据库管理系统(DBMS),它最初是由Microsoft、Sybase和Ashton-Tate三家公司共同开发的,并于1988年推出了第一个OS/2版本。Microsoft SQL Server近年来不断更新版本,1996年,Microsoft 推出了SQL Server 6.5版本;1998年,SQL Server 7.0版本和用户见面;SQL Server 2000是Microsoft公司于2000年推出,目前最新版本是2017年份推出的SQL SERVER 2017。

五、系统详细设计

5.1 总体设计

以Microsoft SQL Server 2008R2 sp3、Visual Studio 2010作为开发环境,使用数据库技术以及.net开发技术,从用C#三层架构:表现层(UI(User Interface))、业务逻辑层(BLL(Business Logic Layer))、数据访问层(DAL(Data Access Layer))再加上实体类库(Model),开发此图书管理系统。

5.2 数据库设计

5.2.1 数据流图

数据流图

5.2.2 数据字典

Admin表

BookInfo表

BookType表

BorrowReturn表

Class表

Department表

Reader表

ReaderType表

5.2.3 逻辑结构

  • 管理员(管理员ID,密码,类型,备注)

  • 图书信息(图书ID,书名,入库时间,作者,拼音码,翻译者,语言,页数,价格,印刷版面,存放位置,ISBN码,版本,备注)

  • 图书类型(图书类型ID,图书类型名称)

  • 图书借还(图书借还ID,图书ID,用户ID,借书时间,应还书时间,真实还书时间,罚金,续借次数,备注)

  • 用户班级(班级ID,班级名称)

  • 用户学院(学院ID,学院名称)

  • 用户信息(用户ID,用户姓名,登记时间,有效期,用户类型,学院,班级,身份证号,性别,QQ,电话,Email,地址,备注)

  • 用户学院(用户类型ID,用户类型名称)

5.3 安全性设计

系统有两种管理员:第一种是普通管理员,拥有除管理员管理之外所以权限;第二种是超级管理员,拥有最高权限,可以修改普通管理员。这样的设定使得数据库数据不会被随意篡改。

​ 系统概念设计图

六、方案分析

6.1 可操作性分析

所有页面具有统一的风格,页面文字风格统一,在构思上重点突出图书管理平台的特点,以获得较佳的浏览效率。

6.2 先进性分析

本系统是应用C/S的交互方式实现,从用C#三层架构:表现层(UI(User Interface))、业务逻辑层(BLL(Business Logic Layer))、数据访问层(DAL(Data Access Layer))再加上实体类库(Model),开发此图书管理系统,达到了本系统的稳定性、安全性、美观性性、先进性。

6.3 稳健性分析

系统目前还处在完成最基本功能阶段,不会有大量的用户访问,服务器使用阿里云,稳健性较好。

6.4 可扩展性分析

系统页面简洁,添加新页面很方便,新功能并不会与已有功能相冲突,具有很强的扩展性。而且系统中的数据库可以随学校的规模的变化进行动态的扩充或缩减。

6.5 可维护性分析

程序简单,数据库数据冗余少,使用日志文件等可恢复数据库,可维护性强。

七、系统测试

7.1 测试概述

编写测试用例并进行测试,找出bug并改正。

7.2 测试资源与环境

7.2.1 硬件配置

电脑型号:战神Z6S1

处理器:Intel(R)Core™i7-4720HQ CPU @2.60GHz 2.60GHz

7.2.2 软件配置

操作系统:Windows 10 专业版 64位操作系统

使用软件:Microsoft Visual Studio 2010

​ SQL server 2008R2 SP3

7.3 测试内容

7.3.1 管理员模块

​ 图7.1 管理员模块

7.3.2 图书管理模块

​ 图7.2 图书管理模块

​ 图7.2 新增图书

7.3.3 用户管理模块

​ 图7.4 用户管理模块

​ 图7.5 用户新增

7.3.4 图书借还模块

​ 图7.6 图书借还

7.3.5 分类管理模块

​ 图7.7 分类管理模块

7.3.6 查询模块

​ 图7.8 图书借还记录

​ 图7.9 查询

八、附录

8.1 部分源码

8.1.1 图书借还

//查询BorrowReturn表信息
        public DataSet selectHostory(BorrowReturn b, string radioName, String cboBorrowTimeType, Boolean checkTime)
        {
            string sql = string.Format(@"select BookInfo.BookId as 'BookId',Reader.UserId as 'UserId',BookName,UserName,BookTypeName,UserTypeName,Gender,IdentityCard,BorrowTime,ReturnTime,FactReturnTime,Fine,RenewCount from BorrowReturn
                            inner join BookInfo on BookInfo.BookId=BorrowReturn.BookId
                            inner join Reader on Reader.UserId=BorrowReturn.UserId
                            inner join BookType on BookType.BookTypeId=BookInfo.BookTypeId
                            inner join ReaderType on ReaderType.UserTypeId=Reader.UserTypeId
                            where BookInfo.BookId like '%{0}%' and 
                            Reader.UserId like '%{1}%' ", b.BookId, b.UserId);
            if (radioName == "全部")
            {

            }
            else if (radioName == "已借")
            {
                sql += " and FactReturnTime	is  null ";
            }
            else if (radioName == "已还")
            {
                sql += " and FactReturnTime	is not null ";
            }

            return DBhelp.Create().ExecuteAdater(sql);
        }

        //查询BorrowReturn表全部信息
        public DataSet AllBorrowReturn()
        {
            string sql = @"select BookInfo.BookId as 'BookId',Reader.UserId as 'UserId',BookName,UserName,BookTypeName,UserTypeName,Gender,IdentityCard,BorrowTime,ReturnTime,FactReturnTime,Fine,RenewCount from BorrowReturn
                            inner join BookInfo on BookInfo.BookId=BorrowReturn.BookId
                            inner join Reader on Reader.UserId=BorrowReturn.UserId
                            inner join BookType on BookType.BookTypeId=BookInfo.BookTypeId
                            inner join ReaderType on ReaderType.UserTypeId=Reader.UserTypeId";
            return DBhelp.Create().ExecuteAdater(sql);
        }

        //查询图书BorrowReturn表(表连接)
        public DataSet selectBorrowReturn(string BookId)
        {
            string sql = @"select BookInfo.BookId,BookName,Reader.UserId,UserName,BorrowTime,ReturnTime,FactReturnTime,Fine,RenewCount,BorrowRemark from BookInfo
                    inner join BorrowReturn on BorrowReturn.BookId=BookInfo.BookId
                    inner join Reader on Reader.UserId=BorrowReturn.UserId 
                    where BookInfo.BookId=@BookId ";
            SqlParameter[] sp ={
                                   new SqlParameter("@BookId",BookId)
                               };

            return DBhelp.Create().ExecuteAdater(sql, sp);
        }


        //用户借阅记录
        public DataSet ReaderBorrowReturn(string UserId)
        {
            string sql = @"select BorrowId,Reader.UserId as 'UserId',UserName,BookInfo.BookId as 'BookId',BookName,BorrowTime,ReturnTime,FactReturnTime,Fine,RenewCount,BorrowRemark from Reader
                            inner join BorrowReturn on BorrowReturn.UserId=Reader.UserId
                            inner join BookInfo on BookInfo.BookId=BorrowReturn.BookId
                            where Reader.UserId=@UserId and FactReturnTime is null ";
            SqlParameter[] sp ={
                                   new SqlParameter("@UserId",UserId)
                               };
            return DBhelp.Create().ExecuteAdater(sql, sp);
        }

        //用户历史借阅记录
        public DataSet ReaderBorrowReturn1(string UserId)
        {
            string sql = @"select BorrowId,Reader.UserId as 'UserId',UserName,BookInfo.BookId as 'BookId',BookName,BorrowTime,ReturnTime,FactReturnTime,Fine,RenewCount,BorrowRemark from Reader
                            inner join BorrowReturn on BorrowReturn.UserId=Reader.UserId
                            inner join BookInfo on BookInfo.BookId=BorrowReturn.BookId
                            where Reader.UserId=@UserId and FactReturnTime is not null ";
            SqlParameter[] sp ={
                                   new SqlParameter("@UserId",UserId)
                               };
            return DBhelp.Create().ExecuteAdater(sql, sp);
        }

        //还书
        public int ReturnBook(int BorrowReturnId)
        {
            string sql = @"update BorrowReturn set FactReturnTime=@FactReturnTime,RenewCount=0 where BorrowId=@BorrowId";
            SqlParameter[] sp ={
                                   new SqlParameter("@FactReturnTime",DateTime.Now),
                                   new SqlParameter("@BorrowId",BorrowReturnId)
                               };
            return DBhelp.Create().ExecuteNonQuery(sql, sp: sp);
        }

        //借书
        public int BorrowBook(BorrowReturn b)
        {
            string sql = "proc_BorrowBook";
            Console.WriteLine(b.BookId);
            SqlParameter[] sp ={
                                   new SqlParameter("@BorrowId",DbType.Int32),
                                   new SqlParameter("@BookId",b.BookId),
                                   new SqlParameter("@UserId",b.UserId),
                                   new SqlParameter("@BorrowTime",b.BorrowTime),
                                   new SqlParameter("@ReturnTime",b.ReturnTime),
                                   new SqlParameter("@Fine",b.Fine),
                                   new SqlParameter("@RenewCount",b.RenewCount),
                                   new SqlParameter("@BorrowRemark",b.BorrowRemark),
                                   new SqlParameter("@ReturnValue",DbType.Int32)
                              };
            sp[0].Direction = ParameterDirection.Output;
            sp[sp.Length - 1].Direction = ParameterDirection.ReturnValue;
            DBhelp.Create().ExecuteNonQuery(sql, CommandType.StoredProcedure, sp);
            b.BorrowId = (int)sp[0].Value;
            return (int)sp[sp.Length - 1].Value;
        }

        //续借
        public int RenewBook(BorrowReturn b)
        {
            string sql = @"update BorrowReturn set ReturnTime=dateadd(month,3,ReturnTime),RenewCount=RenewCount+1 where BorrowId=@BorrowId";
            SqlParameter[] sp ={
                                   new SqlParameter("@BorrowId",b.BorrowId)
                               };
            return DBhelp.Create().ExecuteNonQuery(sql, sp: sp);
        }

8.1.2 图书管理及查询

//查询BookInfo表
        public List<BookInfo> selectBookInfo()
        {
            string sql = @"select BookId,BookName,TimeIn,BookTypeName,Author,PinYinCode,Translator,Language,BookNumber,Price,Layout,Address,ISBN,Versions,BookRemark from BookInfo
                            inner join BookType on BookType.BookTypeId=BookInfo.BookTypeId";
            List<BookInfo> list = new List<BookInfo>();
            SqlDataReader reader = DBhelp.Create().ExecuteReader(sql);
            while (reader.Read())
            {
                BookInfo b = new BookInfo();
                b.BookId = reader.GetString(0);
                b.BookName = reader.GetString(1);
                b.TimeIn = reader.GetDateTime(2);
                b.BookType = new BookType();
                b.BookType.BookTypeName = reader.GetString(3);
                b.Author = reader.GetString(4);
                b.PinYinCode = reader.GetString(5);
                b.Translator = reader.GetString(6);
                b.Language = reader.GetString(7);
                b.BookNumber = reader.GetString(8);
                b.Price = reader.GetString(9);
                b.Layout = reader.GetString(10);
                b.Address = reader.GetString(11);
                b.ISBN = reader.GetString(12);
                b.Versions = reader.GetString(13);
                b.BookRemark = reader.GetString(14);
                list.Add(b);
            }
            reader.Close();
            return list;
        }

        //根据ID查询bookinfo表
        public List<BookInfo> selectBookInfo(string BookId)
        {
            string sql = @"select BookId,BookName,TimeIn,BookTypeId,Author,PinYinCode,Translator,Language,BookNumber, Price,Layout,Address,ISBN,Versions,BookRemark from BookInfo where BookId=@BookId";
            SqlParameter[] sp ={
                                new SqlParameter("@BookId",BookId)
                              };
            SqlDataReader reader = DBhelp.Create().ExecuteReader(sql, sp);
            List<BookInfo> list = new List<BookInfo>();
            while (reader.Read())
            {
                BookInfo b = new BookInfo();
                b.BookId = reader.GetString(0);
                b.BookName = reader.GetString(1);
                b.TimeIn = reader.GetDateTime(2);
                b.BookTypeId = reader.GetInt32(3);
                b.Author = reader.GetString(4);
                b.PinYinCode = reader.GetString(5);
                b.Translator = reader.GetString(6);
                b.Language = reader.GetString(7);
                b.BookNumber = reader.GetString(8);
                b.Price = reader.GetString(9);
                b.Layout = reader.GetString(10);
                b.Address = reader.GetString(11);
                b.ISBN = reader.GetString(12);
                b.Versions = reader.GetString(13);
                b.BookRemark = reader.GetString(14);
                list.Add(b);
            }
            reader.Close();
            return list;
        }

        //查询BookInfo表
        public DataSet selectBookInfo1()
        {
            string sql = @"select BookId,BookName,TimeIn,BookTypeName,Author,PinYinCode,Translator,Language,BookNumber,Price,Layout,Address,ISBN,Versions,BookRemark from BookInfo inner join BookType on BookType.BookTypeId=BookInfo.BookTypeId";
            return DBhelp.Create().ExecuteAdater(sql);
        }
        public DataSet selectBook;

        //查询BookInfo表 目前可以借阅的图书
        public DataSet selectBookInfo2(string BookId)
        {
            string sql = @"select BookInfo.BookId as 'BookId',BookName,TimeIn,BookTypeName,Author,PinYinCode,Translator,Language,BookNumber,Price,Layout,Address,ISBN,Versions,BookRemark from BookInfo
                    inner join BookType on BookType.BookTypeId=BookInfo.BookTypeId
                    where BookInfo.BookId like '%'+@BookId+'%' and BookInfo.BookId not in(select BookId from BorrowReturn where FactReturnTime is null )";
            SqlParameter[] sp ={
                                   new SqlParameter("@BookId",BookId)
                               };
            return DBhelp.Create().ExecuteAdater(sql, sp: sp);
        }

        //根据条件查询bookinfo表
        public DataSet selectBookInfo1(int index)
        {
            string sql = @"select BookId,BookName,TimeIn,BookTypeName,Author,PinYinCode,Translator,Language,BookNumber,Price,Layout,Address,ISBN,Versions,BookRemark from BookInfo
                            inner join BookType on BookType.BookTypeId=BookInfo.BookTypeId
                            where BookType.BookTypeId=@BookTypeId";
            SqlParameter[] sp ={
                                   new SqlParameter("@BookTypeId",index)
                              };
            return DBhelp.Create().ExecuteAdater(sql, sp);
        }

        //根据条件查询bookinfo表
        public DataSet selectBookInfo1(string A, string B)
        {
            string sql = string.Format(@"select BookId,BookName,TimeIn,BookTypeName,Author,PinYinCode,Translator,Language,BookNumber,Price,Layout,Address,ISBN,Versions,BookRemark from BookInfo
                            inner join BookType on BookType.BookTypeId=BookInfo.BookTypeId
                            where {0} like '%{1}%'", A, B);
            return DBhelp.Create().ExecuteAdater(sql);
        }

        //查询BookInfo表 带全部查询(表中所有相关的字段)
        public DataSet selectBookInfo1(List<string> list, string B)
        {
            string sql = "";
            for (int i = 0; i < list.Count; i++)
            {
                if (i != list.Count - 1)
                {
                    sql += string.Format(@"select BookId,BookName,TimeIn,BookTypeName,Author,PinYinCode,Translator,Language,BookNumber,Price,Layout,Address,ISBN,Versions,BookRemark from BookInfo
                            inner join BookType on BookType.BookTypeId=BookInfo.BookTypeId
                            where {0} like '%{1}%' union  ", list[i], B);
                }
                else
                {
                    sql += string.Format(@"select BookId,BookName,TimeIn,BookTypeName,Author,PinYinCode,Translator,Language,BookNumber,Price,Layout,Address,ISBN,Versions,BookRemark from BookInfo
                            inner join BookType on BookType.BookTypeId=BookInfo.BookTypeId
                            where {0} like '%{1}%' ", list[i], B);
                }
            }
            return DBhelp.Create().ExecuteAdater(sql);
        }

        //添加图书信息
        public int AddBookInfo(BookInfo book)
        {
            string sql = @"insert into BookInfo select @BookId,@BookName,@TimeIn,@BookTypeId,@Author,@PinYinCode,@Translator,@Language,@BookNumber,@Price,@Layout,@Address,@ISBN,@Versions,@BookRemark";
            SqlParameter[] sp ={
                                   new SqlParameter("@BookId",book.BookId),
                                   new SqlParameter("@BookName",book.BookName),
                                   new SqlParameter("@TimeIn",book.TimeIn),
                                   new SqlParameter("@BookTypeId",book.BookTypeId),
                                   new SqlParameter("@Author",book.Author),
                                   new SqlParameter("@PinYinCode",book.PinYinCode),
                                   new SqlParameter("@Translator",book.Translator),
                                   new SqlParameter("@Language",book.Language),
                                   new SqlParameter("@BookNumber",book.BookNumber),
                                   new SqlParameter("@Price",book.Price),
                                   new SqlParameter("@Layout",book.Layout),
                                   new SqlParameter("@Address",book.Address),
                                   new SqlParameter("@ISBN",book.ISBN),
                                   new SqlParameter("@Versions",book.Versions),
                                   new SqlParameter("@BookRemark",book.BookRemark),
                              };
            return DBhelp.Create().ExecuteNonQuery(sql, sp: sp);
        }

        //修改图书信息
        public int ExitBookInfo(BookInfo book)
        {
            string sql = @"update BookInfo set BookName=@BookName,TimeIn=@TimeIn,BookTypeId=@BookTypeId, Author=@Author,PinYinCode=@PinYinCode,Translator=@Translator,Language=@Language,BookNumber=@BookNumber,Price=@Price,Layout=@Layout,Address=@Address,ISBN=@ISBN,Versions=@Versions,BookRemark=@BookRemark
            where BookId=@BookId";
            SqlParameter[] sp ={
                                    new SqlParameter("@BookName",book.BookName),
                                    new SqlParameter("@TimeIn",book.TimeIn),
                                    new SqlParameter("@BookTypeId",book.BookTypeId),
                                    new SqlParameter("@Author",book.Author),
                                    new SqlParameter("@PinYinCode",book.PinYinCode),
                                    new SqlParameter("@Translator",book.Translator),
                                    new SqlParameter("@Language",book.Language),
                                    new SqlParameter("@BookNumber",book.BookNumber),
                                    new SqlParameter("@Price",book.Price),
                                    new SqlParameter("@Layout",book.Layout),
                                    new SqlParameter("@Address",book.Address),
                                    new SqlParameter("@ISBN",book.ISBN),
                                    new SqlParameter("@Versions",book.Versions),
                                    new SqlParameter("@BookRemark",book.BookRemark),
                                    new SqlParameter("@BookId",book.BookId)
                              };

            return DBhelp.Create().ExecuteNonQuery(sql, sp: sp);
        }

        //根据Id删除
        public int DeleteBookInfo(string BookId)
        {
            string sql = @"delete from BorrowReturn where BookId=@BookId
                           delete from BookInfo where BookId=@BookId";
            SqlParameter[] sp ={
                                   new SqlParameter("@BookId",BookId)
                              };
            return DBhelp.Create().ExecuteNonQuery(sql, sp: sp);
        }

♻️ 资源

在这里插入图片描述

大小: 2.4MB
➡️ 资源下载:https://download.csdn.net/download/s1t16/87247973

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

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

相关文章

SDE论文阅读

论文链接&#xff1a;Score-Based Generative Modeling through Stochastic Differential Equations 文章目录摘要引文背景基于郎之动力学的去噪分数匹配/SMLD去噪扩散概率模型/DDPMSDEs的基于分数的生成模型SDEs下的受扰动数据逆转SDE生成样本估计SDE的分数例子&#xff1a;VE…

spring——Spring自动装配——示例

1. 不使用自动装配(autowire"no") autowire"no" 表示不使用自动装配&#xff0c;此时我们必须通过 <bean> 元素的 <constructor-arg>和 <property> 元素的 ref 属性维护 Bean 的依赖关系。 2. 按名称自动装配(autowire"byName"…

【Qt入门第38篇】 网络(八)TCP(二)

导语 在上一节里我们使用TCP服务器发送一个字符串&#xff0c;然后在TCP客户端进行接收。在这一节将重新写一个客户端程序和一个服务器程序&#xff0c;这次实现客户端进行文件的发送&#xff0c;服务器进行文件的接收。有了上一节的基础&#xff0c;这一节的内容就很好理解了…

“为什么同样是跳槽,有些人薪资就能翻两三倍?“Java面试八股文是背错了方向吗?

“为什么同样是跳槽&#xff0c;有些人薪资能翻两三倍&#xff1f;” 最近遇到一个朋友跟我吐槽如上&#xff0c;其实类似这样的问题我也听到过很多次&#xff0c;身边也不乏有认识的同事、朋友们通过跳槽拿下高薪&#xff0c;这里我先说一个我身边真实的例子&#xff1a; 学…

智能家居服务发现实现

服务设备软件架构设计 代码复用 将网络通信框架移植到开发板&#xff0c;之后&#xff0c;可以使用框架中的组件实现 Response Task 和 Service Task。 框架移植注意事项 LWIP 是微型 TCP/IP 协议栈 (并非完整 TCP/IP 协议栈) 支持 socket 接口&#xff0c;但一些功能未实现…

面向对象编程的一个例子——减少代码重复

专注系列化、高质量的R语言教程推文索引 | 联系小编 | 付费合集本篇推文缘起于上篇推文plot3D | 三维数据绘图&#xff08;3&#xff09;&#xff1a;mesh函数、surf3D函数、spheresurf3D函数。学堂君在介绍surf3D()函数时举了两个例子。第一个例子是绘制球形&#xff1a;libra…

contains shards using both inmem and tsi1 indexes. 重构索引 influx

问题&#xff1a; 删除infludx表measurement时出错 参考: 记一次influxdb内存高耗的追踪 - 墨天轮 influxdb删除错误DB contains shards using both inmem and tsi1 indexes._宇宙全能王的博客-CSDN博客_influxdb删除shard Rebuild the TSI index | InfluxDB OSS 1.8 Docume…

【PCB专题】芯片比较大的焊盘,开钢网时都要设计成不同数量的小格吗?

大面积焊盘&#xff08;EPAD&#xff09;必须开栅格或线条孔&#xff0c;避免焊膏印刷时刮薄或焊接时把元件托起&#xff0c;使其他引脚开焊。这种开钢网的方法&#xff0c;多用于QFN封装和无线模块。比如非接芯片、电源芯片、语音功放、Modem芯片等需要加强散热的器件&#xf…

python之标准库使用

目录 一、标准库 二、字符串操作 三、字符串类型 四、 时间操作 五、文件基本方法及操作 文件基本方法 文件操作 一、标准库 Python 标准库非常庞大&#xff0c;所提供的组件涉及范围十分广泛&#xff0c;正如以下内容目录所显示的。这个库包含了 Python中的图标含义 c…

游戏开发44课 性能优化3

2.4 模型 模型特别是带有骨骼动画的模型在性能消耗中占据非常大的比重&#xff0c;它们会显著增加CPU/GPU/内存/显存的负担。所以&#xff0c;模型的优化尤为重要。模型涉及的数据比较多&#xff0c;包含了顶点/索引/材质等&#xff0c;而顶点又可能包含pos/color/uv/normal/t…

【Docker】Docker是什么?Docker从介绍到Linux安装图文详细教程

本期目录1. Docker介绍1.1 Docker解决的问题2. Docker和虚拟机的区别2.1 虚拟机的缺点2.2 Docker的优点2.3 比较3. Docker架构3.1 镜像和容器1&#xff09;镜像2&#xff09;容器3.2 Docker和DockerHub3.3 整体结构及底层通信原理4. 安装Docker4.1 安装条件4.2 卸载旧版本4.3 y…

【Windows环境下载安装MySQL、IDEA连接数据库】

MySQL安装配置一、Windows环境下载安装MySQL1.下载合适的MySQL安装包2.本地安装配置MySQL二、IDEA连接MySQL数据库1.设置数据库连接2.测试连接3.连接结果一、Windows环境下载安装MySQL 1.下载合适的MySQL安装包 官网链接https://www.mysql.com/&#xff0c;选择合适的版本&am…

JVM方法区的内部结构

JVM 中方法区的大致区域浏览图&#xff1a; 《深入理解 Java 虚拟机》书中对方法区&#xff08; Method Area) 存储内容描述如下&#xff1a;它用于存储已被虚拟机加载的类信息、常量、静态变量、即时编译器编译后的代码缓存等。 类型信息 对每个加载的类型&#xff08;类 cla…

chatGPT 辣么火,你却不会注册

chatGPT 是什么&#xff1f; 一款目前超级火的 AI 对话聊天工具&#xff0c;只是不同于其他的智能聊天机器人那样&#xff0c;他非常的智能。 可以回答你的技术问题、帮你写代码、还能帮你写小说等等&#xff0c;发挥你的想象力&#xff0c;让他干点啥都行。 比如让他帮你用…

Spring循环依赖问题分析

文章目录一、什么是循环依赖&#xff1f;二、Spring内部解决的是那种情况下的循环依赖&#xff1f;三、一级、二级、三级缓存保存的是什么&#xff1f;四、如何使用三级缓存解决循环依赖&#xff1f;五、为什么是三级缓存&#xff0c;二级缓存不行么&#xff1f;六、二级缓存的…

小米AX6S刷OpenWrt,和刷回官网固件

文章目录背景刷成 OpenWrt刷回官网固件Ref简 述: 闲暇&#xff0c;折腾下新购 小米AX6S &#xff0c;刷下 OpenWrt&#xff0c;初次接触记录下。 本文初发于 “偕臧的小站”&#xff0c;同步转载于此。 背景 miwifi_rb03_firmware_3e872_1.0.54.bin [官方 2022.08.24] miwifi_r…

17. 权重衰退(weight_decay)

之前描述了过拟合的问题&#xff0c;现在介绍一些正则化模型的技术。 正则化&#xff1a;凡事可以减少泛化误差而不是减少训练误差的方法&#xff0c;都可以称作正则化方法。 我们总是可以通过去收集更多的训练数据来缓解过拟合。 但这可能成本很高&#xff0c;耗时颇多&#x…

【OpenCV-Python】教程:4-7 BRIEF( Binary Robust Independent Elementary Features)特征

OpenCV Python BRIEF &#xff08; Binary Robust Independent Elementary Features&#xff09; 【目标】 学习 BRIEF 算法理论 【理论】 我们知道SIFT使用128维向量作为描述符。因为它使用的是浮点数&#xff0c;所以需要512字节。类似地&#xff0c;SURF也需要最少256字…

堪称零瑕疵!仅用了365页直接封神,我要吹爆这份RocketMQ笔记

RocketMQ 是阿里巴巴在2012年开源的分布式消息中间件&#xff0c;作为经历过多次阿里巴巴双十一这种“超级工程”的洗礼并有稳定出色表现的国产中间件&#xff0c;以其高性能、低延时和高可靠等特性近年来已经也被越来越多的国内企业使用。 谁使用ApacheRocketMQ&#xff1f; …

【不知道发啥】Win7网页版使用方法

文章目录网站使用方法测试总结&#x1f308;博客主页&#xff1a;Minecraft__Him &#x1f48c;欢迎关注&#x1f389;点赞&#x1f44d;收藏⭐️私信&#x1f4dd;评论 网站 https://win7simu.visnalize.com/ 使用方法 如果是蓝屏那就等一下&#xff0c; 等它跳到这个界面 …