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

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

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

Восстановить пароль
Повторная активизация e-mail

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

Ответ
 
Опции темы Поиск в этой теме
Старый 29.06.2015, 17:40   #1
andriy1048
Пользователь
 
Регистрация: 02.04.2015
Сообщений: 53
По умолчанию Записи

Разработать программу, которая в диалоговом режиме позволяет а) создать файл,
содержащий информацию о экзаменационную сессию в виде записей типа
(группа; дисциплина; преподаватель, дата); б) открыть существующий файл; в) закрыть
файл; г) просмотреть файл; д) добавить новую запись в файл; ж) вывести расписание
экзаменационной сессии, предварительно сгруппировав записи по дисциплинам.

Всё сделал сам, только пункт Ж) не получается... Помогите пожалуйста (нужно в форме)
andriy1048 вне форума Ответить с цитированием
Старый 29.06.2015, 17:57   #2
Utkin
Старожил
 
Аватар для Utkin
 
Регистрация: 04.02.2009
Сообщений: 17,351
По умолчанию

Цитата:
Всё сделал сам, только пункт Ж) не получается... Помогите пожалуйста (нужно в форме)
Показывайте наработки.
Маньяк-самоучка
Utkin появился в результате деления на нуль.
Осторожно! Альтернативная логика
Utkin вне форума Ответить с цитированием
Старый 29.06.2015, 18:02   #3
andriy1048
Пользователь
 
Регистрация: 02.04.2015
Сообщений: 53
По умолчанию

Код:
unit Unit1;

type  sesiya = record
  group: string[20];
  subject: string[20];
  teacher: string[30];
  data: TDateTime;
  end;
var
  Form1: TForm1;
    f: file of sesiya;
    FOpened: boolean = false;
    FileName: string = '';

implementation

{$R *.dfm}

uses Unit2, Unit3, Unit6, Unit4;

procedure TForm1.FileFClick(Sender: TObject);
begin
  if FOpened // файл відкритий
  then
  begin
  CloseF.Enabled:=true; // підпункт меню Закрити
  ViewF.Enabled:=true; // підпункт меню Перегляд
  AddF.Enabled:=true; // підпункт меню Додати
  end
Else // файл не відкритий
  begin
  CloseF.Enabled:=false; // підпункт меню Закрити
  viewF.Enabled:=false; // підпункт меню Перегляд
  AddF.Enabled:= false; // підпункт меню Додати
  end;
end;

procedure TForm1.OpenFClick(Sender: TObject);
begin
  if fopened
   then
   CloseFile(f);
  if OpenDialog1.Execute
    then
    begin
    FileName:=OpenDialog1.FileName;
    AssignFile(f, filename);
    reset(f);
    fopened:=true;
    end;
end;

procedure TForm1.ViewFClick(Sender: TObject);
begin
 if FileSize(f) <> 0
  then
  ViewForm3.ShowModal // виклик допоміжної форми на якій
  //відображатимуться результати перегляду файлу
  else
  ShowMessage('File is empty!');
end;

procedure TForm1.AddFClick(Sender: TObject);
begin
  AddForm2.ShowModal;
end;


procedure TForm1.CloseFClick(Sender: TObject);
begin
  if fopened
  then
    begin
    closefile(f);
    fopened:=false;
    end;
end;

procedure TForm1.CreateFClick(Sender: TObject);
begin
  if Fopened
  then
  CloseFile(f);
  if SaveDialog1.Execute
  then
    begin
    FileName:=SaveDialog1.FileName;
    AssignFile(f, filename);
    rewrite(f);
    fopened:=true;
    end;
end;

end.





unit Unit2;

interface

uses
  Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, System.Classes, Vcl.Graphics,
  Vcl.Controls, Vcl.Forms, Vcl.Dialogs, Vcl.StdCtrls;

type
  TAddForm2 = class(TForm)
    Edit1: TEdit;
    Edit2: TEdit;
    Edit3: TEdit;
    Edit4: TEdit;
    Label1: TLabel;
    Label2: TLabel;
    Label3: TLabel;
    Label4: TLabel;
    Button1: TButton;
    Button2: TButton;
    procedure Button1Click(Sender: TObject);
    procedure Button2Click(Sender: TObject);

  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  AddForm2: TAddForm2;

implementation

{$R *.dfm}

uses Unit1;



