#include <stdio.h>
/* Supporting structures */
struct date { int month; int date; int year; };
struct producer {
char name[100];
char city[50];
char state[50];
char country[50];
};
struct volume {
float amount;
char unit[10];
};
struct priceInfo {
float price;
char currency[10];
};
/* Base structures */
struct Beer {
int stockID;
struct date bornOnDate;
char type[70];
char brand[100];
float abv;
struct producer brewery;
struct volume container;
struct priceInfo pricing;
int ibu;
int calories;
int stockQuantity;
int shelfLifeMonths;
int isCraft;
};
struct Wine {
int stockID;
char varietal[70];
char brand[100];
int vintage;
float abv;
char region[70];
struct producer winery;
struct volume container;
struct priceInfo pricing;
char sweetness[20];
int agingMonths;
int stockQuantity;
int isSparkling;
};
struct Spirits {
int stockID;
char type[50];
char brand[100];
int age;
float abv;
struct producer distillery;
struct volume container;
struct priceInfo pricing;
char barrelType[50];
int proof;
int stockQuantity;
int isImported;
};
/* Test main function */
int main(void) {
/* Beer - Budweiser */
struct Beer myBeer = {
1001, {8, 10, 2025}, "American Lager", "Budweiser", 5.0,
{"Anheuser-Busch", "St. Louis", "Missouri", "USA"},
{12.0, "oz"}, {1.99, "USD"}, 12, 145, 500, 6, 0
};
/* Wine - Beringer */
struct Wine myWine = {
2001, "Cabernet Sauvignon", "Beringer", 2020, 14.5,
"Napa Valley",
{"Beringer Vineyards", "St. Helena", "California", "USA"},
{750.0, "ml"}, {24.99, "USD"}, "Dry", 18, 120, 0
};
/* Spirits - Scotch */
struct Spirits mySpirit = {
3001, "Scotch Whisky", "Johnnie Walker", 12, 40.0,
{"Johnnie Walker Distillery", "Kilmarnock", "Ayrshire", "Scotland"},
{750.0, "ml"}, {45.00, "USD"}, "Oak", 80, 80, 1
};
/* Output */
printf("Beer:\n Brand: %s\n Type: %s\n ABV: %.1f%%\n Price: %.2f %s\n\n", myBeer.brand, myBeer.type, myBeer.abv,
myBeer.pricing.price, myBeer.pricing.currency);
printf("Wine:\n Brand: %s\n Varietal: %s\n ABV: %.1f%%\n Price: %.2f %s\n\n", myWine.brand, myWine.varietal, myWine.abv,
myWine.pricing.price, myWine.pricing.currency);
printf("Spirit:\n Brand: %s\n Type: %s\n ABV: %.1f%%\n Price: %.2f %s\n", mySpirit.brand, mySpirit.type, mySpirit.abv,
mySpirit.pricing.price, mySpirit.pricing.currency);
return 0;
}
I2luY2x1ZGUgPHN0ZGlvLmg+CgovKiBTdXBwb3J0aW5nIHN0cnVjdHVyZXMgKi8Kc3RydWN0IGRhdGUgeyBpbnQgbW9udGg7IGludCBkYXRlOyBpbnQgeWVhcjsgfTsKCnN0cnVjdCBwcm9kdWNlciB7CiAgICBjaGFyIG5hbWVbMTAwXTsKICAgIGNoYXIgY2l0eVs1MF07CiAgICBjaGFyIHN0YXRlWzUwXTsKICAgIGNoYXIgY291bnRyeVs1MF07Cn07CgpzdHJ1Y3Qgdm9sdW1lIHsKICAgIGZsb2F0IGFtb3VudDsKICAgIGNoYXIgdW5pdFsxMF07Cn07CgpzdHJ1Y3QgcHJpY2VJbmZvIHsKICAgIGZsb2F0IHByaWNlOwogICAgY2hhciBjdXJyZW5jeVsxMF07Cn07CgovKiBCYXNlIHN0cnVjdHVyZXMgKi8Kc3RydWN0IEJlZXIgewogICAgaW50IHN0b2NrSUQ7CiAgICBzdHJ1Y3QgZGF0ZSBib3JuT25EYXRlOwogICAgY2hhciB0eXBlWzcwXTsKICAgIGNoYXIgYnJhbmRbMTAwXTsKICAgIGZsb2F0IGFidjsKICAgIHN0cnVjdCBwcm9kdWNlciBicmV3ZXJ5OwogICAgc3RydWN0IHZvbHVtZSBjb250YWluZXI7CiAgICBzdHJ1Y3QgcHJpY2VJbmZvIHByaWNpbmc7CiAgICBpbnQgaWJ1OwogICAgaW50IGNhbG9yaWVzOwogICAgaW50IHN0b2NrUXVhbnRpdHk7CiAgICBpbnQgc2hlbGZMaWZlTW9udGhzOwogICAgaW50IGlzQ3JhZnQ7Cn07CgpzdHJ1Y3QgV2luZSB7CiAgICBpbnQgc3RvY2tJRDsKICAgIGNoYXIgdmFyaWV0YWxbNzBdOwogICAgY2hhciBicmFuZFsxMDBdOwogICAgaW50IHZpbnRhZ2U7CiAgICBmbG9hdCBhYnY7CiAgICBjaGFyIHJlZ2lvbls3MF07CiAgICBzdHJ1Y3QgcHJvZHVjZXIgd2luZXJ5OwogICAgc3RydWN0IHZvbHVtZSBjb250YWluZXI7CiAgICBzdHJ1Y3QgcHJpY2VJbmZvIHByaWNpbmc7CiAgICBjaGFyIHN3ZWV0bmVzc1syMF07CiAgICBpbnQgYWdpbmdNb250aHM7CiAgICBpbnQgc3RvY2tRdWFudGl0eTsKICAgIGludCBpc1NwYXJrbGluZzsKfTsKCnN0cnVjdCBTcGlyaXRzIHsKICAgIGludCBzdG9ja0lEOwogICAgY2hhciB0eXBlWzUwXTsKICAgIGNoYXIgYnJhbmRbMTAwXTsKICAgIGludCBhZ2U7CiAgICBmbG9hdCBhYnY7CiAgICBzdHJ1Y3QgcHJvZHVjZXIgZGlzdGlsbGVyeTsKICAgIHN0cnVjdCB2b2x1bWUgY29udGFpbmVyOwogICAgc3RydWN0IHByaWNlSW5mbyBwcmljaW5nOwogICAgY2hhciBiYXJyZWxUeXBlWzUwXTsKICAgIGludCBwcm9vZjsKICAgIGludCBzdG9ja1F1YW50aXR5OwogICAgaW50IGlzSW1wb3J0ZWQ7Cn07CgovKiBUZXN0IG1haW4gZnVuY3Rpb24gKi8KaW50IG1haW4odm9pZCkgewogICAgLyogQmVlciAtIEJ1ZHdlaXNlciAqLwogICAgc3RydWN0IEJlZXIgbXlCZWVyID0gewogICAgICAgIDEwMDEsIHs4LCAxMCwgMjAyNX0sICJBbWVyaWNhbiBMYWdlciIsICJCdWR3ZWlzZXIiLCA1LjAsCiAgICAgICAgeyJBbmhldXNlci1CdXNjaCIsICJTdC4gTG91aXMiLCAiTWlzc291cmkiLCAiVVNBIn0sCiAgICAgICAgezEyLjAsICJveiJ9LCB7MS45OSwgIlVTRCJ9LCAxMiwgMTQ1LCA1MDAsIDYsIDAKICAgIH07CgogICAgLyogV2luZSAtIEJlcmluZ2VyICovCiAgICBzdHJ1Y3QgV2luZSBteVdpbmUgPSB7CiAgICAgICAgMjAwMSwgIkNhYmVybmV0IFNhdXZpZ25vbiIsICJCZXJpbmdlciIsIDIwMjAsIDE0LjUsCiAgICAgICAgIk5hcGEgVmFsbGV5IiwKICAgICAgICB7IkJlcmluZ2VyIFZpbmV5YXJkcyIsICJTdC4gSGVsZW5hIiwgIkNhbGlmb3JuaWEiLCAiVVNBIn0sCiAgICAgICAgezc1MC4wLCAibWwifSwgezI0Ljk5LCAiVVNEIn0sICJEcnkiLCAxOCwgMTIwLCAwCiAgICB9OwoKICAgIC8qIFNwaXJpdHMgLSBTY290Y2ggKi8KICAgIHN0cnVjdCBTcGlyaXRzIG15U3Bpcml0ID0gewogICAgICAgIDMwMDEsICJTY290Y2ggV2hpc2t5IiwgIkpvaG5uaWUgV2Fsa2VyIiwgMTIsIDQwLjAsCiAgICAgICAgeyJKb2hubmllIFdhbGtlciBEaXN0aWxsZXJ5IiwgIktpbG1hcm5vY2siLCAiQXlyc2hpcmUiLCAiU2NvdGxhbmQifSwKICAgICAgICB7NzUwLjAsICJtbCJ9LCB7NDUuMDAsICJVU0QifSwgIk9hayIsIDgwLCA4MCwgMQogICAgfTsKCiAgICAvKiBPdXRwdXQgKi8KICAgIHByaW50ZigiQmVlcjpcbiBCcmFuZDogJXNcbiBUeXBlOiAlc1xuIEFCVjogJS4xZiUlXG4gUHJpY2U6ICUuMmYgJXNcblxuIiwKICAgICAgICAgICBteUJlZXIuYnJhbmQsIG15QmVlci50eXBlLCBteUJlZXIuYWJ2LAogICAgICAgICAgIG15QmVlci5wcmljaW5nLnByaWNlLCBteUJlZXIucHJpY2luZy5jdXJyZW5jeSk7CgogICAgcHJpbnRmKCJXaW5lOlxuIEJyYW5kOiAlc1xuIFZhcmlldGFsOiAlc1xuIEFCVjogJS4xZiUlXG4gUHJpY2U6ICUuMmYgJXNcblxuIiwKICAgICAgICAgICBteVdpbmUuYnJhbmQsIG15V2luZS52YXJpZXRhbCwgbXlXaW5lLmFidiwKICAgICAgICAgICBteVdpbmUucHJpY2luZy5wcmljZSwgbXlXaW5lLnByaWNpbmcuY3VycmVuY3kpOwoKICAgIHByaW50ZigiU3Bpcml0OlxuIEJyYW5kOiAlc1xuIFR5cGU6ICVzXG4gQUJWOiAlLjFmJSVcbiBQcmljZTogJS4yZiAlc1xuIiwKICAgICAgICAgICBteVNwaXJpdC5icmFuZCwgbXlTcGlyaXQudHlwZSwgbXlTcGlyaXQuYWJ2LAogICAgICAgICAgIG15U3Bpcml0LnByaWNpbmcucHJpY2UsIG15U3Bpcml0LnByaWNpbmcuY3VycmVuY3kpOwoKICAgIHJldHVybiAwOwp9