ASP.NET仪器设备管理系统设计与实现

 

文中以某中小型企业的设备管理为例,对设备管理系统的设计与应用进行研究,旨在通过设备管理系统提高内部设备的利用率及实现其最大的经济效益。文中首先对设备管理的现状及其重要性进行了分析,分析实现设备管理信息系统的必要性与可行性。其次针对所需要设备信息,分析设备管理系统流程,设计并开发一套设备管理系统。最后,文章对系统的设计实现过程进行了阐述

文中详细阐述了各子模块的功能和实现过程,并对系统的核心技术作了特别讲解。从试运行情况来看,系统加强了对于仪器设备的有效管理,提高了管理的效率和科学性,实现了信息资源的共享,达到了建设一个仪器设备管理系统的预定目标。

关键词:设备管理;仪器设备;管理系统

2.2 功能需求

管理系统主要包括两大功能:

(1)用户模块

a)用户信息:用户可以查看自己的基本信息

b)资料修改:用户的基本信息有时候会变化,比如联系电话等,对于这种情况就可以对资料及时修改更新。

(2)设备管理模块

a)设备一览:查看所有的设备。

b)设备的添加和报废:对添加新增设备以及对报废设备的信息进行处理。

c)设备的维修和调拨:对维修中的设备的详细信息进行管理以及对设备的调拨及其信息管理。

d)设备的查询:根据设备名称查询设备,设备的查询使用模糊查询,以尽可能的把符合用户要求的设备显示给用户。

3.2 系统功能模块

图1  系统功能模块

4.1 用户登录模块

用户登录模块主要是检查用户名和密码是否匹配,并且可以通过“注册”按钮进入注册页面。如果用户的用户名和密码匹配则进入系统;不匹配则转入登录错误页面。在登录错误页面用户可以选择进入登录页面和注册页面。

系统对用户的登录方式采用的是用户名/密码方式,在用户进入系统的时候要求用户输入用户名和密码,并比较两者和数据库中用户名和密码对应。代码如下:

Dim conn As New System.Data.sqlclient.SqlConnection

        Dim cmd As New System.Data.sqlclient.SqlCommand

        Dim objreader As System.Data.sqlclient.SqlDataReader

        conn.ConnectionString = ("SERVER=(local);USER ID=sa;PWD=;DATABASE=atai")

        conn.Open()

        cmd.Connection = conn

        cmd.CommandText = "select * from userlist where username='" + Textusername.Text + " 'and pwd='" + pwd + "'"

        objreader = cmd.ExecuteReader

If objreader.HasRows Then

            Response.Redirect("index.html")

Else

            Response.Redirect("false.htm")

End If

但是,使用明文对用户密码进行存储时,很容易被非法使用者识别。因此,先对密码进行哈希后再写入数据库中,让非法使用者不能识别,用户密码相对更为安全,代码入下:

Public Shared Function MD5(ByVal Sourcein As String) As String

      Dim MD5CSP As System.Security.Cryptography.MD5CryptoServiceProvider = New System.Security.Cryptography.MD5CryptoServiceProvider

        Dim MD5Source() As Byte = System.Text.Encoding.UTF8.GetBytes(Sourcein)

        Dim MD5Out() As Byte = MD5CSP.ComputeHash(MD5Source)

        Return Convert.ToBase64String(MD5Out)

    End Function

实现截图:

图2 用户登录

4.2 用户注册模块

用户在注册模块主要是为新用户提供注册,新用户在次填写详细信息进行注册,在注册的时候自动把权限设为普通用户。

在用户注册的时候首先判断用户名是否存在,代码如下:

cmd.CommandText = "select * from userlist where username='" + Textusername.Text + "'"

        objreader = cmd.ExecuteReader

        If objreader.HasRows Then

            '存在

            args.IsValid = False

            Session("username") = Textusername.Text

        Else

            '不存在

            args.IsValid = True

        End If

        conn.Close()

