tên đề tài: Quản lí khách hàng bằng liên kết đôi, code danh sách liên kết đôi. Các thao tác: thêm khách hàng đầu cuối danh sách , sửa thông itn khách hàng, xóa khách hàng. Tìm kiếm khách hàng theo mã khách hàng
Trang 1//Bài tập về danh sách liên kết đôi (danh sách liên kết kép) //Đề tài : Quản lí khách hàng
//SV thực hiện:Trần Thị Thu khoa CNTT Viện ĐH Mở Hà Nội
#include<fstream>
#include<iostream>
#include<string>
#include<windows.h>
#include <iomanip>
#include<conio.h>
using namespace std;
struct khach
{
char Makh[30];
char Tenkh[30];
char Diachi[30];
int Sdt;
};
// khai bao cau truc mot node
struct node
{
khach info; // khai bao du lieu
struct node *next;
struct node *previous;
};
struct list // khai bao mot danh sach
Trang 2{
node *head;//nut dau
node *tail;// nut cuoi
};
//list Q;
// node *new_element;
// tao mot danh sach rong
void khoitao(list &Q)
{
Q.head=NULL;
Q.tail=NULL;
}
// tao danh sach moi
node *getnode(khach x)
{
node*p;
p=new node;
if(p==NULL)
{
cout<<"khong du bo nho !"; exit(1);
}
else
{
Trang 3p->next=NULL;
p->previous==NULL;
}
return p;
}
// Them 1 khach hang vao dau danh sach
void Inserthead(list &Q, node *p) {
if(Q.head==NULL)
{
Q.head=p;
Q.tail=p;
}
else
{
p->next=Q.head;
Q.head->previous=p;
Q.head=p;
}
}
// Them 1 khach hang vao cuoi danh sach
void Inserttail(list &Q, node *p)
Trang 4if(Q.head==NULL)
{
Q.head=p;
Q.tail=p;
}
else
{
Q.tail->next=p;
p->previous=Q.tail;
Q.tail=p;
}
}
//xoa 1 khach hang o dau danh sach void Removehead(list &Q)
{
node*p;
if(Q.head!=NULL)
{
p=Q.head;
Q.head=Q.head->next; delete p;
if(Q.head==NULL)
{
Q.tail=NULL;
Trang 5} }
}
// Xoa bo 1 khach hang o cuoi danh sach void Removetail(list &Q)
{
node*p;
if(Q.tail==NULL)
{
p=Q.tail;
Q.tail->next=NULL;
delete p;
if(Q.head==NULL) {
Q.tail=NULL;
}
if(Q.head==NULL)
{
Q.tail=NULL;
} else { Q.head->previous=NULL; }
Trang 6}
// xoa khach hang theo ma khach hang
int xoama(list &Q )
{
char x[10];
cout<<"\n Nhap ma khach hang can xoa\n";fflush(stdin);gets(x); node*p;
node*q;
q = NULL;
p = Q.head;
while(p!= NULL)
{
if(strcmp(p->info.Makh,x) == 0)
break;
q = p;
p = p->next;
}
if(p==0)
return 0;
if(q!=NULL)
{
if(p==Q.tail)
Q.tail=q;
Trang 7q->next=p->next;
free(p);
}
else
{
Q.head=p->next;
if(Q.head==NULL)
Q.tail=NULL;
}
return 1;
}
// nhap thong tin cua 1 khach hang
void Nhapkh(khach &x)
{
cout<<"\nNhap ma khach hang:"; cin>>x.Makh;
cout<<"\nNhap ten khach hang:"; fflush(stdin); gets(x.Tenkh); cout<<"\nNhap dia chi khach hang:"; fflush(stdin); gets(x.Diachi); cout<<"\nNhap So dien thoai:"; cin>>x.Sdt;
}
void Inkh(khach x)// in thong tin cua 1 khach hang x
{
Trang 8cout<<setiosflags(ios::fixed)
<<setprecision(2)<<setw(2)<<x.Makh<<setw(20)<<x.Tenkh<<setw(20)<< x.Diachi<<setw(15)<<x.Sdt;
}
void Nhap_kh(list &Q) // Nhap danh sach khach hang
{
int i,n;
khach x;
node *p;
cout<<"\n Nhap so khach hang: "; cin>>n;
for(i=0;i<n;i++)
{
cout<<"\n Nhap thong tin khach hang thu : "<<i+1;
Nhapkh(x);
p=getnode(x);
Inserthead(Q,p);
}
}
void inds(list &Q)
{
node*p;
p=Q.head;
Trang 9<<"Sdt";
while(p!=NULL)
{
Inkh(p->info);
p=p->next;
}
}
// tim kiem 1 khach hang theo ma khach hang nao do
int timkiemtheoma(list Q)
{
node*p;
int dem=0;
char ma[30];
khach x;
cout<<"\n nhap ma khach hang can tim:";
fflush(stdin);
gets(ma);
p=Q.head;
cout<<setw(2)<<"Makh"<<setw(20)<<"Tenkh"<<setw(15)<<"Diachi"<<setw(10)
<<"Sdt";
while(p!=NULL) {
if(strcmp(ma,p->info.Makh)==0)
Trang 10Inkh(p->info);
dem++;
}
p=p->next;
}
if(dem==0)
{
cout<<"\n Khong tim thay ma khach hang trong danh sach !";
}
}
//tim kiem theo ten khach hang nao do
int timkiemtheoten(list Q)
{
node *p;
int dem=0;
char ten[30];
khach x;
cout<<"\n Nhap ten khach hang can tim";
fflush(stdin);
gets(ten);
p=Q.head;
cout<<setw(2)<<"Makh"<<setw(10)<<"Tenkh"<<setw(15)<<"Diachi"<<setw(10)
<<"Sdt";
Trang 11{
if(strcmp(ten,p->info.Tenkh)==0) {
Inkh(p->info);
dem++;
} p=p->next;
} if(dem==0)
{
cout<<"\n Khong tim thay ten khach hang trong danh sach !";
} }
//sap xep theo ma khach hang
void sapxepma(list Q)
{
node*p,*q;
p= Q.head;
khach x;
while(p != NULL)
{
Trang 12q = p->next;
while(q != NULL)
{
if(p->info.Makh > q->info.Makh) {
x = p->info;
p->info = q->info; q->info = x;
}
q = q->next;
}
p= p->next;
}
}
int main()
{
list Q;
node *p;
node *q;
node *new_element;
khach x;
int chon;
khoitao(Q);
Trang 13{
//cout << "|
===================================================|" << endl
cout << "| DANH SACH |" << endl
<< "| -|" << endl << "| 1.Nhap danh sach |" << endl << "| 2.In danh sach |" << endl << "| 3.Them 1 khach hang vao dau danh sach |" << endl
<< "| 4.Them 1 khach hang vao cuoi danh sach |" << endl
<< "| 5.Xoa 1 khach hang o dau danh sach |" << endl << "| 6.Xoa 1 khach hang o cuoi danh sach |" << endl << "| 7.Xoa 1 khach hang theo ma khach hang |" << endl
<< "| 8.Tim kiem 1 khach hang theo ma khach hang |" << endl
<< "| 9.Tim kiem 1 khach hang theo ten khach hang |" << endl
<< "| 10.Sap xep theo ma khach tang dan |" << endl << "| 0 Dung chuong trinh! |" << endl
<< "|
===================================================|" << endl
<< " \n Ban hay chon mot so:";
cin>>chon;
switch(chon) {
Trang 14case 1: Nhap_kh(Q) ; break;
case 2: inds(Q);break;
case 3: cout<<"\n Nhap thong tin khach can bo xung vao dau DS";
Nhapkh(x);
p=getnode(x);
Inserthead(Q,p);break;
case 4: cout<<"\n Nhap thong tin khach hang can bo xung vao cuoi DS";
Nhapkh(x);
p=getnode(x);
Inserttail(Q,p);break;
case 5:Removehead(Q);break;
case 6:Removetail(Q);break;
case 7:xoama(Q);break;
case 8: timkiemtheoma(Q);break;
case 9: timkiemtheoten(Q);break;
case 10: sapxepma(Q);inds(Q);break;
} }while(chon!=0);
getch();
}