Блок-схема программы
Листинг программы
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <math.h>
#include <conio.h>
#include <locale.h>
void zapis(float *userarray,char *user,int k);
char Loginandpassword(char *vvodlogin,char *vvodpass);
void Input_elements(int k,float *userarray);
float* New_element(int k,float *userarray,char *user);
float* Delete_element(int k,float *userarray,char *user);
void Proizvedenie(int k,float *userarray);
void Formula(int k,float *userarray);
void User_func(float *userarray,int k,char *user);
void User(char *user);
void main()
{
setlocale(LC_ALL,"Rus");
int status=0;
char ch;
char vvodlogin[256],vvodpass[256],login[256],pass[256],user[256];
FILE *fp;
char *fp_name = "Logsandpass.txt";
fp=fopen(fp_name,"r+");
if(fp==NULL)
{
printf("Ошибка. Файл авторизации не найден.");
}
fseek( fp, 0L, SEEK_SET );
Loginandpassword(vvodlogin,vvodpass);
fseek( fp, 0L, SEEK_SET );
while(!feof(fp))
{
fscanf (fp,"%s\t%s\n",login,pass);
if (strcmp(login, vvodlogin ) == 0)
{
if (strcmp(vvodpass,_strrev(pass)) == 0)
{
status = 1;
strcpy(user,login);
User(user);
}
}
}
if(status==0){
printf("\nОшибка авторизации! Программа завершает работу.");
}
fclose(fp);
getch ();
}
void User(char *user)
{
FILE *fp;
char* fp_name = "userdata.txt";
char login[256],userdata[256],*token;
float userarray[100];
int k,i;
if((fp = fopen(fp_name,"r+"))== 0)
{
printf ("Ошибка ввода, повторите\n");
exit(1);
}
fseek(fp, 0L, SEEK_SET );
while (!feof(fp))
{
fscanf (fp,"%s\t%[^\n]",login,userdata);
if (strcmp(user,login) == 0)
{
printf("%s:\n",user);
k=0;
token = strtok(userdata,"\t");
while (token !=NULL)
{
userarray[k]= atof(token);
k++;
token = strtok(NULL,"\t");
}
User_func(userarray,k,user);
break;
}
}
fclose(fp);
}
void User_func(float *userarray,int k,char *user)
{
char mychoice;
do{
system("cls"); // очистить консоль
printf("\n1:Вывод элементов массива");
printf("\n2:Добавление нового элемента в конец массива");
printf("\n3:Удаление элемента");
printf("\n4:Произведение элементов массива");
printf("\n5:Расчет элементов массива по формуле F(x)");
printf("\n6:Выход из программы");
mychoice = getch ();
switch ( mychoice )
{
case '1':
printf("\nЭлементы массива: ");
Input_elements(k,userarray);
getch();
continue;
case '2':
printf("\nДобавление нового элемента в конец массива ");
New_element(k,userarray,user);
k++; //увеличение числа элементов в массиве после добавления
getch();
continue;
case '3':
printf("\nУдаление элемента ");
Delete_element(k,userarray,user);
k--; // уменьшение числа элементов после удаления
getch();
continue;
case '4':
Proizvedenie(k,userarray);
getch();
continue;
case '5':
printf("\nРасчет элементов массива по формуле F(x) ");
Formula(k,userarray);
getch();
continue;
case'6':
continue;
default:
printf("\nОшибка ввода! Повторите\n");
getch();
continue;
}
}while(mychoice!='6');
zapis(userarray,user,k);
}
void zapis(float *userarray,char *user,int k)
{
int m=0,n=0,i,f=0,j,l;
char ch;
FILE *fp;
char *fp_name = "userdata.txt";
fp=fopen (fp_name,"r");
fseek( fp, 0L, SEEK_SET );
while(!feof(fp))
{
ch=getc(fp);
if(ch=='\n')
{
m++;
}
}
char** mass=(char**)malloc((m)*sizeof(char));
char** buff=(char**)malloc((m)*sizeof(char));
fclose(fp);
fp=fopen(fp_name,"r");
for(i=0;!feof(fp);n++)
{
ch=getc(fp);
if(ch=='\n')
{
if (f<n)
{
f=n;
}
mass[i]=(char*)malloc((f+1)*sizeof(char));
buff[i]=(char*)malloc((f+1)*sizeof(char));
i++;
n=0;
}
}
fclose(fp);
fp=fopen (fp_name,"r");
for (i=0;i<m;i++)
{
fscanf (fp,"%s\t%[^\n]",mass[i],buff[i]);
if(strcmp(mass[i],user)==0)
{
l=strlen(mass[i]);
}
strcat(mass[i],"\t");
strcat(mass[i],buff[i]);
}
fclose(fp);
fp=fopen (fp_name,"w+");
for(i=0;i<m;i++)
{
if(strncmp(user,mass[i],l)==0)
{
fprintf(fp,"%s",user);
for(j=0;j<k;j++)
{
fprintf(fp,"\t%.0f",userarray[j]);
}
fprintf(fp,"\n");
}else
{
fputs(mass[i],fp);
fprintf(fp,"\n");
}
}
fclose(fp);
}
char Loginandpassword(char *vvodlogin,char *vvodpass)
{
int g=0;
printf ("\nВведите логин: ");
scanf("%s",vvodlogin);
printf ("\nВведите пароль: ");
do {
vvodpass[g]=getch();
if (vvodpass[g]==8)
{
vvodpass[--g]=0;
if (g>=0) printf("\b \b");
if (g<0) g=0;
}
else
{
if (vvodpass[g]!=13) printf("*");
g++;
}
}
while (vvodpass[g-1]!=13);
vvodpass[--g]='\0';
return *vvodlogin,*vvodpass;
}
void Input_elements(int k,float *userarray) // вывод элементов массива данного пользователя
{
for(int i=0;i<k;i++)
{
printf("\n%0.3f",userarray[i]);
}
}
float *New_element(int k,float *userarray,char *user)
{
scanf ("%f",&userarray[k]);
printf("Действие выполнено успешно!");
return userarray;
}
float *Delete_element(int k,float *userarray,char *user)
{
int i,n,j;
scanf ("%d",&n);
n--;
for (i = 0,j=0; i<k;i++,j++)
{
if (i==n)
{
j++;
}
userarray[i]=userarray[j];
}
printf("Элемент удален!");
return 0;
}
void Proizvedenie(int k,float *userarray)
{
double p=1.0;
for(int i=0;i<k;i++)
{
p *= userarray[i];
}
printf("\nПроизведение элементов массива: %0.3f", p);
}
void Formula(int k,float *userarray) // расчет по формуле F(x) каждого элемента массива пользователя
{
double y;
for(int i=0;i<k;i++)
{
if (userarray[i]<0)
{
y=3.0*userarray[i]*userarray[i]+3.0*userarray[i]+8.0;
}
else if(0<=userarray[i]<20.0)
{
if(userarray[i]!=8.0) y=-5.0/(userarray[i]-8.0);
else {
printf("\n%d элемент не принадлежит ОДЗ", i+1);
continue;
}
}
else
{
y=4.0*(userarray[i]+8.0);
}
printf("\nF[%d] = %0.3lf",i+1,y);
}
}