整个程序的功能 :
商品入库 补货
商品购买 找零
还有乱禅巧携七八糟的一堆验证
数据只有结构链表存储,退出不保存,你要写文件或数据库保存,你自己写吧,写不动了。
演示看下图:
#include<stdio.h>#include<string.h>
#include<malloc.h>
#define nameSize 21 //商品名称数组大小 可修改
typedef struct autoMA
{
char *spName//商品名
int spNum//商品数量
float spValue//商品价格
struct autoMA 宽闷*next
}AMA
AMA *amaNEW,*amaP1,*amaSelect//定义一个新节点指针 首节点指针 查找用指针
int contStrplen(char *p)
int eqStr(char *str1,char *str2)//比较字符串是否相等,相等返回1 否则返回0
AMA * selectSP(AMA * AMAhead,char *spName)//通过名称查找商品 有返回节点地址 没有返回NULL
void insertSP(AMA *AMAhead,AMA **AMAtail,char *VSPname,int VSPnum,float VSPvalue)//添加商品 如果已有该商品,数量+ 如果没有 新增
float * buySP(AMA *AMAhead,char *name,int num,float pay)//购买 返回float数组[2]
int main()
{
AMA *AMAtail,*AMAhead//定义一个头节点指针 尾节点指针
float *b,value
int num,answer
char name[nameSize]
amaSelect=(AMA *)malloc(sizeof(AMA))
AMAhead=(AMA *)malloc(sizeof(AMA))
AMAtail=(AMA *)malloc(sizeof(AMA))
AMAhead->next=NULL
mu: answer=0
memset(name,0,nameSize)
num=0
value=0
printf("=====系统菜单====\n")
printf("补充库存,输入1\n")
printf("购买商品,输入2\n")
scanf("%d",&answer)
if(answer==2 && AMAhead->next==NULL)
{
printf("当前没有商品库存,请先补充库存\n")
goto mu
}
if(answer==1)
{
printf("输入 ESC 0 0 返回菜单\n")
while(1)
{
printf("\n请录入补充的商品名称(名称小于%d个字符,每项空格分隔):",(nameSize-1)/2)
scanf("%s",name)
printf("请录入补充的数量:")
scanf("%d",&num)
printf("请录入单价:")
scanf("%f",&value)
if(!eqStr(name,"ESC") || num!=0 || value!=0)
{
insertSP(AMAhead,&AMAtail,name,num,value)
}
else
{
printf("\n录入结束返回主菜单\n")
goto mu
}
}
}
if(answer==2 && AMAhead->next!=NULL)
{
tb: memset(name,0,nameSize)
num=0
value=0
printf("输入 ESC 0 0 返回菜单\n")
while(1)
{
printf("\n请输入要购买的商品名称(名称小于%d个字符):",(nameSize-1)/2)
scanf("%s",name)
printf("请输入要购买的数量:")
scanf("%d",&num)
printf("请输入支付金额:")
scanf("%f",&value)
if(!eqStr(name,"ESC") || num!=0 || value!=0)
{
b=buySP(AMAhead,name,num,value)
switch ((int)b[0])
{
case 1:
printf("\n购买商品成功,找回零钱%.2f元\n",b[1])
break
case 2:
printf("\n商品库存不足,当前剩余数量%d,请重新选择商品\n",(int)b[1])
goto tb
break
case 3:
printf("\n支付金额不足,还需支付%.2f元\n",b[1])
goto tb
break
贺伏 default:
printf("\n发生错误!交易失败!\n")
break
}
free(b)
b=NULL
}
else
{
printf("\n购买结束返回主菜单\n")
goto mu
}
}
}
return 0
}
int contStrplen(char *p)//计算字符串指针指向空间的字符串长度 并返回长度
{
int len=0,i=0
while(p[i]!='\0')
{
len++
i++
}
return len
}
int eqStr(char *str1,char *str2)//比较字符串是否相等,相等返回1 否则返回0
{
int i
if(strlen(str1)!=strlen(str2))
return 0
for(i=0i<strlen(str1)i++)
{
if(str1[i]!=str2[i])
return 0
}
return 1
}
AMA * selectSP(AMA * AMAhead,char *spName)//通过名称查找商品 有返回节点地址 没有返回NULL
{
if(AMAhead->next==NULL)
{
return NULL
}
else
{
AMAhead->next=amaP1//遍历查询前将头节点链表指针重置到首节点 为下次查询准备
while(AMAhead->next!=NULL)
{
if(eqStr(AMAhead->next->spName,spName))
{
return AMAhead->next
}
AMAhead=AMAhead->next
}
}
return NULL
}
void insertSP(AMA *AMAhead,AMA **AMAtail,char *VSPname,int VSPnum,float VSPvalue)//添加商品 如果已有该商品,数量+ 如果没有 新增
//参数: 头结点指针地址 尾节点指针地址 商品名称
{
amaSelect=selectSP(AMAhead,VSPname)
if(amaSelect!=NULL)//商品已存在 数量++ 核实价格
{
printf("\n商品%s已存在库存%d个,现添加%d个,现在共有库存%d个\n",amaSelect->spName,amaSelect->spNum,VSPnum,(amaSelect->spNum)+VSPnum)
(amaSelect->spNum)=(amaSelect->spNum)+VSPnum
if(amaSelect->spValue!=VSPvalue)
{
printf("--该录入的价格与原价格不一致,保留原价格,如要更新价格,请在【更新商品信息】功能中修改(该功能暂未实现)\n")
}
}
else// 新增商品
{
amaNEW=(AMA*)malloc(sizeof(AMA))
amaNEW->spName=(char *)malloc(sizeof(char)*(contStrplen(VSPname)+1))//按照输入字符串长度申请内存空间大小
strcpy(amaNEW->spName,VSPname)
amaNEW->spNum=VSPnum
amaNEW->spValue=VSPvalue
amaNEW->next=NULL
if(AMAhead->next==NULL)//首次新增 该节点为首节点 头结点链表指针和尾节点指针均指向该节点首地址
{
amaP1=amaNEW
AMAhead->next=amaP1
*AMAtail=amaP1
}
else//添加到链表
{
(*AMAtail)->next=amaNEW
*AMAtail=amaNEW
}
printf("\n商品%s,数量%d个,价格%.1f元 已添加到贩卖机中\n",VSPname,VSPnum,VSPvalue)
}
}
float * buySP(AMA *AMAhead,char *name,int num,float pay)//购买 返回float数组[2]
//购买商品成功返回[0]=1 [1]=找还金额
//失败库存不足返回[0]=2 [1]=当前库存
//失败金额不足返回[0]=3 [1]=还需支付金额
//失败货物不存在(一般不可能出现) [0]=4 [1]=4
{
float *err=(float *)malloc(sizeof(float)*2)
amaSelect=selectSP(AMAhead,name)
if(amaSelect!=NULL)//商品已存在 核实数量和价格
{
if((amaSelect->spNum)<num)
{
err[0]=2
err[1]=(float)(amaSelect->spNum)
}
if((amaSelect->spNum)>=num && num*(amaSelect->spValue)>pay)
{
err[0]=3
err[1]=num*(amaSelect->spValue)-pay
}
if((amaSelect->spNum)>=num && num*(amaSelect->spValue)<=pay)
{
err[0]=1
err[1]=pay-num*(amaSelect->spValue)
amaSelect->spNum=amaSelect->spNum-num
}
}
else
{
err[0]=4
err[1]=4
}
return err
}
方法一
前期的数据抓取和分析可能python都写好了,所以差这交易租局配指令接腊袭口最后一步。对于股票的散户,正规的法子是华宝,国信,兴业这样愿意给接口的券商,但貌似开户费很高才给这权利,而且只有lts,ctp这样的c++接口,没python版就需要你自己封装。
方法二
是wind这样的软件也有直接的接口,支持部分券商,但也贵,几万一年是要的。
方法三
鼠标键盘模拟法,很复杂的,就是模拟键盘鼠标去 *** 作一些软件,比如券商版交易软件和大智慧之类的。
方法四
就是找到这些软件的关于交易指令的底层代码并更改弊指,不过T+1的规则下,预测准确率的重要性高于交易的及时性,花功夫做数据分析就好,交易就人工完成吧
#include<stdio.h>bool GetCharge(int Sum,int Money)
void Getsmalcharge(int Money,int *ChargeNum)
void main()
{
char state='N'
int Sum=0
char Pro
printf("\n********************************\n")
while(true)
{
state='N'
Sum=0
while(state=='N'||state=='n')
{
printf("\n输入购买物品(a,b,c):")
scanf("%c",&Pro)
getchar()
switch(Pro)
{
case 'a':
Sum=Sum+1
break
case 'A':
Sum=Sum+1
break
case 'b':
Sum=Sum+5
break
case 'B':
Sum=Sum+5
break
case 'c':
Sum=Sum+10
break
case 'C':
Sum=Sum+10
break
default:
printf("\n输入物品有误!!!做游!\n")
break
}
printf("\n是否完成(Y/N):")
scanf("%c",&state)
getchar()
}
int Money
printf("\n购买总价为:%d"纯瞎销,Sum)
bool st=false
while(!st)
{
printf("\n输入金额:")
scanf("%d",&Money)
getchar()
st=GetCharge(Sum,Money)
}
printf("\n----------------购买结束------------\n")
printf("\n")
printf("\n")
printf("\n")
}
}
//----------------------------------------------------
bool GetCharge(int Sum,int Money)
{
int ChargeNum[4]
for(int i=0i<4i++)
{
ChargeNum[i]=0
}
if(Sum>Money)
{
printf("\n金额不够,请重新输入.....")
return false
}
else if(Sum==Money)
{
printf("\n余额为0")
return true
}
else
{
int Result=Money-Sum
Getsmalcharge(Result,ChargeNum)
printf("\n余额为%d元,应找零\神袜n1 元%d张\n2 元%d张\n5 元%d张\n10元%d张\n",Result,ChargeNum[0],ChargeNum[1],ChargeNum[2],ChargeNum[3])
}//end if
return true
}
//------------------------------------
void Getsmalcharge(int Money,int *ChargeNum)
{
if(Money<0)
return
int Sum=Money
int charge[4]={1,2,5,10}
ChargeNum[3]=Sum/charge[3]
Sum=Sum%charge[3]
ChargeNum[2]=Sum/charge[2]
Sum=Sum%charge[2]
ChargeNum[1]=Sum/charge[1]
Sum=Sum%charge[1]
ChargeNum[0]=Sum/charge[0]
Sum=Sum%charge[0]
}
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)