Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Лабораторная работа №1 (Вариант 23).doc
Скачиваний:
12
Добавлен:
20.06.2014
Размер:
428.03 Кб
Скачать
  1. Блок-схема программы

  1. Листинг программы

#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);

}

}