Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 11.09.2013, 22:45   #1
Joker_94
 
Регистрация: 08.09.2013
Сообщений: 4
Восклицание c++/строки, оптимизация кода.

Доброго времени суток!
в универе задали задание... звучит вот так
Завдання до лабораторної роботи № 1
Створіть імітацію входу в систему, що буде запитувати пароль і виводити запрошення тільки у випадку збігу введеного пароля з заздалегідь визначеним у програмі, а у випадку помилки виводити повідомлення про помилку і прохання повторити введення. Після 3 помилок програма повинна вивес-ти повідомлення про спробу несанкціонованого доступу і завершити роботу. (для простоти у виді коду використовуйте змінну типу іnt).

Завдання підвищеної складності: ускладніть програму тим, що
а) у ній буде розміщуватись база користувачів (logіn і password), і буде вимагатися не лише вве-дення паролю, а й логінну і відповідний йому пароль.

Написал что то нубское... но работает, как можно усложнить/упростить? что добавить? Посоветуйте пожалуста)

конкретно хотел бы узнать как зделать так чтобы програма читала логин и пароль с файла, и чтобы логин был с символов... и чтобы логинов несколько сделать

Код:

#include "stdafx.h"
#include <stdio.h>
#include <iostream>
#include <conio.h>
#include <string.h>
#include <stdlib.h>
using namespace std;
char c=3;
int l, p;
int main()    
   {
const int log=123, pass=100;
                          setlocale(LC_ALL, "Russian");
    system("cls");
m1:
cout<<"Введите логин:";
cin>>l;
system ("cls");
cout<<"Введите пароль:";
cin>>p;
   system ("cls");
{
if (l==log && p==pass)
{
cout<<"Все верно!Вы авторизированы!\n";
} 
else c--;
      while (c>=0)
       {   
  
   cout<<"Вы ошиблись, повторите ввод\n Попыток ввода осталось "<<c+1<<" попыток\n";
   goto m1;
  
       }
if (c<=0)
{
printf("В доступе отказано! Количество попыток ограничено!!"); 
}
goto m;

}
m:
getch();
system("pause");
}

Последний раз редактировалось Joker_94; 11.09.2013 в 22:54.
Joker_94 вне форума Ответить с цитированием
Старый 11.09.2013, 23:02   #2
ViktorR
Старожил
 
Регистрация: 23.10.2010
Сообщений: 2,378
По умолчанию

При таком вводе, как понимаю, пароль виден на экране, а это не просто плохо, а очень ...
Так думаю, что ввод пароля надо оформить иначе, без вывода на экран вводимых пользователем символов и с выводом вместо символов некоторого знака, например звездочки, плюса, ...

А goto долой.
Цикл с постусловием, в котором считаем число попыток.
Или вываливаемся при правильном условии (логин + пароль = Ок), или завершаем работу программы при превышении числа попыток.
Сообщать об оставшемся числе попыток нестОит.
Сообщений "Логин:", "Пароль:", "Авторизация успешная", "Авторизация не успешная" достаточно, так думаю.



Как-то так, ...
Как-то так, ...
ViktorR вне форума Ответить с цитированием
Старый 11.09.2013, 23:06   #3
Joker_94
 
Регистрация: 08.09.2013
Сообщений: 4
По умолчанию

я все это понимаю... НО не знаю как реализовать это програмно...

как закрить пароль звездочками ?

Цитата:
Сообщение от ViktorR Посмотреть сообщение
При таком вводе, как понимаю, пароль виден на экране, а это не просто плохо, а очень ...
Так думаю, что ввод пароля надо оформить иначе, без вывода на экран вводимых пользователем символов и с выводом вместо символов некоторого знака, например звездочки, плюса, ...

А goto долой.
Цикл с постусловием, в котором считаем число попыток.
Или вываливаемся при правильном условии (логин + пароль = Ок), или завершаем работу программы при превышении числа попыток.
Сообщать об оставшемся числе попыток нестОит.
Сообщений "Логин:", "Пароль:", "Авторизация успешная", "Авторизация не успешная" достаточно, так думаю.



Как-то так, ...
Код:
#include "stdafx.h"
#include <stdio.h>
#include <iostream>
#include <conio.h>
#include <string.h>
#include <stdlib.h>
using namespace std;
char c=3;
int l, p;
int main()    
   {
const int log=77, pass=100;
                          setlocale(LC_ALL, "Russian");
    system("cls");
while (c>=0)
{   
cout<<"Введите логин:\n";
cin>>l;
system ("cls");
cout<<"Введите пароль:\n";
cin>>p;
system ("cls");
{
if (l==log && p==pass)
{
cout<<"Все верно!Вы авторизированы!\n";break;
} 
else c--;
cout<<"Вы ошиблись, повторите ввод\n Попыток ввода осталось "<<c+1<<" попыток\n";
}
if (c<=0)
{
printf("В доступе отказано!\n"); 
}
}
getch();
system("pause");
}
убрал метки... всунул все в один цикл. как закрить пароль звездочками, и как сделать логин с буквами ??? !!!

Последний раз редактировалось Stilet; 12.09.2013 в 16:07.
Joker_94 вне форума Ответить с цитированием
Старый 12.09.2013, 14:44   #4
challengerr
Участник клуба
 
Аватар для challengerr
 
Регистрация: 30.07.2008
Сообщений: 1,609
По умолчанию

Чтение из файла - STL класс fstream (C++), функция fscanf стандартной библиотеки С

Логин задается массивом STL классы string или vector (C++), массив типа char{N}, char* языка C.

Несколько логинов - массив классов string или vector (C++), ,двухмерный массив типа char** языка С.

Для закрытия звездочками надо сделать буферизацию входа. Отлавливать символы вводимые с клавиатуры средствами WinAPI (отлавливать событие WM_CHAR в очереди сообщений) Сделайте ввод средствами WinAPI а не стандартными средствами C++/C.
"SPACE.THE FINAL FRONTIER.This's a voyage of starship Enterprise. It's 5-year mission to explore strange new worlds,to seek out new life and civilizations,to boldly go where no man has gone before"
challengerr вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Оптимизация кода LuckyTheGreat C# (си шарп) 3 15.07.2011 00:46
Оптимизация кода Shouldercannon Общие вопросы Delphi 23 22.07.2010 22:45
Оптимизация кода WoWan-SM Общие вопросы .NET 4 27.04.2010 11:33
Оптимизация кода в си dampirik Помощь студентам 4 07.07.2009 11:30
Оптимизация кода viscas PHP 3 31.05.2009 16:04