Friday, January 19, 2018

Simple Project (Data Structure)

আমরা এখন একটি student management টাইপ সিস্টেম নিয়ে কথা বলবো। প্রোজেক্ট টি খুব ই সিম্পল। যাদের নূন্যতম ডাটা স্ট্রাকচার নিয়ে জ্ঞান আছে, তারা আশা করি খুব সহজে বুঝতে পারবে কোড এ কি করা হয়েছে। যেসব ফাংশন ব্যবহার করা হয়েছে তার কিছু নিচে বলা হলঃ
কোড ঃ 

#include <bits/stdc++.h>
using namespace std;
struct info
{
string name,id,phone,address,parent_name;
double cgpa;
struct info *next;
}*head;
struct node
{
string name;
double cg;
} calc[10000001];
bool cmp(node p,node q)
{
return p.cg>q.cg;
}
typedef struct info item;
void option()
{
cout<< "Choose your option: "<<endl;
cout<< "1: Insert data"<<endl;
cout<< "2: Update data"<<endl;
cout<< "3: Delete data"<<endl;
cout<< "4: Search data"<<endl;
cout<< "5: Show student name according to their cgpa"<<endl;
cout<< "6: Show every data"<<endl;
cout<< "7: Quit program"<<endl;
}
void show_data(item *root)
{
cout<< "Student name: "<<root->name<<endl;
cout<< "Id : "<<root->id<<endl;
cout<< "Parent name : "<<root->parent_name<<endl;
cout<< "Address : "<<root->address<<endl;
cout<< "Phone No : "<<root->phone<<endl;
cout<< "CGPA : "<<root->cgpa<<endl;
}
void show_all()
{
item* temp=head;
if(head==NULL)
{
cout<< "There is no data in the system"<<endl;
return;
}
int tc=1;
while(temp!=NULL)
{
cout<< "Data "<<tc++<< ":"<<endl<<endl;
show_data(temp);
temp=temp->next;
}
}
void inserting()
{
item *temp;
temp = new item;
temp->next=NULL;
cout<< "Input name(string) : ";
//getchar();
getline(cin,temp->name);
cout<< "Input id(string) : ";
cin>>temp->id;
cout<< "Input parent_name(string) : ";
getchar();
getline(cin,temp->parent_name);
cout<< "Input phone(string) : ";
cin>>temp->phone;
cout<< "Input address(string) : ";
getchar();
getline(cin,temp->address);
cout<< "Input cgpa(double) : ";
cin>>temp->cgpa;
if(head==NULL)head=temp;
else head->next=temp;
}
void deleting()
{
int x;
cout<< "Choose type : "<<endl;
cout<< "1 : Delete by student name."<<endl;
cout<< "2 : Delete by student id."<<endl;
cin>>x;
item *temp,*pre;
temp = new item;
pre = head;
temp = pre->next;
if(x==1)
{
string nm;
cout<< "Input student name according to the database"<<endl;
getchar();
getline(cin,nm);
if(head->name==nm)
{
head=head->next;
cout<< "Successfully deleted"<<endl;
return;
}
else
{
while(temp->name!=nm&&temp!=NULL)
{
pre=pre->next;
temp=temp->next;
}
if(temp!=NULL)
{
pre->next=temp->next;
cout<< "Successfully deleted"<<endl;
return;
}
}
cout<< "No name matched !!! Insert a valid name"<<endl;
}
else
{
string nm;
cout<< "Input student id according to the database"<<endl;
getchar();
getline(cin,nm);
if(head->id==nm)
{
head=head->next;
cout<< "Successfully deleted"<<endl;
return;
}
else
{
while(temp->id!=nm &&temp!=NULL)
{
pre=pre->next;
temp=temp->next;
}
if(temp!=NULL)
{
pre->next=temp->next;
cout<< "Successfully deleted"<<endl;
return;
}
}
cout<< "No id matched !!! Insert a valid id"<<endl;
}
}
void updating()
{
string x;
cout<< "Input the id of the student you want to update : ";
cin>>x;
item *root = head;
while(root->id!=x &&root!=NULL)root=root->next;
if(root==NULL)cout<< "No id found ! Please input a valid id"<<endl;
else
{
show_data(root);
cout<< "UPDATE here -->"<<endl<<endl;
cout<< "Student name: ";
getchar();
getline(cin,x),root->name=x;
cout<< "Id : ";
cin>>x,root->id=x;
cout<< "Parent name : ";
getchar();
getline(cin,x),root->parent_name=x;
cout<< "Address : ";
getchar();
getline(cin,x),root->address=x;
cout<< "Phone No : ";
cin>>x,root->phone=x;
cout<< "CGPA : ";
double xx;
cin>>xx,root->cgpa=xx;
}
}
void searching()
{
string x;
cout<< "Input the name you want to search: ";
//getchar();
getline(cin,x);
//cout<<x<<endl;
item *temp=head;
while(temp!=NULL)
{
//cout<<temp->name<<endl;
if(temp->name!=x)
temp=temp->next;
else break;
}
if(temp==NULL)
cout<< "No data found!! Insert a valid name!"<<endl;
else
show_data(temp);
}
void show_cgpa()
{
if(head==NULL)
{
cout<<"There is no data in the system"<<endl;
return;
}
int pos=0;
item *temp=head;
while(temp!=NULL)
{
calc[pos].name = temp->name;
calc[pos++].cg = temp->cgpa;
temp=temp->next;
}
sort(calc,calc+pos,cmp);
for(int i=0; i<pos; i++)
cout<< "Name : "<<calc[i].name<< " -> CGPA : "<<calc[i].cg<<endl;
}
int main()
{
int x;
while(1)
{
option();
cin>>x;
getchar();
if(x==7)return 0;
else if(x==1)inserting();
else if(x==2)updating();
else if(x==3)deleting();
else if(x==4)searching();
else if(x==6)show_all();
else show_cgpa();
cout<<endl<<endl;
}
return 0;
}

