zoukankan      html  css  js  c++  java
  • 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 }
  • 相关阅读:
    idea的alt+enter可以从菜单点吗
    idea能用下划线替换红色报错吗?我色弱,用idea简直太痛苦了
    Idea中JDK为1.8,还提示Diamond types are not supported at this language level
    idea中maven项目下载源码的方式的
    kafka删除topic后再创建同名的topic报错(ERROR org.apache.kafka.common.errors.TopicExistsException)
    Linux虚拟机的命令分发工具。
    关于git SSH Key的 生成
    Windows下Nginx+Mysql+Php(wnmp)环境搭建
    HTTP协议详解
    php面向对象中static静态属性和静态方法的调用
  • 原文地址:https://www.cnblogs.com/JasperZhao/p/12914057.html
Copyright © 2011-2022 走看看