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 }

库存管理系统实现 C语言课设的更多相关文章

  1. C语言课设——电影院选票系统

    C语言课设--电影院选票系统 1.课题介绍 大家都爱看电影,现请参考一个熟悉电影票预订系统,实现C语言版的订票系统.了解订票如何实现的.系统主要有2类用户:管理员用户和顾客用户. 管理员用户 1.电影 ...

  2. C语言课设心得分享(一)

    今儿上完课设,老师果然讲的比较少,周四还不用去,看来还是学生自己折腾.我在做课设的过程中,攒了一些心得/体会,希望能和大家分享分享,也希望能一起探讨探讨.如果是我能回答的问题,我很乐意能够提供帮助. ...

  3. 快速开发框架,及库存管理系统,基于easyui框架和C#语言MVC、EntityFrameWork、T4模板技术。

    快速开发框架,及库存管理系统,基于easyui框架和C#语言MVC.EntityFrameWork.T4模板技术. 产品界面如下图所示: 源码结构: 开放全部源码,如有需要请联系,QQ:1107141 ...

  4. JAVA课设个人博客--多源数据教学管理系统

    JAVA课设个人博客--多源数据教学管理系统 1.团队课程设计博客链接 https://www.cnblogs.com/hq9-/p/10278470.html 2. 个人负责模块或任务说明 主要模块 ...

  5. C语课设心得分享(二)

    咱们今儿说说IDE的事儿. IDE是「集成开发环境」的意思,比如咱们常用的VC6.0,就是开发C语言所用的IDE的一种.对于IDE的认识,可能有些朋友有点儿模糊,咱们捋一捋,我也会给出一些IDE方面的 ...

  6. C语课设心得分享(三)

    调试. 以前咱们写课后习题,一般也不需要使用调试,如果程序编译error,根据错误信息就可以改好:如果是结果错误,那么在稿纸上过几遍基本也可以得出结果. 但咱们这个课设比较大,就需要很多调试的过程,尤 ...

  7. 将C语课设传到了Github和Code上 2015-91-18

    一直听说Git好使,以前捣鼓过没弄成,现在考完试了终于可以静下心来研究研究. 哎,我要是当时做课设的时候就用Git,也能省下不少事呢. 使用的Git教程,刚看个开头: 廖雪峰的Git教程 http:/ ...

  8. 计算机网络课设之基于UDP协议的简易聊天机器人

    前言:2017年6月份计算机网络的课设任务,在同学的帮助和自学下基本搞懂了,基于UDP协议的基本聊天的实现方法.实现起来很简单,原理也很简单,主要是由于老师必须要求使用C语言来写,所以特别麻烦,而且C ...

  9. 我们为之奋斗过的C#之---简单的库存管理系统

    今天非常开心,因为今天终于要给大家分享一个库存管理项目了. 我个人感觉在做项目之前一定先要把逻辑思路理清,不要拿到项目就噼里啪啦的一直敲下去这样是一不好的习惯,等你做大项目的时候,你就不会去养成一种做 ...

随机推荐

  1. 一比一还原axios源码(零)—— 概要

    从vue2版本开始,vue-resource就不再被vue所维护和支持,官方也推荐使用axios,所以,从我使用axios至今,差不多有四五年了,这四五年的时间只能算是熟练应用,很多内部的实现和原理不 ...

  2. tensorflow源码解析之framework-shape_inference

    目录 什么是形状推断 InferenceContext 关系图 涉及的文件 迭代记录 1. 什么是形状推断 前面我们讲到op的时候,提到了操作的注册器OpRegistry,并且提到,其中注册的数据是一 ...

  3. pandas常用操作详解——pandas的去重操作df.duplicated()与df.drop_duplicates()

    df.duplicated() 参数详解: subset:检测重复的数据范围.默认为数据集的所有列,可指定特定数据列: keep: 标记哪个重复数据,默认为'first'.1.'first':标记重复 ...

  4. ASP.NET Core 6框架揭秘实例演示[25]:配置与承载环境的应用

    与服务注册一样,针对配置的设置同样可以采用三种不同的编程模式.第一种是利用WebApplicationBuilder的Host属性返回的IHostBuilder对象,它可以帮助我们设置面向宿主和应用的 ...

  5. 在基于ABP框架的前端项目Vue&Element项目中采用电子签章处理文件和打印处理

    在一些内部OA或者流转的文件,或者给一些客户的报价文件.合同,或者一些医院出示的给保险机构的病历资料等,有时候可能都希望快速的使用电子签章的处理方式来给文件盖上特定的印章,本篇随笔介绍基于Vue&am ...

  6. python3判断一个数是否为素数

    while True: num = int(input('请输入一个数:')) for i in range(2,num):#判断在num之前的数能不能把num整除 if(num%i == 0): p ...

  7. 如何构建Docker镜像

    构建Docker 镜像有如下两种方法: (一)使用docker commit命令.(二)使用docker build命令和 Dockerfile 文件.在这里并不推荐使用docker commit来构 ...

  8. linux下安装简单的文件上传与下载工具 lrzsz

    编译安装 1.从下面的网站下载 lrzsz-1.12.20.tar.gz wget https://ohse.de/uwe/releases/lrzsz-0.12.20.tar.gz 2.查看里面的I ...

  9. NET程序的代码混淆、加壳与脱壳

    通常我们通过代码混淆.加密的形式达到软件保护的目的.在Web开发里我们接触过的可能就是JS代码加密了,可以通过对JS代码进行混淆.加密从而实现对核心JS代码的保护.如果没有接触过的可以在这里简单了解一 ...

  10. VS Code通过code runner插件编译运行多个cpp文件 | 链接编译.h文件

    1.多个cpp文件在同一级目录 参考:https://jingyan.baidu.com/article/2f9b480d7ceb3d01ca6cc224.html 此时可通过修改Code Runne ...