用c语言设计一个超市管理系统程序,要求能添加商品,能查询商品,能购买商品,能展示商品。

用c语言设计一个超市管理系统程序,要求能添加商品,能查询商品,能购买商品,能展示商品。,第1张

超市管理系统

*/

#include<stdio.h>

#include<string.h>

//欢迎界面//

void welcome()

//功能浏览//

void mainMenu()

//购物结算//

void saleCalc()

//进货管理//

void addGoods()

//修改信息

void updateGoods()

//显示商品//

void showGoods()

//删除商品//

void deleteGoods()

//查询商品//

int searchGoods()

//购买结算

void saleCalc()

//更新库存//

void updateGoodsNum(int number,char name[50])

//结构体

struct goods

{

char name[50]//商品名称

int num//商品数量

float price//商品价格

}

int count//商品种类数量

goods list[1000]//声明goods的变量数组

char name[50]

void main()//主函数

{

int num

welcome()

do{

mainMenu()

printf("请选择功能:")

scanf("%d",&num)

switch(num)

{

case 1:

saleCalc()

break

case 2:

addGoods()

break

case 3:

updateGoods()

break

case 4:

showGoods()

break

case 5:

deleteGoods()

break

case 0:

break

}

}while(num!=0)

}

void welcome()//欢迎界面

{

printf("-------------------------------------------------------------------------\n")

printf("****************欢迎使用超市管理系统*******************\n")

printf("-------------------------------------------------------------------------\n")

}

void mainMenu()//功能浏览界面

{

printf("****1.购物结算****\n")

printf("****2.进货管理****\n")

printf("****3.修改商品****\n")

printf("****4.显示商品****\n")

printf("****5.删除商品****\n")

printf("****0.退出系统****\n")

}

//查询信息

int searchGoods()//查询商品信息

{

printf("请输入您要购买商品的名字:")

scanf("%s",name)

for(int i=0i<counti++)

{

if(stricmp(name,list[i].name)==0)

{

return 1

}

else

{

printf("对不起了,没有找到%c商品\n",name)

return -1

}

}

}

//购物结算

void saleCalc()//购物结算

{

int number,i,s

float priceGoods=0,sum=0,money

char c=' '

s=searchGoods()

do

{

if(s==-1)

{

s=searchGoods()

}else

{

printf("该商品b存在")

for(i=0i<counti++)

{

if(strcmp(name,list[i].name)==0)

{

priceGoods=list[i].price

break

}

}

printf("请输入您要购买的数量:")

scanf("%d",&number)

sum=priceGoods*number

updateGoodsNum(-number,name)

printf("是否继续购买(y/n)")

fflush(stdin)

c=getchar()

}

}while(c=='y'||c=='Y')

printf("本次消费总金额为:%.2f",sum)

printf("请输入您的实际付款金额:")

scanf("%f",&money)

printf("找零:%.2f\n",money-sum)

}

//进货管理

void addGoods() //商品的录入

{

int i=0

char c=' '

do

{

printf("请输入商品的名称:")

fflush(stdin)

scanf("%s",list[i].name)

printf("请输入商品的数量:")

scanf("%d",&list[i].num)

printf("请输入商品的单价:")

scanf("%f",&list[i].price)

printf("是否继续(y/n)")

fflush(stdin)

c=getchar()

}while(c=='Y'||c=='y')

}

//更新库存

void updateGoodsNum(int number,char name[50])

{

int i

for(i=0i<counti++)

{

list[i].num+=number//list[i].num=list[i].num+number

}

}

//显示货物信息

void showGoods()

{

printf("商品名称\t数量\t单价\n")

for(int i=0i<counti++)

{

printf("%s\t%d\t%.2f\n",list[i].name,list[i].num,list[i].price)

}

}

//修改商品信息

void updateGoods()

{

int i

printf("请输入您要修改商品的名字:")

scanf("%s",&name)

for(i=0i<counti++)

{

if(strcmp(name,list[i].name)==0)

{

printf("请输入新的商品名字:")

scanf("%s",list[i].name)

printf("请输入您要修改商品的数量:")

scanf("%d",list[i].num)

printf("请输入您要修改商品的单价:")

scanf("%f",list[i].price)

}

else

{

printf("对不起,没有找到该商品信息!")

}

}

}

//删除商品信息

void deleteGoods()

{

int index=-1

printf("请输入您要删除的商品名字:")

scanf("%s",name)

for(int i=0i<counti++)

{

if(strcmp(name,list[i].name)==0)

{

index=i

}

}if(index==-1)

{

printf("对不起!没有找到您要删除的商品信息!")

}

else{

for(int i=indexi<counti++)

{

list[i]=list[i+1]

}

}

}

按照你题意,代码如下:(你提问题没有用编程模板,我这里代码只能直接贴,原格式都没了,你只能自己排版了 。)

