一步步完整搭建一个图纸管理系统(Django+Vue3)

这篇具有很好参考价值的文章主要介绍了一步步完整搭建一个图纸管理系统(Django+Vue3)。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

图纸管理系统

一、初步构建后端项目

1、打开已经创建好的虚拟环境:激活activate(推荐使用虚拟环境)并创建项目

一步步完整搭建一个图纸管理系统(Django+Vue3)

2、导入vs code中,项目环境大致如下:

一步步完整搭建一个图纸管理系统(Django+Vue3)

需要将终端改成虚拟环境的解释器后,简单试运行:

一步步完整搭建一个图纸管理系统(Django+Vue3)

3、创建子app(图纸管理系统模块)

一步步完整搭建一个图纸管理系统(Django+Vue3)

一步步完整搭建一个图纸管理系统(Django+Vue3)

由于我们把子项目都放在apps里面了(方便统一管理)所以注册要加入一段配置

一步步完整搭建一个图纸管理系统(Django+Vue3)

4、创建数据库

一定要注意格式

一步步完整搭建一个图纸管理系统(Django+Vue3)

5、设置Django连接数据库

(1)安装pymysql

pip install pymysql

(2)gveInformationSystem/settings中进行相关配置

DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.mysql',
        'NAME': 'StudentDB',
        'USER': 'root',
        'PASSWORD': '123456',
        'HOST': 'localhost',
        'PORT': '3306',
    }
}

(3)需要在init.py导入pymysql

一步步完整搭建一个图纸管理系统(Django+Vue3)

6、创建数据库表内容

(在:apps/DrawingManagementSystem/models.py)

from django.db import models


# Create your models here.
# === 图纸管理系统 models
# 传感器分类--sensor, 项目--project, 资料-data, 图纸信息-drawing

# 公有创建时间和修改时间
class TimestampMode(models.Model):
    """
    An abstract base class model that provides selfupdating ``created`` and ``modified`` fields.
    """
    created = models.DateTimeField(auto_now_add=True)
    modified = models.DateTimeField(auto_now=True)

    class Meta:
        abstract = True  # it's very important to add this line


# === 传感器类 --- Sensor:Id,name,created,modified
class Sensor(TimestampMode):
    sensor_name = models.CharField(verbose_name="传感器名称", max_length=50, unique=True, null=False, blank=False)

    # create_time = models.DateTimeField(default=timezone.now().replace(microsecond=0))

    class Meta:
        db_table = "Draw_Sensor"
        managed = True
        app_label = "DrawingManagementSystem"

    def __str__(self):
        return "%s" % (self.sensor_name)


# === 项目类 --- project:Id,name,created,modified
class Project(TimestampMode):
    project_name = models.CharField(verbose_name="项目名称", max_length=50, unique=True, null=False, blank=False)
    sensor = models.ForeignKey(verbose_name="所属传感器", to=Sensor, on_delete=models.PROTECT)

    class Meta:
        db_table = "Draw_Project"
        managed = True
        app_label = "DrawingManagementSystem"

    def __str__(self):
        return "%s" % (self.project_name)


# === 资料类 --- data:ID,name,created,modified
class Data(TimestampMode):
    data_name = models.CharField(verbose_name="资料名称", max_length=50, unique=True, null=False, blank=False)
    sensor = models.ForeignKey(verbose_name="所属传感器", to=Sensor, on_delete=models.PROTECT)
    project = models.ForeignKey(verbose_name="所属项目", to=Project, on_delete=models.PROTECT)

    class Meta:
        db_table = "Draw_Data"
        managed = True
        app_label = "DrawingManagementSystem"

    def __str__(self):
        return "%s" % (self.data_name)


