#include<stdio.h>
#include "readline.h"

#define NAME_LEN 25
#define MAX_PARTS 100

struct part {
    int number;
	char name[NAME_LEN+1];
	int on_hand;
};


int find_part(struct part inv[] , int number , int num_parts);
void insert(struct part inv[] , int num_parts);
void search(struct part inv[] , int num_parts);
void update(struct part inv[] , int num_parts);
void print(struct part inv[] , int num_parts);

int main(void)
{
	char code;
	
	struct part inv[MAX_PARTS];
	
	int num_parts=0;
	
	for(;;) {
		printf("Enter operation code: ");
		scanf(" %c" , &code);
		while( getchar() !='\n')
		;
		
		switch(code) {
			case 'i': insert(inv, num_parts);  num_parts++;
					  break; 
		    case 's': search(inv, num_parts);
					  break;
			case 'u': update(inv, num_parts);
			          break;
		    case 'p': print(inv, num_parts);
			          break;
			case 'q': return 0;
			default:  printf("Illegal code\n");
		}
		printf("\n");
	}
}

int find_part( struct part inv[] , int number , int num_parts)
{
	int i;
	
	for(i=0; i<num_parts; i++)
		if( inv[i].number == number) 
			return i;
	
	return -1;
}
void insert( struct part inv[] , int num_parts )
{
	int part_number , i;
	
	printf("num_parts: %d" , num_parts);
	
	if (num_parts == MAX_PARTS) {
		printf("Database is full; Can't add more parts. \n");
		return;
	}
	
	printf("Enter part number: ");
	scanf("%d" , &part_number);
	
	if( find_part( inv , part_number , num_parts ) >=0 ) {
		printf("Part already exists. \n");
		return;
	}
	
	inv[num_parts].number = part_number;
	printf("Enter part name: ");
	read_line(inv[num_parts].name , NAME_LEN);
	printf("Enter quantity on hand: ");
	scanf("%d" , &inv[num_parts].on_hand);
	
}
	
void search(struct part inv[] , int num_parts)
{
	int i , number;
	
	printf("Enter part number: ");
	scanf("%d" , &number);
	
	i = find_part(inv , number , num_parts);
	
	if( i >=0 ){
		printf(" Part name : %s \n " , inv[i].name);
		printf(" Quantity on hand: %d \n" , inv[i].on_hand);
	} else
		printf("Part not found. \n ");
	}
	
void update(struct part inv[] , int num_parts) 
{
	int i , number , change;
	
	printf(" Enter part number: ");
	scanf("%d" , &number);
	
	i= find_part( inv , number , num_parts);
	if(i>=0) {
		printf(" Enter change in quantity on hand: ");
		scanf("%d" , &change);
		inv[i].on_hand += change;
	} else
		printf("Part not found");
	}
	
void print(struct part inv[] , int num_parts)
{
	int i ;
	
	printf(" Part Number  Part Name              " 
	"Quantity on Hand\n");
	for(i=0; i < num_parts; i++)
		printf("%7d        %-25s%11d\n" , inv[i].number , inv[i].name , inv[i].on_hand);
	}
	
		