学生信息管理系统--修改信息(非常详细的修改,更新,撤销,删除逻辑)

目录

  • 概述
    • 修改包括的操作
    • 修改在每个模块中的应用
  • 详解
    • 修改与更新
    • 取消
    • 删除
  • 特殊概念
    • 数据集
    • 游标
  • 总结

概述

    学生信息管理系统,功能相对简单且代码重复性高,应该采用复用的思想来减少代码的冗余和提高代码的可维护性。然而,对于基础入门项目来说,理解并实现增删改查(CRUD)操作是非常重要的第一步。今天,主要聚焦于“改”这一操作,即修改功能。

修改功能通常涉及以下几个关键步骤:

  • 数据展示:首先,系统需要展示给用户当前的数据状态,以便用户能够识别需要修改的内容。这通常是通过读取数据库中的数据并将其展示在界面上来实现的。

  • 编辑界面:然后,系统需要提供一个编辑界面,允许用户输入新的数据以替换旧的数据。这个界面可以是一个表单,其中包含了需要修改的字段和对应的输入框。

  • 数据验证:在用户提交修改之前,系统应该进行数据验证,确保用户输入的数据是合法和有效的。这可以包括检查数据类型、长度、格式等。

  • 数据更新:一旦数据验证通过,系统就需要将新的数据保存到数据库中,以更新原有的记录。这通常是通过执行一个数据库更新操作来实现的。

  • 反馈与确认:最后,系统应该向用户反馈修改操作的结果,告诉用户修改是否成功。如果修改成功,系统还可以展示更新后的数据状态,以便用户确认。

修改包括的操作

    修改功能在学生信息管理系统中是一个核心组成部分,它涵盖了多个关键操作,包括修改、更新、取消修改和删除。这些操作共同确保系统数据的准确性和完整性,同时也为用户提供了灵活的数据维护手段。

  • 修改操作允许用户对现有数据进行编辑,以适应新的需求或更正错误。这可以是对学生基本信息的调整、课程内容的更新,或是成绩的更正等。

  • 更新操作则是将修改后的数据保存到系统中,使更改生效。在修改完成后,用户需要执行更新操作,以确保系统记录的是最新的、准确的数据。更新操作是修改功能中不可或缺的一环,它确保了数据的一致性和可靠性。

  • 取消修改操作为用户提供了一种在修改过程中撤销更改的机制。如果用户在编辑数据时发生错误或决定不保存更改,可以通过取消修改操作恢复到之前的状态。这一功能有助于减少误操作带来的风险,提高数据维护的效率和准确性。

  • 删除操作则是用于移除不再需要的数据。在某些情况下,如学生退学、课程停开等,可能需要删除相关的数据记录。然而,删除操作需要谨慎进行,以避免造成数据丢失或破坏数据完整性。在删除数据之前,系统会要求用户进行确认,以确保数据的安全性和可恢复性。

修改在每个模块中的应用

上述操作在学生信息管理系统中,在每个模块中都有其特定的应用场景。

  • 用户模块修改:允许用户修改密码等。

  • 学籍模块修改:允许管理员修改学生的学籍信息,如学号、出生日期、家庭住址、入学年份等。

  • 课程模块修改:允许管理员编辑课程的基本信息,如课程编号、课程名称、描述、类型等。

  • 班级模块修改:允许管理员编辑班级的基本信息,如班号、年级、班主任、教室等。

  • 成绩模块修改:管理员可以修改学生的成绩信息,如班级、姓名、课程、分数等,以纠正错误或根据新的评定标准进行调整。

详解

修改与更新

先看下页面,更新在修改信息页面
在这里插入图片描述
    这里其实设计的有点奇怪,“修改”按钮的事件中并不包含实际的修改逻辑,而真正的修改逻辑却放在了“更新”按钮的事件中。这种设计的初衷是将修改过程分为两个阶段:

