#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");
}
uj5u.com熱心網友回復:
自己單步除錯唄,一行行仔細看過去。比如 case '3':if(d->next=NULL)這種低級錯誤(少一個=)
代碼功能歸根結底不是別人幫自己看或講解或注釋出來的;而是被自己靜下心來花足夠長的時間和精力親自動手單步或設斷點或對執行到某步獲得的中間結果顯示或寫到日志檔案中一步一步分析出來的。
提醒:再牛×的老師也無法代替學生自己領悟和上廁所!
單步除錯和設斷點除錯(VS IDE中編譯連接通過以后,按F10或F11鍵單步執行,按Shift+F11退出當前函式;在某行按F9設斷點后按F5執行停在該斷點處。)是程式員必須掌握的技能之一。
uj5u.com熱心網友回復:
自己Debug下單步除錯一下,F10單步執行看看各個變數的值是否正確~轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/134118.html
標籤:基礎類
上一篇:IntelliSense: 回傳型別與重寫虛擬函式 "CWinThread::InitInstance" 的回傳型別 "BOOL" 既不相同,也不協變