struct info ডাটা টাইপ এ আমার যেসব ইনফরমেশন দরকার তা ভ্যারিয়েবল আকারে লিখে রাখলাম, এটা আসলে কোডার এর উপর নির্ভর করে যে কিকি টাইপ ডাটা নিয়ে প্রোগ্রাম টা কাজ করবে। এটা একটা স্ট্রাকচার টাইপ ডাটা টাইপ।
struct node টাইপ এর একটা ডাটা টাইপ এ নাম এবং সিজিপিএ ( CGPA ) রেখে কাজ করবো যাতে পরবর্তীতে আমরা CGPA এর উপর ভিত্তি করে নাম গুলো সর্টেড আকারে আউটপুট দেখাতে পারি।
cmp( node p, node q ) একটা compare টাইপ ফাংশন যার কাজ হচ্ছে স্ট্রাকচার এর ভিতরের ডাটাগুলো compare করে ঐ অনুযায়ী আউটপুট দেখানো।
void option() আমি আমার প্রোগ্রামটি রান করার সময় user দের কি show করবো তার একটা সিম্পল ডেমো।
void show_data(item *root) নতুন নতুন ডাটা ইনসার্ট এর সময় আমি লিংক লিস্ট আকারে ইনসার্ট করেছি, তাই একেকটা নোড ( স্ট্রাকচার ) এর যাযা ভ্যারিয়েবল এ যাযা ডাটা ছিল তা একবারে দেখানোর জন্য এই ফাংশন।
void show_all() যতগুলি ডাটা ইনসার্ট করা হয়েছে তা সিরিয়ালি সব দেখানো।
void inserting() ডাটা ইনসার্ট করা।
void deleting() ডাটা ডিলিট করা।
void updating() ডাটা আপডেট করা।
void searching() নামের উপর ভিত্তি করে ডাটা সার্চ করা। ( লিংক লিস্ট এর ব্যাসিক সার্চিং )।
void show_cgpa() এখানে নাম এবং CGPA লিংক লিস্ট থেকে struct node টাইপ একটি অ্যাারে calc [ ] এর মধ্যে রেখে STL এর sort ( ) ফাংশন ব্যবহার করে আউটপুট অ্যাারেটা কনসোল এ দেখানো হয়েছে।

No comments:

Post a Comment