在用户注册时,为了防止用户粗心,在输入密码时不小心输入错误,因此在用户输入密码后还需要用户再一次输入,通过判断两次输入是否相同来判断用户是否输入错误,相关代码如下:

If Textuserpwd.Text = Textuserpassword.Text Then

            '匹配

            args.IsValid = True

        Else

            '不匹配

            args.IsValid = False

        End If

当所有的条件都满足后才会向数据库中写入注册信息,写入数据库的代码如下:

Dim conn As New System.Data.sqlclient.SqlConnection

        Dim cmd As New System.Data.sqlclient.SqlCommand

        Dim objreader As System.Data.sqlclient.SqlDataReader

        conn.ConnectionString = ("SERVER=(local);USER ID=sa;PWD=;DATABASE=atai")

        conn.Open()

        cmd.Connection = conn

        If Textusername.Text = Session("username") Then

        Else

            If Textuserpwd.Text = Textuserpassword.Text Then

                Dim pwd As String = MD5(Textuserpwd.Text)

                cmd.CommandText = "insert into userlist values('" + Textusername.Text + "','" + pwd + "','" + sexchoose.SelectedValue + "','" + position.SelectedValue + "','" + Texttelephone.Text + "',' 0  ')"

                cmd.ExecuteNonQuery()

                Response.Redirect("useraddsuccess.htm")

            End If

        End If

        conn.Close()

实现截图:

4.3 设备一览模块

设备一览模块主要是查看目前所拥有的设备。该模块通过DataList控件来处理从数据源读取的数据。DataList控件的分页显示则是通过先根据当前页号Session(“CurrPage”)、分页大小PageSize来计算要显示的记录号范围,然后将数据集中需显示的记录存放到一个临时表tempbook中,再将该临时表绑定到DataList控件实现的,这样就可以显示指定页号的各记录。另外,为了在页面间传递页号值,使用了Session变量CurrPage,当用户单击“上一页”时,将Session(“CurrPage”)减1;当用户单击“下一页”时,将Session(“Currpage”)加1。在nabledwhatbutton()中编写Session(“CurrPage”)的初值和结束处理。

在设备一览页面,可以通过单击“添加设备”来增加新的设备。

在DataList控件中绑定列中,“设备名称”采用超级连接,用户单击可以查看设备的详细信息,通过单击“修改”进入修改设备详细,在修改设备状态时,如果设备状态是维修则转入维修设备添加页面,如果是报废,则进入添加报废设备页面,在添加的同时更改设备一览中该设备的状态为相应状态;单击“删除”删除该设备的所有的信息。

DataList控件的分页显示是通过先根据当前页号Session(“CurrPage”)、分页大小PageSize来计算要显示的记录号范围,当前页号Session(“CurrPage”)的代码如下:

Sub enabledwhatbutton()

        If Session("currpage") = 1 Then

            firstpage.Enabled = False

            prevpage.Enabled = False

        Else

            firstpage.Enabled = True

            prevpage.Enabled = True

        End If

        If Session("currpage") = Session("totalpage") Then

            nextpage.Enabled = False

            lastpage.Enabled = False

        Else

            nextpage.Enabled = True

            lastpage.Enabled = True

        End If

    End Sub

而分页大小PageSzie的计算代码如下:

Dim totalrec As Integer = equipmentlist.Rows.Count

        '计算总页数

        Dim totalpage As Integer

        If totalrec < pagesize Then

            totalpage = 1

        Else

            If totalrec Mod pagesize <> 0 Then

                totalpage = totalrec \ pagesize + 1

            Else

                totalpage = totalrec / pagesize

            End If

        End If

        Session("totalpage") = totalpage

有了当前页号Session(“CurrPage”)和分页大小PageSize就可以计算出显示的记录号范围,然后将数据集中需显示的记录存放到一个临时表tempbook中,再将该临时表棒定到DataList控件来实现,这样就可以显示指定页号的个记录,相关代码如下:

