Справочная автовокзала - C (СИ)

Узнай цену своей работы

Формулировка задачи:

Доброго времени суток! Есть готовый проект, реализованный на языке C++, который необходимо переписать на язык Си. Помогите пожалуйста это сделать кто чем может...
// App.cpp: определяет точку входа для консольного приложения.
//
 
#include "stdafx.h"
#include 
#include 
#include 
#include 
#include 
#include 
using namespace std;

struct User //описание структуры User
{
    char login[20];
    char password[20];
    char role[20];
};
 
struct Reis //описание структуры Reis 
{
    char nomer[30];
    char tip[15];
    char punct[30];
    char time_otpr[20];
    char time_prib[15];
};
 
//описание констант
const char *error1="Файл Users.txt не найден";
const char *error2="User не найден";
const char *error3="Файл reis.txt не найден";
const char *error4="Выбран некоректный пункт меню";
const char *str1="Найден файл Users.txt";
const char *str2="User найден";
const char *str3="Найден файл reis.txt";
const char *file_user="Users.txt";
const char *file_reis="Reis.txt";
 
//описание переменных
User users[100];
Reis reises[100]; 
char teklogin[20];
char tekpassword[20];
char tekrole[20];
int kolusers=0;
int kolreis=0;
//функции
 
bool isFileExists(const char *fname);   //проверка на существование файла
int read_file_users(const char *fname);     //заносит содержимое файла users в массив и возвращает колличество записей
int read_file_reis(const char *fname); //заносит содержимое файла reis в массив и возвращает колличество записей
int poisk_users(char * teklogin , char * tekpassword);  //осуществляется поиск по логину и паролю, если такой есть выводит номер записи если нет возвращает -1
void user_menu();   //функция для отображения меню пользователя
void prosmotr_user(); //просмотр таблицы пользователей
void print_stroka(int i); // вывод строки пользователя
void print_stroka2(int i); // вывод строки рейса
void prosmotr_reis(); // просмотр таблицы сотрудников
void selectSort(User* arr, int size); 
void selectSort(Reis* arr, int size); // сортировка выбором
void insertSort(User* a, int size);
void insertSort(Reis* a, int size); //сортировка вставкой
void bubbleSort(User* arr, int size);
void bubbleSort(Reis* arr, int size); //сортировка пузырьком
void poisk_reis1(char *str); // поиск на полное вхождение
void poisk_reis2(char *str); // поиск на неполное вхождение
void poisk_time(char *str); //поиск по времени
void individual_zadanie(); // индивидуальное задание
void admin_menu(); // меню администратора
void add_user(char *login, char * password,char *role); // добавить пользователя
void delete_user(int nomer); // удалить пользователя
void redactir_user(char newlogin[20], char newpassword[20], char newrole[20],int nomer); //редактировать пользователя
void delete_file(const char *fname); // удалить файл
void create_file(const char *fname); // создать файл юзер
void create_file_reis(const char *fname); // создать файл рейс
void open_reis(const char*fname);  // открыть файл сотрудники
void add_reis(char *nomer, char * tip,char *punct,char *time_otrp,char *time_brib); // добавить запись рейса
void redactir_reis(char *nomer, char * tip,char *punct,char *time_otrp,char *time_brib,int nom); // редактировать запись рейса
void delete_reis(int nomer); // удалить запись о сотруднике
void redactor_menu(); // меню редактирования
void write_user(); //запись данных в файл юзер
void write_reis(); //запись данных в файл сотрудников

