商品信息管理系统(Python)完整版

news2024/11/18 7:41:34

目录

功能模块:

实现思路:

运行功能演示:

具体实现过程:

定义商品类:

定义商品管理类

定义显示商品信息函数

输入销量函数:

添加商品信息:

删除商品信息

修改商品信息

导入商品信息

导出商品信息

求商品平均销量

求商品最高销量

求商品最低销量

最后定义菜单函数和主函数:

完整代码:


功能模块:

商品基本信息管理和商品销量统计。

基本信息管理模块的主要功能有商品基本信息的添加、删除、修改、显示和数据的导入导出

商品销量统计管理模块的主要功能有统计商品的最高销量、最低销量和平均销量。

实现思路:

  1. 设计一个商品类,包含商品编号、名称、一季度销量、二季度销量和三季度销量等数据成员。
  2. 引入OS模块,用于导入导出路径文件信息
  3. 设计一个商品管理类,用于定义各个模块的具体功能函数。
  4. 设计一个主菜单,两个子菜单,分别管理商品基本信息和销量信息

运行功能演示:

商品信息管理系统启动后,首先进入系统主界面,等待用户输入命令选择相应的功能。

如果用户输入“info”命令,则进入商品基本信息管理子功能模块。

在商品基本信息管理界面,用户通过输入相应的命令进行商品基本信息的增、删、改、显示等操作。

添加商品信息

删除商品信息

修改商品信息

 显示商品信息

如果用户输入“sale”命令,则进入商品销量管理子功能模块。

在商品销量管理界面用户可选择相应的功能进行销量处理。

平均销量:

最高销量:

最低销量:

具体实现过程:

定义商品类:

class Goods:
    def __init__(self,no,name,first=0,second=0,third=0):
        self.no = no
        self.name = name
        self.first = int(first)
        self.second = int(second)
        self.third = int(third)     

定义商品管理类

class GoodsList:
    def __init__(self):
        self.gdslist = []

定义显示商品信息函数

在商品管理类下面定义显示商品信息函数:

  def show(self):
        #显示信息
        print('{}\t{}\t{}\t{}\t{}'
              .format('编号','名称','一季度','二季度','三季度'))
        for gd in self.gdslist:            
            print('{}\t{}\t{}\t{}\t{}'
              .format(gd.no,gd.name,gd.first,gd.second,gd.third))

输入销量函数:

  def __enterSale(self,message):
        #销量输入
        while True:
            try:
                sale = input(message)
                if 0 <= int(sale) <= 10000:
                    break
                else:
                    print("输入错误,应在0到10000之间")
            except:
                print("输入错误,应在0到10000之间")
        return sale 
    def __exists(self,no):
        #判断编号是否存在
        for gd in self.gdslist:
            if gd.no == no:
                return True
        else:
            return False

添加商品信息:

def insert(self):
        #添加信息
        while True:
            no = input('编号:')
            if self.__exists(no):
                print('该编号已存在')
            else:
                name = input('名称:')
                first = self.__enterSale('一季度:')
                second = self.__enterSale('二季度:')
                third = self.__enterSale('三季度:')
                gd = Goods(no,name,first,second,third)
                self.gdslist.append(gd)
            choice = input('继续添加(y/n)?').lower()
            if choice == 'n':
                break

删除商品信息

   def delete(self):
        #删除学生信息
        while True:
            no = input('请输入要删除的学生学号:')                
            for stu in self.stulist[::]:
                if stu.no == no:
                    self.stulist.remove(stu)
                    print('删除成功')
                    break
            else:
                print('该学号不存在')
            choice = input('继续删除(y/n)?').lower()
            if choice == 'n':
                break

修改商品信息

 def delete(self):
        #删除信息
        while True:
            no = input('请输入要删除的商品编号:')                
            for gd in self.gdslist[::]:
                if gd.no == no:
                    self.gdslist.remove(gd)
                    print('删除成功')
                    break
            else:
                print('该编号不存在')
            choice = input('继续删除(y/n)?').lower()
            if choice == 'n':
                break

