欢迎光临
古之立大事者,不惟有超世之才,亦必有坚忍不拔之志。——苏轼
---------------🍎------------🍉--------------
🐼学编程的bird的博客,邀您一起学习🦌
----------------🥕------------🥭-------------😊很高兴你打开了这篇博客。
★如有疑问不解或者说有想问的地方,都可以在下方评论留言,博主看到会尽快回复的。
★当然,期待你的点赞+关注哦!
————————————————
版权声明:本文为CSDN博主「学编程的bird」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:
————————————————
版权声明:本文为CSDN博主「学编程的小bird」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/m0_64069699/article/details/125065247
目录
内容描述
【设计目的】
- 更好地掌握使用Python进行程序设计的方法,加深对Python特点和使用Python进行程序设计开发过程的理解,加强动手能力。
- 基本掌握面向对象程序设计的基本思路和方法能够利用所学的基本知识和技能,解决简单的面向对象程序设计问题。
……………………………………..
【设计内容】
1、 超市管理系统
超市中商品分为四类,分别是食品、化妆品、日用品和饮料。每种商品都包含商品名称、价格、库存量和生产厂家、品牌等信息。主要完成对商品的销售、统计和简单管理。本系统的软件界面是使用Python编译生成的一个系统操作菜单。操作菜单界面总共有七个选项可以供用户操作选择,分别为购买商品、添加商品、删除商品、修改商品、查询商品、统计商品、退出系统。菜单页面下方有可供用户选择操作项目的指令,当用户选择并输入0-6中的任意数字,系统便会进入相应的功能操作。如果出现错误操作,系统会该处输入错误请从新输入等提示或者自动跳出回到主菜单界面。
2、 相关功能
(1)销售功能。购买商品时,先输入类别,然后输入商品名称,并在库存中查找该商品的相关信息。如果有库存量,输入购买的数量,进行相应计算。如果库存量不够,给出提示信息,结束购买。
(2)商品简单管理功能。
添加功能:主要完成商品信息的添加。
查询功能:可按商品类别、商品名称、生产厂家进行查询。若存在相应信息,输出所查询的信息,若不存在该记录,则提示“该记录不存在!”。
修改功能:可根据查询结果对相应的记录进行修改。
删除功能:主要完成商品信息的删除。先输入商品类别,再输入要删除的商品名称,根据查询结果删除该物品的记录,如果该商品不在物品库中,则提示“该商品不存在”。
(3)统计功能。
输出当前库存中所有商品的总数及详细信息;可按商品的价格、库存量、生产厂家进行统计,输出统计信息时,要按从大到小排序。
………………………………….
【实验环境】
1、硬件环境(描述开发所用的机器型号及内存配置)
设备机型 火影T5A笔记本
处理器 AMD Ryzen 5 4600H with Radeon Graphics 3.00 GHz
机带 RAM 16.0 GB (15.4 GB 可用)
设备 ID 07D5D119-DB93-4861-B2B3-786278B7AA97
产品 ID 00331-10000-00001-AA726
笔和触控 没有可用于此显示器的笔或触控输入
2、软件环境(详细描述所用操作系统及开发工具)
系统类型 64 位操作系统, 基于 x64 的处理器
开发工具 Visual Studio 2022
源码展示
import sys
from tkinter import *
class Goods:
def __init__(self, kind, name, band, place, amount, cost, price, ):
self.kind = kind
self.name = name
self.band = band
self.place = place
self.amount = amount
self.cost = cost
self.price = price
def info(self):
# 字符串的拼接
goods = self.kind + ' \t' + self.name + '\t ' + self.band + '\t' + self.place + '\t ' + self.amount + '\t ' + self.price + '\t' + self.cost + ''
return goods
def my_menu():
print(" ")
print(" ")
print(" ")
print(" ")
print(" ☆ ☆ ☆ ☆ ☆ ☆ ☆ ☆ 超 市 管 理 系 统 ☆ ☆ ☆ ☆ ☆ ☆ ☆ ☆")
print(" ")
print(" ")
print(" ************* 1.增添商品 ************* ")
print(" ")
print(" ************* 2.统计商品 ************* ")
print(" ")
print(" ************* 3.查询商品 ************* ")
print(" ")
print(" ************* 4.删除商品 ************* ")
print(" ")
print(" ************* 5.修改商品 ************* ")
print(" ")
print(" ************* 6.购买商品 ************* ")
print(" ")
print(" ************* 0.退出系统 ************* ")
def change_menu():
print(" ************* 1.修改种类 ************* ")
print(" ")
print(" ************* 2.修改名字 ************* ")
print(" ")
print(" ************* 3.修改数量 ************* ")
print(" ")
print(" ************* 4.修改品牌 ************* ")
print(" ")
print(" ************* 5.修改产地 ************* ")
print(" ")
print(" ************* 6.修改进价 ************* ")
print(" ")
print(" ************* 7.修改售价 ************* ")
print(" ")
print(" ************* 8.全部信息 ************* ")
print(" ")
def add():
while True:
print('可输入的商品种类有:水果、日用品、饮料')
with open('supermarket.txt', 'a') as f:
kind = input('请输入商品的种类:')
name = input('请输入商品的名称:')
band = input('请输入商品的品牌: ')
place = input('请输入商品的产地: ')
amount = input('请输入商品的数量:')
cost = input('请输入商品的进价:')
price = input('请输入商品的售价:')
goods = Goods(kind, name, band, place, amount, cost, price)
f.write('\n')
f.write(goods.info())
a = input('是否继续增加商品?(输入1继续,输入2返回菜单)')
if a == '1':
continue
else:
break
def view():
while True:
with open("supermarket.txt", 'r') as f:
lines = f.readlines()
for line in lines:
print(line)
a = input('提示:输入‘2’返回菜单\n')
if a == '2':
break
def delete():
while True:
discard = input("输入你想删除的商品:")
with open('supermarket.txt', 'r+') as f:
lines = f.readlines()
f.seek(0)
for line in lines:
if discard not in line:
f.write(line)
f.truncate()
print('删除成功')
a = input('提示:输入‘2’返回菜单\n')
if a == '2':
break
def revise():
while True:
print('\n')
change_menu()
name = input("请输入你想要修改的商品: ")
with open('supermarket.txt', 'r+') as f:
lines = f.readlines()
f.seek(0)
for line in lines:
if name in line:
list1 = line.split()
x = int(input('请输入对应功能的数字:'))
match x:
case 1:
old_info = list1[0]
new_info = input("请输入修改后的信息: ")
line = line.replace(old_info, new_info)
case 2:
old_info = list1[1]
new_info = input("请输入修改后的信息: ")
line = line.replace(old_info, new_info)
case 3:
old_info = list1[2]
new_info = input("请输入修改后的信息: ")
line = line.replace(old_info, new_info)
case 4:
old_info = list1[3]
new_info = input("请输入修改后的信息: ")
line = line.replace(old_info, new_info)
case 5:
old_info = list1[4]
new_info = input("请输入修改后的信息: ")
line = line.replace(old_info, new_info)
case 6:
old_info = list1[5]
new_info = input("请输入修改后的信息: ")
line = line.replace(old_info, new_info)
case 7:
old_info = list1[6]
new_info = input("请输入修改后的信息: ")
line = line.replace(old_info, new_info)
case 8:
print('种类,名称,品牌,产地,数量,进价,售价')
for i in range(7):
old_info = list1[i]
new_info = input("请输入修改后的信息: ")
line = line.replace(old_info, new_info)
print('修改成功')
f.write(line)
else:
f.write(line)
f.truncate()
a = input('提示:输入‘2’返回菜单\n')
if a == '2':
break
def research():
while True:
search = input("请输入你想要查询的商品名称: ")
with open("supermarket.txt", 'r') as f:
lines = f.readlines()
for line in lines:
if search in line:
print(line)
a = input('提示:输入‘2’返回菜单\n')
if a == '2':
break
def purchase():
while True:
name = input('请输入你想购买的商品:')
with open('supermarket.txt', 'r+') as f:
lines = f.readlines()
f.seek(0)
for line in lines:
if name in line:
amount = int(input('请输入你想购买的数量:'))
old_info = line.split("\t")[4]
new_info = int(line.split("\t")[4]) - amount
line = line.replace(old_info, str(new_info))
f.write(line)
else:
f.write(line)
f.truncate()
print('一共花费:', (int(line.split("\t")[6]) * amount))
a = input('提示:输入‘2’返回菜单\n')
if a == '2':
break
def main():
while True:
my_menu()
print('\n')
x = int(input("请输入功能对应的数字:"))
match x:
case 0:
sys.exit()
case 1:
add()
case 2:
view()
case 3:
research()
case 4:
delete()
case 5:
revise()
case 6:
purchase()
case _:
print("输入有错,请重新输入")
# 如果有需要可以使用下面的密码锁功能,账号密码默认为: xxy 521
# def login_view():
# # 设置登录窗口
# win = Tk()
# win.title('登陆')
# win.geometry('300x150')
# win.resizable(0, 0)
# # 设置账号
# Label(text='账号:').place(x=50, y=30)
# uname = Entry(win)
# uname.place(x=100, y=30)
# # 设置密码
# Label(text='密码:').place(x=50, y=70)
# pwd = Entry(win)
# pwd.place(x=100, y=70)
#
# # 登陆
# def login():
# username = uname.get()
# password = pwd.get()
# if username == 'xxy' and password == '521':
# print('登陆成功')
# main()
# else:
# print('账号或者密码错误')
#
# # 登陆按钮
# Button(text='登陆', command=login).place(x=100, y=110)
# win.mainloop()
# if __name__ == '__main__':
# login_view()
if __name__ == '__main__':
main()
设计中使用函数说明
1、登录窗口
from tkinter import * def login_view(): # 设置登录窗口 win = Tk() win.title('登陆') win.geometry('300x150') win.resizable(0, 0) # 设置账号 Label(text='账号:').place(x=50, y=30) uname = Entry(win) uname.place(x=100, y=30) # 设置密码 Label(text='密码:').place(x=50, y=70) pwd = Entry(win) pwd.place(x=100, y=70) # 登陆 def login(): username = uname.get() password = pwd.get() if username == 'abc' and password == '123': print('登陆成功') main() else: print('账号或者密码错误')
用python自带的tkinter库实现一个最简单的登陆界面。直接在代码内部设置登录框的宽度、高度和账号密码。
2、主函数
def main(): while True: my_menu() print('\n') x = int(input("请输入功能对应的数字:")) match x: case 0: sys.exit() case 1: add() case 2: view() case 3: research() case 4: delete() case 5: revise() case 6: purchase() case _: print("输入有错,请重新输入")
用Python内置的match()和引入os模板内的sys.exit()函数,实现菜单选择各类功能和退出超市管理系统。
3、菜单界面
def my_menu(): print(" ") print(" ") print(" ") print(" ") print(" ☆ ☆ ☆ ☆ ☆ ☆ ☆ ☆ 超 市 管 理 系 统 ☆ ☆ ☆ ☆ ☆ ☆ ☆ ☆") print(" ") print(" ") print(" ************* 1.增添商品 ************* ") print(" ") print(" ************* 2.统计商品 ************* ") print(" ") print(" ************* 3.查询商品 ************* ") print(" ") print(" ************* 4.删除商品 ************* ") print(" ") print(" ************* 5.修改商品 ************* ") print(" ") print(" ************* 6.购买商品 ************* ") print(" ") print(" ************* 0.退出系统 ************* ") def change_menu(): print(" ************* 1.修改种类 ************* ") print(" ") print(" ************* 2.修改名字 ************* ") print(" ") print(" ************* 3.修改数量 ************* ") print(" ") print(" ************* 4.修改品牌 ************* ") print(" ") print(" ************* 5.修改产地 ************* ") print(" ") print(" ************* 6.修改进价 ************* ") print(" ") print(" ************* 7.修改售价 ************* ") print(" ") print(" ************* 8.全部信息 ************* ") print(" ")
简单的调用print()函数,进行打印超市管理系统菜单页面以及修改商品的功能选择页面
4、商品类
class Goods: def __init__(self, kind, name, band, place, amount, cost, price, ): self.kind = kind self.name = name self.band = band self.place = place self.amount = amount self.cost = cost self.price = price def info(self): # 字符串的拼接 goods = self.kind + ' \t' + self.name + '\t ' + self.band + '\t' + self.place + '\t ' + self.amount + '\t ' + self.price + '\t' + self.cost + '' return goods
定义了一个商品类,在构造函数内获取商品的种类,名字,品牌,价格,产地,数量,进价,售价等等信息。其次在商品类定义了一个info()函数,用于后续商品的增删改查以及输出到txt文本。
5、添加商品
def add(): while True: print('可输入的商品种类有:水果、日用品、饮料') with open('supermarket.txt', 'a') as f: kind = input('请输入商品的种类:') name = input('请输入商品的名称:') band = input('请输入商品的品牌: ') place = input('请输入商品的产地: ') amount = input('请输入商品的数量:') cost = input('请输入商品的进价:') price = input('请输入商品的售价:') goods = Goods(kind, name, band, place, amount, cost, price) f.write('\n') f.write(goods.info()) a = input('是否继续增加商品?(输入1继续,输入2返回菜单)') if a == '1': continue else: break
主体套用while循环,便于重复操作。其次使用with open()as f创建一个文本文件,将用户输入的信息存在goods里,在用f.write()将商品存入文档。
6、统计功能
def view(): while True: with open("supermarket.txt", 'r') as f: lines = f.readlines() for line in lines: print(line) a = input('提示:输入‘2’返回菜单\n') if a == '2': break
主题套用while循环,便于重复操作。其次使用with open()as f打卡文本文件。
使用for循环逐行遍历内容并打印出来。
7、删除功能
def delete(): while True: discard = input("输入你想删除的商品:") with open('supermarket.txt', 'r+') as f: lines = f.readlines() f.seek(0) for line in lines: if discard not in line: f.write(line) f.truncate() print('删除成功') a = input('提示:输入‘2’返回菜单\n') if a == '2': break
主题套用while循环,便于重复操作。其次使用with open()as f打卡文本文件。
先用readlines()将文本中的内容转为列表,其次在列表里面遍历寻找,如果找到则删除,如果没有找到,则重新输入到文本中。
8、修改功能
def revise(): while True: name = input("请输入你想要修改的商品: ") with open('supermarket.txt', 'r+') as f: lines = f.readlines() f.seek(0) for line in lines: if name in line: change_menu() list1 = line.split() x = int(input('请输入对应功能的数字:')) match x: case 1: old_info = list1[0] new_info = input("请输入修改后的信息: ") line = line.replace(old_info, new_info) case 2: old_info = list1[1] new_info = input("请输入修改后的信息: ") line = line.replace(old_info, new_info) case 3: old_info = list1[2] new_info = input("请输入修改后的信息: ") line = line.replace(old_info, new_info) case 4: old_info = list1[3] new_info = input("请输入修改后的信息: ") line = line.replace(old_info, new_info) case 5: old_info = list1[4] new_info = input("请输入修改后的信息: ") line = line.replace(old_info, new_info) case 6: old_info = list1[5] new_info = input("请输入修改后的信息: ") line = line.replace(old_info, new_info) case 7: old_info = list1[6] new_info = input("请输入修改后的信息: ") line = line.replace(old_info, new_info) case 8: print('种类,名称,品牌,产地,数量,进价,售价') for i in range(7): old_info = list1[i] new_info = input("请输入修改后的信息: ") line = line.replace(old_info, new_info) print('修改成功') f.write(line) else: f.write(line) f.truncate() a = input('提示:输入‘2’返回菜单\n') if a == '2': break
主题套用while循环,便于重复操作。其次使用with open()as f打卡文本文件。For循环遍历文本文档并赋值给line,接受想要修改的商品名字的name在line里面寻找,同时将line用split()分隔。其次使用match接受输入的数字转换到对应的功能。替换主要采用列表的replace功能。
9、查找功能
def research(): while True: search = input("请输入你想要查询的商品名称: ") with open("supermarket.txt", 'r') as f: lines = f.readlines() for line in lines: if search in line: print(line) a = input('提示:输入‘2’返回菜单\n') if a == '2': break
主题套用while循环,便于重复操作。其次使用with open()as f打卡文本文件。用for循环遍历文件,如果找到相同的则打印对应的行。
10、购买功能
def purchase(): while True: name = input('请输入你想购买的商品:') with open('supermarket.txt', 'r+') as f: lines = f.readlines() f.seek(0) for line in lines: if name in line: amount = int(input('请输入你想购买的数量:')) old_info = line.split("\t")[4] new_info = int(line.split("\t")[4]) - amount line = line.replace(old_info, str(new_info)) f.write(line) else: f.write(line) f.truncate() print('一共花费:', (int(line.split("\t")[6]) * amount)) a = input('提示:输入‘2’返回菜单\n') if a == '2': break
主题套用while循环,便于重复操作。其次使用with open()as f打卡文本文件。类似修改商品信息功能的逻辑。只是默认修改的参数为商品的数量,并同时打印商品数量购买量*商品单价,即花费价格。
测试结果
设计总结
通过这次课程设计,加强了大家思考和解决问题的能力。在设计同时也是对知识的渴求和对所学知识的加强,由于课本上的知识太多,平时课间的学习并不能很好的理解和运用,所以在这次课程设计过程中,对Python语言有了更深的了解,并且对于其在软件设计的使用有了更多的认识。
本次的课程设计有成功之处也有不足的地方。
成功之处是:本超市管理系统功能齐全并且经校验无错误,而且具备一定的容错性;功能代码有对应的注释信息,以便以后维护;涉及的知识点较全面,有函数、数组、指针、类与类的继承、运算符重载、异常处理机制、文件、链表;涉及的算法有顺序查找、模糊查找、选择排序;有销售信息保存机制,可以将顾客的消费记录保存,以便以后核对和汇总;有商品的库存判断机制,当商品的库存量为空的时候,在管理员进入系统的第一时刻就会提醒他补充存货。
不足之处是:界面比较单调,由于时间关系没有设计出一个美观的界面;由于没有学习数据库和网络,本系统仅仅只能由一台电脑使用;由于知识缺乏,本系统不能连接扫描仪,以至于商品购买时,只能手动输入;其次排序功能只能对3个货品起作用,逻辑较为简单;货品较少的时候,选用直接查询所有商品即可。
以上是我对本系统优劣之处的总结。但是总的来说本系统还是比较成功的,对我们而言,知识上的收获重要,精神上的丰收更加可喜。挫折是一份财富,经历是一份拥有。这次课程设计必将成为我们人生旅途上一个非常美好的回忆!