1、首先是准备阶段(通过“修改”按钮触发),用户可以在此阶段输入要修改的内容;
2、然后是提交阶段(通过“更新”按钮触发),实际的数据修改逻辑在这个阶段执行。
    用户先通过“修改”按钮进入修改模式,然后才能通过“更新”按钮提交修改。这可以作为一种权限控制的手段,确保用户在进行数据修改之前已经获得了必要的授权。
    另外一点,因为系统支持撤销功能,那么将修改逻辑与更新逻辑分开有助于实现这些功能。用户可以通过“修改”按钮进行多次修改,并通过“更新”按钮一次性提交所有修改,或者选择撤销某些修改。

    但是这里仍然会导致一些混淆或不一致的用户体验
    为了避免混淆,命名应该明确,如果“修改”按钮实际上只是进入修改模式或选择修改内容,那么可以考虑将其命名为“编辑”或“进入修改模式”等更明确的名称。

接下来看一下修改记录和更新记录按钮的流程图
在这里插入图片描述
修改功能

Private Sub editCommand_Click()
'标志修改
mcclean = True
Frame2.Enabled = False
'是移动记录按钮失效
    firstCommand.Enabled = False
    previousCommand.Enabled = False
    nextCommand.Enabled = False
    lastCommand.Enabled = False
'使各个文本框有效
    txtSID.Enabled = True
    txtName.Enabled = True
    comboSex.Enabled = True
    txtBorndate.Enabled = True
    comboClassNo.Enabled = True
    txtRudate.Enabled = True
    txtTel.Enabled = True
    txtAddress.Enabled = True
    txtComment.Enabled = True
    
    updateCommand.Enabled = True
cancelCommand.Enabled = True
'记下当前记录位置
    myBookmark = mrc.Bookmark
    
End Sub

    写过添加数据之后,会发现更新和添加数据的逻辑有一定的相似性,它们都涉及到对数据的验证、处理和存储等步骤。现在把更新和添加数据放在一起说下常见的逻辑步骤:

1、判空:
在更新和添加数据之前,需要对输入的数据进行非空检查,确保关键字段或信息不为空。
如果发现有必填字段为空,需要提示用户进行填写或者进行相应的错误处理。

2、数据格式检验:
对于输入的数据,需要进行格式验证,包括数据类型、长度、范围等方面的检查。
确保数据格式符合预期,避免因数据格式错误引发的问题。

3、重复检查:
在添加新数据时,需要检查是否存在重复记录,避免数据重复导致信息不一致或冲突。
在更新数据时,也可以先进行重复性检查,确保更新的数据不会与已有数据产生重复。(这里新创建了一个局部数据集对象,避免和全局定义的数据集对象产生冲突,“使用局部变量而非全局变量是一个良好的编程实践”)

4、删除旧记录:
在更新数据时,这里采用的是先删除旧的记录,然后再添加新的数据,以确保数据的一致性和准确性。(添加数据没有这一步)

5、添加新记录:
最后一步是将新的数据记录添加到数据库中,确保更新或添加操作完成。
添加新记录时,需要保证数据的完整性和准确性,同时记录相关的操作日志以便追溯。

代码如下

Private Sub updateCommand_Click()

Dim txtSQL As String
Dim MsgText As String
Dim mrcc As ADODB.Recordset
'mcclean标志是否修改,没有修改就弹出消息
    If Not mcclean Then
        MsgBox "请先修改学籍信息", vbOKOnly + vbExclamation, "警告"
        Exit Sub
    End If
    
