Встроенная возможность использовать вставки на языке ассемблера.
Недостатки
Компилятор рассчитан на реальный режим DOS, применение которого сходит на нет. Однако в последних версиях компилятора и среды введена поддержка защищённого режима вместе с соответствующим отладчиком (TD).
В модуле CRT имеется ошибка (некорректный подсчёт количества циклов для функции delay, не рассчитанный на быстрые процессоры, процессоры с переменной частотой и многозадачные среды), из-за которой при запуске программы на компьютерах с тактовой частотой более 200 MHz сразу происходило аварийное завершение с сообщением «Runtime error 200 at…». Существуют разные варианты исправления модуля CRT. В варианте Клауса Хартнегга ошибка 200 не возникает, но длительность Delay на быстрых компьютерах меньше желаемой, и эта проблема по незнанию иногда тоже считается недостатком Turbo Pascal.
Интересные факты
В Turbo/Borland Pascal 7.0 встроено пасхальное яйцо: если в интегрированной среде через меню «Help» открыть панель «About» и нажать сочетание клавиш Alt + I, то в панели будут прокручиваться имена разработчиков.
Алгоритм раскраски во встроенном редакторе немного отличается от того, как понимает синтаксис компилятор. А именно, конструкция (*) воспринимается редактором как законченный комментарий, а компилятором - как начало комментария. Это может использоваться, чтобы внутри комментариев вставлять синтаксически раскрашенные участки, например, демонстрация способа использования. Или, например, существуют Паскаль-вирусы, которые записывают своё тело после 80-й колонки, используя (*), чтобы старый текст выглядел без изменений. Область распространения ограничена местами, где запускаются программы на Turbo Pascal, зато в самих этих местах бороться с Паскаль-вирусами было нетривиально. Антивирусы тех времён были бессильны против этих первых представителей макровирусов.
Используя (*), можно добиться и обратного: заставить код выглядеть как комментарий или как ассемблерный код:
program HelloWorld; (*) (*)(*) asm (*)('Hello, World!'); (*) end (*)
ReadLn; (*) (*). (*) (*)
Будучи набранным в интегрированной среде, поставляемой с Turbo Pascal, этот код будет разноцветным.
2. База данных «Студенты»
2.1 Функции
. Предоставление общей информации об обучающихся студентах. Это совокупность сведений о каждом студенте обучающегося в данный момент, включает в себя общую информацию такую как фамилия, имя, отчество, а также информацию учебного характера, такую как текущий курс, успеваемость и др. Подразумевается, что информация будет изменятся и пополнятся в течении срока обучения.
. Ведение архива студентов. После окончания срока обучения информация о студентах может еще некоторое время быть необходимой (в бумажных архивах университета она хранится в течении 75 лет), поэтому необходимо чтобы студенты окончившие обучение заносились в архив и хранились в нем в плоть до принятия решения об их удалении.
. Пополнение списка поступившими абитуриентами. В начале каждого учебного года в базу данных должны заноситься студенты из числа абитуриентов поступивших в текущем году.
. Предоставление А/О и возврат из А/О. В течении обучения студенту может быть предоставлен академический отпуск на один год по его окончанию студент продолжает обучение. В течение этого времени информация о студенте должна храниться в архиве, чтобы быть востребованной при восстановлении. Кроме того иногда требуется информация о дате ухода студента в академический отпуск и номере приказа по которому академический отпуск был предоставлен. Информация об этом может быть записана в раздел «Примечания».
. Отчисление и восстановление. На любом курсе студент может быть отчислен по ряду причин. Однако факт отчисления не носит фатальный характер и в ряде случаев у него есть возможность восстановиться. Т.е. вплоть до факта восстановления информация должна храниться в архиве пока не будет востребованной или не будет принято решение о нецелесообразности ее хранения. В случае отчисления также требуется информация о дате отчисления студента и номере приказа по которому отчисление произошло.
. Ведение информации об итогах сессии. В период обучения каждый студент изучает дисциплины указанные в учебном плане и, следовательно должен проходить контроль знаний по ним в конце каждого семестра.
2.2 Постановка задачи, работа с программой
Для создания базы данных и пользовательского интерфейса достаточно возможностей Turbo Pascal.
Согласно условиям задачи, программа должна создавать базу данных «Студенты», которая выполняет следующие функции:
зачислить;
отчислить;
изменить;
запрос;
конец.
После выбора пункта меню и реализации соответствующей функции необходим возврат в главное меню (кроме функции «конец», т.к. ее предназначение - выход из базы данных «Студенты»).
Ввод данных в программу будет осуществляться в диалоге по запросам программы. Поскольку в базе данных информация о студентах будет состоять из нескольких полей (фамилия студента, имя, отчество, номер группы, дополнительная информация), то для хранения информации о единице данных используем тип данных - запись (base.txt).
Исходный файл программы называется STUDBASE.PAS. И предназначен для редактирования в Turbo Pascal. Также в архиве имеется исполняемый файл STUDBASE.EXE. Это и есть сама рабочая программа. Файл базы данных о студентах называется base и имеет расширение.txt.
Вход в программу защищен паролем, от несанкционированного доступа посторонних лиц. Пароль для входа - «0».
Также в самом начале работы, программа, после ввода пароля, попросит нас указать путь к файлу базе данных со студентами, в формате: диск:\Папка\base.txt. В нашем случае, этот файл называется base.txt. Сначала необходимо указать диск, на котором в данный момент находится база данных. Затем через символы обратного слэша «\», указать каталоги расположения, а затем имя и расширение самого файла. Например: F:\TP\base.txt.
2.3 Листинг программы
Моя программа, написанная на языке Turbo Pascal имеет следующий исходный вид:
program databse;graph, crt;= «;= string[40];= array [1..1000] of integer;= record: stdname;: real;: real;: real;;= array [1..1000] of student;: integer;: stdarray;: char;, driver, mode: integer;: string;, backup: text;: searcharray;1, 2, 3;decryptor (var decstring: stdname);: integer;loop:= 1 to length(decstring) do[loop]:= chr (ord(decstring[loop]) - 121);;intdecrypt (var num: real);:= num - 27;:= num / 2;;gpadecrypt (var num: real);:= num + 0.26;:= num * 3.29;:= num / 2.69;;encryptor (var encstring: stdname);: integer;loop:= 1 to length(encstring) do[loop]:= chr (ord(encstring[loop]) + 121);;gpaencrypt (var num: real);:= num * 2.69;:= num / 3.29;:= num - 0.26;;intencrypt (var num: real);:= num * 2;:= num + 27;;emptier;: integer;i:= 1 to 1000 do[i].stdnum:= 0;[i].semester:= 0;[i].gpa:= 0;[i].name:= «;[i]:= 0;;;searcher;, x, m: integer;, seperator: char;: real;1, 2, 3, 4;
: write ('Vvedite nomer studenta dlya poiska ');(search);(search);(indata1);:= 1;not eof(indata1) do;(indata1, search1 [x]);(search = search1 [x]) then1;:= x + 1;eof(indata1) then('Nomer studenta ne naiden! ');
: for m:= 1 to 50 do('');('Net rezultatov poiska! ');('');(indata1);('');m:= 1 to x do(indata1, class[m].stdnum);(indata1, class[m].semester);(indata1, class[m].gpa);(indata1, seperator);(indata1, class[m].name);;(class[x].stdnum);('Student Number ', class[x].stdnum:4:0);(class[x].name);('Name ', class[x].name);(class[x].semester);('Semester ', class[x].semester:1:0);(class[x].gpa);('GPA ', class[x].gpa:1:2);('');('');4;
: end;save;(indata1);(class[i].stdnum);(indata1, class[i].stdnum:1:0, ' ');(class[i].semester);(indata1, class[i].semester:1:0, ' ');(class[i].gpa);(indata1, class[i].gpa:1:2, ' ');(class[i].name);(indata1, class[i].name);(indata1);;newrecord;, h: integer;: real;, choices: char;1, 2, 3, 4, 5, 6;
: for t:= 1 to 50 do('');('Vvedite v sootvetstvii s ukazaniyami');('Student #: ');(class[i].stdnum);('Student Imya: ');(class[i].name);('Kurs: ');(class[i].semester);('GPA: ');(class[i].gpa);
: reset(indata1);not eof(indata1) then(indata1, n);(n);n = class[i].stdnum then('Dublikat nomera Studenta zapreshen! ');('Vvedite drugoi nomer studenta: ');(class[i].stdnum);5;;eof(indata1);;eof(indata1) then3;
: if (class[i].semester > 8) or (class[i].semester < 1) thenh:= 1 to 50 do('');('Oshibka…. Vvedite Kurs zanovo: ');(class[i].semester);3;;
: if (class[i].gpa > 5.0) or (class[i].gpa < 1.0) then('Oshibka…. Vvedite GPA zanovo: ');(class[i].gpa);4;;;:= i + 1;('');
: write ('Primechaniya: ');(choice1);('');(choice1 = 'y') or (choice1 = 'Y') then1;('Are You Sure…. ');(choices);(choices = 'N') or (choices = 'n') then2;delrec;1, 2;, h2, h3, f1, d: integer;: real;:= i;:= 1;;(indata1);('Vvedite nomer studenta, chtoby ego udalit`! ');(delstd);i:= 1 to 1000 do(indata1, class[i].stdnum);(class[i].stdnum);(indata1, class[i].semester);(class[i].semester);(indata1, class[i].gpa);(class[i].gpa);(indata1, class[i].name);(class[i].name);eof(indata1) then:= i;1;;;
: close(indata1);h1:= 1 to h2 do(class[h1].stdnum = delstd) then:= h1 - 1;(h3);(indata1);f1:= 1 to h3 do(class[f1].stdnum);(indata1, class[f1].stdnum:4:0,' ');(class[f1].semester);(indata1, class[f1].semester:1:0, ' ');(class[f1].gpa);(indata1, class[f1].gpa:1:2);(class[f1].name);(indata1, class[f1].name);;:= h1 + 1;f1:= h3 to h2 do(class[f1].stdnum);(indata1, class[f1].stdnum:4:0, ' ');(class[f1].semester);(indata1, class[f1].semester:1:0, ' ');(class[f1].gpa);(indata1, class[f1].gpa:1:2);(class[f1].name);(indata1, class[f1].name);;2;;
: i:= d;;;password;: string;: integer;1;:= 0;;
: write ('Pojaluista, vvedite parol: ');:= e + 1;[e]:= readkey;ord (c[e]) = 13 then('*');(ord (c[e]) = 13);('');(c[1] = '0') then('Parol prinyat…..Najmite lyubuyu klavishu chtoby prodoljit.');;('PAROL` HE BEPEH!');:= 0;('');('Vy hotite prodoljit?…Y-da, N-net ');(choice);;(choice = 'y') or (choice = 'Y') then1:= 'n';;;listrecord;: stdname;, h: integer;, seperator2, seperator3, keys1: char;, stdnum1, semester1: real;1, 2;j:= 1 to 50 do('');('Eto spisok vseh zapisey v base dannyh.');(indata1);not eof(indata1) do(indata1, stdnum1, seperator, semester1, seperator2, gpa1, seperator3, name1);(name1);(stdnum1);(semester1);(gpa1);('Student # ', stdnum1:1:0);('Student Name ', name1);('Semester ', semester1:1:0);('GPA ', gpa1:1:2);('');('Jmite lyubuyu klavishu… ili <x> dlya vyhoda');:= readkey;(keys1 = 'x') or (keys1 ='X') then1;h:= 1 to 50 do('');;
: writeln('ending');;editrecord;, n: real;: char;, h2, h3, f1, d, h4, h: integer;1, 2, 3, 4,5;:= i;:= 1;;(indata1);('Vvedite nomer studenta dlya redaktirovaniya: ');(delstd);i:= 1 to 1000 do(indata1, class[i].stdnum);(class[i].stdnum);(indata1, class[i].semester);(class[i].semester);(indata1, class[i].gpa);(class[i].gpa);(indata1, seperator);(indata1, class[i].name);(class[i].name);eof(indata1) then:= i;1;;;
: close(indata1);h1:= 1 to h2 do(class[h1].stdnum = delstd) then:= h1;:= h1 - 1;(h3);(indata1);f1:= 1 to h3 do(class[f1].stdnum);(indata1, class[f1].stdnum:4:0,' ');(class[f1].semester);(indata1, class[f1].semester:1:0, ' ');(class[f1].gpa);(indata1, class[f1].gpa:1:2, ' ');(class[f1].name);(indata1, class[f1].name);;:= h1 + 1;f1:= h3 to h2 do(indata1);(class[f1].stdnum);(class[f1].semester);(class[f1].gpa);(class[f1].name);(indata1, class[f1].stdnum:4:0, ' ');(indata1, class[f1].semester:1:0, ' ');(indata1, class[f1].gpa:1:2, ' ');(indata1, class[f1].name);;(indata1);;;('Student #: ', class[h4].stdnum:1:0);('Student Imya: ', class[h4].name);('Kurs: ', class[h4].semester:1:0);('GPA: ', class[h4].gpa:1:2);('');:= 1;('Vvedite znachenie zanovo! ');('Student #: ');(class[i].stdnum);('Student Imya: ');(class[i].name);('Kurs: ');(class[i].semester);('GPA: ');(class[i].gpa);
: reset(indata1);not eof(indata1) then(indata1, n);n = class[i].stdnum then('Odinakovye nomera studentov zapresheny! ');('Vvedite drugoi nomer studenta: ');(class[i].stdnum);5;;eof(indata1);;eof(indata1) then3;
: if (class[i].semester > 8) or (class[i].semester < 1) thenh:= 1 to 50 do('');('Oshibka… Vvedite Kurs zanovo: ');(class[i].semester);3;;
: if (class[i].gpa > 4.0) or (class[i].gpa < 1.0) then('Oshibka…. Vvedite zanovo GPA: ');(class[i].gpa);4;;;2;
: i:= d;;;deleterecord;: integer;: char;t:= 1 to 50 do('');('VNIMANIE - Eto privedet k udeleniyu vseh zapisei v base dahhyh!);('Do yo want to continue ');(choice);(choice = 'y') or (choice = 'Y') then(indata1);(indata1);('Baza dannyh byla uspesho udalena! ');;;databaser;: stdname;;('Vvedite put` k failu bazy studentov (..\base.txt): ');(path3);(indata1, path3);;backup1;: stdname;;('Sozdanie rezervnoi kopii dannyh. ');('Please enter the path of the databse text file to backup data ');('>>> ');(name1);(backup, name1);:= «;(backup);(indata1);not eof(indata1) do(indata1, name1);(backup, name1);;('');('');('Rezervnoe kopirovanie uspeshno zaversheno! ');(indata1);(backup);('Jmite lyubuyu klavishu dlya prodoljeniya: ');;;starter;: char;(driver, mode, directory);(10,10, getmaxx - 10, 165);(140,15, '6 A 3 A D A H H bI X C T Y D E H T bI. ');(135,45,'BbI6EPITE nyHKT, HA) I (ATuEM COOTBETCTBYI-0LLLEu K/\ABuLLIy');(12, 75, '[N] - Novaya Zapis [E] - Redaktirovanie [L] - Spisok [D] - Udalit zapis [S] - Poisk');(12,110,' [C] - Udalenie bazy [H] - Izmenenie Basy [B] - Rezervnoe kopirovanie [X] - EXIT');(17, 135, 'ABTOP: Kovriga Yuriy, KEBP-KEUK, gr.IS-33. Karaganda-2011 ');:= readkey;(data = 'n') or (data = 'N') then;;;;(data = 'h') or (data = 'H') then;;;;(data = 'e') or (data = 'E') then;;;;(data = 'l') or (data = 'L') then;;;;(data = 'c') or (data = 'C') then;;;;(data = 's') or (data = 'S') then;;;;(data = 'x') or (data = 'X') then:= 0;;(data = 'd') or (data = 'D') then;;;;(data = 'b') or (data = 'B') then;;;;;;(choice = 'n') then3;;;:= 1;:= 1;unchangeable >= 1 do;;
: writeln('');.
Заключение
В курсовой работе была поставлена задача разработки базы данных «Студенты», которая позволяла бы производить операции с данными студентов, то есть регистрацию студентов в базе данных, а также удаление, изменение, резервное копирование информации о студентах.
Для достижения поставленной цели был составлен основной алгоритм работы программы, а также разработаны алгоритмы вспомогательных процедур.
При разработке интерфейса программы, я учитывал наиболее нужные и важные функциональные возможности, которые должна выполнять данная программа, а также тип пользователей, которые с ней будут работать, в данном случае это преподаватели.
Список источников
студент база программа алгоритм
1.С. Симонович, Г. Евсеев, А. Алексеев. Специальная информатика: Учебное пособие. - М.: АСТ-ПРЕСС: Инфорком-Пресс, 1998.
2.Фаронов В.В. Turbo Pascal: Учебное пособие. Издательство: Питер. 2007.
.Фаронов В.В. Turbo Pascal Наиболее полное руководство в подлиннике. Издательство «ОМД Групп» 2003.
.Мельников С.В. Delphi и Turbo Pascal на занимательных примерах. Издательство: BHV-Санкт-Петербург. 2006.
.Сухарев М. Turbo Pascal 7.0. Теория и практика программирования. Издание 3. Издательство: Наука и техника. 2007.
.Шпак Ю.А. Turbo Pascal 7.0 на примерах. Издательство «Юниор», 2003.
.Потопахин В.В. Turbo Pascal: решение сложных задач. Издательство «БХВ-Петербург», 2006.
8.Основы информатики и вычислительной техники: Проб. учеб. пособие для сред. учеб. заведений. В 2 ч. Ч. 2 / А.П. Ершов, В.М. Монахов.А. Кузнецов и др. - М.: Просвещение, 1986. -143 с. Вирт Н. Алгоритмы + структуры данных = программы./ Н. Вирт - М.: 10 мир, 1985.