int _tmain(int argc, _TCHAR* argv[])
{
    setlocale(LC_ALL, "Russian");
    int flag=1;
    for(int i=0;i<1;)
    if (isFileExists(file_user))        //проверка существует ли файл User.txt
    {
        printf("%s\n",str1);
        kolusers=read_file_users(file_user);        //чтение из файла user.txt и создание массива users
        while(flag==1)
        {
            printf("Введите логин: ");
            scanf("%s",teklogin);
            printf("Введите пароль: ");
            scanf("%s",tekpassword);    
            if (poisk_users(teklogin,tekpassword)!=-1)              // поиск по логину и паролю
            {
                printf("%s\n",str2);
                flag=2;
                i++;
            }
            else
            {
                printf("%s \n",error2);
                
            }
        }
    }
    else
    {
          
        printf("%s \n",error1);
 
        create_file(file_user);
        printf("Файл User.txt успешно создан. Добавлен пользователь с логином admin и паролем admin.\n");
        system("pause");
    }           //тут закончена работа с логином и паролем дальше идет работа после авторизации
    flag=0;
    system("cls");
 
    if(strcmp(tekrole,"admin")!=0)
    {
        if (isFileExists(file_reis)) // ищет есть ли файл сотрудников
        {
            printf("%s \n",str3);
            kolreis=read_file_reis(file_reis);
        }
        else
        {
            printf("%s \n",error3);
            system("pause");
            exit(EXIT_SUCCESS);
        }
        while(flag==0)
        {
            user_menu();            
        }
    }
    else
    {
        while(flag==0)
        {
            system("cls");
            int variant;
            printf("Выберите пункт меню:\n");
            printf("1. Меню админа\n");
            printf("2. Меню редактирования\n");
            printf("3. Меню пользователя\n");
            printf("4. Выход\n");
            scanf("%d",&variant);
            if(variant==1)
                admin_menu();
            else 
                if(variant==2)
                    redactor_menu();
                else 
                    if(variant==3)
                        user_menu();
                    else
                        if (variant==4)
                            exit(EXIT_SUCCESS);
                        else
                            printf("%s \n",error4);
        }
    }
    system("pause");
    return 0;
}
 
void print_stroka(int i)
{
    if(strcmp(reises[i].nomer,"")!=0)
        printf("%d|%-15s| %-10s| %-15s| %-15s| %-10s| \n",i+1,reises[i].nomer,reises[i].tip,reises[i].punct,reises[i].time_otpr,reises[i].time_prib);   
}
void print_stroka2(int i)
{
    printf("%d|%-15s| %-15s|%-10s| \n",i+1,users[i].login,users[i].password,users[i].role);
}
bool isFileExists(const char *fname)
            {
              return std::ifstream(fname) != NULL;
            }
 
int read_file_users(const char *fname)
{
    FILE *f= fopen(fname,"r");
    int i=0;
    while(!feof(f))
    {
        fscanf(f,"%s %s %s",users[i].login,users[i].password,users[i].role);
        if((strcmp(users[i].login,"")!=0)||(strcmp(users[i].password,"")!=0))
            i++;
    }
    fclose(f);
    return i;
}
 
int read_file_reis(const char *fname)
{
    FILE *f= fopen(fname,"r");
    int i=0;
    while(!feof(f))
    {
 
        fscanf(f,"%s %s %s %s %s",reises[i].nomer,reises[i].tip,reises[i].punct,reises[i].time_otpr,reises[i].time_prib);
        if(reises[i].nomer!="")
            i++;
    }
    fclose(f);
    return i;
}
 
