diff --git a/HomeworksAccept/homework21.09/read.me b/HomeworksAccept/homework21.09/read.me deleted file mode 100644 index 5e4d090..0000000 --- a/HomeworksAccept/homework21.09/read.me +++ /dev/null @@ -1 +0,0 @@ -3 домашка diff --git a/HomeworksAccept/homework28.09/read.me b/HomeworksAccept/homework28.09/read.me deleted file mode 100644 index 5061ad0..0000000 --- a/HomeworksAccept/homework28.09/read.me +++ /dev/null @@ -1 +0,0 @@ -4 домашка diff --git a/HomeworksAccept/read.me b/HomeworksAccept/read.me deleted file mode 100644 index 1773bf8..0000000 --- a/HomeworksAccept/read.me +++ /dev/null @@ -1 +0,0 @@ -Здесь представлены домашнии работы, прошедшии проверку diff --git a/PhoneDirectory/PhoneDirectory.sln b/PhoneDirectory/PhoneDirectory.sln new file mode 100644 index 0000000..e51342e --- /dev/null +++ b/PhoneDirectory/PhoneDirectory.sln @@ -0,0 +1,31 @@ + +Microsoft Visual Studio Solution File, Format Version 12.00 +# Visual Studio Version 17 +VisualStudioVersion = 17.0.31903.59 +MinimumVisualStudioVersion = 10.0.40219.1 +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "PhoneDirectory", "PhoneDirectory\PhoneDirectory.vcxproj", "{0385D0A5-47BF-46A8-B0DF-66F1C9FBE35A}" +EndProject +Global + GlobalSection(SolutionConfigurationPlatforms) = preSolution + Debug|x64 = Debug|x64 + Debug|x86 = Debug|x86 + Release|x64 = Release|x64 + Release|x86 = Release|x86 + EndGlobalSection + GlobalSection(ProjectConfigurationPlatforms) = postSolution + {0385D0A5-47BF-46A8-B0DF-66F1C9FBE35A}.Debug|x64.ActiveCfg = Debug|x64 + {0385D0A5-47BF-46A8-B0DF-66F1C9FBE35A}.Debug|x64.Build.0 = Debug|x64 + {0385D0A5-47BF-46A8-B0DF-66F1C9FBE35A}.Debug|x86.ActiveCfg = Debug|Win32 + {0385D0A5-47BF-46A8-B0DF-66F1C9FBE35A}.Debug|x86.Build.0 = Debug|Win32 + {0385D0A5-47BF-46A8-B0DF-66F1C9FBE35A}.Release|x64.ActiveCfg = Release|x64 + {0385D0A5-47BF-46A8-B0DF-66F1C9FBE35A}.Release|x64.Build.0 = Release|x64 + {0385D0A5-47BF-46A8-B0DF-66F1C9FBE35A}.Release|x86.ActiveCfg = Release|Win32 + {0385D0A5-47BF-46A8-B0DF-66F1C9FBE35A}.Release|x86.Build.0 = Release|Win32 + EndGlobalSection + GlobalSection(SolutionProperties) = preSolution + HideSolutionNode = FALSE + EndGlobalSection + GlobalSection(ExtensibilityGlobals) = postSolution + SolutionGuid = {FFEC2D6C-66E2-4562-A3DE-9379145A9E8E} + EndGlobalSection +EndGlobal diff --git a/PhoneDirectory/PhoneDirectory/PhoneDirectory.vcxproj b/PhoneDirectory/PhoneDirectory/PhoneDirectory.vcxproj new file mode 100644 index 0000000..059b646 --- /dev/null +++ b/PhoneDirectory/PhoneDirectory/PhoneDirectory.vcxproj @@ -0,0 +1,147 @@ + + + + + Debug + Win32 + + + Release + Win32 + + + Debug + x64 + + + Release + x64 + + + + 16.0 + Win32Proj + {0385d0a5-47bf-46a8-b0df-66f1c9fbe35a} + PhoneDirectory + 10.0 + + + + Application + true + v143 + Unicode + + + Application + false + v143 + true + Unicode + + + Application + true + v143 + Unicode + + + Application + false + v143 + true + Unicode + + + + + + + + + + + + + + + + + + + + + true + + + false + + + true + + + false + + + + Level3 + true + WIN32;_DEBUG;_CONSOLE;%(PreprocessorDefinitions) + true + + + Console + true + + + + + Level3 + true + true + true + WIN32;NDEBUG;_CONSOLE;%(PreprocessorDefinitions) + true + + + Console + true + true + true + + + + + Level3 + false + _DEBUG;_CONSOLE;%(PreprocessorDefinitions) + true + + + Console + true + + + + + Level3 + true + true + true + NDEBUG;_CONSOLE;%(PreprocessorDefinitions) + true + + + Console + true + true + true + + + + + + + + + \ No newline at end of file diff --git a/PhoneDirectory/PhoneDirectory/PhoneDirectory.vcxproj.filters b/PhoneDirectory/PhoneDirectory/PhoneDirectory.vcxproj.filters new file mode 100644 index 0000000..669bc4e --- /dev/null +++ b/PhoneDirectory/PhoneDirectory/PhoneDirectory.vcxproj.filters @@ -0,0 +1,22 @@ + + + + + {4FC737F1-C7A5-4376-A066-2A32D752A2FF} + cpp;c;cc;cxx;c++;cppm;ixx;def;odl;idl;hpj;bat;asm;asmx + + + {93995380-89BD-4b04-88EB-625FBE52EBFB} + h;hh;hpp;hxx;h++;hm;inl;inc;ipp;xsd + + + {67DA6AB6-F800-4c08-8B7A-83BB121AAD01} + rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe;resx;tiff;tif;png;wav;mfcribbon-ms + + + + + Исходные файлы + + + \ No newline at end of file diff --git a/PhoneDirectory/PhoneDirectory/listOfNumbersAndNames.txt b/PhoneDirectory/PhoneDirectory/listOfNumbersAndNames.txt new file mode 100644 index 0000000..e69de29 diff --git a/PhoneDirectory/PhoneDirectory/main.c b/PhoneDirectory/PhoneDirectory/main.c new file mode 100644 index 0000000..639002e --- /dev/null +++ b/PhoneDirectory/PhoneDirectory/main.c @@ -0,0 +1,364 @@ +#include +#include +#include +#include < string.h > +#include + +int scanOneInt(); +void addRecord(char number[], char name[], char listOfString[100][100], int records); +bool isStringEqual(char string1[], char string2[]); +void findNumberByName(char name[], char data[]); +void findNameByNumber(char number[], char data[]); +void saveInformation(char listOfStrings[100][100], int records); +void printRecords(char arrayOut[100][100]); + +bool testAddRecord(char arrayOut[100][100]) { + int records = 0; + char name1[5] = { 'I','l','y','a', '\0'}; + char number1[12] = {'8','8','0','0','3','5','5','3','5','3','5','\0'}; + addRecord(number1, name1, arrayOut, records); + saveInformation(arrayOut, records); + records += 2; + char name2[5] = { 'T', 'i', 'm', 'a', '\0'}; + char number2[12] = { '8','9','0','9','5','9','0','3','0','1','6','\0'}; + addRecord(number2, name2, arrayOut, records); + if (!isStringEqual(arrayOut[0], name1)) { + return false; + } + if (!isStringEqual(arrayOut[1], number1)) { + return false; + } + if (!isStringEqual(arrayOut[2], name2)) { + return false; + } + if (!isStringEqual(arrayOut[3], number2)) { + return false; + } + return true; +} + +bool testFindNumberByName() { + char data[100] = { '\0' }; + char name[5] = { 'I','l','y','a', '\0' }; + char number[12] = { '8','8','0','0','3','5','5','3','5','3','5','\0' }; + + findNumberByName(name, data); + return isStringEqual(data, number); +} + +bool testFindNameByNumber() { + char data[100] = { '\0' }; + char name[5] = { 'I','l','y','a', '\0' }; + char number[12] = { '8','8','0','0','3','5','5','3','5','3','5','\0' }; + + findNameByNumber(number, data); + return isStringEqual(data, name); +} + +int whichSizeFile(void) { + FILE* file = fopen("listOfNumbersAndNames.txt", "r"); + if (file == NULL) { + printf(" !"); + return; + } + char data[100] = { '\0' }; + int sizeFile = 0; + while (fscanf(file, "%s", data) == 1) { + ++sizeFile; + } + + fclose(file); + return sizeFile; +} + +bool testSaveInformation(char arrayOut[100][100]) { + saveInformation(arrayOut, 4); + FILE* file = fopen("listOfNumbersAndNames.txt", "r"); + if (file == NULL) { + printf(" !"); + return; + } + char data[100] = { '\0' }; + int i = 0; + int sizeFile = whichSizeFile(); + while (fscanf(file, "%s", data) == 1) + { + if (sizeFile - i == 4 && !isStringEqual(data, "Ilya")) { + return false; + } + if (sizeFile - i == 3 && !isStringEqual(data, "88003553535")) { + return false; + } + if (sizeFile - i == 2 && !isStringEqual(data, "Tima")) { + return false; + } + if (sizeFile - i == 1 && !isStringEqual(data, "89095903016")) { + return false; + } + ++i; + } + + fclose(file); + return true; +} + +bool testPrint(char arrayOut[100][100]) { + int sizeFile = whichSizeFile(); + char data[100][100] = { '0' }; + printRecords(data); + int j = 0; + for (int i = 0; i < sizeFile; ++i) { + if (sizeFile - i <= 4 && !isStringEqual(data[i], arrayOut[j])) { + return false; + } + if (sizeFile - i <= 4) { + ++j; + } + } + return true; +} + +bool isStringEqual(char string1[], char string2[]) { + const size_t lengthString1 = strlen(string1); + const size_t lengthString2 = strlen(string2); + size_t i = 0; + while (i < lengthString1 && i < lengthString2) { + if (string1[i] != string2[i]) { + return false; + } + ++i; + } + return lengthString1 - lengthString2 == 0; +} + +void addRecord(char number[], char name[], char listOfString[100][100], int records) { + const size_t lengthName = strlen(name); + for (size_t i = 0; i < lengthName; ++i) { + listOfString[records][i] = name[i]; + } + ++records; + const size_t lengthNumber = strlen(number); + for (size_t i = 0; i < lengthNumber; ++i) { + listOfString[records][i] = number[i]; + } +} + +void printRecords(char arrayOut[100][100]) { + FILE *file = fopen("listOfNumbersAndNames.txt", "r"); + if (file == NULL) { + printf(" !"); + return; + } + char data[100] = { '\0' }; + int i = 0; + while (fscanf(file, "%s", data) == 1) + { + size_t sizeData = strlen(data); + for (size_t j = 0; j < sizeData; ++j) { + arrayOut[i][j] = data[j]; + } + ++i; + } + + fclose(file); +} + +void findNumberByName(char name[], char data[]) { + FILE* file = fopen("listOfNumbersAndNames.txt", "r"); + if (file == NULL) { + printf(" !"); + return; + } + bool isNeedPrint = false; + while (fscanf(file, "%s", data) == 1) + { + if (isNeedPrint) { + return data; + break; + } + + if (isStringEqual(data, name)) { + isNeedPrint = true; + } + } + + fclose(file); +} + +void findNameByNumber(char number[],char last[]) { + FILE* file = fopen("listOfNumbersAndNames.txt", "r"); + if (file == NULL) { + printf(" !"); + return; + } + char data[100] = { '\0' }; + while (fscanf(file, "%s", data) == 1) + { + if (isStringEqual(data, number)) { + return last; + break; + } + + const size_t lengthLast = strlen(last); + for (size_t i = 0; i < lengthLast; ++i) { + last[i] = '\0'; + } + + const size_t lengthData = strlen(data); + for (size_t i = 0; i < lengthData; ++i) { + last[i] = data[i]; + } + + } + + fclose(file); +} + +void saveInformation(char listOfStrings[100][100], int records) { + FILE* file = fopen("listOfNumbersAndNames.txt", "a"); + if (file == NULL) { + printf(" !"); + return; + } + int i = 0; + while (i < records) { + fprintf(file, "%s\n", listOfStrings[i]); + ++i; + fprintf(file, "%s\n", listOfStrings[i]); + ++i; + } + + fclose(file); +} + +void talkWithUser() { + printf("%s", " .0 - , 1 - ( ), 2 - , 3 - , 4 - , 5 - \n"); + + int comand = scanOneInt(); + + while (comand < 0 || comand > 5) { + printf("%s\n", " . "); + comand = scanOneInt(); + } + + char listOfString[100][100] = { '\0' }; + int records = 0; + char data[100] = { '\0' }; + + while (comand != 0) { + if (comand == 1 && records < 100) { + printf("%s\n", " , . 100 "); + char name[100] = { '\0' }; + int checkScanf = scanf("%s", &name); + while (checkScanf != 1 || (int)strlen(name) >= 100) { + while (getchar() != '\n') { + } + + printf("%s", "... \n"); + checkScanf = scanf("%s", &name); + } + char number[100] = { '\0' }; + checkScanf = scanf("%s", &number); + while (checkScanf != 1 || (int)strlen(number) >= 100) { + while (getchar() != '\n') { + } + + printf("%s", "... \n"); + checkScanf = scanf("%s", &number); + } + addRecord(number, name, listOfString, records); + records += 2; + } else if (comand == 1) { + printf("%s", " \n"); + } + if (comand == 2) { + char arrayOut[100][100] = {'\0'}; + printRecords(arrayOut); + int i = 0; + while (i < 100 && strlen(arrayOut[i])){ + size_t sizeArrayOut = strlen(arrayOut[i]); + for (int j = 0; j < sizeArrayOut; ++j) { + printf("%c", arrayOut[i][j]); + } + ++i; + printf("\n"); + } + } + if (comand == 3) { + printf("%s\n", " . 100 "); + char name[100] = {'\0'}; + int checkScanf = scanf("%s", &name); + while (checkScanf != 1 || (int)strlen(name) >= 100) { + while (getchar() != '\n') { + } + + printf("%s", "... \n"); + checkScanf = scanf("%s", &name); + } + + findNumberByName(name, data); + printf("%s\n", data); + for (int i = 0; i < 100; ++i) { + data[i] = '\0'; + } + } + if (comand == 4) { + printf("%s\n", " ."); + char number[100] = { '\0' }; + int checkScanf = scanf("%s", &number); + while (checkScanf != 1 || (int)strlen(number) >= 100) { + while (getchar() != '\n') { + } + + printf("%s", "... \n"); + checkScanf = scanf("%s", &number); + } + findNameByNumber(number, data); + printf("%s\n", data); + for (int i = 0; i < 100; ++i) { + data[i] = '\0'; + } + } + if (comand == 5) { + saveInformation(listOfString, records); + } + printf("%s\n", " .(0 - )"); + comand = scanOneInt(); + while (comand < 0 || comand > 5) { + printf("%s\n", " . "); + comand = scanOneInt(); + } + } +} + +int main() { + setlocale(LC_ALL, "RUS"); + char arrayOut[100][100] = { '\0' }; + printf("%s", " ? 1, \n"); + int isNeedTests = scanOneInt(); + if (isNeedTests == 1) { + if (testAddRecord(arrayOut) && testSaveInformation(arrayOut) && testFindNameByNumber(arrayOut) && testFindNumberByName(arrayOut) && testPrint(arrayOut)) { + printf("%s", " !\n"); + } + else { + printf("%s", " ..."); + return 0; + } + } + talkWithUser(); +} + +int scanOneInt() { + int number = 0; + int checkScanf = scanf("%d", &number); + + while (checkScanf != 1) { + while (getchar() != '\n') { + } + + printf("%s", "... \n"); + checkScanf = scanf("%d", &number); + } + + return number; +} \ No newline at end of file