procedure TAddForm2.Button1Click(Sender: TObject);
var rec:sesiya;
begin
try
rec.group:=Edit1.Text;
rec.subject:=Edit2.Text;
rec.teacher:=Edit3.Text;
rec.data:=StrToDate(Edit4.Text);
except Showmessage('Помилка даних');
end;
write(f,rec);
Edit1.Clear;
Edit2.Clear;
Edit3.Clear;
Edit4.Clear;
end;

procedure TAddForm2.Button2Click(Sender: TObject);
begin
close;
end;

end.





unit Unit3;

interface

uses
  Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, System.Classes, Vcl.Graphics,
  Vcl.Controls, Vcl.Forms, Vcl.Dialogs, Vcl.StdCtrls, Vcl.Grids;

type
  TViewForm3 = class(TForm)
    StringGrid1: TStringGrid;
    Button1: TButton;
    procedure FormCreate(Sender: TObject);
    procedure FormActivate(Sender: TObject);
    procedure Button1Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  ViewForm3: TViewForm3;

implementation

{$R *.dfm}

uses Unit1, Unit2;


procedure TViewForm3.FormCreate(Sender: TObject);
begin
StringGrid1.Cells[0,0]:='Група';
StringGrid1.Cells[1,0]:='Дисципліна';
StringGrid1.Cells[2,0]:='Викладач';
StringGrid1.Cells[3,0]:='Дата';
end;


procedure TViewForm3.Button1Click(Sender: TObject);
begin
close;
end;

procedure TViewForm3.FormActivate(Sender: TObject);
var i:integer;
    rec:sesiya;
begin
ViewForm3.StringGrid1.RowCount :=  Filesize(f)+1;
for i:=1 to Filesize(f) do
begin
seek(f,i-1);
read(f,rec);
ViewForm3.StringGrid1.Cells[0,i]:=rec.group;
ViewForm3.StringGrid1.Cells[1,i]:=rec.subject;
ViewForm3.StringGrid1.Cells[2,i]:=rec.teacher;
ViewForm3.StringGrid1.Cells[3,i]:=DateToStr(rec.data);
end;
end;


end.

Последний раз редактировалось Аватар; 29.06.2015 в 18:08.
andriy1048 вне форума Ответить с цитированием
Старый 29.06.2015, 18:28   #4
JUDAS
фонатик DELPHI
Форумчанин
 
Аватар для JUDAS
 
Регистрация: 14.01.2008
Сообщений: 714
По умолчанию

andriy1048, кидай всю программу архивом.
попытаюсь разораться
95% сбоев и ошибок приложений, находится в полу метрах от монитора
JUDAS вне форума Ответить с цитированием
Старый 29.06.2015, 18:35   #5
andriy1048
Пользователь
 
Регистрация: 02.04.2015
Сообщений: 53
По умолчанию

Это должно быть в Unit4
Вложения
Тип файла: rar Projects.rar (167.6 Кб, 4 просмотров)
andriy1048 вне форума Ответить с цитированием
Старый 29.06.2015, 18:55   #6
Utkin
Старожил
 
Аватар для Utkin
 
Регистрация: 04.02.2009
Сообщений: 17,351
По умолчанию

Проблема в том, что предыдущие пункты работали с одной записью, а расписание требуется составить с несколькими записями. Используйте массив записей для решения задачи ж).
Маньяк-самоучка
Utkin появился в результате деления на нуль.
Осторожно! Альтернативная логика
Utkin вне форума Ответить с цитированием
Старый 29.06.2015, 19:02   #7
JUDAS
фонатик DELPHI
Форумчанин
 
Аватар для JUDAS
 
Регистрация: 14.01.2008
Сообщений: 714
По умолчанию

Автор, стиль и функционал менять можно?
п.с. судя по проекту ты пишешь как минимум в CodeGear (D2009) а начинка паскаля начала 80-х
95% сбоев и ошибок приложений, находится в полу метрах от монитора
JUDAS вне форума Ответить с цитированием
Старый 29.06.2015, 19:07   #8
andriy1048
Пользователь
 
Регистрация: 02.04.2015
Сообщений: 53
По умолчанию

Можно) Я не розбираюсь в этом, препод не может нам нормально обьяснить Delphi
andriy1048 вне форума Ответить с цитированием
Старый 29.06.2015, 19:34   #9
JUDAS
фонатик DELPHI
Форумчанин
 
Аватар для JUDAS
 
Регистрация: 14.01.2008
Сообщений: 714
По умолчанию