# === 图纸信息 --- drawing:ID(Material_code),drawing_name,created,modified,drawing_spec,drawing_page,drawing_client_id,drawing_remark,drawing_version
class Drawing(TimestampMode):
    material_code = models.CharField(verbose_name="物料编号", max_length=50, blank=False)
    sensor = models.ForeignKey(verbose_name="所属传感器", to=Sensor, on_delete=models.PROTECT)
    project = models.ForeignKey(verbose_name="所属项目", to=Project, on_delete=models.PROTECT)
    data = models.ForeignKey(verbose_name="所属资料", to=Data, on_delete=models.PROTECT)
    drawing_name = models.CharField(verbose_name="材料名称", max_length=50, blank=False)
    drawing_spec = models.CharField(verbose_name="规格/图纸号", max_length=50, blank=False)
    drawing_page = models.CharField(verbose_name="图纸页数", max_length=50, blank=False)
    drawing_client_id = models.CharField(verbose_name="客户编号", max_length=50)
    drawing_version = models.CharField(verbose_name="版本号", max_length=50, blank=False)
    drawing_remark = models.CharField(verbose_name="备注", max_length=100)
    drawing_url = models.CharField(verbose_name="地址", max_length=100)
    is_deleted = models.IntegerField(verbose_name="逻辑删除0否1是", max_length=10, blank=False, default=0)

    class Meta:
        db_table = "Draw_Drawing"
        managed = True
        app_label = "DrawingManagementSystem"

    def __str__(self):
        return "%s" % (self.drawing_name)


(1)用指令生成数据库

python manage.py makemigrations
python manage.py migrate

完成后代码如下:

一步步完整搭建一个图纸管理系统(Django+Vue3)

7、DRF接口(初步)

(1)DRF的安装和快速实现

安装DjangoRestFramework包

pip install djangorestframework==3.13.0

在settings中导入

一步步完整搭建一个图纸管理系统(Django+Vue3)

序列化:负责对象和json格式的相互转换

​ a获取数据:对象-->Json返回给前端

​ b添加、修改:json-->对象 存储在数据库中

视图:实现后台功能的核心

​ 早期:视图是基于函数--FBV

​ DRF:视图基于类--CBV

路由:路由的匹配

(2)序列化

创建DrawingManagementSystem\serializer.py文件

from rest_framework import serializers
from DrawingManagementSystem.models import Sensor, Project, Data, Drawing


# ----Sensor序列化类----
class SensorSerialzer(serializers.ModelSerializer):
    class Meta:
        model = Sensor
        fields = "__all__"

# ____Project序列化类____
class ProjectSerialzer(serializers.ModelSerializer):
    class Meta:
        model = Project
        fields = "__all__"

# ____Data序列化类____
class DataSerialzer(serializers.ModelSerializer):
    class Meta:
        model = Data
        fields = "__all__"

# ____Drawing序列化类____
class DrawingSerialzer(serializers.ModelSerializer):
    class Meta:
        model = Drawing
        fields = "__all__"

(3)编写view.py代码(apps\DrawingManagementSystem\views.py)

# ====== 导入模块 ======
from rest_framework.viewsets import ModelViewSet  # 封装完成的ModelViewset视图集
from DrawingManagementSystem.models import Sensor, Project, Data, Drawing  # 具体的类
from DrawingManagementSystem.serializer import SensorSerialzer, ProjectSerialzer, DataSerialzer, DrawingSerialzer # 序列化类

# ---Sensor视图---
class SensorViewSet(ModelViewSet):
    queryset = Sensor.objects.all()
    serializer_class = SensorSerialzer

# ---Project---
class ProjectViewSet(ModelViewSet):
    queryset = Project.objects.all()
    serializer_class = ProjectSerialzer

# ---Data视图---
class DataViewSet(ModelViewSet):
    queryset = Data.objects.all()
    serializer_class = DataSerialzer

# ---Sensor视图---
class DrawingViewSet(ModelViewSet):
    queryset = Drawing.objects.all()
    serializer_class = DrawingSerialzer

(4)编写urls.py代码(apps\DrawingManagementSystem\urls.py)

# ======导入模块======
from django.urls import path
from rest_framework.routers import DefaultRouter
from DrawingManagementSystem.views import SensorViewSet, ProjectViewSet, DataViewSet, DrawingViewSet

# ====1.实例化一个 DefaultRouter====
router = DefaultRouter()

# ====2.注册相应的url====
# 注册Sensor对象
router.register('Sensors', SensorViewSet, basename='Sensors') # http://127.0.0.1:8080/DrawingApi/v1/Sensors/
# 注册Sensor对象
router.register('Projects', ProjectViewSet, basename='Projects') # http://127.0.0.1:8080/DrawingApi/v1/Projects/
# 注册Sensor对象
router.register('Datas', DataViewSet, basename='Datas') # http://127.0.0.1:8080/DrawingApi/v1/Datas/
# 注册Sensor对象
router.register('Drawings', DrawingViewSet, basename='Drawings') # http://127.0.0.1:8080/DrawingApi/v1/Drawings/

