Flask 数据库前后端交互案例-1

news/2024/11/29 19:36:29/

Flask 数据库前后端交互案例

  • 目录结构
  • templates目录
    • base.html
    • header.html
    • left.html
    • 首页
    • 职员管理页面
    • 添加员工界面
    • 员工编辑页面
    • 员工详情界面
  • 后台
    • main.py
    • app.py
    • models.py
    • views.py
  • 数据库数据
    • position.sql
    • person.sql
    • permission.sql
    • department.sql

目录结构

在这里插入图片描述

静态文件链接:https://pan.baidu.com/s/1aapt_kPHw7Tkg0KUDQJsOg
提取码:zht1

templates目录

base.html

templates/base.html

<!DOCTYPE html>
<html lang="en"><head><meta charset="utf-8"><meta http-equiv="X-UA-Compatible" content="IE=edge"><meta name="viewport" content="width=device-width, initial-scale=1"><meta name="description" content=""><meta name="author" content=""><title>{% block title %}{% endblock %}</title><!-- Bootstrap Core CSS --><link href="static/lib/sb-admin/vendor/bootstrap/css/bootstrap.min.css" rel="stylesheet"><!-- MetisMenu CSS --><link href="static/lib/sb-admin/vendor/metisMenu/metisMenu.min.css" rel="stylesheet"><!-- Custom CSS --><link href="static/lib/sb-admin/dist/css/sb-admin-2.css" rel="stylesheet"><!-- Custom Fonts --><link href="static/lib/sb-admin/vendor/font-awesome/css/font-awesome.min.css" rel="stylesheet" type="text/css"><link href="static/css/index.css" rel="stylesheet" type="text/css"><!--[if lt IE 9]><script src="https://oss.maxcdn.com/libs/html5shiv/3.7.0/html5shiv.js"></script><script src="https://oss.maxcdn.com/libs/respond.js/1.4.2/respond.min.js"></script><![endif]--></head><body>
<div id="wrapper"><!-- Navigation --><nav class="navbar navbar-default navbar-static-top" role="navigation" style="margin-bottom: 0">{% include  'header.html' %}{% include  'left.html' %}</nav>{% block Page_Content %}{% endblock %}
</div>
<!-- jQuery -->
<script src="static/lib/sb-admin/vendor/jquery/jquery.min.js"></script><!-- Bootstrap Core JavaScript -->
<script src="static/lib/sb-admin/vendor/bootstrap/js/bootstrap.min.js"></script><!-- Metis Menu Plugin JavaScript -->
<script src="static/lib/sb-admin/vendor/metisMenu/metisMenu.min.js"></script><!-- Custom Theme JavaScript -->
<script src="static/lib/sb-admin/dist/js/sb-admin-2.js"></script><script src="static/lib/echarts/js/echarts.min.js"></script><script src="static/js/index.js"></script>
</body>
</html>

header.html

templates/header.html

<div class="navbar-header"><button type="button" class="navbar-toggle" data-toggle="collapse" data-target=".navbar-collapse"><span class="sr-only">Toggle navigation</span><span class="icon-bar"></span><span class="icon-bar"></span><span class="icon-bar"></span></button><a class="navbar-brand" href="./index.html">XXXXX考勤管理系统</a></div><!-- /.navbar-header --><ul class="nav navbar-top-links navbar-right"><li><a>欢迎:<span>{{ request.cookies.person_name}}</span></a></li><li><a href="/logout">退出</a></li><li><a href="./profile.html">个人中心</a></li></ul>

left.html

templates/left.html

<div class="navbar-default sidebar" role="navigation"><div class="sidebar-nav navbar-collapse"><ul class="nav" id="side-menu"><li><a href="/"><i class="fa fa-dashboard fa-fw"></i> 首页</a></li><li><a href="/news"><i class="fa fa-envelope-o fa-fw"></i> 新闻管理</a></li><li><a href="/permission"><i class="fa fa-table fa-fw"></i> 权限管理</a></li><li><a href="#"><i class="fa fa-bar-chart-o fa-fw"></i> 考勤管理<span class="fa arrow"></span></a><ul class="nav nav-second-level"><li><a href="/attendance_me">个人考勤</a></li><li><a href="/attendance_subordinate">下属考勤</a></li></ul></li><li><a href="#"><i class="fa fa-user fa-fw"></i> 人事管理<span class="fa arrow"></span></a><ul class="nav nav-second-level"><li><a href="/department">部门管理</a></li><li><a href="/person">职员管理</a></li></ul><!-- /.nav-second-level --></li></ul></div><!-- /.sidebar-collapse -->
</div>

