1 /*货物管理系统(数据结构链式表)*/ 2 #include<string.h> 3 #include<stdio.h> 4 #include<stdlib.h> 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<x.num) 136 { 137 printf("\n该货物数量不足,仅剩%d。是否购买\n",p->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 else 147 { 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 do 173 { 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 else 195 { 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 }