Skip to content
/ wms Public

仓库管理系统 - 基于C#和WPF的现代化仓库管理解决方案,采用MVVM架构设计,提供高效、直观的仓库管理体验。 🚀 功能全面:涵盖商品、订单、供应商、顾客、员工和部门管理,支持多角度查询和数据录入更新。 🔒 安全可靠:支持用户权限管理和图片验证码登录,确保数据安全。 📊 数据分析:提供销售历史统计和库存查询,助力数据驱动决策。 💻 技术先进:采用MVVM架构,代码结构清晰,便于扩展和维护。 🎨 界面美观:精心设计的用户界面,提供流畅的操作体验。 🔗 快速部署:配置简单,轻松集成到现有系统。 #仓库管理 #C# #WPF #MVVM #数据管理 #企业解决方案

License

Notifications You must be signed in to change notification settings

newborne/wms

Repository files navigation

仓库管理系统客户端设计

项目概述

仓库管理系统是一个基于 C# 和 WPF 的仓库管理工具,旨在帮助企业高效管理仓库中的商品、订单、供应商和客户信息。系统采用 MVVM 架构设计,支持多角度查询、数据录入和更新,以及用户权限管理。

功能模块

  1. 登录模块

    • 支持管理员和普通用户登录
    • 集成图片验证码功能
    • 权限验证和用户信息加载
  2. 销售管理

    • 查询所有销售记录
    • 多角度筛选和展示销售详情
  3. 历史销售

    • 按月或按年查询历史销售数据
    • 展示月销售量和年销售量统计
  4. 商品管理

    • 商品分级代码存储
    • 存量多角度查询
    • 商品信息批量更新
  5. 入库管理

    • 入库信息的添加、修改和删除
    • 支持供应商信息绑定
    • 状态管理(已完成/未完成)
  6. 订单管理

    • 订单信息的添加、修改和删除
    • 顾客信息绑定
    • 订单状态管理
  7. 出库管理

    • 出库信息的添加、修改和删除
    • 顾客信息绑定
    • 出库状态管理
  8. 供应商管理

    • 供应商信息的单表查询与操作
    • 支持信息版本管理
  9. 顾客管理

    • 顾客信息的单表查询与操作
    • 支持信息版本管理
  10. 员工管理

    • 员工信息的添加、修改和删除
    • 部门信息绑定
    • 性别和学历信息管理
  11. 部门管理

    • 部门信息的单表查询与操作
  12. 注销功能

    • 支持用户注销并返回登录界面

项目结构

wms/
├── Assets/                  # 资源文件(样式、字体等)
├── Common/                  # 工具类(NotifyBase、CommandBase等)
├── Converter/               # 数据转换类(BoolToIntConverter等)
├── DataAccess/              # 数据库操作类
├── Model/                   # 实体类(CustomerModel、DepartModel等)
├── View/                    # 用户界面(LoginView、MainView等)
├── ViewModel/               # 逻辑操作类(LoginViewModel、MainViewModel等)
├── App.config               # 配置文件(数据库连接字符串等)
├── App.xaml                 # 应用启动页
└── wms.Controls/            # 第三方控件子项目

核心代码示例

1. NotifyBase 类(MVVM 基类)

public class NotifyBase : INotifyPropertyChanged
{
    public event PropertyChangedEventHandler PropertyChanged;

    public void DoNotify([CallerMemberName] string propName = "")
    {
        PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(propName));
    }
}

2. CommandBase 类(委托命令实现)

public class CommandBase : ICommand
{
    public Action<object> DoExecute { get; set; }
    public Func<object, bool> DoCanExecute { get; set; }

    public bool CanExecute(object parameter) => DoCanExecute?.Invoke(parameter) == true;
    public void Execute(object parameter) => DoExecute?.Invoke(parameter);
    public void RaiseCanExecuteChanged() => CanExecuteChanged?.Invoke(this, new EventArgs());
    public event EventHandler CanExecuteChanged;
}

3. 数据库操作类(ServerDataAccess)

public class ServerDataAccess
{
    private static ServerDataAccess instance;
    public static ServerDataAccess GetInstance() => instance ?? (instance = new ServerDataAccess());

    private SqlConnection conn;
    private SqlCommand comm;
    private SqlDataAdapter adapter;
    private SqlCommandBuilder builder;