首页

templates/index.html

{% extends "base.html" %}
{% block title %}首页{% endblock %}
{% block  Page_Content %}<!-- Page Content --><div id="page-wrapper"><div class="container-fluid"><div class="row"><div class="col-lg-12"><h1 class="page-header">首页</h1></div><!-- /.col-lg-12 --></div><!-- /.row --><div class="row"><div class="col-lg-12"><div id="show"></div><div class="col-lg-6"><div class="panel panel-default"><div class="panel-heading">公司新闻<a class="pull-right" href="./news.html">查看更多...</a></div><div class="panel-body"><div class="col-lg-6"><a href="./detail_news.html">XXX简介</a></div><div class="col-lg-6 text-right">2020-05-06 16:37:39</div><div class="col-lg-6"><a href="#">新闻99</a></div><div class="col-lg-6 text-right">2020-05-06 16:37:39</div><div class="col-lg-6"><a href="#">新闻98</a></div><div class="col-lg-6 text-right">2020-05-06 16:37:39</div><div class="col-lg-6"><a href="#l">新闻97</a></div><div class="col-lg-6 text-right">2020-05-06 16:37:39</div></div></div></div><div class="col-lg-6"><div class="panel panel-default"><div class="panel-heading">考勤情况<a class="pull-right" href="attendance_me.html">查看更多...</a></div><div class="panel-body"><div class="col-lg-6">摔伤了,请假3天。</div><div class="col-lg-6 text-right">已驳回</div><div class="col-lg-6">住院5</div><div class="col-lg-6 text-right">已通过</div><div class="col-lg-6">因家里有事,调休1</div><div class="col-lg-6 text-right">已驳回</div><div class="col-lg-6">请年假1</div><div class="col-lg-6 text-right">申请中</div></div></div></div></div><!-- /.col-lg-12 --></div></div><!-- /.container-fluid --></div>
{% endblock %}

在这里插入图片描述

职员管理页面

templates/person.html

{% extends "base.html" %}
{% block title %}职员管理{% endblock %}
{% block  Page_Content %}<!-- Page Content --><div id="page-wrapper"><div class="container-fluid"><div class="row"><div class="col-lg-12"><h1 class="page-header">职员管理</h1></div><!-- /.col-lg-12 --></div><!-- /.row --><div class="row"><div class="col-lg-12"><div class="row"><div class="col-lg-8">{% if  Filter==0%}<a class="btn btn-default active" href="/person?filter=all">全部</a>{% else %}<a class="btn btn-default" href="/person?filter=all">全部</a>{% endif %}{% for department in department_list %}{% if Filter==department.id %}<a class="btn btn-default active" href="/person?filter={{ department.id }}">{{ department.name }} </a>{% else %}<a class="btn btn-default" href="/person?filter={{ department.id }}">{{ department.name }} </a>{% endif %}{% endfor %}</div><form role="form" class="col-lg-3" method="get" action="/person">{% if Filter!=0 %}<input type="hidden" name="filter" value="{{ Filter }}">{% endif %}<div class="form-group input-group"><input type="text" name="search" class="form-control" placeholder="输入要搜索的雇员的名字"value=""><span class="input-group-btn"><button class="btn btn-default" type="submit"><i class="fa fa-search"></i></button></span></div></form><div class="col-lg-1"><a class="btn btn-default" href="/add_person">添加</a></div></div><div class="row"><table class="table"><thead><tr><th>职员用户名</th><th>职员部门</th><th>职员职位</th><th>操作</th></tr></thead><tbody>{% for person in person_list %}<tr><td>{{  person.nickname }}</td><td>{{ person.position.dept.name }}</td><td>{{ person.position.name }}</td><td><a class="btn btn-default" href="/detail_person?id={{ person.id }}">详情</a><a class="btn btn-default" href="/update_person?id={{ person.id }}">编辑</a><a class="btn btn-default" href="/del_person?id={{ person.id }}">删除</a></td></tr>{% endfor %}</tbody><tfoot><tr><td colspan="4"><ul class="pagination"><li class="active"><a href="#">1</a></li><li><a href="#">2</a></li><li><a href="#">3</a></li><li><a href="#">4</a></li><li><a href="#">5</a></li></ul></td></tr></tfoot></table></div></div><!-- /.col-lg-12 --></div></div><!-- /.container-fluid --></div><!-- /#page-wrapper -->
{% endblock %}

