![]() |
|
|
Регистрация Восстановить пароль |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
![]() |
|
Опции темы | Поиск в этой теме |
![]() |
#1 |
Регистрация: 21.11.2008
Сообщений: 3
|
![]()
Ребят помогите пожалуйста готова задача кроме сортировки, надо выполнить сортировку студентов по среднему балу помогите... Вот код программы
unit StudSpis; interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, Buttons, Grids, StdCtrls; const NumSemestr=10; type TFormStud = class(TForm) SGstud: TStringGrid; Add: TButton; Del: TButton; Izmenenie: TButton; Uporyd: TButton; CloseStud: TButton; procedure FormShow(Sender: TObject); procedure AddClick(Sender: TObject); private { Private declarations } public { Public declarations } end; TStud=record FIO: string [80]; Year: TDateTime; MedB: array [1..NumSemestr] of real; Kurs: byte; Group: byte; sredbal:real; end; fil = file of TStud; var FormStud: TFormStud; kol: integer; f: fil; stud: TStud; procedure displayall(SGstud: TStringGrid); implementation uses AddStud, DelStud, IzmenStud; {$R *.dfm} procedure autocaption(SGstud: TStringGrid); begin with SGstud do begin Cells[0, 0] := '№'; Cells[1, 0] := 'ФИО'; Cells[2, 0] := 'Дата рожд-я'; Cells[3, 0] := 'Курс'; Cells[4, 0] := 'Группа'; Cells[5, 0] := '1'; Cells[6, 0] := '2'; Cells[7, 0] := '3'; Cells[8, 0] := '4'; Cells[9, 0] := '5'; Cells[10, 0] := '6'; Cells[11, 0] := '7'; Cells[12, 0] := '8'; Cells[13, 0] := '9'; Cells[14, 0] := '10'; Cells[15, 0] := 'Ср.Балл' end; end; procedure display(SGstud: TStringGrid; stud: TStud; k: integer); var i: integer; begin //отображение одной записи with SGstud do begin Cells[0, k] := inttostr(k); Cells[1, k] := stud.FIO; Cells[2, k] := datetostr(stud.Year); Cells[3, k] := inttostr(stud.Kurs); Cells[4, k] := inttostr(stud.Group); for i:=5 to 14 do begin Cells [i, k] := floattostr(stud.MedB[i - 4]); end; Cells[15,k]:= Floattostr(stud.sredbal); end; end; procedure displayall(SGstud: TStringGrid); //отображение таблицы begin kol := 0; assignfile(f, 'Stud.dat'); autocaption(SGstud); reset(f); while not(eof(f)) do //считывание из файла каждый раз по записи begin kol := kol + 1; read(f, stud); display(SGstud, stud, kol); end; SGstud.RowCount := filesize(f) + 1; closefile(f); end; procedure TFormStud.FormShow(Sender: TObject); begin kol := 0; displayall(SGstud); end; procedure TFormStud.AddClick(Sender: TObject); begin FormAdd.Show; end; end. unit AddStud; interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, Buttons, StdCtrls, Grids; type TFormAdd = class(TForm) Edit1: TEdit; Edit2: TEdit; Edit4: TEdit; Edit5: TEdit; Label1: TLabel; Label2: TLabel; Label3: TLabel; Label4: TLabel; Label5: TLabel; AddStud: TSpeedButton; StringGrid1: TStringGrid; SrbalStud: TButton; Label6: TLabel; Label7: TLabel; Label8: TLabel; Label9: TLabel; Label10: TLabel; Label11: TLabel; Label12: TLabel; Label13: TLabel; Label14: TLabel; Label15: TLabel; Label16: TLabel; procedure AddStudClick(Sender: TObject); procedure CloseAddClick(Sender: TObject); procedure SrbalStudClick(Sender: TObject); private { Private declarations } public { Public declarations } end; var FormAdd: TFormAdd; implementation {$R *.dfm} uses StudSpis, DelStud; procedure TFormAdd.SrbalStudClick(Sender: TObject); var //Подсчитуем средний балл за все семестры srbal:real; x,y:real; begin x:= strtofloat(Edit4.text); y:= x*2; with StringGrid1 do begin srbal:=((strtofloat(cells[0,0]))+(strtofloat(cells[1,0]))+(strtofloat(cells[2,0]))+ (strtofloat(cells[3,0]))+(strtofloat(cells[4,0]))+(strtofloat(cells[5,0]))+ (strtofloat(cells[6,0]))+(strtofloat(cells[7,0]))+(strtofloat(cells[8,0])) +(strtofloat(cells[9,0])))/y; end; with StringGrid1 do begin cells[10,0] := floattostr(srbal); end; end; procedure TFormAdd.AddStudClick(Sender: TObject); var i: integer; begin stud.FIO := edit1.text; stud.Year := strtodate(edit2.text); stud.Kurs := strtoint(edit4.text); stud.Group := strtoint(edit5.text); with StringGrid1 do begin for i := 0 to 9 do stud.MedB[i + 1] := strtofloat(Cells[i, 0]); stud.sredbal:=strtofloat(cells[10,0]); end; reset(f); seek(f, filesize(f)); write(f, stud); closefile(f); displayall(FormStud.SGstud); FormAdd.Close; end; end. |
![]() |
![]() |
![]() |
#3 |
Регистрация: 21.11.2008
Сообщений: 3
|
![]()
Чё та я с ним сильно запутался
|
![]() |
![]() |
![]() |
#4 |
Пользователь
Регистрация: 12.11.2008
Сообщений: 55
|
![]()
Компонент ComboBox прекрасно сортирует свои строки. Его параметр Sorted поставь в True. Заведи туда строки вида 'сред.балл пробел ФИО' типа
4,7 Иванов 4,5 Петров 3,7 Сидоров Он выдаст по возрастанию первых символов, т.е. 3,7 Сидоров 4,5 Петров 4,7 Иванов и всё... Скажешь, ComboBox мне в программе не нужен - Так сделай его невидимым. |
![]() |
![]() |
![]() |
#5 |
Пользователь
Регистрация: 25.02.2009
Сообщений: 28
|
![]()
А если есть желание самому организовать сортировку.
Например чтобы номера сортировались в порядки их возрастания а не так что 101 идет раньше чем 25 к примеру, или лишнии пробелы между фамилией и именем (в данном случае надо доработать функцию сравнения), то вот пример А вообще я drawgrid использовал раньше, она в drawcell сразу из файла брала строки, а для работы с файлом компоненту сделал там и индексный доступ организовал (файлы были DBF, делал надстройку старой ДОС программе, которую не чем было заменить ) А сортировка с перемещением строк при больших количествах может времени много занять Кстати в процедуре procedure displayall(SGstud: TStringGrid); //отображение таблицы строка SGstud.RowCount := filesize(f) + 1; стоит после заполнения таблицы, а размер надо задать до её заполнения! Код:
Последний раз редактировалось CahekG; 14.03.2009 в 10:33. |
![]() |
![]() |
![]() |
![]() |
||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
нужна помощь | DIzza | Помощь студентам | 54 | 22.02.2009 13:29 |
Двумерный массив в сортировке | anco | Паскаль, Turbo Pascal, PascalABC.NET | 21 | 21.06.2008 00:49 |
Вопрос по сортировке | Ermiss | БД в Delphi | 5 | 17.02.2008 17:32 |
Ошибка в сортировке | Veiron | Общие вопросы Delphi | 14 | 21.01.2008 21:35 |
Нужна помощь!!! | Anil | Помощь студентам | 0 | 04.12.2007 17:32 |