-
Задание
Да се състави програма, която поддържа електронна таблица с редове – записи с по две символни и три числови полета данните да се въвеждат от клавиатурата и да се записват в файл. Програмата подрежда редовете по азбучен ред на символното поле.
В паметта за съхраняване на таблицата се използва структура – сортиран списък.
Името на файла да се задава като параметър от командния ред при стартиране на програмата.
Проектирани функции на С++ да се запишат в библиотечен модул ххх.lib.
Да се документират: структурата на програмата, текстът и предназначението на проектираните функции, интерфейсът на програмата с потребителя.
-
Реализация на програмата
Програмата е реализирана с файла наречен Diction.CPP, които съдържа един основен клас “ Diction”, реализиращ всички операции за работа с речника:
-
Добавяне на дума
-
Промяна на дескрипцията на избрана от нас дума
-
Изтриване на дума от записа
-
Отпечатване на записа от думи
-
Зареждане на записа от файла в паметта
-
Съхраняване на записа във фаил
-
Сортиране
Съществуват два базови указателя: Diction *next, Diction *first и седем функции от тип public. За работа с тези данни са реализирани следните функции:
void add (); добавя нова дума в записа
void change (); променя думата или нейната дескрипция в записа
void del (); изтрива стара дума в записа
void print (); отпечатва на екрана целия запис
void load (); зарежда записа в паметта
void save (); създава и обновява файла Diction.txt
void sort (); сортира текущия запис
Сортирането в програмата е реализирано по метода на мехурчето.
В главната програма (т.е. void main ()) е реализирано меню за изпълнение на желаната операция, която се вика от потребителя. Към функциите void void change ();, void del (); са добавени подменюта за доопределяне на желаната операция. Съответно:
към void change()
Програмата изисква поредния номер на думата за промяна. Изписва на екрана избраната и прави потребителско питане за цмена на самата дума или за нейното значение. Ако съществува грешка на номера на въведената дума в менюто е реализирана операция стъпка назад.
към void del()
Тук програмата изисква пореден номер както в по горната, но тук не съществува възможност за връщане назад при грешка.
Останалите функции са скрити за потребителя или в програма е реализиран код за известие, че функцията вече е изпълнена.
Цялостен код на програмата:
#include
#include
#include
#include
#include
#include
#include
class Diction
{
private:
char word[30];
char descr[100];
Diction *next;
Diction *first;
public:
Diction()
{ first=NULL; }
void add();
void change();
void del();
void print();
void load();
void save();
void sort();
};
//========================================
void Diction::add()
{
Diction *cur;
clrscr();
cur = new Diction;
cout<<" Input the word :";
cin>>cur->word;
cout<<" Input the descr :";
cin>>cur->descr;
cur->next=first;
first=cur;
}
//========================================
void Diction::change()
{
unsigned i,N;
Diction *ptr;
cout<
cin>>N;
ptr=first;
for(i=1;i
if((ptr=ptr->next)==NULL)
{
cout<<" There not information to this number"<<
endl<<" Choice again low number !";
getch();
break;
}
if(ptr!=NULL)
{
cout<<" You select that word :"<
cout<word<<" "
<<" "<
descr<
cout<<" 1. Word"<
<<" 2. Description"<
<<" 3. Return"<
<<"Enter your choice for change: ";
cin>>i;
switch(i)
{
case 1:
cout<<" New word:";
cin>>ptr->word;
break;
case 2:
cout<<" New descr:";
cin>>ptr->descr;
break;
case 3:
return;
break;
}
}
}
//========================================
void Diction::del()
{
unsigned i,N;
Diction *ptr1,*ptr2;
cout<<" Input the number of word for delete:";
cin>>N;
ptr1=first;
for(i=1;i
{
ptr2=ptr1;
if((ptr1=ptr1->next)==NULL)
{
cout<<" There not information to this word's number"<<
endl<<" Choice again low number !";
getch();
break;
}
}
if(ptr1!=NULL)
{
ptr2->next=ptr1->next;
delete(ptr1);
}
}
//========================================
void Diction::print()
{
Diction *ptr3;
int k,i=1;
ptr3=first;
clrscr();
while(ptr3!=NULL)
{
cout<
word<<" "<
descr<
for(k=0;k<=79;k++)cout<<"-";
cout<
if((i%8)==0)
{
cout<
getch();
clrscr();
}
i++;
ptr3=ptr3->next;
}
getch();
}
//========================================
void Diction::load()
{
Diction *ptr4;
first=NULL;
ifstream fout("Dict.txt",ios::in);
while(fout)
{
ptr4=new Diction;
fout>>ptr4->word
>>ptr4->descr;
ptr4->next=first;
first=ptr4;
}
cout<
delay(2000);
}
//========================================
void Diction::save()
{
Diction *ptr5;
ptr5=first;
ofstream fin("Dict.txt",ios::out);
while(ptr5!=NULL)
{
fin<
word
<descr
<
ptr5=ptr5->next;
}
cout<
delay(2000);
}
//========================================
void Diction::sort()
{
int i = 0;
int l = 0;
Diction *temp;
char tempword[30];
char tempdescr[100];
temp=first;
while(temp!=NULL)
{
temp=temp->next;
i++;
}
if (i>1)
for (l=0;l<=i;l++)
{
temp=first;
while (temp->next!=NULL)
{
if (strcmp(temp->word,temp->next->word)>0)
{
strcpy(tempword,temp->next->word);
strcpy(tempdescr,temp->next->descr);
strcpy(temp->next->word,temp->word);
strcpy(temp->next->descr,temp->descr);
strcpy(temp->word,tempword);
strcpy(temp->descr,tempdescr);
};
temp=temp->next;
}
};
cout<
delay(2000);
}
//========================================
void main()
{
Diction book;
int i;
while(1)
{
clrscr();
cout<
cout<<" 1. Add new word"<
cout<<" 2. Change the description of word"<
cout<<" 3. Delete word"<
cout<<" 4. View the whole diction"<
cout<<" 5. Load the Dict.txt"<
cout<<" 6. Save the Dict.txt"<
cout<<" 7. Sort dictionary"<
cout<<" 8. Exit"<
cout<<" Enter your choice: ";
cin>>i;
switch(i)
{
case 1:
book.add();
break;
case 2:
book.change();
break;
case 3:
book.del();
break;
case 4:
book.print();
break;
case 5:
book.load();
break;
case 6:
book.save();
break;
case 7:
book.sort();
break;
case 8:
exit(0);
break;
}
}
}
Сподели с приятели: |