1 /*货物管理系统(数据结构链式表)*/ 2 #include3 #include 4 #include 5 #define MAXSIZE 100 6 typedef struct 7 { 8 char name[11],no[11]; 9 int num; 10 }goods; 11 12 typedef struct node 13 { 14 goods data; 15 struct node *next; 16 }LNode; 17 18 /*录入货物信息*/ 19 void input(LNode *L) 20 { 21 int i,n; 22 LNode *r=L,*s; 23 goods x; 24 printf("\n请输入货物的种数:"); 25 scanf("%d",&n); 26 printf("\n请输入货物的名称、代号、数量:\n"); 27 printf("例:aaa 100 100\n"); 28 printf("货物名称 货物代号 货物数量\n"); 29 for(i=1;i<=n;i++) 30 { 31 scanf("%s%s%d",x.name,x.no,&x.num); 32 s=(LNode*)malloc(sizeof(LNode)); 33 s->data=x; 34 s->next=NULL; 35 r->next=s; 36 r=s; 37 } 38 } 39 40 /*浏览货物清单*/ 41 void run_over(LNode *L) 42 { 43 LNode *p=L->next; 44 printf("\n-----------货物清单-----------\n"); 45 printf("货物名称 货物代号 货物数量\n"); 46 while(p!=NULL) 47 { 48 printf("%5s%5s%4d\n",p->data.name,p->data.no,p->data.num); 49 p=p->next; 50 } 51 printf("--------------------------------\n"); 52 } 53 54 /*查找货物*/ 55 LNode* search(LNode *L,goods x) 56 { 57 LNode *p=L->next; 58 while(p!=NULL&&(strcmp(p->data.no,x.no)<0)) 59 { 60 p=p->next; 61 } 62 if(p!=NULL&&(strcmp(p->data.no,x.no)==0)) 63 { 64 return p; 65 } 66 else 67 { 68 return NULL; 69 } 70 } 71 72 /*插入货物信息*/ 73 void insert(LNode *L,goods x) 74 { 75 LNode *p=L,*s; 76 while(p->next!=NULL&&(strcmp(p->next->data.no,x.no)<0)) 77 { 78 p=p->next; 79 } 80 s=(LNode*)malloc(sizeof(LNode)); 81 s->data=x; 82 s->next=p->next; 83 p->next=s; 84 } 85 86 /*货物入库*/ 87 void storage(LNode *L,goods x) 88 { 89 LNode *p; 90 p=search(L,x); 91 if(p==NULL) 92 { 93 insert(L,x); 94 } 95 else 96 { 97 p->data.num=p->data.num+x.num; 98 } 99 }100 101 /*删除货物信息*/102 void del(LNode *L,goods x)103 {104 LNode *p=L,*s;105 while(p->next!=NULL&&(strcmp(p->next->data.no,x.no)<0))106 {107 p=p->next;108 }109 while(p->next!=NULL&&(strcmp(p->next->data.no,x.no)==0))110 {111 s=p->next;112 p->next=s->next;113 free(s);114 }115 }116 117 /*货物出库*/118 void out(LNode *L,goods x)119 {120 int j;121 LNode *p;122 p=search(L,x);123 if(p==NULL)124 {125 printf("\n仓库中无此货物!\n");126 }127 else if(p->data.num>x.num)128 {129 p->data.num=p->data.num-x.num;130 }131 else if(p->data.num==x.num)132 {133 del(L,x);134 }135 else if(p->data.num data.num);138 printf("(购买请按1,不购买请按0。)\n");139 printf("你的选择:");140 scanf("%d",&j);141 if(j==1)142 {143 del(L,x);144 printf("\n购买成功!欢迎下次光临!\n");145 }146 else147 {148 printf("\n欢迎下次光临!\n");149 }150 }151 }152 153 void menu()154 {155 printf("**********************************\n");156 printf("* 货物管理系统 *\n");157 printf("* 1-----------------录入货物信息 *\n");158 printf("* 2-----------------浏览货物清单 *\n");159 printf("* 3-----------------查找货物信息 *\n");160 printf("* 4---------------------货物入库 *\n");161 printf("* 5---------------------货物出库 *\n");162 printf("* 0-------------------------退出 *\n");163 printf("**********************************\n");164 }165 166 int main()167 {168 goods x;169 int sel;170 LNode *L,*p;171 L=(LNode *)malloc(sizeof(LNode));172 do173 {174 menu();175 printf("请输入你的选择(例:1):\n");176 scanf("%d",&sel);177 switch(sel)178 {179 case 1:printf("\n你选择了录入货物信息!\n\n");180 input(L);181 break;182 case 2:printf("\n你选择了浏览货物清单!\n\n");183 run_over(L);184 break;185 case 3:printf("\n你选择了查找货物信息!\n\n");186 printf("\n请输入要查找的货物的代号:\n");187 printf("代号为:");188 scanf("%s",x.no);189 p=search(L,x);190 if(p==NULL)191 {192 printf("\n该货物不存在。\n");193 }194 else195 {196 printf("\n货物名称 货物代号 货物数量\n");197 printf("%5s%5s%4d\n",p->data.name,p->data.no,p->data.num);198 }199 break;200 case 4:printf("\n你选择了货物入库!\n\n");201 printf("\n请输入要入库的货物的名称、代号、数量:\n");202 printf("货物名称 货物代号 货物数量\n");203 scanf("%s%s%d",x.name,x.no,&x.num);204 storage(L,x);205 break;206 case 5:printf("\n你选择了货物出库!\n\n");207 printf("\n请输入要出库的货物的名称、代号、数量\n");208 printf("货物名称 货物代号 货物数量\n");209 scanf("%s%s%d",x.name,x.no,&x.num);210 out(L,x);211 break;212 }213 }while(sel!=0);214 printf("感谢您的使用,再见!\n");215 return 0;216 }