'检查输入框是否为空,Testtxt如果为空就返回false
    If Not Testtxt(txtSID.Text) Then
        MsgBox "请输入学号", vbOKOnly + vbExclamation, "警告"
        txtSID.SetFocus
        Exit Sub
    End If
    
    If Not Testtxt(txtName.Text) Then
        MsgBox "请输入姓名", vbOKOnly + vbExclamation, "警告"
        txtName.SetFocus
            Exit Sub
    End If
    
    If Not Testtxt(comboSex.Text) Then
        MsgBox "请选择性别!", vbOKOnly + vbExclamation, "警告"
        comboSex.SetFocus
        Exit Sub
    End If
    
    If Not Testtxt(txtBorndate.Text) Then
        MsgBox "请输入出生日期!", vbOKOnly + vbExclamation, "警告"
        txtBorndate.SetFocus
        Exit Sub
    End If
    
    If Not Testtxt(comboClassNo.Text) Then
        MsgBox "请选择班号!", vbOKOnly + vbExclamation, "警告"
        comboClassNo.SetFocus
        Exit Sub
    End If
    
    If Not Testtxt(txtTel.Text) Then
        MsgBox "请输入联系电话!", vbOKOnly + vbExclamation, "警告"
        txtTel.SetFocus
        Exit Sub
    End If
    
    If Not Testtxt(txtRudate.Text) Then
        MsgBox "请输入入校日期!", vbOKOnly + vbExclamation, "警告"
        txtRudate.SetFocus
        Exit Sub
    End If
    
    If Not Testtxt(txtAddress.Text) Then
        MsgBox "请输入家庭住址!", vbOKOnly + vbExclamation, "警告"
        txtAddress.SetFocus
        Exit Sub
    End If
    
    '再判断学号,应为数字
    If Not IsNumeric(Trim(txtSID.Text)) Then
        MsgBox "学号请输入数字!", vbOKOnly + vbExclamation, "警告"
        txtSID.SetFocus
        Exit Sub
        
    End If
    
     If Not IsDate(txtBorndate.Text) Then
            MsgBox "出生时间应输入日期格式(yyyy-mm-dd)!", vbOKOnly + vbExclamation, "警告"
            txtBorndate.SetFocus
            Exit Sub
            
    End If
    
    If Not IsDate(txtRudate.Text) Then
                MsgBox "入校时间应输入日期格式(yyyy-mm-dd)!", vbOKOnly + vbExclamation, "警告"
                txtRudate.SetFocus
           Exit Sub
            
    End If
    '删除当前记录,刚才修改数据的时候将数据库里数据都加载到临时表中,此刻要先删除
    
    mrc.Delete
    '判断学号是否重复 ,Trim(txtSID.Text)!!!!!!!!!!!!
    
   txtSQL = "select * from student_Info where student_ID = '" & Trim(txtSID.Text) & "'"
    Set mrcc = ExecuteSQL(txtSQL, MsgText)
    If mrcc.EOF = False Then
        MsgBox "学号重复,请重新输入!", vbOKOnly + vbExclamation, "警告"
        mrcc.Close
        txtSID.SetFocus
    Else
        mrcc.Close
         '判断出生日期
        
        '判断入校日期
           'txtBorndate = Format(txtBorndate, "yyyy-mm-dd")
            
               ' txtRudate = Format(txtRudate, "yyyy-mm-dd")
                 '更新记录,游标在新记录位置
                                
                mrc.AddNew
                mrc.Fields(0) = Trim(txtSID.Text)
                mrc.Fields(1) = Trim(txtName.Text)
                mrc.Fields(2) = Trim(comboSex.Text)
                mrc.Fields(3) = Trim(txtBorndate.Text)
                mrc.Fields(4) = Trim(comboClassNo.Text)
                mrc.Fields(5) = Trim(txtTel.Text)
                mrc.Fields(6) = Trim(txtRudate.Text)
                mrc.Fields(7) = Trim(txtAddress.Text)
                mrc.Fields(8) = Trim(txtComment.Text)
                mrc.Update
                MsgBox "修改学籍信息成功!", vbOKOnly + vbExclamation, "修改学籍信息"
                
                mrc.Bookmark = myBookmark
                Call viewData
                
                '恢复移动按钮
                Frame2.Enabled = True                          '使导航按钮有效
                firstCommand.Enabled = True
                previousCommand.Enabled = True
                nextCommand.Enabled = True
                lastCommand.Enabled = True
                
                '修改完编辑按钮就失效了
                txtSID.Enabled = False                         '使输入框失效
                txtName.Enabled = False
                comboSex.Enabled = False
                txtBorndate.Enabled = False
                comboClassNo.Enabled = False
                txtRudate.Enabled = False
                txtTel.Enabled = False
                txtAddress.Enabled = False
                txtComment.Enabled = False
                
                '取消编辑状态
                
                mcclean = False
            End If
       
    
    
                            
End Sub

取消

    取消修改功能通常指的是在编辑或修改某个数据项的过程中,提供了一个选项让用户能够撤销他们的更改,返回到原始状态。取消修改功能其实只能取消没有更新之前的操作,什么意思呢,就是点击修改按钮,然后修改内容,这个时候点击取消修改就可以恢复到没有修改之前的样子,但是一旦点击了更新按钮,也就是将修改之后的数据同步到数据库之后就没办法再取消修改了。