urlpatterns = [

]

# ====3.附加到urlpatterns集合中====
urlpatterns += router.urls

编写总urls.py代码(gveInformationSystemBE\urls.py)

from django.contrib import admin
from django.urls import path,include

urlpatterns = [
    path('admin/', admin.site.urls),
    path('DrawingApi/v1/',include('DrawingManagementSystem.urls')),
]

编写后运行django项目

python manage.py runserver

一步步完整搭建一个图纸管理系统(Django+Vue3)

浏览器输入:http://127.0.0.1:8000/DrawingApi/v1/

可以看到界面如下:

一步步完整搭建一个图纸管理系统(Django+Vue3)

说明简单后端接口已经完成,可以简单测试下:

一步步完整搭建一个图纸管理系统(Django+Vue3)

发现存入的时间是北美市区,将gveInformationSystemBE\settings.py中的USE_TZ = True改为:USE_TZ = False

发现存入的时间是带毫秒:参考解决方法为

一步步完整搭建一个图纸管理系统(Django+Vue3)

或者直接在数据库软件中

一步步完整搭建一个图纸管理系统(Django+Vue3)

可以避免存入毫秒的问题

8、DRF进阶(增删改接口、筛选、搜索、分页)

其实在网址后面加上id,就可以进行数据的删除修改

一步步完整搭建一个图纸管理系统(Django+Vue3)

(1)DRF的筛选

步骤为:

安装:pip install django-filter

pip install django-filter==21.1

注册到installed_apps中

一步步完整搭建一个图纸管理系统(Django+Vue3)

完成filter的筛选类

在apps\DrawingManagementSystem新建filter.py

# =====导入模块=====
from django_filters import FilterSet
from DrawingManagementSystem.models import Sensor, Project, Data, Drawing


# ---Sensor的Filter类---
class SensorFilter(FilterSet):
    class Meta:
        model = Sensor
        fields = ('sensor_name',) # 传感器名称


# ---Project的Filter类---
class ProjectFilter(FilterSet):
    class Meta:
        model = Project
        fields = ('project_name', 'sensor') # 项目名称 所属传感器


# ---Data的Filter类---
class DataFilter(FilterSet):
    class Meta:
        model = Data
        fields = ('data_name', 'sensor', 'project') # 资料名称 所属传感器 所属项目


# ---Drawing的Filter类---
class DrawingFilter(FilterSet):
    class Meta:
        model = Drawing
        fields = ('drawing_name', 'material_code', 'drawing_spec', 'drawing_client_id')  # 材料名称、物料编号、规格/图纸号、客户编号

在viewset中添加筛选类

# ====== 导入模块 ======
from rest_framework.viewsets import ModelViewSet  # 封装完成的ModelViewset视图集
from DrawingManagementSystem.models import Sensor, Project, Data, Drawing  # 具体的类
from DrawingManagementSystem.serializer import SensorSerialzer, ProjectSerialzer, DataSerialzer, \
    DrawingSerialzer  # 序列化类
from django_filters.rest_framework import DjangoFilterBackend  # 实现筛选的后台模块
from DrawingManagementSystem.filter import SensorFilter, ProjectFilter, DataFilter, DrawingFilter


# ---Sensor视图---
class SensorViewSet(ModelViewSet):
    queryset = Sensor.objects.all()
    serializer_class = SensorSerialzer
    # 设定筛选的后台
    filter_backends = (DjangoFilterBackend,)
    # 指定筛选的类
    filter_class = SensorFilter

# ---Project---
class ProjectViewSet(ModelViewSet):
    queryset = Project.objects.all()
    serializer_class = ProjectSerialzer
    # 设定筛选的后台
    filter_backends = (DjangoFilterBackend,)
    # 指定筛选的类
    filter_class = ProjectFilter


# ---Data视图---
class DataViewSet(ModelViewSet):
    queryset = Data.objects.all()
    serializer_class = DataSerialzer
    # 设定筛选的后台
    filter_backends = (DjangoFilterBackend,)
    # 指定筛选的类
    filter_class = DataFilter


# ---Sensor视图---
class DrawingViewSet(ModelViewSet):
    queryset = Drawing.objects.all()
    serializer_class = DrawingSerialzer
    # 设定筛选的后台
    filter_backends = (DjangoFilterBackend,)
    # 指定筛选的类
    filter_class = DrawingFilter

