#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define MAX_PARTS 100
#define CRT_SECURE_NO_WARNING
struct part {
int number;
char name[20];
float price;
int quantity;
};
int num_parts = 0;
struct part inventory[MAX_PARTS];
int find_part(int number);
void insert(void);
void search(void);
void update(void);
void print(void);
int compare_parts(const void* p, const void* q);
int main(void)
{
char code;
for ( ;; ) {
printf("Enter operation code: ");
scanf_s(" %c", &code);
while (getchar() != '\n');
switch (code) {
case 'i': insert();
break;
case 's': search();
break;
case 'u': update();
break;
case 'p': print();
break;
case 'q': return 0;
default: printf("Illegal code\n");
}
printf("\n");
}
}
int find_part(int number)
{
int i;
for (i = 0; i < num_parts; i++)
if (inventory.number == number)
return i;
return -1;
}
void insert(void)
{
int part_number;
if (num_parts == MAX_PARTS) {
printf("Database is full; can't add more parts.\n");
return;
}
printf("Enter part number: ");
scanf_s("%d", &part_number);
if (find_part(part_number) >= 0) {
printf("Part already exists.\n");
return;
}
inventory[num_parts].number = part_number;
printf("Enter part name: ");
scanf_s("%s", &inventory[num_parts].name);
printf("Enter price: ");
scanf_s("%f", &inventory[num_parts].price);
printf("Enter quantity on hand: ");
scanf_s("%d", &inventory[num_parts].quantity);
num_parts++;
}
void search(void)
{
int i, number;
printf("Enter part number: ");
scanf_s("%d", &number);
i = find_part(number);
if (i >= 0) {
printf("Part name: %s\n", inventory.name);
printf("Price: %.2f $\n", inventory.price);
printf("Quantity on hand: %d\n", inventory.quantity);
}
else
printf("Part not found.\n");
}
void update(void)
{
int i, number, change;
printf("Enter part number: ");
scanf_s("%d", &number);
i = find_part(number);
if (i >= 0) {
printf("Enter change in quantity on hand: ");
scanf_s("%d", &change);
inventory.quantity += change;
}
else
printf("Part not found.\n");
}
void print(void)
{
int i;
qsort(inventory, num_parts, sizeof(struct part), compare_parts);
printf("Part Number\tPart Name\tPrice\t\tQuantity on Hand\n");
for (i = 0; i < num_parts; i++)
printf("%d\t\t%s%.2f $\t\t%d\n", inventory.number, inventory.name, inventory.price, inventory.quantity);
}
int compare_parts(const void *p, const void *q)
{
const struct part *p1 = p;
const struct part *p2 = q;
}
scanf falan değiştirdim, onlara bakarsınız.#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;
}
Bugün kayıt oluşturup ilk defa bir sorun paylaşıyorum burada. Çok yeniyim ve PDF atılabildiğini bile bilmiyordumNeye göre sıralanıyor demiştim.
Sıralama kısmını ikincide görüyorum ama ilkinde göremedim. Belki de dosyanın tamamını paylaşmadığınız için. Ve niye elinizde varken PDF yerine böyle paylaşıyorsunuz, anlamıyorum. Okuması da tekrardan bakması da dert.
scanf falan değiştirdim, onlara bakarsınız.#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;
}
Öncelikle çok teşekkür ederim emek harcamışsınız. Ödevin teslim tarihi bugün gece 23:55'e kadar fakat daha önceden de dediğim gibi amacım ödevden yüksek not almaktan ziyade mantığı anlayabilmek. Yazdığınız/yaptığınız değişiklikleri de inceleyeceğim. Birazdan bu haliyle yollarım ödevi, daha sonra da oturup üstünde çalışırım. Tekrardan çok teşekkür ederim çok sağolun.Şimdilik şöyle yaptım. Sandığımdan uzunmuş. Verdiğiniz şey asıl ödev için çok bir şey ifade etmiyor. Print uzunluğu için macro (#define zımbırtıları) ayarlarsınız. VS Code'da yazdığım için tab yok, yoktur.scanffalan değiştirdim, onlara bakarsınız.
Ödevin teslim tarihini söyleyin. Bu şekilde bırakabilirim veya başka zaman ödevde istendiği gibi linkedlist vb. kullanarak yaparım.
Anlamadığınız yerleri sorun. Bir kere olabildiğince ayrıntılı anlatırım. Dahası için başkasını beklersiniz. O tip bir durumda (kodun anlamı başlıklı) yeni konu açardım ben olsam.
Kod:#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; }
// 1
#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;
char name[20];
} Part;
int partsCount = 0;
Part inventory[MAX_PARTS];
int findPart(int number);
void insert();
void search();
void update();
void printParts();
int compareParts(const void *a, const void *b);
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 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("Enter part name: %s\n", inventory[index].name);
printf("Enter 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");
}
}
void printTitle() {
printf("%-*s", 13, "Part Number"); // 15?
printf("%-*s", 20, "Part Name");
printf("%-*s", 17, "Quantity on Hand");
printf("\n");
}
void printPart(Part* part) {
printf("%-*d", 13, part->partNumber);
printf("%-*s", 20, part->name);
printf("%-*d", 17, part->quantity);
printf("\n");
}
void printParts() {
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;
}
// 2
#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;
char name[20];
struct Part* next;;
} Part;
Part* head = NULL;
Part* findPart(int number);
Part* findPrevPart(int number);
void insert();
void search();
void update();
void erase();
void quit();
void printParts();
int compareParts(const void *a, const void *b);
Part* findPart(int partNumber) { //*
Part* curr = head;
if (curr == NULL) {
return NULL;
}
while (curr != NULL) {
if (curr->partNumber > partNumber) {
return NULL;
}
if (curr->partNumber == partNumber) {
return curr;
}
curr = curr->next;
}
return NULL;
}
Part* findPrevPart(int partNumber) { //*
Part* prev = NULL;
Part* curr = head;
if (curr == NULL) {
return NULL;
}
while (curr->next != NULL) {
if (partNumber == curr->next->partNumber) {
return curr;
}
curr = curr->next;
}
return NULL;
}
void insert() {
int partNumber = 0;
printf("Enter part number: ");
scanf("%d", &partNumber);
if (findPart(partNumber)) {
printf("Part already exists.\n");
return;
}
Part* part = (Part*)malloc(sizeof(Part));
part->partNumber = partNumber;
printf("Enter part name: ");
scanf("%s", part->name);
printf("Enter quantity on hand: ");
scanf("%d", &(part->quantity));
if (head == NULL || part->partNumber < head->partNumber) {
part->next = head;
head = part;
return;
}
Part* curr = head;
while (curr->next != NULL && curr->next->partNumber < part->partNumber) {
curr = curr->next;
}
part->next = curr->next;
curr->next = part;
}
void search() { //*
int partNumber = 0;
printf("Enter part number: ");
scanf("%d", &partNumber);
Part* part = findPart(partNumber);
if (part) {
printf("Part name: %s\n", part->name);
printf("Quantity on hand: %d\n", part->quantity);
}
else {
printf("Part not found.\n");
}
}
void update() { //*
int partNumber = 0;
int change = 0;
printf("Enter part number: ");
scanf("%d", &partNumber);
Part* part = findPart(partNumber);
if (part) {
printf("Enter change in quantity on hand: ");
scanf("%d", &change);
part->quantity += change;
}
else {
printf("Part not found.\n");
}
}
void erase() { //*
int partNumber = 0;
printf("Enter part number: ");
scanf("%d", &partNumber);
Part* curr = findPart(partNumber);
if (!curr) {
printf("Part not found.\n");
return;
}
if (curr == head) {
Part* oldHead = head;
head = head->next;
free(oldHead);
return;
}
Part* prev = findPrevPart(partNumber);
curr = prev->next;
prev->next = prev->next->next;
free(curr);
}
void quit() { //*
Part* curr = head;
Part* next = NULL;
while (curr != NULL) {
next = curr->next;
free(curr);
curr = next;
}
}
void printTitle() { //*
printf("%-*s", 13, "Part Number"); // 15?
printf("%-*s", 20, "Part Name");
printf("%-*s", 17, "Quantity on Hand");
printf("\n");
}
void printPart(Part* part) { //*
printf("%-*d", 13, part->partNumber);
printf("%-*s", 20, part->name);
printf("%-*d", 17, part->quantity);
printf("\n");
}
void printParts() { //*
if (!head) {
printf("No parts.");
}
printTitle();
Part* part = head;
while (part != NULL) {
printPart(part);
part = part->next;
}
}
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 'e': erase(); break;
case 'q': quit(); return 0;
default: printf("Illegal code\n");
}
printf("\n");
}
return 0;
}
// 3
#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);
void insert();
void search();
void update();
int compareParts(const void *a, const void *b);
void printTitle();
void printPart(Part* part);
void printParts();
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)->price < ((Part*)b)->price) return -1;
if (((Part*)a)->price > ((Part*)b)->price) return 1;
return 0;
// return (((Part*)a)->price > ((Part*)b)->price) - (((Part*)a)->price < ((Part*)b)->price);
}
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;
}