![]() |
|
|
Регистрация | << Правила форума >> | FAQ | Пользователи | Календарь | Поиск | Сообщения за сегодня | Все разделы прочитаны |
![]() |
|
Опции темы | Поиск в этой теме | Опции просмотра |
#1
|
|||
|
|||
![]() Как сделать так, что бы 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 лабы она должна запуститься Последний раз редактировалось Smile188, 18.12.2016 в 19:07. |
#2
|
|||
|
|||
![]() Я не знаю что пытались править, но представленный код абсолютно не читабельный и править тут можно что-то только наугад.
Давай постановку задачи - будем посмотреть что тут можно сделать... Последний раз редактировалось lmikle, 22.12.2016 в 02:01. |