Добавлен: 11.01.2024
Просмотров: 73
Скачиваний: 5
ВНИМАНИЕ! Если данный файл нарушает Ваши авторские права, то обязательно сообщите нам.
Огромную роль в программировании играет процесс отладки программ.
Отладка — это процесс определения и устранения причин ошибок. Этим она отличается от тестирования, направленного на обнаружение ошибок. В некоторых проектах отладка занимает до 50% общего времени разработки. Многие программисты считают отладку самым трудным аспектом программирования. [5]
. Программные ошибки, как правило, делятся на три вида:
-
Синтаксическая ошибка. Неправильное употребление синтаксических конструкций, например, употребление оператора цикла for без скобок. -
Семантическая ошибка. Нарушение семантики той или иной конструкции, например передача функции параметров, не соответствующих ее аргументам. -
Логическая ошибка. Нарушение логики программы, приводящее к неверному результату. Это наиболее трудный для «отлова» тип ошибки, особенно в языке С++, поскольку, подобного рода ошибки, как правило, кроются в алгоритмах и требуют тщательного анализа и всестороннего тестирования.
Обнаружение большинства синтаксических ошибок автоматизировано в основных системах программирования. Поиск же семантических ошибок гораздо менее формализован; часть их проявляется при исполнении программы в нарушениях процесса автоматических вычислений и индицируется либо выдачей диагностических сообщений рабочей программы, либо отсутствием печати результатов из-за зацикливания одной и той же части программы, либо появлением непредусмотренной формы или содержания печати результатов.
Во время запуска второй и третьей команды меню и последующим вводом номера студента, программа удаляла или изменяла предыдущего по списку студента, что возникало по незначительным ошибкам программного кода внутри циклов «for». Данные ошибки были устранены.
-
Код для ведения учета успеваемости
#include
#include
#include
#include
#include
#include
#define N 10
using namespace std;
void color_background()
{
/*static HANDLE hndl = GetStdHandle(STD_OUTPUT_HANDLE);
SetConsoleTextAttribute(hndl,FOREGROUND_BLUE | BACKGROUND_INTENSITY);*/
system("color 27");
}
struct OT
{
int shifr_studenta;
char imja [20+1];
char familia [20+1];
char otchestvo [20+1];
char facultet [10+1];
int shifr_gruppi;
int matematika;
int angl;
int history;
int count;
};
bool add(int &count, OT *ot);
void drawLineW();
void drawLineN();
void print(int count,OT *ot);
void save(OT *ot);
void read(OT *ot);
void Menu(int count,OT *ot);
bool Password();
void horosho(int count,OT *ot);
void ploho(int count,OT *ot);
void search_student(int count,OT *ot);
int main()
{setlocale(LC_ALL,"Russian");
color_background();
system("cls");
while(!Password());
int count=N;
OT *ot=new OT[count];
Menu(count,ot);
_getch();
return 0;
}
void Menu(int count,OT *ot)
{
system("cls");
int numberSearch;
do
{
cout<<"Здравствуйте, пожалуйста выбирайте поле в Меню"<
cout<<"1- Добавление студента "<
cout<<"2- Печать студентов"<
cout<<"3- Печать студентов со средним баллом 4 и выше"<
cout<<"4- Печать стулдентов со средним баллом ниже"<
cout<<"5- Печать указанного студента"<
cout<<"6- Записать информацию про студента в файл"<
cout<<"7- Чтение информации про студента из файла"<
cout<<"8- Выход из программы"<
cin>>numberSearch;
switch(numberSearch)
{
case 1: add(count,ot);break;
case 2: print(count,ot);break;
case 3: horosho(count,ot);break;
case 4: ploho(count,ot); break;
case 5: search_student(count,ot); break;
case 6: save(ot);break;
case 7: read(ot);break;
case 8: exit(0); break;
}
} while(numberSearch!=8);
system("cls");
}
bool Password()
{
char key;
string password="123";
string PWD;
cout<< "Введите пароль:"<
while((key=_getch())!=13)
{
PWD+=key;
cout<<"*";
}
if(PWD!=password)
return false;
else return true;
}
bool add(int &count, OT *ot)
{
system("cls");
cout << setw(50) << "Добавленние студента" << endl;
for(int i=0;i
{
system("cls");
cout << "Шифр группы: " << endl;
cin.ignore(4,'\n') >>setw(6)>> ot[i].shifr_gruppi;//удалить разделитель строк,// пропускает указанное число элементов от текущей позиции чтения
cout << "Фамилия студента " << endl;
cin.ignore(20, '\n') >>setw(20)>> ot[i].familia;
cout << "Отчество студента " << endl;
cin.ignore(20, '\n') >>setw(20)>> ot[i].otchestvo;
cout << "Имя студента " << endl;
cin.ignore(20, '\n') >>setw(20)>> ot[i].imja;
cout << "Шифр студента: " << endl;
cin.ignore(4, '\n') >>setw(6)>> ot[i].shifr_studenta;
cout<< "Оценка по математике " << endl;
cin.ignore(4, '\n') >>setw(1)>> ot[i].matematika;
cout<< "Оценка по английскому " << endl;
cin.ignore(4, '\n') >>setw(1)>> ot[i].angl;
cout<< "Оценка по история " << endl;
cin.ignore(4, '\n') >>setw(1)>> ot[i].history;
}
system("cls");
for(int i=1; i
for(int j=0;j
if(ot[i].shifr_gruppi==ot[j].shifr_gruppi &&
ot[i].familia==ot[j].familia &&
ot[i].otchestvo==ot[i].otchestvo&&
ot[i].imja==ot[i].imja &&
ot[i].shifr_studenta==ot[i].shifr_studenta &&
ot[i].matematika==ot[i].matematika &&
ot[i].angl==ot[i].angl &&
ot[i].history==ot[i].history
)
{
ot[j].count += ot[i].count;
return true;
}
return false;
char choice;
do{
cout<<"\n Возвращение в меню кнопка -y; выход из Меню любая другая кнопка... "<
cin>>choice;
if(choice=='y')
Menu(count,ot);
else return exit;
}while(1);
system("cls");
}
void drawLineW()
{
for (int i = 0; i < 80; ++i)
cout << "_";
}
void drawLineN()
{
for (int i = 0; i < 80; ++i)
cout << "-";
}
void print(int count,OT *ot)
{
system("cls");
cout << setw(40) << "Учёт успеваемости студента" << endl;
drawLineW();
cout << setiosflags(ios::left)<< setw(6) << "\n| Шифр студента: " << setw(20) << "| Фамилия студента: |"
<< setw(20) << "| Имя студента: |"
<< setw(20) << "| Отечество студента: |"<< setw(6) << " шифр группы: |"<< setw(1) <<" оценка по английскому: |"
<< setw(1)<< " оценка по математике: |" << setw(1)<< " оценка по истории: |" << endl;
drawLineN();
for (int i = 0; i < count; ++i)
{
cout << setiosflags(std::ios::left) << "\n" << "| "
<< setw(6) << ot[i].shifr_studenta << " | "
<< setw(20) << ot[i].familia<< " | "
<< setw(20) << ot[i].imja<< " | "
<< setw(20) << ot[i].otchestvo<< " | "
<< setw(6) << ot[i].shifr_gruppi << " | "
<< setw(1) <
<< setw(1) << ot[i].matematika << " | "
<< setw(1) << ot[i].history<< " | "
<< endl;
drawLineN();
}
char choice;
do{
cout<<"\n Возвращение в меню кнопка -y; выход из Меню любая другая кнопка... "<
cin>>choice;
if(choice=='y')
Menu(count,ot);
else return exit(1);
}while(1);
}
void save(OT *ot)//передаем массив студентов
{
system("cls");
fstream file("C:text.txt", ios::out|| ios::binary);//для записи ios::out
file.write(reinterpret_cast
file.close();
}
void read(OT *ot)
{
system("cls");
fstream file("C:text.txt", ios::in|| ios::binary);//для чтения ios::in
file.read(reinterpret_cast
file.close();
}
void horosho(int count,OT *ot)
{
system("cls");// Получение из файла кол-ва записей в б.д.
float srednee;
cout << setw(40) << "Список студентов с баллом 4 и выше" << endl;
drawLineW();
cout << setiosflags(ios::left)<< setw(6) << "\n| Шифр студента: " << setw(6) << "| Шифр группы: |"
<
<< setw(1)<< " Оценка по истории : |"
<
<< endl;
drawLineN();
for (int i = 0; i < count; ++i)
{srednee = (ot[i].matematika + ot[i].angl + ot[i].history)/3;
if (srednee>=4){
srednee = (ot[i].matematika + ot[i].angl + ot[i].history)/3;
cout<
<
<
<
<
<
<
<
<
<
drawLineN();}
}
char choice;
do{
cout<<"\n Возвращение в меню кнопка -y; выход из Меню любая другая кнопка... "<
cin>>choice;
if(choice=='y')
Menu(count,ot);
else return exit(1);
}while(1);
}
void ploho(int count,OT *ot){
system("cls");// Получение из файла кол-ва записей в б.д
float srednee;
cout << setw(40) << "Список студентов с баллом ниже 4" << endl;
drawLineW();
cout << setiosflags(ios::left)<< setw(6) << "\n| Шифр студента: " << setw(6) << "| Шифр группы: |"
<
<< setw(1)<< " Оценка по истории : |"
<
<< endl;
drawLineN();
for (int i = 0; i < count; ++i)
{srednee = (ot[i].matematika + ot[i].angl + ot[i].history)/3;
if (srednee<4){
srednee = (ot[i].matematika + ot[i].angl + ot[i].history)/3;
cout<
<
<
<
<
<
<
<
<
<
drawLineN();}}}
void search_student(int count,OT *ot){
system("cls");
float srednee;
for (int i = 0; i < count; ++i) {
cout << setw(60) << "Введите искомого студента" << endl;
cin>>ot[i].familia;
cin>>ot[i].imja;
cin>>ot[i].otchestvo;
cout << setw(60) << "Студент" << endl;
drawLineW();
cout << setiosflags(ios::left)<< setw(6) << "\n| Шифр студента: " << setw(6) << "| Шифр группы: |"
<
<< setw(1)<< " Оценка по истории : |"
<
<
drawLineN();
if (ot[i].familia==ot[i].familia && ot[i].imja==ot[i].imja && ot[i].otchestvo==ot[i].otchestvo ){
cout << "\n" << "| "
<
<
<
<
<
<
<
<
<
<
drawLineN();}
}
char choice;
do{
cout<<"\n Возвращение в меню кнопка -y; выход из Меню любая другая кнопка... "<
cin>>choice;
if(choice=='y')
Menu(count,ot);
else return exit(1);
}while(1);
}