Справочная автовокзала - 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;i 0) { 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)
Объяснение кода листинга программы
- В функции main() начинается выполнение программы.
- Передается два аргумента функции main(), которые используются для обработки командной строки.
- Инициализируется переменная line как пустая строка.
- Запускается цикл while, который будет выполняться до тех пор, пока не встретит команду break.
- Внутри цикла while происходит чтение символов из стандартного ввода (keyboard) и добавление их в переменную line.
- Если символ, прочитанный из стандартного ввода, является числом, то он добавляется к переменной num.
- Если символ, прочитанный из стандартного ввода, является буквой, то он добавляется к переменной letter.
- Если символ, прочитанный из стандартного ввода, является оператором, то выполняется соответствующая операция.
- Если символ, прочитанный из стандартного ввода, является пробелом, то из цикла while выходит команда break.
- Если символ, прочитанный из стандартного ввода, является символом новой строки, то из цикла while выходит команда break.
- Если символ, прочитанный из стандартного ввода, является символом возврата каретки, то из цикла while выходит команда break.
- Если символ, прочитанный из стандартного ввода, является символом перевода строки, то из цикла while выходит команда break.
- Если символ, прочитанный из стандартного ввода, является символом обратной косой черты, то из цикла while выходит команда break.
- Если символ, прочитанный из стандартного ввода, является символом знака кавычки, то из цикла while выходит команда break.
- Если символ, прочитанный из стандартного ввода, является символом доллара, то из цикла while выходит команда break.
- Если символ, прочитанный из стандартного ввода, является символом запятой, то из цикла while выходит команда break.
- Если символ, прочитанный из стандартного ввода, является символом точки, то из цикла while выходит команда break.
- Если символ, прочитанный из стандартного ввода, является символом вопросительного знака, то из цикла while выходит команда break.
- Если символ, прочитанный из стандартного ввода, является символом решетки, то из цикла while выходит команда break.
- Если символ, прочитанный из стандартного ввода, является символом звездочки, то из цикла while выходит команда break.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д