在这里插入图片描述

添加员工界面

templates/add_person.html

{% extends "base.html" %}
{% block title %}个人中心-添加{% endblock %}
{% block  Page_Content %}<!-- Page Content --><div id="page-wrapper"><div class="container-fluid"><div class="row"><div class="col-lg-12"><h1 class="page-header">个人中心-添加</h1></div><!-- /.col-lg-12 --></div><!-- /.row --><div class="row"><div class="col-lg-12"><div class="row"><p></p><form method="post" enctype="multipart/form-data" action="/add_person"><div class="form-group"><label class="control-label">用户名:</label><input class="form-control" type="text" name="username"><label class="text-primary username_error"></label></div><div class="form-group"><label class="control-label">密码:</label><input class="form-control" type="password" name="password"><label class="text-primary password_error"></label></div><div class="form-group"><label class="control-label">职位:</label><select class="form-control" name="position_id">{% for position in position_list %}<option value="{{ position.id }}">{{ position.name }}</option>{% endfor %}</select></div><div class="form-group"><button class="btn btn-primary btn-block">提交</button></div></form></div></div><!-- /.col-lg-12 --></div></div><!-- /.container-fluid --></div>
{% endblock %}

在这里插入图片描述

员工编辑页面

templates/edit_person.html

{% extends "base.html" %}
{% block title %}职员管理-编辑{% endblock %}
{% block  Page_Content %}<!-- Page Content --><div id="page-wrapper"><div class="container-fluid"><div class="row"><div class="col-lg-12"><h1 class="page-header">职员管理-编辑</h1></div><!-- /.col-lg-12 --></div><!-- /.row --><div class="row"><div class="col-lg-12"><div class="row"><p></p><form method="post" enctype="multipart/form-data" action="/update_person?id={{ person.id }}"><div class="form-group"><label class="control-label">用户名:</label><input class="form-control" type="text" name="username" value="{{ person.username}}"><label class="text-primary username_error"></label></div><div class="form-group"><label class="control-label">密码:</label><input class="form-control" type="password" name="password" value="{{person.password}}"><label class="text-primary password_error"></label></div><div class="form-group"><label class="control-label">昵称:</label><input class="form-control" type="text" name="nickname" value="{{ person.nickname }}"></div><div class="form-group"><label class="control-label">性别:</label><select class="form-control" name="gender">{% if  person.gender == '男'%}<option value="男" selected></option><option value="女"></option>{% else %}<option value="男" ></option><option value="女" selected></option>{% endif %}</select></div><div class="form-group"><label class="control-label">年龄:</label><input class="form-control" type="number" name="age" value="{{ person.age }}"></div><div class="form-group"><label class="control-label">电话:</label><input class="form-control" type="text" name="phone" value="{{ person.phone }}"></div><div class="form-group"><label class="control-label">邮箱:</label><input class="form-control" type="text" name="email" value="{{ person.email}}"></div><div class="form-group"><label class="control-label">头像:</label><input type="file" name="photo"></div><div class="form-group"><label class="control-label">地址:</label><textarea class="form-control" name="address">{{ person.address }}</textarea></div><div class="form-group"><label class="control-label">职位:</label><select class="form-control" name="position_id">{% for position in position_list %}{% if  person.position.id==loop.index%}<option value="{{ position.id }}" selected>{{ position.name }}</option>{% else  %}<option value="{{ position.id }}">{{ position.name }}</option>{% endif %}{% endfor %}</select></div><div class="form-group"><button class="btn btn-primary btn-block">提交</button></div></form></div></div><!-- /.col-lg-12 --></div></div><!-- /.container-fluid --></div>{% endblock %}

