Structures Parallel Arrays Inventory One array keeps track

  • Slides: 21
Download presentation
Structures

Structures

Parallel Arrays • Inventory – One array keeps track of cost – One array

Parallel Arrays • Inventory – One array keeps track of cost – One array keeps track of number in inventory • What if there were many parallel items to keep track of? • Would you want to keep track of 10, 20, 30 parallel arrays? Why not?

Structures • Group many record items into one element Inventory: Item Name: Shirt Item

Structures • Group many record items into one element Inventory: Item Name: Shirt Item Number: 1232 Cost: $20. 00 Num in Inventory: 10

Structures typedef struct { char name[20]; int number; double cost; int num_in_inventory; } inventory_item_t;

Structures typedef struct { char name[20]; int number; double cost; int num_in_inventory; } inventory_item_t;

Structures typedef struct { type name; … type name; } struct_type; • • goes

Structures typedef struct { type name; … type name; } struct_type; • • goes after #include and #define – not inside of main type can be another structure data typedef struct { char first[20]; char last[20]; } name_t; typedef struct { name_t name; int id; } student_t;

Declaring and Initializing • typedef does not allocate any memory inventory_item_t shirts; . name.

Declaring and Initializing • typedef does not allocate any memory inventory_item_t shirts; . name. number. cost. num_in_inventory …

Declaring and Initializing shirts. number = 1232; shirts. cost = 20. 00; shirts. num_in_inventory

Declaring and Initializing shirts. number = 1232; shirts. cost = 20. 00; shirts. num_in_inventory = 10; //name? ? ? . name . number. cost. num_in_inventory … 1232 20. 00 10

Declaring and Initializing shirts. number = 1232; shirts. cost = 20. 00; shirts. num_in_inventory

Declaring and Initializing shirts. number = 1232; shirts. cost = 20. 00; shirts. num_in_inventory = 10; strcpy(shirts. name, “Shirt”); . name . number. cost. num_in_inventory … 1232 20. 00 10

Accessing • Print “There are 10 of item: shirt left in the inventory. ”

Accessing • Print “There are 10 of item: shirt left in the inventory. ”

Accessing • Print “There are 10 of item: shirt left in the inventory. ”

Accessing • Print “There are 10 of item: shirt left in the inventory. ” printf(“There are %d of item: %s left in the inventory”, shirts. num_in_inventory, shirts. name);

Structures and Functions • Write a function to print all information about an inventory

Structures and Functions • Write a function to print all information about an inventory item

Structures and Functions • Write a function to print all information about an inventory

Structures and Functions • Write a function to print all information about an inventory item void print_item(inventory_item_t item) { printf(“Item: %sn”, item. name); printf(“Item Number: %dn”, item. number); printf(“Cost: %lfn”, item. cost); printf(“Number Remaining: %dn”, item. num_in_inventory); }

Structures and Functions • Call the function inventory_item_t shirts; … print_item(shirts);

Structures and Functions • Call the function inventory_item_t shirts; … print_item(shirts);

Structures as Output Parameters • Write a function to “sell” an item by deducting

Structures as Output Parameters • Write a function to “sell” an item by deducting 1 from the number of the item left in the inventory • Return 1 if the sell was successful – 0 otherwise • How would we call this function?

Structures as Output Parameters • How would we call this function? inventory_item_t shirts; …

Structures as Output Parameters • How would we call this function? inventory_item_t shirts; … sell_item(shirts); //OK?

Structures as Output Parameters • How would we call this function? inventory_item_t shirts; int

Structures as Output Parameters • How would we call this function? inventory_item_t shirts; int sell_ok; … sell_ok = sell_item(&shirts); if(sell_ok) { printf(“Item soldn”); } else { printf(“Problem encountered! Item not sold. n”); }

Structures as Output Parameters int sell_item(inventory_item_t *to_sell) { int sell_ok; if((*to_sell). num_in_inventory > 0)

Structures as Output Parameters int sell_item(inventory_item_t *to_sell) { int sell_ok; if((*to_sell). num_in_inventory > 0) { //(*to_sell) is important! (*to_sell). num_in_inventory = (*to_sell). num_in_inventory – 1; sell_ok = 1; } else { sell_ok = 0; } return (sell_ok); }

Component Selection Operator • (*to_sell). num_in_inventory is the same as to_sell->num_in_inventory int sell_item(inventory_item_t *to_sell)

Component Selection Operator • (*to_sell). num_in_inventory is the same as to_sell->num_in_inventory int sell_item(inventory_item_t *to_sell) { int sell_ok; if(to_sell->num_in_inventory > 0) { to_sell->num_in_inventory = to_sell->num_in_inventory – 1; sell_ok = 1; } else { sell_ok = 0; } return (sell_ok); }

Returning a Structure inventory_item_t get. Item() { inventory_item_t new_item; printf(“Enter name: ”); scanf(“%s”, new_item.

Returning a Structure inventory_item_t get. Item() { inventory_item_t new_item; printf(“Enter name: ”); scanf(“%s”, new_item. name); printf(“Enter number: ”); scanf(“%d”, &new_item. number); printf(“Enter cost: ”); scanf(“%lf”, &new_item. cost): printf(“Enter number in inventory: ”); scanf(“%d”, %new_item. num_in_inventory); return (new_item); }

Arrays of Structures inventory_item_t items[20]; • Access the name of item 5

Arrays of Structures inventory_item_t items[20]; • Access the name of item 5

Arrays of Structures inventory_item_t items[20]; • Access the name of item 5 items[4]. name;

Arrays of Structures inventory_item_t items[20]; • Access the name of item 5 items[4]. name; items[4]. num_in_inventory = items[4]. num_in_inventory – 1; items[5]. cost = 105. 99; scan_item(&items[10);