•       使用动态链表完成一个简单的商品库存信息管理系统。

•       商品信息包括如下字段:商品号、商品名称、商品库存

•       函数

create:接收用户输入的商品号和商品名称的信息,建立链表;库存初始化为0,没有进货之前不允许销售;商品号为0表示用户输入结束。本函数用于初始化,如果第二次被调用的时候,首先要执行destroy清除旧链表。

destroy:给定链表的头指针,删除链表的所有节点,并释放相应的空间。本函数在程序退出前应至少被调用一次。在调用此函数前,必须给予用户提示,使用户在删除前有反悔的机会。

sell:商品销售,由参数传入商品号和销售数量。如果不存在给定商品号的商品或销售数量大于相应商品的库存则出错;否则,从指定商品的库存中扣除相应的销售数量。当商品库存为0,则从链表中删除该商品。

stock:商品进货,由参数传入商品号和进货数量。如果不存在给定商品号的商品则在链表中插入新商品,并提示用户输入该商品名称;否则,增加指定商品的库存量。

list:列出所有商品的情况。

•       主程序

程序运行后,循环显示如下菜单:
1. 输入商品信息2. 销售3. 进货4. 列举商品信息5. 清除所有商品6.退出

根据用户的选择进一步提示用户输入并调用对应函数。

 //
//by coolxxx
//
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#include<math.h>
#define min(a,b) ((a)<(b)?(a):(b))
#define max(a,b) ((a)>(b)?(a):(b))
#define abs(a) ((a)>0?(a):(-(a)))
#define lowbit(a) (a&(-a))
#define sqr(a) ((a)*(a))
#define swap(a,b) ((a)^=(b),(b)^=(a),(a)^=(b))
#define eps (1e-8)
#define J 10000000
#define MAX 0x7f7f7f7f
#define PI 3.1415926535897
#define N 104
typedef long long LL;
int cas,cass;
int n,m,lll,ans;
int mark1,mark2,mark5;//mark1=1商品非空 mark2=1 已经进货 mark5=1已经清空
//typedef struct xxx xxx;
struct xxx
{
int num,sum;
char name[N];
struct xxx * next;
};
void destroy(struct xxx *h)
{
if(h->next==NULL)
{
mark1=;
mark5=;
puts("清除完毕");
return;
}
struct xxx *p=(struct xxx *)malloc(sizeof(struct xxx)*);
struct xxx *q=(struct xxx *)malloc(sizeof(struct xxx)*);
p=h->next;
while(p!=NULL)
{
q=p->next;
p=NULL;
free(p);
p=q;
}
h->next=NULL;
mark1=;
mark5=;
puts("清除完毕");
}
void create(struct xxx *h)
{
int xnum;
puts("请输入商品号和商品名称,以商品号为0结束");
while(scanf("%d",&xnum) && xnum)
{
struct xxx *p=(struct xxx *)malloc(sizeof(struct xxx)*);
p->next=h->next;
p->num=xnum;
p->sum=;
h->next=p;
scanf("%s",p->name);
}
mark1=;
mark5=;
}
void stock(struct xxx *h,int xnum,int xsum)
{
struct xxx *p=(struct xxx *)malloc(sizeof(struct xxx)*);
for(p=h->next;p!=NULL && p->num!=xnum;p=p->next);
if(p!=NULL)
{
p->sum+=xsum;
printf("进货完成,现在%d号商品库存为%d",p->num,p->sum);
return;
}
else
{
puts("商品不在清单内,现已加入清单,请输入商品名称");
struct xxx *p=(struct xxx *)malloc(sizeof(struct xxx)*);
p->next=h->next;
h->next=p;
p->num=xnum;
p->sum=xsum;
scanf("%s",p->name);
printf("进货完成,现在%d号商品库存为%d",p->num,p->sum);
}
mark2=;
}
void sell(struct xxx *h,int xnum,int xsum)
{
struct xxx *p=(struct xxx *)malloc(sizeof(struct xxx)*);
for(p=h->next;p!=NULL && p->num!=xnum;p=p->next);
if(p!=NULL)
{
if(p->sum<xsum)
{
puts("商品库存小于销售数量,请核对后再进行销售");
return;
}
p->sum-=xsum;
printf("销售完成,%d商品剩余%d库存",p->num,p->sum);
}
else
{
puts("商品不在货物清单内,请核对后再进行销售");
}
}
void list(struct xxx *h)
{
if(h->next==NULL)
{
puts("商品列表为空");
return;
}
puts("商品列表如下:");
struct xxx *p=(struct xxx *)malloc(sizeof(struct xxx)*);
for(p=h->next;p!=NULL;p=p->next)
{
printf("%-4d%-10s%-4d\n",p->num,p->name,p->sum);
}
puts("");
}
void work1(struct xxx *h)
{
if(mark1)
{
puts("当前商品列表非空,如果要生成商品列表需要先清空商品列表\n确定清空商品列表请输入1,取消请输入0");
scanf("%d",&cas);
if(cas==)
{
puts("您已取消清空列表");
return;
}
destroy(h);
}
puts("现在开始输入货物清单");
create(h);
}
void work2(struct xxx *h)
{
int xnum,xsum;
if(!mark2)
{
puts("商品还未进货,请先进货再进行销售");
return;
}
puts("请输入需要销售的商品号和销售数量");
scanf("%d%d",&xnum,&xsum);
sell(h,xnum,xsum);
}
void work3(struct xxx *h)
{
int xnum,xsum;
puts("请输入进货的商品号和商品数量");
scanf("%d%d",&xnum,&xsum);
stock(h,xnum,xsum);
}
void work4(struct xxx *h)
{
list(h);
}
void work5(struct xxx *h)
{
puts("即将删除所有商品!\n确定请输入1,取消请输入0");
scanf("%d",&cas);
if(cas==)
{
puts("您已取消删除所有商品");
return;
}
destroy(h);
}
int main()
{
#ifndef ONLINE_JUDGE
// freopen("1.txt","r",stdin);
// freopen("2.txt","w",stdout);
#endif
int i,j;
struct xxx *head=(struct xxx *)malloc(sizeof(struct xxx)*);
head->next=NULL;
while()
{
puts("1.输入商品信息\n2.销售\n3.进货\n4.列举商品信息\n5.清除所有商品\n6.退出");
scanf("%d",&cass);
if(cass==)work1(head);
else if(cass==)work2(head);
else if(cass==)work3(head);
else if(cass==)work4(head);
else if(cass==)work5(head);
else if(cass==)
{
if(mark5)break;
puts("您还未清除所有商品,请清除所有商品后再退出");
}
puts("\n");
}
return ;
}
/*
// //
*/

