精华内容
下载资源
问答
  • 2020-03-03 23:40:39

    注意:在Linux环境运行

    代码

    #!/usr/bin/env python
    # -*- coding:utf-8 -*-
    # @FileName  :store_system.py
    # @Time      :2020/3/3 23:10
    # @Author    :anqixiang
    # @Function  :模拟仓库管理系统
    '''
    1.商品清单保存在/opt/shop_info.txt文件中
    2.可以查看、增加、删除商品和修改商品价格
    3.在任何位置输入b返回上级菜单,输入q退出
    '''
    import os
    from subprocess import run
    
    #输出颜色
    def cecho(num,content):
        print('\033[%sm%s\033[0m' %(num, content))
    
    #选b返回上一层,选q退出
    def choice_action(action):
        while action != "b":
            if action == "q":
                exit(0)
            else:
                break
        return action
    
    #展示商品
    def view_shop(file_name):
        commodity = []              #所有商品保存到该列表
        if not os.path.isfile(file_name):
            os.mknod(file_name)
        else:
            with open(file_name, 'r') as file:
                for each in file:
                    commodity.append(each.splitlines())
        if len(commodity) == 0:
            cecho(35, "货仓空空如也,请速速添加商品!")
            #打印商品信息
        else:
            print('%-10s%-8s%-12s' % ('序号', '名字', '价格'))
            for index, value in enumerate(commodity):
                alist = value[0].split(":")         #把字符串转成列表,以“:”分割
                print('%-12s%-10s%-8s' % (index + 1, alist[0], alist[1]))
        return commodity
    
    #增加商品,每增加一个就保存到文件
    def add_shop(file_name):
        while True:
            add_dict = {}
            shop_name = input(">>>输入商品名:").strip()
            if choice_action(shop_name) == "b":
                break
            shop_price = input(">>>输入商品价格(元):").strip()
            if choice_action(shop_price) == "b":
                break
            elif shop_price.isdigit():
                add_dict[shop_name] = shop_price        #商品名作key,价格作值,存入字典
                for i in add_dict:
                    with open(file_name, 'a+')as file:
                        file.write('%s:%s\n' % (i, add_dict[i]))
                        print("\033[92m%s存入成功\033[0m" % shop_name)
                    view_shop(file_name)
            else:
                cecho(31, "Invalid Option")
    
    #删除商品
    def del_shop(file_name):
        menu_info = "商品清单"
        print(menu_info.center(26,'-'))
        commodity = view_shop(file_name)
        while True:
            del_num = input(">>>商品序号:").strip()
            if choice_action(del_num) == "b":
                break
            elif del_num.isdigit():
                del_num = int(del_num)
                rc = run("sed -i '/%s/d' %s" % (commodity[del_num-1][0], file_name), shell=True)
                if not rc.returncode:
                    cecho(92, "删除成功")
                else:
                    cecho(31,"删除失败")
                view_shop(file_name)
            else:
                cecho(31, "Invalid Option")
    
    #修改商品价格
    def update_price(file_name):
        menu_info = "商品清单"
        print(menu_info.center(26,'-'))
        commodity = view_shop(file_name)
        while True:
            update_num = input(">>>商品序号:").strip()
            if choice_action(update_num) == "b":
                break
            elif update_num.isdigit():
                update_num = int(update_num)
            else:
                cecho(31, "Invalid Option")
    
            new_price = input(">>>新的价格(元):").strip()
            if choice_action(new_price) == "b":
                break
            elif new_price.isdigit():
                new_price = int(new_price)
                alist = commodity[update_num-1][0].split(':')   #将商品名和价格转成一个列表,如['coffee', '30']
                alist[1] = new_price        #修改价格
                rc = run("sed -i '/%s/c %s:%s' %s" % (alist[0], alist[0], alist[1], file_name), shell=True)
                if not rc.returncode:
                    cecho(92, "修改成功")
                else:
                    cecho(31,"修改失败")
                view_shop(file_name)
            else:
                cecho(31, "Invalid Option")
    
    #主程序
    def show_menu():
        cmds = {'0': view_shop, '1': add_shop, '2': del_shop, '3': update_price}
        prompt = '''(0)查看商品信息
    (1)增加商品
    (2)删除商品
    (3)修改商品价格
    (b)返回上级菜单
    (q)退出
    输入(0/1/2/3/b/q):'''
        fname='/opt/shop_info.txt'      #保存商品信息
        while True:
            choice = input(prompt).strip()
            if choice not in '0123bq':
                cecho(31, "Invalid Option")
            elif choice_action(choice) == "b":
                cecho(31, "已经是第一级菜单")
            else:
                cmds[choice](fname)
    
    if __name__ == "__main__":
        try:
            show_menu()
        except KeyboardInterrupt as e:
            print()
            cecho(31, "非正常退出,请下次输入字母q进行退出!")
    

    效果图

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

    更多相关内容
  • 仓库管理程序文件.doc

    2021-10-12 10:29:07
    仓库管理程序文件.doc
  • 仓库管理制度与仓库管理程序文件.doc
  • 仓库管理程序文件仓库保管员工作制度,货物仓储规范.doc
  • 生产企业仓库管理程序文件收发料与成品出入库工作流程.zip
  • 仓库管理控制程序DOC

    2020-12-15 20:09:52
    这是一款整理发布的仓库管理控制程序DOC,适用于学习、借鉴、参考仓库管理控制程序DOC,欢迎大...该文档为仓库管理控制程序DOC,是一份很不错的参考资料,具有较高参考价值,感兴趣的可以下载看看
  • 仓库物料先进先出管理程序文件.doc
  • 仓库管理控制程序文件.doc
  • 公司物流管理仓库标准操作程序文件.doc
  • 内容索引:VB源码,数据库应用,仓库,管理系统 ACCP仓库管理程序VB+SQL2000版,请先附加SQL2000数据库文件,否则编译出错。主窗口菜单主要有系统管理、基本信息管理、入库管理、销售管理、统计查询、盘点结算、商品...
  • 仓库管理系统 v1.0

    2020-10-08 07:32:54
    数据库文件可以直接导入,数据库配置文件index.php,请在导入前建立好数据库文件夹cangku。 本程序是梦想瞬智网络科技采用MVC模式、ACL权限控制。是一个开源的PHP+MYSQL仓库货舱管理系统
  • 仓库管理系统.rar

    2019-08-23 21:34:26
    开源部分是仓库系统后台管理系统, 在给客户实施的过程中利用到了很多硬件设备, 设计到Wince系统,Android系统等PDA设备,各种打印机,条码打印机,感应设备等,而且这些可能在整个项目中占据主导,而后台管理系统只是...
  • 编写一个程序管理仓库的货物,系统能实现以下功能: 输入信息:产品信息的输入; 修改信息:对产品信息进行添加、删除与修改; 查询:能够根据产品号或产品名查询某个产品的信息; 输出:输出所有产品信息或查询...
  • 仓库管理系统 c++

    2017-04-14 21:14:23
    这是用c++来实现的仓库管理系统 ,有文件的输入与输出, 用户的登录与注册 等功能。用类思想来封装
  • 这是一个文件管理器,具有漂亮且易于使用的用户界面,可让您根据类别和标签分离文件。 主要隔离是基于类别完成的,您可以向每个文件添加标签。 之后,您可以根据文件名或标签进行搜索。 此应用程序实际上不会创建...
  • 这是一个开源的仓库管理系统。 特征 产品注册(品牌、类型...) 登记、删除储藏室 客户的注册、更新和删除 客户特定的折扣百分比 每个储藏室中每种产品的数量 所有产品、总数量和它们存在的储藏室的汇总表 基于产品...
  • 开源部分是仓库系统后台管理系统, 在给客户实施的过程中利用到了很多硬件设备, 设计到Wince系统,Android系统等PDA设备,各种打印机,条码打印机,感应设备等,而且这些可能在整个项目中占据主导,而后台管理系统只是...
  • VC 开发的仓库管理系统,Access数据库 源代码,此程序源码是VC 数据库系统开发实例导航中的一个随书实例,功能不太多,仅完成数据资料的添加和修改等,目的在于学习VC 操作Access数据库的技巧,烈火网提示:在调试...
  • 今年的毕业设计,附带源程序,数据库文件和环境说明文档,可以用来做毕业设计或者课程设计
  • php+mysql仓库管理系统

    2018-10-16 17:45:39
     程序在美工方面实在是很难看,可是请见谅,没有太多精力去弄,功能都完成了。 数据库文件可以直接导入,数据库配置文件index.php,请在导入前建立好数据库文件夹cangku。  如用于商业,造成任何损失,请自行...
  • java仓库管理系统源码项目蒙德里安服务器 该项目捆绑并紧密集成了 、Mondrian XMLA 服务器和一个独立且易于配置的 war 文件。 它允许在同一个数据源上运行 Saiku 和基于外部 XMLA 的报告前端。 如果您使用 Python,...
  • 仓库管理员 描述 大学项目。 目标是创建一个处理 XML 文件的 java 程序。 它接受一种公司类型的 .xml 配置文件,然后根据公司文件中的给定操作在逗号分隔值文件 (.csv) 上打印出所需的输出。 怎么跑 在命令行中,...
  • 配置与管理文件系统

    千次阅读 2022-04-16 19:00:24
    4.理解文件文件权限 4.1文件类型权限 4.2连接 4.3拥有者 4.4所属群组 4.5文件容量,默认单位 4.6修改日期 4.7文档名 5.使用数字表示法修改权限 5.1改变权限 chmod 5.2使用文字表示法修改权限

    目录

    1.全面理解文件系统与目录

    1.1认识文件系统

    1.2常见的文件系统

    1.3文件系统的特性

    1.4 inode table

    2.理解Linux文件系统目录结构

    2.1 Linux系统中常见的目录名称及相应内容

    3.理解绝对路径与相对路径

    4.理解文件和文件权限

    4.1文件类型权限

    4.2连接

    4.3拥有者

    4.4所属群组

    4.5文件容量,默认单位

    4.6修改日期

    4.7文档名

    5.使用数字表示法修改权限

    5.1改变权限 chmod

    5.2使用文字表示法修改权限

    5.3权限对文件的重要性

    5.4权限对目录的重要性

    6.文件与目录的默认权限与隐藏权限

    6.1文件预设权限 umask

    6.2 umask 的利用与重要性:专题制作

    6.3文件隐藏属性

    6.4lsattr 显示文件因此属性


    1.全面理解文件系统与目录

    1.1认识文件系统

    文件系统是磁盘上特定格式的一片区域,操作系统利用文件系统保存和管理文件,用户在硬件储存设备中执行的文件建立、写入、读取、修改、转存与控制等操作都是依靠文件系统来完成的。文件系统的作用是合理规划硬盘,以保证用户正常的的使用需求。

    1.2常见的文件系统

    不同文件系统采用不同的方法来管理磁盘空间,各有优劣;文件系统是具体到分区的,所以格式化针对的是分区,分区格式化是指采用指定的文件系统类型对分区空间进行登记、索引并建立相应的管理表格的过程。Windows中的NTFS,FAT32。linux中的EXT2,EXT3,EXT4等。

    • ext2:具有极快的速度和极小的CPU占用率,可用于硬盘和移动存储设备
    • ext3:是一款日志式文件系统,增加日志功能,可回溯追踪
    • ext4:支持1EB(1024*1024TB),最大单文件16TB,支持连续写入可减少文件碎片。rhel6默认文件系统
    • xfs:是一种高性能的日志文件系统,可以管理500T的硬盘。rhel7默认文件系统

    1.3文件系统的特性

    • 传统的磁盘与文件系统之应用中,一个分区槽只能被格式化为一个文件系统, 所以我们可以称之为说一个 filesystem 就是一个 partition。 新技术的出现,如 LVM 与 软件磁盘阵列(software raid),这些技术可以将一个分区槽格式化 为多个文件系统(如 LVM),也可以将多个分区槽合并成一个文件系统(LVM、RAID)。 所以目前在格式化时已经不再说成针对 partition 来格式化了,通常我们可以称呼 一个可被挂载的数据为一个文件系统而不是一个分区槽
    • 文件系统的运作与操作系统的文件数据有关。较新的操作系统的文件数据除了文件实际内容外, 通常有非常多的属性(例如 linux 的 rwx 群组等)。

    文件系统通常会将这两部分数据分别存放在不同的区块:

    假设 inode 4 中记录了 2、7、13、15 这 4 个 block 的号码,操作系统就能够依据此来排列磁盘的阅读顺序,可以一口气将 4 个 block 内容读出来。

    这种数据存取方法称为「索引式文件系统(indexed allocation)。那么一般使用的 U 盘, 通常为 FAT 格式,这种文件系统没有 inode 存在,所以没法讲这个文件的所有 block 在一开始就读取出来。每个 block 号码都记录在前一个 block 中,读取方式如下图所示

    它只能一个一个将 blcok 读出来后,才会知道下一个 block 在哪里。如果同一个文件数据写入的 block 分散太过厉害,则磁盘读取头可能需要多转好几圈才能读完整个文件内容

    磁盘碎片 整理就是如此,文件写入的 block 太过于离散了,此时文件读取的效能将会变得很差。可以通过磁盘碎片整理程序将同一个文件所属的 blocks 汇总在一起,这样读取会比较容易。

    1.4 inode table

    inode 记录文件的属性和实际数据的 block 号码,基本上记录的文件信息至少有以下:

    • 该文件存取模式(read、write、excute)
    • 文件拥有者与群组(owner、group)
    • 文件的容量
    • 文件建立或状态改变实际(ctime)
    • 最近一次的读取实际(atime)
    • 最近修改的时间(mtime)
    • 定义文件特性的旗标(flag),如 SetUID 等
    • 该文件真正内容的指向(pointer)

    inode 的数量与大小在格式化时以及固定,还有以下特点:

    • 每个 inode 大小均固定为 128 bytes(新的 ext4 与 xfs 可设定到 256 bytes
    • 每个文件仅会占用一个 inode
    • 因此文件系统能建立的文件数量与 inode 的数量有关
    • 系统读取文件时需要先找到 inode,并分析 inode 所记录的权限与用户是否符合,符合才会读取 block 的内容

    2.理解Linux文件系统目录结构

    • 有一块硬盘分成了四个分区,分别是/、/boot、/usr和Windows下的FAT,对于/和/boot或者/和/usr,它们是从属关系;对于/boot和/usr,它们是并列关系。
    • 如果把Windows下的FAT分区挂载到/mnt/winc下,那么对于/mnt/winc和/usr或/mnt/winc和/boot来说,它们是从属于目录树上没有任何关系的分支。
    • 因为Linux是一个多用户系统,所以要定制一个固定的目录规划,这样有助于对系统文件和不同的用户文件进行统一管理,但就是这一点让很多从Windows转到Linux的初学者感到头痛。

    2.1 Linux系统中常见的目录名称及相应内容

    • /:根目录。
    • /bin:存放必要的命令。
    • /boot:存放内核以及启动所需的文件。
    • /dev:存放设备文件。
    • /etc:存放系统配置文件。
    • /home:普通用户的宿主目录,用户数据存放在其主目录中。
    • /lib:存放必要的运行库。
    • /mnt:存放临时的映射文件系统,通常用来挂载。
    • /proc:存放存储进程和系统信息。
    • /root:超级用户的主目录
    • /sbin:存放系统管理程序
    • /tmp:存放临时文件。
    • /usr:存放应用程序、命令程序文件、程序库、手册和其他文档。
    • /var:在正常操作中被改变的文件。

    3.理解绝对路径与相对路径

    • 绝对路径:从根目录开始直到文件位置
    • 相对路径:相对于程序当前所在目录到文件位置

    例:程序运行在C:/user/admin下,假设有一个文件file.txt

    绝对路径:C:/user/admin/file.txt

    相对路径:./file.txt

    • ./ :代表文件所在的目录(可以省略不写)
    • …/ :代表文件所在的父级目录
    • …/…/ :代表文件所在的父级目录的父级目录
    • / :代表文件所在的根目录

    4.理解文件和文件权限

    4.1文件类型权限

    文件类型

    • d:表示目录
    • -:文件
    • l:连接文档(link file)
    • b:装置文件里面的可供存储的接口设备(可随机存取装置)
    • c:装置文件里面的串行端口设备、例如键盘、鼠标(一次性读取装置)

    接下来就是三个为一组的「rwx」

    • r 代表刻度 read、
    • w 可写 write、
    • x 可执行 execute,如果没有则使用横线占位

    第一组:文件拥有者的权限;

    -rw-r--r--:就表示可读写,但是不可执行

    第二组:加入此群组之账户的权限

    第三组:非本人且没有加入本群组之其他账户的权限

    4.2连接

    • 表示有多少文档名连接到此节点(i-node)
    • 每个文件都会将他的权限与数学记录到文件系统的 i-node 中,不过这里使用的目录树是使用文件名来记录, 因此每个文档名就会连接到一个 i-node,关于 i-node 后续会讲解

    4.3拥有者

    该文档(或目录)属于谁

    4.4所属群组

    该文档属于哪个组

    4.5文件容量,默认单位

     bytes

    4.6修改日期

    这个文件的建档日期或则是最佳的修改日期

    如果想显示完整的日期时间格式,可以利用 ls 的选项,ls -l --full-time

    4.7文档名

    特殊是 一个点 .,表示隐藏文件,至于更多的用法,自行查看 ls --help 或则 man ls 或 info ls 等文档.

    5.使用数字表示法修改权限

    5.1改变权限 chmod

    chmod 指令改变权限有两种形式,一种使用数字,一种使用符号

    数字类型改变文件权限

    • r = 4
    • w = 2
    • x = 1

    每种身份 owner、group、others 各自的三个权限 r、w、x 分数是需要累加的, 例如权限是 -rwxrwx--- ,那么分数为:

    • owner:rwx = 4 + 2 + 1 = 7
    • group:rwx = 4 + 2 + 1 = 7
    • ohters:--- = 0 + 0 + 0= 0

    语法为:

    常用权限数值:

    • -rw-rw-r-- 664 :一般文件,可读可写无执行
    • -rwxr-x-r-x 755:shell 脚本文件,拥有者可读写执行,其他的都只能可读可执行,不可编辑
    • -rwxr------ 740:不希望该文件被其他人看到(能看到文件,但是不能读取里面的内容)

    修改示例就是 chmod 740 text.txt

    5.2使用文字表示法修改权限

    权限分三组:

    • u:user,表示所有者。
    • g:group,表示属组。
    • o:other,表示其他用户。
    • a:all。表示以上3种用户。

    5.3权限对文件的重要性

    文件是实际含有数据的地方,包括一般文件、数据库文件、二进制可执行文件(binary program)等, 因此,权限对于文件来说,意义是:

    • r(read):可读取此文件的实际内容
    • w(write):可以修改文件内容,但是不能删除
    • x(execute):该文件具有可以被系统执行的权限

    x 怎么理解呢?在 windows 中一个文件是否具有执行的能力是由扩展名来判断的,如 .ext、.bat 等, 在 linux 下就靠这个 x 来决定,根文档名没有关系

    5.4权限对目录的重要性

    目录主要的内容在记录文件名列表,文件名有目录有强烈的关联,rwx 对目录的意义如下

    • r(read contents in directory)

    具有读取目录结构列表的权限,使用 ls 这指令就可以将该目录的内容列表显示出来

    • w(modify contents of directory)

    表示你具有异动该目录结构列表的权限:

    • 建立新的文件与目录
    • 删除已存在的文件与目录(不论该文件的权限为何)
    • 将以存在的文件或目录进行更名
    • 搬移该目录内的文件、目录位置

    6.文件与目录的默认权限与隐藏权限

    6.1文件预设权限 umask

    umask:指定目前用户在建立文件或目录时候的默认权限

    在数值形态下有 4 组,第一组是特殊权限用的,先不看,因此预设情况如下:

    文件

    没有可执行(x)权限、只有 rw 两个项目,也就是最大为 666 分 -rw-rw-rw-

    目录

    由于 x 与是否可以进入此目录有关,因此默认所有权限均开发,即 777 分 drwxrwxrwx

    6.2 umask 的利用与重要性:专题制作

    你和你同学在同一个目录下 /home/class 合作一个专题,那么有没有可能你制作的文件,

    如果 umask 设置为 0022 ,那么相当于 group 默认创建只有 r 属性,除了拥有者, 其他人只能读,不能写。所以需要修改 umask 的值

    TIP

    • umask 对于新建文件与目录的默认权限很重要,这个概念可以用在任何服务器上面, 尤其是未来假设文件服务器(file server),如 SAMBA Server 或则是 FTP server 时, 牵涉到你的使用者是否能够将文件进一步利用的问题
    • 原来在预设的情况下,身份不同默认值也是不同的,root 的 umask 默认是 022,一般账户是 002。 关于预设设定可以参考 /etc/bashrc 这个文件的内容,不过这里不建议修改该文件。

    6.3文件隐藏属性

    chattr 配置文件隐藏属性

    强调:在 ext2/3/4 中完全支持,而在 xfs 上部分支持

    • +:增加一个特殊参数,其他参数不变
    • -:移除一个特殊参数
    • =:设定为后面接的参数
    • A:若有存取此文件/目录时,它的访问时间 atime 将不会被修改
    • S:对文件的修改变成同步写入磁盘中,一般默认是异步写入(前面章节讲到过 sync)
    • a:该问价只能增加数据,不能删除也不能修改数据,只有 root 才能设置该属性
    • c:自动将此文件压缩,在读取的时候也将会自动解压缩,但是在存储的时候,会先压缩后再存储(对大文件似乎有用)
    • d:当 dump 程序被执行的时候,可使该标记的文件或目录不被 dump 备份
    • i:让文件不能被删除、改名、设置连接、写入或新增数据,完完全全就是只读文件了。只有 root 能设置该属性
    • s:当文件被删除时,将会被完全的移除这个硬盘空间,所以如果误删,就找不回来了
    • u:与 s 相反,删除后,其实数据还在磁盘中,可以用来救援该文件

    注意:

    • 属性设置常见的是 a 与 i 的设置,而且很多设置值必须要 root
    • xfs 文件系统仅支持 AadiS 选项

    • i:无法被更动
    • a:不能修改旧的数据,只能新增

    6.4lsattr 显示文件因此属性

    语法: lsattr [-adR] 文件或目录

    • a:将隐藏文件的属性也秀出来
    • d:如果接的是目录,仅列出目录本身的属性而非目录内的文件名
    • R:连同子目录的数据也列出来

    例如:

    展开全文
  • 今年的毕业设计,附带源程序,数据库文件和环境说明文档,可以用来做毕业设计或者课程设计

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 163,212
精华内容 65,284
关键字:

仓库管理程序文件