# Shop-ZYF **Repository Path**: yifan-csust/Shop-ZYF ## Basic Information - **Project Name**: Shop-ZYF - **Description**: 基于pymysql+tkinter的python购物系统项目~ - **Primary Language**: Unknown - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2023-11-20 - **Last Updated**: 2023-11-30 ## Categories & Tags **Categories**: Uncategorized **Tags**: SQL, Python ## README # python商城项目 ### 使用说明 使用前请先在数据库创建"shop-zyf"库,可以参照如下sql语句: ```sql CREATE DATABASE shop_zyf CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci; ``` 随后运行压缩包附带的sql文件建表和导入数据 最后在项目util->db_util.py中修改数据库连接配置,将密码修改为自己电脑中mysql的密码 ![help_image.png](image/help_image.png) ## 一、需求分析 该项目是一个购物系统,拥有前台和后台两个平台。前台主要提供给用户使用,后台仅允许管理员使用。前台用户可以浏览商品选择是否购买商品,每选择一次购买商品就产生一个订单,用户也可以查看订单,可以通过删除订单来取消购买商品。后台管理员可以对商品、用户和订单进行管理,对商品可以进行增删改查操作,对用户也可以进行增删改查操作,而对于订单仅可以进行查询操作,管理员无权为用户增加删除和修改订单。 ## 二、总体设计 该系统需设计四个模块,分别是底层数据库交互模块DAO模块、数据库服务管理模块service模块、工具模块util模块和页面显示模块view模块。整体来说就是通过数据库连接技术和GUI技术对数据库表中的数据进行增删改查。关键技术在于数据库连接技术(pymysql)以及图形化界面技术(tkinter)。在view模块里调用service模块中封装的方法来进行数据库操作,而service模块里封装的方法具体由DAO模块的数据库相关方法实现,而DAO模块使用数据库前需要通过util模块的工具对数据库进行连接。数据库设计了四张表,分别为商品、订单、用户和管理员表。项目难点在于对图形化界面的设计与实现,需要不断调试修改。 ## 三、详细设计 在util中就一个工具,数据库连接工具db_util.py。 | **方法名** | **方法作用** | | ---------------- | ---------------- | | get_mysql_conn() | 进行数据库的连接 | 表1 db_util.py中的函数 在DAO中有四个文件,分别对应四个表的admin_DAO.py,order_DAO.py,product_DAO.py,users_DAO.py。 | **方法名** | **方法作用** | | -------------------------- | ---------------------- | | select_for_pwd(admin_name) | 通过密码查询管理员信息 | 表2 admin_DAO.py中的函数 | **方法名** | **方法作用** | | --------------------------------- | ------------------------------------------ | | insert_order(pro_name, user_name) | 将商品名称和用户名插入订单表中(新增订单) | | delete_order(order_id) | 通过订单编号删除订单 | | select_by_id(order_id) | 通过订单编号查询订单信息 | | select_by_user(user_name) | 通过用户名查询订单信息 | | select_by_pro(pro_name) | 通过商品名称查询订单信息 | | select_all() | 查询所有订单信息 | | select_pro_name(order_id) | 通过订单编号查询商品名称 | 表3 order_DAO.py中的函数 | **方法名** | **方法作用** | | ---------------------------------------- | ------------------------------------------------------ | | insert_pro(pro_name, pro_price, pro_num) | 将商品名称、商品价格和商品数量插入商品表中(新增商品) | | delete_pro(pro_id) | 通过商品编号删除商品信息 | | update_pro(pro_id, pro_price, pro_num) | 通过商品编号修改商品的商品价格和商品数量 | | select_for_all(pro_id) | 通过商品编号查询商品所有信息 | | select_for_price(pro_id) | 通过商品编号查询商品价格信息 | | select_for_num(pro_id) | 通过商品编号查询商品数量信息 | | select_all() | 查询所有商品信息 | | select_num_only(pro_name) | 通过商品名称查询商品数量信息 | | up_product_num(pro_name) | 通过商品名称增加商品数量(每次增加1件商品) | | down_product_num(pro_name) | 通过商品名称减少商品数量(每次减少1件商品) | 表4 product_DAO.py中的函数 | **方法名** | **方法作用** | | ---------------------------------------------------------- | ------------------------------------------------------------ | | insert_user(user_name, user_pwd, user_phone, user_address) | 将用户名、用户密码、电话号码和用户地址插入用户表中(新增用户) | | delete_user(user_name) | 通过用户名删除用户信息 | | update_user_other(user_name, user_phone, user_address) | 通过用户名修改电话号码和用户地址信息 | | update_user_pwd(user_name, user_pwd) | 通过用户名修改用户密码信息 | | select_for_all(user_name) | 通过用户名查询用户所有信息 | | select_for_other(user_name) | 通过用户名查询电话号码和用户地址信息 | | select_for_id(user_name) | 通过用户名查询用户编号信息 | | select_for_pwd(user_name) | 通过用户名查询用户密码信息 | 表5 users_DAO.py中的函数 在service中有四个文件,分别对于处理四个DAO文件数据库操作技术的文件admin_service.py,order_service.py,product_service.py,users_service.py。这些文件的方法均已经封装成类,故这些方法均为类的实例方法。 | **方法名** | **方法作用** | | ------------------------------------ | ------------------- | | query_for_pwd_admin(self,admin_name) | 调用DAO中的对于方法 | 表6 admin_service.py中的函数 | **方法名** | **方法作用** | | ------------------------------------ | ------------------- | | add_order(self, pro_name, user_name) | 调用DAO中的对于方法 | | remove_order(self,order_id) | 调用DAO中的对于方法 | | query_all_order(self) | 调用DAO中的对于方法 | | query_by_id(self,order_id) | 调用DAO中的对于方法 | | query_by_user(self,user_name) | 调用DAO中的对于方法 | | query_by_pro(self,pro_name) | 调用DAO中的对于方法 | | query_pro_name(self,order_id) | 调用DAO中的对于方法 | 表7 order_service.py中的函数 | **方法名** | **方法作用** | | ------------------------------------------------ | ------------------- | | add_product(self, pro_name, pro_price, pro_num) | 调用DAO中的对于方法 | | remove_product(self, pro_id) | 调用DAO中的对于方法 | | change_product(self, pro_price, pro_num, pro_id) | 调用DAO中的对于方法 | | query_for_all(self, pro_id) | 调用DAO中的对于方法 | | query_for_price(self, pro_id) | 调用DAO中的对于方法 | | query_for_num(self, pro_id) | 调用DAO中的对于方法 | | query_all(self) | 调用DAO中的对于方法 | | query_num_only(self, pro_name) | 调用DAO中的对于方法 | | up_num(self, pro_name) | 调用DAO中的对于方法 | | down_num(self, pro_name) | 调用DAO中的对于方法 | 表8 product_service.py中的函数 | **方法名** | **方法作用** | | ------------------------------------------------------------ | ------------------- | | add_user(self, user_name, user_pwd, user_phone, user_address) | 调用DAO中的对于方法 | | remove_user(self, user_name) | 调用DAO中的对于方法 | | change_user_other(self, user_name, user_phone, user_address) | 调用DAO中的对于方法 | | change_user_pwd(self, user_name, user_pwd) | 调用DAO中的对于方法 | | query_for_all_user(self, user_name) | 调用DAO中的对于方法 | | query_for_other(self, user_name) | 调用DAO中的对于方法 | | query_for_pwd(self, user_name) | 调用DAO中的对于方法 | | query_for_id(self, user_name) | 调用DAO中的对于方法 | 表9 users_service.py中的函数 在view中有五个文件,分别是登陆系统选择器页面文件select_login_page.py、前台登录页面文件user_login_page.py、后台登录页面文件admin_login_page.py、前台页面文件front_page.py和后台页面文件background_page.py。五个文件中的函数均已封装成类,方法均为实例方法。 | **方法名** | **方法作用** | | ------------------- | -------------------------------------------------- | | __init__(self) | 类的构造函数,用于初始化窗体,对窗体进行设计和布局 | | button1_click(self) | 实例化登录页面类,显示前台登录窗体 | | button2_click(self) | 实例化登录页面类,显示后台登录窗体 | | run(self) | 启动函数,用于显示窗体 | 表10 select_login_page.py中的函数 | **方法名** | **方法作用** | | -------------------- | ---------------------------------------------------------- | | __init__(self) | 类的构造函数,用于初始化窗体,对窗体进行设计和布局 | | verify_code(self) | 用于产生登录验证码 | | user_log_in(self) | 处理用户登录逻辑,成功则实例化前台页面类,显示前台页面窗体 | | user_sign_up(self) | 用于初始化注册窗口 | | register_user(self) | 处理注册逻辑 | | user_sign_quit(self) | 处理取消登录逻辑 | | run(self) | 启动函数,用于显示窗体 | 表11 user_login_page.py中的函数 | **方法名** | **方法作用** | | -------------------- | ------------------------------------------------------------ | | __init__(self) | 类的构造函数,用于初始化窗体,对窗体进行设计和布局 | | user_log_in(self) | 处理管理员登录逻辑,成功则实例化后台页面类,显示后台页面窗体 | | user_sign_quit(self) | 处理取消登录逻辑 | | run(self) | 启动函数,用于显示窗体 | 表12 admin_login_page.py中的函数 | **方法名** | **方法作用** | | -------------------------- | ------------------------------------------------------------ | | __init__(self, username) | 类的构造函数,用于初始化窗体,对窗体进行设计和布局,同时传递用户名参数 | | create_top_frame(self) | 创建窗体顶部文本信息 | | create_menu_bar(self) | 创建窗体菜单栏信息 | | create_product_table(self) | 创建商品信息显示 | | create_buy_button(self) | 创建购买按钮 | | buy_product(self) | 实现商品购买逻辑 | | my_order(self) | 创建我的订单页面,实现用户对订单的管理逻辑 | | return_function(self) | 实现退出页面逻辑 | | update_page(self) | 更新页面 | | run(self) | 启动函数,用于显示窗体 | 表13 front_page.py中的函数 | **方法名** | **方法作用** | | --------------------------------- | -------------------------------------------------- | | __init__(self) | 类的构造函数,用于初始化窗体,对窗体进行设计和布局 | | show_product_functions(self) | 用于显示商品管理的相关按钮 | | show_query_product_function(self) | 用于显示商品管理子功能商品查询的相关按钮 | | show_user_functions(self) | 用于显示用户管理的相关按钮 | | show_change_user_function(self) | 用于显示用户管理子功能修改用户信息的相关按钮 | | show_query_user_function(self) | 用于显示用户管理子功能查询用户信息的相关按钮 | | show_order_functions(self) | 用于显示订单管理的相关按钮 | | hide_all_functions(self) | 用于隐藏所有子按钮,仅保留第一排的按钮 | | hide_query_grid(self) | 用于隐藏商品管理子功能商品查询的相关按钮 | | hide_change_grid(self) | 用于隐藏用户管理子功能修改用户信息的相关按钮 | | hide_query_grid_user(self) | 用于隐藏用户管理子功能查询用户信息的相关按钮 | | return_to_previous(self) | 实现返回上一层按钮的功能逻辑 | | exit_system(self) | 实现退出按钮的功能逻辑 | | Processing_function(self) | 用于处理所有子功能的逻辑 | | run(self) | 启动函数,用于显示窗体 | 表14 background_page.py中的函数 以及剩下的main.py文件,用于整个系统的启动。 | **方法名** | **方法作用** | | ---------------- | ------------------------------------ | | show_main_view() | 实例化选择登陆方式页面类,显示该页面 | 表15 main.py中的函数 ## 四、编码实现 预期功能已经基本实现,具体情况如下: ***\*已实现功能\****:选择登陆方式、前台用户登录、后台管理员登陆、前台用户查看商品列表、前台用户购买商品、前台用户查看订单、前台用户管理订单、前台用户更新页面、前台用户退出、后台管理员上架商品、后台管理员下架商品、后台管理员修改商品信息、后台管理员查询商品信息(共三种查询方式)、后台管理员增加用户信息、后台管理员删除用户信息、后台管理员修改用户信息、后台管理员查询用户信息(共四种查询方式)、后台管理员查询订单信息(共三种查询方式)、后台管理员返回上一层、后台管理员退出,共计27个功能。 ***\*未实现功能\****:前台商品分类显示,前台用户支付订单,后台管理员账号登录前台等