导入商品信息

   def load(self,fn):
        #导入信息
        if os.path.exists(fn):
            try:
                with open(fn,'r',encoding = 'utf-8') as fp:
                    while True:
                        fs = fp.readline().strip('\n')
                        if not fs:
                            break
                        else:
                            gd = Goods(*fs.split(','))
                            if self.__exists(gd.no):
                                print('该编号已存在')
                            else:
                                self.gdslist.append(gd)
                print('导入完毕')
            except:
                print('error...')
        else:
            print('要导入的文件不存在')
        

导出商品信息

    def save(self,fn):
        #导出信息
        with open(fn,'w',encoding = 'utf-8') as fp:
            for gd in self.gdslist:
                fp.write(gd.no + ',')
                fp.write(gd.name + ',')
                fp.write(str(gd.first) + ',')
                fp.write(str(gd.second) + ',')                    
                fp.write(str(gd.third) + '\n')                    
            print("导出完毕")

求商品平均销量

   def sale_avg(self):
        #求平均销量
        length = len(self.gdslist)
        if length > 0:
            first_avg = sum([gd.first for gd in self.gdslist])/length
            second_avg = sum([gd.second for gd in self.gdslist])/length
            third_avg = sum([gd.third for gd in self.gdslist])/length
            print('一季度平均销量是:%.2f'%first_avg)
            print('二季度平均销量是:%.2f'%second_avg)
            print('三季度平均销量是:%.2f'%third_avg)
        else:
            print('尚没有商品销量...')

求商品最高销量

   def sale_max(self):
        #求最高
        if len(self.gdslist) > 0:
            first_max = max([gd.first for gd in self.gdslist])
            second_max = max([gd.second for gd in self.gdslist])
            third_max = max([gd.third for gd in self.gdslist])
            print('一季度最高销量是:%d'%first_max)
            print('二季度最高销量是:%d'%second_max)
            print('三季度最高销量是:%d'%third_max)
        else:
            print('尚没有商品销量...')

求商品最低销量

    def sale_min(self):
        #求最低
        if len(self.gdslist) > 0:
            first_min = min([gd.first for gd in self.gdslist])
            second_min = min([gd.second for gd in self.gdslist])
            third_min = min([gd.third for gd in self.gdslist])
            print('一季度最低销量是:%d'%first_min)
            print('二季度最低销量是:%d'%second_min)
            print('三季度最低销量是:%d'%third_min)
        else:
            print('尚没有商品销量...')

最后定义菜单函数和主函数:

def infoprocess(self):
        #基本信息管理
        print('商品基本信息管理'.center(20,'-'))
        print('load----------导入商品信息')
        print('insert--------添加商品信息')
        print('delete--------删除商品信息')
        print('update--------修改商品信息')
        print('show----------显示商品信息')
        print('save----------导出商品信息')
        print('return--------返回')
        print('-'*28)
        while True:
            s = input('info>').strip().lower()
            if s == 'load':
                fn = input('请输入要导入的文件名:')
                self.load(fn)
            elif s == 'show':
                self.show()
            elif s == 'insert':
                self.insert()
            elif s == 'delete':
                self.delete()
            elif s == 'update':
                self.update()
            elif s == 'save':
                fn = input('请输入要导出的文件名:')
                self.save(fn)
            elif s =='return':
                break
            else:
                print('输入错误')
    
    def saleprocess(self):
        #销量统计
        print('商品销量统计'.center(24,'='))
        print('avg    --------平均销量')
        print('max    --------最高销量')
        print('min    --------最低销量')        
        print('return --------返回')
        print(''.center(30,'='))
        while True:
            s = input('sale>').strip().lower()
            if s == 'avg':                
                self.sale_avg()
            elif s == 'max':                
                self.sale_max()
            elif s == 'min':                
                self.sale_min()
            elif s == 'return':
                break
            else:
                print('输入错误')
                
    def main(self):
        #主控函数               
        while True:
            print('商品信息管理系统V1.0'.center(24,'='))
            print('info  --------商品基本信息管理')
            print('sale  --------商品销量统计')
            print('exit  --------退出系统')
            print(''.center(32,'='))
            s = input('main>').strip().lower()
            if s == 'info':
                self.infoprocess()
            elif s == 'sale':
                self.saleprocess()
            elif s == 'exit':
                break
            else:
                print('输入错误')   
        

