#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: "); ;
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"); }
}
}
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;
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: ");
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: ");
i= find_part( inv , number , num_parts);
if(i>=0) {
printf(" Enter change in quantity on hand: "); inv[i].on_hand += change;
} else
}
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); }
I2luY2x1ZGU8c3RkaW8uaD4KI2luY2x1ZGUgInJlYWRsaW5lLmgiCgojZGVmaW5lIE5BTUVfTEVOIDI1CiNkZWZpbmUgTUFYX1BBUlRTIDEwMAoKc3RydWN0IHBhcnQgewogICAgaW50IG51bWJlcjsKCWNoYXIgbmFtZVtOQU1FX0xFTisxXTsKCWludCBvbl9oYW5kOwp9OwoKCmludCBmaW5kX3BhcnQoc3RydWN0IHBhcnQgaW52W10gLCBpbnQgbnVtYmVyICwgaW50IG51bV9wYXJ0cyk7CnZvaWQgaW5zZXJ0KHN0cnVjdCBwYXJ0IGludltdICwgaW50IG51bV9wYXJ0cyk7CnZvaWQgc2VhcmNoKHN0cnVjdCBwYXJ0IGludltdICwgaW50IG51bV9wYXJ0cyk7CnZvaWQgdXBkYXRlKHN0cnVjdCBwYXJ0IGludltdICwgaW50IG51bV9wYXJ0cyk7CnZvaWQgcHJpbnQoc3RydWN0IHBhcnQgaW52W10gLCBpbnQgbnVtX3BhcnRzKTsKCmludCBtYWluKHZvaWQpCnsKCWNoYXIgY29kZTsKCQoJc3RydWN0IHBhcnQgaW52W01BWF9QQVJUU107CgkKCWludCBudW1fcGFydHM9MDsKCQoJZm9yKDs7KSB7CgkJcHJpbnRmKCJFbnRlciBvcGVyYXRpb24gY29kZTogIik7CgkJc2NhbmYoIiAlYyIgLCAmY29kZSk7CgkJd2hpbGUoIGdldGNoYXIoKSAhPSdcbicpCgkJOwoJCQoJCXN3aXRjaChjb2RlKSB7CgkJCWNhc2UgJ2knOiBpbnNlcnQoaW52LCBudW1fcGFydHMpOyAgbnVtX3BhcnRzKys7CgkJCQkJICBicmVhazsgCgkJICAgIGNhc2UgJ3MnOiBzZWFyY2goaW52LCBudW1fcGFydHMpOwoJCQkJCSAgYnJlYWs7CgkJCWNhc2UgJ3UnOiB1cGRhdGUoaW52LCBudW1fcGFydHMpOwoJCQkgICAgICAgICAgYnJlYWs7CgkJICAgIGNhc2UgJ3AnOiBwcmludChpbnYsIG51bV9wYXJ0cyk7CgkJCSAgICAgICAgICBicmVhazsKCQkJY2FzZSAncSc6IHJldHVybiAwOwoJCQlkZWZhdWx0OiAgcHJpbnRmKCJJbGxlZ2FsIGNvZGVcbiIpOwoJCX0KCQlwcmludGYoIlxuIik7Cgl9Cn0KCmludCBmaW5kX3BhcnQoIHN0cnVjdCBwYXJ0IGludltdICwgaW50IG51bWJlciAsIGludCBudW1fcGFydHMpCnsKCWludCBpOwoJCglmb3IoaT0wOyBpPG51bV9wYXJ0czsgaSsrKQoJCWlmKCBpbnZbaV0ubnVtYmVyID09IG51bWJlcikgCgkJCXJldHVybiBpOwoJCglyZXR1cm4gLTE7Cn0Kdm9pZCBpbnNlcnQoIHN0cnVjdCBwYXJ0IGludltdICwgaW50IG51bV9wYXJ0cyApCnsKCWludCBwYXJ0X251bWJlciAsIGk7CgkKCXByaW50ZigibnVtX3BhcnRzOiAlZCIgLCBudW1fcGFydHMpOwoJCglpZiAobnVtX3BhcnRzID09IE1BWF9QQVJUUykgewoJCXByaW50ZigiRGF0YWJhc2UgaXMgZnVsbDsgQ2FuJ3QgYWRkIG1vcmUgcGFydHMuIFxuIik7CgkJcmV0dXJuOwoJfQoJCglwcmludGYoIkVudGVyIHBhcnQgbnVtYmVyOiAiKTsKCXNjYW5mKCIlZCIgLCAmcGFydF9udW1iZXIpOwoJCglpZiggZmluZF9wYXJ0KCBpbnYgLCBwYXJ0X251bWJlciAsIG51bV9wYXJ0cyApID49MCApIHsKCQlwcmludGYoIlBhcnQgYWxyZWFkeSBleGlzdHMuIFxuIik7CgkJcmV0dXJuOwoJfQoJCglpbnZbbnVtX3BhcnRzXS5udW1iZXIgPSBwYXJ0X251bWJlcjsKCXByaW50ZigiRW50ZXIgcGFydCBuYW1lOiAiKTsKCXJlYWRfbGluZShpbnZbbnVtX3BhcnRzXS5uYW1lICwgTkFNRV9MRU4pOwoJcHJpbnRmKCJFbnRlciBxdWFudGl0eSBvbiBoYW5kOiAiKTsKCXNjYW5mKCIlZCIgLCAmaW52W251bV9wYXJ0c10ub25faGFuZCk7CgkKfQoJCnZvaWQgc2VhcmNoKHN0cnVjdCBwYXJ0IGludltdICwgaW50IG51bV9wYXJ0cykKewoJaW50IGkgLCBudW1iZXI7CgkKCXByaW50ZigiRW50ZXIgcGFydCBudW1iZXI6ICIpOwoJc2NhbmYoIiVkIiAsICZudW1iZXIpOwoJCglpID0gZmluZF9wYXJ0KGludiAsIG51bWJlciAsIG51bV9wYXJ0cyk7CgkKCWlmKCBpID49MCApewoJCXByaW50ZigiIFBhcnQgbmFtZSA6ICVzIFxuICIgLCBpbnZbaV0ubmFtZSk7CgkJcHJpbnRmKCIgUXVhbnRpdHkgb24gaGFuZDogJWQgXG4iICwgaW52W2ldLm9uX2hhbmQpOwoJfSBlbHNlCgkJcHJpbnRmKCJQYXJ0IG5vdCBmb3VuZC4gXG4gIik7Cgl9CgkKdm9pZCB1cGRhdGUoc3RydWN0IHBhcnQgaW52W10gLCBpbnQgbnVtX3BhcnRzKSAKewoJaW50IGkgLCBudW1iZXIgLCBjaGFuZ2U7CgkKCXByaW50ZigiIEVudGVyIHBhcnQgbnVtYmVyOiAiKTsKCXNjYW5mKCIlZCIgLCAmbnVtYmVyKTsKCQoJaT0gZmluZF9wYXJ0KCBpbnYgLCBudW1iZXIgLCBudW1fcGFydHMpOwoJaWYoaT49MCkgewoJCXByaW50ZigiIEVudGVyIGNoYW5nZSBpbiBxdWFudGl0eSBvbiBoYW5kOiAiKTsKCQlzY2FuZigiJWQiICwgJmNoYW5nZSk7CgkJaW52W2ldLm9uX2hhbmQgKz0gY2hhbmdlOwoJfSBlbHNlCgkJcHJpbnRmKCJQYXJ0IG5vdCBmb3VuZCIpOwoJfQoJCnZvaWQgcHJpbnQoc3RydWN0IHBhcnQgaW52W10gLCBpbnQgbnVtX3BhcnRzKQp7CglpbnQgaSA7CgkKCXByaW50ZigiIFBhcnQgTnVtYmVyICBQYXJ0IE5hbWUgICAgICAgICAgICAgICIgCgkiUXVhbnRpdHkgb24gSGFuZFxuIik7Cglmb3IoaT0wOyBpIDwgbnVtX3BhcnRzOyBpKyspCgkJcHJpbnRmKCIlN2QgICAgICAgICUtMjVzJTExZFxuIiAsIGludltpXS5udW1iZXIgLCBpbnZbaV0ubmFtZSAsIGludltpXS5vbl9oYW5kKTsKCX0KCQoJCQ==