餐饮管理之菜品管理

一、有关菜品的数据库的设计

菜品主要涉及菜系、菜名、价格、折扣这些属性。

在实际情况中很有可能新加入一种菜系,但是不能即时的增加相应的菜名,故而将菜系单独的作为一个基本表——菜系表。具体的菜系表如下(主键:菜系编号)

根据菜品的属性,设计的菜单信息表如下(主键:菜号)

二、菜品的增加

界面如下:

其中菜系使用的是下拉框combobox控件,里面的内容是在界面的初始化时访问菜系表加载进去的,代码如下:

        private void Menu_Load(object sender, EventArgs e)
        {
            string strConn = @"Data Source=.;Initial Catalog=Restaurant;Integrated Security=SSPI; ";
            SqlConnection conn = new SqlConnection(strConn);
            conn.Open();

            String sqlcommondcaixi = String.Format(@"select * from 菜系信息");
            SqlCommand cmdcaixi = new SqlCommand(sqlcommondcaixi, conn);

            SqlDataReader drcaixi = cmdcaixi.ExecuteReader();
            while (drcaixi.Read())
            {
                cbxcaixi.Items.Add(drcaixi["菜系编号"].ToString()+drcaixi["菜系名"].ToString());
            }
            drcaixi.Close();

            conn.Close();
        }

选好菜系、填写名称、价格后点击确认,首先将菜系号提取出来保存在变量caixi中,接着判断要加入的菜是否已经存在,如果存在会提示,如果不存在就将加入菜单信息表中。代码如下:

        private void btn_menuok_Click(object sender, EventArgs e)
        {
            string caixi = cbxcaixi.Text.Trim();

            if (caixi[1] >= ‘0‘ && caixi[1] <= ‘9‘)
            {
                caixi = caixi.Substring(0, 2);

            }
            else
            {
                caixi = caixi.Substring(0, 1);

            }

            string caiming = txbname.Text.Trim();
            float price = float.Parse(txbprice.Text);
            string strConn = @"Data Source=.;Initial Catalog=Restaurant;Integrated Security=SSPI; ";
            SqlConnection conn = new SqlConnection(strConn);
            conn.Open();

            string sqlcommond = string.Format(@"select * from 菜单信息 where (菜系编号=‘" + caixi.Substring(0,1) + "‘) and (菜名 = ‘" + caiming + "‘) ");
            SqlCommand cmd = new SqlCommand(sqlcommond, conn);
            SqlDataReader dr = cmd.ExecuteReader();
            if (!dr.Read())
            {
                dr.Close();

                string sqlcommond1 = string.Format(@"insert into 菜单信息(菜系编号,菜名,价格,折扣)values(‘{0}‘,‘{1}‘,‘{2}‘,1)", caixi, caiming, price);
                SqlCommand cmd1 = new SqlCommand(sqlcommond1, conn);

                SqlDataReader dr1 = cmd1.ExecuteReader();
                MessageBox.Show("成功加入新菜!!");
                dr1.Close();
            }
            else
            {
                MessageBox.Show("您加的菜已经存在!!");

            }
            conn.Close();

        }

三、菜单更新

界面如下:

在这部分中,用treeview控件来显示现有的菜(父结点:菜系;子节点:菜名)。treeview控件的内容是在界面初始化时访问数据库,使用两层循环,外层循环确定父结点,内层循环确定子节点。代码如下

       private void ViewOrder_Load(object sender, EventArgs e)
        {
            treeView1.Nodes.Clear();
            string strConn = @"Data Source=.;Initial Catalog=Restaurant;Integrated Security=SSPI; ";
            SqlConnection conn = new SqlConnection(strConn);
            conn.Open();

            string sqlcommond = "select  菜系编号,菜系名 from 菜系信息 ";

            SqlCommand cmd = new SqlCommand(sqlcommond, conn);

            //  SqlDataReader dr = cmd.ExecuteReader();

            //对SQL或存储过程执行后返回的“结果”进行操作
            SqlDataAdapter da = new SqlDataAdapter();
            da.SelectCommand = cmd;

            DataSet ds = new DataSet();
            DataTable dt = new DataTable();

            da.Fill(ds);
            dt = ds.Tables[0];

            // MessageBox.Show(dt.Rows.Count.ToString());

            for (int i = 0; i < dt.Rows.Count; i++)
            {

                TreeNode rootnode = new TreeNode();
                string str = dt.Rows[i]["菜系编号"].ToString();

                rootnode.Text = str + dt.Rows[i]["菜系名"].ToString();//父结点

                treeView1.Nodes.Add(rootnode);

                string sqlcommondkid = "select 菜名 from 菜单信息 where 菜系编号 =‘" + str + "‘ ";

                SqlCommand cmdkid = new SqlCommand(sqlcommondkid, conn);

                //  SqlDataReader dr = cmd.ExecuteReader();

                //对SQL或存储过程执行后返回的“结果”进行操作
                SqlDataAdapter dakid = new SqlDataAdapter();
                dakid.SelectCommand = cmdkid;

                DataSet dskid = new DataSet();
                DataTable dtkid = new DataTable();

                dakid.Fill(dskid);
                dtkid = dskid.Tables[0];

                for (int j = 0; j < dtkid.Rows.Count; j++)//得到子结点
                {
                    string kid = dtkid.Rows[j]["菜名"].ToString();

                    rootnode.Nodes.Add(kid);

                }

            }

            conn.Close();
        }

