1. 程式人生 > 其它 >庫存管理系統實現 C語言課設

庫存管理系統實現 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 }