在这里插入图片描述

员工详情界面

templates/detail_person.html


{% extends "base.html" %}
{% block title %}职员管理-详情{% endblock %}
{% block  Page_Content %}
<!-- Page Content --><div id="page-wrapper"><div class="container-fluid"><div class="row"><div class="col-lg-12"><h1 class="page-header">职员管理-详情</h1></div><!-- /.col-lg-12 --></div><!-- /.row --><div class="row"><div class="col-lg-12"><div class="row"><table class="table"><tr><td>用户名</td><td>{{person.username}}</td></tr><tr><td>密码</td><td>{{person.password}}</td></tr><tr><td>昵称</td><td>{{person.nickname}}</td></tr><tr><td>性别</td><td>{{person.gender}}</td></tr><tr><td>年龄</td><td>{{person.age}}</td></tr><tr><td>工号</td><td>{{person.workid}}</td></tr><tr><td>电话</td><td>{{person.phone}}</td></tr><tr><td>邮箱</td><td>{{person.email}}</td></tr><tr><td>照片</td><td>{{person.photo}}</td></tr><tr><td>地址</td><td>{{person.address}}</td></tr><tr><td>绩效</td><td>{{person.score}}</td></tr><tr><td>职位</td><td>{{  person.position.name    }}</td></tr><tr><td>部门</td><td>{{ person.position.dept.name }}</td></tr></table></div></div><!-- /.col-lg-12 --></div></div><!-- /.container-fluid --></div>
{% endblock %}

在这里插入图片描述

后台

main.py

#控制文件
from app import app
from models import db
from views import *if __name__ == '__main__':# 删除所有表# db.drop_all()# 创建所有表db.create_all()app.run(debug=True)

app.py

import os
from flask import Flask,request
from flask import render_template,redirect
# 引入表格模块
from flask_sqlalchemy import SQLAlchemy
#导入pymysql
import pymysql
#用pymysql 代替 MySqldb
pymysql.install_as_MySQLdb()
app=Flask(__name__)
# 获取文件路径
BASE_DIR=os.path.abspath(os.path.dirname(__file__))
# 配置数据库sqlite
app.config['SQLALCHEMY_DATABASE_URI']='sqlite:///'+os.path.join(BASE_DIR,'sqlite3.db')
#配置数据库mysql
# app.config['SQLALCHEMY_DATABASE_URI']='mysql://root:root@127.0.0.1:3306/test'
# 创建一个父类让python中的类去继承 就可映射成表格
db=SQLAlchemy(app)

models.py

