program students; uses graph,crt; const n1 = 100; type inv = Record nazv: string[15]; firm: string[15]; price: real; count: integer; sold: integer; end; var n: integer; db: array [1..n1] of inv; num: integer; command: integer; filename: string; gd,gm: integer; function overpr(num: integer): real; Forward; function spaces(num: integer): string; Forward; procedure write_separator; Forward; procedure write_header; Forward; procedure write_el(num: integer); Forward; procedure write_ed; Forward; procedure write_all; Forward; procedure read_ed; Forward; procedure read_several(num: integer); Forward; procedure read_from_file; Forward; procedure save_to_file; Forward; procedure swap(el1, el2: integer; var p: boolean); Forward; procedure sort; Forward; procedure draw_graph; Forward; procedure draw_circle(field: integer); Forward; procedure draw_columns(field: integer); Forward; function overpr(num: integer): real; begin overpr := 0; overpr := 0.3 / db[num].count * 100; end; function spaces(num: integer): string; var i: integer; tmp: string; begin tmp := ''; for i := 1 to num do tmp := tmp + ' '; spaces := tmp; end; procedure write_separator; begin Writeln('--------------------------------------------------------------------------------------'); end; procedure write_header; begin clrscr; write_separator; Writeln('| No | Название товара | Название фирмы | Цена | Кол-во | Наценка | Продано |'); write_separator; end; procedure write_el(num: integer); begin with db[num] do Writeln('| ', num:3, ' | ', nazv, spaces(15-length(nazv)), ' | ', firm, spaces(15-length(firm)), ' | ', price:9:2, ' | ', count:6, ' | ', overpr(num):9:5, ' | ', sold:7, ' |'); end; procedure write_ed; var num: integer; begin Writeln('Введите номер товара: '); Readln(num); write_header; write_el(num); write_separator; end; procedure write_all; var i: integer; begin write_header; for i := 1 to n do begin write_el(i); write_separator; end; end; procedure remove_ed; var num: integer; begin write_all; Writeln('Введите номер элемента, который нужно удалить: '); Readln(num); n := n-1; while num < n do db[num] := db[num+1]; write_all; end; procedure read_ed; begin n := n+1; with db[n] do begin writeln('Введите название товара: '); Readln(nazv); writeln('Введите название фирмы: '); Readln(firm); writeln('Введите оптовую цену: '); Readln(price); writeln('Введите количество товара: '); Readln(count); writeln('Введите количество проданного товара: '); Readln(sold); end; sort; end; procedure read_several(num: integer); var i: integer; begin for i := 1 to num do begin writeln('Ввод ', n+1, ' элемента базы данных.'); read_ed; end; write_all; end; procedure read_from_file; var f: text; begin Writeln('Считываем данные из файла...'); Assign(f, filename); Reset(f); while not seekeof(f) do begin n := n+1; with db[n] do begin Readln(f, nazv); Readln(f, firm); Readln(f, price); Readln(f, count); Readln(f, sold); Readln(f); end; end; Close(f); write_all; end; procedure save_to_file; var f: text; i: integer; begin Writeln('Сохраняем данные в файл...'); Assign(f, filename); Rewrite(f); for i := 1 to n do with db[i] do begin Writeln(f, nazv); Writeln(f, firm); Writeln(f, price); Writeln(f, count); Writeln(f, sold); Writeln(f); end; Close(f); write_all; end; procedure swap(el1, el2: integer; var p: boolean); var tmp: inv; begin tmp := db[el1]; db[el1] := db[el2]; db[el2] := tmp; p := true; end; procedure sort; var way, field: integer; i,j: integer; p: boolean; begin Writeln; Writeln('******************************************'); Writeln('* *'); Writeln('* Введите способ сортировки: *'); Writeln('* *'); Writeln('******************************************'); Writeln('* *'); Writeln('* 1 - по возрастанию *'); Writeln('* 2 - по убыванию *'); Writeln('* *'); Writeln('******************************************'); Readln(way); Writeln; Writeln('******************************************'); Writeln('* *'); Writeln('* Введите поле сортировки: *'); Writeln('* *'); Writeln('******************************************'); Writeln('* *'); Writeln('* 1 - название товара *'); Writeln('* 2 - название фирмы *'); Writeln('* 3 - оптовая цена *'); Writeln('* 4 - количество товара *'); Writeln('* 5 - наценка *'); Writeln('* 6 - количество проданного товара *'); Writeln('* *'); Writeln('******************************************'); Readln(field); p := true; i := 1; while p do begin p := false; for j := 1 to n-i do if way = 1 then // по возрастанию case field of 1: if db[j].nazv > db[j+1].nazv then swap(j, j+1, p); 2: if db[j].firm > db[j+1].firm then swap(j, j+1, p); 3: if db[j].price > db[j+1].price then swap(j, j+1, p); 4: if db[j].count > db[j+1].count then swap(j, j+1, p); 5: if overpr(j) > overpr(j+1) then swap(j, j+1, p); 6: if db[j].sold > db[j+1].sold then swap(j, j+1, p); end else if way = 2 then // по убыванию case field of 1: if db[j].nazv < db[j+1].nazv then swap(j, j+1, p); 2: if db[j].firm < db[j+1].firm then swap(j, j+1, p); 3: if db[j].price < db[j+1].price then swap(j, j+1, p); 4: if db[j].count < db[j+1].count then swap(j, j+1, p); 5: if overpr(j) < overpr(j+1) then swap(j, j+1, p); 6: if db[j].sold < db[j+1].sold then swap(j, j+1, p); end; i := i+1; end; write_all; end; procedure draw_graph; var typ, field: integer; begin Writeln; Writeln('******************************************'); Writeln('* *'); Writeln('* Введите тип диаграммы: *'); Writeln('* *'); Writeln('******************************************'); Writeln('* *'); Writeln('* 1 - круговая *'); Writeln('* 2 - столбчатая *'); Writeln('* *'); Writeln('******************************************'); Readln(typ); Writeln; Writeln('******************************************'); Writeln('* *'); Writeln('* Введите поле: *'); Writeln('* *'); Writeln('******************************************'); Writeln('* *'); Writeln('* 3 - оптовая цена *'); Writeln('* 4 - количество товара *'); Writeln('* 5 - наценка *'); Writeln('* 6 - количество проданного товара *'); Writeln('* *'); Writeln('******************************************'); Readln(field); if typ = 1 then draw_circle(field) else if typ = 2 then draw_columns(field); end; procedure draw_circle(field: integer); begin end; procedure draw_columns(field: integer); begin end; begin clrscr; Writeln('Введите имя файла: '); Readln(filename); filename := 'W:\2sem\2014-02-21\' + filename; n := 0; read_from_file; command := -1; while command <> 0 do begin case command of 0,-1: command := command; 1: read_several(1); 2: begin Writeln('Введите количество вводимых товаров: '); Readln(num); read_several(num); end; 3: write_ed; 4: write_all; 5: remove_ed; 6: sort; 7: draw_graph; else write('Неверная команда. '); end; Writeln; Writeln('*******************************************'); Writeln('* *'); Writeln('* Введите одну из следующих команд: *'); Writeln('* *'); Writeln('*******************************************'); Writeln('* *'); Writeln('* 0 - выйти из программы *'); Writeln('* 1 - добавить одно значение *'); Writeln('* 2 - добавить несколько значений *'); Writeln('* 3 - вывести одно значение *'); Writeln('* 4 - вывести все значения *'); Writeln('* 5 - удалить одно значение *'); Writeln('* 6 - сортировка *'); Writeln('* 7 - вывести график *'); Writeln('* *'); Writeln('*******************************************'); Readln(command); end; save_to_file; Writeln('Выход из программы'); Readln; end.