这里分析一下:
    修改内容但未更新:用户点击“修改”按钮,开始编辑数据。用户可以修改内容,但此时所做的更改仅存在于客户端或应用程序的临时状态中,尚未保存到数据库。如果用户决定不想保留这些更改,可以点击“取消修改”按钮。此时,应用程序会丢弃临时状态中的更改,并恢复到原始数据,也就是用户在点击“修改”按钮之前看到的状态。

    点击更新按钮:一旦用户点击“更新”按钮,应用程序会将临时状态中的更改同步到数据库。一旦数据被保存到数据库,它就成为了“官方”或“永久”记录,除非进行新的更新或删除操作,否则它不会改变。

    为什么更新后不能取消修改?
    数据库的设计初衷之一就是确保数据的持久性和一致性。一旦数据被保存到数据库,它就被视为一个不可变的记录,除非有新的操作来改变它。
    取消修改功能只能作用于尚未提交到数据库的更改。一旦数据被更新,撤销这些更改就需要一个明确的“回滚”操作或新的更新操作来恢复旧的数据。
    如果允许在更新后还能简单地取消修改,那么数据库中的数据将变得不可靠,因为用户可以随意更改和撤销他们的操作,这可能导致数据不一致和其他问题。
    因此,一旦数据被更新到数据库,用户通常需要通过其他机制(如版本控制、备份、恢复操作或新的编辑/更新)来管理数据的变更。这确保了数据的完整性和可审计性,使得系统能够可靠地跟踪和记录数据的所有变更。

取消修改代码:

Private Sub cancelCommand_Click()
'判断是否处于修改状态
If mcclean Then
    '使各个按钮有效
     Frame2.Enabled = True
        firstCommand.Enabled = True
        previousCommand.Enabled = True
        nextCommand.Enabled = True
        lastCommand.Enabled = True
        
         '使输入框变为无效
            
        txtSID.Enabled = False
        txtName.Enabled = False
        comboSex.Enabled = False
        txtBorndate.Enabled = False
        comboClassNo.Enabled = False
        txtRudate.Enabled = False
        txtTel.Enabled = False
        txtAddress.Enabled = False
        txtComment.Enabled = False
    mrc.Bookmark = myBookmark
    
    Call viewData
Else
    MsgBox "什么都没有修改,有什么好取消的!", vbOKOnly + vbExclamation, "警告"
End If
    
    

End Sub

删除

在这里插入图片描述

Private Sub deleteCommand_Click()
Dim str2 As Integer
'保存了当前记录集的书签值,即当前游标所指向记录的位置。以便稍后可能需要回到这个位置。
   myBookmark = mrc.Bookmark
    str2 = MsgBox("是否删除当前记录?", vbOKCancel, "删除当前记录")
    
    If str2 = vbOK Then
            mrc.MoveNext
            If mrc.EOF Then       '检查是否已到达记录集的末尾。
            '如果删除的是最后一条记录,就移动到第一条记录,然后再移到最后一条记录,把它删了
                mrc.MoveFirst
                myBookmark = mrc.Bookmark
                mrc.MoveLast
                mrc.Delete
                mrc.Bookmark = myBookmark
                Call viewData
                 MsgBox "删除成功"
            Else
                myBookmark = mrc.Bookmark
                mrc.MovePrevious
                mrc.Delete
                mrc.Bookmark = myBookmark
                Call viewData
                MsgBox "删除成功"
            End If
    Else
        mrc.Bookmark = myBookmark
        Call viewData
    End If
End Sub

    删除逻辑较为难理解的是游标,在处理记录集(Recordset)时,代码中涉及到了保存游标位置(书签值)以及在执行某些操作后恢复这个位置。下面分析一下代码的逻辑:

保存书签值:

myBookmark = mrc.Bookmark

    将当前记录的书签值(即游标位置)保存到变量myBookmark中。书签值是一个唯一标识记录集中特定记录的标识符,可以用来快速定位到特定的记录。

弹出消息框询问用户:

str2 = MsgBox("是否删除当前记录?", vbOKCancel, "删除当前记录")

    这里弹出一个消息框询问用户是否要删除当前记录。如果用户点击“OK”,则str2的值为vbOK;如果用户点击“取消”,则str2的值为vbCancel。