当选中某个子节点会触发treeview控件的AfterSelect事件,右侧的菜品名、原单价、原折扣对应的控件会将选中节点的对应信息显示出来。在AfterSelect事件中首先判断选中的是否是子节点,只有子节点才会继续进行。代码如下:

       private void treeView1_AfterSelect(object sender, TreeViewEventArgs e)
        {

            if (e.Node.Parent != null)
            {
                //将选择的菜名显示在菜名框里
                if (e.Node.Parent.Text[1] >= ‘0‘ && e.Node.Parent.Text[1] <= ‘9‘)//第二个字符是数字,菜系就是两位数
                {
                    strcaixi = e.Node.Parent.Text.Substring(0, 2);

                }
                else
                {
                    strcaixi = e.Node.Parent.Text.Substring(0, 1);
                }

                txb_ordername.Text = e.Node.ToString().Substring(10);//去除文字中开始的“treenode”和“ ”

                //查询菜的具体信息:价格、折扣等
                string strConn = @"Data Source=.;Initial Catalog=Restaurant;Integrated Security=SSPI; ";
                SqlConnection conn = new SqlConnection(strConn);
                conn.Open();

                string sqlcommond = string.Format("select * from 菜单信息 where 菜名 = ‘" + txb_ordername.Text + "‘ ");
                SqlCommand cmd = new SqlCommand(sqlcommond, conn);
                SqlDataReader dr = cmd.ExecuteReader();

                while (dr.Read())
                {
                    txb_oldperprice.Text = dr["价格"].ToString();
                    txb_olddiscount.Text = dr["折扣"].ToString();

                    break;
                }

                conn.Close();

            }
        }

当点击更改按钮时会将新的要填写的信息显示出来(一开始时它们的visible属性是false,),代码如下:

        private void btn_change_Click(object sender, EventArgs e)
        {
            //将填写更新的价格折扣框显示出来
            label2.Visible = true;
            label4.Visible = true;

            txb_newdiscount.Visible = true;
            txb_newperprice.Visible = true;
            btn_ok.Visible = true;

        }

之后点击确认按钮,将新的信息保存到数据库中,代码如下:

        private void btn_ok_Click(object sender, EventArgs e)
        {
            string caiming = txb_ordername.Text.Trim();
            string newprice = txb_newperprice.Text.Trim();
            string newdiscount = txb_newdiscount.Text.Trim();

            string strConn = @"Data Source=.;Initial Catalog=Restaurant;Integrated Security=SSPI; ";
            SqlConnection conn = new SqlConnection(strConn);
            conn.Open();
            //建立SqlCommand对象,负责SQL语句的执行和存储过程的调用;
            string sqlcom = string.Format(@"update 菜单信息 set 价格 = ‘" + newprice + "‘,折扣 = ‘" + newdiscount + "‘ where 菜名 = ‘" + caiming + "‘");//插入数据是数字就无  ‘‘。。。

            SqlCommand cmd = new SqlCommand(sqlcom, conn);
            SqlDataReader dr = cmd.ExecuteReader();
            dr.Close();
            conn.Close();
            MessageBox.Show(caiming+"  菜品更新成功!!");

        }

当点击删除时将菜品信息从菜单信息表中删除,,代码如下:

        private void btn_delete_Click(object sender, EventArgs e)
        {
            string caiming = txb_ordername.Text;

            string strConn = @"Data Source=.;Initial Catalog=Restaurant;Integrated Security=SSPI; ";
            SqlConnection conn = new SqlConnection(strConn);
            conn.Open();
            string sqlcommond = string.Format(@"delete from 菜单信息 where 菜名 = ‘" + caiming + "‘");

            //建立SqlCommand对象,负责SQL语句的执行和存储过程的调用;
            SqlCommand cmd = new SqlCommand(sqlcommond, conn);

            //对SQL或存储过程执行后返回的“结果”进行操作
            SqlDataAdapter da = new SqlDataAdapter();
            da.SelectCommand = cmd;

            cmd.ExecuteReader();
            MessageBox.Show(caiming+"  成功从菜单中删除菜品!!");
            conn.Close();
        }
时间: 2024-11-08 23:24:43

餐饮管理之菜品管理的相关文章

linux软件包管理——rpm包管理

软件运行环境API:Application Programming Interface 应用程序接口(应用程序和操作系统之间的接口) 凡是符合该api标准的应用程序都可以在支持该api的操作系统上编译通过 程序源代码 --> 预处理 --> 编译 --> 汇编 --> 链接  静态编译:自身包含所有需要调用的库文件  动态编译:自身不包含,需要时调用共享库文件(.so文件)ABI:Application Binary Interface 应用程序二进制接口 规定了二进制文件的格式.

