Member 12709502 Ответов: 1

Как работает этот код? Пожалуйста, помогите мне понять эту лабораторную программу?


#include <cstdio>
#include <iostream>
#include <fstream>
#include <cstring>
#include <cstdlib>

using namespace std;

class node
{
	public:
	char name[20],usn[20];
	node *link;
};

node *h[29];

void insert()
{
	char name[20],usn[20],buffer[50];
	fstream out;
	out.open("stud.txt",ios::out | ios::app);
	if(!out)
	{
		cout<<"\nNot able to open";
		return;
	}
	cout<<"\n Enter name:";
	cin>>name;
	cout<<"Enter Usn:";
	cin>>usn;
	strcpy(buffer,name);
	strcat(buffer,"|");
	strcat(buffer,usn);
	strcat(buffer,"\n");
	out<<buffer;
	out.close();
}

void hash_insert(char name1[],char usn1[],int hash_key)
{
	node *p,*prev,*curr;
	p=new node;
	strcpy(p->name,name1);
	strcpy(p->usn,usn1);
	p->link=NULL;
	prev=NULL;
	curr=h[hash_key];
	if(curr==NULL)
	{
		h[hash_key]=p;
		return;
	}
	while(curr!=NULL)
	{
		prev=curr;
		curr=curr->link;
	}
	prev->link=p;
}

void retrieve()
{
	fstream in;
	char name[20],usn[20];
	int j,count;
	node *curr;
	in.open("stud.txt",ios::in);
	if(!in)
	{
		cout<<"\nNot able to open";
		exit(0);
	}
	while(!in.eof())
	{
		in.getline(name,20,'|');
		in.getline(usn,20,'\n');
		count=0;
		for(j=0;j<strlen(usn);j++)
		{
			count=count+usn[j];
		}
		count=count%29;
		hash_insert(name,usn,count);
	}
	in.close();
	cout<<"Enter Usn:";
	cin>>usn;
	count=0;
	for(j=0;j<strlen(usn);j++)
		count=count+usn[j];
	count=count%29;
	curr=h[count];
	if(curr==NULL)
	{
		cout<<"\n Record not found";
		return;
	}
	do
	{
		if(strcmp(curr->usn,usn)==0)
		{
			cout<<"\n Record found:"<<curr->usn<<"\t"<<curr->name;
			curr=curr->link;
			return;
		}
		else
		{
			curr=curr->link;
		}
	}
	while(curr!=NULL);
	if(curr==NULL)
	{
		cout<<"\n Record not found";
		return;
	}
}

int main()
{
	int ch;

	for( ; ; )
	{
		cout<<"\n1.Insert\t 2.Retrieve\t 3.Exit\n";
		cout<<"Enter the choice:";
		cin>>ch;
		switch(ch)
		{
			case 1:insert(); break;
			case 2:retrieve(); break;
			case 3:return 0;
		}
	}
}


Что я уже пробовал:

как работает этот код? пожалуйста, помогите мне понять эту лабораторную программу?

1 Ответов

Рейтинг:
1

CPallini

Зачем беспокоиться о старомодности, C-например, код?
Во всяком случае, вы могли бы понять это, выполняя статический анализ кода: попробуйте (мысленно) следить за выполнением программы, начиная с основной функции (в качестве предварительного условия вы должны знать C++), таким образом, вы должны быть в состоянии понять общую картину. Тогда, если у вас есть сомнения по поводу деталей, задайте здесь конкретный вопрос.