C#车库信息管理系统

news2024/11/24 8:34:50

车库信息管理系统实现

技术

C# + sqlserver

系统功能

  1. 基本的登录注册
  2. 车库管理员进行车辆信息的添加,即给车库登记车辆信息
  3. 管理员对登记信息进行修改
  4. 管理员对登记信息进行删除
  5. 管理员对登记信息进行查询
  6. 管理员对登记的车辆进行进库,出库处理
  7. 实时统计车库当前停放车辆数量

功能实现

进出库

先上一张进出库图
在这里插入图片描述
功能说明
如上图,首先对登记信息进行展示,管理员可以操作车辆的出库和入库。出库车辆及是将车辆的停车楼层和停放位置进行置空处理,相反入库就是依据唯一车牌进行停放位置进行停放入库。同时根据有停放位置的车辆判断是否在车库停放,达到计数目的。

功能实现

 public bool UpdateOut(string a)
 {
      string sqlStr = "update car set 停车楼层='',停放位置='' where 车牌号=@车牌号";

      SqlParameter[] param = new SqlParameter[]
      {

          new SqlParameter("@车牌号",a)
      };
      return DBHelper.ExcuteCommand(sqlStr, param);
  }
   public DataTable GetcarNum()   //停放车辆查询
   {
       string strsql = string.Format("select count(*) counts from car where 停放位置 is not null and 停放位置<>''");
       SqlDataAdapter da = new SqlDataAdapter(strsql, DBHelper.connString);
       DataSet dt = new DataSet();
       da.Fill(dt);
       return dt.Tables[0];
   }
 private void button1_Click(object sender, EventArgs e)
 {
      //出库
      if (textBox1.Text == "")
      {
          MessageBox.Show("请输入信息");
          return;
      }
      bool res = bk.UpdateOut(textBox1.Text);
      if (res)
      {
          MessageBox.Show("出库成功");
          getAll();
          label8.Text = bk.GetcarNum().Rows[0]["counts"].ToString();
      }
      else
      {
          MessageBox.Show("出库失败");
      }

  }

车库车辆信息查询
界面图
在这里插入图片描述
功能说明
可以通过车牌号和车辆类型(燃油和新能源)进行查询操作,上面图片可以修改的,此处只是演示。
功能实现

 public DataTable GetcarOne(string a)   //精确查找
  {
       string strsql = string.Format("select * from car where 车牌号='{0}'", a);
       SqlDataAdapter da = new SqlDataAdapter(strsql, DBHelper.connString);
       DataSet dt = new DataSet();
       da.Fill(dt);
       return dt.Tables[0];
   }
private void button1_Click(object sender, EventArgs e)
{
     try
     {
         if (textBox3.Text.Equals(""))
         {
             MessageBox.Show("请输入车牌号");
         }
         else
         {
             label5.Text = bk.SelectcarOne(textBox3.Text).DataSet.Tables[0].Rows[0]["品牌"].ToString();
             label7.Text = bk.SelectcarOne(textBox3.Text).DataSet.Tables[0].Rows[0]["车主姓名"].ToString();
             label9.Text = bk.SelectcarOne(textBox3.Text).DataSet.Tables[0].Rows[0]["车主电话"].ToString();
             label11.Text = bk.SelectcarOne(textBox3.Text).DataSet.Tables[0].Rows[0]["车辆类型"].ToString();
             label13.Text = bk.SelectcarOne(textBox3.Text).DataSet.Tables[0].Rows[0]["停车楼层"].ToString();
             label15.Text = bk.SelectcarOne(textBox3.Text).DataSet.Tables[0].Rows[0]["停放位置"].ToString();
             if (bk.SelectcarOne(textBox3.Text).DataSet.Tables[0].Rows[0]["车辆照片"].ToString() == "")
             {
                 pictureBox1.Image = null;
                 label18.Text = "该车辆暂无图片";
             }
             else
             {
                 bytes = (byte[])bk.SelectcarOne(textBox3.Text).DataSet.Tables[0].Rows[0]["车辆照片"];
                 pictureBox1.Image = System.Drawing.Image.FromStream(new MemoryStream(bytes));
                 pictureBox1.SizeMode = PictureBoxSizeMode.Zoom;
             }
         }
         
     }
     catch (Exception ex)
     {
         MessageBox.Show("未找到车辆!!!");
     }
 }
private void buttonClass_Click(object sender, EventArgs e)
{
      if (cbClass.Text.Equals(""))
      {
          MessageBox.Show("请选择类别");
      }
      else
      {
          dataGridView1.DataSource = bk.SelectOneBoook(cbClass.Text);
      }
      
  }