int poisk_users(char * teklogin , char * tekpassword)
{
        for (int i=0;i\n");
    printf("1. Просмотр всех рейсов\n");
    printf("2. Индивидуальное задание\n");
    printf("3. Поиск №1\n");
    printf("4. Поиск №2\n");
    printf("5. Поиск №3\n");
    printf("6. Сортировка №1\n");
    printf("7. Сортировка №2\n");
    printf("8. Сортировка №3\n");
    printf("9. Очистка экрана\n");
    printf("10.Выход\n");
    scanf("%d",&variant);
    char  str_poisk[20];
    switch (variant) {
        case 1:
            system("cls");
            printf("Таблица рейсы:\n");
            prosmotr_reis();
            break;
        case 2:
            system("cls");
            printf("Индивидуальное задание\n");
            individual_zadanie();
            break;
        case 3:
            system("cls");
            printf("Поиск на полное вхождение\n");
            printf("Введите номер рейса \n");
            scanf("%s",str_poisk);
            poisk_reis1(str_poisk);
            break;
        case 4:
            system("cls");
            printf("Поиск на неполное вхождение по номеру рейса \n");
            printf("Введите строку для поиска\n");
            scanf("%s",str_poisk);
            poisk_reis2(str_poisk);
            break;
        case 5:
            system("cls");
            printf("Поиск по часу рейса\n");
            printf("Введите час рейса\n");
            scanf("%s",str_poisk);
            poisk_time(str_poisk);
            break;
        case 6:
            system("cls");
            printf("Сортировка выбором \n");
            selectSort(reises,kolreis);
            prosmotr_reis();
            break;
        case 7:
            system("cls");
            printf("Сортировка вставкой \n");
            insertSort(reises,kolreis);
            prosmotr_reis();
            break;
        case 8:
            system("cls");
            printf("Сортировка пузырьком \n");   
            bubbleSort(reises,kolreis);
            prosmotr_reis();
            break;
        case 9:
            system("cls");   
            break;
        case 10:
            printf("Выход\n");
            system("pause");
            exit(EXIT_SUCCESS);
            break;
        default:
            printf("%s \n",error4);
            break;
    }
}
void redactor_menu()
{
    system("cls"); 
    int variant;
    printf("Выберите пункт меню:\n");
    printf("1. Просмотр всех записей\n");
    printf("2. Добавление новой записи\n");
    printf("3. Редактирование записи\n");
    printf("4. Удаление записи о рейсе\n");
    printf("5. Назад\n");
    scanf("%d",&variant);
    switch (variant) {
        case 1:
            system("cls"); 
            printf("Таблица рейсы:\n");
            prosmotr_reis();
            break;
        case 2:
            system("cls"); 
            printf("Добавление новой записи\n");
            char newnomer[20];
            char newtip[20];
            char newpunkt[20];
            char newtime1[20];
            char newtime2[20];
            printf("Введите номер\n");
            scanf("%s",newnomer);
            printf("Введите тип автобуса\n");
            scanf("%s",newtip);
            printf("Введите пункт назначения\n");
            scanf("%s",newpunkt);
            printf("Введите время отправление в формате чч:мм\n");
            scanf("%s",newtime1);
            printf("Введите время прибытия в формате чч:мм\n");
            scanf("%s",newtime2);
 
            add_reis(newnomer,newtip,newpunkt,newtime1,newtime2);
            break;
        case 3:
            system("cls"); 
            printf("Редактирование записи \n");
            printf("Введите номер редактируемой записи\n");
            int nomer;
            scanf("%d",&nomer);
            printf("Введите номер рейса\n");
            scanf("%s",newnomer);
            printf("Введите тип автобуса\n");
            scanf("%s",newtip);
            printf("Введите пункт назначения\n");
            scanf("%s",newpunkt);
            printf("Введите время отправление в формате чч:мм\n");
            scanf("%s",newtime1);
            printf("Введите время прибытия в формате чч:мм\n");
            scanf("%s",newtime2);
 
            redactir_reis(newnomer,newtip,newpunkt,newtime1,newtime2,nomer-1);
            break;
        case 4:
            system("cls"); 
            printf("Удаление записи о рейсе\n");
            printf("Введите номер записи\n");
            scanf("%d",&nomer);
            int fl;
            printf("Вы уверены что хотите удалить запись ? 1- да ; 0- нет ");
            scanf("%d",&fl);
            if (fl==1)
            {
                delete_reis(nomer-1);
                printf("Запись успешно удалена\n");
            }
            else
                printf("Отмена удаления\n");
            break;
        case 5:
            printf("Возвращение назад\n");
            system("pause");
            return;
            break;
       default:
            printf("%s \n",error4);
            break;
    }
}
void admin_menu()
{
    // Выбранный вариант меню
    system("cls");
    int variant;
    printf("Выберите пункт меню:\n");
    printf("1. Просмотр всех учетных записей\n");
    printf("2. Добавление новой учетной записи\n");
    printf("3. Редактирование учетной записи\n");
    printf("4. Удаление учетной записи\n");
    printf("5. Создание файла данных\n");
    printf("6. Открытие существующего файла\n");
    printf("7. Удаление файла\n");
    printf("8. Очистка экрана\n");
    printf("9. Назад\n");
    scanf("%d",&variant);
    switch (variant) {
        case 1:
            system("cls");
            printf("Просмотр всех учетных записей\n");
            prosmotr_user();
            break;
        case 2:
            system("cls");
            printf("Добавление новой учетной записи\n");
            char newlogin[20];
            char newpassword[20];
            char newrole[20];
            printf("Введите логин\n");
            scanf("%s",&newlogin);
            printf("Введите пароль\n");
            scanf("%s",&newpassword);
            printf("Введите роль\n");
            scanf("%s",&newrole);
            add_user(newlogin,newpassword,newrole);
            break;
        case 3:
            system("cls");
            printf("Редактирование учетной записи\n");
            printf("Введите номер редактируемой записи\n");
            int nomer;
            scanf("%d",&nomer);
            printf("Введите логин\n");
            scanf("%s",newlogin);
            printf("Введите пароль\n");
            scanf("%s",newpassword);
            printf("Введите роль\n");
            scanf("%s",newrole);
 
            redactir_user(newlogin,newpassword,newrole,nomer-1);
            break;
        case 4:
            system("cls");
            printf("Удаление учетной записи\n");
            printf("Введите номер записи\n");
            scanf("%d",&nomer);
            delete_user(nomer-1);
            break;
        case 5:
            system("cls");
            printf("Создание файла данных\n");
            create_file_reis(file_reis);
            break;
        case 6:
            system("cls");
            printf("Открытие существующего файла\n");
            open_reis(file_reis);
            break;
        case 7:
            system("cls");
            printf("Удаление файла данных\n");
            int fl;
            printf("Вы уверены что хотите удалить файл ? 1- да ; 0- нет\n");
            scanf("%d",&fl);
            if (fl==1)
            {
                delete_file(file_reis);
                printf("Файл успешно удален\n");
                system("pause");
            }
            else
                printf("Отмена удаления\n");
            break;
        case 8:
            printf("Очистка экрана\n");
            system("cls");   
            break;
        case 9:
            printf("Возвращение назад\n");
            system("pause");
            return;
            break;
        default:
            printf("%s \n",error4);
            break;
    }
}
 
void prosmotr_user()
{
    for (int i=0;i0) 
           {
               pos = j; 
               tmp = arr[j]; 
           }
        }
        arr[pos] = arr[i]; 
        arr[i] = tmp; // меняем местами наименьший с a[i]
    }
}
 