if __name__ == '__main__':
    gds = GoodsList()
    gds.main()

完整代码:

'''
导入导出文件的编码是utf-8
'''
import os

class Goods:
    def __init__(self,no,name,first=0,second=0,third=0):
        self.no = no
        self.name = name
        self.first = int(first)
        self.second = int(second)
        self.third = int(third)        
    
class GoodsList:
    def __init__(self):
        self.gdslist = []

    def show(self):
        #显示信息
        print('{}\t{}\t{}\t{}\t{}'
              .format('编号','名称','一季度','二季度','三季度'))
        for gd in self.gdslist:            
            print('{}\t{}\t{}\t{}\t{}'
              .format(gd.no,gd.name,gd.first,gd.second,gd.third))
            
    def __enterSale(self,message):
        #销量输入
        while True:
            try:
                sale = input(message)
                if 0 <= int(sale) <= 10000:
                    break
                else:
                    print("输入错误,应在0到10000之间")
            except:
                print("输入错误,应在0到10000之间")
        return sale 

    def __exists(self,no):
        #判断编号是否存在
        for gd in self.gdslist:
            if gd.no == no:
                return True
        else:
            return False
        
    def insert(self):
        #添加信息
        while True:
            no = input('编号:')
            if self.__exists(no):
                print('该编号已存在')
            else:
                name = input('名称:')
                first = self.__enterSale('一季度:')
                second = self.__enterSale('二季度:')
                third = self.__enterSale('三季度:')
                gd = Goods(no,name,first,second,third)
                self.gdslist.append(gd)
            choice = input('继续添加(y/n)?').lower()
            if choice == 'n':
                break


    def delete(self):
        #删除信息
        while True:
            no = input('请输入要删除的商品编号:')                
            for gd in self.gdslist[::]:
                if gd.no == no:
                    self.gdslist.remove(gd)
                    print('删除成功')
                    break
            else:
                print('该编号不存在')
            choice = input('继续删除(y/n)?').lower()
            if choice == 'n':
                break


    def update(self):
        #修改信息
        while True:
            no = input('请输入要修改的商品编号:')
            if self.__exists(no):
                for gd in self.gdslist:
                    if gd.no == no:
                        gd.name = input('名称:')
                        gd.salary = int(self.__enterSale('一季度:'))
                        gd.bonus = int(self.__enterSale('二季度:'))
                        gd.tax = int(self.__enterSale('三季度:'))
                        print('修改成功')
                        break
            else:
                print('该编号不存在')
            choice = input('继续修改(y/n)?').lower()
            if choice == 'n':
                break

    def load(self,fn):
        #导入信息
        if os.path.exists(fn):
            try:
                with open(fn,'r',encoding = 'utf-8') as fp:
                    while True:
                        fs = fp.readline().strip('\n')
                        if not fs:
                            break
                        else:
                            gd = Goods(*fs.split(','))
                            if self.__exists(gd.no):
                                print('该编号已存在')
                            else:
                                self.gdslist.append(gd)
                print('导入完毕')
            except:
                print('error...')
        else:
            print('要导入的文件不存在')
        

    def save(self,fn):
        #导出信息
        with open(fn,'w',encoding = 'utf-8') as fp:
            for gd in self.gdslist:
                fp.write(gd.no + ',')
                fp.write(gd.name + ',')
                fp.write(str(gd.first) + ',')
                fp.write(str(gd.second) + ',')                    
                fp.write(str(gd.third) + '\n')                    
            print("导出完毕")

    def sale_avg(self):
        #求平均销量
        length = len(self.gdslist)
        if length > 0:
            first_avg = sum([gd.first for gd in self.gdslist])/length
            second_avg = sum([gd.second for gd in self.gdslist])/length
            third_avg = sum([gd.third for gd in self.gdslist])/length
            print('一季度平均销量是:%.2f'%first_avg)
            print('二季度平均销量是:%.2f'%second_avg)
            print('三季度平均销量是:%.2f'%third_avg)
        else:
            print('尚没有商品销量...')

    def sale_max(self):
        #求最高
        if len(self.gdslist) > 0:
            first_max = max([gd.first for gd in self.gdslist])
            second_max = max([gd.second for gd in self.gdslist])
            third_max = max([gd.third for gd in self.gdslist])
            print('一季度最高销量是:%d'%first_max)
            print('二季度最高销量是:%d'%second_max)
            print('三季度最高销量是:%d'%third_max)
        else:
            print('尚没有商品销量...')

    def sale_min(self):
        #求最低
        if len(self.gdslist) > 0:
            first_min = min([gd.first for gd in self.gdslist])
            second_min = min([gd.second for gd in self.gdslist])
            third_min = min([gd.third for gd in self.gdslist])
            print('一季度最低销量是:%d'%first_min)
            print('二季度最低销量是:%d'%second_min)
            print('三季度最低销量是:%d'%third_min)
        else:
            print('尚没有商品销量...')

    def infoprocess(self):
        #基本信息管理
        print('商品基本信息管理'.center(20,'-'))
        print('load----------导入商品信息')
        print('insert--------添加商品信息')
        print('delete--------删除商品信息')
        print('update--------修改商品信息')
        print('show----------显示商品信息')
        print('save----------导出商品信息')
        print('return--------返回')
        print('-'*28)
        while True:
            s = input('info>').strip().lower()
            if s == 'load':
                fn = input('请输入要导入的文件名:')
                self.load(fn)
            elif s == 'show':
                self.show()
            elif s == 'insert':
                self.insert()
            elif s == 'delete':
                self.delete()
            elif s == 'update':
                self.update()
            elif s == 'save':
                fn = input('请输入要导出的文件名:')
                self.save(fn)
            elif s =='return':
                break
            else:
                print('输入错误')
    
    def saleprocess(self):
        #销量统计
        print('商品销量统计'.center(24,'='))
        print('avg    --------平均销量')
        print('max    --------最高销量')
        print('min    --------最低销量')        
        print('return --------返回')
        print(''.center(30,'='))
        while True:
            s = input('sale>').strip().lower()
            if s == 'avg':                
                self.sale_avg()
            elif s == 'max':                
                self.sale_max()
            elif s == 'min':                
                self.sale_min()
            elif s == 'return':
                break
            else:
                print('输入错误')
                
    def main(self):
        #主控函数               
        while True:
            print('商品信息管理系统V1.0'.center(24,'='))
            print('info  --------商品基本信息管理')
            print('sale  --------商品销量统计')
            print('exit  --------退出系统')
            print(''.center(32,'='))
            s = input('main>').strip().lower()
            if s == 'info':
                self.infoprocess()
            elif s == 'sale':
                self.saleprocess()
            elif s == 'exit':
                break
            else:
                print('输入错误')   
        

