重庆分公司,新征程启航
为企业提供网站建设、域名注册、服务器等服务
#includestdio.h
10年积累的成都做网站、网站制作经验,可以快速应对客户对网站的新想法和需求。提供各种问题对应的解决方案。让选择我们的客户得到更好、更有力的网络服务。我虽然不认识你,你也不认识我。但先网站设计后付款的网站建设流程,更有迎江免费网站建设让你可以放心的选择与我们合作。
#includestdlib.h
#includestring.h
#includemalloc.h
#define max 32
int ifempty=0;//标志,判断链表是无否为空
typedef struct dnode /* 定义双向链表结构体 */
{
int number; /* 货物编号 */
char name[max]; /* 货物名称 */
int counter; /* 货物数量 */
struct dnode *prior, *next;
/* 定义两指针,分别指向其前驱和后继 */
}dlnode;
dlnode *create(dlnode *L);
dlnode *input(dlnode *L);
dlnode *output(dlnode *L);
dlnode * outnum(dlnode *L);
dlnode * outname(dlnode *L);
dlnode *current(dlnode *L);
void search(dlnode *L);
void print(dlnode *L);
void searchnum(dlnode *L);
void searchname(dlnode *L);
void display(dlnode *L) ;
void main()
{
int x;
dlnode *L;
if(!(L=(dlnode *)malloc(sizeof(dlnode)))) //分配空间
{
printf("\n");
exit(1);
}
create(L);///调用函数,创建头节点
while(1)
{////////////////////////主菜单///////////////////////////
printf(" ============================\n");
printf(" 1. 货物出库和入库\n");
printf(" 2. 查找货物表\n");
printf(" 3. 显示仓库货物表\n");
printf(" 4. 输出到文件\n");
printf(" 0. 退出\n");
printf(" =============================\n");
printf(" 选择0--3:");
scanf("%d",x);
switch(x)
{
case 2:search(L);break;//调用查找函数
case 1:current(L);break;//调用入库出库函数
case 3:display(L);break;//调用显示输出函数
case 4:print(L);break;//调用打印函数
case 0:printf("\n bye!see you!\n");
getchar();getchar();exit(0);//退出程序
default:printf("\n Enter erreor!please input 0--4!");
getchar();getchar();
}
}
}
dlnode *create(dlnode *L)//创建链表头节点
{
printf(" 欢迎使用我的仓库管理系统");
getchar();
ifempty=0;
///////初始化头节点的值////////
L-next=NULL;L-prior=NULL;
L-number=L-counter=0;
strcpy(L-name," ");
return L;
}
void search(dlnode *L) ///查找的主要菜单
{
int y;
if(ifempty==0)
{
printf("没有输入货物!\n");
getchar();getchar();
return;
}
else
{
while(1)
{
printf("=====================\n");
printf("1.按编号查询\n");
printf("2.按货物名称查询\n");
printf("0.返回上一层\n");
printf("====================\n");
printf("选择0--2:");
scanf("%d",y);
switch(y)
{
case 1:searchnum(L);break;//调用按编号查找的函数
case 2:searchname(L);break;//调用按名称查找的函数
case 0:return;//返回
default:printf("enter error!Please input 0--2!\n\n");
getchar();getchar();printf("\n\n");
}
}
}
}
void searchnum(dlnode *L)///按编号查找的函数
{
int num,flag=0;//flag为是否找到的标志
dlnode *head=L;
if(ifempty==0)
{
printf("没有货物被输入\n");
getchar();getchar();
return;
}
printf("输入你要查找的货物编号:\n");
scanf("%d",num);
while((L=L-next)!=head)
{
if(L-number==num)
{ flag=1;//flag为1时表示找到
printf("找到指定编号货物 \n");
printf("\n编号:%d\n",L-number);
printf("名称:%s\n",L-name) ;
printf("数量:%d\n\n",L-counter);
}
}
if(flag==0)//flag为0时表示没有找到
printf("没有找到指定编号货物,请查看是否还有货物。\n");
getchar();getchar();
}
void searchname(dlnode *L)//按名称查找的函数
{
int flag=0;//flag为是否找到的标志
char na[32];
dlnode *head=L;
if(ifempty==0)
{
printf("没有货物被输入\n");
getchar();getchar();
return;
}
printf("输入你要查找的货物名称\n");
scanf("%s",na);
while((L=L-next)!=head)
{
if(strcmp(L-name,na)==0)
{ flag=1;//flag为1时表示找到
printf("找到指定名称货物 \n");
printf("\n编号:%d\n",L-number);
printf("名称:%s\n",L-name) ;
printf("数量:%d\n\n",L-counter);
}
}
if(flag==0)//flag为0时表示没有找到
printf("没有找到指定编号货物,请查看是否还有货物。\n\n");
getchar();getchar();
}
dlnode *current(dlnode *L)//货物出库入库函数
{
int y;
while(1)
{
printf("========================\n");
printf(" 1.货物入库\n");
printf(" 2.货物出库\n");
printf(" 0.返回上一层\n");
printf("========================\n");
printf(" 选择0--2:");
scanf("%d",y);
switch(y)
{
case 1:input(L);break;//调用入库函数
case 2:output(L);break;//调用出库函数
case 0:return(L);//返回上一层
default:printf("enter error!Please input 0--2!");
getchar();getchar();
printf("\n\n");
}
}
}
dlnode *input(dlnode *L)//定义入库函数
{
dlnode *in,*head;
head=in=(dlnode *)malloc(sizeof(dlnode));//分配空间
head=L;
printf("\n请输入货物数据:\n");
printf("编号:");scanf("%d",in-number);
printf("名称:");scanf("%s",in-name);
printf("数量:");scanf("%d",in-counter);
if(L-next==NULL) //如果只有头节点,
{ //把刚输入的in节点
L-next=in; //跟在头节点后面
L-prior=in; //
in-next=L; //
in-prior=L; //
ifempty++; //ifempty加1
}
else
{//如果当前L的下一个节点不是头节点
while((L=L-next)!=head)
{//如果输入的数大于L-number,则插到L的前面
if(L-numberin-number)
{
in-next=L;
in-prior=L-prior;
L-prior-next=in;
L-prior=in;
ifempty++; //ifempty加1
return(head);
}
}
//输入的编号比其它编号都小,则插到最后个节点,并首尾相连
head-prior-next=in;
in-prior=head-prior;
head-prior=in;
in-next=head;
ifempty++; //ifempty加1
}
return head;
}
dlnode *output(dlnode *L)//出库的函数
{
int y;
dlnode *head=L;
if(ifempty==0)//检测是否有货物输入
{
printf("没有货物输入系统\n");
getchar();getchar();
return(head);
}
while(1)
{
printf("=============\n");
printf("1.按编号出库\n");
printf("2.按名称出库\n");
printf("0.返回上一层\n");
printf("==============\n");
printf("选择0--2:");scanf("%d",y);
switch(y)
{
case 1:outnum(L);break;//调用按编号出库函数
case 2:outname(L);break;//调用按名称出库函数
case 0:return(L);
default:printf("enter error!Please input 0--2!");
getchar();getchar();printf("\n\n");
}
}
}
dlnode *outnum(dlnode *L)//按编号出库函数
{
int num;
dlnode *head=L;
printf("请输入出库货物的编号:");
scanf("%d",num);
while((L=L-next)!=head)
{//如果找到就删除节点
if(L-number==num)
{
L-prior-next=L-next;
L-next-prior=L-prior;
ifempty--; //ifempty减1
printf("编号为%d的货物成功出库",num);
getchar();getchar();
return head;
}
}
printf("没有此编号的货物,请查看是否还有货物。\n\n");
getchar();getchar();
return (head);
}
dlnode *outname(dlnode *L)//按名称出库函数
{
char na[32];
dlnode *head=L;
printf("请输入出库货物的名称:");
scanf("%s",na);
while((L=L-next)!=head)
{//如果找到就删除节点
if(strcmp(L-name,na)==0)
{
L-prior-next=L-next;
L-next-prior=L-prior;
ifempty--; //ifempty减1
printf("名称为%s的货物成功出库",na);
getchar();getchar();
return (head);
}
}
printf("没有此名称的货物,请查看是否还有货物。\n\n");
getchar();getchar();
return(head);
}
void display(dlnode *L)//显示货物清单
{
dlnode *head=L;
if(ifempty==0)
{
printf("没有货物可显示\n");
getchar();getchar();
return;
}
L=L-next;
do
{
printf("\n编号:%d\n",L-number);
printf("名称:%s\n",L-name) ;
printf("数量:%d\n\n",L-counter);
}while((L=L-next)!=head);
getchar();getchar();
}
void print(dlnode *L)
{
dlnode *head=L;
L=L-next;
char filename[max];
FILE *out;
if(ifempty==0)
{
printf("没有货物可输出\n");
getchar();getchar();
return;
}
printf("请输入文件名称:");
scanf("%s",filename);
if((out=fopen(filename,"w"))==NULL)
{
printf("打开文件失败!\n");
getchar();getchar();
return;
}
do{
fprintf(out,"编号:%d\n名称:%s\n数量:%d\n\n",L-number,L-name,L-counter);
}while((L=L-next)!=head);
printf("输出成功\n");getchar();getchar();
fclose(out);
}
C语言的库函数在LIB目录里面。
库函数是将函数封装入库,供用户使用的一种方式。方法是把一些常用到的函数编完放到一个文件里,供不同的人进行调用。调用的时候把它所在的文件名用#include加到里面就可以了。一般是放到lib文件里的。
扩展资料:
C语言的语句十分简单,如果要使用C语言的语句直接计算sin或cos函数,就需要编写颇为复杂的程序。因为C语言的语句中没有提供直接计算sin或cos函数的语句。又如为了显示一段文字,我们在C语言中也找不到显示语句,只能使用库函数printf。
C语言的库函数并不是C语言本身的一部分,它是由编译程序根据一般用户的需要编制并提供用户使用的一组程序。C的库函数极大地方便了用户,同时也补充了C语言本身的不足。事实上,在编写C语言程序时,应当尽可能多地使用库函数,这样既可以提高程序的运行效率,又可以提高编程的质量。
可以的,不要听楼上的。我保证编译通过,但必须是参数确定的函数。
如puts,getch,等等。但printf,scanf就不可以
例如:我将puts函数改为putoutStr
定义如下:
#define putoutStr(chrs) puts(chrs)
这样就可以象使用puts一样使用putoutStr了
而C++中的许多函数,也正是这样做的,他们都好几个名字,这都是开发的技巧
流程图我就不画了,大致流程:开始- 定义商店结构变量-调用入库函数录入库存商品信息-循环调用打印商品信息的函数及购买函数,显示库存商品菜单,用户输入购买信息完成购买
-单个水果购买数量不足,购买失败重新选择。
-总水果数量不足,提示关店结束程序。
#include stdio.h
#include string.h
#define goodsNum 10//商品总类最大个数
struct shop
{
char goodsName[goodsNum][11];
int goods[goodsNum];
int sum;
}sp;
int gn=0;//实际入库的商品总类个数
void storage();//入库函数
void updateSum();//更新总数
void printfGoods();//展示库存信息
int buy();//购买函数,返回1购买成功,返回0超出商品库存
int main()
{
storage();
while(1)
{
printfGoods();
if(sp.sum==0)
{
printf("所有水果已售空,关店休息!\n");
return 0;
}
if(buy())
printf("购买成功!\n");
}
return 0;
}
void printfGoods()
{
int i;
printf("--当前库存信息--\n");
printf("编号 名称 个数个\n");
for(i=0;ign;i++)
printf("%d、 %s %d个\n",i+1,sp.goodsName[i],sp.goods[i]);
}
void updateSum()
{
int i;
sp.sum=0;
for(i=0;ign;i++)
sp.sum=sp.sum+sp.goods[i];
}
void storage()
{
char name[10];
int n;
printf("--商品入库--\n");
while(1)
{
printf("请录入商品%d的名称及个数(名称不超10个字符,输入0结束录入):",gn+1);
scanf("%s",name);
if(name[0]=='0' name[1]==0)
break;
scanf("%d",n);
strcpy(sp.goodsName[gn],name);
sp.goods[gn]=n;
gn++;
}
updateSum();
}
int buy()
{
int id,n;
printf("请输入要购买的商品编号及数量:\n");
scanf("%d%d",id,n);
if(nsp.goods[id-1])
{
printf("购买失败,数量超出库存!\n");
return 0;
}
sp.goods[id-1]=sp.goods[id-1]-n;
updateSum();
return 1;
}