用户管理和权限管理

用户管理和权限管理 用户账号:用户.组 /etc/ passwd用户账号家目录属性 shadow用户密码和使用期限 group组账号家目录属性 gshadow组密码和使用期限 Linux用户 UID:0-65535(一般0-60000) 管理员:0 系统用户 centOS6:1-499 centOS7:1-999 登录用户 centOS6:500---60000 centOS7:1000---60000 /etc/shadow 加密与解密 加密就是将明文加密到密文 解密就是将密文还原到明文 破解

进程管理之工作管理详解(job control)

进程管理之工作管理详解(job control) 1 什么是工作管理(job control) 我们知道linux是多任务多终端工作的操作系统.我们可以在多个终端进行工作,也可以在一个终端进行多个任务工作.那在一个终端同时进行多个工作任务,就称为工作管理.比如这种情况,在一个终端,你想要复制文件,同时你还想压缩打包文件,甚至你还想编辑文件,这个时候就要用到工作管理.工作管理的情况,大概是这样的.直接上图. 首先,你要明白前台,后台的概念.前台就是当前我们登陆shell操作的终端,我们与之交互,看

软考中高项学员:2016年4月6日作业 风险管理、项目收尾管理、知识产权管理

软考中高项学员:2016年4月6日作业 风险管理.项目收尾管理.知识产权管理 一.风险管理 1.风险管理包括哪六个过程?(记) 风险规划.风险识别.定性风险分析.定量风险分析.应对计划编制.风险监控 2.什么是应急计划?请举例. 应急计划是指当一项可能的风险事件实际发生时项目团队将采取的预先确定的措施.例如当项目经理根据一个新的软件产品开发的实际进展情况,预计到该软件开发成果奖不能及时集成到正在按合同进行的信息系统项目中时,他们就会自动应急计划. 3.什么是应急储备?请举例. 应急储备是指根据项

第七节 项目沟通管理、项目合同管理

第十二章  项目沟通管理 1.项目沟通管理包括哪些过程?(记) 1) 沟通计划编制 2) 信息分发 3) 绩效报告 4) 项目干系人管理 2.阻碍有效沟通的因素有哪些? 1) 沟通双方的物理距离 2) 沟通的环境因素 3) 缺乏清晰的沟通渠道 4) 复杂的组织结构 5) 复杂的技术术语 6) 有害的态度 3.沟通计划编制的第一步是什么?目的是什么? 沟通计划编制的第一步就是干系人分析. 目的:得出项目中沟通的需求和方式,进而形成较为准确的沟通需求表,然后再针对需求进行计划编制. 4.沟通管理计划

计算机操作系统学习笔记_12_I/O管理 --I/O管理概述

h1 { margin-bottom: 0.21cm; }h1.western { font-family: "Liberation Sans",sans-serif; font-size: 18pt; }h1.cjk { font-family: "微软雅黑"; font-size: 18pt; }h1.ctl { font-family: "AR PL UMing CN"; font-size: 18pt; }h2.western { fon

Python学习第六天----Linux内存管理、进程管理、RPM包安装管理及源码安装软件

Linux内存管理.进程管理.RPM包安装管理及源码安装软件 一.交换分区     交换分区其实就相当于Windows系统下的虚拟内存的概念,当物理内存不够用的时候,由操作系统将硬盘的一块区域划分出来作为内存使用.具体使用方法如下:      [[email protected] ~]# fdisk -l 磁盘 /dev/sdb:16.1 GB, 16106127360 字节,31457280 个扇区 Units = 扇区 of 1 * 512 = 512 bytes 扇区大小(逻辑/物理):5

以Graphicslayer为管理组来管理Element.

转自原文 以Graphicslayer为管理组来管理Element. 前言 在AE开发过程中,我们经常使用Element(元素).它的出现让地图与用户之间的交互增加了不少的效果.在地图上,可以通过各种element元素来表现我们需要的效果.例如高亮显示中用到element比较频繁.往往需要往地图中添加一个element来显示效果.当在地图上element越来越多时,而且还是通过不同的功能添加进来的,那么,这么多而复杂的element 就需要用一种管理方法来进行有序管理,让element有他的归属

Linux入门之磁盘管理(1)分区管理

Linux入门之磁盘管理(1)分区管理 无论是windows还是linux,目前支持的分区结构只有两种,一种是基于blos检查启动的mbr结构,另一种是基于uefi(统一扩展固件接口)的opt分区结构.当然,目前广泛的还是使用的mbr结构. linux中有很多不同的文件系统,当使用安装光盘安装的readhat类的linux系统默认一般支持的主要格式为ext类(ext2.ext3.ext4),当然这些是redhat或者centos5.6所使用的默认设备,且安装centos7时默认使用的分区格式为x