private void button4_Click(object sender, EventArgs e)
{
    if (textBox2.Text.Equals(""))
    {
        MessageBox.Show("请输入车牌号");
    }
    else
    {
        string no = textBox2.Text;
        Car car = new Car { b1 = no };
        bool result = bk.Deletecar(car);
        if (result)
        {
            MessageBox.Show("删除成功");
        }
        else
        {
            MessageBox.Show("删除失败");
        }
        getAll();
        textBox2.Text = "";
    }
    
}

其余常规功能

增删查改
以下是对数据库车辆信息的增删查改操作。

public bool Addcar(Car car)
{
     string sqlStr = "insert into car (车牌号,品牌,车主姓名,车主电话,车辆类型,停车楼层,停放位置,车辆照片) values(@车牌号,@品牌,@车主姓名,@车主电话,@车辆类型,@停车楼层,@停放位置,@车辆照片)";
     SqlParameter[] param = new SqlParameter[]
     {
         new SqlParameter("@车牌号",car.b1),
         new SqlParameter("@品牌",car.b2),
         new SqlParameter("@车主姓名",car.b3),
         new SqlParameter("@车主电话",car.b4),
         new SqlParameter("@车辆类型",car.b5),
         new SqlParameter("@停车楼层",car.b6),
         new SqlParameter("@停放位置",car.b7),
         new SqlParameter("@车辆照片",car.b8)

     };
     return DBHelper.ExcuteCommand(sqlStr, param);
 }

 public bool Updatecar(Car car)
 {
     string sqlStr = "update car set 品牌=@品牌,车主姓名=@车主姓名,车主电话=@车主电话,车辆类型=@车辆类型,停车楼层=@停车楼层,停放位置=@停放位置,车辆照片=@车辆照片 where 车牌号=@车牌号";

     SqlParameter[] param = new SqlParameter[]
     {
          new SqlParameter("@车牌号",car.b1),
        new SqlParameter("@品牌",car.b2),
         new SqlParameter("@车主姓名",car.b3),
         new SqlParameter("@车主电话",car.b4),
         new SqlParameter("@车辆类型",car.b5),
         new SqlParameter("@停车楼层",car.b6),
         new SqlParameter("@停放位置",car.b7),
         new SqlParameter("@车辆照片",car.b8)
     };
     return DBHelper.ExcuteCommand(sqlStr, param);
 }
 public bool Deletecar(Car car)
{

    string str = "delete From car where 车牌号 = @车牌号";

    SqlParameter[] param = new SqlParameter[]
    {
        new SqlParameter("@车牌号",car.b1)
    };

    return DBHelper.ExcuteCommand(str, param);
}


public DataTable GetOne(string a)   
{
    string strsql = string.Format("select * from Login where 账号='{0}'", a);
    SqlDataAdapter da = new SqlDataAdapter(strsql, DBHelper.connString);
    DataSet dt = new DataSet();
    da.Fill(dt);
    return dt.Tables[0];
}

数据库链接帮助类

public class DBHelper
{
     public static string connString = @"Data Source=.;Initial Catalog=car;Integrated Security=True";

     //定义数据库连接对象
     public static SqlConnection conn = new SqlConnection(connString);

     //获取数据的方法,返回DataTable对象,参数为一个select语句
     public static DataTable GetDataTable(string sqlStr)
     {
         try
         {
             conn.Open();
             SqlCommand cmd = new SqlCommand(sqlStr, conn);
             SqlDataAdapter dapt = new SqlDataAdapter(cmd);
             DataTable dt = new DataTable();
             dapt.Fill(dt);
             return dt;
         }
         catch
         {
             return null;
         }
         finally
         {
             conn.Close();
         }
     }

     //获取数据的重载方法,返回DataTable对象,参数为一个参数化的select语句和参数对象数组
     public static DataTable GetDataTable(string sqlStr, SqlParameter[] param)
     {
         try
         {
             conn.Open();
             SqlCommand cmd = new SqlCommand(sqlStr, conn);
             cmd.Parameters.AddRange(param);
             SqlDataAdapter dapt = new SqlDataAdapter(cmd);
             DataTable dt = new DataTable();
             dapt.Fill(dt);
             return dt;
         }
         catch
         {
             return null;
         }
         finally
         {
             conn.Close();
         }
     }

     //执行更新的方法,返回一个布尔值,参数为一个insert|update|delete语句
     public static bool ExcuteCommand(string sqlStr)
     {
         try
         {
             conn.Open();
             SqlCommand cmd = new SqlCommand(sqlStr, conn);
             cmd.ExecuteNonQuery();
             return true;
         }
         catch
         {
             return false;
         }
         finally
         {
             conn.Close();
         }
     }

