#include <stdio.h>
#include <string.h>
#include <ctype.h>
#include <math.h>
#include <stdlib.h>
#include <Windows.h>
#include <conio.h>
#include <locale.h>
#include <memory.h>
struct Note
{
char name[100];
char number[10];
int birthday[3];
};
struct node {
struct Note person;
struct node* next;
};
int validation_int(int n, int p);
void get_information(struct Note *people);
void print_information(struct Note people);
void sort_notes(struct Note* people);
void print_list(struct node* people);
struct node* add_elem(struct node* root, struct Note person);
int main() {
SetConsoleOutputCP(1251);
SetConsoleCP(1251);
int month, i, flag = 0;
struct Note list_notes[5];
struct node* nodes;
printf_s("Введення інформації про людей:\n");
for (i = 0; i < 2; i++) {
get_information(&list_notes[i]);
nodes = add_elem(nodes, list_notes[i]);
//print_list(nodes);
}
/*sort_notes(nodes);*/
print_list(nodes);
int op;
printf_s("Оберіть необхідну операцію: ");
scanf_s("%d", &op);
switch (op) {
case 1: {
printf("Введіть значення місяця: "); month = validation_int(12, 1);
while (nodes->next) {
if (nodes->person.birthday[1] == month) {
print_information(list_notes[i]);
flag = 1;
}
}
if (!flag) {
printf("У вказаному місяці не нaрoдилось людей зі списку"); }
_getche();
return main();
}
case 2: {
return 0;
}
}
}
int validation_int(int n, int p) {
int number = 0, len = 0, minus = 0;
char* string;
string
= (char*)malloc(100 * sizeof(char)); if (string[0] == '-' && !p)
minus = 1;
int j = minus;
for (j; j < len; j++) {
number
+= ((int)string
[j
] - 48) * pow(10, len
- j
- 1); }
else {
printf("Не коректний ввід. Спробуй ще:\n"); return validation_int(n, p);
}
}
if (!minus) {
if (number > n && n != 0) {
printf("Не коректний ввід. Спробуй ще:\n"); return validation_int(n, p);
}
else
return number;
}
else
return number *= -1;
}
void get_information(struct Note *person) {
printf("Введіть інформацію про людину:\n"); /*person.number = (char*)malloc(20 * sizeof(char));*/
printf("Введіть номер телефону: "); printf("Введіть день у який народилась людина: "); person->birthday[0] = validation_int(31, 1);
printf("Введіть місяць у який народилась людина: "); person->birthday[1] = validation_int(12, 1);
printf("Введіть рік народження людини: "); person->birthday[2] = validation_int(2019, 1);
}
struct node* add_elem(struct node* root, struct Note person) {
if (!root) {
struct node
* tmp
= malloc(sizeof(struct node
)); tmp->person = person;
tmp->next = NULL;
return tmp;
}
struct node * p = root;
while (p->next) p = p->next;
struct node
* tmp
= malloc(sizeof(struct node
)); tmp->person = person;
tmp->next = NULL;
p->next = tmp;
return root;
}
void print_information(struct Note person) {
printf("Ім'я: %s\n", person.
name); int l
= strlen(person.
number); for (int i = 0; i < l; i++)
printf("%c", person.
number[i
]); for (int i = 0; i < 3; i++)
printf_s("%d. ", person.birthday[i]);
printf("..........................................................................................."); }
void sort_notes(struct node* root) {
struct Note person;
for (int i = 0; i < 5; i++) {
for (int j = 0; j < 4 - i; j++) {
if ((int)tolower(root
[j
].
person.
name[0]) > (int)tolower(root
[j
+1].
person.
name[0])) { person = root[j].person;
root[j].person = root[j+1].person;
root[j+1].person = person;
}
}
}
}
void print_list(struct node* people) {
printf("Ім'я\t\tНомер телефона\t\tДата народження\n\n"); printf("............................................................................."); if (!people) {
return;
}
do{
printf("%s\t%s\t%d.%d.%d", people
->person.
name, people
->person.
number, people
->person.
birthday[0], people->person.birthday[1], people->person.birthday[2]);
printf(".........................................................................."); people = people->next;
} while (people);
}
I2luY2x1ZGUgPHN0ZGlvLmg+CiNpbmNsdWRlIDxzdHJpbmcuaD4KI2luY2x1ZGUgPGN0eXBlLmg+CiNpbmNsdWRlIDxtYXRoLmg+CiNpbmNsdWRlIDxzdGRsaWIuaD4KI2luY2x1ZGUgPFdpbmRvd3MuaD4KI2luY2x1ZGUgPGNvbmlvLmg+CiNpbmNsdWRlIDxsb2NhbGUuaD4KI2luY2x1ZGUgPG1lbW9yeS5oPgoKc3RydWN0IE5vdGUKewoJY2hhciBuYW1lWzEwMF07CgljaGFyIG51bWJlclsxMF07CglpbnQgYmlydGhkYXlbM107Cn07CgpzdHJ1Y3Qgbm9kZSB7CglzdHJ1Y3QgTm90ZSBwZXJzb247CglzdHJ1Y3Qgbm9kZSogbmV4dDsKfTsKaW50IHZhbGlkYXRpb25faW50KGludCBuLCBpbnQgcCk7CnZvaWQgZ2V0X2luZm9ybWF0aW9uKHN0cnVjdCBOb3RlICpwZW9wbGUpOwp2b2lkIHByaW50X2luZm9ybWF0aW9uKHN0cnVjdCBOb3RlIHBlb3BsZSk7CnZvaWQgc29ydF9ub3RlcyhzdHJ1Y3QgTm90ZSogcGVvcGxlKTsKdm9pZCBwcmludF9saXN0KHN0cnVjdCBub2RlKiBwZW9wbGUpOwpzdHJ1Y3Qgbm9kZSogYWRkX2VsZW0oc3RydWN0IG5vZGUqIHJvb3QsIHN0cnVjdCBOb3RlIHBlcnNvbik7CgoKaW50IG1haW4oKSB7CglzZXRsb2NhbGUoTENfQUxMLCAicnVzIik7CglTZXRDb25zb2xlT3V0cHV0Q1AoMTI1MSk7CglTZXRDb25zb2xlQ1AoMTI1MSk7CgoKCWludCBtb250aCwgaSwgZmxhZyA9IDA7CglzdHJ1Y3QgTm90ZSBsaXN0X25vdGVzWzVdOwoJc3RydWN0IG5vZGUqIG5vZGVzOwoJcHJpbnRmX3MoItCS0LLQtdC00LXQvdC90Y8g0ZbQvdGE0L7RgNC80LDRhtGW0Zcg0L/RgNC+INC70Y7QtNC10Lk6XG4iKTsKCWZvciAoaSA9IDA7IGkgPCAyOyBpKyspIHsKCQlnZXRfaW5mb3JtYXRpb24oJmxpc3Rfbm90ZXNbaV0pOwoJCW5vZGVzID0gYWRkX2VsZW0obm9kZXMsIGxpc3Rfbm90ZXNbaV0pOwoJCS8vcHJpbnRfbGlzdChub2Rlcyk7Cgl9CgkvKnNvcnRfbm90ZXMobm9kZXMpOyovCglwcmludF9saXN0KG5vZGVzKTsKCWludCBvcDsKCXByaW50Zl9zKCLQntCx0LXRgNGW0YLRjCDQvdC10L7QsdGF0ZbQtNC90YMg0L7Qv9C10YDQsNGG0ZbRjjogIik7CglzY2FuZl9zKCIlZCIsICZvcCk7CglnZXRjaGFyKCk7CgoJc3dpdGNoIChvcCkgewoJY2FzZSAxOiB7CgkJcHJpbnRmKCLQktCy0LXQtNGW0YLRjCDQt9C90LDRh9C10L3QvdGPINC80ZbRgdGP0YbRjzogIik7CgkJbW9udGggPSB2YWxpZGF0aW9uX2ludCgxMiwgMSk7CgkJd2hpbGUgKG5vZGVzLT5uZXh0KSB7CgkJCWlmIChub2Rlcy0+cGVyc29uLmJpcnRoZGF5WzFdID09IG1vbnRoKSB7CgkJCQlwcmludF9pbmZvcm1hdGlvbihsaXN0X25vdGVzW2ldKTsKCQkJCWZsYWcgPSAxOwoJCQl9CgkJfQoJCWlmICghZmxhZykgewoJCQlwcmludGYoItCjINCy0LrQsNC30LDQvdC+0LzRgyDQvNGW0YHRj9GG0ZYg0L3QtSDQvWHRgG/QtNC40LvQvtGB0Ywg0LvRjtC00LXQuSDQt9GWINGB0L/QuNGB0LrRgyIpOwoJCX0KCQlfZ2V0Y2hlKCk7CgkJc3lzdGVtKCJjbHMiKTsKCQlyZXR1cm4gbWFpbigpOwoJfQoJY2FzZSAyOiB7CgkJcmV0dXJuIDA7Cgl9Cgl9CgoKfQoJCQoKaW50IHZhbGlkYXRpb25faW50KGludCBuLCBpbnQgcCkgewoJaW50IG51bWJlciA9IDAsIGxlbiA9IDAsIG1pbnVzID0gMDsKCWNoYXIqIHN0cmluZzsKCglzdHJpbmcgPSAoY2hhciopbWFsbG9jKDEwMCAqIHNpemVvZihjaGFyKSk7CglnZXRzKHN0cmluZyk7CglsZW4gPSBzdHJsZW4oc3RyaW5nKTsKCWlmIChzdHJpbmdbMF0gPT0gJy0nICYmICFwKQoJCW1pbnVzID0gMTsKCWludCBqID0gbWludXM7Cglmb3IgKGo7IGogPCBsZW47IGorKykgewoJCWlmIChpc2RpZ2l0KHN0cmluZ1tqXSkpIHsKCQkJbnVtYmVyICs9ICgoaW50KXN0cmluZ1tqXSAtIDQ4KSAqIHBvdygxMCwgbGVuIC0gaiAtIDEpOwoJCX0KCQllbHNlIHsKCQkJcHJpbnRmKCLQndC1INC60L7RgNC10LrRgtC90LjQuSDQstCy0ZbQtC4g0KHQv9GA0L7QsdGD0Lkg0YnQtTpcbiIpOwoJCQlyZXR1cm4gdmFsaWRhdGlvbl9pbnQobiwgcCk7CgkJfQoJfQoJaWYgKCFtaW51cykgewoJCWlmIChudW1iZXIgPiBuICYmIG4gIT0gMCkgewoJCQlwcmludGYoItCd0LUg0LrQvtGA0LXQutGC0L3QuNC5INCy0LLRltC0LiDQodC/0YDQvtCx0YPQuSDRidC1OlxuIik7CgkJCXJldHVybiB2YWxpZGF0aW9uX2ludChuLCBwKTsKCQl9CgkJZWxzZQoJCQlyZXR1cm4gbnVtYmVyOwoJfQoJZWxzZQoJCXJldHVybiBudW1iZXIgKj0gLTE7Cn0Kdm9pZCBnZXRfaW5mb3JtYXRpb24oc3RydWN0IE5vdGUgKnBlcnNvbikgewoJcHJpbnRmKCLQktCy0LXQtNGW0YLRjCDRltC90YTQvtGA0LzQsNGG0ZbRjiDQv9GA0L4gINC70Y7QtNC40L3RgzpcbiIpOwoJcHJpbnRmKCLQktCy0LXQtNGW0YLRjCDRltC8J9GPOiAiKTsKCWdldHMocGVyc29uLT5uYW1lKTsKCS8qcGVyc29uLm51bWJlciA9IChjaGFyKiltYWxsb2MoMjAgKiBzaXplb2YoY2hhcikpOyovCglwcmludGYoItCS0LLQtdC00ZbRgtGMINC90L7QvNC10YAg0YLQtdC70LXRhNC+0L3RgzogIik7CglnZXRzKHBlcnNvbi0+bnVtYmVyKTsKCXByaW50Zigi0JLQstC10LTRltGC0Ywg0LTQtdC90Ywg0YMg0Y/QutC40Lkg0L3QsNGA0L7QtNC40LvQsNGB0Ywg0LvRjtC00LjQvdCwOiAiKTsKCXBlcnNvbi0+YmlydGhkYXlbMF0gPSB2YWxpZGF0aW9uX2ludCgzMSwgMSk7CglwcmludGYoItCS0LLQtdC00ZbRgtGMINC80ZbRgdGP0YbRjCDRgyDRj9C60LjQuSDQvdCw0YDQvtC00LjQu9Cw0YHRjCDQu9GO0LTQuNC90LA6ICIpOwoJcGVyc29uLT5iaXJ0aGRheVsxXSA9IHZhbGlkYXRpb25faW50KDEyLCAxKTsKCXByaW50Zigi0JLQstC10LTRltGC0Ywg0YDRltC6INC90LDRgNC+0LTQttC10L3QvdGPINC70Y7QtNC40L3QuDogIik7CglwZXJzb24tPmJpcnRoZGF5WzJdID0gdmFsaWRhdGlvbl9pbnQoMjAxOSwgMSk7CglwcmludGYoIlxuXG4iKTsKCn0Kc3RydWN0IG5vZGUqIGFkZF9lbGVtKHN0cnVjdCBub2RlKiByb290LCBzdHJ1Y3QgTm90ZSBwZXJzb24pIHsKCWlmICghcm9vdCkgewoJCXN0cnVjdCBub2RlKiB0bXAgPSBtYWxsb2Moc2l6ZW9mKHN0cnVjdCBub2RlKSk7CgkJdG1wLT5wZXJzb24gPSBwZXJzb247CgkJdG1wLT5uZXh0ID0gTlVMTDsKCQlyZXR1cm4gdG1wOwoJfQoJc3RydWN0IG5vZGUgKiBwID0gcm9vdDsKCXdoaWxlIChwLT5uZXh0KSBwID0gcC0+bmV4dDsKCXN0cnVjdCBub2RlKiB0bXAgPSBtYWxsb2Moc2l6ZW9mKHN0cnVjdCBub2RlKSk7Cgl0bXAtPnBlcnNvbiA9IHBlcnNvbjsKCXRtcC0+bmV4dCA9IE5VTEw7CglwLT5uZXh0ID0gdG1wOwoJcmV0dXJuIHJvb3Q7Cn0Kdm9pZCBwcmludF9pbmZvcm1hdGlvbihzdHJ1Y3QgTm90ZSBwZXJzb24pIHsKCXByaW50Zigi0IbQvCfRjzogJXNcbiIsIHBlcnNvbi5uYW1lKTsKCXByaW50Zigi0J3QvtC80LXRgCDRgtC10LvQtdGE0L7QvdCwOiAiKTsKCWludCBsID0gc3RybGVuKHBlcnNvbi5udW1iZXIpOwoJZm9yIChpbnQgaSA9IDA7IGkgPCBsOyBpKyspCgkJcHJpbnRmKCIlYyIsIHBlcnNvbi5udW1iZXJbaV0pOwoJcHJpbnRmKCJcbiIpOwoJcHJpbnRmKCLQlNCw0YLQsCDQvdCw0YDQvtC00LbQtdC90L3RjzogIik7Cglmb3IgKGludCBpID0gMDsgaSA8IDM7IGkrKykKCQlwcmludGZfcygiJWQuICIsIHBlcnNvbi5iaXJ0aGRheVtpXSk7CglwcmludGYoIi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4iKTsKfQp2b2lkIHNvcnRfbm90ZXMoc3RydWN0IG5vZGUqIHJvb3QpIHsKCXN0cnVjdCBOb3RlIHBlcnNvbjsKCWZvciAoaW50IGkgPSAwOyBpIDwgNTsgaSsrKSB7CgkJZm9yIChpbnQgaiA9IDA7IGogPCA0IC0gaTsgaisrKSB7CgkJCWlmICgoaW50KXRvbG93ZXIocm9vdFtqXS5wZXJzb24ubmFtZVswXSkgPiAoaW50KXRvbG93ZXIocm9vdFtqKzFdLnBlcnNvbi5uYW1lWzBdKSkgewoJCQkJcGVyc29uID0gcm9vdFtqXS5wZXJzb247CgkJCQlyb290W2pdLnBlcnNvbiA9IHJvb3RbaisxXS5wZXJzb247CgkJCQlyb290W2orMV0ucGVyc29uID0gcGVyc29uOwoJCQl9CgkJfQoJfQp9Cgp2b2lkIHByaW50X2xpc3Qoc3RydWN0IG5vZGUqIHBlb3BsZSkgewoJcHJpbnRmKCLQhtC8J9GPXHRcdNCd0L7QvNC10YAg0YLQtdC70LXRhNC+0L3QsFx0XHTQlNCw0YLQsCDQvdCw0YDQvtC00LbQtdC90L3Rj1xuXG4iKTsKCXByaW50ZigiLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4iKTsKCWlmICghcGVvcGxlKSB7CgkJcHJpbnRmKCJFcnJvclxuIik7CgkJcmV0dXJuOwoJfQoJZG97CgkJcHJpbnRmKCIlc1x0JXNcdCVkLiVkLiVkIiwgcGVvcGxlLT5wZXJzb24ubmFtZSwgcGVvcGxlLT5wZXJzb24ubnVtYmVyLCBwZW9wbGUtPnBlcnNvbi5iaXJ0aGRheVswXSwKCQkJcGVvcGxlLT5wZXJzb24uYmlydGhkYXlbMV0sIHBlb3BsZS0+cGVyc29uLmJpcnRoZGF5WzJdKTsKCQlwcmludGYoIi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uIik7CgkJcGVvcGxlID0gcGVvcGxlLT5uZXh0OwoJfSB3aGlsZSAocGVvcGxlKTsKfQ==