Dim tempequipmentlist As DataTable = equipmentlist.Clone()

        Dim i, j As Integer

        For i = (pageno - 1) * pagesize To pageno * pagesize - 1

            If i < 0 Or i > equipmentlist.Rows.Count - 1 Then Exit For

            Dim row As DataRow = tempequipmentlist.NewRow

            For j = 0 To equipmentlist.Columns.Count - 1

                row(equipmentlist.Columns(j).ColumnName) = equipmentlist.Rows(i).Item(j)

            Next

            tempequipmentlist.Rows.Add(row)

        Next

        DataGridshow.DataSource = tempequipmentlist

        DataGridshow.DataBind()

为了在页面间传递页号值,使用了Session变量CurrPage,当用户单击“上一页”时,将Session(“CurrPage”)减1;当用户单击“下一页”时,将Session(“CurrPage”)加1。判断代码如下:

Sub pagechange(ByVal sender As Object, ByVal e As CommandEventArgs)

        Select Case e.CommandArgument

            Case "firstpage"

                Session("currpage") = 1

            Case "prevpage"

                If Session("currpage") > 1 Then

                    Session("currpage") -= 1

                Else

                    Session("currpage") = 1

                End If

            Case "nextpage"

                Session("currpage") += 1

            Case "lastpage"

                Session("currpage") = Session("totalpage")

        End Select

        enabledwhatbutton()

        bindlist(Session("currpage"))

    End Sub

实现截图:

4.4 设备调度模块

设备调度模块主要是查看所有处于调度中的设备,和调度设备的调度信息。该模块通过DataList控件处理从数据源读取的数据。绑定列中,“设备名称”采用超级连接,用户单击可以查看设备的详细调度信息,通过单击“修改”进行调度信息的修改;单击“删除”可以删除该设备的调度信息。修改调度信息代码如下:

cmd.CommandText = "insert into allot values('" + Tname.Text + "', '" + Toldteam.Text + "','" + Tnewteam.Text + "', '" + Tolduse.Text + "', '" + Tnewuse.Text + "','" + Ttime.Text + "','" + Tnotation.Text + "')"

        objreader = cmd.ExecuteReader

        objreader.Close()

        cmd.CommandText = "update equipmentlist  set buyteam =  '" + Tnewteam.Text + "',usepeople  = '" + Tnewuse.Text + "'where name = '" + Tname.Text + "' "

        objreader = cmd.ExecuteReader

        objreader.Close()

        cmd.CommandText = "select * from allot  where newteam = '" + Tnewteam.Text + "' and newuse = '" + Tnewuse.Text + "'"

        objreader = cmd.ExecuteReader

        If objreader.HasRows Then

            seccess.Text = "添加成功"

            Tname.Text = " "

            Toldteam.Text = " "

            Tnewteam.Text = " "

            Tolduse.Text = " "

            Tnewuse.Text = ""

            Ttime.Text = ""

            Tnotation.Text = ""

        Else

            seccess.Text = "添加失败"

        End If

实现截图:

图5  调度信息修改

4.5 设备维修模块

设备维修模块主要是查看所有处于维修中的设备,及其详细信息。该模块同样采用了DataList控件来处理从数据源读取的数据。绑定列中,“设备名称”采用超级连接,用户单击可以查看详细的维修信息。通过单击“修改”可以修改设备的维修信息;单击“删除“按钮可以删除该设备的维修信息。对设备维修信息的修改代码如下:

  cmd.Connection = conn

        cmd.CommandText = "update badequipment  set badtime =  '" + Tbadtime.Text + "',notation  = '" + Tnotation.Text + "'where name = '" + Tname.Text + "'"

        cmd.ExecuteNonQuery()

        cmd.CommandText = "select * from badequipment  where name = '" + Tname.Text + "' and badtime = '" + Tbadtime.Text + "'"

        objreader = cmd.ExecuteReader

        If objreader.HasRows Then

            seccess.Text = "修改成功"

        End If