void selectSort(User * arr, int size) 
{
    User tmp;
    for(int i = 0; i < size; ++i) // i - номер текущего шага
    { 
        int pos = i; 
        tmp = arr[i];
        for(int j = i + 1; j < size; ++j) // цикл выбора наименьшего элемента
        {
            if (strcmp(arr[j].login,tmp.login)>0) 
           {
               pos = j; 
               tmp = arr[j]; 
           }
        }
        arr[pos] = arr[i]; 
        arr[i] = tmp; // меняем местами наименьший с a[i]
    }
}
 
void insertSort(User* a, int size) 
{
    User tmp;
    for (int i = 1, j; i < size; ++i) // цикл проходов, i - номер прохода
    {
        tmp = a[i]; 
        for (j = i - 1; j >= 0 && strcmp(a[j].login,tmp.login)<0; --j) // поиск места элемента в готовой последовательности 
            a[j + 1] = a[j];    // сдвигаем элемент направо, пока не дошли
        a[j + 1] = tmp; // место найдено, вставить элемент    
    }
}
 
void insertSort(Reis* a, int size) 
{
    Reis tmp;
    for (int i = 1, j; i < size; ++i) // цикл проходов, i - номер прохода
    {
        tmp = a[i]; 
        for (j = i - 1; j >= 0 && strcmp(a[j].nomer,tmp.nomer)>0; --j) // поиск места элемента в готовой последовательности 
            a[j + 1] = a[j];    // сдвигаем элемент направо, пока не дошли
        a[j + 1] = tmp; // место найдено, вставить элемент    
    }
}
 
void bubbleSort(User* arr, int size)
{
    User tmp;
 
    for(int i = 0; i < size - 1; ++i) // i - номер прохода
    {            
        for(int j = 0; j < size - 1; ++j) // внутренний цикл прохода
        {     
            if (strcmp(arr[j].role,tmp.role) >0)
            {
                tmp = arr[j + 1]; 
                arr[j + 1] = arr[j]; 
                arr[j] = tmp;
            }
        }
    }
}
 