(初始化数据的那段输入,只为演示,不要可以删除!)。

#include <stdio.h>

#include <malloc.h>

#include <string.h>

#include <conio.h>

#include <windows.h>

typedef struct stock

{

int id

char name[10]

int stNum

struct stock *next

}STK

void addByName(STK **stkHead,STK **stkTail,STK *stkNew,char *name)//向指定名称商品后添加节点,不存在添加在表头

void meError(void *p)//内存申请失败

int add2Tail(STK **stkHead,STK **stkTail,STK *stkNew)//向链表尾部添加新节点, 成功返回1,失败返回0

int add2Head(STK **stkHead,STK **stkTail,STK *stkNew)//向链表头部添加新节点, 成功返回1,失败返回0

STK *newSTK()//创建新节点,新建节点

STK *initSTK()//初始化链表

void printSTK(STK *stkHead)

void tjAll(STK *stkHead)//统计总库存数量

int main()

{

int i

char name[10]

STK *stkHead=initSTK(),*stkTail=NULL

//----------为了测试,我在下面这段初始了3个节点,不需要可以删除

i=3

printf("请输入3个节点作为初始测试数据(不需要可以删除该段代码):\n")

while(i--)

if(!add2Tail(&stkHead,&stkTail,newSTK()))

printf("添加节点失败,请重新输入!\n"),i++

while(1)

{

system("cls")

printf("1、显示当前所有商品信息\n")

printf("2、统计商品总库存\n")

printf("3、向指定商品名后添加商品(名称不存在,将插入表头)\n")

scanf("%d",&i)

switch(i)

{

case 1:system("cls")printSTK(stkHead)break

case 2:system("cls")tjAll(stkHead)break

case 3:system("cls")printf("请输入要插入位置商品的名称:"),scanf("%s",name)addByName(&stkHead,&stkTail,newSTK(),name)break

}

printf("................按任意键继续!\n")

getch()

}

return 0

}

STK *initSTK()//初始化链表

{

STK *stkHead=(STK *)malloc(sizeof(STK))

meError(stkHead)

stkHead->next=NULL

return stkHead

}

void addByName(STK **stkHead,STK **stkTail,STK *stkNew,char *name)//向指定名称商品后添加节点,不存在添加在表头

{

int flag=0

STK *stkh=*stkHead

while(stkh->next)

{

if(strcmp(stkh->next->name,name)==0)

{

stkNew->next=stkh->next->next

stkh->next->next=stkNew

flag=1

break

}

stkh=stkh->next

}

if(flag)

printf("新的商品已成功添加到商品%s后面!\n",name)

else

{

add2Head(stkHead,stkTail,stkNew)

printf("%s不存在!新的商品已添加到表头!\n",name)

}

}

void printSTK(STK *stkHead)

{

printf("当前库存情况:\n")

while(stkHead->next)

{

printf("商品编号:%04d,商品名称:%9s,商品库存:%d\n",stkHead->next->id,stkHead->next->name,stkHead->next->stNum)

stkHead=stkHead->next

}

}

void tjAll(STK *stkHead)//统计总库存数量

{

int cnt=0,sum=0

while(stkHead->next)

{

cnt++

sum+=stkHead->next->stNum

stkHead=stkHead->next

}

printf("当前库存共%d种商品,总计库存数量%d\n",cnt,sum)

}

STK *newSTK()//创建新节点,新建节点

{

static int stockID=1//商品ID唯一,每次使用,自增

STK *stkNew=(STK *)malloc(sizeof(STK))

meError(stkNew)

stkNew->next=NULL

stkNew->id=stockID++

printf("请输入商品名称:")

scanf("%s",stkNew->name)

printf("请输入商品库存:")

scanf("%d",&stkNew->stNum)

return stkNew

}

int add2Tail(STK **stkHead,STK **stkTail,STK *stkNew)//向链表尾部添加新节点, 成功返回1,失败返回0

{

if(!(*stkHead))

return 0

if(!((*stkHead)->next))

add2Head(stkHead,stkTail,stkNew)

else

(*stkTail)->next=stkNew

*stkTail=stkNew

return 1

}

int add2Head(STK **stkHead,STK **stkTail,STK *stkNew)//向链表头部添加新节点, 成功返回1,失败返回0

{

if(!(*stkHead))

return 0

if(!((*stkHead)->next))

(*stkTail)=stkNew

stkNew->next=(*stkHead)->next

(*stkHead)->next=stkNew

return 1

}

void meError(void *p)//内存申请失败

{

if(p==NULL)

{

printf("\n异常:内存申请失败!回车结束程序!\n")

while(getch()!='\r')

exit(0)

}

}


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

原文地址:https://54852.com/bake/11880532.html

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

发表评论

登录后才能评论

评论列表(0条)

    保存