
*/
#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)
}
}
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)