#存放类模块
from app import db
#抽象父类
class Base(db.Model):__abstract__=Trueid = db.Column(db.INT, primary_key=True, autoincrement=True)#添加员工def save(self):# 保存对象db.session.add(self)# 提交事务db.session.commit()def updte(self):db.session.commit()def delete(self):# 删除对象db.session.delete(self)# 提交事务db.session.commit()
#职位
class Position(Base):__tablename__="position"name=db.Column(db.String(32)) #职位名称level=db.Column(db.Integer)  #级别#关系属性#为了查询方便,flask提供了关系属性,为了方便查询,但是不会在数据库中生成相应的字段persons=db.relationship("Person",backref='position')department_id=db.Column(db.Integer,db.ForeignKey("department.id"))#当知道职位查询所有的员工时,通过 职位对象.persons就可以获得所有的员工# 当员工查询对应的职位的时候,通过 员工对象.position就可获得对应的职位
# 职员
class Person(Base):"""雇员表"""__tablename__ = "person"username = db.Column(db.VARCHAR(100))password = db.Column(db.VARCHAR(64))nickname = db.Column(db.String(64), nullable=True)  # 昵称gender = db.Column(db.String(8), nullable=True)  # 性别age = db.Column(db.Integer, nullable=True)  # 年龄workid = db.Column(db.String(32), nullable=True)  # 工号phone = db.Column(db.String(64), nullable=True)  # 电话email = db.Column(db.String(64), nullable=True)  # 邮箱photo = db.Column(db.String(64), nullable=True)  # 照片address = db.Column(db.Text, nullable=True)  # 地址score = db.Column(db.Float, nullable=True)  # 绩效#关系属性#职位和员工一对多关系position_id=db.Column(db.Integer,db.ForeignKey("position.id"))
#职位与权限中间表
permission_position=db.Table('permission_position',db.Column("id",db.Integer,primary_key=True,autoincrement=True),db.Column("position_id",db.Integer,db.ForeignKey("position.id")), #关联positiondb.Column("permission_id",db.Integer,db.ForeignKey("permission.id")), #关联permission
)
#权限表
class Permission(Base):__tablename__="permission"name=db.Column(db.String(32)) #权限名称desc=db.Column(db.String(128)) #权限描述#关系属性positions=db.relationship('Position',# 和模型类进行关联backref='permissions',secondary=permission_position)
#部门表
class Department(Base):__tablename__='department'#实体属性name=db.Column(db.String(32))description=db.Column(db.String(128))#关系属性positions=db.relationship('Position',backref='dept')

views.py

python">from  app import *
from models import *
import hashlib
import time
from  functools import wraps
from flask import request
# 登录装饰器
def Login_Decorator(func):@wraps(func)def inner():person_name = request.cookies.get('person_name')if person_name:return func()else:return redirect('login')return inner
@app.route('/')
@Login_Decorator
def index():return render_template('index.html')
# 职员管理
@app.route('/person')
@Login_Decorator
def person():res=request.args.get("filter")print(res)search=request.args.get("search")department_list = Department.query.all()flag = Falseif res=="all" or res==None:Filter=0person_list = Person.query.all()else:flag=TrueFilter=int(res)pos_list=Position.query.filter(Position.department_id==Filter).all()person_list=[ps for person in pos_list for ps in person.persons] #遍历所有部门的成员存入字典if search!=None:if flag:person_list=[person for person in person_list if search in person.nickname]else:person_list=Person.query.filter(Person.nickname.like("%"+search+"%")).all()return render_template("person.html",**locals())
# 添加员工
@app.route('/add_person',methods=["GET","POST"])
def add_person():if request.method=="GET":position_list=Position.query.all()return render_template("add_person.html",position_list=position_list)else:username=request.form.get("username")password=hashlib.md5(request.form.get("password").encode()).hexdigest() #md5进行加密position_id=request.form.get("position_id")user=Person(username=username,password=password,position_id=position_id)user.save()return redirect("/person")# 删除员工
@app.route('/del_person')
@Login_Decorator
def del_person():id=request.args.get('id')person=Person.query.get(id)person.delete()return redirect("/person")# 编辑员工
@app.route('/update_person',methods=["GET","POST"])
@Login_Decorator
def update_person():id = request.args.get('id')person = Person.query.get(id)if request.method=="GET":position_list = Position.query.all()return render_template("edit_person.html",**locals())else:username=request.form.get("username")password=hashlib.md5(request.form.get("password").encode()).hexdigest() #md5进行加密nickname=request.form.get("nickname")gender=request.form.get("gender")age=request.form.get("age")phone=request.form.get("phone")email=request.form.get("email")adress=request.form.get("address")position_id=request.form.get("position_id")#文件保存photo=request.files.get("photo")if len(photo.filename)!=0:#替换成新图片时删除以前图片,并判断是否是第一次添加print(person.photo.startswith("/static/"))if person.photo.startswith("/static/"):os.remove(BASE_DIR+person.photo)path=os.path.join(BASE_DIR,"static/img",photo.filename)photo.save(path)photo_name="/static/img/"+photo.filenameelse:photo_name = person.photoperson.username=usernameperson.password=passwordperson.nickname=nicknameperson.gender=genderperson.age=ageperson.phone=phoneperson.email=emailperson.adress=adressperson.photo=photo_nameperson.position_id=position_idperson.updte()return redirect("/person")#员工详情
@app.route('/detail_person')
@Login_Decorator
def detail_person():id = request.args.get('id')person = Person.query.get(id)return render_template("detail_person.html", person=person)#登录
@app.route('/login', methods=['GET', 'POST'])
def login():msg = ''print("asd")if request.method == 'POST':# 1.获取用户名和密码username = request.form.get('username')password=hashlib.md5(request.form.get("password").encode()).hexdigest()# 2.查询数据库 (用户名和密码)person_obj = Person.query.filter(Person.username == username, Person.password == password).first()# 3.判断if person_obj:# (1).正确 --->> 重定向到首页response = redirect('/')# 4.将用户名保存到cookie中,用于首页显示response.set_cookie('person_name', person_obj.nickname)return response# (2).错误--->> 提示错误信息msg = '用户名或者密码错误'# get方式或者用户名校验失败后返回登录页面return render_template('login.html', msg=msg)#登录退出
@app.route('/logout')
@Login_Decorator
def logout():response = redirect('/login')# 1.清除所有的cookieresponse.delete_cookie('person_name')# 2.重定向到登录界面return response