     //执行更新的重载方法,返回一个布尔值,参数为一个参数化的insert|update|delete语句和参数对象数组
     public static bool ExcuteCommand(string sqlStr, SqlParameter[] param)
     {
         try
         {
             conn.Open();
             SqlCommand cmd = new SqlCommand(sqlStr, conn);
             cmd.Parameters.AddRange(param);
             cmd.ExecuteNonQuery();
             return true;
         }
         catch
         {
             return false;
         }
         finally
         {
             conn.Close();
         }
     }

     public static bool ExcuteCommand(List<String> sqlStr, List<SqlParameter[]> param)
     {
         int i = 0;
         SqlCommand cmd = new SqlCommand();
         using (TransactionScope ts = new TransactionScope())
         {
             cmd.Connection = conn;
             conn.Open();
             try
             {
                 foreach (string item in sqlStr)
                 {
                     cmd.CommandType = CommandType.Text;//设置命令类型为SQL文本命令
                     cmd.CommandText = item;//设置要对数据源执行的SQL语句                                          
                     cmd.Parameters.AddRange(param[i]);
                     i++;
                     cmd.ExecuteNonQuery();//执行SQL语句并返回受影响的行数                       
                 }
                 ts.Complete();
                 return true;
             }
             catch
             {
                 return false;
             }
             finally
             {
                 conn.Close();
                 sqlStr.Clear();
             }
         }
     }

 }

以上为本小系统核心步骤逻辑,更多程序源码获取点我进入

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

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

相关文章

CS61A学习笔记 lecture1 Computer science

CS61A学习笔记 lecture1 Computer science SICP: Structure and Interpretation of Computer Programs 计算机程序的构造和解释 一开始其实是想做南大的SICP学习笔记的&#xff0c;但是没有找到南大这门课的视频&#xff0c;还有就是他是CS61A的clone&#xff0c;网上也有CS61A…

Qt 多线程之QtConcurrent::map(处理序列容器)

QtConcurrent::map()、QtConcurrent::mapped() 和 QtConcurrent::mappedReduced() 函数对一个序列中&#xff08;例如&#xff1a;QList、QVector&#xff09;的项目并行地进行计算。 1、map函数 map函数的功能是在其他线程运行指定的函数&#xff0c;map函数有两个参数 第一…

耗时一个月整理的,最新出炉的Java面试题合集(2022亲身经历)

面试题清单 个人近来面试了不少的公司的&#xff0c;该挂的挂&#xff0c;该应付通过的应付通过&#xff0c;目前对面试题部分做一个系统的总结。最起码要保证被问过的问题第二次被问到的时候是可以回答并且理解的。算是一个被动输入学习的过程。 题目持续更新&#xff0c;答…

xdma linux 驱动

一、下载XDMA文件 输入命令: sudo git clone https://github.com/Xilinx/dma_ip_drivers cd xx_dma/dma_ip_drivers/XDMA/linux-kernel/xdma$ 二 、编译: sudo make install 在最后会遇到下面这个问题: 三、添加key 文件 cd /lib/modules/5.4.0-135-generic/build/ce…

使用 EF Core 处理Sqlite数据库

