
18.12.2016, 17:55
|
Прохожий
|
|
Регистрация: 02.10.2016
Сообщения: 18
Версия Delphi: Delphi 7
Репутация: 10
|
|
Исправить программу
Как сделать так, что бы user имел доступ к нескольким программам записанным в файле(в файле они записаны без пробелов, например, 123 . и нам нужно запустить 2 программу или любую другую ) Проблема в том , что сейчас программа читает только 1 число
Тут уже попытки исправить, но теперь после ввода имени файла программа прекращает работать, а до этого все хорошо работала
Код:
program Project1;
{$APPTYPE CONSOLE}
uses
windows,
SysUtils,
Laba1 in 'Laba1.pas',
laba2 in 'laba2.pas',
Laba3 in 'Laba3.pas',
Laba4 in 'Laba4.pas',
Laba5 in 'Laba5.pas',
Laba6 in 'Laba6.pas',
Laba7 in 'Laba7.pas';
type
Tuser=record //сюда записывается инфа из файла
typeofuser:string;
login,pass:string;
whichprogr:string;
end;
type
Tsort = record //для сортировки по алфавиту для сравнения логинов и паролей
login: string[20];
password: string [20];
end;
var User:array[0..100] of Tuser;
us:array[0..100] of Tsort;
index:integer;
.....
procedure free; //очищаем массив
var
I: Integer;
begin
for I := 0 to index-1 do
begin
us[i].login:='';
us[i].password:='';
end;
end;
var
file_name:string;
login,pass:string;
t1,t2:Textfile;
i,j,k:Integer;
a:Boolean=False;
log,password:String;
whatcando:integer;
logforchange:string;
whatchange:integer;
changelog,changepass,changetype,changeprogr:string;
newlog,newpass,newtype,whatcanexe:string;
exe:Integer;
quite:Integer;
str:array[0..100] of string[20];
s:string[20];
str1:array[0..100] of string[20];
str2,str3:string;
s1:string[20];
f1,f2,f3,f4:string;
begin
SetConsoleCP(1251);
SetConsoleOutputCP(1251);
write('Имя файла: ');
readln(file_name);
repeat
if FileExists(file_name+'.txt') then
begin
AssignFile(t1,file_name+'.txt');
Reset(t1);
end;
while not Eof(t1) do
begin
Readln(t1,User[index].login);
Readln(t1,User[index].pass);
Us[index].login:=User[index].login;
Us[index].password:=User[index].pass;
Readln(t1,User[index].typeofuser);
i := 0;
while User[index].whichprogr[i-1] <> '' do //Пустая строка - окончание ввода лабораторных.
begin
inc(i);
setlength(User[index].whichprogr, i);
Readln(t1,User[index].whichprogr[i-1]);
end;
Readln(t1);
Inc(index);
end;
CloseFile(t1); //закрываем файл
Sort;
for i := 1 to index do
if (Us[i].login=us[i+1].login) or (Us[i].password=us[i+1].password) then //если повторяются лог или пароли то
Writeln('Есть одинаковые логины или пароли!');
write('Введите логин-');
Readln(login);
write('Введите пароль-');
Readln(pass);
for I := 0 to index-1 do
if (login=User[i].login) and (pass=User[i].pass)then //если найден польз
begin
if User[i].typeofuser='superuser' then //если суперпольз
begin
.............
end
else
if User[i].typeofuser='user' then
begin
write('запустить лабу: ');
readln(whatcando);
if Pos('1', User[i].whichprogr) <> 0 then RunLaba1;
if Pos('2', User[i].whichprogr) <> 0 then RunLaba2;
if Pos('3', User[i].whichprogr) <> 0 then RunLaba3;
if Pos('4', User[i].whichprogr) <> 0 then RunLaba4;
if Pos('5', User[i].whichprogr) <> 0 then RunLaba5;
if Pos('6', User[i].whichprogr) <> 0 then RunLaba6;
if Pos('7', User[i].whichprogr) <> 0 then RunLaba7;
//Break;
end;
end;
write('1-Выйти из сеанса,2-завершить работу:');
readln(quite);
free;
index:=0;
until quite=2;
В файле информация записана так:
name2-логин
1111-пароль
user- тип пользователя
6-номер лабы, вот тут может быть написано вместо одной цифры несколько, например, 123 и при вызове 3 лабы она должна запуститься
|