// 6-9.cpp: определяет точку входа для консольного приложения.
//
//
#define _CRT_SECURE_NO_WARNINGS
#include "stdafx.h"
#include <conio.h>
#include <windows.h>
#include <stdio.h>
#include <iostream>
struct TElem
{
char Name[20];
int bal;
TElem *Pred;
TElem *Next;
};
TElem *Nach=NULL,*Kon=NULL,*Sechas=NULL;
void Show(TElem *St)
{
Sechas=Nach;
while (Sechas!=Kon)
{
printf("%s ",Sechas->Name);
printf("%d\n",Sechas->bal);
Sechas=Sechas->Next;
}
printf("%s ",Sechas->Name);
printf("%d\n",Sechas->bal);
_getch();
return;
}
TElem *Criet(TElem *St,char Name[20],int bal)
{
TElem *Elem=new TElem;
strcpy(Elem->Name,Name);
Elem->bal=bal;
Elem->Next=St;
return Elem;
}
TElem *AddFirst(TElem *St,char Name[20],int bal)
{
TElem *Elem=new TElem;
strcpy(Elem->Name,Name);
Elem->bal=bal;
St->Pred=Elem;
Elem->Next=St;
return Elem;
}
TElem *AddLast(TElem *St,char Name[20],int bal)
{
TElem *Elem=new TElem;
strcpy(Elem->Name,Name);
Elem->bal=bal;
Elem->Pred=St;
St->Next=Elem;
Elem->Next=NULL;
return Elem;
}
TElem *AddMid(TElem *St,char Name[20],int bal)
{
TElem *Elem=new TElem;
strcpy(Elem->Name,Name);
Elem->bal=bal;
Elem->Next=St->Next;
St->Next=Elem;
Elem->Pred=St;
return Elem;
}
void FromFile(TElem *St)
{
FILE *in=fopen("in.txt","r");
char Name[20],bal1[4];
int bal;
int prov;
while (1)
{
Sechas=Nach;
fscanf(in,"%s",Name);
if (Name[0]=='*' && Name[1]=='*') return;
fscanf(in,"%s",bal1);
bal=atoi(bal1);
if (Nach==NULL) {Kon=Nach=Criet(Nach,Name,bal);Kon=Nach;}
else
{
if (bal<Nach->bal) {Nach=AddFirst(Nach,Name,bal);}
else
{
if (bal>Kon->bal) {Kon=AddLast(Kon,Name,bal);}
else
{
while (bal<Sechas->bal)
{
Sechas=Sechas->Next;
}
Sechas=AddMid(Sechas,Name,bal);
}
}
}
}
fclose(in);
return;
}
int main(int argc, char* argv[]) {
SetConsoleOutputCP(1251);
SetConsoleCP(1251);
char ch,Name[20],bal1[4];
bool flag=FALSE;
int bal;
while (1) {
system("cls");
printf("\n1 - Создать список");
printf("\n2 - Добавить в начало");
printf("\n3 - Добавить в конец");
printf("\n4 - Добавить в середину");
printf("\n5 - Показать");
printf("\n6 - Взять из файла");
printf("\n0 - Выход из программы");
printf("\nВыбор: ");
fflush(stdin);
scanf("%c",&ch);
fflush(stdin);
if(ch=='0') {break;}
switch (ch) {
case '1':
scanf("%s",Name);
scanf("%s",bal1);
bal=atoi(bal1);
Kon=Nach=Criet(Nach,Name,bal);
Kon=Nach;
break;
case '2':
scanf("%s",Name);
scanf("%s",bal1);
bal=atoi(bal1);
Nach=AddFirst(Nach,Name,bal);
Sechas=Nach;
break;
case '3':
scanf("%s",Name);
scanf("%s",bal1);
bal=atoi(bal1);
Kon=AddLast(Kon,Name,bal);
break;
case '4':
scanf("%s",Name);
scanf("%s",bal1);
bal=atoi(bal1);
Sechas=AddMid(Sechas,Name,bal);
break;
case '5':
Show(Nach);
break;
case '6':
FromFile(Nach);
break;
default:
printf("\nНеопознанная команда");
printf("\nНажмите любую клавишу...");
_getch();
break;
}
}
printf("\nПрограмма завершена");
printf("\nНажмите любую клавишу...");
_getch();
return 0;
}