库存管理系统实现 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 }
本文来自博客园,作者:王回甘,转载请注明原文链接:https://www.cnblogs.com/WScoconut/p/16054188.html