if __name__ == '__main__':
    gds = GoodsList()
    gds.main()

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

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

相关文章

Linux下安装Zookeeper教程

ZooKeeper 简介 ZooKeeper是一个分布式的&#xff0c;开放源码的分布式应用程序协调服务&#xff0c;是Google的Chubby一个开源的实现&#xff0c;是Hadoop和Hbase的重要组件。它是一个为分布式应用提供一致性服务的软件&#xff0c;提供的功能包括&#xff1a;配置维护、域名服…

字符串匹配算法(BFRK)

文章目录题目一、BF算法二、RK算法补充题目 有字符串 str1 和 str2 &#xff0c;str1 中是否包含 str2&#xff0c;如果没有包含返回 -1&#xff0c;如果包含&#xff0c;则返回 str2 在 str1 中开始的位置 注&#xff1a;保证 str1 和 str2 字符串的长度大于 0 举例&#x…

k8s-kubeadm安装1.25.5

准备环境&#xff1a; 想体验下新的版本 主机名IP资源k8s-master192.168.1.1912u2G内存20G磁盘k8s-node192.168.1.1922u2G内存20G磁盘 1 修改主机名&#xff0c;配置hosts文件 # 修改主机名 hostnamectl set-hostname k8s-master hostnamectl set-hostname k8s-node # 修改h…

