货物管理系统(数据结构链式表)

  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 }

 

你可能感兴趣的:(数据结构)