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. 分布式 PostgreSQL 集群(Citus)官方示例 - 多租户应用程序实战

    如果您正在构建软件即服务 (SaaS) 应用程序,您可能已经在数据模型中内置了租赁的概念. 通常,大多数信息与租户/客户/帐户相关,并且数据库表捕获这种自然关系. 对于 SaaS 应用程序,每个租户的 ...

  2. mysql5.7开启二进制日制中间遇害到的坑

    centos7下经过多次试验最终开启进这制日志成功. 最终用以下这个方法在mysql5.7下开启日志成功 下面这两个参数注意是下划线不是"-" log_bin=mysql-bin ...

  3. boxcox1p归一化+pipeline+StackingCVRegressor

    找到最好的那个参数lmbda. from mlxtend.regressor import StackingCVRegressor from sklearn.datasets import load_ ...

  4. 【黑马程序员C++ STL】学习记录

    黑马程序员 2017 C++ STL 教程(STL 部分已完结) 基于黑马STL课程整理:黑马程序员2017C++STL教程 视频链接 专栏:本STL专栏目录 文章目录 黑马程序员 2017 C++ ...

  5. Java基础——继承的特点

    继承的优点: 1.提高了代码的复用性(多个类相同的成员可以放到一个类中) 2.提高了代码的维护性(如果要修改方法,只需要修改父类中的即可) 继承的缺点: 1.继承让类与类产生了关系,类的耦合性增强了, ...

  6. Django的缓存机制和信号

    Django的缓存机制 1.1 缓存介绍 1.缓存的简介 在动态网站中,用户所有的请求,服务器都会去数据库中进行相应的增,删,查,改,渲染模板,执行业务逻辑,最后生成用户看到的页面. 当一个网站的用户 ...

  7. java+eclipse安装及配置

    一.JDK安装 0x00 下载JDK 首先我们需要下载java开发工具包JDK 下载地址:https://www.oracle.com/technetwork/java/javase/download ...

  8. 实习项目1-串口IP升级调试

    设计目标:设计一个串口IP,要求1:输入时钟频率任意,如0-400M时钟频率:要求2:波特率超过常见的115200,要求达到4M. 设计核心思路:波特率计算公式,divp10x = (10 * fsy ...

  9. jdr挖的大坑

    计数问题小结 很多计数问题在直接拆分计算贡献时都会出现不容易直接表示的情况.在解决这些问题时,往往需要解决一些子问题方案数的递推, 再套用组合数或者分块计算来降低难度或时间复杂度,这里给出几种递推方法 ...

  10. Servlet的response乱码问题

    一.response有两种输出流(编码:UTF-8): 1.字节流:response.getOutputStream().write(date.getBytes("UTF-8")) ...