#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define MAX_PARTS 100
#define CRT_SECURE_NO_WARNING
typedef struct Part {
int partNumber;
int quantity;
float price;
char name[20];
} Part;
int partsCount = 0;
Part inventory[MAX_PARTS];
int findPart(int number) {
for (int i = 0; i < partsCount; ++i) {
if (inventory[i].partNumber == number) {
return i;
}
}
return -1;
}
void insert() {
int partNumber = 0;
if (partsCount == MAX_PARTS) {
printf("Database is full; can't add more parts.\n");
return;
}
printf("Enter part number: ");
scanf("%d", &partNumber);
if (findPart(partNumber) >= 0) {
printf("Part already exists.\n");
return;
}
inventory[partsCount].partNumber = partNumber;
printf("Enter part name: ");
scanf("%s", inventory[partsCount].name);
printf("Enter price: ");
scanf("%f", &inventory[partsCount].price);
printf("Enter quantity on hand: ");
scanf("%d", &inventory[partsCount].quantity);
++partsCount;
}
void search() {
int partNumber = 0;
printf("Enter part number: ");
scanf("%d", &partNumber);
int index = findPart(partNumber);
if (index >= 0) {
printf("Part name: %s\n", inventory[index].name);
printf("Price: $%.2f\n", inventory[index].price);
printf("Quantity on hand: %d\n", inventory[index].quantity);
}
else {
printf("Part not found.\n");
}
}
void update() {
int partNumber = 0;
int change = 0;
printf("Enter part number: ");
scanf("%d", &partNumber);
int index = findPart(partNumber);
if (index >= 0) {
printf("Enter change in quantity on hand: ");
scanf("%d", &change);
inventory[index].quantity += change;
}
else {
printf("Part not found.\n");
}
}
int compareParts(const void *a, const void *b) {
if (((Part*)a)->partNumber < ((Part*)b)->partNumber) return -1;
if (((Part*)a)->partNumber > ((Part*)b)->partNumber) return 1;
return 0;
// return (((Part*)a)->partNumber > ((Part*)b)->partNumber) - (((Part*)a)->partNumber < ((Part*)b)->partNumber);
}
void printTitle() {
printf("%-*s", 13, "Part Number"); // 15?
printf("%-*s", 20, "Part Name");
printf("%-*s", 12, "Price");
printf("%-*s", 17, "Quantity on Hand");
printf("\n");
}
void printPart(Part* part) {
printf("%-*d", 13, part->partNumber);
printf("%-*s", 20, part->name);
printf("$%-*.2f", 12 - 1, part->price);
printf("%-*d", 17, part->quantity);
printf("\n");
}
void printParts() {
qsort(inventory, partsCount, sizeof(Part), compareParts);
printTitle();
for (int i = 0; i < partsCount; ++i) {
printPart(inventory + i);
}
}
int main() {
char code = 0;
while (1) {
printf("Enter operation code: ");
scanf(" %c", &code);
while (getchar() != '\n');
switch (code) {
case 'i': insert(); break;
case 's': search(); break;
case 'u': update(); break;
case 'p': printParts(); break;
case 'q': return 0;
default: printf("Illegal code\n");
}
printf("\n");
}
return 0;
}