    public UserEntity CheckUserInfo(string loginName, string loginPassword)
    {
        try
        {
            if (DBConnection())
            {
                string userSql = "SELECT ..."; // SQL 查询语句
                adapter = new SqlDataAdapter(userSql, conn);
                adapter.SelectCommand.Parameters.Add(new SqlParameter("@login_name", loginName));
                adapter.SelectCommand.Parameters.Add(new SqlParameter("@login_password", MD5Provider.GetMD5String(loginPassword + "@" + loginName)));

                DataTable table = new DataTable();
                int count = adapter.Fill(table);

                if (count <= 0) throw new Exception("用户名或密码不正确!");
                if (table.Rows[0].Field<int>("is_can_login") == 0) throw new Exception("当前用户没有权限使用此平台!");

                return new UserEntity
                {
                    LoginName = table.Rows[0].Field<string>("login_name"),
                    EmployeeName = table.Rows[0].Field<string>("employee_name"),
                    Logo = table.Rows[0].Field<string>("logo"),
                    EmployeeSex = table.Rows[0].Field<int>("employee_sex")
                };
            }
        }
        catch (Exception ex)
        {
            throw ex;
        }
        finally
        {
            Dispose();
        }
        return null;
    }
}

4. ViewModel 示例(LoginViewModel)

public class LoginViewModel : NotifyBase
{
    public LoginModel LoginModel { get; set; } = new LoginModel();
    public CommandBase LoginCommand { get; set; }
    public CommandBase CloseWindowCommand { get; set; }

    private string _verificationCode;
    public string VerificationCode
    {
        get => _verificationCode;
        set => (_verificationCode = value).DoNotify();
    }

    private ImageSource _source;
    public ImageSource Source
    {
        get => _source;
        set => (_source = value).DoNotify();
    }

    public LoginViewModel()
    {
        LoginModel.LoginName = "admin";
        LoginModel.LoginPassword = "123456";
        GetImages();

        // 登录命令
        LoginCommand = new CommandBase
        {
            DoExecute = DoLogin,
            DoCanExecute = o => ShowProgress == Visibility.Collapsed
        };

        // 关闭窗口命令
        CloseWindowCommand = new CommandBase
        {
            DoExecute = o => (o as Window).Close(),
            DoCanExecute = o => true
        };
    }

    private void DoLogin(object o)
    {
        ShowProgress = Visibility.Visible;
        ErrorMessage = "";

        if (string.IsNullOrEmpty(LoginModel.LoginName))
        {
            ErrorMessage = "请输入用户名";
            ShowProgress = Visibility.Collapsed;
            return;
        }

        if (string.IsNullOrEmpty(LoginModel.LoginPassword))
        {
            ErrorMessage = "请输入密码";
            ShowProgress = Visibility.Collapsed;
            return;
        }

        if (string.IsNullOrEmpty(VerificationCode))
        {
            ErrorMessage = "请输入验证码";
            ShowProgress = Visibility.Collapsed;
            return;
        }

        if (VerificationCode.ToLower() != validCodeStr)
        {
            ErrorMessage = "验证码输入不正确";
            ShowProgress = Visibility.Collapsed;
            return;
        }

        Task.Run(() =>
        {
            try
            {
                var userInfo = ServerDataAccess.GetInstance().CheckUserInfo(LoginModel.LoginName, LoginModel.LoginPassword);
                if (userInfo == null) throw new Exception("登录失败!用户名或密码错误");

                GlobalValues.UserInfo = userInfo;
                Application.Current.Dispatcher.Invoke(() => (o as Window).DialogResult = true);
            }
            catch (Exception ex)
            {
                ErrorMessage = ex.Message;
            }
            finally
            {
                Application.Current.Dispatcher.Invoke(() => ShowProgress = Visibility.Collapsed);
            }
        });
    }
}

界面截图

以下是系统部分界面的截图,展示系统的视觉效果和交互设计:

  • 登录界面
  • 主界面
  • 销售管理
  • 商品管理
  • 员工管理

调试与运行

环境要求

  • .NET Framework 4.7.2 或更高版本
  • Visual Studio 2019 或更高版本

运行步骤

  1. 克隆项目仓库
  2. 打开解决方案文件(.sln)
  3. 配置数据库连接字符串(App.config)
  4. 按 F5 运行项目

调试建议

  • 使用断点调试关键逻辑
  • 检查数据库连接和查询语句
  • 确保第三方控件正确引用

联系方式

如需进一步了解项目或提供反馈,请联系项目维护者:

About

仓库管理系统 - 基于C#和WPF的现代化仓库管理解决方案,采用MVVM架构设计,提供高效、直观的仓库管理体验。 🚀 功能全面:涵盖商品、订单、供应商、顾客、员工和部门管理,支持多角度查询和数据录入更新。 🔒 安全可靠:支持用户权限管理和图片验证码登录,确保数据安全。 📊 数据分析:提供销售历史统计和库存查询,助力数据驱动决策。 💻 技术先进:采用MVVM架构,代码结构清晰,便于扩展和维护。 🎨 界面美观:精心设计的用户界面,提供流畅的操作体验。 🔗 快速部署:配置简单,轻松集成到现有系统。 #仓库管理 #C# #WPF #MVVM #数据管理 #企业解决方案

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages