zoukankan      html  css  js  c++  java
  • ERP权限系统(七)

    添加链接权限的字段:

                    //权限管理
                    n.Target = "MainFrame";
                    //折叠
                    TreeView1.Nodes.Add(n);
                    n.Expanded = false;
    

     页面设计:

    <%@ Page Language="C#" AutoEventWireup="true" CodeBehind="UserRightManger.aspx.cs" Inherits="BioErpWeb.HRSystem.UserRightManger" %>
    
    <%@ Register Assembly="AspNetPager" Namespace="Wuqi.Webdiyer" TagPrefix="webdiyer" %>
    
    <%@ Register Assembly="AjaxControlToolkit" Namespace="AjaxControlToolkit" TagPrefix="cc1" %>
    
    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
    
    <html xmlns="http://www.w3.org/1999/xhtml">
    <head runat="server">
        <title></title>
        <link href="../Styles/ERPBaseStyle.css" rel="stylesheet" type="text/css" />
        <link href="../Styles/AspNetPagerStyle.css" rel="stylesheet" type="text/css" />
    </head>
    <body>
        <form id="form1" runat="server">
        <asp:ScriptManager ID="ScriptManager1" runat="server">
        </asp:ScriptManager>
        <div>
           <asp:UpdatePanel id="up_all" runat="server">
            <contenttemplate>
    
            <cc1:ModalPopupExtender ID="modal_Add" TargetControlID="btnNew" PopupControlID="Panel_Add" runat="server">
            </cc1:ModalPopupExtender>
    
            <asp:ImageButton ID="imgEditBtn" Width="1" Height="1"  runat="server" />
            <cc1:ModalPopupExtender ID="Modal_Update" TargetControlID="imgEditBtn" PopupControlID="Panel_Update" runat="server">
            </cc1:ModalPopupExtender>
         <div>
            <asp:Panel ID="Panel_Add" runat="server"  CssClass="pLogo">
             <table  class="tb_mess">
             <thead class="name"><caption>权限信息添加</caption></thead>
             <tr>
              <td>权限名</td><td>
                  <asp:TextBox ID="txtRightName0" runat="server"></asp:TextBox>
                  <asp:RequiredFieldValidator ID="RequiredFieldValidator1" runat="server" 
                      ControlToValidate="txtRightName0" ErrorMessage="*必须填写"></asp:RequiredFieldValidator>
                 </td>
             </tr>
             <tr>
              <td>备注</td><td>
                  <asp:TextBox ID="txtReMark0" runat="server"></asp:TextBox>
                  <asp:RequiredFieldValidator ID="RequiredFieldValidator2" runat="server" 
                      ControlToValidate="txtReMark0" ErrorMessage="*必须填写"></asp:RequiredFieldValidator>
                 </td>
             </tr>
             <tr><td colspan="2"></td></tr>
              <tr><td colspan="2"></td></tr>
               <tr><td colspan="2"></td></tr>
             <tr>
              <td colspan="2" class="bottomtd">
                  <asp:Button ID="btnAdd" runat="server" Text="提交" onclick="btnAdd_Click" />
                  <asp:Button ID="Button1" runat="server" Text="关闭" CausesValidation="False" 
                      UseSubmitBehavior="False" /></td>
             </tr>
             </table>
            </asp:Panel>    
        </div>
        <div>
              <asp:Panel ID="Panel_Update" runat="server"  CssClass="pLogo">
             <table  class="tb_mess">
             <thead class="name"><caption>权限信息编辑</caption></thead>
             <tr>
              <td>权限名</td><td>
                  <asp:TextBox ID="txtRightName1" runat="server"></asp:TextBox></td>
             </tr>
             <tr>
              <td>备注</td><td>
                  <asp:TextBox ID="txtReMark1" runat="server"></asp:TextBox></td>
             </tr>
             <tr>
              <td colspan="2" class="bottomtd">
                  <asp:Button ID="btnUpdate" runat="server" CausesValidation="false" Text="提交" onclick="btnUpdate_Click" /><asp:Button ID="btnClose" CausesValidation="false" runat="server" Text="关闭" /></td>
             </tr>
             </table>
            </asp:Panel>  
        </div>
    
            <table class="maintable">
                <tr>
                    <td class="titlebar">
                        权限管理系统
                    </td>
                </tr>
                <tr>
                    <td  style=" text-align:right; padding-right:10px; ">
                        <asp:Button ID="btnNew" runat="server" Text="添加" BackColor="#CDEAFB" Width="80px" Height="30px" />
                    </td>
                </tr>
                <tr>
                    <td>
                        <asp:GridView ID="GridView1" Width="100%" AutoGenerateColumns="False" 
                            runat="server" onrowcommand="GridView1_RowCommand" ShowFooter="True" DataKeyNames="ID">
                            <Columns>
                               <asp:TemplateField>
                                    <ItemTemplate>
                                        <asp:CheckBox ID="check_all" Width="50px" runat="server" />
                                    </ItemTemplate>
                                    <FooterTemplate>
                                        <asp:LinkButton ID="lb_checkall"   CausesValidation="false" runat="server" Text="全选" CommandName="allcheck"></asp:LinkButton>
                                        <asp:LinkButton ID="lb_recheckall" CausesValidation="false"  CommandName="recheck" runat="server" Text="反选"></asp:LinkButton>
                                    </FooterTemplate>
                                    <FooterStyle HorizontalAlign="Center" Width="60px" />
                                    <ItemStyle HorizontalAlign="Center"  Width="50px"/>
                                </asp:TemplateField>
    
    
                                <asp:TemplateField HeaderText="编号">
                                    <ItemTemplate>
                                        <asp:Label ID="Label1" runat="server" Text='<%# Eval("ID") %>'></asp:Label>
                                    </ItemTemplate>
                                    <ItemStyle HorizontalAlign="Center" />
                                </asp:TemplateField>
                                <asp:TemplateField HeaderText="权限名">
                                    <ItemTemplate>
                                        <asp:Label ID="Label2" runat="server" Text='<%# Eval("RightName") %>'></asp:Label>
                                    </ItemTemplate>
                                    <ItemStyle HorizontalAlign="Center" />
                                </asp:TemplateField>
                                <asp:TemplateField HeaderText="备注">
                                    <ItemTemplate>
                                        <asp:Label ID="Label3" runat="server" Text='<%# Eval("ReMark") %>'></asp:Label>
                                    </ItemTemplate>
                                    <ItemStyle HorizontalAlign="Center" />
                                </asp:TemplateField>
                                <asp:TemplateField HeaderText="操作">
                                    <ItemTemplate>
                                           <asp:ImageButton ID="imgEditBtn" Width="50" Height="20" CommandName="imgEdit" CommandArgument='<%#Eval("ID") %>' CausesValidation="false" ImageUrl="~/Web/images/Edit.gif" runat="server" />
                                           <asp:ImageButton ID="imgDeleteBtn" Width="50" Height="20" CommandName="imgDelete"  OnClientClick="return confirm('是否确定删除?');" CommandArgument='<%#Eval("ID") %>' ImageUrl="~/Web/images/Delete.gif" runat="server" />
                                        
                                    </ItemTemplate>
                                       <FooterTemplate>
                                       <asp:LinkButton ID="lb_delete" runat="server" CommandName="DeleteChecked" Text="删除选中"  OnClientClick="return confirm('是否确定删除?');"></asp:LinkButton>
                                    </FooterTemplate>
                                    <FooterStyle Width="150px" HorizontalAlign="Center" />
                                    <ItemStyle HorizontalAlign="Center" />
                                </asp:TemplateField>
                            </Columns>
                        </asp:GridView>
                    </td>
                </tr>
                <tr>
                <td>
                    <webdiyer:AspNetPager ID="AspNetPager1" CssClass="paginator"  
                        CurrentPageButtonClass="cpb" runat="server" 
                        onpagechanged="AspNetPager1_PageChanged">
                    </webdiyer:AspNetPager>
                </td>
                </tr>
            </table>
       
            </contenttemplate>
            </asp:UpdatePanel>
        </div>
        </form>
    </body>
    </html>
    

     权限的添加和修改的存储过程:

    ALTER PROCEDURE [dbo].[tbRight_ADD]
    @RightName nvarchar(50),
    @ReMark nvarchar(50)
    
     AS 
    	INSERT INTO [tbRight](
    	[RightName],[ReMark]
    	)VALUES(
    	@RightName,@ReMark
    	)
    
    
    
    --------修改-----
    ALTER PROCEDURE [dbo].[tbRight_Update]
    @ID int,
    @RightName nvarchar(50),
    @ReMark nvarchar(50)
     AS 
    	UPDATE [tbRight] SET 
    	[RightName] = @RightName,[ReMark] = @ReMark
    	WHERE ID=@ID 
    
    -- Description:	根据权限id获取权限信息
    -- =============================================
    ALTER PROCEDURE [dbo].[getRightById]
    	@id int	
    	AS
    BEGIN
    	-- SET NOCOUNT ON added to prevent extra result sets from
    	-- interfering with SELECT statements.
    	SET NOCOUNT ON;
        SELECT
        	ID,
        	RightName,
        	ReMark
        FROM
            tbRight
            WHERE ID=@id
    END
    

     权限查询:

    所需组件:Gridview,AspNetPager

    调用分页业务方法实现分页查询


    权限添加和修改:

    使用Ajax组件

    ModalPopupExtender

    相关属性:

    TargetControlID:设置触发事件的控件(如按钮)

    PopupControlID:设置要显示的面板

    BLL层的代码:

     public class UserManagerBLL
        {
            /// <summary>
            /// 添加员工信息
            /// </summary>
            /// <param name="user">user</param>
            public int UserMangerAdd(UserManager user)
            {
                SqlParameter[] pars = new SqlParameter[]{
                new SqlParameter("@LoginName",user.LoginName),
                new SqlParameter("@UserName",user.UserName),
                new SqlParameter("@Password",user.Password),
                new SqlParameter("@DepartmentId",user.DepartmentId),
                new SqlParameter("@RoleId",user.RoleId),
                new SqlParameter("@Birthday",user.Birthday),
                new SqlParameter("@Mobile",user.Mobile),
                new SqlParameter("@Email",user.Email),
                new SqlParameter("@Photo",user.Photo),
                new SqlParameter("@Address",user.Address),
                new SqlParameter("@LastLoginDate",user.LastLoginDate),
                new SqlParameter("@Sex",user.Sex),
                new SqlParameter("@DisplayOrder",user.DisplayOrder),
                new SqlParameter("@Sate",user.Sate)
               };
    
                return DataBaseHelper.ExcuteSqlReturnInt("UserManager_ADD", CommandType.StoredProcedure, pars);
            }
    
    
            /// <summary>
            /// 员工修改
            /// </summary>
            /// <param name="user">员工对象</param>
            /// <returns>int</returns>
            public int UserManagerUpdate(UserManager user)
            {
                SqlParameter[] pars = new SqlParameter[]{
                new SqlParameter("@UserId",user.UserId),
                new SqlParameter("@LoginName",user.LoginName),
                new SqlParameter("@UserName",user.UserName),
                new SqlParameter("@Password",user.Password),
                new SqlParameter("@DepartmentId",user.DepartmentId),
                new SqlParameter("@RoleId",user.RoleId),
                new SqlParameter("@Birthday",user.Birthday),
                new SqlParameter("@Mobile",user.Mobile),
                new SqlParameter("@Email",user.Email),
                new SqlParameter("@Photo",user.Photo),
                new SqlParameter("@Address",user.Address),
                new SqlParameter("@LastLoginDate",user.LastLoginDate),
                new SqlParameter("@Sex",user.Sex),
                new SqlParameter("@DisplayOrder",user.DisplayOrder),
                new SqlParameter("@Sate",user.Sate)
               };
    
                return DataBaseHelper.ExcuteSqlReturnInt("UserManager_Update", CommandType.StoredProcedure, pars);
    
    
            }
    
            /// <summary>
            /// 根据指定ID返回其对象
            /// </summary>
            /// <param name="id">userid</param>
            /// <returns>UserManager</returns>
            public  UserManager getuserbyId(string id)
            {
                UserManager user = new UserManager();
                SqlParameter[] pars = new SqlParameter[]{
                new SqlParameter("@userid",id)    
               };
                SqlDataReader reader = DataBaseHelper.SelectSQLReturnReader("getUserByid", CommandType.StoredProcedure, pars);
                while (reader.Read())
                {
                    user.LoginName = reader["LoginName"].ToString();
                    user.UserName = reader["UserName"].ToString();
                    user.DepartmentId =int.Parse(reader["DepartmentId"].ToString());
                    user.RoleId = int.Parse(reader["RoleId"].ToString());
                    user.Birthday =Convert.ToDateTime(reader["Birthday"].ToString());
                    user.Mobile = reader["Mobile"].ToString();
                    user.Email = reader["Email"].ToString();
                    user.Photo = reader["Photo"].ToString();
                    user.Address = reader["Address"].ToString();
                    user.LastLoginDate = Convert.ToDateTime(reader["LastLoginDate"].ToString());
                    user.Sex = reader["Sex"].ToString() == "True" ? true : false;
                    user.DisplayOrder =int.Parse( reader["DisplayOrder"].ToString());
                    user.Sate = reader["Sate"].ToString() == "True" ? true : false;   
                }
                reader.Close();
    
                return user;
    
            }
        }
    

     后台代码的实现:

    protected void Page_Load(object sender, EventArgs e)
            {
                if (!IsPostBack)
                {
                    pagebind();
                }
            }
    
    
            public static int pageindex = 0;
            public static int pagesize = 10;
            public static string condition = "";
            protected void pagebind()
            {
                this.AspNetPager1.RecordCount = SqlComm.getDataCountByCondition("tbRight", condition);
                this.AspNetPager1.PageSize = pagesize;
                this.GridView1.DataSource = SqlComm.getDataByPageIndex("tbRight", "*", "ID", condition, pageindex, pagesize);
                this.GridView1.DataBind();
            }
            protected void btnAdd_Click(object sender, EventArgs e)
            {
                tbRight right = new tbRight();
                UserRightMangerBLL rightbll = new UserRightMangerBLL();
                right.RightName = this.txtRightName0.Text;
                right.ReMark = this.txtReMark0.Text;
                if (rightbll.UserRightAdd(right) == 0)
                {
                    ScriptManager.RegisterStartupScript(this, this.GetType(), "test", "alert('提交失败')", true);
                }
                else
                {
                    pagebind(); 
                    
                }
    
            }
    
            protected void AspNetPager1_PageChanged(object sender, EventArgs e)
            {
                pageindex = this.AspNetPager1.CurrentPageIndex - 1;
                pagebind();
            }
           public static tbRight right1;
           public static UserRightMangerBLL userrightbll;
            protected void GridView1_RowCommand(object sender, GridViewCommandEventArgs e)
            {
                if (e.CommandName == "imgEdit")//编辑
                {
                    string id = e.CommandArgument.ToString();
                     userrightbll = new UserRightMangerBLL();
                    right1 = new tbRight();
                    right1=  userrightbll.getUserRightByID(id);
                    this.txtRightName1.Text = right1.RightName;
                    this.txtReMark1.Text = right1.ReMark;
                    this.Modal_Update.Show();
                }
    
                if (e.CommandName == "imgDelete")//删除单条记录
                {
                    if (SqlComm.DeleteTableByCondition("dbo.tbRight", " where id='" + e.CommandArgument.ToString() + "'"))
                    {
                        pagebind();
                    }
                }
    
                if (e.CommandName == "allcheck") //全选
                {
                    for (int i = 0; i < this.GridView1.Rows.Count; i++)
                    {
                        ((CheckBox)this.GridView1.Rows[i].FindControl("check_all")).Checked = true;
                    }
                }
    
                if (e.CommandName == "recheck") //反选
                {
                    for (int i = 0; i < this.GridView1.Rows.Count; i++)
                    {
                        if (((CheckBox)this.GridView1.Rows[i].FindControl("check_all")).Checked == true)
                        {
                            ((CheckBox)this.GridView1.Rows[i].FindControl("check_all")).Checked = false;
                        }
                        else
                        {
                            ((CheckBox)this.GridView1.Rows[i].FindControl("check_all")).Checked = true;
                        }
                        
                    }
                }
    
                if (e.CommandName == "DeleteChecked")//删除选中的
                {
    
                    for (int i = 0; i < this.GridView1.Rows.Count; i++)
                    {
                        if (((CheckBox)this.GridView1.Rows[i].FindControl("check_all")).Checked == true)
                        {
                            SqlComm.DeleteTableByCondition("tbRight", "where ID=" + this.GridView1.DataKeys[i].Value.ToString());
                        }
                    }
    
                    pagebind();
    
                }
            }
    
            protected void btnUpdate_Click(object sender, EventArgs e)
            {
                right1.RightName = this.txtRightName1.Text;
                right1.ReMark = this.txtReMark1.Text;
                
                if (userrightbll.UserRightUpdate(right1) != 0)
                {
                    pagebind();
                   //ScriptManager.RegisterStartupScript(this, this.GetType(), "test", "alert('提交成功')", true);
                }
              
            }
    

    权限的设置:

    界面的代码:

    <%@ Page Language="C#" AutoEventWireup="true" CodeBehind="UserRightSet.aspx.cs" Inherits="BioErpWeb.HRSystem.UserRightSet" %>
    
    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
    
    <html xmlns="http://www.w3.org/1999/xhtml">
    <head runat="server">
        <title></title>
        <link href="../Styles/ERPBaseStyle.css" rel="stylesheet" type="text/css" />
        <style type="text/css">
        input{ 60px; }
        </style>
        <script src="../JS/CheckUserName.js" type="text/javascript"></script>
    </head>
    <body>
        <form id="form1" runat="server">
        <div>
          <table class="maintable">
          <tr>
           <td  class="titlebar"><span>员工权限设置</span></td>
          </tr>
              <tr>
                  <td >
                      <asp:Label ID="lbUser" runat="server" Text="员工姓名"></asp:Label>
                      <asp:TextBox ID="txtUserName"
                          runat="server" ontextchanged="txtUserName_TextChanged"></asp:TextBox><asp:Button ID="btnCheckUser" Width="50px" runat="server" Text="选择" OnClientClick="showDialog()" />
                  </td>
              </tr>
              <tr>
              <td>
                  <asp:CheckBoxList ID="cblRightList"   RepeatLayout="Flow" RepeatDirection="Horizontal"  runat="server">
                  </asp:CheckBoxList>
                  </td>
              </tr>
              <tr>
              <td  class="bottomtd">
                  <asp:Button ID="btnSave" Width="150" runat="server" Text="保存员工权限信息" 
                      onclick="btnSave_Click" />
              </td>
              </tr>
    
         </table>
        </div>
        </form>
    </body>
    </html>
    

     BLL层的代码:

          /// <summary>
          /// 根据编号获取权限信息
          /// </summary>
          /// <param name="id">id</param>
          /// <returns>tbRight</returns>
          public tbRight getUserRightByID(string id)
          {
              SqlParameter[] pars = new SqlParameter[]{
              new SqlParameter("@id",int.Parse(id))
             };
    
              tbRight right = new tbRight();
           SqlDataReader reader= DataBaseHelper.SelectSQLReturnReader("getRightById", CommandType.StoredProcedure, pars);
           if (reader.Read())
           {
               right.ID = int.Parse(id);
               right.RightName = reader["RightName"].ToString();
               right.ReMark = reader["ReMark"].ToString();
    
           }
           reader.Close();
           return right;
    
          }
    
    
    
          /// <summary>
          /// 给用户添加权限
          /// </summary>
          /// <param name="tbuserright">权限值</param>
          /// <returns>int</returns>
          public int addtbUserRight(tbUserRight tbuserright)
          {
              SqlParameter[] pars = new SqlParameter[]{
               new SqlParameter("@RightID",tbuserright.RightID),
               new SqlParameter("@UserID",tbuserright.UserID)
              };
              return DataBaseHelper.ExcuteSqlReturnInt("tbUserRight_Add", CommandType.StoredProcedure, pars);
          }
    

    UI层的代码:

     public partial class UserRightSet : System.Web.UI.Page
        {
            protected void Page_Load(object sender, EventArgs e)
            {
                if (!IsPostBack)
                {
                    RightListBind();
                }
            }
    
            public void RightListBind()
            {
               this.cblRightList.DataSource= SqlComm.GetDataByTableName("tbRight").Tables[0];
               this.cblRightList.DataTextField = "RightName";
               this.cblRightList.DataValueField = "ID";
               this.cblRightList.DataBind();
            }
    
            protected void txtUserName_TextChanged(object sender, EventArgs e)
            {
                if (txtUserName.Text != "请选择")
                {
                    DataTable dt = SqlComm.GetDataByCondition("tbUserRight", "ID,UserID,RightID", " userid=" + this.txtUserName.Text.Trim()).Tables[0];
    
                    //每次重新选择用户后复选框列表中的数据重新设为Flase
                    CheckBoxListReset();
    
                    //重新绑定选中员工的权限至列表
                        for (int j = 0; j < dt.Rows.Count; j++)
                        {
                            for (int i = 0; i < cblRightList.Items.Count; i++)
                            {
    
                                if (cblRightList.Items[i].Value == dt.Rows[j]["RightID"].ToString())
                                {
    
                                    cblRightList.Items[i].Selected = true;
    
                                }
    
                            }
                        }
                }
            }
            /// <summary>
            /// 重置复选框列表
            /// </summary>
            private void CheckBoxListReset()
            {
                for (int i = 0; i < cblRightList.Items.Count; i++)
                {
    
                    cblRightList.Items[i].Selected = false;
                }
            }
    
           
            protected void btnSave_Click(object sender, EventArgs e)
            {
                if (this.txtUserName.Text.Trim() == "" || this.txtUserName.Text.Trim().Length == 0)
                {
                    ClientScript.RegisterStartupScript(this.GetType(), "test", "<script>alert('请先选择要设置权限的用户')</script>");
                    return;    
                   
                }
    
                //删除指定用户的所有权限
                DeleteUserRight(this.txtUserName.Text.Trim());
               
                //通过循环遍历给指定用户添加相应权限值
                for (int i = 0; i < cblRightList.Items.Count; i++)
                {
                    if (cblRightList.Items[i].Selected)
                    {
                        AddUserRight(int.Parse(cblRightList.Items[i].Value.ToString()),int.Parse(this.txtUserName.Text.Trim()));
                    }
                }
                CheckBoxListReset(); 
                //清空值
                this.txtUserName.Text = "";
    
            }
            /// <summary>
            /// 根据ID删除指定员工权限信息
            /// </summary>
            /// <param name="userid"></param>
            /// <returns></returns>
            private bool DeleteUserRight(string userid)
            {
                return SqlComm.DeleteTableByCondition("tbUserRight", " where UserID=" + userid);  
               
            }
    
            /// <summary>
            /// 给用户添加一个权限信息
            /// </summary>
            /// <param name="tbuserright">权限信息对象</param>
            /// <returns></returns>
            private int AddUserRight(int rightid,int userid)
            {
                UserRightMangerBLL userightbll = new UserRightMangerBLL();
                //给用户权限对象赋值
                tbUserRight tbuserright = new tbUserRight();
                tbuserright.RightID = rightid;
                tbuserright.UserID = userid;
                //调用相应的业务方法实现给用户添加权限
               return userightbll.addtbUserRight(tbuserright);
            }
    
        }
    

    添加权限的存储过程:

    -- Description:	给用户添加一条权限信息
    -- =============================================
    ALTER PROCEDURE [dbo].[tbUserRight_Add] 
    @UserID int,
    @RightID int
    AS
    BEGIN
    
    	SET NOCOUNT ON;
    	INSERT tbUserRight
    	(
    		UserID,
    		RightID
    	)
    	VALUES
    	(
    		@UserID,
    		@RightID
    	)
    
    END
    

     效果:

  • 相关阅读:
    虚拟化(五):vsphere高可用群集与容错(存储DRS是一种可用于将多个数据存储作为单个数据存储群集进行管理的功能)
    vmware 桌面虚拟化 horizon view 介绍(使用微软的RDP协议或vmware 专有的PCoIP协议,连接到虚拟桌面,并且可以使用本地的USB设备、本地存储)
    Delphi之萝莉调教篇
    编写自定义PE结构的程序(如何手写一个PE,高级编译器都是编译好的PE头部,例如MASM,TASM等,NASM,FASM是低级编译器.可以自定义结构)
    localStore的storage事件
    对称密码体制和非对称密码体制
    Span<T>和ValueTuple<T>性能是.Net Core非常关键的特性
    分布式高并发下Actor模型
    公众号及H5支付
    BIOS(Basic Input/Output System)是基本输入输出系统的简称
  • 原文地址:https://www.cnblogs.com/sunliyuan/p/5944102.html
Copyright © 2011-2022 走看看