维修信息的删除代码如下:

Dim cmd As New System.Data.sqlclient.SqlCommand

        cmd.CommandText = "delet * from badequipment where name='" + Tname.Text + "'"

        Response.Redirect("badequipment.aspx")

实现截图:

图6  设备维护信息修改

4.6 设备报废模块

设备报废模块主要是查看所有的报废了的设备,及其详细信息。该模块采用了DataList控件来处理从数据源读取的数据。绑定列中,“设备名称“采用了超级连接,用户单击可以查看详细信息。通过单击”修改“可以修改报废设备的信息;用户单击”删除“按钮可以删除该设备的信息。对报废设备信息的修改代码如下:

cmd.CommandText = "update badequipment  set badtime =  '" + Tbadtime.Text + "',notation  = '" + Tnotation.Text + "'where name = '" + Tname.Text + "'"

        cmd.ExecuteNonQuery()

        cmd.CommandText = "select * from badequipment  where name = '" + Tname.Text + "' and badtime = '" + Tbadtime.Text + "'"

        objreader = cmd.ExecuteReader

        If objreader.HasRows Then

            seccess.Text = "修改成功"

        End If

实现截图

图7  报废信息修改

4.7 用户信息模块

用户信息模块主要是用户查看自己的详细资料。用户可能因为各种原因自己的资料有所改变,又忘了自己是不是已经对自己的资料进行了更新修改,用户则可以通过用户信息模块查看自己的信息是否正确。在用户登录的时候就首先把用户的信息进行绑定,代码如下:

cmd.CommandText = "select * from userlist where username='" + Textusername.Text + " ' and pwd='" + pwd + "'"

        objreader = cmd.ExecuteReader

        If objreader.HasRows Then

            Session("name") = Textusername.Text

            objreader.Close()

            cmd.CommandText = "select * from userlist where username ='" + Session("name") + "' "

            Dim objadpt As New System.Data.sqlclient.SqlDataAdapter(cmd)

            Dim ds As New DataSet

            objadpt.Fill(ds, "userlist")

            Dim userlist As DataTable = ds.Tables("userlist")

            Session("sex") = userlist.Rows(0).Item(2)

            Session("position") = userlist.Rows(0).Item(3)

            Session("telephone") = userlist.Rows(0).Item(4)

            Session("power") = userlist.Rows(0).Item(5)

在用户查看自己的信息时,把绑定的用户信息显示出来,代码如下:

usernameshow.Text = Session("name")

        sexshow.Text = Session("sex")

        positionshow.Text = Session("position")

        telephoneshow.Text = Session("telephone")

实现截图

图8  用户信息

4.8 资料修改模块

资料修改模块主要是用户用来修改自己的资料。用户可能因为工作等原因资料有所改变,需要进行修改,即使更新。资料修改模块为用户提供该功能。在用户修改资料后点击修改后,使用对数据库的更新操作来更新用户信息,代码如下:

If Textpwd.Text = Textpwdagain.Text Then

            cmd.CommandText = "update userlist set pwd='" + Textpwd.Text + "',sex='" + sexchoose.SelectedValue + "',position='" + position.SelectedValue + "',telephone='" + Texttelephone.Text + "' where username='" + Session("name") + "'"

            cmd.ExecuteNonQuery()

            Response.Redirect("main.aspx")

        End If

实现截图:

图9  用户资料修改

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

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

相关文章

如何在windows server下安装mysql5.7数据库,并使用Navicat Premium 15可视化工具新建数据库并读取数据库信息。

如何在windows server下安装mysql5.7数据库&#xff1f; MySQL :: Download MySQL Community Server (Archived Versions)https://downloads.mysql.com/archives/community/点击↑&#xff0c;然后选择对应版本和平台↓下载 将下载后的安装包放入固定目录&#xff08;这里以D:…

