课程设计需求:
1、问题描述(功能要求):
根据实验指导书要求,完成相关软件系统的设计,要求内容翔实,条理清晰,主要(关键代码)须有详细注释,写清楚测试结果,并分析存在的问题:
1)能够实现汽车销售管理与相关信息的保存(到文件)和读取;
2)实现所有库存汽车相关信息的录入、显示、销售、修改等功能;
3)系统界面应类似下图所示的控制台界面(鼓励使用WEB或桌面窗体界面):
其中,选择相应菜单代码之后进入相应的功能,可以:1录入汽车信息(最后保存到文件);2显示已经保存的汽车信息(库存);3销售汽车:先显示已有汽车数据,选择销售的汽车编号之后将该车的信息删除;4修改汽车信息,先通过编号选定汽车信息,然后更改;5显示已经销售的汽车信息;6退出。
2、问题的解决方案:
根据系统功能要求,可以将问题解决分为以下步骤:
(1)分析系统中的相关功能和信息的关系;
(2)根据问题描述,设计数据访问流程和访问界面(控制台界面);
(3)完成类中各个成员函数的定义;
(4)功能调试;
(5)完成系统总结报告以及系统使用说明书。
源代码
import matplotlib.pyplot as plt
from pylab import mpl
import os
def printwindows():
print("****************************************")
print(" ")
print("* *汽车销售管理系统* *")
print(" ")
print("****************************************")
print(" ")
print("* 1.录入汽车信息 2.显示汽车信息 *")
print(" ")
print("****************************************")
print(" ")
print("* 3.销售汽车 4.修改汽车信息 *")
print(" ")
print("****************************************")
print(" ")
print("* 5.销售数据 6.退出系统 ")
print("****************************************")
def read_cars_details():
aa = []
with open("cars_details.txt", 'r') as f1:
for line in f1.read().splitlines():
data = line.split("\n")
for str in data:
sub_str = str.split(' ')
if sub_str:
aa.append(sub_str)
return aa
def read_cars_buydetails():
aa = []
with open("cars_buydetails.txt", 'r') as f1:
for line in f1.read().splitlines():
data = line.split("\n")
for str in data:
sub_str = str.split(' ')
if sub_str:
aa.append(sub_str)
return aa
def addcars():
while(1):
os.system("cls")
print("请输入要增加的车辆具体信息:")
carid = input("请输入增加车辆的编号:")
carname = input("请输入增加车辆的名字:")
carprice = input("请输入增加车辆的价格:")
carsum = input("请输入增加车辆的数量:")
with open("cars_details.txt", 'a') as f1:
f1.write(carid + " " + carname + " " + carprice + " " + carsum + '\n')
n = input("是否继续添加?y or n:")
if n == "n":
break
def show_cars_detalls():
os.system("cls")
cardetails = []
cardetails = read_cars_details()
#print(cardetails)
print(" 目前车辆信息")
print("车辆编号 车辆名字 车辆价格 车辆数量")
for carline in cardetails:
print(carline[0]+ " " + carline[1] + " " + carline[2] + " " + carline[3])
os.system('pause')
def sellcars():
os.system("cls")
cardetails = []
cardetails = read_cars_details()
flag = 0
n = input("请输入你要销售的车辆编号:")
for carline in cardetails:
if carline[0] == n:
flag = 1
buy_sum = int(input("请输入销售的数量:"))
now_sum = int(carline[3])
if buy_sum > now_sum:
print("库存不足")
else:
now_sum -= buy_sum
carline[3] = str(buy_sum)
write_buy_cars(carline)
carline[3] = str(now_sum)
updatacars_sum(cardetails)
break
if flag == 0:
print("未找到!")
os.system("pause")
def write_buy_cars(carline):
with open("cars_buydetails.txt", 'a') as f1:
f1.write(carline[0] + " " + carline[1] + " " + carline[2] + " " + carline[3] + "\n")
def updatacars_sum(cardetails):
with open("cars_details.txt", 'w') as f1:
for carline in cardetails:
if carline[3] == 0:
pass
else:
f1.write(carline[0] + " " + carline[1] + " " + carline[2] + " " + carline[3] + '\n')
def updatacars():
os.system("cls")
cardetails = []
cardetails = read_cars_details()
flag = 0
n = input("请输入你要更新的车辆编号:")
for carline in cardetails:
if carline[0] == n:
flag = 1
buy_sum = int(input("请输入你要更新的车辆价格:"))
now_sum = int(carline[2])
carline[2] = str(buy_sum)
updatacars_sum(cardetails)
break
if flag == 0:
print("未找到!")
def show_cars_selldetalls():
mpl.rcParams['font.sans-serif'] = ['SimHei']
car_buy_datail = read_cars_buydetails()
x = []
y = []
for carlines in car_buy_datail:
x.append(carlines[1])
y.append(int(carlines[3]))
plt.bar(x, height=y, color='tab:green', width=0.5)
plt.xlabel("车辆名称",fontsize=12)
plt.ylabel("销售数量",fontsize=12)
plt.title("汽车销售数据表",fontsize=10)
plt.show()
def main():
while(1):
os.system("cls")
printwindows()
print("请输入你要执行的代码:")
n = int(input())
if n == 1:
addcars()
elif n == 2:
show_cars_detalls()
elif n == 3:
sellcars()
elif n == 4:
updatacars()
elif n == 5:
show_cars_selldetalls()
else:
break
if __name__ == '__main__':
main()
具体实现:
首先开始之前你要确保你有matplotlib库还有os库
没有的话用pip install安装即可
代码运行后的界面:
1.功能一的实现:
功能2 的实现:
最底下是最新添加的
功能3的实现:
为了方便添加了一些东西
这是一开始的
开始执行功能3
执行之后
功能4:
一开始的价格
执行更新操作:
更改后
功能5:
这是销售的matplot图
具体每个功能讲解:
主函数:
os清屏然后n获取要查询的地方然后调用每个功能的函数
第一个函数输出到屏幕具体操作
第二个函数:
以二维列表的方式读取现有的车辆信息返回一个二维列表
每一行代表一条信息
和上个函数功能差不多这个是用来读卖出的车辆信息
功能一的实现写入文件一行车辆信息
open里面用‘a'避免覆盖重写
功能二的实现
调用获取文件中车辆信息函数返回一个二维列表然后输出该列表
功能三的实现首先读取现有的车辆数据文件返回列表
遍历查找符合的编号然后进行数量的减少操作
调用之后要讲的函数write_buy_cars写入已经卖出的文件中 ,更新现有的数量的文件调用之后要讲的updatacars_sum函数
写入已经卖出的文件用相同与之前添加信息的函数一样写入已经销售的文件中
更新现在的文件是将应该更新过后的二维列表再覆盖重写以前的数据从而实现更新操作
功能四修改数据
实现和功能三销售大致思路一样
只是更改的是价格不用写入已经售出的文件中
功能5:
第一行代码是防止乱码
然后读取已经卖出的信息进二维列表里
让每个车辆信息的名字进x列表数量进y列表
调用plt.bar进行控制x表示x轴y表示y轴颜色绿色宽度0.5
下面是标题命名和输出图像