CMMI2.0配置管理工作及访谈学习笔记(续)

1. 配置管理岗位职责 范围&#xff1a;组织级和项目级配置管理管理对象为过程和产品&#xff0c;产品为识别出的配置项建立配置库&#xff1a;为项目建立开发库&#xff08;管理库&#xff09;、基线库&#xff0c;建立配置库结构并分配权限&#xff08;命名规范&#xff09;基…

猿如意中的【DBeaver】工具详情介绍

猿如意中的【DBeaver】工具详情介绍一、工具名称二、下载安装渠道2.1 什么是猿如意&#xff1f;2.2 如何下载猿如意&#xff1f;2.3 如何在猿如意中下载开发工具&#xff1f;三、工具介绍四、DBeaver功能介绍五、软件截图六、DBeaver安装过程6.1 在猿如意中下载DBeaver6.2 选择…

道路裂缝坑洼图像开源数据集汇总

CrackForest数据集 数据集下载链接&#xff1a;http://suo.nz/2wdNdX CrackForest数据集是一个带注释的道路裂缝图像数据库&#xff0c;可以大致反映城市路面状况。 道路裂缝坑洼图像数据集 数据集下载链接&#xff1a;http://suo.nz/3eEDlj 这个数据集是一个极具挑战性的集…

67、INGeo:利用占用网格先验加速/减少迭代次数

简介 论文地址&#xff1a;INGeo: Accelerating Instant Neural Scene Reconstruction with Noisy Geometry Priors 首先我们知道Instant-ngp利用最先进的射线推进技术&#xff08;指数步进、空白跳过、样本压缩&#xff09;实现密集网格自剪枝的采样策略&#xff0c;这种采样…

代码随想录训练营第48天|LeetCode 198.打家劫舍、213.打家劫舍II、 337.打家劫舍III

参考 代码随想录 题目一&#xff1a;LeetCode 198.打家劫舍 确定dp数组下标及其含义 dp[i]&#xff1a;考虑下标i&#xff08;包括i&#xff09;以内的房屋&#xff0c;可以偷窃的最大金额为dp[i]。确定递推公式 如果当前的第i个房间不偷&#xff0c;那么dp[i] dp[i-1].如…

干货收藏 |关键词优化攻略!(附11款关键词检索工具)

关键字搜索是买家查找产品的方式&#xff0c;一个高质量的关键词可以帮助卖家快速增加曝光率。简而言之&#xff0c;利用好关键词机理&#xff0c;能让我们的产品产生更有利的排名因素。 那如何找到合适的关键字&#xff0c;设置关键字时应该注意什么&#xff1f; 今天从产品的…

libcrypto-1_1.dll丢失,要怎么处理?

一般出现这个libcrypto-1_1.dll丢失的问题&#xff0c;我看绝大部分都是出在刺客信条这边的人&#xff0c;很多人吐槽 在运行刺客信条3游戏的时候遇到提示缺少libcef.dll文件的问题。其实遇到这问题还是比较好解决的。 libcrypto-1_1.dll丢失的处理方法 第一种&#xff0c;首…

云存储--1

背景 这一板块主要是讲诉云计算中的存储板块。 那么云存储主要分为三大类&#xff1a;块存储、文件存储、对象存储。 那么&#xff0c;这一章我们来了解一下什么是块存储&#xff0c;以及块存储在云计算当中的使用场景。 1、 什么是块存储&#xff1f; 我们来思考一个场景&a…