AI学习指南概率论篇-随机变量和随机过程

AI学习指南概率论篇-随机变量和随机过程 随机变量和随机过程是概率论中重要的概念&#xff0c;也是在人工智能领域中经常应用的概念。本文将介绍随机变量和随机过程的概述&#xff0c;它们在AI中的使用场景&#xff0c;定义和意义&#xff0c;以及相关的公式讲解&#xff0c;并…

蓝桥杯备战17.bitset砝码称重

P2347 [NOIP1996 提高组] 砝码称重 - 洛谷 | 计算机科学教育新生态 (luogu.com.cn) bitset 用来存储二进制 #include<bits/stdc.h> using namespace std; #define endl \n #define int long long const int N 2e510; int w[] {0,1,2,3,5,10,20}; signed main() {std…

电商选品的数据是可以用爬虫进行采集的吗?

在电子商务领域&#xff0c;选品是一个至关重要的环节&#xff0c;它直接影响到商家的销售业绩和市场竞争力。为了做出更明智的选品决策&#xff0c;商家需要获取大量的市场数据和产品信息。那么&#xff0c;电商选品的数据是否可以通过爬虫进行采集呢&#xff1f; 爬虫在电商数…

更适合户外使用的开放式耳机,佩戴舒适音质悦耳,虹觅HOLME NEO体验

随着气温的逐渐升高&#xff0c;不管是在室内工作娱乐&#xff0c;还是到户外运动健身&#xff0c;戴上一款合适的耳机都会帮我们隔绝燥热与烦闷&#xff0c;享受音乐与生活。现在市面上的耳机类型特别多&#xff0c;我很喜欢那种分体式的开放耳机&#xff0c;感觉这种耳机设计…

亚信安慧AntDB:颠覆传统的开放创新数据库生态

亚信安慧AntDB是亚信科技自主研发的一款颠覆传统的开放创新数据库产品。它引入了分布式架构&#xff0c;通过数据的弹性伸缩、 容灾容错和负载均衡等技术手段&#xff0c;实现了高性能、高可靠性和高可扩展性的数据存储和处理能力。不仅如此&#xff0c;亚信安慧 AntDB还具备…

从头开始学Spring—02基于XML管理bean

目录 1.实验一&#xff1a;入门案例 2.实验二&#xff1a;获取bean 3.实验三&#xff1a;依赖注入之setter注入 4.实验四&#xff1a;依赖注入之构造器注入 5.实验五&#xff1a;特殊值处理 6.实验六&#xff1a;为类类型属性赋值 7.实验七&#xff1a;为数组类型属性赋值…

掌握决策之道:层次分析法(AHP)的步骤、应用与局限性

目录 一、层次分析法简介 举一个小例子&#xff1a; 评价类问题可用打分解决&#xff0c;比如&#xff1a;小华高考结束后&#xff0c;在华科和武大两所学校之间做抉择。 评价类问题可用打分解决 二、层次分析法的步骤 &#xff08;一&#xff09;一道引出层次分析法的例…

如何在创建之前检测 Elasticsearch 将使用哪个索引模板

作者&#xff1a;来自 Elastic Musab Dogan 概述 Elasticsearch 提供两种类型的索引模板&#xff1a;旧&#xff08;legacy&#xff09;索引模板和可组合 (composable) 索引模板。 Elasticsearch 7.8 中引入的可组合模板旨在替换旧模板&#xff0c;两者仍然可以在 Elasticsear…

深入理解MVCC与Read View:并发控制的关键要素

MVCC MVCC的几个问题1.update、insert、select和delete如何在MVCC中维护版本链&#xff1f;2.select读取&#xff0c;是读取最新的版本呢&#xff1f;还是读取历史版本&#xff1f;3.当前读和快照读4.那为什么要有隔离级别呢&#xff1f;5.如何保证&#xff0c;不同的事务&…