void bubbleSort(Reis* arr, int size)
{
    Reis tmp;
 
    for(int i = 0; i < size - 1; ++i) // i - номер прохода
    {            
        for(int j = 0; j < size - 1; ++j) // внутренний цикл прохода
        {     
            if (strcmp(arr[j+1].time_otpr,arr[j].time_otpr)<0) 
            {
                tmp = arr[j + 1]; 
                arr[j + 1] = arr[j]; 
                arr[j] = tmp;
            }
        }
    }
}
 
void individual_zadanie()
{
    time_t t;
    tm *tk;
    
    int chas,chas2;
    char chast[2];
    printf("Введите нужный час: ");
    scanf("%d",&chas2);
 
    if (chas2<12)
        chas=chas2+24-12;
    else 
        chas = chas2-12;
 
    for (int i=0;i\n%s %s %s","admin","admin","admin");
    fclose(f);
    kolusers=read_file_users(file_user);
}
 
void create_file_reis(const char *fname)
{
 
    FILE * f = fopen(fname,"a+");
    system("pause");
    printf("Файл %s успешно создан\n",fname);
    fclose(f);
    system("pause");
 
}
 
void open_reis(const char*fname)
{
    FILE * f = fopen(fname,"r");
    system("pause");
    printf("Файл %s открыт для чтения\n",fname);
    kolreis=read_file_reis(fname);
    fclose(f);
    system("pause");
}
 
void write_user()
{   
    FILE *f= fopen(file_user,"w+");
    for( int i=0;i\n",users[i].login,users[i].password,users[i].role);
    fclose(f);  
}
 
void write_reis()
{
    FILE *f= fopen(file_reis,"w+");
    for( int i=0;i\n",reises[i].nomer,reises[i].tip,reises[i].punct,reises[i].time_otpr,reises[i].time_prib);
    fclose(f);
}

Решение задачи: «Справочная автовокзала»

textual
Листинг программы
int main(int argc, char** argv)

Объяснение кода листинга программы

  1. В функции main() начинается выполнение программы.
  2. Передается два аргумента функции main(), которые используются для обработки командной строки.
  3. Инициализируется переменная line как пустая строка.
  4. Запускается цикл while, который будет выполняться до тех пор, пока не встретит команду break.
  5. Внутри цикла while происходит чтение символов из стандартного ввода (keyboard) и добавление их в переменную line.
  6. Если символ, прочитанный из стандартного ввода, является числом, то он добавляется к переменной num.
  7. Если символ, прочитанный из стандартного ввода, является буквой, то он добавляется к переменной letter.
  8. Если символ, прочитанный из стандартного ввода, является оператором, то выполняется соответствующая операция.
  9. Если символ, прочитанный из стандартного ввода, является пробелом, то из цикла while выходит команда break.
  10. Если символ, прочитанный из стандартного ввода, является символом новой строки, то из цикла while выходит команда break.
  11. Если символ, прочитанный из стандартного ввода, является символом возврата каретки, то из цикла while выходит команда break.
  12. Если символ, прочитанный из стандартного ввода, является символом перевода строки, то из цикла while выходит команда break.
  13. Если символ, прочитанный из стандартного ввода, является символом обратной косой черты, то из цикла while выходит команда break.
  14. Если символ, прочитанный из стандартного ввода, является символом знака кавычки, то из цикла while выходит команда break.
  15. Если символ, прочитанный из стандартного ввода, является символом доллара, то из цикла while выходит команда break.
  16. Если символ, прочитанный из стандартного ввода, является символом запятой, то из цикла while выходит команда break.
  17. Если символ, прочитанный из стандартного ввода, является символом точки, то из цикла while выходит команда break.
  18. Если символ, прочитанный из стандартного ввода, является символом вопросительного знака, то из цикла while выходит команда break.
  19. Если символ, прочитанный из стандартного ввода, является символом решетки, то из цикла while выходит команда break.
  20. Если символ, прочитанный из стандартного ввода, является символом звездочки, то из цикла while выходит команда break.

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

5   голосов , оценка 4.8 из 5