删除当前记录的逻辑:
    如果用户选择删除当前记录(即str2 = vbOK),则代码进入删除逻辑。

    首先,尝试将游标移动到下一条记录(mrc.MoveNext)。
    然后检查是否到达记录集的末尾(mrc.EOF)。
    如果到达末尾,意味着当前记录是最后一条记录。此时,代码先将游标移动到第一条记录,保存其书签值,然后移动到最后一条记录并删除它。删除后,恢复书签值到最初保存的位置,并调用viewData过程来刷新视图。
    如果没有到达末尾,说明当前记录不是最后一条。此时,代码保存当前记录的书签值,将游标移回前一条记录(即当前要删除的记录),删除它,然后恢复书签值到最初保存的位置,并调用viewData过程来刷新视图。

恢复书签值:
    在删除操作后,代码通过以下语句恢复书签值:

mrc.Bookmark = myBookmark

    这会将游标定位回之前保存的位置,确保用户可以看到更新后的记录集。

    如果用户选择不删除:
    如果用户点击了“取消”按钮,代码将游标直接定位回之前保存的书签值,并调用viewData过程来刷新视图,保持当前记录集不变。

    通过保存和恢复书签值,代码能够确保在执行删除操作后,用户视图能够保持在一个可预测和一致的状态。这对于维护用户界面的稳定性和用户体验的连贯性是非常重要的。

特殊概念

数据集

    数据集(通常指的是ADO(ActiveX Data Objects)记录集,即Recordset对象)是用于存储从数据库检索到的数据的一个内存中的对象。它可以包含多行数据,每行数据由多个字段组成。通过Recordset对象,您可以查询、浏览、编辑和更新数据库中的数据。

  • 用途:主要用于从关系型数据库检索数据,并在内存中提供一个表示这些数据的对象。用户可以通过这个对象来浏览、编辑和更新数据。
  • 生命周期:通常与特定的数据库操作或用户会话绑定。一旦操作完成或会话结束,数据集对象通常会被销毁。
  • 数据范围:通常包含从数据库查询返回的一组记录。
  • 缓存特性:虽然数据集对象在内存中存储数据,但它们并不是为了缓存而设计的。它们的主要目的是提供对数据库数据的方便访问,而不是为了长期存储或高性能访问。

    这里主要说一下代码中用到的数据集对象的增删改方法:

  • 增加(添加)数据:
        使用AddNew方法添加新记录到Recordset对象中。然后,为Recordset对象的新记录字段分配值。完成所有必要的字段赋值后,调用Update方法提交更改,将新记录保存到数据库中。

  • 删除数据:
        首先,定位到要删除的记录。这可以通过Find方法、Move方法(如MoveFirst、MoveNext等)或直接在循环中遍历记录来实现。
    一旦定位到要删除的记录,调用Delete方法标记该记录为删除状态。然后,调用Update或UpdateBatch方法(取决于是否使用了批处理模式)来提交删除操作到数据库。

  • 修改(更新)数据:
        类似于删除操作,首先定位到要修改的记录。
    修改Recordset对象当前记录的字段值。
        调用Update方法提交更改,将修改后的记录保存到数据库中。
    在进行增删改操作时,务必注意错误处理和事务管理。错误处理可以确保在发生错误时能够适当地回滚操作或通知用户。事务管理可以确保数据的完整性和一致性,尤其是在进行多个相关的数据库操作时。

此外,数据集对象本身并不直接存储数据,而是作为数据库和应用程序之间的一个接口或桥梁。实际的数据存储和检索操作是在数据库层面进行的,而数据集对象则提供了在应用程序中操作这些数据的方法。

游标

    游标在数据库处理中确实是一个复杂但重要的概念,尤其是在处理需要逐行读取或操作的数据时。

    游标是一种用于遍历查询结果集的数据库对象。它允许应用程序对结果集中的每一行进行单独的处理,而不是一次性处理整个结果集。游标的一个重要特性是它能够记住它在结果集中的当前位置,这通常是通过内部机制来记录游标的位置来实现的。
    游标在遍历结果集时,会跟踪当前指向的是哪一行。这样,从结果集中检索数据或进行其他操作时,游标知道从哪里开始。这种位置记录是游标能够正常工作的关键部分。
    在某些情况下,可能希望游标能够回到之前的位置,以便重新处理或检查某些数据。虽然不是所有游标都支持这种“回滚”或“恢复位置”的功能,但某些高级的游标实现可能提供了这样的能力。这通常涉及到在内部维护一个位置栈或类似机制,以便可以回退到之前的位置。

    需要注意的是,游标的使用应该谨慎,因为它们可能会增加系统的开销和复杂性。在可能的情况下,最好使用集合操作来处理数据,因为集合操作通常比逐行处理更高效。但是,当需要逐行读取或修改数据时,游标就变得非常有用。