【go从入门到精通】golang单元测试

单元测试 随着软件开发变得越来越复杂,确保服务按预期运行至关重要。实现这一目标的方法之一是通过测试。在Go中,我们可以进行单元测试和集成测试,以确保我们的代码正确并满足要求。单元测试的最终目标是断言一小部分逻辑“单元”的行为符合预期。我们通过在测试中调用该函数…

Nginx - 配置文件结构(一)

安装Nginx 以 Ubuntu 为例&#xff0c;安装命令为 sudo apt install nginx常用指令 # 检查配置文件是否有问题 nginx -t# 热加载配置文件 nginx -s reload# 等待处理完当前请求并退出 nginx -s quit# 快速退出 nginx -s stop目录结构 nginx 默认安装位置一般在 /etc/nginx …

组件通信总结

组件通信是前端开发中的一个重要概念&#xff0c;它指的是组件之间通过某种方式来传递信息以达到某个目的。以下是对组件通信的总结&#xff1a; 一、组件间通信的分类 父子组件间通信&#xff1a;这是最常见的组件通信场景&#xff0c;主要使用自定义属性&#xff08;props&…

Automa:一键自动化,网页数据采集与工作流程优化专家

Automa&#xff1a;解锁自动化浏览器潜能&#xff0c;赋能工作效率&#xff0c;让复杂任务变得简单- 精选真开源&#xff0c;释放新价值。 概览 Automa是一款创新的网页自动化工具&#xff0c;专为寻求提升工作效率、简化数据收集过程的现代工作者设计。它融合了先进的数据抓取…

模板:vector(顺序表容器)

1.构造函数 explicit vector (const allocator_type& alloc allocator_type()); //默认构造函数explicit vector (size_type n, const value_type& val value_type(),const allocator_type& alloc allocator_type()); //n个重复的valtemplate <class Input…

Angular入门

Angular版本&#xff1a;Angular 版本演进史概述-天翼云开发者社区 - 天翼云 安装nodejs&#xff1a;Node.js安装与配置环境 v20.13.1(LTS)-CSDN博客 Angular CLI是啥 Angular CLI 是一个命令行接口(Angular Command Line Interface)&#xff0c;是开发 Angular 应用的最快、最…

大模型时代下两种few shot高效文本分类方法

介绍近年(2022、2024)大语言模型盛行下的两篇文本分类相关的论文&#xff0c;适用场景为few shot。两种方法分别是setfit和fastfit&#xff0c;都提供了python的包使用方便。 论文1&#xff1a;Efficient Few-Shot Learning Without Prompts 题目&#xff1a;无需提示的高效少…

深入了解 MyBatis 插件:定制化你的持久层框架

序言 MyBatis 是一个流行的 Java 持久层框架&#xff0c;它提供了简单而强大的数据库访问功能。然而&#xff0c;有时候我们需要在 MyBatis 中添加一些自定义的功能或行为&#xff0c;来满足特定的需求。这时&#xff0c;MyBatis 插件就发挥了重要作用。本文将深入探讨 MyBati…

如何创建 Django 模型

简介 在上一篇教程“如何创建 Django 应用程序并将其连接到数据库”中&#xff0c;我们介绍了如何创建一个 MySQL 数据库&#xff0c;如何创建和启动一个 Django 应用程序&#xff0c;以及如何将其连接到一个 MySQL 数据库。 在本教程中&#xff0c;我们将创建 Django 模型&a…

孩子如何备考编程竞赛

为了帮助孩子更好地备考编程竞赛&#xff0c;家长和老师还可以采取以下一些措施&#xff1a; 制定合理的学习计划&#xff1a;家长和孩子可以一起制定一个合理的学习计划&#xff0c;包括每天的学习时间安排、学习内容和目标等。通过制定学习计划&#xff0c;可以帮助孩子更有条…