零食自动售货机可以售出若干种商品,其中,商品属性包括:商品代码、商品名、商品单价、商品总量、商品库存量;售货机中的货币属性包括:货币面值、货币数量;售货机电子账户包括:账号、金额。顾客购买商品可选择两种付款形式:第一种是扫码付款,微信或支付宝扫码模拟均可;第二种是投入面值为1/5/10/20元钱币购买商品,自动售货机吐出商品,并且找给用户零钱,零钱的面值分别为1元、2元和5元。如果商品用完,或者无法找零,则给出用户一个提示:商品已售完,并且退还钱币,为了避免流失顾客,希望你的售货机能够尽可能地给用户找零。为了调查用户的喜好,希望得到各种商品的每日消费数据,并由此来调整货柜中各类货物的存贮量。
要求:编写一个零食自动售货机系统。实现以下功能:
【功能要求】
(1)库存查询:检索当前各种商品的储存量。
(2)销售查询:持有密码的管理员可统计每种商品的销售量和销售额。
(3)货币查询:持有密码的管理员可统计所有不同面值的货币数目及总金额数,并检验货币总金额是否与总销售额一致。
(4)销售界面:顾客选择商品,确认后,扫码付款获得商品或投入钱币获得商品和零钱;或者直接显示错误并退还钱币。
(5)设计友好的界面和菜单:每种功能的操作都是在菜单中进行相应选择。
要求写详细注释
。最近都是课题,需要讲解可以留言
#include <iostream>
#include <vector>
#include <iomanip>
using namespace std;
class Commodity {
public:
int code;
string name;
double price;
int quantity;
int salesVolume;
double salesRevenue;
Commodity(int c, string n, double p, int q, int v = 0, double r = 0.0) {
code = c;
name = n;
price = p;
quantity = q;
salesVolume = v;
salesRevenue = r;
}
void sellCommodity(int q) {
quantity -= q;
salesVolume += q;
salesRevenue += q * price;
}
};
class Currency {
public:
double value;
int quantity;
Currency(double v, int q) {
value = v;
quantity = q;
}
};
class Account {
public:
int id;
double balance;
Account(int i = 0, double b = 0.0) {
id = i;
balance = b;
}
};
class VendingMachine {
public:
vector<Commodity> commodities;
vector<Currency> currencies;
Account account;
int password;
VendingMachine(vector<Commodity> c, vector<Currency> u, Account a = Account(), int p = 1234) {
commodities = c;
currencies = u;
account = a;
password = p;
}
void displayMenu() {
cout << "商品清单:" << endl;
for (int i = 0; i < commodities.size(); i++) {
cout << commodities[i].code << " " << commodities[i].name << " " << fixed << setprecision(2) << commodities[i].price << "元/个" << endl;
}
}
bool checkCommodity(int code) {
for (int i = 0; i < commodities.size(); i++) {
if (commodities[i].code == code) {
return true;
}
}
return false;
}
bool checkStock(int code) {
for (int i = 0; i < commodities.size(); i++) {
if (commodities[i].code == code) {
return commodities[i].quantity > 0;
}
}
return false;
}
void buyCommodity(int code, double money) {
for (int i = 0; i < commodities.size(); i++) {
if (commodities[i].code == code) {
if (money < commodities[i].price) {
cout << "金额不足,请重新选择!" << endl;
return;
}
if (commodities[i].quantity == 0) {
cout << "商品已售完,请选择其他商品!" << endl;
return;
}
double change = money - commodities[i].price;
if (change > 0) {
cout << "找零:" << fixed << setprecision(2) << change << "元" << endl;
account.balance += commodities[i].price;
} else {
account.balance += money;
}
commodities[i].sellCommodity(1);
cout << "购买成功!" << endl;
return;
}
}
cout << "商品不存在,请重新选择!" << endl;
}
void displaySales() {
int totalVolume = 0;
double totalRevenue = 0.0;
cout << "销售情况:" << endl;
for (int i = 0; i < commodities.size(); i++) {
totalVolume += commodities[i].salesVolume;
totalRevenue += commodities[i].salesRevenue;
cout << commodities[i].name << " 销售量:" << commodities[i].salesVolume << " 销售额:" << fixed << setprecision(2) << commodities[i].salesRevenue << "元" << endl;
}
cout << "总销售量:" << totalVolume << " 总销售额:" << fixed << setprecision(2) << totalRevenue << "元" << endl;
}
void displayStock() {
cout << "库存情况:" << endl;
for (int i = 0; i < commodities.size(); i++) {
cout << commodities[i].name << " 剩余数量:" << commodities[i].quantity << endl;
}
}
void displayCurrency() {
int totalQuantity = 0;
double totalValue = 0.0;
cout << "货币情况:" << endl;
for (int i = 0; i < currencies.size(); i++) {
totalValue += currencies[i].value * currencies[i].quantity;
totalQuantity += currencies[i].quantity;
cout << currencies[i].value << "元:数量 " << currencies[i].quantity << endl;
}
cout << "-------------------------" << endl;
cout << "总金额数:" << totalValue << "元" << endl;
cout << "货币数量:" << totalQuantity << endl;
}
void displaySalesInterface(int password) {
if (password != this->password) {
cout << "密码错误!" << endl;
return;
}
displaySales();
displayCurrency();
if (checkTotalRevenue()) {
cout << "货币总金额与总销售额一致。" << endl;
} else {
cout << "货币总金额与总销售额不一致,请检查货币情况!" << endl;
}
}
bool checkTotalRevenue() {
double totalRevenue = 0.0;
for (int i = 0; i < commodities.size(); i++) {
totalRevenue += commodities[i].salesRevenue;
}
double totalValue = 0.0;
for (int i = 0; i < currencies.size(); i++) {
totalValue += currencies[i].value * currencies[i].quantity;
}
return totalRevenue == totalValue;
}
void displayStockInterface(int password) {
if (password != this->password) {
cout << "密码错误!" << endl;
return;
}
displayStock();
}
};
int main() {
Commodity c1(1, "啤酒", 3.5, 10, 10);
Commodity c2(2, "玩具", 5.0, 10, 10);
Commodity c3(3, "糖果", 8.0, 10, 10);
Commodity c4(4, "巧克力吧", 11.0, 20, 10);
vector<Commodity> commodities = {c1, c2, c3,c4};
Currency u1(1, 10);
Currency u2(2, 10);
Currency u3(5, 10);
Currency u4(7, 10);
vector<Currency> currencies = {u1, u2, u3,u4};
Account account(123456, 0.0);
VendingMachine vm(commodities, currencies, account, 1234);
vm.displayMenu();
int code;
double money;
cout << "请输入商品代码:" << endl;
cin >> code;
if (!vm.checkCommodity(code)) {
cout << "商品不存在,请重新选择!" << endl;
return 0;
}
if (!vm.checkStock(code)) {
cout << "商品已售完,请选择其他商品!" << endl;
return 0;
}
cout << "请输入金额:" << endl;
cin >> money;
vm.buyCommodity(code, money);
vm.displaySales();
vm.displayStock();
int password;
cout << "请输入管理员密码:" << endl;
cin >> password;
vm.displaySalesInterface(password);
cout << "请输入管理员密码:" << endl;
cin >> password;
vm.displayStockInterface(password);
return 0;
}
回答部分参考、引用ChatGpt以便为您提供更准确的答案:
根据您的需求,您需要根据打开的页面的itemid值查询name,并将对应的name值打印出来。下面是对您提供的代码进行修改的建议:
import random
import string
import pymysql
import cherrypy
import os
import json
import urllib.parse
url = '*********/?itemid=1'
parsed_url = urllib.parse.urlparse(url)
params = urllib.parse.parse_qs(parsed_url.query)
itemid = params['itemid'][0]
try:
conn = pymysql.connect(host="localhost", user="*", password="*", database="*")
except pymysql.Error as e:
print("error")
cursor = conn.cursor()
cursor.execute("SELECT name FROM test WHERE id = %s", (itemid,))
datas = cursor.fetchall()
if datas:
datass = datas[0][0]
print(datass)
else:
print("No data found for itemid:", itemid)
cursor.close()
conn.close()
对比原始代码,我进行了以下修改:
urllib.parse
库来解析URL,并获取itemid的值。execute
方法中的参数绑定方式,将itemid作为参数传递给SQL查询语句,以防止SQL注入攻击。请根据实际情况修改代码中的数据库连接参数和SQL查询语句,以适应您的数据库结构和数据表名称。
c++ 实现自动售货机器
#include <stdio.h>
#include <stdlib.h>
#include <string>
#include <iostream>
using namespace std;
int main()
{
//售货机只卖三种商品
// 薯片,可乐,面包 单价为 5元,3元,4元 初始数量都为10个
int shupians=10;
int cokes=10;
int breads=10;
int Moneys=0; //记录营业额
cout<<"自动售货机系统启动"<<endl;
while(true)
{
int n=0;
cout<<"1.购买商品"<<endl;
cout<<"2.补货"<<endl;
cout<<"3.查询营业额度"<<endl;
cin>>n;
if(n==1)
{
while(true)
{
cout<<"请输入要购买的商品"<<endl;
cout<<"1.薯片"<<endl;
cout<<"2.可乐"<<endl;
cout<<"3.面包"<<endl;
cout<<"4.退出"<<endl;
int a=0;
int Count=0;
cin>>a;
if(a==1)
{
cout<<"请输入需要购买的数量"<<endl;
cin>>Count;
if(Count>shupians)
{
cout<<"数量超出库存,请重新选择"<<endl;
}
else
{
cout<<"总价为:"<<Count*5<<endl;
cout<<"请投币取货"<<endl;
cout<<"请输入投币金额"<<endl;
int money=0;
cin>>money;
if(money<Count*5)
{
while(true)
{
cout<<"金额不足"<<endl;
cout<<"1.继续投币"<<endl;
cout<<"2.取消购买"<<endl;
int g=0;
cin>>g;
if(g==1)
{
cout<<"输入投币金额"<<endl;
int money2=0;
cin>>money2;
money+=money2;
if(money>=Count*5)
{
Moneys+=Count*5;
cout<<"购买成功"<<endl;
cout<<"找零:"<<money-Count*5<<"元"<<endl;
break;
}
}else if(g==2)
{
cout<<"找零:"<<money<<"元"<<endl;
break;
}
}
}
}
}else if(a==2)
{
cout<<"请输入需要购买的数量"<<endl;
cin>>Count;
if(Count>cokes)
{
cout<<"数量超出库存,请重新选择"<<endl;
}
else
{
cout<<"总价为:"<<Count*3<<endl;
cout<<"请投币取货"<<endl;
cout<<"请输入投币金额"<<endl;
int money=0;
cin>>money;
if(money<Count*5)
{
while(true)
{
cout<<"金额不足"<<endl;
cout<<"1.继续投币"<<endl;
cout<<"2.取消购买"<<endl;
int g=0;
cin>>g;
if(g==1)
{
cout<<"输入投币金额"<<endl;
int money2=0;
cin>>money2;
money+=money2;
if(money>=Count*3)
{
Moneys+=Count*3;
cout<<"购买成功"<<endl;
cout<<"找零:"<<money-Count*5<<"元"<<endl;
break;
}
}else if(g==2)
{
cout<<"找零:"<<money<<"元"<<endl;
break;
}
}
}
}
}else if(a==3)
{
cout<<"请输入需要购买的数量"<<endl;
cin>>Count;
if(Count>breads)
{
cout<<"数量超出库存,请重新选择"<<endl;
}
else
{
cout<<"总价为:"<<Count*5<<endl;
cout<<"请投币取货"<<endl;
cout<<"请输入投币金额"<<endl;
int money=0;
cin>>money;
if(money<Count*4)
{
while(true)
{
cout<<"金额不足"<<endl;
cout<<"1.继续投币"<<endl;
cout<<"2.取消购买"<<endl;
int g=0;
cin>>g;
if(g==1)
{
cout<<"输入投币金额"<<endl;
int money2=0;
cin>>money2;
money+=money2;
if(money>=Count*4)
{
Moneys+=Count*4;
cout<<"购买成功"<<endl;
cout<<"找零:"<<money-Count*5<<"元"<<endl;
break;
}
}else if(g==2)
{
cout<<"找零:"<<money<<"元"<<endl;
break;
}
}
}
}
}
else if(a==4)
{
break;
}
else
{
cout<<"操作有误,重新操作"<<endl;
}
}
}
else if(n==2)
{
while(true)
{
cout<<"请输入要购买的商品"<<endl;
cout<<"1.薯片"<<endl;
cout<<"2.可乐"<<endl;
cout<<"3.面包"<<endl;
cout<<"4.退出"<<endl;
int a=0;
cin>>a;
if(a==1)
{
cout<<"请输入上货数量"<<endl;
int Count=0;
cin>>Count;
shupians+=Count;
cout<<"薯片数量:"<<shupians<<endl;
}else if(a==2)
{
cout<<"请输入上货数量"<<endl;
int Count=0;
cin>>Count;
cokes+=Count;
cout<<"可乐数量:"<<cokes<<endl;
}
else if(a==3)
{
cout<<"请输入上货数量"<<endl;
int Count=0;
cin>>Count;
breads+=Count;
cout<<"面包数量:"<<breads<<endl;
}
else if(a==4)
{
break;
}
else
{
cout<<"操作有误,请重新操作"<<endl;
}
}
}
else if(n==3)
{
cout<<"营业额为:"<<Moneys<<endl;
}
else
{
cout<<"操作有误,请重新选择"<<endl;
}
}
return 0;
}
不知道你这个问题是否已经解决, 如果还没有解决的话:我是真的耗费了我的空余时间做的,希望作者采纳
#include<bits/stdc++.h>
using namespace std;
int baishikele,shupian,wangzainiunai;
double n;
string s;
int main() {
baishikele=shupian=wangzainiunai=100;
while(cout<<"请问你要买些什么呢?"<<endl) {
cout<<endl<<"我们有薯片,百事可乐和旺仔牛奶,请问你想要选择哪个?ctrl+z退出"<<endl;
cout<<"百事可乐3.5元,旺仔牛奶2.5元,薯片4元。"<<endl;
cin>>s;
if(s=="薯片"&&shupian!=0) {
cout<<"一共需要"<<4<<"块钱"<<endl;
cin>>n;
if(n==4) {
shupian--;
cout<<"还有"<<shupian<<"包薯片"<<endl;
cout<<"还有"<<baishikele<<"瓶百事可乐"<<endl;
cout<<"还有"<<wangzainiunai<<"瓶旺仔牛奶"<<endl;
} else {
cout<<"请重新输入!";
}
}
if(s=="百事可乐"&&baishikele!=0) {
cout<<"一共需要"<<3.5<<"块钱"<<endl;
cin>>n;
if(n==3.5) {
baishikele--;
cout<<"还有"<<shupian<<"包薯片"<<endl;
cout<<"还有"<<baishikele<<"瓶百事可乐"<<endl;
cout<<"还有"<<wangzainiunai<<"瓶旺仔牛奶"<<endl;
} else {
cout<<"请重新输入!";
}
}
if(s=="旺仔牛奶"&&wangzainiunai!=0) {
cout<<"一共需要"<<2.5<<"块钱"<<endl;
cin>>n;
if(n==2.5) {
wangzainiunai--;
cout<<"还有"<<shupian<<"包薯片"<<endl;
cout<<"还有"<<baishikele<<"瓶百事可乐"<<endl;
cout<<"还有"<<wangzainiunai<<"瓶旺仔牛奶"<<endl;
} else {
cout<<"请重新输入!";
}
}
}
}
这个就是考察你结构体、函数、输入输出、循环等基本知识的掌握情况。给你找到一些关于零食自动售货机程序的源代码,可以参考下:
c++自动糖果贩卖机:https://www.cnblogs.com/wawcac-blog/p/12045706.html
分别定义商品、货币、电子账户等实体类,然后数据库可以用mysql,最后进行一个增删改查就基本可以了
下面是一个简单的C++程序,实现零食自动售货机系统的功能。它包含了面向对象编程的基本思想和技巧,注释也比较详细,方便理解和修改。其中,商品、货币和电子账户等数据结构都是用类来实现的,具有高度的封装性和可扩展性。
#include <iostream>
#include <vector>
#include <map>
#include <string>
using namespace std;
// 商品类
class Product {
public:
Product(int code, string name, double price, int total)
: code_(code), name_(name), price_(price), total_(total), stock_(total) {}
int get_code() const { return code_; }
string get_name() const { return name_; }
double get_price() const { return price_; }
int get_total() const { return total_; }
int get_stock() const { return stock_; }
bool sell(int quantity) {
if (quantity <= 0 || quantity > stock_) return false;
stock_ -= quantity;
return true;
}
private:
int code_; // 商品代码
string name_; // 商品名称
double price_; // 商品单价
int total_; // 商品总量
int stock_; // 商品库存量
};
// 货币类
class Money {
public:
Money(int value, int count) : value_(value), count_(count) {}
int get_value() const { return value_; }
int get_count() const { return count_; }
double get_amount() const { return value_ * count_; }
void add(int count) { count_ += count; }
private:
int value_; // 货币面值
int count_; // 货币数量
};
// 电子账户类
class Account {
public:
Account(int id, double balance) : id_(id), balance_(balance) {}
int get_id() const { return id_; }
double get_balance() const { return balance_; }
bool pay(double amount) {
if (amount <= 0 || amount > balance_) return false;
balance_ -= amount;
return true;
}
void deposit(double amount) {
if (amount > 0) balance_ += amount;
}
private:
int id_; // 账户号码
double balance_; // 账户余额
};
// 自动售货机类
class VendingMachine {
public:
VendingMachine() {
products_ = {
{ 1, Product(1, "可乐", 3.0, 10) },
{ 2, Product(2, "薯片", 5.0, 8) },
{ 3, Product(3, "巧克力", 6.0, 6) }
};
for (int i = 0; i < sizeof(money_values_) / sizeof(int); ++i)
moneys_.push_back(Money(money_values_[i], 0));
accounts_ = {
{ 1, 100.0 },
{ 2, 200.0 },
{ 3, 300.0 }
};
}
void run() {
int choice;
do {
show_menu();
cout << "请选择要执行的操作(输入数字1-5):";
cin >> choice;
switch (choice) {
case 1: check_stock(); break;
case 2: check_sales(); break;
case 3: check_money(); break;
case 4: sell_product(); break;
case 5: break;
default: show_error("无效的选择");
}
cout << endl;
} while (choice != 5);
}
private:
void show_menu() {
cout << "********* 自动售货机 *********" << endl;
cout << "1. 库存查询" << endl;
cout << "2. 销售查询" << endl;
cout << "3. 货币查询" << endl;
cout << "4. 销售界面" << endl;
cout << "5. 退出" << endl;
cout << "*****************************" << endl;
}
void show_error(const string& message) {
cerr << "错误提示:" << message << endl;
}
void check_stock() {
cout << "当前库存信息如下:" << endl;
for (auto it : products_) {
const Product& product = it.second;
cout << "商品代码:" << product.get_code() << endl;
cout << "商品名称:" << product.get_name() << endl;
cout << "商品单价:" << product.get_price() << endl;
cout << "商品总量:" << product.get_total() << endl;
cout << "商品库存量:" << product.get_stock() << endl;
}
}
void check_sales() {
cout << "请输入管理员密码:";
string password;
cin >> password;
if (password != "123456") {
show_error("密码错误");
return;
}
map<int, int> sales_by_code;
map<int, double> revenue_by_code;
for (auto it : products_) {
const Product& product = it.second;
sales_by_code[product.get_code()] = 0;
revenue_by_code[product.get_code()] = 0.0;
}
for (auto it : sales_) {
const Sale& sale = it;
const Product& product = products_.at(sale.code);
sales_by_code[sale.code] += sale.quantity;
revenue_by_code[sale.code] += sale.quantity * product.get_price();
}
cout << "各种商品的销售量和销售额为:" << endl;
for (auto it : products_) {
const Product& product = it.second;
int code = product.get_code();
cout << "商品代码:" << code << endl;
cout << "商品名称:" << product.get_name() << endl;
cout << "销售量:" << sales_by_code[code] << endl;
cout << "销售额:" << revenue_by_code[code] << endl;
}
}
void check_money() {
cout << "请输入管理员密码:";
string password;
cin >> password;
if (password != "123456") {
show_error("密码错误");
return;
}
double total_amount = 0.0;
map<int, int> count_by_value;
for (auto it : moneys_) {
const Money& money = it;
count_by_value[money.get_value()] = money.get_count();
total_amount += money.get_amount();
}
cout << "货币总金额为:" << total_amount << endl;
cout << "各种货币的数量如下:" << endl;
for (int value : money_values_) {
cout << value << "元: " << count_by_value[value] << "个" << endl;
}
}
void sell_product() {
int code, quantity;
double amount;
cout << "请输入商品代码和数量(用空格分隔):";
cin >> code >> quantity;
if (products_.count(code) == 0) {
show_error("不存在该种商品");
return;
}
const Product& product = products_.at(code);
if (!product.sell(quantity)) {
show_error("商品库存不足");
return;
}
cout << "请选择付款方式:1. 扫码付款 2. 投币付款:";
bool scan_pay;
cin >> scan_pay;
if (scan_pay) {
cout << "请扫码支付:" << product.get_price() * quantity << "元" << endl;
// 其他操作省略,模拟为直接支付
amount = product.get_price() * quantity;
} else {
int total_value = 0;
for (auto it : moneys_) {
total_value += it.get_value() * it.get_count();
}
cout << "请输入要投入的钱币面值(1/5/10/20,输入0结束):" << endl;
while (true) {
int value;
cin >> value;
if (value <= 0 || value > 20 || (value != 1 && value != 5 && value != 10 && value != 20)) {
break;
}
total_value += value;
bool found = false;
for (auto& it : moneys_) {
if (it.get_value() == value) {
it.add(1);
found = true;
break;
}
}
if (!found) {
show_error("输入的钱币面值不合法");
return;
}
}
if (total_value < product.get_price() * quantity) {
show_error("付款金额不足");
return;
}
amount = total_value - product.get_price() * quantity;
}
if (amount > 0) {
for (auto it = moneys_.rbegin(); it != moneys_.rend(); ++it) {
Money& money = *it;
int count = min(money.get_count(), (int)(amount / money.get_value()));
amount -= count * money.get_value();
money.add(-count);
if (amount <= 0) break;
}
}
if (amount < 0) {
for (auto it = moneys_.begin(); it != moneys_.end(); ++it) {
Money& money = *it;
int count = min(product.get_price() * quantity - amount, money.get_count());
amount += count * money.get_value();
money.add(-count);
if (amount >= 0) break;
}
}
if (amount != 0) {
show_error("找零失败");
return;
}
cout << "购买成功,找零:" << (-amount) << "元" << endl;
Sale sale = { code, quantity };
sales_.push_back(sale);
accounts_.at(1).deposit(product.get_price() * quantity);
}
private:
struct Sale {
int code;
int quantity;
};
vector<Sale> sales_; // 销售记录
map<int, Product> products_; // 商品库存
vector<Money> moneys_; // 货币库存
const int money_values_[4] = { 1, 5, 10, 20 }; // 面值
map<int, Account> accounts_; // 电子账户
};
int main() {
VendingMachine vending;
vending.run();
return 0;
}