Автор, значит смотри
1. я работаю в Delphi 7 поэтому код обратка может не "стать"
2. чтобы получить пункт ж) ниже написано что и где менять
-------------------------------
начнём с работы с самим приложением
1. unit2 обработчик Button1Click
перед записью очередного блока функцией write(f,rec);
поставь вот это seek(f, filesize(f));
получается, закрываю файл, открываю по новому и он начинает затирать его начало. Новая запись всегда ставиться в конец файла

Код:
procedure TAddForm2.Button1Click(Sender: TObject);
var rec:sesiya;
begin
  try
    rec.group:=Edit1.Text;
    rec.subject:=Edit2.Text;
    rec.teacher:=Edit3.Text;
    rec.data:=Trunc(Edit4.DateTime);
  except
    Showmessage('Ïîìèëêà äàíèõ');
  end;
  seek(f, filesize(f));
  write(f,rec);
  Edit1.Clear;
  Edit2.Clear;
  Edit3.Clear;
  Edit4.DateTime := now;
end;

2. юнит Unit3
убей и никогда не используй метод formactivate
Если тебе нужно использовать ShowModal а ты именно его используешь, так пропиши его в форме вот так:

Код:
type
  TViewForm3 = class(TForm)
    StringGrid1: TStringGrid;
    Button1: TButton;
    procedure FormCreate(Sender: TObject);
    procedure Button1Click(Sender: TObject);
  private
    { Private declarations }
  public
    function ShowModal:integer;reintroduce;
  end;

implementation

function TViewForm3.ShowModal: integer;
var i,ref  : integer;
    rec : array of sesiya;
    SL  : TStringList;
begin
  ViewForm3.StringGrid1.RowCount := Filesize(f)+1;
  SL := TStringList.Create;

  for i:=1 to Filesize(f) do
  begin
    seek(f,i-1);
    SetLength(rec, length(rec)+1);
    ref := High(rec);
    read(f,rec[ref]);
    SL.AddObject(rec[ref].subject, TObject(ref+1));
  end;
  SL.Sort;
  for i:=0 to SL.Count-1 do
  begin
    ref := integer(SL.Objects[i])-1;
    ViewForm3.StringGrid1.Cells[0,i+1]:=rec[ref].group;
    ViewForm3.StringGrid1.Cells[1,i+1]:=rec[ref].subject;
    ViewForm3.StringGrid1.Cells[2,i+1]:=rec[ref].teacher;
    ViewForm3.StringGrid1.Cells[3,i+1]:=DateToStr(rec[ref].data);
  end;
  SL.Free;
  Finalize(rec);
  result := inherited ShowModal;
end;
и наконец твой пункт Ж, .... вон в методе ShowModal

3. и крайнее
Пункт меню "показать" нужно активировать хоть где то. Например после открытия файла

Код:
procedure TForm1.OpenFClick(Sender: TObject);
begin
  if fopened then
   CloseFile(f);

  if OpenDialog1.Execute then
  begin
    FileName:=OpenDialog1.FileName;
    AssignFile(f, filename);
    reset(f);
    fopened:=true;
  end;

  ViewF.Enabled := true;
end;
результат на картинке
Изображения
Тип файла: jpg 3333.jpg (23.7 Кб, 131 просмотров)
95% сбоев и ошибок приложений, находится в полу метрах от монитора
JUDAS вне форума Ответить с цитированием
Старый 29.06.2015, 19:38   #10
JUDAS
фонатик DELPHI
Форумчанин
 
Аватар для JUDAS
 
Регистрация: 14.01.2008
Сообщений: 714
По умолчанию

короче, лови проект . Перенесёшь код в свой чистовик (см. пост выше)
В архиве папка database там файл с начинкой которая выше на картинке
Вложения
Тип файла: zip fileread.zip (455.6 Кб, 6 просмотров)
95% сбоев и ошибок приложений, находится в полу метрах от монитора
JUDAS вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Записи. Записи с вариантами. Turbo Pascal Marksman_SwAt Помощь студентам 7 07.05.2014 19:27
Машина Тьюринга: Постройте функциональную схему машины, реализующей переход от десятичной записи числа n к десятичной записи (n-1) Елешечка Помощь студентам 0 02.04.2014 21:43
Как обновить последние записи за определенный срок не обновляя не законченные записи? SotGEGDS SQL, базы данных 3 11.06.2013 14:39
Удалить записи из таблицы, если дата в записи старше 30 дней Aleksandr БД в Delphi 10 28.03.2013 21:33
Оцените математической формулой, насколько больше цифр в двоичной записи большого числа, чем в его десятичной записи. Анюта.Хом Помощь студентам 1 02.12.2011 23:13