总结

    本文主要针对学生信息管理系统中的“修改信息”功能进行详尽的介绍,深入探讨其更新、撤销、删除等操作的逻辑实现,旨在为小伙伴们提供全面而细致的参考。

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

SQL数据库和事务管理器在工业生产中的应用

本文介绍了关系数据库在工业生产中的应用以及如何使用事务管理器将生产参数下载到PLC,以简化OT/IT融合过程。 一 什么是配方(Recipe) 我们以一家汽车零件制造商的应用举例,该企业专业从事汽车轮毂生产制造。假设该轮毂的型号是“…

echart trigger 为 axis 的时候不显示 tooltip 解决办法

echart trigger 为 axis 的时候不显示 tooltip 解决办法 在项目 vitetsvue3 中使用 echart 显示了一个曲线图: 但当把图表的 trigger 设置成 axis 的时候,鼠标扫过并不显示具体的数值,如上图所示。 但 trigger item 的时候是正常的。 解决…

浏览器工作原理与实践--仅仅打开了1个页面,为什么有4个进程?

无论你是想要设计高性能Web应用,还是要优化现有的Web应用,你都需要了解浏览器中的网络流程、页面渲染过程,JavaScript执行流程,以及Web安全理论,而这些功能是分散在浏览器的各个功能组件中的,比较多、比较散…

idea创建maven-archetype-quickstart框架无法显示src/目录

一、配置好idea中Maven目录 1、不使用idea自带Maven&#xff0c; 2、配置好Maven环境变量M2_HOME 3、修改maven中 setting.xml文件 <?xml version"1.0" encoding"UTF-8"?><settings xmlns"http://maven.apache.org/SETTINGS/1.2.0"…

【C语言】—— 指针三 : 参透数组传参的本质

【C语言】—— 指针三 &#xff1a; 参透数组传参的本质 一、数组名的理解二、使用指针访问数组2.1、指针访问数组2.2、[ ] 的深入理解2.3、数组与指针的区别 三、一维数组的传参本质四、数组指针变量4.1、数组指针变量是什么4.2、 数组指针的初始化 五、二维数组传参的本质 一…

【LabVIEW FPGA入门】插值、输出线性波形

概述 NI 的可重配置 I/O (RIO) 硬件使开发人员能够创建自定义硬件&#xff0c;以在坚固耐用、高性能和模块化架构中执行许多任务&#xff0c;而无需了解低级 EDA 工具或硬件设计。使用 RIO 硬件轻松实现的此类任务之一是模拟波形生成。本教程介绍了使用 CompactRIO 硬件和 LabV…

计算机网络:计算机网络概述

计算机网络&#xff1a;计算机网络概述 因特网概述网络&#xff0c;互连网&#xff0c;因特网因特网发展的三个阶段因特网的标准化工作因特网组成 计算机网络的定义计算机网络的分类按使用者分类按传输介质分类按网络的覆盖范围分类按拓扑结构分类 因特网概述 网络&#xff0c…

投简历没回复?9位DBA公众号集结,快上车!

&#x1f4e3;&#x1f4e3;&#x1f4e3; 哈喽&#xff01;大家好&#xff0c;我是【IT邦德】&#xff0c;江湖人称jeames007&#xff0c;10余年DBA及大数据工作经验 一位上进心十足的【大数据领域博主】&#xff01;&#x1f61c;&#x1f61c;&#x1f61c; 中国DBA联盟(ACD…

Unicode转码 [ASIS 2019]Unicorn shop1

打开题目 我们买最贵的试试看&#xff0c;结果提示只能输入一个字符 抓包分析一下看看 从中可以发现源代码是如何处理price的 使用的是unicodedata.numeric() 但是我们查看页面源代码&#xff0c;发现页面的编码是utf-8编码 所以&#xff0c;前端html使用的是utf-8&#xff0…