使用 EF Core 处理Sqlite数据库 1.通过NuGet安装Microsoft.EntityFrameworkCore.Sqlite 2.编写生成数据库的实体类 因为EF Core是通过实体类来作为数据库的字段 public class User {/// <summary>/// 主键 Id/// </summary>[Key]public int Id { get; set; }///…

代码上传gitee

有两种场景&#xff1a; 一、自己的代码没有用git管理&#xff0c;先将自己的代码用git管理起来&#xff0c;然后上传gitee gitee注册账号后&#xff0c;点“”号创建代码仓库&#xff0c;这就是你的代码库上传后的路径。 然后填写仓库名称和路径&#xff0c;这个可以随便写&…

【论文合集】2022年10月医学影像期刊论文合集

★ 本月IEEE Transactions on Medical Imaging(1区 top if 11.037) 共32篇, Medical Image Analysis&#xff08;1区 top if 13.828&#xff09; 共30篇. ”标题高频词汇 (segmentation, 13), (brain, 9), (mri, 6), (graph, 4)(attention, 4), (3d, 4), (contrastive, 4), …

代理模式--【学习笔记】

什么是代理模式&#xff1f; 代理是一种模式,提供了对目标对象的间接访问方式,即通过代理对象访问目标对象.如此便于在目标实现的基础上增加额外的功能操作,以满足自身的业务需求. 代理模式又分为静态代理&#xff0c;动态代理 静态代理模式 编写代理类, 要求: 代理类与目标类…

【我爱世界杯】伪球迷眼里的世界杯

大家好&#xff0c;我是【架构师李肯】&#xff0c;一个专注于嵌入式物联网架构设计的攻城狮。 文章目录按理说聊一聊我和足球第一次热衷于关注世界杯后ying情时代的卡塔尔世界杯祝愿世界杯按理说 嗯&#xff0c;按理说&#xff0c;我一个程序猿&#xff0c;既不踢球&#xff…

ChatGPT原理解析-张俊林

本文将从以下几个方面展开&#xff1a; 引言 ChatGPT的技术原理 引言 作为智能对话系统&#xff0c;ChatGPT最近两天爆火&#xff0c;都火出技术圈了&#xff0c;网上到处都在转ChatGPT相关的内容和测试例子&#xff0c;效果确实很震撼。我记得上一次能引起如此轰动的AI技术…

湃睿PMDS-Fx传感器在电动牙刷上的应用

电动牙刷、冲牙器等产品市场的爆发性增长&#xff0c;显示全球人口正在越来越关注牙齿/口腔的健康问题。 根据资料显示&#xff0c;中国电动牙刷市场规模呈现逐年上涨的态势&#xff0c;2017年中国电动牙刷市场规模为43亿元&#xff0c;2021年中国电动牙刷市场规模上涨为125亿…

01-go基础-10-结构体 struct (定义结构体、声明结构体变量、结构体赋值、结构体做参数、结构体指针、结构体嵌套、结构体打印)

文章目录1. 定义结构体类型2. 声明结构体变量3. 赋值3.1 用结构体赋值3.2 每个成员分别赋值4. 结构体使用4.1 结构体作参数4.2 结构体指针做参数4.3 二者区别4.4 本质原因5. 结构体嵌套5.1 一个结构体作为另一个结构体的成员1&#xff09;定义2&#xff09;赋值和引用3&#xf…

RabbitMQ的学习

MQ引言 什么是MQ MQ(Message Quene)&#xff1a;翻译为消息队列&#xff0c;通过典型的生产者和消费者模型生产者不断向消息队列中生产消息&#xff0c;消费者不断的从队列中获取消息。因为消息的生产和消费都是异步的&#xff0c;而且只关心消息的发送和接收&#xff0c;没有…

【MySQL 原理篇】- 凭这个,我拿下字节面试

若是想查看原图&#xff0c;请点击这里 刘卡卡 | ProcessOn 超链接 索引 从存储结构上看&#xff0c;有哪些索引从存储结构上来划分&#xff1a;BTree索引&#xff08;B-Tree或BTree索引&#xff09;&#xff0c;Hash索引&#xff0c;full-index全文索引&#xff0c;R-Tree索…

[附源码]Python计算机毕业设计Django在线票务系统

项目运行 环境配置&#xff1a; Pychram社区版 python3.7.7 Mysql5.7 HBuilderXlist pipNavicat11Djangonodejs。 项目技术&#xff1a; django python Vue 等等组成&#xff0c;B/S模式 pychram管理等等。 环境需要 1.运行环境&#xff1a;最好是python3.7.7&#xff0c;…

JavaEE

文章目录前言JRE与JDK区别JAVASE、JAVAEE、JAVAME区别Dos常用命令为什么需要Path环境变量配置前言 &#x1f4cb;前言&#x1f4cb; &#x1f49d;博客&#xff1a;【无聊大侠hello word】&#x1f49d; ✍有一点思考&#xff0c;有一点想法&#xff0c;有一点理性&#xff01;…

关于有限元应力结果精度的几点讨论

1引言 作为一名汽车结构CAE工程师&#xff0c;使用有限元法进行应力分析是我多年的日常工作。但是关于有限元应力结果的一些技术点一直未能吃透&#xff0c;查到的相关文献也不多&#xff0c;文献内容也存在很多不尽不实之处。最近一段时间&#xff0c;抽空重新读了一遍王勖成…

泊松分布一

文章目录1. 泊松分布定义2.泊松分布具体实例实例1&#xff1a;实例2&#xff1a;3.生成泊松分布的代码泊松分布适合于描述单位间隔(时间、距离、面积、体积)内随机事件发生的次数的概率分布。如电话交换机接到呼叫的次数、汽车站台的候客人数、机器出现的故障数、自然灾害发生的…

【Android】用无障碍服务整个脚本——我看刑

本文灵感来源&#xff1a;李跳跳真实好友 app 目录无障碍服务(AccessibilityService)模拟点击组件ID & 组件文本坐标后台保活效果图存在缺陷缺陷一缺陷二缺陷三缺陷四无障碍服务(AccessibilityService) 无障碍服务(AccessibilityService)&#xff0c;是Google推出为了帮助…

从零搭建Sentry

前言 Sentry 为一套开源的应用监控和错误追踪的解决方案。这套解决方案由对应各种语言的 SDK 和一套庞大的数据后台服务组成。应用需要通过与之绑定的 token 接入 Sentry SDK 完成数据上报的配置。通过 Sentry SDK 的配置&#xff0c;还可以上报错误关联的版本信息、发布环境。…