XMU C语言程序设计实践(5)的更多相关文章

  1. XMU C语言程序设计实践(1)

    题目: 任务1:英雄出世 炎热的夏天午后,小明正在百无聊赖地写c语言程序.忽然,电脑屏幕一阵抖动,浮现下面18×18个看似杂乱无章的数字: 32,  32,  32,  32,  32,  32,  ...

  2. XMU C语言程序设计实践(4)

    以下实验二选一. 1.使用队列实现迷宫算法,找到最短路径. 2.实现顺序队列和链队列的所有基本操作,InitQueue(&Q):DestroyQueue(&Q):ClearQueue( ...

  3. XMU C语言程序设计实践(3)

    问题描述: 以一个n的长方阵表示迷宫,0和1分别表示迷宫中的通路和障碍,设计一个程序,对任意设定的迷宫,求出一条从入口到出口的通路,或得出没有通路的结论. 对于本问题需用栈实现“穷举求解”算法,即:从 ...

  4. XMU C语言程序设计实践(2)

    任务一:颠倒的世界 小明最近突然喜欢倒着写字,写出来的句子全是颠倒的,也就是把一句话里的字符全都逆序写,譬如“I Love This Game!”,他就偏偏要写成“!emaG sihT evoL I” ...

  5. 第二章 C语言编程实践

    上章回顾 宏定义特点和注意细节 条件编译特点和主要用处 文件包含的路径查询规则 C语言扩展宏定义的用法 第二章 第二章 C语言编程实践 C语言编程实践 预习检查 异或的运算符是什么 宏定义最主要的特点 ...

  6. C语言程序设计课程总结

    第一次教授C语言程序设计课程,相比计算机组成原理.arm体系结构等偏向硬件的课程,C的教学方式要灵活一些.计算机组成原理课程偏向理论,哈尔滨工业大学的计算机组成原理是国家精品课,增加了mooc+spo ...

  7. 【任务】Python语言程序设计.MOOC学习

    [博客导航] [Python导航] 任务 18年11月29日开始,通过9周时间跨度,投入约50小时时间,在19年1月25日之前,完成中国大学MOOC平台上的<Python语言程序设计>课程 ...

  8. 2019年春季学期《C语言程序设计II》助教注意事项

    本学期<C语言程序设计II>课程安排 理论课时24(1-12周),实验课时8(13周),课程设计课时16(14-15周) 理论课教学内容 附:教学进度表 本学期实验课和课程设计参考教材 & ...

  9. C语言程序设计实习报告

    C语言程序设计实习报告 简介 语言实践心得体会范文在科技高度发展的今天,计算机在人们之中的作用越来越突出.而c语言作为一种计算机的语言,我们学习它,有助于我们更好的了解计算机,与计算机进行交流,因此, ...

随机推荐

  1. 最小的图灵完备语言——BrainFuck

    最小的图灵完备语言--BrainFuck 图灵完备性(Turing completness) 在可计算性理论(computability theory)中,图灵等价指的是:对于两个计算机A和B,如果A ...

  2. 刷题总结——选课(ssoj树形dp+记忆化搜索+多叉树转二叉树)

    题目: 题目描述 学校实行学分制.每门的必修课都有固定的学分,同时还必须获得相应的选修课程学分.学校开设了 N(N<300)门的选修课程,每个学生可选课程的数量 M 是给定的.学生选修了这M门课 ...

  3. Chapter 4-5

    1.切片对象  sequence[起始索引:结束索引:步进值] 对象身份的比较 is /is not 2.eval()参数是一个字符串, 可以把这个字符串当成表达式来求值. >>>x ...

  4. echarts 图表用例

    参考博客:http://blog.csdn.net/verne_feng/article/details/51731653 http://echarts.baidu.com/echarts2/doc/ ...

  5. AC日记——A+B Problem(再升级) 洛谷 P1832

    题目背景 ·题目名称是吸引你点进来的 ·实际上该题还是很水的 题目描述 ·1+1=? 显然是2 ·a+b=? 1001回看不谢 ·哥德巴赫猜想 似乎已呈泛滥趋势 ·以上纯属个人吐槽 ·给定一个正整数n ...

  6. 高性能mysql之schema与数据类型优化

    1.数据类型 http://www.cnblogs.com/YDDMAX/p/4937770.html

  7. [ZJOI 2018] 线图

    别想多了我怎么可能会正解呢2333,我只会30分暴力(好像现场拿30分已经不算少了2333,虽然我局的30分不是特别难想). 首先求k次转化的点数显然可以变成求k-1次转化之后的边数,所以我们可以先让 ...

  8. NOIP临考经验(转)

    [COGS]NOIP临考经验 1.  提前15分钟入场,此时静坐调整心态,适当的深呼吸 2.  打开编辑器并调整为自己喜欢的界面 3.  熟悉文件目录,写好准确无误的代码模板 4.  压缩包或许还不能 ...

  9. IO重定向

    http://tldp.org/LDP/abs/html/io-redirection.html http://mp.weixin.qq.com/s/JMHDutEG4R0hEaXrYPmCGg 每个 ...

  10. 【Android开发—智能家居系列】(四):UDP通信发送指令

    思路回顾 [1]手机连接WIFI模块 [2]UDP通信对WIFI模块发送指令,以和WIFI模块保持连接状态 [3]UDP通信对WIFI模块发送指令,让其搜索可用的无线网,返回WIFI列表 [4]发送指 ...