库存管理系统实现 C语言课设

  1 #include <stdio.h>
  2 #include <stdlib.h>
  3 #include <string.h>
  4 
  5 //定义一个商品结构体
  6 typedef struct sp
  7 {
  8     char no[12];     //商品编号
  9     char name[40];   //名称
 10     int workload;    //库存量
 11     struct sp *next; //指向下一节点的指针
 12 } SP;
 13 
 14 //函数声明放在这里
 15 void ListCreate(SP *L, int n); //创建商品链表节点
 16 void LIstSearch(SP *L);        //查找商品信息
 17 void ListModify(SP *L);        //修改商品信息
 18 void ListInsert(SP *L);        //插入商品信息
 19 void ListDelete(SP *L);        //删除商品信息
 20 void Input(SP *p, int i);      //输入商品信息
 21 void SumSp(SP *L);             //统计商品的库存总量
 22 void Sort(SP *L);              //对每类商品的库存量进行排名
 23 void Menu();                   //考试报名管理系统的菜单
 24 
 25 //商品库存管理系统的主函数入口
 26 int main()
 27 {
 28     int item, n;                  //item用于接收输入的命令,n用于接收输入的商品人数
 29     SP *L = NULL;                 //初始化一个头节点
 30     L = (SP *)malloc(sizeof(SP)); //为头节点开辟内存空间
 31     L->next = NULL;               //将头节点的指针域置空
 32     do
 33     {
 34         Menu(); //菜单
 35         printf("请输入相应的数字,进行相应的操作:\n");
 36         scanf("%d", &item);
 37         system("cls");
 38         switch (item)
 39         {
 40         case 1:
 41             printf("请输入您要录入的商品数目:");
 42             scanf("%d", &n);
 43             ListCreate(L, n); 
 44             getchar();
 45             printf("\n请按任意键返回主菜单\n");
 46             getchar();
 47             system("cls");
 48             break;
 49         case 2:
 50             LIstSearch(L); //查找商品信息
 51             getchar();
 52             printf("\n请按任意键返回主菜单\n");
 53             getchar();
 54             system("cls");
 55             break;
 56         case 3:
 57             ListModify(L); //修改商品库存信息
 58             getchar();
 59             printf("\n请按任意键返回主菜单\n");
 60             getchar();
 61             system("cls");
 62             break;
 63         case 4:
 64             ListDelete(L); //删除商品信息
 65             getchar();
 66             printf("\n请按任意键返回主菜单\n");
 67             getchar();
 68             system("cls");
 69             break;
 70         case 5:
 71             ListInsert(L); //插入商品信息
 72             getchar();
 73             printf("\n请按任意键返回主菜单\n");
 74             getchar();
 75             system("cls");
 76             break;
 77         case 6:
 78             SumSp(L);
 79             getchar();
 80             printf("\n请按任意键返回主菜单\n");
 81             getchar();
 82             system("cls");
 83             break;
 84         case 7:
 85             Sort(L);
 86             getchar();
 87             printf("\n请按任意键返回主菜单\n");
 88             getchar();
 89             system("cls");
 90             break;
 91         case 0: //退出商品库存管理系统
 92             printf("即将退出商品库存管理系统.....");
 93             exit(0);
 94         default:
 95             printf("您输入的指令不正确,请重新输入");
 96         }
 97         printf("\n\n");
 98     } while (item);
 99     return 0;
100 }
101 
102 //创建链表,将新生成的节点插入到链表的表头
103 void ListCreate(SP *L, int n)
104 {
105     int i;
106     for (i = 0; i < n; i++)
107     {
108         SP *p;
109         //将新生成的节点插入到链表中
110         p = NULL;
111         p = (SP *)malloc(sizeof(SP));
112         Input(p, i);
113         p->next = L->next;
114         L->next = p;
115     }
116     printf("录入成功!");
117 }
118 
119 //查找商品库存量
120 void LIstSearch(SP *L)
121 {
122     char n[40];
123     SP *p = L->next;
124     if (p == NULL)
125         printf("数据为空,无法查找!");
126     else
127     {
128         printf("请输入您要查找的商品名称:");
129         scanf("%s", n);
130         while (strcmp(p->name, n) != 0)
131         {
132             p = p->next;
133             if (p == NULL)
134             {
135                 printf("没有找到相关信息\n");
136                 return;
137             }
138         }
139         printf("%s的库存量为%d\n",p->name,p->workload);
140     }
141 }
142 
143 //修改商品的库存量
144 void ListModify(SP *L)
145 {
146     int a;
147     char nam[40];
148     SP *p = L->next;
149     if (p == NULL)
150         printf("数据为空,无法修改!");
151     else
152     {
153         printf("请输入您修改的商品名称:");
154         scanf("%s",nam);
155         while(strcmp(p->name, nam) != 0)
156         {
157             p = p->next;
158             if (p == NULL)
159             {
160                 printf("没有找到相关信息\n");
161                 return;
162             }
163         }
164         printf("请输入您修改后的库存量:");
165         scanf("%d",&p->workload);
166         printf("修改成功");
167     }
168 }
169 
170 //删除商品信息
171 void ListDelete(SP *L)
172 {
173     char n[40];
174     SP *p = L->next, *pre = L; //定义p指针指向头节点的指向,定义pre指向头节点,pre始终指向p的前驱节点
175     if (p == NULL)
176         printf("数据为空,无法删除!");
177     else
178     {
179         printf("请输入您要删除的商品名称:");
180         scanf("%s", n);
181         while (strcmp(p->name, n) != 0)
182         {
183             pre = p;
184             p = pre->next;
185             if (p == NULL)
186             {
187                 printf("没有找到相关信息,无法删除\n");
188                 return;
189             }
190         }
191         pre->next = p->next;
192         free(p);
193         printf("删除成功");
194     }
195 }
196 
197 //插入商品库存的相关信息
198 void ListInsert(SP *L)
199 {
200     SP *s = NULL; //生成一个新节点s
201     s = (SP *)malloc(sizeof(SP));
202     printf("请输入商品的商品编号:");
203     scanf("%s", s->no);
204     printf("请输入商品的名称:");
205     scanf("%s", s->name);
206     printf("请输入商品的库存量:");
207     scanf("%d", &s->workload);
208     s->next = L->next;
209     L->next = s;
210     printf("插入成功!");
211 }
212 
213 //统计商品的库存总量
214 void SumSp(SP *L)
215 {
216     int sum=0;
217     SP *p=L->next;
218     while(p!=NULL)
219     {
220         sum+=p->workload;
221         p=p->next;
222     }
223     printf("商品的库存总量为%d\n",sum);    
224 }
225 
226 //对每类商品的库存量进行排名
227 void Sort(SP *L)
228 {
229     SP *p,*q,*tail,*l;
230     tail=NULL;
231     while((L->next->next) != tail)
232     {
233         p = L;
234         q = L->next;
235         while(q->next != tail)
236         {
237             if((q->workload) > (q->next->workload))
238             {
239                 p->next = q->next;
240                 q->next = q->next->next;
241                 p->next->next = q;
242                 q = p->next;
243             }
244             q = q->next;
245             p = p->next;
246         }
247         tail = q;
248     }
249     printf("商品库存量从小到大结果如下:\n");
250     l=L->next;
251     while(l!=NULL)
252     {
253         if(l->next!=NULL)
254             {
255                 printf("%s(%d)->",l->name,l->workload);
256                 l=l->next;
257             }
258         else
259         {
260             printf("%s(%d)",l->name,l->workload);
261             l=l->next;
262         }
263     }
264 }
265 //输入商品库存的相关信息
266 void Input(SP *p, int i)
267 {
268     printf("请输入第%d个商品的商品编号:", i + 1);
269     scanf("%s", p->no);
270     printf("请输入第%d个商品的名称:", i + 1);
271     scanf("%s", p->name);
272     printf("请输入第%d个商品的库存量:", i + 1);
273     scanf("%d", &p->workload);
274 }
275 
276 //商品库存管理系统的菜单
277 void Menu()
278 {
279     printf("\n\n");
280     printf("\t\t\t===================商品库存管理系统======================\n");
281     printf("\t\t\t* 作者:XXX  班级:XXXXXXXXXXX  学号:XXXXXXXXXX           *\n");
282     printf("\t\t\t*                                                       *\n");
283     printf("\t\t\t*          1>. 录入商品库存信息                         *\n");
284     printf("\t\t\t*          2>. 查找某个商品的库存量                     *\n");
285     printf("\t\t\t*          3>. 修改某个商品的库存量                     *\n");
286     printf("\t\t\t*          4>. 删除某个商品库存相关信息                 *\n");
287     printf("\t\t\t*          5>. 插入某个商品的相关信息                   *\n");
288     printf("\t\t\t*          6>. 统计商品的库存总量                       *\n");
289     printf("\t\t\t*          7>. 对每类商品的库存量排名                   *\n");
290     printf("\t\t\t*          0>. 退出管理系统                             *\n");
291     printf("\t\t\t*                                        欢迎使用本系统!*\n");
292     printf("\t\t\t========================================================\n");
293     printf("\t\t\t输入选项,按回车进入选项:                                 \n");
294 }

 

posted @ 2022-03-25 13:08  王回甘  阅读(415)  评论(0编辑  收藏  举报