效果如下:

一步步完整搭建一个图纸管理系统(Django+Vue3)

(2)筛选优化——模糊匹配

# =====导入模块=====
from django_filters import FilterSet,filters
from DrawingManagementSystem.models import Sensor, Project, Data, Drawing


# ---Sensor的Filter类---
class SensorFilter(FilterSet):
    # 重新需要支持模糊匹配的字段
    sensor_name = filters.CharFilter(field_name='sensor_name',lookup_expr="icontains")
    class Meta:
        model = Sensor
        fields = ('sensor_name',) # 传感器名称


# ---Project的Filter类---
class ProjectFilter(FilterSet):
    # 重新需要支持模糊匹配的字段
    project_name = filters.CharFilter(field_name='project_name', lookup_expr="icontains")
    class Meta:
        model = Project
        fields = ('project_name', 'sensor') # 项目名称 所属传感器


# ---Data的Filter类---
class DataFilter(FilterSet):
    # 重新需要支持模糊匹配的字段
    data_name = filters.CharFilter(field_name='data_name', lookup_expr="icontains")
    class Meta:
        model = Data
        fields = ('data_name', 'sensor', 'project') # 资料名称 所属传感器 所属项目


# ---Drawing的Filter类---
class DrawingFilter(FilterSet):
    # 重新需要支持模糊匹配的字段
    drawing_name = filters.CharFilter(field_name='drawing_name', lookup_expr="icontains")
    material_code = filters.CharFilter(field_name='material_code', lookup_expr="icontains")
    drawing_spec = filters.CharFilter(field_name='drawing_spec', lookup_expr="icontains")
    drawing_client_id = filters.CharFilter(field_name='drawing_client_id', lookup_expr="icontains")
    class Meta:
        model = Drawing
        fields = ('drawing_name', 'material_code', 'drawing_spec', 'drawing_client_id')  # 材料名称、物料编号、规格/图纸号、客户编号

(3)全局加入筛选后台

在gveInformationSystemBE\settings.py中加入

# ======= REST Framework全局设置 ===========
REST_FRAMEWORK = {

    # ==== 设置全局的Filter_Backends ====
    'DEFAULT_FILTER_BACKENDS': [
        'django_filters.rest_framework.DjangoFilterBackend',
    ],


}

这样views.py中就不需要加入

# 设定筛选的后台
    filter_backends = (DjangoFilterBackend,)

修改后代码如下:

# ====== 导入模块 ======
from rest_framework.viewsets import ModelViewSet  # 封装完成的ModelViewset视图集
from DrawingManagementSystem.models import Sensor, Project, Data, Drawing  # 具体的类
from DrawingManagementSystem.serializer import SensorSerialzer, ProjectSerialzer, DataSerialzer, \
    DrawingSerialzer  # 序列化类
from DrawingManagementSystem.filter import SensorFilter, ProjectFilter, DataFilter, DrawingFilter


# ---Sensor视图---
class SensorViewSet(ModelViewSet):
    queryset = Sensor.objects.all()
    serializer_class = SensorSerialzer

    # 指定筛选的类
    filter_class = SensorFilter

# ---Project---
class ProjectViewSet(ModelViewSet):
    queryset = Project.objects.all()
    serializer_class = ProjectSerialzer

    # 指定筛选的类
    filter_class = ProjectFilter


# ---Data视图---
class DataViewSet(ModelViewSet):
    queryset = Data.objects.all()
    serializer_class = DataSerialzer

    # 指定筛选的类
    filter_class = DataFilter


# ---Sensor视图---
class DrawingViewSet(ModelViewSet):
    queryset = Drawing.objects.all()
    serializer_class = DrawingSerialzer

    # 指定筛选的类
    filter_class = DrawingFilter

(4)加入搜索

筛选【filter】:一个值只能对应一个字段,需要django-filter

搜索【search】;一个值能对应多个字段,DRF自带

在gveInformationSystemBE\settings.py中加入'rest_framework.filters.SearchFilter',

# ======= REST Framework全局设置 ===========
REST_FRAMEWORK = {

    # ==== 设置全局的Filter_Backends ====
    'DEFAULT_FILTER_BACKENDS': [
        'django_filters.rest_framework.DjangoFilterBackend',
        'rest_framework.filters.SearchFilter',

    ],


}