【学习】CMMI评估认证的意义和需要注意的问题

​ CMMI认证是软件能力成熟度集成模型&#xff0c;是软件行业中的一种质量管理体系&#xff0c;旨在评估软件开发组织的成熟度和能力&#xff0c;以帮助企业提高软件质量、降低成本、控制风险&#xff0c;并获得更好的商业效益。 一、CMMI评估认证的意义 1. 提高软件质量&am…

win提权第二弹服务提权

阅读须知&#xff1a; 探索者安全团队技术文章仅供参考,未经授权请勿利用文章中的技术资料对任何计算机系统进行入侵操作,由于传播、利用本公众号所提供的技术和信息而造成的任何直接或者间接的后果及损失&#xff0c;均由使用者 本人负责&#xff0c;作者不为此承担任何责任,如…

Windows 10中打开控制面板的13种方法,总有一种适合你

前言 虽然有传言称微软将取消控制面板,但它不会那么快消失。一些重要的设置仅在Windows 10的经典控制面板中找得到,它们不在设置应用程序中。本文有13种方法可以打开控制面板。 搜索开始菜单 你可以使用“开始”菜单的搜索功能搜索PC上的任何应用程序。在任务栏左侧的搜索…

基于微信小程序的电影交流平台

技术&#xff1a;springbootmysqlvue 一、背景 互联网发展至今&#xff0c;无论是其理论还是技术都已经成熟&#xff0c;而且它广泛参与在社会中的方方面面。它让信息都可以通过网络传播&#xff0c;搭配信息管理工具可以很好地为人们提供服务。所以各行业&#xff0c;尤其是规…

[蓝桥杯 2015 省 B] 生命之树

水一水的入门树形DP #include<iostream> #include<algorithm> #include<vector> using namespace std; using ll long long; #define int long long const int N 2e610; const int inf 0x3f3f3f3f; const int mod 1e97;int n; int w[N]; vector<vecto…

环境检测LIMS系统 环境检测实验室信息管理系统

环境检测行业在所有检测领域流程最长&#xff0c;数据量最大&#xff0c;专家组不同&#xff0c;认证体系的记录单/报告模板也是各自不同&#xff0c;因此如何选择一套适用本企业的LIMS也成为重中之重的工作&#xff0c;好的系统可以给企业带来非常大的便捷&#xff0c;也能大大…

4 Redis持久化

Redis 是一个内存数据库&#xff0c;所以其运行效率非常高。但也存在一个问题&#xff1a;内存中的数据是不持久的&#xff0c;若主机宕机或 Redis 关机重启&#xff0c;则内存中的数据全部丢失。当然&#xff0c;这是不允许的。Redis 具有持久化功能&#xff0c;其会按照设置以…

让AI给你写代码(五)—— 应用Agent,理解Agent,走进现实世界

本文想解决一个问题&#xff0c;理解Agent有啥具体的作用&#xff1f; 所谓读书千遍&#xff0c;不如动手一试&#xff0c;我们还是借助于上一篇&#xff0c;让AI给你写代码&#xff08;四&#xff09;—— 初步利用LangChain Agent根据输入生成&#xff0c;保存&#xff0c;执…

基于springboot的药房进销存管理系统

光明医院药品库房信息管理系统的设计与实现医院管理员 1.医院管理员信息管理—增加删除修改人员信息(人员信息包括年龄性别学历) 2医院管理员账号密码修改 3发布公告—医院管理者发布医院公告对药库管理者可见 4查看药品入库出库信息 (药品厂商&#xff0c;生产日期&#xff0c…

【接口测试】神器JMeter

‍1 JMeter是什么 Apache JMeter是Apache组织开发的一款开源软件&#xff0c;是一款非常好用的接口测试工具。它的特点是开源免费&#xff0c;简单好用。 我们在测试过程需要做接口测试的话就可以使用它&#xff0c;也可以用来批量造数据&#xff0c;接下来我们就来看看JMete…

统计学第1天

描述性统计 统计数据类型分类 按计量尺度划分 分类数据 能归于某一类别的非数字数据&#xff0c;数据是对事进行分类的结果&#xff0c;结果表现为类别&#xff0c;用文字来描述。 例如&#xff1a;人口按照性别&#xff08;男、女&#xff09;&#xff0c;企业按照所处行业…