65,186
社区成员




#include<stdio.h>
#include<stdlib.h>
enum BOOL{False,True};
#define max 10
typedef struct dnode /*定义双向链表结构体*/
{int number; /*货物编号*/
char name[max]; /*货物名称*/
int counter; /*货物数量*/
struct dnode *prior,*next; /*定义两指针,分别指向其前驱和后继*/
}dnode,*dpointer;
void Initdnode(dpointer &);
BOOL increasednode(dpointer &,int);
BOOL Findkeyworddnode(dpointer &,char*,int);
BOOL Findorderdnode(dpointer &,int);
BOOL Deletednode(dpointer &,int);
void DnodePrint(dpointer);
int main(){
dpointer d;
BOOL temp;
int num,loc,flag=1;
char j,*ch;
//---------------------程序解说-----------------------
printf("本程序为仓库存储系统。\n");
printf("可以实现按顺序和货物名称查询仓库存储情况,也可以增加或删除货物。\n");
//----------------------------------------------------
Initdnode(d);
DnodePrint(d);
while(flag){
printf("请选择:\n");
printf("1.显示所有货物信息\n");
printf("2.增加新的货物\n");
printf("3.按货物名称查询仓库存储情况\n");
printf("4.按顺序查询仓库存储情况\n");
printf("5.删除已有的货物\n");
printf("6.退出程序\n");
scanf(" %c",&j);
switch(j){
case '1':DnodePrint(d);
break;
case '2':{
printf("请输入货物种类数量。\n");
printf("例如:6\n");
scanf("%d",&loc);
temp=increasednode(d,loc);
if(temp==False)
printf("安置失败!\n");
else printf("安置成功!\n");
DnodePrint(d);
break;
}
case '3':if(d->next=NULL)
printf("该仓库为空!\n");
else{
printf("请输入要查询的货物的名称:\n");
scanf(" %c",&ch);
temp=Findkeyworddnode(d,ch,loc);
if(temp==False)
printf("没有找到该货物的相关信息!\n");
else printf("该货物的信息为:%d \n",loc);
}
break;
case '4':if(d->next=NULL)
printf("该仓库为空!\n");
else{
printf("请输入所要查询的货物的编码:");
scanf("%d",&loc);
temp=Findorderdnode(d,loc);
if(temp==False)
printf("没有找到该货物的相关信息!\n");
else printf("该货物的信息为:%d \n",loc,ch);
}
break;
case '5':printf("请输入所要删除的货物的编码:");
scanf("%d",&loc);
temp=Deletednode(d,loc);
if(temp==False)
printf("删除失败!\n");
else printf("成功删除了一个货物:%c \n",ch);
DnodePrint(d);
break;
default:flag=0;
printf("程序结束,按任意键结束!\n");
}
}
getchar();
return 0;
}
void Initdnode(dpointer &d){
d=(dpointer)malloc(sizeof(dnode));
d->prior=NULL;
d->next=NULL;
}
BOOL increasednode(dpointer &d,int n){
int i;
for(i=n;i>0;--i){
dpointer t;
t=(dpointer)malloc(sizeof(dnode));
if(!t)
{return False;}
else{
t->next=d->next;
t->prior=d;
d->next=t;
printf("请输入货物编号,货物名称和货物数量\n");
printf("例如,3 叶欣 10\n");
scanf("%d%s%d", &t->number, t->name, &t->counter);
return True;}
}
}
BOOL Findkeyworddnode(dpointer &m,char *e,int p){
while((m->name!=e)||(m==NULL))
m=m->next;
if(m->name!=e){
printf("没有查找到相对应的货物!请重新输入!\n");
return False;
}
else{
p=m->number;
printf("已找到相对应的货物!\n");
return True;
}
}
BOOL Findorderdnode(dpointer &m,int e){
while((e!=m->number)&&(m->number<=e))
m=m->next;
if(m->number!=e){
printf("没有查找到相对应的货物!请重新输入!\n");
return False;}
else{
printf("已找到相对应的货物!\n");
return True;
}
}
BOOL Deletednode(dpointer &m,int n){
dnode d;
while((n!=m->number)&&(m->number<=n))
m=m->next;
if(m->number!=n){
printf("没有查找到相对应的货物!请重新输入!\n");
return False;}
else{
printf("已找到相对应的货物!\n");
return True;
}
d.prior->next=d.next;
d.next->prior=d.prior;
}
void DnodePrint(dpointer m){
dpointer q;
q=m->next;
printf("仓库中的所有货物:");
while(q!=NULL){
printf("d","%c","d",q->number,q->name,q->counter);
q=q->next;
}
printf("\n");
}
单步调试和设断点调试(VS IDE中编译连接通过以后,按F10或F11键单步执行,按Shift+F11退出当前函数;在某行按F9设断点后按F5执行停在该断点处。)是程序员必须掌握的技能之一。