数据库数据

在这里插入图片描述

position.sql

INSERT INTO "position"("id", "name", "level", "department_id") VALUES (1, '市场部_部长', 1, 1);
INSERT INTO "position"("id", "name", "level", "department_id") VALUES (2, '市场部_主任', 2, 1);
INSERT INTO "position"("id", "name", "level", "department_id") VALUES (3, '人事部_部长', 3, 5);
INSERT INTO "position"("id", "name", "level", "department_id") VALUES (4, '人事部_主任', 4, 5);
INSERT INTO "position"("id", "name", "level", "department_id") VALUES (5, '技术部_部长', 5, 2);
INSERT INTO "position"("id", "name", "level", "department_id") VALUES (6, '技术部_主任', 6, 2);
INSERT INTO "position"("id", "name", "level", "department_id") VALUES (7, '新媒体部_部长', 7, 4);
INSERT INTO "position"("id", "name", "level", "department_id") VALUES (8, '新媒体部_主任', 8, 4);
INSERT INTO "position"("id", "name", "level", "department_id") VALUES (9, '财务部_部长', 9, 3);
INSERT INTO "position"("id", "name", "level", "department_id") VALUES (10, '财务部_主任', 10, 3);

person.sql

INSERT INTO "position"("id", "name", "level", "department_id") VALUES (1, '市场部_部长', 1, 1);
INSERT INTO "position"("id", "name", "level", "department_id") VALUES (2, '市场部_主任', 2, 1);
INSERT INTO "position"("id", "name", "level", "department_id") VALUES (3, '人事部_部长', 3, 5);
INSERT INTO "position"("id", "name", "level", "department_id") VALUES (4, '人事部_主任', 4, 5);
INSERT INTO "position"("id", "name", "level", "department_id") VALUES (5, '技术部_部长', 5, 2);
INSERT INTO "position"("id", "name", "level", "department_id") VALUES (6, '技术部_主任', 6, 2);
INSERT INTO "position"("id", "name", "level", "department_id") VALUES (7, '新媒体部_部长', 7, 4);
INSERT INTO "position"("id", "name", "level", "department_id") VALUES (8, '新媒体部_主任', 8, 4);
INSERT INTO "position"("id", "name", "level", "department_id") VALUES (9, '财务部_部长', 9, 3);
INSERT INTO "position"("id", "name", "level", "department_id") VALUES (10, '财务部_主任', 10, 3);

permission.sql

INSERT INTO "permission"("id", "name", "desc") VALUES (1, '新闻管理', '对新闻进行增删改查');
INSERT INTO "permission"("id", "name", "desc") VALUES (2, '人事管理', '对人事进行增删改查');
INSERT INTO "permission"("id", "name", "desc") VALUES (3, '考勤管理', '对考勤进行增删改查');
INSERT INTO "permission"("id", "name", "desc") VALUES (4, '权限管理', '对权限进行增删改查');

department.sql

