自动售货机的程序代码怎么写? C语言大作业要交的,大路大神帮帮忙٩( 'ω' )و

自动售货机的程序代码怎么写? C语言大作业要交的,大路大神帮帮忙٩( 'ω' )و,第1张

整个程序的功能 :

商品入库  补货

商品购买  找零

还有乱禅巧携七八糟的一堆验证

数据只有结构链表存储,退出不保存,你要写文件或数据库保存,你自己写吧,写不动了。

演示看下图:

#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]

}


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/yw/12550713.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-26
下一篇 2023-05-26

发表评论

登录后才能评论

评论列表(0条)

保存