在apps\DrawingManagementSystem\views.py中加入需要搜索匹配的字段

# ---Sensor视图---
class DrawingViewSet(ModelViewSet):
    queryset = Drawing.objects.all()
    serializer_class = DrawingSerialzer

    # 指定筛选的类
    filter_class = DrawingFilter
    # 指定查找匹配的字段
    search_fields = ('drawing_name', 'material_code', 'drawing_spec', 'drawing_client_id')

结果如下:

一步步完整搭建一个图纸管理系统(Django+Vue3)

(5)加入分页

有2种,一种为全局

即在在gveInformationSystemBE\settings.py中加入

# ======= REST Framework全局设置 ===========
REST_FRAMEWORK = {

    # ==== 设置全局的Filter_Backends ====
    'DEFAULT_FILTER_BACKENDS': [
        'django_filters.rest_framework.DjangoFilterBackend',
        'rest_framework.filters.SearchFilter',

    ],
    # ===== 设置分页 ===============
    'DEFAULT_PAGINATION_CLASS': 'rest_framework.pagination.PageNumberPagination',
    'PAGE_SIZE': 10


}

还有一种为:按需分页

apps\DrawingManagementSystem下新建paginations.py

代码如下:

# ========== 导入 ===========
from rest_framework.pagination import PageNumberPagination


class MyPageNumberPagination(PageNumberPagination):
    page_size = 5
    page_query_param = "page"
    page_size_query_param = 'size'
    max_page_size = 50

在apps\DrawingManagementSystem\views.py中加入:

from DrawingManagementSystem.paginations import MyPageNumberPagination
###
###
###
# ---Sensor视图---
class DrawingViewSet(ModelViewSet):
    queryset = Drawing.objects.all()
    serializer_class = DrawingSerialzer
    pagination_class = MyPageNumberPagination

    # 指定筛选的类
    filter_class = DrawingFilter
    # 指定查找匹配的字段
    search_fields = ('drawing_name', 'material_code', 'drawing_spec', 'drawing_client_id')

效果如下:

一步步完整搭建一个图纸管理系统(Django+Vue3)

9、添加Swagger文档

一步步完整搭建一个图纸管理系统(Django+Vue3)

记得在setting中注册

INSTALLED_APPS = [
    'django.contrib.admin',
    'django.contrib.auth',
    'django.contrib.contenttypes',
    'django.contrib.sessions',
    'django.contrib.messages',
    'django.contrib.staticfiles',
    'DrawingManagementSystem',
    'rest_framework',
    'django_filters',
    'drf_yasg',
]

效果如下:

一步步完整搭建一个图纸管理系统(Django+Vue3)

想要中文注释

一步步完整搭建一个图纸管理系统(Django+Vue3)

效果如下:

一步步完整搭建一个图纸管理系统(Django+Vue3)

二、构建前端页面

1、工具的准备

vs code(Visual Studio Code - Code Editing. Redefined)

node.js(Node.js (nodejs.org))

image-20230616143244212

vs code插件:

(1)、Chinese Language Pack——中文语言包

(2)、禁用vetur,安装Vue Language Features(Volar)

(3)、安装Element UI Snippets

2、创建项目

cmd进入自己的目标文件夹下输入 npm init vite@latest后选择输入项目名称,包,选择vue,选择ts

一步步完整搭建一个图纸管理系统(Django+Vue3)

创建后目录如下:
一步步完整搭建一个图纸管理系统(Django+Vue3)

用vs code打开,并运行npm install更新依赖

一步步完整搭建一个图纸管理系统(Django+Vue3)

随后运行npm run dev测试项目是否运行成功。

一步步完整搭建一个图纸管理系统(Django+Vue3)

运行成功后打开网页为:

一步步完整搭建一个图纸管理系统(Django+Vue3)文章来源地址https://www.toymoban.com/news/detail-457532.html