INSERT INTO "department"("id", "name", "description") VALUES (1, '市场部', '负责市场相关');
INSERT INTO "department"("id", "name", "description") VALUES (2, '技术部', '负责技术相关');
INSERT INTO "department"("id", "name", "description") VALUES (3, '财务部', '负责财务相关');
INSERT INTO "department"("id", "name", "description") VALUES (4, '新媒体部', '负责新媒体相关');
INSERT INTO "department"("id", "name", "description") VALUES (5, '人事部', '负责人事相关');




    http://www.ppmy.cn/news/1431283.html

    相关文章

    代码随想录第43天|1049.最后一块石头的重量II 494. 目标和

    1049.最后一块石头的重量II 1049. 最后一块石头的重量 II - 力扣&#xff08;LeetCode&#xff09; 代码随想录 (programmercarl.com) 动态规划之背包问题&#xff0c;这个背包最多能装多少&#xff1f;LeetCode&#xff1a;1049.最后一块石头的重量II_哔哩哔哩_bilibili 有…

    南京邮电大学数学实验A 作业5 函数与方程 答案 | 《MATLAB数学实验》第三版 第四章 课后习题答案

    若要获得更好的阅读体验&#xff0c;请前往 链接。 求点赞 求点赞 求点赞。 1(课本习题1) 求下列多项式的所有根&#xff0c;并验算&#xff1a; (1) x 2 x 1 x^{2} x 1 x2x1; (2) 3 x 5 − 4 x 3 2 x − 1 3x^{5} - 4x^{3} 2x - 1 3x5−4x32x−1; (3) 5 x 23 −…

    深入解析操作系统

    1. 前言 本文旨在全面解析操作系统的概念、功能、类型以及其在现代计算机系统中的重要性。通过深入剖析操作系统的资源管理、进程管理、内存管理、文件管理和设备管理等核心功能&#xff0c;并结合实际案例&#xff0c;展现操作系统如何优化计算机性能、提高用户体验并促进多任…

    【JavaSE启航篇 02】Java的诞生:从默默无名的Oak到全球化的Java

    文章目录 【JavaSE那些年专栏 02】Java语言的诞生&#xff1a;Oak的创始、JDK版本迭代与Java的全球化01 Java 发展历史1.1 Java的诞生与早期发展1.2 Java技术的推广与普及1.3 Java技术的里程碑版本1.4 企业级J2EE崛起1.5 JDK与JVM迭代优化1.6 Java的商业化与Oracle的收购1.7 Ja…

    Ubuntu-18.04本地化部署Rustdesk服务器

    提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 文章目录 前言一、配置防火墙二、安装三大件1.下载三大件2.安装三大件 三、安装客户端1.下载客户端1.Windows2.Linux 四、配置客户端连接服务器五、总结 前言 如果你是想数据…

    00_Qt概述以及如何创建一个QT新项目

    Qt概述 1.Qt概述1.1 什么是Qt1.2 Qt的发展史1.3 支持的平台1.4 Qt版本1.5 Qt的下载与安装1.6 Qt的优点 2.QT新项目创建3.pro文件4.主函数5.代码命名规范和快捷键 1.Qt概述 1.1 什么是Qt Qt是一个跨平台的C图形用户界面应用程序框架。它为应用程序开发者提供建立艺术级图形界面…

    【Linux系统化学习】线程互斥 | 互斥量(锁)

    目录 多线程抢票问题 对问题的解释 代码的原子性 线程互斥 上述问题的解决方法 相关概念 互斥量&#xff08;锁&#xff09; 锁的定义和初始化 锁的销毁 加锁和解锁 加锁注意事项 使用锁注意事项 锁的原理 可重入与线程安全 概念 常见线程不安全的情况 常见线…

    Vs Code npm install 报错解决方法

    用的人家的前端框架发现是封装过的&#xff0c;要修改人家前端的话还得把前端源码放在Vs Code 上运行&#xff0c;后端放在IDEA上运行&#xff0c;然后前后端并行开发&#xff0c;在配置前端环境时遇到&#xff1a; npm install 这个的原因是我把node下载到D盘了权限不够框框爆…