精华内容
下载资源
问答
  •  本毕业设计(论文)以商品进销存管理系统的分析和设计为出发点,详细介绍了开发本系统的各个步骤:系统分析、系统设计、系统实现、系统维护。在系统分析中先后用数据流图、系统的功能结构图分析了系统所需的各种数据...
  • 今天介绍药品进销存管理系统,当然也可以作为其他系统。 本系统的特色是客户可以注册登录系统进行药品的采购哦。 调试步骤: 1.创建数据库tedu_DIEMS,并导入数据库文件 2.导入项目,import-maven 3.修改application...

    今天介绍药品进销存管理系统,当然也可以作为其他系统。
    本系统的特色是客户可以注册登录系统进行药品的采购哦。
    调试步骤:
    1.创建数据库tedu_DIEMS,并导入数据库文件
    2.导入项目,import-maven
    3.修改application.properties的数据库IP地址、用户名和密码,改为自己的信息
    4.找到DiemsApplication,并找到main函数,右击run DiemsApplication即可
    5.项目跑起来之后,在浏览器访问网址:http://localhost:8080/login.html
    6.客户和员工对应数据库表t_customers和t_employees表,用户名是手机号,密码也是对应的手机号

    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述

    展开全文
  • 超市进销存管理系统使用说明书 配置说明 附加ORACLE数据库 (1)首先创建一个名为“MR”的用户,如图1.1所示。 图1.1 创建新用户 (2)在“角色”选项卡中添加DBA角色,如图1.2所示。 图1.2 添加角色 (3)任意...
  • JAVA 进存销管理系统

    2014-06-08 14:41:04
    进存销管理系统代码,代码很详细,有详细的步骤
  • 有代码,有界面截图,有步骤,业务流程分析等内容
  • 按照软件工程设计步骤+代码 使用SQLsever数据库
  • 课程设计的主要目的是加强学生对理论知识的理解,使学生熟悉主流的建模工具和软件系统开发技术,掌握面向对象系统开发各阶段的具体方法与步骤,以及系统开发各阶段所产生的系统模型和文档格式,获得软件系统的相关...
  • 一个简单的JXC,包含完整的开发步骤、项目源码、数据库sql。
  • java企业进销存管理

    2013-06-18 12:01:30
    企业进销存管理系统程序使用说明 主要功能 中小企业在我国经济发展中具有重要地位,目前我国的中小企业数量众多,地区分布广泛,行业分布跨度大。随着全球经济一体化的发展和电子商务的兴起,中小企业之间的竞争将...
  • 智慧工厂订单生产管理软件,工业订单BOM进销存系统 智慧工厂订单生产管理软件,工业订单BOM进销存系统  工厂一般都是按客户订单生产,采购进来原材料,再生产成品销售,不同于商贸企业采购进来和出库为同一种商品。...

    智慧工厂订单生产管理软件,工业订单BOM进销存系统

    智慧工厂订单生产管理软件,工业订单BOM进销存系统

      工厂一般都是按客户订单生产,采购进来原材料,再生产成品销售,不同于商贸企业采购进来和出库为同一种商品。如何有效的利用仓库管理软件,进行库存和订单的管理呢,易特仓库管理软件工贸版具有客户订单,BOM,材料采购,车间领料,生产成品入库的功能,能满足一般小型生产企业的库存管理需求工贸版具有生产成品入库,自动扣除原材料的功能,并有生产领料报表,省去领料步骤的麻烦。

    互联网是个神奇的大网,大数据开发和软件定制也是一种模式,这里提供最详细的报价,如果你真的想做,可以来这里,这个手技的开始数字是壹伍扒中间的是壹壹叁叁最后的是驷柒驷驷,按照顺序组合起来就可以找到,我想说的是,除非你想做或者了解这方面的内容,如果只是凑热闹的话,就不要来了。

      财务应收应付款功能可以管理客户和供应商的欠款,进行收付款操作

      随着工厂的规模增大,业务量的增多,工厂订单管理系统在工厂中已经是不可缺少的一部分了,工厂订单管理系统能够及时掌握全部订单信息,工厂能够根据系统中提供的信息把控好生产,不会产生少单漏单,过量生产的现象发生。

      由于工厂订单管理系统持续改进的长期性和个性化特征,这就使得这一过程更难于管理和操作,方法之一就是设定阶段性的效益目标和持续改进的关键活动。很多学者就ERP冲效益问题进行了研究,从管理和经济角度,提出了许多定性、定量的评估方法,多数ERP效益评估重点关注ERP的投资回报,更关注外在的结果;王惠芬提出ERP实施应用过程中的企业管理模式趋同理论,使得ERP效益评估进一步关注企业内部,其着作中提出的“成熟度模型”强化了过程思想。然而,该理论中仍将研究重点放在实施过程,并且企业管理模式的辨识的可操作性不强。

      与传统信息系统相比,工厂订单管理系统具有更高的战略地位,不仅提供基本的信息工具,而且在企业范围内建立起新的管理模式,逐步成为数字企业的核心。因此,面向持续改进的ERP效益评估,不仅要突出ERP的阶段性效益,更要反映出企业在管理模式变化,在重塑企业DNA过程中所发生的变化,能够具有较强的阶段对比性,以及良好的方向导向性。

      工厂订单管理系统的持续改进是一个长期的过程,需要不断的进行分析、修正。针对模块的应用首先要做两项工作:一方面要使已经上线的模块能够更平稳的运行,扩大企业效益;另一方面是对系统已有但尚未应用的功能进行深度的应用。因为工厂订单管理系统是一个非常庞大的系统,上线部分其实只是基本功能的基本应用,相对于系统本身具备的全部功能还差得很远。同时还有一些业务不能直接满足,可能需要做一些开发。对功能深入应用主要分为四个步骤:首先要综合系统的功能,对已经在系统或者没有在系统中运行的流程进行分析:其次分析两者之间的运行差异,找到系统功能可以增强的点;再次,综合系统功能设计新方案;最后,调整运行方式并实施。

      工厂订单管理系统实施的主要目的是系统通过先进的管理思想规范企业流程,使企业获得效益。所以如何评估ERP的效益,成为持续改进的一个重要课题。在ERP解决方案中对企业的愿景进行了描述,而企业的高层应该定期以此为标准,对整套ERP系统进行评估,确保系统的总体运行与系统运行的目标相一致。持续改进是对管理提升的支撑,随着企业环境的变化必然会导致业务的变化,同时企业对管理的认识也在不断的深入,诸多因素导致企业不可避免地要进行组织、流程等方面的调整,相应的,系统要能支撑这样的变化。管理提升与系统应用是相辅相成的关系,系统应用的深化同样可以促使管理水平的提升。比如系统里的平衡计分卡功能,要求企业的绩效体系有非常高的水平,这是一个管理与IT应用相互交融不断循环的过程。

      持续改进的过程应该是一个保持系统与业务需要相匹配的过程。企业高层应该认识到,工厂订单管理系统项目组不单单是一个项目小组,同时也是一个企业业务运作小组。它的作用不仅仅是维护系统本身的问题,更重要的是要关注系统是否能够很好的满足不断变化的业务需求,并同时提出业务流程优化和改进的建议。一般来说,ERP项目小组由企业各业务部门骨干和信息技术部门的人员组成,在项目实施的过程中,无论是来自业务部门的成员还是来自信息技术部门的成员,都对企业的业务和系统有了新的认识,并且最清楚如何使系统和业务更好地融合在一起。所以,这批工厂订单管理系统冲项目小组的骨干成员都需要保留下来,只有他们才能在持续改进的过程中更好地使系统支持业务的发展。同时企业内部的信息主管在erp管理软件项目完成之后应该重新考虑信息部门的职责和组织结构,信息部门的职能应该从技术服务为核心转变为以解决技术和业务相匹配和融合为重点的过渡。在这个时候,应该重新定位ERP项目组成员的角色,因为他们已经不是项目开始之初只懂业务或只懂信息技术的人才,他们已经成为既懂业务又懂技术的复合性人才,这是一个企业在上完ERP系统实现持续改进所必需的人才。

      工厂订单管理系统选择老板管家软件,不管工厂是什么样的情况,老板管家软件都能定制出与之相适合的管理系统。老板管家软件企业同样适用,定制老板管家软件省去了企业选型的苦恼,能够省不少事情。老板管家软件对于企业工厂而言是省钱省时省力的投资。

    展开全文
  • Delphi 7新特性1.1 Delphi 7的新特性及增强功能1.1.1 Delphi 7的新...管理人员模块功能1.3 进销存财务系统操作详述1.3.1 安装步骤及软件设置1.3.2 登录操作1.3.3 普通员工操作1.3.4 财会人员操作1.3.5...
  • c#实现超市管理系统进销存–(包含部分用户权限的管理)) 上面是文档的大概内容,有些写的还不够全面,大致包含了软件开发一些必须的步骤,虽然这个项目仅仅是练习,但俗话说的好–“练为战,不为看!”,...

    记录一下自己做的项目,第一次用c#写项目还有很多不足,大神们多多指教
    我的个人网站地址(域名备案还没通过):http://123.56.100.46/
    欢迎访问!!

    c#实现超市管理系统(进销存–(包含部分用户权限的管理))

    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    上面是文档的大概内容,有些写的还不够全面,大致包含了软件开发一些必须的步骤,虽然这个项目仅仅是练习,但俗话说的好–“练为战,不为看!”,在这些方面尽量做的完整一些没啥坏处。

    系统模块

    大致的模块划分

    功能设计

    (1)要求系统具有良好的人机交互界面
    (2)对进货和库存信息进行有效的管理
    (3)对用户的信息进行有效的管理
    (4)对用户输入的信息可以进行有效的检验
    (5)对超市销售信息进行有效的存储和管理
    (6)对超市库存信息进行有效的存储和管理
    (7)对超市进货信息进行有效的存储和管理
    (8)强大的报表打印功能
    (9)对用户输入的数据,进行严格的数据检验,尽可能避免人为的错误
    (10)系统开发帮助文档,方便用户在遇到疑问是随时查阅
    (11)有用户权限的区别,管理员才可以对数据库中用户进行增删改,而普通用户不可以,普通用户只能修改自己的信息。

    系统开发语言

    在这里插入图片描述

    系统开发平台

    在这里插入图片描述

    系统开发数据库

    在这里插入图片描述

    数据库设计

    数据库中我做了四个表,分别是库存信息表、销售信息表、进货信息表、员工信息表。

    1. 库存信息表
      在这里插入图片描述
    2. 销售信息表
      在这里插入图片描述
    3. 进货信息表
      在这里插入图片描述
    4. 员工信息表
      在这里插入图片描述
      在的dataset中展示出来大概是这样的
      在这里插入图片描述

    功能细化图

    下一步要做的就是开始写代码,所以在这之前我把写过的功能分析更细化了一下,删除了一些我目前还没法实现的功能,保留了一些必要的功能
    在这里插入图片描述

    登陆界面

    在这里插入图片描述
    登陆界面这里是没有做选择用户类型的,我写了一个静态的全局变量来保存用户的信息,在输入用户名密码的时候自动识别用户类型(管理员/普通用户)
    代码:
    #define _CRT_SECURE_NO_DEPRECATE
    #define _CRT_SECURE_NO_WARNINGS
    using System;
    using System.Collections.Generic;
    using System.ComponentModel;
    using System.Data;
    using System.Drawing;
    using System.Linq;
    using System.Text;
    using System.Threading.Tasks;
    using System.Windows.Forms;
    using System.Data.OleDb;
    using static WindowsForms0929.Program;

    namespace WindowsForms0929
    {
    public partial class Form2 : Form
    {
    public static string name = “”;
    public static string role = “”;
    public static string passwd = “”;
    public Form2()
    {
    InitializeComponent();
    }
    public static int count = 1;
    public static string strUserName, strUserPwd, strUserRole;
    //public class Userinfo
    //{
    // public static string uname = “”;
    // public static string urole = “”;
    //}
    private void Form2_Load(object sender, EventArgs e)
    {
    txt_id.SkinFile = “skin\mp10maroon.ssk”;
    }

        private void button1_Click(object sender, EventArgs e)
    
        {
            int count = 1;
            if (text_id.Text.Trim() == "")
            {
                MessageBox.Show("用户名不能为空!");
                text_id.Focus();
                count++;
                return;
    
            }
            if (text_passwd.Text.Trim() == "")
            {
                MessageBox.Show("密码不能为空!");
                text_passwd.Focus();
                count++;
                return;
            }
    
            //OleDbConnection conn = new OleDbConnection();
            //conn.ConnectionString = @"Provider=Microsoft.ACE.OLEDB.12.0;Data Source=.\\Database1.accdb;";
    
            //string Sqlstr = "select count(*) from tb_EmpInfo where emp_login_name='" + text_id.Text
                //+ "'" + " and emp_login_passwd='" + text_passwd.Text + "'";
            //OleDbCommand cmd = new OleDbCommand(Sqlstr, conn);
            //if (conn.State == ConnectionState.Closed)
            //{
            //    try
            //    {
            //        conn.Open();
            //    }
            //    catch (Exception ex)
            //    {
            //        MessageBox.Show(ex.ToString());
            //        return;
            //    }
            //}
    
    
            //OleDbDataReader odr = cmd.ExecuteReader();
    
            //while (textBox1.Text.Trim()!=""&& textBox2.Text.Trim() != "")
            //{
            //    if ((Convert.ToInt32(cmd.ExecuteScalar())) > 0)
            //    {
    
            //        Form1 frm = new Form1();
            //        frm.Show();
            //        this.Hide();
            //    }
            //    else
            //    {
            //        count++;
            //        MessageBox.Show("用户名或密码错误");
    
            //        textBox1.Text = "";
            //        textBox2.Text = "";
            //        textBox1.Focus();
    
            //    }
            //}
            //if (odr.HasRows)
            //{
            //    odr.Read();
            //    if (odr[2].ToString().Trim() == text_passwd.Text.Trim())
            //    {
            //        strUserName = odr[1].ToString();
            //        strUserPwd = odr[3].ToString();
            //        strUserRole = odr[4].ToString();
            //        Form3 frm = new Form3();
            //        frm.Show();
            //        this.Hide();
            //    }
            //    else
            //    {
            //        MessageBox.Show("密码错误,请输入正确的密码!");
            //        text_passwd.Text = "";
            //        text_passwd.Focus();
            //        count++;
            //        return;
            //    }
    
            //}
            //else
            //{
            //    MessageBox.Show("用户名错误!");
            //    text_id.Text = "";
            //    text_passwd.Text = "";
            //    text_id.Focus();
            //    count++;
            //    return;
            //}
            //if (count > 2)
            //{
            //    button1.Enabled = false;
    
            //}
            //return;
            if (text_id.Text == "")
            {
                MessageBox.Show("用户名不能为空");
                return;
            }
            if (text_passwd.Text == "")
            {
                MessageBox.Show("密码不能为空");
                return;
            }
            string sqlstr = "select count(*) from tb_EmpInfo where emp_login_name='" + text_id.Text
                + "'" + " and emp_login_passwd='" + text_passwd.Text + "'";
            publicClass.getSqlConnection get = new publicClass.getSqlConnection();
            OleDbConnection conn = get.GetCon();
            OleDbCommand cmd = new OleDbCommand
            {
                Connection = conn,
                CommandType = CommandType.Text,
                CommandText = sqlstr
                
            };
            if (Convert.ToInt32(cmd.ExecuteScalar()) > 0)
            {
                //得到用户名
                name = text_id.Text.Trim();
                passwd = text_passwd.Text.Trim();
    
               
                cmd.CommandText = "select emp_role from tb_EmpInfo where emp_login_name='" + text_id.Text
                + "'" + " and emp_login_passwd='" + text_passwd.Text + "'";
    
                //得到用户角色
                role = cmd.ExecuteScalar().ToString();
                Userinfo.uname = text_id.Text.Trim(); 
                Userinfo.urole = cmd.ExecuteScalar().ToString();
    
                MessageBox.Show("恭喜你\n"+role+"\n登陆成功!!");
    
                Form3 frm = new Form3();
                frm.Show();
                this.Hide();
            }
            else
            {
                MessageBox.Show("用户名或密码错误!请重试");
                return;
            }
    
    
    
    
    
        }
        private void Form2_FormClosing(object sender,FormClosedEventArgs e)
        {
            DialogResult dr = MessageBox.Show("是否关闭窗体?","提示",MessageBoxButtons.YesNo,
                MessageBoxIcon.Warning);
            if (dr == DialogResult.Yes)
            {
                Application.ExitThread();
            }
    
        }
    
        private void text_id_TextChanged(object sender, EventArgs e)
        {
    
        }
    
        private void label2_Click(object sender, EventArgs e)
        {
    
        }
    
        private void label1_Click(object sender, EventArgs e)
        {
    
        }
    
        private void label3_Click(object sender, EventArgs e)
        {
    
        }
    
        private void pictureBox3_Click(object sender, EventArgs e)
        {
            MessageBox.Show("原来你也喜欢喝可乐,快加入我们吧!!");
        }
    
        private void button2_Click(object sender, EventArgs e)
        {
            DialogResult dr = MessageBox.Show("是否关闭窗体?", "提示", MessageBoxButtons.YesNo,
                MessageBoxIcon.Warning);
            if (dr == DialogResult.Yes)
            {
                Application.ExitThread();
            }
        }
        protected override void OnClosing(CancelEventArgs e)
        {
            DialogResult result = MessageBox.Show("确定退出窗口?", "警告",
                MessageBoxButtons.YesNo,MessageBoxIcon.Warning);
            e.Cancel = result != DialogResult.Yes;
            base.OnClosing(e);
        }
    }
    

    }

    program.cs中的代码:
    用户权限信息
    在这里插入图片描述
    当用户登陆的时候自动识别用户权限,我用了一个messagebox来显示

    主界面

    在这里插入图片描述
    主界面大家可以看到很多功能,还有一些小工具,比如说旁边的计算机、记事本等
    下面的状态栏显示的也是用户的权限信息
    在这里插入图片描述
    代码:

    #define _CRT_SECURE_NO_DEPRECATE
    #define _CRT_SECURE_NO_WARNINGS
    
    using System;
    using System.Collections.Generic;
    using System.ComponentModel;
    using System.Data;
    using System.Drawing;
    using System.Linq;
    using System.Text;
    using System.Threading.Tasks;
    using System.Windows.Forms;
    using System.Runtime.InteropServices;
    using static WindowsForms0929.Program;
    
    namespace WindowsForms0929
    {
        public partial class Form3 : Form
        {
            public Form3()
            {
                InitializeComponent();
            }
    
            private void 用户信息ToolStripMenuItem_Click(object sender, EventArgs e)
            {
                Form1 fm1 = new Form1();
                fm1.ShowDialog();
                fm1.Owner = this;
            }
    
            private void 关于ToolStripMenuItem_Click(object sender, EventArgs e)
            {
                AboutBox1 ab = new AboutBox1();
                ab.ShowDialog();
            }
    
            private void button1_Click(object sender, EventArgs e)
            {
    
            }
    
            private void button3_Click(object sender, EventArgs e)
            {
                System.Diagnostics.Process.Start("calc.exe");
            }
            [DllImport("user32 ")]
            public static extern bool LockWorkStation();
            private void button1_Click_1(object sender, EventArgs e)
            {
                LockWorkStation();
            }
    
            private void button2_Click(object sender, EventArgs e)
            {
                Application.Restart();
            }
    
            private void button4_Click(object sender, EventArgs e)
            {
                Application.Exit();
            }
    
            private void 进货管理ToolStripMenuItem_Click(object sender, EventArgs e)
            {
                Form4 frm4 = new Form4();
                frm4.ShowDialog();
                frm4.Owner = this;
            }
    
            private void 库存管理ToolStripMenuItem_Click(object sender, EventArgs e)
            {
                Form5 frm5 = new Form5();
                frm5.ShowDialog();
                frm5.Owner = this;
            }
    
            private void 销售管理ToolStripMenuItem_Click(object sender, EventArgs e)
            {
                Form6 frm6 = new Form6();
                frm6.ShowDialog();
                frm6.Owner = this;
            }
    
            private void 修改密码ToolStripMenuItem_Click(object sender, EventArgs e)
            {
                Form7 frm7 = new Form7();
                frm7.ShowDialog();
                frm7.Owner = this;
            }
    
            private void 其他报表ToolStripMenuItem_Click(object sender, EventArgs e)
            {
                Form8 frm8 = new Form8();
                frm8.ShowDialog();
                frm8.Owner = this;
            }
    
            private void 使用手册ToolStripMenuItem_Click(object sender, EventArgs e)
            {
                Help.ShowHelp(this, "help2.chm");
            }
    
            private void 管理ToolStripMenuItem_Click(object sender, EventArgs e)
            {
    
            }
    
            private void 管理员报表ToolStripMenuItem_Click(object sender, EventArgs e)
            {
                Form10 frm10 = new Form10();
                frm10.ShowDialog();
                frm10.Owner = this;
            }
    
            private void Form3_Load(object sender, EventArgs e)
            {
                toolStripStatusLabel1.Text = Userinfo.uname;
                toolStripStatusLabel2.Text = Userinfo.urole;
                toolStripStatusLabel3.Text = DateTime.Now.ToString();
            }
    
            private void 进货报表ToolStripMenuItem_Click(object sender, EventArgs e)
            {
                Form9 frm9 = new Form9();
                frm9.ShowDialog();
                frm9.Owner = this;
            }
    
            private void button5_Click(object sender, EventArgs e)
            {
                System.Diagnostics.Process.Start("notepad.exe");
            }
    
            private void toolStripButton1_Click(object sender, EventArgs e)
            {
               System.Diagnostics.Process.Start("notepad.exe");
            }
    
            private void toolStripButton2_Click(object sender, EventArgs e)
            {
                System.Diagnostics.Process.Start("calc.exe");
            }
    
            private void toolStripButton3_Click(object sender, EventArgs e)
            {
                System.Diagnostics.Process.Start("mspaint.exe");
            }
    
            private void toolStripButton4_Click(object sender, EventArgs e)
            {
                Help.ShowHelp(this, "help2.chm");
            }
    
            private void menuStrip1_ItemClicked(object sender, ToolStripItemClickedEventArgs e)
            {
    
            }
    
            [DllImport("user32.dll")]
            public static extern bool ReleaseCapture();
            [DllImport("user32.dll")]
            //[DllImport("user32.dll")]
            public static extern bool SendMessage(IntPtr hwnd, int wMsg, int wParam, int lParam);
            public const int WM_SYSCOMMAND = 0x0112;
            public const int SC_MOVE = 0xF010;
            public const int HTCAPTION = 0x0002;
            private void MainForm_MouseDown(object sender, MouseEventArgs e)
            {
                ReleaseCapture();
                SendMessage(this.Handle, WM_SYSCOMMAND, SC_MOVE + HTCAPTION, 0);
            }
    
            private void toolStripButton5_Click(object sender, EventArgs e)
            {
                this.WindowState = FormWindowState.Minimized;
            }
    
            private void toolStripButton6_Click(object sender, EventArgs e)
            {
                Application.Exit();
            }
    
            private void 锁屏ToolStripMenuItem_Click(object sender, EventArgs e)
            {
                LockWorkStation();
            }
    
            private void 重新登陆ToolStripMenuItem_Click(object sender, EventArgs e)
            {
                Application.Restart();
            }
    
            private void button6_Click(object sender, EventArgs e)
            {
                this.WindowState = FormWindowState.Minimized;
            }
    
            private void 缩小窗体ToolStripMenuItem_Click(object sender, EventArgs e)
            {
                this.WindowState = FormWindowState.Normal;
            }
    
            private void 最小化ToolStripMenuItem_Click(object sender, EventArgs e)
            {
                this.WindowState = FormWindowState.Minimized;
            }
    
            private void 放大窗体ToolStripMenuItem_Click(object sender, EventArgs e)
            {
                this.WindowState = FormWindowState.Maximized;
            }
    
            private void 退出ToolStripMenuItem_Click(object sender, EventArgs e)
            {
                DialogResult dr = MessageBox.Show("确定退出软件吗?", "提示", MessageBoxButtons.YesNo,
                    MessageBoxIcon.Warning);
                if (dr == DialogResult.Yes)
                {
                    Application.Exit();
                }
            }
    
            private void button4_Click_1(object sender, EventArgs e)
            {
                Application.Exit();
            }
    
            private void button3_Click_1(object sender, EventArgs e)
            {
                System.Diagnostics.Process.Start("calc.exe");
            }
    
            private void button1_Click_2(object sender, EventArgs e)
            {
                LockWorkStation();
            }
    
            private void button2_Click_1(object sender, EventArgs e)
            {
                Application.Restart();
            }
    
            private void button5_Click_1(object sender, EventArgs e)
            {
                System.Diagnostics.Process.Start("notepad.exe");
            }
    
            private void button6_Click_1(object sender, EventArgs e)
            {
                this.WindowState = FormWindowState.Minimized;
            }
    
            private void pictureBox3_Click(object sender, EventArgs e)
            {
                MessageBox.Show("原来你也喜欢喝可乐,快加入我们吧!!");
            }
    
            private void pictureBox2_Click(object sender, EventArgs e)
            {
                MessageBox.Show("原来你也喜欢喝可乐,快加入我们吧!!");
            }
    
            private void button7_Click(object sender, EventArgs e)
            {
                Form12 frm12 = new Form12();
                frm12.ShowDialog();
                frm12.Owner = this;
    
            }
            protected override void OnClosing(CancelEventArgs e)
            {
                DialogResult dr = MessageBox.Show("确定退出系统吗?", "Warning!", MessageBoxButtons.YesNo, MessageBoxIcon.Warning);
                if(dr!=DialogResult.Yes)
                {
                    e.Cancel = true;
                }
                base.OnClosing(e);
            }
    
            private void 软件帮助文档RToolStripMenuItem_Click(object sender, EventArgs e)
            {
                Help.ShowHelp(this, "help.chm");
            }
        }
    }
    
    

    查询

    在这里插入图片描述
    这个模块包含两个功能,一个是查询用户的基本信息,一个是修改当前用户登陆的密码
    用户基本信息:
    在这里插入图片描述
    点击刷新按钮:在右边的gridview中显示数据库中所有用户信息
    点击添加用户按钮:要使这个按钮有效,首先要完善上面textbox框中的内容,否则会提示完善信息(注意: 这里只有管理员用户才有权限,普通用户是没法添加用户信息的
    在这里插入图片描述
    点击删除用户:在右侧的gridview中选中用户,点击删除按钮该用户的信息就会被删除(注意: 这里只有管理员用户才有权限,普通用户是没法删除用户信息的
    在这里插入图片描述
    点击统计按钮可以统计所有管理员和普通用户的信息
    代码:

    #define _CRT_SECURE_NO_DEPRECATE
    #define _CRT_SECURE_NO_WARNINGS
    
    using System;
    using System.Collections.Generic;
    using System.ComponentModel;
    using System.Data;
    using System.Drawing;
    using System.Linq;
    using System.Text;
    using System.Threading.Tasks;
    using System.Windows.Forms;
    using System.Data.OleDb;
    using WindowsForms0929.publicClass;
    using static WindowsForms0929.Program;
    
    
    namespace WindowsForms0929
    {
        public partial class Form1 : Form
        {
            public static string name = "";
            public static string role = "";
            public static string passwd = "";
            DataSet ds;
            OleDbDataAdapter da;
            publicClass.getSqlConnection get;
            OleDbConnection conn;
            OleDbCommand cmd;
            OleDbCommand cmd2;
            DataTable dt;
            string conststr = "select emp_name as 姓名,emp_login_name as 登录名," +
                    "emp_login_passwd as 登录密码,emp_role as 用户角色,emp_phone as 联系电话" +
                    " from tb_EmpInfo";
            public Form1()
            {
                InitializeComponent();
            }
            private void Qingkong()
            {//清空文本框的内容
                txt_login_name.Clear();
                txt_login_passwd.Clear();
                txt_name.Clear();
                txt_phone.Clear();
            }
            public int count = 2;
            private void button1_Click(object sender, EventArgs e)
            {
                OleDbConnection conn = new OleDbConnection();
                conn.ConnectionString = @"Provider=Microsoft.ACE.OLEDB.12.0;Data Source=.\\Database1.accdb;";
                //Trim--去掉输入框中读取到的空格
                string Strsda1 = "select * from tb_user where user_Name like'%" + textBox1.Text.Trim() + "%'";
                string Strsda2 = "select * from tb_user where user_Name='%" + textBox1.Text.Trim() + "%'";
                OleDbCommand cmd = new OleDbCommand(Strsda1, conn);
                conn.Open();
                OleDbDataAdapter sda1 = new OleDbDataAdapter(Strsda1,conn);
                OleDbDataAdapter sda2 = new OleDbDataAdapter(Strsda2,conn);
                DataSet ds = new DataSet();
    
                sda1.Fill(ds, "Tb_userinfo1");
                sda2.Fill(ds, "Tb_userinfo2");
    
                dataGridView1.DataSource = ds.Tables["Tb_userinfo1"];
                
    
            }
    
            private void Form1_Load(object sender, EventArgs e)
            {
    
            }
    
            //private void button2_Click(object sender, EventArgs e)
            //{
            //    OleDbConnection conn = new OleDbConnection();
            //    conn.ConnectionString = @"Provider=Microsoft.ACE.OLEDB.12.0;Data Source=.\\Database1.accdb;";
    
            //    string Strsda1 = "select * from tb_user where user_role='经理'";
            //    OleDbDataAdapter sda1 = new OleDbDataAdapter(Strsda1, conn);
            //    DataSet myds = new DataSet();
            //    sda1.Fill(myds);
            //    dataGridView1.DataSource = myds.Tables[0];
            //    conn.Open();
            //    //int count = Convert.ToInt32(cmd.ExecuteScalar());
                
            //    //DataSet ds = new DataSet();
    
            //    //sda1.Fill(ds, "Tb_userinfo1");
    
            //    //dataGridView1.DataSource = ds.Tables["Tb_userinfo1"];
            //    //textBox2.Text = Convert.ToString(count+1);
    
            //}
            protected override void OnClosing(CancelEventArgs e)
            {
                DialogResult result = MessageBox.Show("确定退出窗口?", "警告",
                    MessageBoxButtons.YesNo, MessageBoxIcon.Warning);
                e.Cancel = result != DialogResult.Yes;
                base.OnClosing(e);
            }
    
            private void label1_Click(object sender, EventArgs e)
            {
    
            }
    
            private void textBox2_TextChanged(object sender, EventArgs e)
            {
    
            }
    
            private void button3_Click(object sender, EventArgs e)
            {
    
            }
    
            private void btn_qingkong_Click(object sender, EventArgs e)
            {
                Qingkong();
    
                string str = conststr;
                get = new publicClass.getSqlConnection();
                conn = get.GetCon();
                cmd = new OleDbCommand()
                {
                    CommandText = str,
                    Connection = conn
                };
                ds = new DataSet();
                da = new OleDbDataAdapter
                {
                    SelectCommand = cmd
                };
    
                da.Fill(ds, "tb_EmpInfo");
                dataGridView2.DataSource = ds.Tables["tb_EmpInfo"];
    
                conn.Dispose();
                cmd.Dispose();
                da.Dispose();
                ds.Dispose();
            }
    
            private void button1_Click_1(object sender, EventArgs e)
            {
                得到用户名
                //name = text_id.Text.Trim();
                //passwd = text_passwd.Text.Trim();
    
                //cmd.CommandText = "select emp_role from tb_EmpInfo where emp_login_name='" + text_id.Text
                //+ "'" + " and emp_login_passwd='" + text_passwd.Text + "'";
    
                得到用户角色
                //role = cmd.ExecuteScalar().ToString();
                if (Userinfo.urole == "管理员") { 
                if (txt_name.Text.Equals(""))
                {
                    MessageBox.Show("用户名字未输入");
                    return;
                }
                if (txt_login_name.Text.Equals(""))
                {
                    MessageBox.Show("用户登录名未输入");
                    return;
                }
    
                if (txt_phone.Text.Equals(""))
                {
                    MessageBox.Show("用户电话未输入");
                    return;
                }
    
                if (txt_login_passwd.Text.Equals(""))
                {
                    MessageBox.Show("用户密码未输入");
                    return;
                }
    
    
                string str_insert = "insert into tb_EmpInfo(emp_name,emp_login_name,emp_login_passwd,emp_role,emp_phone) " +
                    "values('" +
                    txt_name.Text.Trim() + "','" +
                    txt_login_name.Text.Trim() + "','" +
                    txt_login_passwd.Text.Trim() + "','" +
                    txt_role.SelectedItem.ToString().Trim() + "','" +
                    txt_phone.Text.Trim() + "'" +
                    ")";
    
                get = new publicClass.getSqlConnection();
                conn = get.GetCon();
                cmd = new OleDbCommand
                {
                    Connection = conn,
                    CommandText = str_insert
                };
                cmd.ExecuteNonQuery();
    
                //更新cmd的SQL语句
                cmd.CommandText = conststr;
    
                ds = new DataSet();
                da = new OleDbDataAdapter
                {
                    SelectCommand = cmd
                };
    
                da.Fill(ds, "tb_EmpInfo");
                dataGridView2.DataSource = ds.Tables["tb_EmpInfo"];
    
                cmd.Dispose();
                da.Dispose();
                ds.Dispose();
                MessageBox.Show("添加成功!");
                    //dataGridView1.Update();
                }
                else
                {
                    MessageBox.Show("权限未达到,详情咨询管理员!");
                }
            }
    
            private void button6_Click(object sender, EventArgs e)
            {
                if (Userinfo.urole == "管理员") { 
                string str = dataGridView2.CurrentRow.Cells[1].Value.ToString().Trim();
    
                get = new publicClass.getSqlConnection();
                conn = get.GetCon();
                cmd = new OleDbCommand
                {
                    CommandText = "delete from tb_empInfo where emp_login_name='" + str + "'",
                    Connection = conn
                };
                cmd.ExecuteNonQuery();
    
    
                cmd.CommandText = conststr;
                ds = new DataSet();
                da = new OleDbDataAdapter
                {
                    SelectCommand = cmd
                };
                da.Fill(ds, "tb_EmpInfo");
                dataGridView2.DataSource = ds.Tables["tb_EmpInfo"];
    
                conn.Dispose();
                cmd.Dispose();
                da.Dispose();
                ds.Dispose();
                dataGridView2.Update();
    
                MessageBox.Show("删除" + str + "成功");
                }
                else
                {
                    MessageBox.Show("权限不够,详情咨询管理员!!");
                }
            }
            public static string newPasswd;
            private void button7_Click(object sender, EventArgs e)
            {
                if (txt_login_name.Text.Equals("") && txt_name.Text.Equals(""))
                {
                    MessageBox.Show("请输入姓名或用户登录名!");
                    return;
                }
    
                if (txt_login_name.Text.Equals("") == false)
                {
                    string sql = conststr + " where emp_login_name='"
                                + txt_login_name.Text.Trim()
                                + "'";
    
                    get = new publicClass.getSqlConnection();
                    conn = get.GetCon();
    
                    cmd = new OleDbCommand
                    {
                        CommandText = sql,
                        Connection = conn
                    };
                    da = new OleDbDataAdapter
                    {
                        SelectCommand = cmd
                    };
                    //da.SelectCommand.ExecuteNonQuery();
                    ds = new DataSet();
                    da.Fill(ds, "tb_EmpInfo");
                    dt = ds.Tables["tb_EmpInfo"];
    
    
                    dataGridView1.DataSource = ds.Tables["tb_EmpInfo"];
    
                    cmd.Dispose();
                    ds.Dispose();
                    dt.Dispose();
                    conn.Dispose();
                }
                else
                {
                    string sql = conststr + " where emp_name='"
                                + txt_name.Text.Trim()
                                + "'";
    
                    get = new publicClass.getSqlConnection();
                    conn = get.GetCon();
    
                    cmd = new OleDbCommand(sql, conn);
                    da = new OleDbDataAdapter(sql, conn);
                    //da.SelectCommand.ExecuteNonQuery();
                    ds = new DataSet();
                    da.Fill(ds, "tb_EmpInfo");
                    dt = ds.Tables["tb_EmpInfo"];
    
                    dataGridView2.DataSource = dt;
                }
            }
    
            private void button8_Click(object sender, EventArgs e)
            {
                get = new publicClass.getSqlConnection();
                conn = get.GetCon();
                string admin = "select count(*) from tb_EmpInfo where emp_role='管理员'";
                string normal = "select count(*) from tb_EmpInfo where emp_role='普通用户'";
    
                cmd = new OleDbCommand(admin, conn);
                txt_admin_num.Text = cmd.ExecuteScalar().ToString();
                cmd.CommandText = normal;
                txt_normal_num.Text = cmd.ExecuteScalar().ToString();
            }
    
            private void Form1_Load_1(object sender, EventArgs e)
            {
                //获取数据
                get = new publicClass.getSqlConnection();
                conn = get.GetCon();
                cmd = new OleDbCommand
                {
                    CommandText = conststr,
                    Connection = conn
                };
                ds = new DataSet();
                da = new OleDbDataAdapter
                {
                    SelectCommand = cmd
                };
                da.Fill(ds, "tb_EmpInfo");
                dataGridView2.DataSource = ds.Tables["tb_EmpInfo"];
    
                //释放资源
                conn.Dispose();
                cmd.Dispose();
                da.Dispose();
                ds.Dispose();
            }
    
            private void txt_normal_num_TextChanged(object sender, EventArgs e)
            {
    
            }
    
            private void dataGridView2_CellContentClick(object sender, DataGridViewCellEventArgs e)
            {
    
            }
    
            private void txt_role_SelectedIndexChanged(object sender, EventArgs e)
            {
    
            }
    
            private void button5_Click(object sender, EventArgs e)
            {
                this.Close();
            }
        }
    }
    
    

    修改密码:
    在这里插入图片描述
    代码:

    #define _CRT_SECURE_NO_DEPRECATE
    #define _CRT_SECURE_NO_WARNINGS
    
    using System;
    using System.Collections.Generic;
    using System.ComponentModel;
    using System.Data;
    using System.Drawing;
    using System.Linq;
    using System.Text;
    using System.Threading.Tasks;
    using System.Windows.Forms;
    using System.Data.OleDb;
    
    namespace WindowsForms0929
    {
        public partial class Form7 : Form
        {
            public Form7()
            {
                InitializeComponent();
            }
    
            private void button1_Click(object sender, EventArgs e)
            {
                if (text_old_passwd.Text.Trim().Equals(Form2.passwd) == false)
                {
                    MessageBox.Show("原密码错误!记不得密码不要点修改密码,麻烦退出点击‘忘记密码’!");
                    return;
                }
    
                if (text_new_passwd.Text.ToString().Equals(""))
                {
                    MessageBox.Show("请输入你的新密码!");
                    return;
                }
                string sqlstr = "update tb_EmpInfo set emp_login_passwd='" + text_new_passwd.Text.Trim() + "'"
                    + "where emp_login_name='" + Form2.name + "'";
                try
                {
                    publicClass.getSqlConnection get = new publicClass.getSqlConnection();
                    OleDbConnection conn = get.GetCon();
                    OleDbCommand cmd = new OleDbCommand(sqlstr, conn);
                    OleDbDataAdapter da = new OleDbDataAdapter();
    
                    cmd.ExecuteNonQuery();
                    MessageBox.Show("密码修改成功!!请牢记新密码!!!");
                    this.Close();
                }
                catch (Exception ee)
                {
                    MessageBox.Show(ee.ToString());
                }
            }
    
            private void button2_Click(object sender, EventArgs e)
    
            {
                //MessageBox.Show("");
                this.Close();
            }
    
            private void Form7_Load(object sender, EventArgs e)
            {
    
            }
        }
    }
    
    

    管理

    在这里插入图片描述
    管理实现的是三个功能,基本就是超市的进销存的功能。
    进货管理:
    在这里插入图片描述
    输入商品的名称、数量、价格等基本信息,点击添加添加商品到库存,这里是直接在数据库中修改的。
    代码:

    #define _CRT_SECURE_NO_DEPRECATE
    #define _CRT_SECURE_NO_WARNINGS
    using System;
    using System.Collections.Generic;
    using System.ComponentModel;
    using System.Data;
    using System.Drawing;
    using System.Linq;
    using System.Text;
    using System.Threading.Tasks;
    using System.Windows.Forms;
    using System.Data.OleDb;
    
    namespace WindowsForms0929
    {
        public partial class Form4 : Form
        {
            DataSet ds;
            OleDbDataAdapter da;
            publicClass.getSqlConnection get;
            OleDbConnection conn;
            OleDbCommand cmd;
            string selectStr = "select goods_id as 商品编号,emp_name as 操作员名称,goods_name as" +
                " 商品名称,goods_num as 商品数量,goods_buy_price as 进货单价,goods_sell_price as 销售单价," +
                "goods_time as 进货时间,goods_remark as 备注 from tb_JhGoodsInfo";
            public Form4()
            {
                InitializeComponent();
                timer1.Enabled = true;
                timer1.Interval = 200;
            }
            public string getTime()
            {
                return DateTime.Now.ToString().Trim();
            }
            public string getID()
            {
    
    
                int year = DateTime.Now.Year;
                int month = DateTime.Now.Month;
                int day = DateTime.Now.Day;
                int hour = DateTime.Now.Hour;
                int second = DateTime.Now.Second;
                int minute = DateTime.Now.Minute;
                int minminute = DateTime.Now.Millisecond;
    
                string strTime = null;
                strTime = year.ToString();
                strTime += month >= 10 ? month.ToString() : "0" + month.ToString();
                strTime += day >= 10 ? day.ToString() : "0" + day.ToString();
                strTime += hour >= 10 ? hour.ToString() : "0" + hour.ToString();
                strTime += second >= 10 ? second.ToString() : "0" + second.ToString();
                strTime += minute >= 10 ? minute.ToString() : "0" + minute.ToString();
                strTime += minminute >= 10 ? minminute.ToString() : "0" + minminute.ToString();
    
                return "yyj-" + strTime;
            }
            private void Form4_Load(object sender, EventArgs e)
            {
    
            }
    
            private void button1_Click(object sender, EventArgs e)
            {
                if(text_in_price.Text.Equals(""))
                {
                    MessageBox.Show("请输入进货单价");
                    return;
                }
                if (text_name.Text.Equals(""))
                {
                    MessageBox.Show("请输入商品名称");
                    return;
                }
                if (text_num.Text.Equals(""))
                {
                    MessageBox.Show("请输入商品数量");
                    return;
                }
                if (text_out_price.Text.Equals(""))
                {
                    MessageBox.Show("请输入销售单价");
                    return;
                }
    
                string nowtime = getTime();
                string id = getID();
                //数据库连接,进货数据库
                string insertstr_jh = "insert into tb_JhGoodsInfo(goods_id,emp_name,goods_name," +
                    "goods_num,goods_buy_price,goods_sell_price,goods_time,goods_remark) " +
                    "values('" + id + "','" + Form2.name + "','" + text_name.Text.ToString().Trim() + "',"
                    + text_num.Text + "," + Convert.ToInt32(text_in_price.Text) + "," + Convert.ToInt32(text_out_price.Text) + ",'"
                    + nowtime
                    + "','"+ "')";
    
                get = new publicClass.getSqlConnection();
                conn = get.GetCon();
                cmd = new OleDbCommand(insertstr_jh, conn);
                da = new OleDbDataAdapter();
                da.InsertCommand = cmd;
                da.InsertCommand.ExecuteNonQuery();
    
                da.SelectCommand = new OleDbCommand(selectStr, conn);
                ds = new DataSet();
                da.Fill(ds, "tb_JhGoodsInfo");
                dataGridView1.DataSource = ds.Tables["tb_JhGoodsInfo"];
                ds.Dispose();
    
                cmd.CommandText = selectStr;
                da.SelectCommand = cmd;
                da.SelectCommand.ExecuteNonQuery();
                ds = new DataSet();
                da.Fill(ds, "tb_JhGoodsInfo");
                dataGridView1.DataSource = ds.Tables["tb_JhGoodsInfo"];
    
                //数据库操作,库存数据库
                string insertstr_kc = "insert into tb_KcGoods(goods_id,rep_emp,rep_goods_name," +
                    "rep_num,rep_goods_price,rep_sell_price,rep_time,rep_remark) " +
                    "values('" + getID() + "','" + Form2.name + "','" + text_name.Text.ToString().Trim() + "',"
                    + text_num.Text + "," + Convert.ToInt32(text_in_price.Text) + "," + Convert.ToInt32(text_out_price.Text) + ",'"
                    + nowtime
                    + "','"  + "')";
                string updatestr_kc = "update tb_KcGoods set rep_num=rep_num+" + Convert.ToInt32(text_num.Text)
                    + " where rep_goods_name='" + text_name.Text.ToString().Trim() + "'";
                string select_kc = "select count(*) from tb_KcGoods where rep_goods_name='" + text_name.Text.ToString().Trim() + "'";
    
                conn = get.GetCon();
                cmd = new OleDbCommand(select_kc, conn);
                if (Convert.ToInt32(cmd.ExecuteScalar()) > 0)
                {//如果库存已有,则新增update
                    cmd = new OleDbCommand(updatestr_kc, conn);
                    cmd.ExecuteNonQuery();
                    MessageBox.Show("增加" + text_name.Text.ToString().Trim() +
                        "数量" + Convert.ToInt32(text_num.Text).ToString());
    
    
                }
                else
                {
                    cmd = new OleDbCommand(insertstr_kc, conn);
                    int s = cmd.ExecuteNonQuery();
                    MessageBox.Show("插入" + text_name.Text.ToString().Trim() +
                        "数量" + Convert.ToInt32(text_num.Text).ToString());
                }
            }
    
            private void button2_Click(object sender, EventArgs e)
            {
                if (MessageBox.Show("是否删除?", "询问", MessageBoxButtons.OKCancel, MessageBoxIcon.Question)
                   == DialogResult.OK)
                {
    
                }
                else
                {
                    return;
                }
    
                string str = dataGridView1.CurrentRow.Cells[1].Value.ToString();
                string name = dataGridView1.CurrentRow.Cells[2].Value.ToString();
                get = new publicClass.getSqlConnection();
                conn = get.GetCon();
                cmd = new OleDbCommand("delete from tb_JhGoodsInfo where goods_id='" + str + "'", conn);
                cmd.ExecuteNonQuery();
                conn.Close();
                cmd.Dispose();
    
                get = new publicClass.getSqlConnection();
                conn = get.GetCon();
                cmd = new OleDbCommand(selectStr, get.GetCon());
                ds = new DataSet();
                da = new OleDbDataAdapter();
                da.SelectCommand = cmd;
    
                da.Fill(ds, "tb_JhGoodsInfo");
                dataGridView1.DataSource = ds.Tables["tb_JhGoodsInfo"];
    
                conn.Dispose();
                cmd.Dispose();
                da.Dispose();
                ds.Dispose();
                dataGridView1.Update();
    
                MessageBox.Show("编号:" + str + "\n商品名称:" + name + "\n已删除");
            }
    
            private void button3_Click(object sender, EventArgs e)
            {
                text_out_price.Clear();
                text_num.Clear();
                text_name.Clear();
                text_in_price.Clear();
    
                get = new publicClass.getSqlConnection();
                conn = get.GetCon();
                cmd = new OleDbCommand(selectStr, conn);
                ds = new DataSet();
                da = new OleDbDataAdapter();
                da.SelectCommand = cmd;
    
                da.Fill(ds, "tb_JhGoodsInfo");
                dataGridView1.DataSource = ds.Tables["tb_JhGoodsInfo"];
    
                conn.Dispose();
                cmd.Dispose();
                da.Dispose();
                ds.Dispose();
            }
        }
    }
    
    

    库存管理:
    在这里插入图片描述
    库存管理这里只做了两个按钮,分别实现查询和刷新的功能
    根据商品名称对商品的所有信息进行查询,包括价格
    代码:

    #define _CRT_SECURE_NO_DEPRECATE
    #define _CRT_SECURE_NO_WARNINGS
    
    using System;
    using System.Collections.Generic;
    using System.ComponentModel;
    using System.Data;
    using System.Drawing;
    using System.Linq;
    using System.Text;
    using System.Threading.Tasks;
    using System.Windows.Forms;
    using System.Data.OleDb;
    
    namespace WindowsForms0929
    {
        public partial class Form5 : Form
        {
            DataSet ds;
            OleDbDataAdapter da;
            publicClass.getSqlConnection get;
            OleDbConnection conn;
            OleDbCommand cmd;
            //DataTable dt;
            string conststr = "select goods_id as 商品编号,rep_emp as 进货人,rep_goods_name as 商品名称," +
                "rep_num as 库存数量,rep_goods_price as 进货单价,rep_sell_price as 销售价格,rep_time as" +
                " 进货时间,rep_remark as 备注 from tb_KcGoods";
            public Form5()
            {
                InitializeComponent();
            }
    
            private void button1_Click(object sender, EventArgs e)
            {
                string str = conststr + " where rep_goods_name='" + textBox1.Text.Trim() + "'";
    
                get = new publicClass.getSqlConnection();
                conn = get.GetCon();
                cmd = new OleDbCommand(str, conn);
                ds = new DataSet();
                da = new OleDbDataAdapter();
                da.SelectCommand = cmd;
    
                da.Fill(ds, "tb_KcGoods");
                dataGridView1.DataSource = ds.Tables["tb_KcGoods"];
    
                conn.Dispose();
                cmd.Dispose();
                da.Dispose();
                ds.Dispose();
            }
    
            private void Form5_Load(object sender, EventArgs e)
            {
                //this.FormBorderStyle = FormBorderStyle.FixedDialog;
                //this.MaximizeBox = false;
                //this.CenterToScreen();
                //this.BackColor = Color.LightBlue;
    
                //dataGridView1.SelectionMode = DataGridViewSelectionMode.FullRowSelect;
                //dataGridView1.AutoSizeColumnsMode = DataGridViewAutoSizeColumnsMode.AllCells;
                //dataGridView1.GridColor = Color.LightBlue;
                //dataGridView1.RowsDefaultCellStyle.BackColor = Color.LightBlue;
                //dataGridView1.AlternatingRowsDefaultCellStyle.BackColor = Color.LightCyan;
                //dataGridView1.AutoSizeColumnsMode = DataGridViewAutoSizeColumnsMode.Fill;
    
    
                get = new publicClass.getSqlConnection();
                conn = get.GetCon();
                cmd = new OleDbCommand(conststr, conn);
                ds = new DataSet();
                da = new OleDbDataAdapter();
                da.SelectCommand = cmd;
    
                da.Fill(ds, "tb_KcGoods");
                dataGridView1.DataSource = ds.Tables["tb_KcGoods"];
    
                conn.Dispose();
                cmd.Dispose();
                da.Dispose();
                ds.Dispose();
            }
    
            private void button2_Click(object sender, EventArgs e)
            {
                get = new publicClass.getSqlConnection();
                conn = get.GetCon();
                cmd = new OleDbCommand(conststr, conn);
                ds = new DataSet();
                da = new OleDbDataAdapter();
                da.SelectCommand = cmd;
    
                da.Fill(ds, "tb_KcGoods");
                dataGridView1.DataSource = ds.Tables["tb_KcGoods"];
    
                conn.Dispose();
                cmd.Dispose();
                da.Dispose();
                ds.Dispose();
            }
        }
    }
    
    

    销售管理:

    输入你要销售的商品和销售的数量,就可以直接将库存中的商品卖掉,这里也是直接在数据库中修改。
    代码:

    #define _CRT_SECURE_NO_DEPRECATE
    #define _CRT_SECURE_NO_WARNINGS
    
    using System;
    using System.Collections.Generic;
    using System.ComponentModel;
    using System.Data;
    using System.Drawing;
    using System.Linq;
    using System.Text;
    using System.Threading.Tasks;
    using System.Windows.Forms;
    using System.Data.OleDb;
    
    namespace WindowsForms0929
    {
        public partial class Form6 : Form
        {
            DataSet ds;
            OleDbDataAdapter da;
            publicClass.getSqlConnection get;
            OleDbConnection conn;
            OleDbCommand cmd;
    
            string select_str = "select goods_id as 商品编号,rep_emp as 进货人,rep_goods_name as 商品名称," +
                "rep_num as 库存数量,rep_goods_price as 进货单价,rep_sell_price as 销售价格,rep_time as" +
                " 进货时间,rep_remark as 备注 from tb_KcGoods";
            public Form6()
            {
                InitializeComponent();
            }
            //获取当前操作id
            public string GetID()
            {
    
    
                int year = DateTime.Now.Year;
                int month = DateTime.Now.Month;
                int day = DateTime.Now.Day;
                int hour = DateTime.Now.Hour;
                int second = DateTime.Now.Second;
                int minute = DateTime.Now.Minute;
                int minminute = DateTime.Now.Millisecond;
    
                string strTime = null;
                strTime = year.ToString();
                strTime += month >= 10 ? month.ToString() : "0" + month.ToString();
                strTime += day >= 10 ? day.ToString() : "0" + day.ToString();
                strTime += hour >= 10 ? hour.ToString() : "0" + hour.ToString();
                strTime += second >= 10 ? second.ToString() : "0" + second.ToString();
                strTime += minute >= 10 ? minute.ToString() : "0" + minute.ToString();
                strTime += minminute >= 10 ? minminute.ToString() : "0" + minminute.ToString();
    
                return "yyj-" + strTime;
            }
            //销售时获取当前时间
            public string GetTime()
            {
                return DateTime.Now.ToString().Trim();
            }
            private void Form6_Load(object sender, EventArgs e)
            {
                get = new publicClass.getSqlConnection();
                conn = get.GetCon();
                cmd = new OleDbCommand(select_str, conn);
                ds = new DataSet();
                da = new OleDbDataAdapter
                {
                    SelectCommand = cmd
                };
    
                da.Fill(ds, "tb_SellGoods");
                dataGridView1.DataSource = ds.Tables["tb_SellGoods"];
    
                conn.Dispose();
                cmd.Dispose();
                da.Dispose();
                ds.Dispose();
            }
    
            private void button1_Click(object sender, EventArgs e)
            {
                string str = select_str + " where rep_goods_name='" + text_name.Text.Trim() + "'";
    
                get = new publicClass.getSqlConnection();
                conn = get.GetCon();
                cmd = new OleDbCommand(str, conn);
                ds = new DataSet();
                da = new OleDbDataAdapter
                {
                    SelectCommand = cmd
                };
    
                da.Fill(ds, "tb_KcGoods");
                dataGridView1.DataSource = ds.Tables["tb_KcGoods"];
    
                conn.Dispose();
                cmd.Dispose();
                da.Dispose();
                ds.Dispose();
            }
    
            private void button2_Click(object sender, EventArgs e)
            {
                text_name.Clear();
                text_num.Clear();
            }
            private void button3_Click(object sender, EventArgs e)
            {
                if (text_name.Text.Equals("") || text_num.Text.Equals(""))
                {
                    MessageBox.Show("请输入!!");
                    return;
                }
                get = new publicClass.getSqlConnection();
                conn = get.GetCon();
                string str_select = "select count(*) from tb_KcGoods where rep_goods_name='" +
                    text_name.Text.Trim() + "'";
                cmd = new OleDbCommand(str_select, conn);
                if (Convert.ToInt32(cmd.ExecuteScalar()) <= 0)
                {
                    MessageBox.Show("仓库中查无此物!!!");
                    cmd.Dispose();
                    return;
                }
                string update_str = "update tb_KcGoods set rep_num=rep_num-"
                    + Convert.ToInt32(text_num.Text.Trim()) + " where rep_goods_name='" +
                    text_name.Text.Trim() + "'";
                cmd = new OleDbCommand(update_str, conn);
                cmd.ExecuteNonQuery();
                cmd.CommandText = select_str;
                ds = new DataSet();
                da = new OleDbDataAdapter
                {
                    SelectCommand = cmd
                };
                da.Fill(ds, "tb_KcGoods");
                dataGridView1.DataSource = ds.Tables["tb_KcGoods"];
                string id = GetID();
                string time = GetTime();
                string str = "insert into tb_SellGoods(sale_id,goods_name,emp_name,sale_goods_num," +
                    "sale_goods_time,sale_remark) values('" + id + "','" + text_name.Text.Trim() +
                    "','" + Form2.name + "'," + text_num.Text.Trim() + ",'" + time + "','" + "')";
                cmd.CommandText = str;
                cmd.ExecuteNonQuery();
                MessageBox.Show("销售商品:" + text_name.Text + "\n数量:" + text_num.Text + "\n成功!");
                //关闭
                conn.Dispose();
                cmd.Dispose();
                da.Dispose();
                ds.Dispose();
            }
        }
    }
    
    

    报表

    在这里插入图片描述
    报表只做了两个,一个是用户报表,还有一个是进货报表。
    用户报表:
    在这里插入图片描述进货报表:
    在这里插入图片描述
    这里我大概说一下报表的制作,首先插件的安装这是必须的
    1、要有Microsoft SQL Server Data Tools,这个是在安装的时候勾选的,如果没有那就重新覆盖安装一遍
    2、要有Microsoft Rdlc Report Designer for Visual Studio,如果没有,需要在扩展和更新中安装,安装好后需要重启vs
    3、要有Microsoft.ReportingServices.ReportViewerControl.Winforms,如果没有,在VS中选择工具——Nuget包管理器——程序包管理器控制台
    执行命令:* Install-Package Microsoft.ReportingServices.ReportViewerControl.WinForms -Pre *
    然后在VS的工具——选择工具箱项——.NetFramework下,选择“浏览”,然后在工程根目录下的“\packages\Microsoft.ReportingServices.ReportViewerControl.Winforms.xx\lib\net40”目录下选择“Microsoft.ReportViewer.WinForms.dll”文件(.dll文件会有很多个,注意选择)
    以上的插件还有包添加之后还是要重启一下软件,让包和插件重新加载,然后将控件添加到工具箱里方便使用。
    在这里插入图片描述
    在这里插入图片描述
    在工具箱的随便哪个地方,右键单击,点击选择项就可以添加控件。

    下面是关于报表的制作,我在制作的时候查阅了一些网上的相关资料,有很多推荐使用水晶报表的,我嫌麻烦直接就用的vs自带的报表了,下面简单记录一下报表的制作:
    首先,添加数据集(dataset)
    项目–添加新项,选择数据集,添加
    在这里插入图片描述
    我们在dataset里需要拖入数据库里做好的表
    第二步,添加报表
    项目–添加新项–reporting,添加
    在这里插入图片描述
    这里的报表要添加数据源,数据源就添加你刚刚做好的dataset,然后你可以在报表里画一些表,用于报表的展示
    在这里插入图片描述
    到这里报表基本完成了一半了,在reporting里你可以设置修改字体的大小和样式。
    最后一步,添加winform窗体,将添加好的报表控件拖入窗体,写好代码,报表完成
    注意:如果遇到报表展示出来是乱码,那很可能是你的reporting里面字体没设置好,重新设置字体,搞定!

    其他

    我还做了帮助文档和关于说明
    在这里插入图片描述
    这里我用的magichelp软件写的帮助文档,也可以用微软的软件来写,都是免费的,但是这个用起来很方便。
    在这里插入图片描述
    还有一些简单的命令,我把它集成到这个菜单栏里,方便使用
    代码:

    
    ```csharp
    using System;
    using System.Collections.Generic;
    using System.ComponentModel;
    using System.Drawing;
    using System.Linq;
    using System.Reflection;
    using System.Threading.Tasks;
    using System.Windows.Forms;
    
    namespace WindowsForms0929
    {
        partial class AboutBox1 : Form
        {
            public AboutBox1()
            {
                InitializeComponent();
                this.Text = String.Format("关于 {0}", AssemblyTitle);
                this.labelProductName.Text = AssemblyProduct;
                this.labelVersion.Text = String.Format("版本 {0}", AssemblyVersion);
                this.labelCopyright.Text = AssemblyCopyright;
                this.labelCompanyName.Text = AssemblyCompany;
                this.textBoxDescription.Text = AssemblyDescription;
            }
    
            #region 程序集特性访问器
    
            public string AssemblyTitle
            {
                get
                {
                    object[] attributes = Assembly.GetExecutingAssembly().GetCustomAttributes(typeof(AssemblyTitleAttribute), false);
                    if (attributes.Length > 0)
                    {
                        AssemblyTitleAttribute titleAttribute = (AssemblyTitleAttribute)attributes[0];
                        if (titleAttribute.Title != "")
                        {
                            return titleAttribute.Title;
                        }
                    }
                    return System.IO.Path.GetFileNameWithoutExtension(Assembly.GetExecutingAssembly().CodeBase);
                }
            }
    
            public string AssemblyVersion
            {
                get
                {
                    return Assembly.GetExecutingAssembly().GetName().Version.ToString();
                }
            }
    
            public string AssemblyDescription
            {
                get
                {
                    object[] attributes = Assembly.GetExecutingAssembly().GetCustomAttributes(typeof(AssemblyDescriptionAttribute), false);
                    if (attributes.Length == 0)
                    {
                        return "";
                    }
                    return ((AssemblyDescriptionAttribute)attributes[0]).Description;
                }
            }
    
            public string AssemblyProduct
            {
                get
                {
                    object[] attributes = Assembly.GetExecutingAssembly().GetCustomAttributes(typeof(AssemblyProductAttribute), false);
                    if (attributes.Length == 0)
                    {
                        return "";
                    }
                    return ((AssemblyProductAttribute)attributes[0]).Product;
                }
            }
    
            public string AssemblyCopyright
            {
                get
                {
                    object[] attributes = Assembly.GetExecutingAssembly().GetCustomAttributes(typeof(AssemblyCopyrightAttribute), false);
                    if (attributes.Length == 0)
                    {
                        return "";
                    }
                    return ((AssemblyCopyrightAttribute)attributes[0]).Copyright;
                }
            }
    
            public string AssemblyCompany
            {
                get
                {
                    object[] attributes = Assembly.GetExecutingAssembly().GetCustomAttributes(typeof(AssemblyCompanyAttribute), false);
                    if (attributes.Length == 0)
                    {
                        return "";
                    }
                    return ((AssemblyCompanyAttribute)attributes[0]).Company;
                }
            }
            #endregion
    
            private void labelProductName_Click(object sender, EventArgs e)
            {
    
            }
    
            private void textBoxDescription_TextChanged(object sender, EventArgs e)
            {
    
            }
    
            private void AboutBox1_Load(object sender, EventArgs e)
            {
    
            }
        }
    }
    
    

    总结一下

    经过此次项目实训,我深刻的了解到,完成一个通用功能齐全,并且没有系统报错的窗体软件是一件非常不容易的事。也清楚的理解了什么叫做用户体验,进一步的提升需要在平时生活中多积累,多观察。虽然项目已经完成,但是任然有许多不足的地方:比如超市会员没有细化,比如金卡会员】银卡会员和普通会员等,由于我的能力不足不得不放弃;还有查询功能还不够强大等,还不可以分类统计出结果。

    还有其他的以后想起来再补充吧~~(●’◡’●)

    以上!!

    展开全文
  • 进销存

    2017-12-29 13:10:54
    花了点时间完成了一个进销存的项目,个人觉得对逻辑分析,架构思想都有一定的体会,故拿出来和大家分享下,首先介绍下项目的功能吧,主要功能有采购管理,销售管理,库存管理,人员信息管理系统管理等,不过写这篇...

     花了点时间完成了一个进销存的项目,个人觉得对逻辑分析,架构思想都有一定的体会,故拿出来和大家分享下,首先介绍下项目的功能吧,主要功能有采购管理,销售管理,库存管理,人员信息管理,系统管理等,不过写这篇博客的主要目的并不是讲解如何实现项目功能,而是分享下该项目的架构思想、实现步骤和碰到的一些问题,分享下心得体会罢了......

     

        数据库设计

     

     

       下面进入主题,首先贴上项目的主界面,由于对界面要求不是很高,所以界面相对来说比较简单,甚至可是说是简陋了,,呵呵,不过重点不在界面上,勇敢的直接上图:

     

    架构: 

    首先说说项目架构吧,,贴上项目模块图:

    从图中可知,项目总共分10个模块,采用三层架构+WCF+反射+抽象工厂来搭建,其中还加入了单例模式缓存机制。下面分别说说每个模块的作用:

    Insigma.PSI.UI:WinForm界面层

    Insigma.PSI.Model:模型层,数据实体   
    Insigma.PSI.IBLLService:业务逻辑接口层,是定义逻辑层的契约层
    Insigma.PSI.BLLService:业务逻辑实现层,是对接口的实现
    Insigma.PSI.IDAL:数据访问接口层,是定义访问层的契约层
    Insigma.PSI.SqlServerDAL:数据访问实现层,实现访问接口层,主要是针对SQL数据库
    Insigma.PSI.OracleDAL:数据访问实现层,实现访问接口层,主要是针对Oracle数据库  
    Insigma.PSI.Utility:工具层,主要存放了Oracle数据库,SQL数据库的数据库操作类

    Insigma.PSI.DBFactory:抽象工厂层,主要为考虑可以使项目可以适用Oracle数据库和SQL数据库,就搭建了一个抽象工厂层,分别在Oracle数据库层和SQL数据库层建立一个 工 厂来实现该抽象工厂

    C:\..\WcfWebRelease\:web层,主要用来发布WCF服务


    项目: 
     简单的分析完了框架的每个模块的作用,然后讲讲项目,由于篇幅问题,无法讲解项目的所有功能,所以在这里就拿出一个模块来讲解下,我选择了库存模块

     

    从图中可知,库存模块主要实现四个模块的功能,即库存列表、出库/入库、库存明细、库存警报 

    首先看看库存列表,上图:

     

    库存列表的功能比较简单,只是实现了仓库的增、删、改、查,由于功能比较简单,也就不多做讲解了....

     

    再贴上出库/入库模块图:


     

    这块应该算是库存模块中的核心模块了,因为该块的业务逻辑比较多,比较繁琐,大致讲讲业务逻辑吧,大致的逻辑为:出库单/出库单-->填写订单-->出库/入库-->修改库存信息,按照这个顺序来完成入库出库,顺序不能颠倒,同时还要实现订单的删除,修改,在修改库存信息时由于表和表之间有很多的外键关系,所以要同时删除多张表中含有删除信息的内容,实现联级删除,由于这里考虑到要保证结果的一致性,所以用事务来实现。再看看界面,为了保证用户按照这个逻辑顺序操作,首先我添加了一对单选框(出库单,入库单),当单选框都没有选中时,保存订单按钮、出库、入库按钮都是不可用状态,当用户选择了订单类型之后,保存订单按钮转为可用状态,需要用户填写订单信息,填写好对应信息之后保存订单,保存成功之后列表框中出现刚生产的订单,同时订单号是自动来生成的,入库单是“S_I”开头,出库单是"S_O"开头,后面五位数字为随机生成,这样生成的订单号易于区别,也避免了订单号的重复,然后根据用户选择的订单类型,对应的按钮转为可用(出库单-->出库按钮) ,这样就保证了用户始终是按照这个顺序来操作,同时订单列表框下有删除订单按钮,点击可以删除选中按钮。

     

    下面那出库为例,看看如何实现入库:

    点击【入库】按钮,弹出商品选择窗口,窗口中显示了订单号和仓库编号,同时还有一个【选择】按钮,通过该按钮选择商品 

     

    点击【选择】按钮,弹出商品列表窗口,由于我这里商品记录比较少,只有两条,我们就选第二条吧,点击【确定】按钮 

     

    这时的"入库信息"窗口中就填写上了刚才选择商品的信息,然后只要在填写上入库数量,点击【确定】就完成了入库操作了,如图:

     出库的思路和入库一样,也是先选择出库单,然后填写出库单信息并保存订单,然后再给订单上添加商品,过程也是通过选择实现,由于类同,就不赘述了...

     

     然后是库存明细模块,上图:

     

    该模块主要实现的功能是对存放在各个仓库中的商品进行清点,点击商品的行头就显示出该商品的信息:编号、数量、盘点日期、存放仓库;填写好盘点的数量之后单击【保存】按钮,实现保存盘点数据,这个模块也没什么难点,唯一复杂点的就是因为同样的货品可以存放到不同的仓库中,所以点击时要搜索出该商品所在的所有仓库编号,并在“存放仓库”列表中显示。

     

    最后是库存警报模块,上图:

     

     该模块主要来设置库存上限和库存下限,实现当库存中存放的商品的数量超过库存上限或者低于库存下限时,弹出警告框提醒。

     这样,我们就简单的把项目的功能叙述了下,当然还有一些细节的功能,这里就不再罗列了.....

     

    代码:

    由于代码端模块较多,我们就按照程序执行调用的层次关系来罗列.这样相对来说看起来思路比较清晰......Model层只是定义了需要用到的实体而已,不再赘述了.....

    1>.Insigma.PSI.IBLLService层

     

     可以看到有很多的功能类,无法全部讲解,所以就挑选一块,后面的模块层中也着重讲解挑选的这一块,我挑选了库存管理模块,即IStoreManageBLLService,贴上该类的代码:

    复制代码
     1 using Insigma.PSI.Model;
     2 using System.ServiceModel;
     3 
     4 namespace Insigma.PSI.IBLLService
     5 {
     6     [ServiceContract]
     7     public interface IStoreManageBLLService
     8     {
     9         [OperationContract]
    10         //获取所有仓库
    11         List<StoreHouse> GetStores(string sqlWhere);
    12 
    13         [OperationContract]
    14         //获取所有仓库编号
    15         List<string> GetAllStoreCode();
    16 
    17         [OperationContract]
    18         //添加仓库
    19         bool AddStore(StoreHouse store);
    20 
    21         [OperationContract]
    22         //修改仓库
    23         bool UpdateStore(StoreHouse store);
    24 
    25         [OperationContract]
    26         //删除仓库
    27         bool DeleteStore(string code);
    28 
    29         [OperationContract]
    30         //修改库存明细
    31         bool UpdateStoreDetails(GoodsDetailsModel goodDetail);
    32 
    33         [OperationContract]
    34         //获取商品明细
    35         List<StoreDetailsModel> GetStoreDetails(string sqlWhere);
    36 
    37         [OperationContract]
    38         //修改商品数量
    39         bool UpdateGoodNum(StoreDetailsModel storeDetail);
    40     }
    41 }
    复制代码

    由于我们要用到WCF来发布服务,所以这里的每个方法都添加了WCF特性,主要功能是获取仓库、获取仓库编号、对仓库的增、删、改、查;由于出库入库对商品的数量有影响,又由于不存在同一张表格中,所以我们专门定义了一个方法来实现修改商品数量;然后出库入库对应一张库存明细表,执行操作之后要修改该表,记录信息,同时也可以获取该表信息,定义的方法就那么多了.....

     

    2>Insigma.PSI.BLLService

     

    这层是对上面提及的接口层的实现,但除了实现之外,我还在这里加了一个反射机制,在这层按照原来三层的思路是要调用DAL层来实现对数据库的操作,但因为考虑到要适用于不同的数据库,所以我们不知道要调用哪个数据库层的DAL来操作,这就是这个反射存在的意义了,我们可以通过反射来读取配置文件中定义的数据库信息,从而创建对应数据库类的实例来操作....先贴上StoreManageBLLService的代码,之后再接着讲解,看到了代码思路会清晰点: 

    复制代码
      1 using Insigma.PSI.Model;
      2 using Insigma.PSI.IBLLService;
      3 using Insigma.PSI.IDAL;
      4 using Insigma.PSI.DBFactory;
      5 
      6 namespace Insigma.PSI.BLL
      7 {
      8     public class StoreManageBLLService:IStoreManageBLLService
      9     {
     10         //通过反射获取对应的抽象产品
     11         private IStoreManageDAL Ismd = Refection.GetFactory().StoreManageProduct;
     12 
     13         /// <summary>
     14         /// 获取StoresHost表数据
     15         /// </summary>
     16         /// <param name="sqlWhere"></param>
     17         /// <returns></returns>
     18         public List<StoreHouse> GetStores(string sqlWhere)
     19         {
     20             return Ismd.GetStores(sqlWhere);
     21         }
     22 
     23         /// <summary>
     24         /// 添加仓库
     25         /// </summary>
     26         /// <param name="store"></param>
     27         /// <returns></returns>
     28         public bool AddStore(StoreHouse store)
     29         {
     30             int result = Ismd.AddStore(store);
     31             if (result > 0)
     32             {
     33                 return true;
     34             }
     35             else
     36             {
     37                 return false;
     38             }
     39         }
     40 
     41         /// <summary>
     42         /// 修改仓库
     43         /// </summary>
     44         /// <param name="store"></param>
     45         /// <returns></returns>
     46         public bool UpdateStore(StoreHouse store)
     47         {
     48             int result = Ismd.UpdateStore(store);
     49 
     50             if (result > 0)
     51             {
     52                 return true;
     53             }
     54             else
     55             {
     56                 return false;
     57             }
     58         }
     59 
     60         /// <summary>
     61         /// 删除仓库
     62         /// </summary>
     63         /// <param name="code"></param>
     64         /// <returns></returns>
     65         public bool DeleteStore(string code)
     66         {
     67             int result = Ismd.DeleteStore(code);
     68 
     69             if (result > 0)
     70             {
     71                 return true;
     72             }
     73             else
     74             {
     75                 return false;
     76             }
     77         }
     78 
     79         /// <summary>
     80         /// 获取所有仓库编号
     81         /// </summary>
     82         /// <returns></returns>
     83         public List<string> GetAllStoreCode()
     84         {
     85             return Ismd.GetAllStoreCode();
     86         }
     87 
     88         /// <summary>
     89         /// 修改商品明细的数量信息
     90         /// </summary>
     91         /// <param name="goodDetail"></param>
     92         /// <returns></returns>
     93         public bool UpdateStoreDetails(GoodsDetailsModel goodDetail)
     94         {
     95             int result = Ismd.UpdateStoreDetails(goodDetail);
     96 
     97             if (result > 0)
     98             {
     99                 return true;
    100             }
    101             else
    102             {
    103                 return false;
    104             }
    105         }
    106 
    107         /// <summary>
    108         /// 获取所有库存明细
    109         /// </summary>
    110         /// <param name="sqlWhere"></param>
    111         /// <returns></returns>
    112         public List<StoreDetailsModel> GetStoreDetails(string sqlWhere)
    113         {
    114             return Ismd.GetStoreDetails(sqlWhere);
    115         }
    116 
    117         /// <summary>
    118         /// 修改库存明细的盘点数量
    119         /// </summary>
    120         /// <param name="storeDetail"></param>
    121         /// <returns></returns>
    122         public bool UpdateGoodNum(StoreDetailsModel storeDetail)
    123         {
    124             int result = Ismd.UpdateGoodNum(storeDetail);
    125 
    126             if (result > 0)
    127             {
    128                 return true;
    129             }
    130             else
    131             {
    132                 return false;
    133             }
    134         }
    135     }
    136 } 
    复制代码

    从代码中可以看到我们是通过反射来获取DAL的实例的,然后再调用该实例的方法,那么反射里是怎么实现的呢?贴上代码:

    复制代码
     1 using System.Configuration;
     2 using System.Reflection;
     3 using Insigma.PSI.DBFactory;
     4 
     5 namespace Insigma.PSI.BLL
     6 {
     7     public class Refection
     8     {
     9         //定义一个抽象工厂类的对象实例 用于保存作用
    10         private static AbstractFactory DataAccess = null;
    11 
    12         //获取配置文件中定义的数据库信息
    13         private static string path = ConfigurationManager.AppSettings["DllName"];
    14         private static string className = ConfigurationManager.AppSettings["ClassName"];
    15 
    16         //单例模式-----因为每次加载该程序集都会去调用相同的DAL 
    17         //             如果已经加载过了 就不要再次加载 提高性能
    18         static Refection()
    19         { 
    20             //反射----因为不确定要获取什么类型的DAL 不知道是Oracle还是SQL等等 所以这里添加一个反射机制
    21             string _classname = path + "." + className;
    22            DataAccess = (AbstractFactory)Assembly.Load(path).CreateInstance(_classname);
    23         }
    24 
    25         //获取对应数据库的具体工厂
    26         public static AbstractFactory GetFactory()
    27         {
    28             return DataAccess;
    29         }
    30     }
    31 }
    复制代码

    从代码可知,我们获取了配置文件中定义的程序集以及数据库类的信息,通过加载该程序集来获取该数据库类的实例,同时,添加了单例模式,因为考虑到每次加载该类库的时候都要来获取一次数据库类的实例,但是该数据库类只要配置文件定义不变他就不会变,所以不用每次都去创建实例 ,只需要创建一次就可以了,提高性能,所以就是单例模式的作用了,这里首先定义了一个AbstractFactory类型(后面会讲到)变量来接受创建好的实例,该变量也是static类型的,保证唯一性,我这里是将构造函数改为static的方式,然后在静态构造函数中实例化数据库类,并赋值给定义好的变量,因为静态构造函数只会执行一次,之后就不会执行了,这就保证了只实例一次,然后定义一个GetFactory()方法来返回数据库实例,这样就达到了"单例"的效果了,当然单例模式还有一种思路是将构造函数设为private,也同样定义一个静态变量和静态方法来创建实例,同样保证了"单例"。

    然后看看配置文件中定义的数据库信息:

    复制代码
    1 <configuration>
    2   <!--定义数据库信息-->
    3   <appSettings>
    4     <!--程序集名称-->
    5     <add key="DLLName" value="Insigma.PSI.OracleDAL"/>
    6     <!--数据库类名-->
    7     <add key="ClassName" value="OracleFactory"/>
    8   </appSettings>
    复制代码

    可以看到配置文件中定义了程序集的名称,数据库类的名称,但其实这个数据库类就是工厂类的名称。反射中提到了AbstractFactory类型,这是抽象工厂模块中的内容,那么为什么要有这个抽象工厂呢??存在的意义是什么呢?我们就来看看抽象工厂,我的思路:定义一个抽象工厂,里面是一些抽象产品,对应于IDAL中定义的类型的产品,然后在每个数据库类库中定义一个具体工厂,该具体工厂继承抽象工厂,重写抽象产品,返回具体产品,即对IDAL接口类的实现类(DAL)的对应实例,那你会想到了,如没有工厂我们照样可以实现用反射类获取实例的呀,但你想想这时候获取到得实例是什么?它就是我们工厂类中的单个产品而已,当我们的产品有很多的时候怎么办呢,一个DAL类库中的每个类都是一个产品,那难道我们把每个产品都在配置文件中去定义,然后用到的时候通过反射去获取么??显然不可能,所以我们加了抽象工厂模式了,在DAL类库中有一个具体的工厂类,我们所有的产品都由该工厂来创建,那我们获取的是时候只需要获取工厂实例,然后通过该实例来创建我们需要的产品就可以了...... 

     

    3>Insigma.PSI.IDAL层

     

    同样的拿IStoreManageDAL类讲解,上代码:

    复制代码
     1 using Insigma.PSI.Model;
     2 
     3 namespace Insigma.PSI.IDAL
     4 {
     5     public interface IStoreManageDAL
     6     {
     7         List<StoreHouse> GetStores(string sqlWhere);
     8         List<string> GetAllStoreCode();
     9         int AddStore(StoreHouse store);
    10         int UpdateStore(StoreHouse store);
    11         int DeleteStore(string code);
    12         int UpdateStoreDetails(GoodsDetailsModel goodDetail);
    13         List<StoreDetailsModel> GetStoreDetails(string sqlWhere);
    14         int UpdateGoodNum(StoreDetailsModel storeDetail);
    15     }
    16 }
    复制代码

    这也是一个接口类,接口的作用就是规范行为,定义一种契约,继承该接口的类都必须实现契约,所以这里主要来约束DAL实现层的行为


    4>.Insigma.PSI.DBFactory 

     

    抽象工厂模块中就一个抽象工厂类,就直接贴上类代码:

    复制代码
     1 using Insigma.PSI.IDAL;
     2 
     3 namespace Insigma.PSI.DBFactory
     4 {
     5     //定义一个抽象工厂 便于适用于不同的数据库  每个数据库都可以建立一个具体工厂 继承该工厂 
     6     public abstract class AbstractFactory
     7     {
     8        //抽象产品类---对应于IDAL层
     9        public abstract ISysUserDAL SysUserProduct { get; }
    10        public abstract IStoreManageDAL StoreManageProduct { get;}
    11        public abstract IDepartmentDAL DepartmentProduct { get; }
    12        public abstract IHandleGeneralsDAL HandleGeneralsProduct { get; }
    13        public abstract IGoodsDAL GoodsProduct { get; }
    14        public abstract IHandle_GoodDetailsDAL Handle_GoodDetailsProduct { get; }
    15        public abstract IStaffsDAL StaffsProduct { get; }
    16        public abstract ICompanyDAL CompanyProduct { get; }
    17     }
    18 }
    复制代码

    在抽象类中为每个在IDAL中定义的类型都对应的建立了一个属性(也可以定义成方法),因为加了抽象工厂之后,IDAL中的每个类都是一个抽象产品类,是产品类的基类,而DAL中的每个类都是该基类的派生类,都实现了基类中定义的方法,最终返回的具体产品的类型都为抽象产品类型(子类赋值给基类)。

     

    5>.Insigma.PSI.OracleDAL

      
    有一个工厂类,用于创建具体产品实例,贴上工厂类代码:
    复制代码
      1 using Insigma.PSI.DBFactory;
      2 using System.Web;
      3 using Insigma.PSI.IDAL;
      4 
      5 namespace Insigma.PSI.OracleDAL
      6 {
      7     //具体工厂:Oracle
      8     public class OracleFactory:AbstractFactory
      9     {
     10         //定义DAL类型变量,用于保存
     11         private SysUserDAL sud = null;
     12         private DepartmentDAL dp = null;
     13         private StoreManageDAL sm = null;
     14         private HandleGeneralsDAL hg = null;
     15         private GoodsDAL gd = null;
     16         private Handle_GoodDetailsDAL h_g = null;
     17         private StaffsDAL sd = null;
     18         private CompanyDAL cd = null;
     19 
     20 
     21         //具体产品:SysUserDAL
     22         public override ISysUserDAL SysUserProduct
     23         {
     24             get 
     25             {
     26                 //首先搜索缓存 看看是否有对应的产品
     27                 if (HttpRuntime.Cache.Get("sysuserdal") == null)
     28                 {
     29                     sud = new SysUserDAL();
     30                     //添加缓存机制-----将sud添加到缓存 因为每个用户调用都会去实例化同一个对象 加入缓存机制 
     31                     //                 如果要获取相同类型的对象 则可以直接从缓存中获取 提高性能
     32                     HttpRuntime.Cache.Insert("sysuserdal", sud,null,DateTime.Now.AddMinutes(5),TimeSpan.Zero);
     33                 }
     34                 
     35                 //返回存储在缓存中的值
     36                 return (SysUserDAL)HttpRuntime.Cache.Get("sysuserdal");
     37             }
     38         }
     39 
     40         //具体产品:DepartmentDAL
     41         public override IDepartmentDAL DepartmentProduct
     42         {
     43             get
     44             {
     45                 //首先搜索缓存 看看是否有对应的产品
     46                 if (HttpRuntime.Cache.Get("departmentdal") == null)
     47                 {
     48                     dp = new DepartmentDAL();
     49                     //添加缓存机制-----将sud添加到缓存 因为每个用户调用都会去实例化同一个对象 加入缓存机制 
     50                     //                 如果要获取相同类型的对象 则可以直接从缓存中获取 提高性能
     51                     HttpRuntime.Cache.Insert("departmentdal", dp, null, DateTime.Now.AddMinutes(5), TimeSpan.Zero);
     52                 }
     53 
     54                 //返回存储在缓存中的值
     55                 return (DepartmentDAL)HttpRuntime.Cache.Get("departmentdal");
     56 
     57             }
     58         }
     59 
     60         //具体产品:StoreManageDAL
     61         public override IStoreManageDAL StoreManageProduct
     62         {
     63             get 
     64             {
     65                 //首先搜索缓存 看看是否有对应的产品
     66                 if (HttpRuntime.Cache.Get("storemanagedal") == null)
     67                 {
     68                     sm = new StoreManageDAL();
     69                     //添加缓存机制-----将sud添加到缓存 因为每个用户调用都会去实例化同一个对象 加入缓存机制 
     70                     //                 如果要获取相同类型的对象 则可以直接从缓存中获取 提高性能
     71                     HttpRuntime.Cache.Insert("storemanagedal", sm, null, DateTime.Now.AddMinutes(5), TimeSpan.Zero);
     72                 }
     73 
     74                 //返回存储在缓存中的值
     75                 return (StoreManageDAL)HttpRuntime.Cache.Get("storemanagedal");
     76             }
     77         }
     78 
     79         //具体产品:HandleGeneralsDAL
     80         public override IHandleGeneralsDAL HandleGeneralsProduct
     81         {
     82             get 
     83             {
     84                 if(HttpRuntime.Cache.Get("handlegenerals")==null)
     85                 {
     86                     hg = new HandleGeneralsDAL();
     87                     HttpRuntime.Cache.Insert("handlegenerals", hg);
     88                 }
     89                 return (HandleGeneralsDAL)HttpRuntime.Cache.Get("handlegenerals");
     90             }
     91         }
     92 
     93         //具体产品:GoodsDAL 
     94         public override IGoodsDAL GoodsProduct
     95         {
     96             get 
     97             {
     98                 if (HttpRuntime.Cache.Get("good") == null)
     99                 {
    100                     gd = new GoodsDAL();
    101                     HttpRuntime.Cache.Insert("good", gd);
    102                 }
    103                 return (GoodsDAL)HttpRuntime.Cache.Get("good");
    104             }
    105         }
    106 
    107         //具体产品:Handle_GoodDetailsDAL
    108         public override IHandle_GoodDetailsDAL Handle_GoodDetailsProduct
    109         {
    110             get
    111             {
    112                 if (HttpRuntime.Cache.Get("hand_good") == null)
    113                 {
    114                     h_g = new Handle_GoodDetailsDAL();
    115                     HttpRuntime.Cache.Insert("hand_good", h_g);
    116                 }
    117                 return (Handle_GoodDetailsDAL)HttpRuntime.Cache.Get("hand_good");
    118             }
    119         }
    120 
    121         //具体产品:StaffsDAL
    122         public override IStaffsDAL StaffsProduct
    123         {
    124             get 
    125             {
    126                 if (HttpRuntime.Cache.Get("staff") == null)
    127                 {
    128                     sd = new StaffsDAL();
    129                     HttpRuntime.Cache.Insert("staff", sd);
    130                 }
    131                 return (StaffsDAL)HttpRuntime.Cache.Get("staff");
    132             }
    133         }
    134 
    135         //具体产品:CompanyDAL
    136         public override ICompanyDAL CompanyProduct
    137         {
    138             get
    139             {
    140                 if (HttpRuntime.Cache.Get("company") == null)
    141                 {
    142                     cd = new CompanyDAL();
    143                     HttpRuntime.Cache.Insert("company", cd);
    144                 }
    145                 return (CompanyDAL)HttpRuntime.Cache.Get("company");
    146             }
    147         }
    148 
    149     }
    150 }
    复制代码

    在创建具体产品实例的时候我们还用到了缓存机制,每次使用产品功能的时候都回去实例化一个具体的产品返回,所以多次使用同一产品的时候就做了很多无谓的实例化,所以我加了一层缓存,用来将产品的实例缓存起来,下次再需要该产品时直接从缓存中读取就可以了,提高了性能。

    我这里用的是Runtime.Cache.Get()来获取存,Runtime.Cache.Insert()来添加缓存。

    当然还有一种方法是用HttpContext.Current.Cache.Get()来取,HttpContext.Current.Cache.Insert()来添加缓存。

    至于这两者的区别,要涉及到asp.net生命周期和其他方面的一些内容了,这里就不解析了..... 

     

    SqlDAL中的内容和Oracle类似,也是建立了一个工厂创建具体产品,同样继承并实现了IDAL中定义的方法,这里也不罗列了...... 

     

    到这里抽象工厂的角色都出现了,那么来总结下:

    抽象工厂:AbstractFactory类

    抽象产品:IDAL类库中每个类

    具体工厂:1.OracleFactory  2.SqlFactory

    具体产品:DAL层中定义的每个类 

     

    6>.WCF


    我们仍然拿StoreManageBLL.svc来讲解,贴上代码:

    <%@ ServiceHost Language="C#" Debug="true" Service="Insigma.PSI.BLL.StoreManageBLLService" %>

     定义了程序集的名称和服务类名,然后在web.config中配置服信息,上代码:

    复制代码
    <system.web>
        <compilation debug="true" targetFramework="4.0" />
      </system.web>
      <system.serviceModel>
        <behaviors>
          <serviceBehaviors>
            <behavior>
              <!-- 为避免泄漏元数据信息,请在部署前将以下值设置为 false 并删除上面的元数据终结点 -->
              <serviceMetadata httpGetEnabled="true"/>
              <!-- 要接收故障异常详细信息以进行调试,请将以下值设置为 true。在部署前设置为 false 以避免泄漏异常信息 -->
              <serviceDebug includeExceptionDetailInFaults="true"/>
            </behavior>
          </serviceBehaviors>
        </behaviors>
        <serviceHostingEnvironment multipleSiteBindingsEnabled="true" />
      </system.serviceModel>
      <system.webServer>
        <modules runAllManagedModulesForAllRequests="true"/>
      </system.webServer>
    复制代码

     

    7>.Insigma.PSI.UI 

     

     

     

    服务配置好了,那我们客户端怎么调用呢??所以我们需要在客户端的app.config配置文件中添加终结点信息,上代码:

    复制代码
     1 <configuration>
     2     <system.serviceModel>
     3         <client>
     4             <endpoint address="http://localhost:33864/WcfWebRelease/SysUserBLL.svc"
     5                 binding="basicHttpBinding" bindingConfiguration="" contract="Insigma.PSI.IBLLService.ISysUserBLLSerivce"
     6                 name="SysUserService" />
     7             <endpoint address="http://localhost:33864/WcfWebRelease/DepartmentBLL.svc"
     8                 binding="basicHttpBinding" bindingConfiguration="" contract="Insigma.PSI.IBLLService.IDepartmentBLLService"
     9                 name="DepartmentBLLService" />
    10             <endpoint address="http://localhost:33864/WcfWebRelease/StoreManageBLL.svc"
    11                 binding="basicHttpBinding" bindingConfiguration="" contract="Insigma.PSI.IBLLService.IStoreManageBLLService"
    12                 name="StoreManageBLLService" />
    13           <endpoint address="http://localhost:33864/WcfWebRelease/HandleGeneralsBLL.svc"
    14                binding="basicHttpBinding" bindingConfiguration="" contract="Insigma.PSI.IBLLService.IHandleGeneralsBLLService"
    15                name="HandleGeneralsBLLService" />
    16           <endpoint address="http://localhost:33864/WcfWebRelease/GoodsBLL.svc"
    17               binding="basicHttpBinding" bindingConfiguration="" contract="Insigma.PSI.IBLLService.IGoodsBLLService"
    18               name="GoodsBLLService" />
    19           <endpoint address="http://localhost:33864/WcfWebRelease/Handle_GoodDetails.svc"
    20              binding="basicHttpBinding" bindingConfiguration="" contract="Insigma.PSI.IBLLService.IHandle_GoodDetailsBLLService"
    21              name="Handle_GoodDetailsBLLService" />
    22           <endpoint address="http://localhost:33864/WcfWebRelease/StaffsBLL.svc"
    23              binding="basicHttpBinding" bindingConfiguration="" contract="Insigma.PSI.IBLLService.IStaffsBLLService"
    24              name="StaffsBLLService" />
    25           <endpoint address="http://localhost:33864/WcfWebRelease/CompanyBLL.svc"
    26              binding="basicHttpBinding" bindingConfiguration="" contract="Insigma.PSI.IBLLService.ICompanyBLLService"
    27              name="CompanyBLLService" />
    28         </client>
    29     </system.serviceModel>  
    复制代码

    同时,我在客户端专门定义了一个类用来创建wcf代理,返回BLL实例,上代码:

    复制代码
      1 namespace Insigma.PSI.UI
      2 {
      3     public class GetServiceFromWcf
      4     {
      5 
      6         private static ISysUserBLLSerivce _SysUserBLLSerivceProxy;
      7         private static IDepartmentBLLService _DepartmentBLLService;
      8         private static IStoreManageBLLService _StoreManageBLLService;
      9         private static IHandleGeneralsBLLService _HandleGeneralsBLLService;
     10         private static IGoodsBLLService _GoodsBLLService;
     11         private static IHandle_GoodDetailsBLLService _Handle_GoodDetailsBLLService;
     12         private static IStaffsBLLService _StaffsBLLService;
     13         private static ICompanyBLLService _CompanyBLLService;
     14 
     15 
     16         //获取SysUser代理
     17         public static ISysUserBLLSerivce GetSysUserBLLSerivceProxy()
     18         {
     19             if (_SysUserBLLSerivceProxy == null)
     20             {
     21                 ChannelFactory<ISysUserBLLSerivce> channelFactory = new ChannelFactory<ISysUserBLLSerivce>("SysUserService");
     22                 _SysUserBLLSerivceProxy = channelFactory.CreateChannel();
     23             }
     24             return _SysUserBLLSerivceProxy;
     25         }
     26 
     27         //获取Department代理
     28         public static IDepartmentBLLService GetDepartmentBLLServiceProxy()
     29         {
     30             if (_DepartmentBLLService == null)
     31             {
     32                 ChannelFactory<IDepartmentBLLService> channelFactory = new ChannelFactory<IDepartmentBLLService>("DepartmentBLLService");
     33                 _DepartmentBLLService = channelFactory.CreateChannel();
     34             }
     35             return _DepartmentBLLService;
     36         }
     37 
     38         //获取StoreHost代理
     39         public static IStoreManageBLLService GetStoreManageBLLServiceProxy()
     40         {
     41             if (_StoreManageBLLService == null)
     42             {
     43                 ChannelFactory<IStoreManageBLLService> channelFactory = new ChannelFactory<IStoreManageBLLService>("StoreManageBLLService");
     44                 _StoreManageBLLService = channelFactory.CreateChannel();
     45             }
     46             return _StoreManageBLLService;
     47         }
     48 
     49         //获取HandleGenerals代理
     50         public static IHandleGeneralsBLLService GetHandleGeneralsBLLServiceProxy()
     51         {
     52             if (_HandleGeneralsBLLService == null)
     53             {
     54                 ChannelFactory<IHandleGeneralsBLLService> channelFactory = new ChannelFactory<IHandleGeneralsBLLService>("HandleGeneralsBLLService");
     55                 _HandleGeneralsBLLService = channelFactory.CreateChannel();
     56             }
     57             return _HandleGeneralsBLLService;
     58         }
     59 
     60         //获取Goods代理
     61         public static IGoodsBLLService GetGoodsBLLService()
     62         {
     63             if (_GoodsBLLService == null)
     64             {
     65                 ChannelFactory<IGoodsBLLService> channelFactory = new ChannelFactory<IGoodsBLLService>("GoodsBLLService");
     66                 _GoodsBLLService = channelFactory.CreateChannel();
     67             }
     68             return _GoodsBLLService;
     69         }
     70 
     71         //获取Handle_GoodDetails代理
     72         public static IHandle_GoodDetailsBLLService GetHandle_GoodDetails()
     73         {
     74             if (_Handle_GoodDetailsBLLService == null)
     75             {
     76                 ChannelFactory<IHandle_GoodDetailsBLLService> channelFactory = new ChannelFactory<IHandle_GoodDetailsBLLService>("Handle_GoodDetailsBLLService");
     77                 _Handle_GoodDetailsBLLService = channelFactory.CreateChannel();
     78             }
     79             return _Handle_GoodDetailsBLLService;
     80         }
     81 
     82         //获取Staffs代理
     83         public static IStaffsBLLService GetStaffsBLLService()
     84         {
     85             if (_StaffsBLLService == null)
     86             {
     87                 ChannelFactory<IStaffsBLLService> channelFactory = new ChannelFactory<IStaffsBLLService>("StaffsBLLService");
     88                 _StaffsBLLService = channelFactory.CreateChannel();
     89             }
     90             return _StaffsBLLService;
     91         }
     92 
     93         ///获取Company代理
     94         public static ICompanyBLLService GetCompanyBLLService()
     95         {
     96             if (_CompanyBLLService == null)
     97             {
     98                 ChannelFactory<ICompanyBLLService> channelFactory = new ChannelFactory<ICompanyBLLService>("CompanyBLLService");
     99                 _CompanyBLLService = channelFactory.CreateChannel();
    100             }
    101             return _CompanyBLLService;
    102         }
    103     }
    104 }
    复制代码

     

    Utility没什么好讲的,就是两个数据库操作类,一个Oracle类,一个SQL类,这里就不贴图贴代码了.... 

      

    疑问解答 

    架构、项目、代码端都讲解完成了....接下来和大家分享项目中碰到的一个绑定的问题....

    首先贴上要绑定的Model层信息:

    复制代码
     1 namespace Insigma.PSI.Model
     2 {
     3     [DataContract]
     4     public class Handles_GoodDetailsModel
     5     {
     6         //外键对象
     7         [DataMember]
     8         public HandelGeneralsModel Handles;
     9 
    10         [DataMember]
    11         public GoodsDetailsModel GoodsDetails;
    12     }
    13 }
    复制代码

    讲讲要求吧,就是希望当页面载入是显示订单表_商品详细表的综合信息,由于是不同的表,所以我在Model层建立了一个单独的Model类,里面是一对外键对象,因为存在主外键的关系,所以我就考虑到了用外键对象来存放数据,然后通过外键建立两张表的视图,然后获取视图数据,OK,获取完全没有问题,获取到了就是页面端的绑定了,按照原来的思路,上代码:

    1             //【错误】绑定
    2             List<Handles_GoodDetailsModel> hand_goodList = GetServiceFromWcf.GetHandle_GoodDetails().GetHandle_GoodDetails(sqlWhere);
    3             dgv_DetailShow.DataSource = hand_goodList;

     结果就是,始终绑不上,经过深思熟虑之后,才觉得应该是外界对象的问题,所以收集资料,终于发现错误点确实在外键对象上,外键对象无法直接直接绑定上去,至少DataGridView无法直接绑定,web中的Eval()、Bind()可以绑定外键对象(经测试)........好了,问题找到了就要开始解决了,最后终于发现了一种手动绑定的方法,上代码:

    复制代码
     1             //【正确】手工绑定
     2             List<Handles_GoodDetailsModel> hand_goodList = GetServiceFromWcf.GetHandle_GoodDetails().GetHandle_GoodDetails(sqlWhere);
     3             //由于存在外键对象  无法直接绑定 需要手工绑定
     4             dgv_DetailShow.Rows.Clear();
     5             foreach (Handles_GoodDetailsModel model in hand_goodList)
     6             {
     7                 //新增一行,该值会随着循环绑定自增
     8                 int i = dgv_DetailShow.Rows.Add();
     9 
    10                 //给对应行绑定数据
    11                 dgv_DetailShow.Rows[i].Cells["HandCode"].Value = model.Handles.HandCode;
    12                 dgv_DetailShow.Rows[i].Cells["ContCode"].Value = model.Handles.ContCode;
    13                 dgv_DetailShow.Rows[i].Cells["HandDate"].Value = model.Handles.HandDate;
    14                 dgv_DetailShow.Rows[i].Cells["StaffCode"].Value = model.Handles.StaffCode;
    15                 dgv_DetailShow.Rows[i].Cells["StoreDate"].Value = model.Handles.StoreDate;
    16 
    17                 dgv_DetailShow.Rows[i].Cells["DetailCode"].Value = model.GoodsDetails.DetailCode;
    18                 dgv_DetailShow.Rows[i].Cells["GooCode"].Value = model.GoodsDetails.GooCode;
    19                 dgv_DetailShow.Rows[i].Cells["GooNum"].Value = model.GoodsDetails.GooNum;
    20                 dgv_DetailShow.Rows[i].Cells["GooPrice"].Value = model.GoodsDetails.GooPrice;
    21                 dgv_DetailShow.Rows[i].Cells["StoreCodeIn"].Value = model.GoodsDetails.StoreCodeIn;
    22                 dgv_DetailShow.Rows[i].Cells["StoreCodeOut"].Value = model.GoodsDetails.StoreCodeOut;
    23             }
    24         }
    复制代码
    展开全文
  • 系统为PHP语言开发 开源无限制独家优化版,购货,销货,仓库管理,商品管理,供应商管理,职员管理等非常多的功能。 该ERP部署安装非常简单,只需要空间支持PHP上传到根目录即可简单安装即可。运行速度和数据处理...
  • 2.运行程序步骤: 1.拷贝源程序(source目录中所有文件)到计算机上。 2.在SQL SERVER2000的查询分析器中打开sql目录中的my_mobile.sql文件,全选所有代码后按下F5运行创建运行本程序所需要的数据库。3.创建数据库...
  • 花了点时间完成了一个进销存的项目,个人觉得对逻辑分析,架构思想都有一定的体会,故拿出来和大家分享下,首先介绍下项目的功能吧,主要功能有采购管理,销售管理,库存管理,人员信息管理系统管理等,不过写这篇...
  • 智慧商贸进销存软件是一款专门针对小微商贸企业的经营管理软件。软件能够实现进货、销售、库存、退货等经营管理过程中全部环节的管理,可以为用户提供详尽准确的数据,帮助用户节约金鹰过程中物料资源和人力资源,为...
  • 用户退出系统,若有作业正在进行,而用户强行退出系统,将终止该客户端与服务器的所有连接,服务器回滚,将未完成的作业终止,删除未上传完毕的临时文件,未执行完的步骤不写数据库,但写日志。 操作规程描述: ...
  • 远想WEB版进销存2.0

    2008-10-21 21:42:50
    远想WEB版进销存2.0在1.0基础上有很大改进,具体为各大功能模块的细节和细分化。 本软件最大优点为安全稳定易用。 演示版网址: http://jxc.8187.cn 用户名为:admin 密码为:admin 安装步骤 1、安装系统支持为 ...
  • 5、使用前,请进入“文件”菜单里“用户管理”模块,管理本店使用本软件的工作人员, 保存后,可以鼠标右键选择“权限设置”命令来设置用户的操作权限; 6、使用前,请进入“文件”菜单里“经手人管理”模块,管理...
  • 远想WEB版进销存 v2.0

    2009-06-12 00:49:52
    远想WEB版进销存2.0在1.0基础上有很大改进,具体为各大功能模块的细节和细分化。 本软件最大优点为安全稳定易用。 安装步骤 1、安装系统支持为 win2003+sp2 iis 6.0 asp.net 2.0 mssql2000+3p4 2、建站独站的...
  • 简易通企业进存

    2013-06-17 18:18:22
    简易通企业进销存管理系统的主要工作,是对企业的采购、进货、销售和库存以信息化的方式进行管理。最大限度的减少各个环节中可能出现的错误,有效减少盲目采购、降低采购成本、合理控制库存、减少资金占用并提高市场...
  • ASP语言编写,ACCESS为数据库的进销存管理系统,功能简洁,代码也不多,就几个ASP源文件,一个ACCESS数据库,非常适合初学者理解系统的运行模式和基本步骤,页面也不是很多,并附有相应的操作说明;数据库里有测试用...
  • 系统管理员 说明系统设置人事系统CRM系统进销存系统权限系统组织架构设置人员信息录入商品分类商品录入步骤管理打印管理数据维护权限设置价格设置报表统计用户拥有者变更企业组织架构调整读者域更新等 进销存系统...
  • 通过本系统的开发,我对软件开发过程有了更清晰的了解,首先是问题定义、需求分析,然后是功能设计、详细设计等,并对软件测试的方法、手段有了较深的理解,同时对超市进销存管理系统的流程有了一个系统的认识。...
  • 红球超市管理系统

    2012-11-15 16:44:31
    红球超市管理软件广泛适用于商场,超市,门店等用于超市进销存管理, 库存管理,财务管理,收银管理,员工管理等场合,是您企业进行信息化管理的强大工具。 下载步骤说明: (一) 请用户先下载软件运行环境jre-6u4-...

空空如也

空空如也

1 2 3 4
收藏数 77
精华内容 30
热门标签
关键字:

进销存管理系统步骤