курсач2x

advertisement
Титульный лист БЕЛОРУССКИЙ ГОСУДАРСТВЕННЫЙ УНИВЕРСИТЕТ
ИНФОРМАТИКИ И РАДИОЭЛЕКТРОНИКИ
Контрольная работа по курсу: «Основы конструирования программ»
Вариант № 18
Студент-заочник 1 курса
Группы № 402341
Сырников С.А
Преподаватель
Мытник Н. П.
Минск, 2014
Содержание
Задание №18
Создать файл, содержащий сведения о наличии билетов на рейсы Аэрофлота.
Структура записи: номер рейса, пункт назначения, время вылета, время
прибытия, количество свободных мест в салоне. На печать вывести: ВРЕМЯ
ВЫЛЕТЫ САМОЛЕТОВ В ГОРОД Х, НАЛИЧИЕ СВОБОДНЫХ МЕСТ НА
РЕЙС В ГОРОД Х С ВРЕМЕНЕМ ОТПРАВЛЕНИЯ У (Х и У вводятся с
клавиатуры).
Введение
краткие теоретические сведения об используемых алгоритмах (до 3-х
страниц).
Используется алгоритм шифрования по сдвигу на 5 элементов вверх по
таблице ASCII. При дешифрации используется обратный сдвиг на 5
элементов.
описание организации структур хранимых данных (2 страницы).
Всего используется 2 структуры данных. Одна называется avia, она отвечает
за хранения данных авиакомпании (Таблица 1).
Таблица 1. Структура данных avia.
Тип
int
char
char
char
int
Имя
nomer
dest
timeOut
timeIn
mest
Код структуры:
Описание
Номер рейса авиакомпании
Название пункта назначения
время вылета
время прибытия
количество свободных мест
struct avia {
int nomer; // номер рейса
char dest[100]; // пункт назначения
char timeOut[100]; // время вылета
char timeIn[100]; // время прибытия
int mest; // количество свободных мест
};
Другая называется autoriz она отвечает за хранения промежуточных
значений при авторизации (Таблица 2).
Таблица 2. Структура данных autoriz.
Тип
char
char
int
Имя
login
pass
access
Описание
Логин при авторизации
Пароль при авторизации
Уровень доступа (1-2)
Код структуры:
struct autoriz {
char login[10];
char pass[10];
int access;
};
создание пользовательских функций приложения (5-7 страниц).
Пользовательские функции
Возвра Вызов функции
щает
avia *
mem(int n)
char *
code(char* lpName)
char *
decode(char* lpName)
FILE *
open(char * path)
FILE *
create(char * path)
int
avia*
getsizeN(FILE *file, int
kol)
getMassAutor(FILE *file,
int n)
getmass(FILE *file, int n)
int
VuvodT(FILE* f)
void
avia
VuvodMassT(avia* a, int
n)
Elem(bool gen)
autoriz
elemAutor ()
int
save(avia* m, int n)
int
FILE *
saveAutor(autoriz * m, int
n)
add(FILE *f)
FILE *
izm(FILE *f)
FILE *
del(FILE *f)
int
poiskNomer(FILE *f)
int
poiskIsSetMestXY(FILE
*f)
int
poiskpoKolMest(FILE *f)
int
poiskpoNaznach(FILE *f)
autoriz*
Описание функции
для создания массива размером n
функция шифрования данных
функция дешифрования данных
функция открытия файла по пути path
функция открытия / создание файла по
пути path
функция получения размера массива
функция получить массива
авторизационных данных
функция получить массива структур
avia из файла
функция вывода массива структуры avia
из файла (по ключу f) в табличном виде
функция вывода массива структуры
avia в табличном виде
функция для ввода структуры avia.
Параметр gen определяет нужно ли
генерировать автоматически, или
вводить вручную данные в структуру.
Возвращает структуру avia.
функция для ввода структуры autoriz.
Возвращает структуру autoriz
функция для сохранения массива
структуры avia в файл
функция для сохранения массива
структуры autoriz в файл
Функция для создания массива
структур avia и сохранения их в файл
функция для изменения выбранного
элемента пользователем
функция для удаления выбранного
элемента пользователем
функция для поиска по номеру рейса
(структура avia) из файла
функция по поиску свободных мест на
рейс в выбранный город по выбранному
времени отправления
функция поиска по количеству мест на
рейс
функция поиска по выбранному городу
схемы алгоритмов работы приложения (минимум 3 с описанием и
кодом).
Приложение работает по такой последовательности, сначала выполняется
авторизация, и в зависимости от уровня доступа, открывается меню
администратора или меню пользователя (схема 1).
Схема 1 Авторизация
Код авторизации:
int autorizated(int intadmin){
printf("-----------------Авторизация-----------------\n");
char login[10]="";
char pass[10]="";
char text[10]="";
bool b=false;
printf("Введите логин\n");
scanf("%s", login);
printf("Введите пароль\n");
scanf("%s", pass);
FILE *f=open(AUTOR);
int n=getsizeN(f,3);
autoriz *m=getMassAutor(f,n); // получим весь массив
for (int i=0;i<n;i++){ // выберем что нам нужны
if (m[i].access==intadmin){
decode(m[i].pass);
if ((!strcmp(m[i].login,login))&&(!strcmp(m[i].pass,pass))){
switch (intadmin){
case 1: admin(); b=true; break;
case 2: user(); b=true; break;
}
}
}
}
if (!b)
printf("Неверный логин или пароль\n");
fclose(f);
printf("--------------------------------------\n");
return 0;
}
void main(void){
setlocale(LC_ALL, "rus");
int s=1;
while (s!=0){
printf("1)Вход под администратором\n");
printf("2)Вход под пользователем\n");
printf("0)Выход\n");
printf("Выберите цифру:\n");
scanf("%d", &s);
switch (s){
case 1:
autorizated(1);
break;
case 2:
autorizated(2);
break;
case 0: break;
default : printf("Выберете число от 0-2\n");
}
}
}
После авторизации под администратором мы увидим меню администратора
(Схема 2). Или же можем авторизоваться под пользователем и увидим меню
пользователя (Схема 3).
Схема 2 Меню администратора
Код функции меню администратора:
void admin(){
FILE *file2=0;
int s=1;
avia *a;
int n=0;
while (s!=0){
printf("----------------ADMIN------------------\n");
printf("1)Создание/открытие файла с данными\n");
printf("2)Добавление записи\n");
printf("3)Редактирование записи\n");
printf("4)Удаление записи\n");
printf("5)Просмотр всех данных в табличной форме\n");
printf("6)Поиск\n");
printf("7)Управление пользователями\n");
printf("0)Вернуться в начало\n");
printf("Выберите цифру:\n");
scanf("%d", &s);
switch (s){
case 1: file2=create(AVIA); break;
case 2: add(file2); break;
case 3: izm(file2); break;
case 4: del(file2); break;
case 5: VuvodT(file2); break;
case 6: Poisk(file2); break;
case 7: userTune(); break;
case 0: break;
default : printf("Выберете число от 0-7\n");
}
}
if (file2!=0)
fclose(file2);
}
Схема 3 меню пользователя
Код функции меню пользователя:
void user(){
FILE *file=0;
int s=1;
int n=3;
avia *a;
while (s!=0){
printf("-----------------USER-----------------\n");
printf("1)Открытие файла с данными\n");
printf("2)Время вылета самолетов в город\n");
printf("3)Наличие свободных мест на рейс\n");
printf("4)Просмотр всех данных в табличной форме\n");
printf("5)Поиск\n");
printf("0)Вернуться в начало\n");
printf("Выберите цифру:\n");
scanf("%d", &s);
switch (s){
case 1: file=open(AVIA); break;
case 2: poiskpoNaznach(file); break;
case 3: poiskIsSetMestXY(file); break;
case 4: VuvodT(file); break;
case 5: Poisk(file); break;
case 0: break;
default : printf("Выберете число от 0-5\n");
}
}
if (file!=0)
fclose(file);
}
Описание программы
При запуске приложения мы видим выбор между режимом пользователя и
администратора (Рисунок 1).
Рисунок 1 Главное меню
После выбора режима входа начинается авторизация (Рисунок 2).
Рисунок 2 Авторизация
Если выбрать 0 в главном меню, то выйдет из приложения. Режим
администратора дает больше возможностей, чем пользователю. В режиме
администратора, мы можем управлять пользователями, добавлять рейсы. А
вот пользователь, может лишь выполнять поиск среди присутствующих
рейсов.
Меню Администратор
В меню администратора можно зайти при запуске приложения введя верный
логин и пароль администратора. Если войдем от имени администратора, то
увидим меню администратора (Рисунок 3).
Рисунок 3 Меню администратора
Например, нам нужно впервые создать наш файл (или открыть) для работы,
для этого выберем 1 пункт меню (Рисунок 4).
Рисунок 4 Создание / открытия файла
Видим что файл успешно создан / открыт для чтения.
Чтобы просмотреть текущие рейсы выбираем пункт 5 (Рисунок 5).
Рисунок 5 Вывод текущих рейсов в виде таблицы
Для добавления записи (рейса) используем пункт 2 и следуем инструкциям
(Рисунок 6).
Рисунок 6 Добавление записи рейса
Как видим, мы успешно добавили нашу первую строку. Для изменения
строки, выберем пункт 3 и следуем инструкциям (Рисунок 7).
Рисунок 7 Изменение записи рейса
Для удаления записи используем цифру 4 (Рисунок 8) в меню
администратора.
Рисунок 8 Удаление записи рейса
Меню Поиск
Выбрав в меню администратора (цифра 6) или пользователя (цифра 5) пункт
«Поиск» увидим меню поиска (Рисунок 9).
Рисунок 9 Меню поиска
Чтобы выполнить поиск по номеру рейса выберем цифру 1 в меню поиска
(Рисунок 10).
Рисунок 10 Поиск по номеру рейса
Для поиска по пункту назначения выберем цифру 2 в меню (Рисунок 11).
Рисунок 11 Поиск по пункту назначения
Так же можем выполнить поиск по времени вылета самолета цифра 3
(Рисунок 12):
Рисунок 12 Поиск по времени вылета самолета
Поиск по времени вылета самолета можно цифрой 4 (Рисунок 13).
Рисунок 13 Поиск по времени прибытия
Поиск рейса по нужному количеству мест выберем цифру 5 (Рисунок 14).
Рисунок 14 Поиск по количеству мест
Вернуться назад
Чтобы вернуться назад в предыдущее меню нужно выбрать 0 в любом меню
(Рисунок 15).
Рисунок 15 Вернуться назад
Управление пользователями
Для того чтобы зайти в это меню, нужно войти под именем администратора и
выбрать 7ой пункт (Рисунок 16).
Рисунок 16 Меню управления пользователями
Тут мы можем добавить пользователя, выбрав 1 (Рисунок 17).
Рисунок 17 Добавление пользователя
В этом меню можем выбрать изменение пользователя цифрой 2 (Рисунок 18).
Рисунок 18 Изменения пользователя
Чтобы выполнить удаление, выбираем цифру 3 (Рисунок 19).
Рисунок 19 Удаление пользователя
Выбрав цифру 4 в меню управления пользователями, мы увидим (Рисунок 9),
список всех пользователей и администраторов.
Рисунок 20 Меню управления пользователями
Меню пользователя
В меню пользователя можно зайти при запуске приложения введя верный
логин и пароль пользователя (Рисунок 21). Выбрав цифру 5 в меню
пользователя, мы попадем в меню Поиска (Рисунок 9).
Рисунок 21 Меню пользователя
Если выбрать 1, то будет открыт файл рейсов (Рисунок 4) как и у
администратора. Для того чтобы узнать время вылета в город выберем цифру
2 (Рисунок 11). Чтобы узнать о наличии мест на рейс по выбранному городу
и времени отправления выберем цифру 3 (Рисунок 22).
Рисунок 22 Наличие мест на рейс, по выбранному городу и времени вылета
Чтобы вывести таблицу рейсов в меню пользователя выберем цифру 4
(Рисунок 23).
Рисунок 23 Вывод Таблицы рейсов
Заключение
Приложение выполнено в соответствии с заданиями, и выполняет, все те
функции, что требовались в полной мере. Программа работает без ошибок,
интерфейс максимально упрощен. В программе проработаны все возможные
исключения. Программа прекрасно работает с файлами, код динамично и
удобно разработан с целью последующего улучшения. Приложение
позволяет пользователю, выполнять поиски по рейсам, в соответствии с его
желаниями.
список использованных источников
Приложение А Листинг программы
#include <stdio.h>
#include <iostream>
#include <fstream> // работа с файлами
#include <iomanip> // манипуляторы ввода/вывода
#include <memory.h>
#define AVIA "avia.txt"
#define AUTOR "autor.txt"
#define PASS "123"
struct avia {
int nomer; // номер рейса
char dest[100]; // пункт назначения
char timeOut[100]; // время вылета
char timeIn[100]; // время прибытия
int mest; // количество свободных мест
};
struct autoriz {
char login[10];
char pass[10];
int access;
};
avia * mem(int n){
avia* mass=(avia*)calloc(n,sizeof(avia));
return mass;
}
char * code(char* lpName)
{
unsigned int a = 0;
// пока существует строка lpResult
while (lpName[a])
{
lpName[a]+=5;
a++;
}
return lpName;
}
char * decode(char* lpName)
{
unsigned int a = 0;
// пока существует строка lpResult
while (lpName[a])
{
lpName[a]-=5;
a++;
}
return lpName;
}
FILE * open(char * path){
FILE *file;
file = fopen(path,"r");
if(file == 0)
printf("не могу открыть файл '%s'\n", path);
else
printf("Файл успешно открыт '%s'\n", path);
return file;
}
FILE * create(char * path){
FILE *file;
file = fopen(path,"a+");
if(file == NULL)
printf("не могу открыть файл '%s'\n",path);
else
printf("Файл успешно открыт '%s'\n",path);
return file;
}
int getsizeN(FILE *file, int kol){ // размер массива
rewind(file); // в начало
int n=0;
char s[200]="";
while(fscanf(file,"%s\n",s) != EOF)
n++;
n=n/kol; // yyf количество элементов структур
rewind(file); // в начало
return n;
}
autoriz * getMassAutor(FILE *file,int n){ // получить массив из файла
rewind(file); // в начало
autoriz* mass=(autoriz*)calloc(n,sizeof(autoriz));
for (int i=0; i<n; i++){
decode( mass[i].pass);
fscanf (file, "%s\n%s\n%d\n", mass[i].login, mass[i].pass,
&mass[i].access);
}
fclose(file);
return mass;
}
avia * getmass(FILE *file,int n){ // получить массив из файла
rewind(file); // в начало
avia * a=mem(n);
for (int i=0; i<n; i++)
fscanf (file, "%d\n%s\n%s\n%s\n%d\n", &(a[i].nomer), a[i].dest,
a[i].timeOut, a[i].timeIn, &(a[i].mest));
return a;
}
int VuvodT(FILE* f){
if(f == 0)
{
printf("Файл не был открыт\n");
return 0;
}else
printf("Начал вывод файла в ввиде таблицы\n");
fseek(f,0,SEEK_SET); // в начало
printf("%5s%10s%10s%20s%20s%10s\n","id","Номер", "Назначение",
"Время вылета", "Время прибытия", "мест");
int i=0;
int n=0;
avia *a=mem(1);
while (fscanf (f, "%d\n%s\n%s\n%s\n%d\n", &(a[i].nomer), a[i].dest,
a[i].timeOut, a[i].timeIn, &(a[i].mest)) != EOF) {
n++;
printf ("%5d",n);
printf ("%10d\0\n",(a[i].nomer));
printf ("%10s\0\n",(a[i].dest));
printf ("%20s\0\n",(a[i].timeOut));
printf ("%20s\0\n",(a[i].timeIn));
printf ("%10d\n\0",(a[i].mest));
}
return n;
}
void VuvodMassT(avia* a, int n){
int num=1;
printf("%5s%10s%10s%20s%20s%10s\n","id","Номер", "Назначение",
"Время вылета", "Время прибытия", "мест");
for (int i=0;i<n;i++){
printf ("%5d",num);
printf ("%10d\0\n",(a[i].nomer));
printf ("%10s\0\n",(a[i].dest));
printf ("%20s\0\n",(a[i].timeOut));
printf ("%20s\0\n",(a[i].timeIn));
printf ("%10d\n\0",(a[i].mest));
num++;
}
}
avia Elem(bool gen){
avia m ;
if (gen){
m.nomer=rand()%100-50; // от минус 50 до 50
}else{
printf("Номер рейса\n");
scanf("%d",&m.nomer);
}
if (gen){
*m.dest=(char)(2);
}else{
printf("Пункт назначения\n");
fflush(stdin);
gets(m.dest);
}
if (gen){
*m.timeOut=(char)(2);
}else{
printf("Время отправления\n");
fflush(stdin);
gets(m.timeOut);
}
if (gen){
*m.timeIn=(char)(2);
}else{
printf("Время прибытия\n");
fflush(stdin);
gets(m.timeIn);
}
if (gen){
m.mest=rand()%100-50; // от минус 50 до 50
}else{
printf("Свободных мест\n");
scanf("%d",&m.mest);
}
return m;
}
autoriz elemAutor (){
autoriz m;
char text[9]="";
char pass[9];
printf("Введите логин\n");
fflush(stdin);
gets(m.login);
printf("Введите пароль\n");
fflush(stdin);
gets(m.pass);
code(m.pass);
printf("Введите уровень доступа 1(админ) 2 (user)\n");
scanf("%d",&m.access);
return m;
}
int save(avia* m, int n){
FILE *f = fopen(AVIA,"w+");
if (f==NULL){
printf("Не открыт файл для чтения!!!\n\n");
return 0;
}
fseek(f,0L,SEEK_SET); // в начало
for (int i=0;i<n ; i++){ // запись
fprintf (f,"%d\n\0",(m[i].nomer));
fprintf (f,"%s\n\0",(m[i].dest));
fprintf (f,"%s\n\0",(m[i].timeOut));
fprintf (f,"%s\n\0",(m[i].timeIn));
fprintf (f,"%d\n\0",(m[i].mest));
}
printf("Успешно сохранены изменения!\n");
fclose(f); // сохраняем
return n;
}
int saveAutor(autoriz * m, int n){
FILE *f = fopen(AUTOR,"w+");
if (f==NULL){
printf("Не открыт файл для чтения!!!\n\n");
return 0;
}
fseek(f,0L,SEEK_SET); // в начало
for (int i=0;i<n ; i++){ // запись
fprintf (f,"%s\n\0",(m[i].login));
fprintf (f,"%s\n\0",(m[i].pass));
fprintf (f,"%d\n\0",(m[i].access));
}
printf("Успешно сохранены изменения!\n");
fclose(f); // сохраняем
return n;
}
FILE * add(FILE *f){ // заставим все ввести и сохраним в файл
printf("Запущено добавление в файл\n");
if (f==NULL){
printf("Не открыт файл для чтения!!!\n\n");
return 0;
}
fseek(f,0L,SEEK_END); // в конец
int n=-1;
while(n<0){
printf("Сколько добавим?(минимум 1)\n");
scanf("%d",&n);
if (n<0)
printf("Нужно число большее 0\n");
}
avia *m=mem(n);
for (int i=0;i<n;i++)
m[i]= Elem(false); // генерить true
save(m,n);
return create(AVIA); //переоткрываем
}
FILE * izm(FILE *f){ // изменить, вывести все, и спросить что изменить
avia *m;
int c=-1;
printf("Запущено изменение\n");
if (f==NULL){
printf("Не открыт файл для чтения!!!\n\n");
return 0;
}
int n=VuvodT(f);
while(c<0){
printf("Какую строку изменить (ее ID)?\n");
scanf("%d",&c);
if ((c<0)&&(c>n))
printf("Нужно число большее 0 и меньшее %d\n",n);
}
m=getmass(f,n); // получим весь массив
for (int i=0;i<n;i++)
if (c-1==i) // заменим нужное
m[i]= Elem(false); // генерить true
fclose(f); // закрываем текущий
save(m,n); // сохраняем
return create(AVIA); //переоткрываем текущий
}
FILE * del(FILE *f){ // изменить, вывести все, и спросить что изменить
avia *m;
printf("Запущено удаление\n");
if (f==NULL){
printf("Не открыт файл!!!\n\n");
return 0;
}
int n=VuvodT(f);
int c=-1;
while(c<0){
printf("Какую строку удалить (ее ID)?\n");
scanf("%d",&c);
if ((c<0)&&(c>n))
printf("Нужно число большее 0 и меньшее %d\n",n);
}
m=getmass(f,n); // получим весь массив
avia* m2=mem(n-1); // создаем второй
int num=0;
for (int i=0;i<n;i++){
if (c-1!=i){ // заменим нужное
m2[num]=m[i]; // генерить true
num++;
}
}
fclose(f); // закрываем текущий
save(m2,num); // сохраняем
return create(AVIA); //переоткрываем текущий
}
int poiskNomer(FILE *f){
if (f==NULL){
printf("Не открыт файл!!!\n\n");
return 0;
}
int c=-1;
while(c<0){
printf("Какой номер ищем?\n");
scanf("%d",&c);
if ((c<0))
printf("Нужно число большее 0 \n");
}
int n=getsizeN(f,5);
avia *m=getmass(f,n); // получим весь массив
avia* m2=mem(n); // создаем второй
int num=0;
for (int i=0;i<n;i++) // выберем что нам нужны
if (m[i].nomer==c ){ // заменим нужное
m2[num]=m[i]; // генерить true
num++;
}
// выведем
m2=(avia*)realloc(m2,num*sizeof(avia));
VuvodMassT(m2,num);
}
int poiskIsSetMestXY(FILE *f){
if (f==NULL){
printf("Не открыт файл!!!\n\n");
return 0;
}
// НАЛИЧИЕ СВОБОДНЫХ МЕСТ НА РЕЙС В ГОРОД Х С
ВРЕМЕНЕМ ОТПРАВЛЕНИЯ У
//(Х и У вводятся с клавиатуры)
char c[100]="";
printf("Укажите город\n");
scanf("%s",&c);
char time[100]="";
printf("Укажите время отправления\n");
scanf("%s",&time);
int n=getsizeN(f,5);
avia *m=getmass(f,n); // получим весь массив
avia* m2=mem(n); // создаем второй
int num=0;
for (int i=0;i<n;i++){ // выберем что нам нужны
if ((!strcmp(m[i].dest,c))&&(!strcmp(m[i].timeOut,time))){ //
заменим нужное
m2[num]=m[i]; // генерить true
num++;
}
}
// выведем
if (num==0)
printf("Нет свободных мест на рейс в город %s с временем
отправления %s\n",c, time);
else{
m2=(avia*)realloc(m2,num*sizeof(avia));
VuvodMassT(m2,num);
}
}
int poiskpoKolMest(FILE *f){
if (f==NULL){
printf("Не открыт файл!!!\n\n");
return 0;
}
int c=-1;
while(c<0){
printf("От скольки мест ищем?\n");
scanf("%d",&c);
if ((c<0))
printf("Нужно число большее 0 \n");
}
int n=getsizeN(f,5);
avia *m=getmass(f,n); // получим весь массив
avia* m2=mem(n); // создаем второй
int num=0;
for (int i=0;i<n;i++) // выберем что нам нужны
if (m[i].nomer>c ){ // заменим нужное
m2[num]=m[i]; // генерить true
num++;
}
// выведем
m2=(avia*)realloc(m2,num*sizeof(avia));
VuvodMassT(m2,num);
}
int poiskpoNaznach(FILE *f){
if (f==NULL){
printf("Не открыт файл!!!\n\n");
return 0;
}
char c[100]="";
printf("Укажите город\n");
scanf("%s",&c);
int n=getsizeN(f,5);
avia *m=getmass(f,n); // получим весь массив
avia* m2=mem(n); // создаем второй
int num=0;
for (int i=0;i<n;i++) // выберем что нам нужны
if (!strcmp(m[i].dest,c)){ // заменим нужное
m2[num]=m[i]; // генерить true
num++;
}
// выведем
m2=(avia*)realloc(m2,num*sizeof(avia));
VuvodMassT(m2,num);
}
int poiskpoTimeOut(FILE *f){
if (f==NULL){
printf("Не открыт файл!!!\n\n");
return 0;
}
char c[100]="";
printf("Укажите Время вылета\n");
scanf("%s",&c);
int n=getsizeN(f,5);
avia *m=getmass(f,n); // получим весь массив
avia* m2=mem(n); // создаем второй
int num=0;
for (int i=0;i<n;i++) // выберем что нам нужны
if (!strcmp(m[i].timeOut,c)){ // заменим нужное
m2[num]=m[i]; // генерить true
num++;
}
// выведем
m2=(avia*)realloc(m2,num*sizeof(avia));
VuvodMassT(m2,num);
}
int poiskpoTimeIn(FILE *f){
if (f==NULL){
printf("Не открыт файл!!!\n\n");
return 0;
}
char c[100]="";
printf("Укажите Время прибытия\n");
scanf("%s",&c);
int n=getsizeN(f,5);
avia *m=getmass(f,n); // получим весь массив
avia* m2=mem(n); // создаем второй
int num=0;
for (int i=0;i<n;i++) // выберем что нам нужны
if (!strcmp(m[i].timeIn,c)){ // заменим нужное
m2[num]=m[i]; // генерить true
num++;
}
// выведем
m2=(avia*)realloc(m2,num*sizeof(avia));
VuvodMassT(m2,num);
}
int Poisk(FILE *f){ // изменить, вывести все, и спросить что изменить
if (f==NULL){
printf("Не открыт файл!!!\n\n");
return 0;
}
int s=1;
while (s!=0){
printf("--------------ПОИСК-----------------\n");
printf("1)Поиск по номеру рейса\n");
printf("2)Поиск по пункту назначения\n");
printf("3)Поиск по времени вылету\n");
printf("4)Поиск по времени прибытия\n");
printf("5)Поиск по количеству свободных мест\n");
printf("0)Вернуться назад\n");
printf("Выберите цифру:\n");
scanf("%d", &s);
switch (s){
case 1: poiskNomer(f); break;
case 2: poiskpoNaznach(f); break;
case 3: poiskpoTimeOut(f); break;
case 4: poiskpoTimeIn(f); break;
case 5: poiskpoKolMest(f); break;
case 0: break;
default : printf("Выберете число от 0-2\n");
}
}
return 0;
}
int vuvodUser(){
FILE *f=open(AUTOR);
char text[10]="";
int n=getsizeN(f,3);
autoriz *m=getMassAutor(f,n); // получим весь массив
printf("%10s%10s%10s%10s\n","id","Логин","Пароль","Доступ");
for (int i=0;i<n;i++){ // выберем что нам нужны
decode(m[i].pass);
printf("%10d%10s%10s%10d\n",i+1,m[i].login,m[i].pass,
m[i].access);
}
fclose(f);
return 0;
}
int izmUser(){
FILE *f=open(AUTOR);
if (f==NULL){
printf("Не открыт файл!!!\n\n");
return 0;
}
vuvodUser();
int c=-1;
while(c<0){
printf("Какого изменить ID?\n");
scanf("%d",&c);
if ((c<0))
printf("Нужно число большее 0 \n");
}
int n=getsizeN(f,3);
autoriz *m=getMassAutor(f,n); // получим весь массив
printf("%10s%10s%10s%10s\n","id","Логин","Пароль","Доступ");
for (int i=0;i<n;i++) // выберем что нам нужны
if (c-1==i)
m[i]= elemAutor(); // генерить true
fclose(f); // закрываем текущий
saveAutor(m,n); // сохраняем
return 0;
}
int delUser(){
FILE *f=open(AUTOR);
if (f==NULL){
printf("Не открыт файл!!!\n\n");
return 0;
}
vuvodUser();
int c=-1;
while(c<0){
printf("Какого удалить ID?\n");
scanf("%d",&c);
if ((c<0)) printf("Нужно число большее 0 \n");
}
int n=getsizeN(f,3);
autoriz *m=getMassAutor(f,n); // получим весь массив
autoriz * m2=(autoriz*)calloc(n-1,sizeof(autoriz));
int num=0;
for (int i=0;i<n;i++){
if (c-1!=i){ // заменим нужное
m2[num]=m[i]; // генерить true
num++;
}
}
fclose(f); // закрываем текущий
saveAutor(m2,num); // сохраняем
return 0;
}
int addUser(){
FILE *f=open(AUTOR);
if (f==NULL){
printf("Не открыт файл!!!\n\n");
return 0;
}
vuvodUser();
int n=getsizeN(f,3);
autoriz *m=getMassAutor(f,n); // получим весь массив
autoriz * m2=(autoriz*)calloc(n+1,sizeof(autoriz));
int num=0;
for (int i=0;i<n;i++){
m2[num]=m[i];
num++;
}
m2[num]=elemAutor(); // генерить true
num++;
fclose(f); // закрываем текущий
saveAutor(m2,num); // сохраняем
return 0;
}
int userTune(){
int s=1;
while (s!=0){
printf("--------------Управление пользователями--------------\n");
printf("1)Добавление пользователя\n");
printf("2)Изменения пользователя\n");
printf("3)Удаления пользователя\n");
printf("4)Вывод всех пользователей\n");
printf("0)Вернуться назад\n");
printf("Выберите цифру:\n");
scanf("%d", &s);
switch (s){
case 1: addUser(); break;
case 2: izmUser(); break;
case 3: delUser(); break;
case 4: vuvodUser(); break;
case 0: break;
default : printf("Выберете число от 0-2\n");
}
}
return 0;
}
void admin(){
FILE *file2=0;
int s=1;
avia *a;
int n=0;
while (s!=0){
printf("----------------ADMIN------------------\n");
printf("1)Создание/открытие файла с данными\n");
printf("2)Добавление записи\n");
printf("3)Редактирование записи\n");
printf("4)Удаление записи\n");
printf("5)Просмотр всех данных в табличной форме\n");
printf("6)Поиск\n");
printf("7)Управление пользователями\n");
printf("0)Вернуться в начало\n");
printf("Выберите цифру:\n");
scanf("%d", &s);
switch (s){
case 1: file2=create(AVIA); break;
case 2: add(file2); break;
case 3: izm(file2); break;
case 4: del(file2); break;
case 5: VuvodT(file2); break;
case 6: Poisk(file2); break;
case 7: userTune(); break;
case 0: break;
default : printf("Выберете число от 0-7\n");
}
}
if (file2!=0)
fclose(file2);
}
void user(){
FILE *file=0;
int s=1;
int n=3;
avia *a;
while (s!=0){
printf("-----------------USER-----------------\n");
printf("1)Открытие файла с данными\n");
printf("2)Время вылета самолетов в город\n");
printf("3)Наличие свободных мест на рейс\n");
printf("4)Просмотр всех данных в табличной форме\n");
printf("5)Поиск\n");
printf("0)Вернуться в начало\n");
printf("Выберите цифру:\n");
scanf("%d", &s);
switch (s){
case 1: file=open(AVIA); break;
case 2: poiskpoNaznach(file); break;
case 3: poiskIsSetMestXY(file); break;
case 4: VuvodT(file); break;
case 5: Poisk(file); break;
case 0: break;
default : printf("Выберете число от 0-5\n");
}
}
if (file!=0)
fclose(file);
}
int autorizated(int intadmin){
printf("-----------------Авторизация-----------------\n");
char login[10]="";
char pass[10]="";
char text[10]="";
printf("Введите логин\n");
scanf("%s", login);
printf("Введите пароль\n");
scanf("%s", pass);
FILE *f=open(AUTOR);
int n=getsizeN(f,3);
autoriz *m=getMassAutor(f,n); // получим весь массив
for (int i=0;i<n;i++){ // выберем что нам нужны
if (m[i].access==intadmin){
decode(m[i].pass);
if ((!strcmp(m[i].login,login))&&(!strcmp(m[i].pass,pass))){
switch (intadmin){
case 1: admin(); break;
case 2: user(); break;
}
}
}
}
fclose(f);
return 0;
}
void main(void){
//Создать файл, содержащий сведения о наличии билетов на рейсы
Аэрофлота.
//Структура записи: номер рейса, пункт назначения, время вылета,
время прибытия, количество свободных мест в салоне.
//На печать вывести: ВРЕМЯ ВЫЛЕТЫ САМОЛЕТОВ В ГОРОД Х,
//НАЛИЧИЕ СВОБОДНЫХ МЕСТ НА РЕЙС В ГОРОД Х С
ВРЕМЕНЕМ ОТПРАВЛЕНИЯ У (Х и У вводятся с клавиатуры).
setlocale(LC_ALL, "rus");
int s=1;
while (s!=0){
printf("1)Вход под администратором\n");
printf("2)Вход под пользователем\n");
printf("0)Выход\n");
printf("Выберите цифру:\n");
scanf("%d", &s);
switch (s){
case 1:
autorizated(1);
break;
case 2:
autorizated(2);
break;
case 0: break;
default : printf("Выберете число от 0-2\n");
}
}
}
Download