到了这里,关于一步步完整搭建一个图纸管理系统(Django+Vue3)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • React--》从零开始搭建一个文章后台管理系统

    目录 项目准备 项目搭建 scss预处理器的使用 配置基础路由 组件库antd的使用 开发者工具的安装 登录模块 基本样式搭建 创建表单结构 获取表单数据并进行相关登录操作 对登录模块的token进行相关处理 路由鉴权实现 后台页面模块 基本页面结构搭建 菜单高亮显示 展示个人信

    2023年04月17日
    浏览(49)
  • 使用eclipse创建一个图书管理系统(1)-----搭建架构

    目录 思维导图: 图书管理系统的创建: 第一步:搭建框架-------使用者 第二步:搭建框架------被使用者 第三步:操作方法 第四步:main函数  前言: 昨天学了一下使用Java语言来写一个图书管理系统,于是今天写一篇博客作为一个小笔记巩固一下自己学到的知识!博主也是刚

    2024年02月02日
    浏览(37)
  • 只需三步,教你搭建一个进销存管理系统!

    如果你常常面临: 进销存软件功能不全、功能冗余、价格昂贵,性价比不高的情况—— 可以考虑使用【零代码搭建】了! 在简道云可以根据自身需求快速搭建出进销存管理系统。相比较其他标准进销存软件,用简道云搭建进销存具备以下优势: 功能灵活: 可以对进销存模

    2024年02月06日
    浏览(78)
  • 社区论坛小圈子小程序源码系统:自定义小程序管理 带完整的安装代码包以及搭建教程

    移动互联网的快速发展,微信小程序作为一种新型的应用形态,已经深入到人们的生活中。特别是对于社区论坛类应用,小程序版本可以更好地满足用户快速、便捷获取信息的需求。下面罗峰给大家分享一款社区论坛小圈子小程序源码系统,带有完整的搭建教程。 以下是部分

    2024年02月02日
    浏览(46)
  • 使用vue3搭建一个CRM(客户关系管理)系统

    目录 1. 需求分析 2. 设计 3. 技术选型 4. 开发环境搭建 5. 前端开发 6. 后端开发 7. 数据库搭建 8. 测试 9. 部署 10. 维护和迭代 总结 搭建一个CRM(客户关系管理)系统是一个复杂的项目,涉及到需求分析、设计、开发、测试和部署等多个阶段。以下是一个简化的指南,帮

    2024年04月16日
    浏览(53)
  • Vue3 + Element-UI 搭建一个后台管理系统框架模板

    本文将介绍如何基于Vue3和element-ui搭建一个后台管理系统框架模板。我们将详细讲解代码流程,并提供详细的说明。 Vue3 Element-ui Axios 本文假设读者已经熟悉Vue3和Element-ui的基本使用方法,并且对Axios有一定的了解。 步骤1:创建Vue3项目 我们可以使用Vue CLI来创建一个Vue3项目,

    2023年04月26日
    浏览(122)
  • 图书管理系统(含完整代码)

    课题背景 一、主要研究内容 二、需求分析 1.功能性需求分析 2.非功能性需求分析 三、系统整体架构设计 四、相关代码 1.文件存储 1.1.存储用户信息 1.2.存储图书信息 2.密码保护 五、完整代码 1.图书借阅管理系统.py  2.user.py 3.manager.py 基于Python开发的一款图书借阅管理系统。

    2024年02月06日
    浏览(78)
  • 完整javaEE学生信息管理系统

    1.开发环境 操作系统不限:java特性,一套代码,导出运行 jdk版本不限:推荐jdk1.8 tomcat版本不限:推荐Tomcat8.0 数据库mysql:版本不限,推荐mysql8.0以下 开发工具:eclipse/idea 版本不限 2.开发框架 项目框架:servlet+jsp+mysql+layui+ajax+jquery 3.整体业务 本系统分为三种权限: 1.学生:

    2024年02月08日
    浏览(42)
  • 图书管理系统(Java实现)[附完整代码]

    作者:爱塔居的博客_CSDN博客-JavaSE领域博主 专栏:JavaSE 作者专栏:大三学生,希望跟大家一起进步! wx:csy1330748830 需要可以加,免费给。我是女孩子,别叫我哥,呜呜。 文章目录 目录 文章目录 一、图书管理系统菜单 二、实现基本框架  三、实现业务 3.1 打印所有图书  

    2023年04月23日
    浏览(39)
  • 图书管理系统(Java简单版)(完整代码+详解)

    目录 详解:  BookList类: InOperation接口  User类(父类) 和 Main类(这俩要一起看) 完整代码  book包  Book类  BookList类 operation包   AddBook类 BorrowBook类 DeleteBook类 FindBook类 PrintBook类 ReturnBook类 Exit类 InOperation接口 user包  Domestic类 Administrator类 User类  Main类  按照上图逻辑来写

    2024年02月08日
    浏览(42)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包