Spring Boot集成MyBatis

1.整合Durid数据源 1、引入Jar包 2.application.yml配置 3.读取配置类DruidConfig 总结&#xff1a;其实没有必要一个个手动去配置&#xff0c; druid 启动starter druid 自动配置类 2.整合MyBatis 2.1生成MyBatis代码: pom.xml generatorConfig.xml 运行插件—…

java计算机毕业设计ssm余庆金阳驾校管理系统75wh9(附源码、数据库)

java计算机毕业设计ssm余庆金阳驾校管理系统75wh9&#xff08;附源码、数据库&#xff09; 项目运行 环境配置&#xff1a; Jdk1.8 Tomcat8.5 Mysql HBuilderX&#xff08;Webstorm也行&#xff09; Eclispe&#xff08;IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持&#…

看完这篇,轻松编写Markdown

攻城狮为什么要会Markdown Markdown是什么 Markdown是一种轻量级标记语言&#xff0c;创始人为约翰格鲁伯&#xff08;John Gruber&#xff09;。它允许人们使用易读易写的纯文本格式编写文档&#xff0c;然后转换成有效的 XHTML&#xff08;或者HTML&#xff09;文档。这种语…

【网络攻防】Linux提权(待更)

Linux提权 文章目录Linux提权1.利用suid提权&#xff08;1&#xff09;如何设置suid&#xff08;2&#xff09;如何找到设置了suid的程序&#xff08;3&#xff09; suid提权2.利用环境变量提权&#xff08;1&#xff09;创建拥有 suid 权限的程序&#xff08;2&#xff09;劫持…

vue innerHTML 绑定单击事件不生效

在使用 vue时候对 innerHTML进行绑定单击事件&#xff0c;绑定后事件不生效 原代码 div.innerHTML "<el-button sizemini typetext clickhandleUpdate1("JSON.stringify(warnCntItem)") stylecolor: #f56c6c> "warnCntItem.warnCnt"</el-b…

【云计算与大数据技术】分布式协同系统Chubby锁、ZooKeeper在HDFS中的使用讲解(图文解释 超详细)

阿里云Kuafa RPC系统 夸父(Kuafu)是飞天平台内核中负责网络通信的模块&#xff0c;它提供了一 个 RPC 的接口 , 简化编写基于网络的分布式应用 夸父的设计目标是提供高可用(724小时)、大吞吐量(Gigabyte)、高效率、易用(简明 API、多种协议和编程接口)的 RPC服务 Hadoop IPC…

【软件测试】资深测试的建议。初入测试行的小伙伴,准备起航吧......

目录&#xff1a;导读前言一、Python编程入门到精通二、接口自动化项目实战三、Web自动化项目实战四、App自动化项目实战五、一线大厂简历六、测试开发DevOps体系七、常用自动化测试工具八、JMeter性能测试九、总结&#xff08;尾部小惊喜&#xff09;前言 大部分初级的岗位&a…

Java面试题总结-抽象类和接口的区别

抽象类是用来捕捉子类的通用特性的。接口是抽象方法的集合。 从设计层面来说&#xff0c;抽象类是对类的抽象&#xff0c;是一种模板设计&#xff0c;接口是行为的抽象&#xff0c;是一种行为的规范。 想要了解抽象类和接口的区别&#xff0c;我们首先要想清楚抽象类和接口的相…

Word控件Spire.Doc 【超链接】教程(3):在C#中查找word文档中的超链接

Spire.Doc for .NET是一款专门对 Word 文档进行操作的 .NET 类库。在于帮助开发人员无需安装 Microsoft Word情况下&#xff0c;轻松快捷高效地创建、编辑、转换和打印 Microsoft Word 文档。拥有近10年专业开发经验Spire系列办公文档开发工具&#xff0c;专注于创建、编辑、转…