Linked List in C (2Shopping Cart)

  1 #include<stdio.h>
  2 #include<stdlib.h>
  3 #include<string.h>
  4 
  5 /*
  6  * Item struct for holding item information
  7  */
  8 typedef struct _Item
  9 {
 10     char name[25];
 11     size_t quantity;
 12     double price;
 13     struct _Item *next;    
 14 }Item;
 15 
 16 /*
 17  * ResizeArray will be called when the number of
 18  * items to be added to cart exceed the current bounds of the array
 19  */
 20 void ResizeArray(Item **ShoppingCart,int num)
 21 {    
 22     Item *temp = *ShoppingCart;
 23     *ShoppingCart = malloc(num*2*sizeof(Item));
 24     if(*ShoppingCart == NULL)
 25     {
 26         printf("Cart can't add more items. \n");
 27         return;
 28     }
 29     memmove(*ShoppingCart,temp,num);
 30 }
 31 
 32 /*
 33  * Print the current list of items
 34  */
 35 void print_items(Item *head)
 36 {
 37     Item *temp = head;
 38     while( temp != NULL)
 39     {
 40         printf("Item Name:%s \n",temp->name);
 41         printf("Item quantity:%lu \n",temp->quantity);
 42         printf("Item price:%.2f\n\n",temp->price);
 43         temp = temp->next;
 44     }
 45 }
 46 
 47 /*
 48  * Add an item to ShoppingCart
 49  */
 50 void add_item(Item **head,Item *newItem)
 51 {
 52     if(*head == NULL)
 53     {
 54         *head = newItem;
 55     }
 56     else 
 57     {
 58         Item *temp = *head;
 59         while(temp -> next != NULL)
 60         {
 61             temp = temp->next;
 62         }
 63         newItem->next = temp->next;
 64         temp->next = newItem;
 65     }    
 66 }
 67 
 68 /*
 69  * Provide a menu that allows the user to choose among 3 options.
 70  */
 71 void menu(char* choice)
 72 {
 73     char Buffer[50];
 74     printf("Enter a or A: Add an item to ShoppingCart\n");
 75     printf("Enter p or P: Print the current list of items\n");
 76     printf("Enter q or Q: Quit the program\n");
 77     printf("Enter your choice:");
 78     fgets(Buffer,50,stdin);
 79     sscanf(Buffer,"%c",choice);
 80 }
 81 
 82 int main()
 83 {
 84     int num;
 85     int num_in_cart = 0;
 86     Item *ShoppingCart;
 87     Item *head = NULL;
 88     char Buffer[50];
 89     char choice;
 90     
 91     /*
 92       * Ask the user for the number of items,
 93       * and use this number as tbe initial size of cart
 94       */     
 95     printf("Enter the number of items you want to buy:");
 96     fgets(Buffer,50,stdin);
 97     sscanf(Buffer,"%d",&num);
 98     
 99     ShoppingCart = malloc( num*sizeof(Item) );
100     if(ShoppingCart == NULL)
101     {
102         printf("ShoppingCart is NULL!\n");
103         exit(1);
104     }
105 
106     /*
107       * Option A: Add am item to cart
108      * Option P: Print the current list of items
109      * Option Q: Quit the program
110      */         
111     menu(&choice);    
112     while(choice != 'q' && choice !='Q')
113     {    
114         if(choice == 'A' || choice == 'a')
115         {
116             char Buffer[50];
117             Item *newItem;
118             if(num_in_cart == num)
119             {    
120                 ResizeArray(&ShoppingCart,num);
121                 num = num*2;
122             }
123             
124             newItem = &ShoppingCart[num_in_cart];
125             newItem->next = NULL;
126 
127             printf("Enter name:");
128             fgets(Buffer,50,stdin);
129             sscanf(Buffer," %s",newItem->name);
130             
131             printf("Enter quantity:");
132             fgets(Buffer,50,stdin);
133             sscanf(Buffer,"%lu",&(newItem->quantity) );
134 
135             printf("Enter price:");
136             fgets(Buffer,50,stdin);
137             sscanf(Buffer,"%lf",&(newItem->price));
138 
139             printf("name = %s \n", newItem->name);
140             printf("quantity = %lu \n", newItem->quantity);
141             printf("price = %f \n", newItem->price);
142 
143             add_item(&head,newItem);
144             num_in_cart++;
145 
146             menu(&choice);    
147         }
148         else if(choice == 'p' || choice == 'P')
149         {
150             print_items(head);
151             menu(&choice);    
152         }
153         else
154         {
155             printf("Invalid input! \n");
156             menu(&choice);
157         }
158     }
159 
160     free(ShoppingCart);
161     printf("Program Exited.\n");
162     return 0;
163 }
原文地址:https://www.cnblogs.com/JasperZhao/p/12914057.html