You are on page 1of 9

Quản lý thuê bao điện thoại

Trường Đại Học Khoa Học Tự Nhiên-ĐHQGHN


Ngành : Toán – Tin ứng dụng

Bài Tập Lớn


Quản Lý Thuê Bao Điện
Thoại
[01/2009]

Giáo Viên Giảng Dạy:

Hoàng Tuấn Anh


Trần Ngọc Thúy

Sinh Viên Thực Hiện:

Vủ Thái Học
Nguyễn Tiến Nghĩa
Lê Văn Hưng

Bộ môn Tin học -1-


Quản lý thuê bao điện thoại

I- Giới Thiệu Chung

T in học ngày nay đang được sử dụng rộng rãi trong văn phòng các cơ
quan và gia đình.Vì vậy mà các phần mềm tiện ích phát triển ngày
càng đa dạng và phong phú.
Không còn nữa những ngày mà người nhân viên quản lý cứ phải lật từng trang
giấy để tìm thông tin về một khách hàng.Họ phải làm việc đó rất vất vả,hoặc họ
phải ghi chép để chỉnh sửa vào một số thuê bao khi có sự thay đổi nào đó về
thông tin cá nhân của khách hàng của mình.Hơn nữa khả năng lưu trữ thông tin
về cá nhân khách hàng không được an toàn (vì trang giấy có thể bị nhèo hay bị
rách…).
Cho nên mọi công việc quản lý bằng sổ sách đều có thể đơn giản hoá bằng
các phần mềm quản lý.Thuê bao điện thoại cũng vậy ! Từ ý tưởng này chúng
tôi viết chương trình “quản lý thuê bao điện thoại” mô phỏng một số chức năng
cơ bản của một chương trình quản lý thuê bao điện thoại trong các công ty lớn.

Đề Tài: Quản Lý Thuê Bao Điện Thoại


Mỗi số thuê bao ứng với một chủ thuê bao,với thông tin là địa chỉ xã
phường,thị trấn,tỉnh,thành phố,nghề nghiệp,mã khách hàng,tiền cước 6 tháng
gần đây,đang hoạt động hay bị chặn,...
Có thể thực hiện các thao tác sau:
*Tìm kiếm theo số thuê bao;theo tên,theo dịa chỉ...
*Sửa thông tin của một thuê bao(thay số,đổi chủ thuê bao,đổi địa
chỉ...).
*Xoá môt số trong danh bạ(người dùng không dùng nữa,...).
*Thêm một số trong danh bạ.
*Một số yêu càu phụ:in danh sách thuê bao cùng tính chất nào đó
chẳng hạn cùng tỉnh,huyện,đang bị chặn,... ra màn hình hoặc dạng file txt để
tiện việc sử dụng cho các mục đích khác.
A: Mục Đích Chương Trình
Nâng cao kỹ năng lập trình, khả năng làm việc theo nhóm.
B: Nguồn Tham Khảo
•Sách :
Kỹ Thuật Lập Trình C Cơ Bản Và Nâng Cao(gs.Phạm Văn Ất)
Ngôn Ngữ Lập Trình C (Quách Tuấn Ngọc)
Sổ tay kỹ thuật lập trình(ebook)
•Ý kiến thầy cô giảng dạy:
Hoàng Tuấn Anh
Trần Ngọc Thúy
•Ý kiến bạn bè, một số bài tập lớn của anh chị khóa trước
II – Quá Trình Hoàn Thiện Và Phân Công Công Việc

Bộ môn Tin học -2-


Quản lý thuê bao điện thoại

A: Bàn luận đưa ra kiểu dữ liệu và khung chương trình chung


-- Kiểu dữ liệu:
struct diachi
{
char xa[30],huyen[30],tinh[30];
};
struct thongtin
{
long int sodt;
char makh[30],tenkh[30],job[30];
struct diachi dchi;
long int cuoc6t[6] ;
int pit ; };
struct dsmn
{
thongtin ttin;
dsmn *next;
};
struct dstimkiem
{
thongtin *ctdulieu;
dstimkiem *next ;
};
-- Khung chương trình:

1.hiển thị danh sách hiện tại


2.thêm số thuê bao
MENU CHÍNH 3.tìm kiếm
4.sửa đổi thông tin
5.liệt kê thuê bao bị chặn
6.liệt kê thuê bao hoạt động

exit
Liệt kê thuê bao hoạt động
Hiển thị thue bao hiện tại

Liệt kê thuê bao bị chặn


Thêm số thuê bao

Sửa đổi thông tin


Tìm kiếm

(*)

(*)
Theo tên

Theo mã

Theo job

Theo SĐT

Theo xã

Theo huyên

Theo tỉnh

Biết mã

Biết SĐT

Về menu TK

Bộ môn Tin học -3-


Quản lý thuê bao điện thoại

(*) về menu lớn


B: Phân công công việc

Nguyễn Tiến Nghĩa: Làm phần tạo cơ sở dữ liệu + thêm vào danh bạ

Vũ Thái Học: Làm phần sửa và xóa

Lê Văn Hưng: Làm phần tìm kiếm theo từng trường

Trong quá trình làm việc có sự trao đổi về phần việc của nhau, yêu cầu mọi
người đều phải làm thành modun,…

III - Một Số Hàm Và Chức Năng


+Thêm phần tử:
-Hàm chính:
dsmn *chenthemptu(dsmn *dauds);
• Chức năng của hàm:chèn thêm N số thuê bao trực tiếp vào cuối file và
vào vị trí hợp lí trong danh sách móc nối theo thứ tự Alphabetical (N nhập từ
bàn phím).
Dữ liệu trong file sẽ được sắp xếp vào lần cập nhật sau của danh sách móc nối
• Ý tưởng: các số thuê bao sẽ được nhập vào một mảng động, sau đó sắp
xếp mảng rồi thêm mảng này vào danh sách móc nối một cách thích hợp
dsmn *chenthemptu(dsmn *dauds)
{
int tmp=0 ,i;
FILE *them;
them=fopen(fi,"ab+");// Mo file ra de co san de doc va` ghi vao` cuoi'
File
ktra(them);
printf("\n So cac so thue bao ban muon them vao ds : ");
scanf("%d",&tmp);
dsmn *p = (dsmn*)calloc(tmp,sizeof(dsmn));
for( i= 0; i<tmp; i++)
p[i].ttin = ttin_thuebao(dauds);

fwrite(p,sizeof(thongtin),tmp,them);
fclose (them);

return dauds;
}

-Các hàm hỗ trợ:


thongtin ttin_thuebao(dsmn *dauds);
nhập thông tin thuê bao đã được chuẩn hóa vào một biến kiểu “thongtin” và trả
lại biến này để làm dữ liệu chứa trong một con trỏ kiểu “dsmn”.
thongtin ttin_thuebao(dsmn *dauds)
{

Bộ môn Tin học -4-


Quản lý thuê bao điện thoại

int k,j,d ;long int sodt, t; char tg[30] ;


thongtin p ;
while(1)
{
printf("\n So thue bao : "); scanf("%ld",&sodt);
if(ktra_sodt(sodt,dauds)) p.sodt = sodt;
else {printf("\n\n\t SO DIEN THOAI BAN NHAP VAO DA CO
\n\n\t\t !!!! HAY NHAP LAI");continue;}
printf("\n - Ma khach hang : ");ff; gets(tg);
if(ktra_makh(tg,dauds)) strcpy(p.makh , tg) ;
else
{
printf("\n\n\t MA KHACH HANG DA BI TRUNG\n\n\t\t HAY NHAP
LAI");
continue;
}
printf("\n-Ten chu thue bao:");ff;gets(tg);chuanhoa1(tg);strcpy(p.tenkh , tg)
;
printf("\n - Nghe nghiep : "); gets(tg);chuanhoa2(tg); strcpy(p.job , tg) ;
printf("\n - Dia chi cua chu thue bao : ");
printf("\n + Xa/phuong/thi tran : ");ff;gets(tg);chuanhoa1(tg);
strcpy(p.dchi.xa , tg) ;
printf("\n + Huyen / Thi xa : ");ff;gets(tg);chuanhoa1(tg);
strcpy(p.dchi.huyen , tg) ;
printf("\n + Tinh / Thanh Pho : ");ff;gets(tg);chuanhoa1(tg);
strcpy(p.dchi.tinh , tg) ;
printf("\n - Tien cuoc 6 thang gan day (bat dau tu thang 6 den thang
11)");
printf("\n Don vi : Nghin dong");
for(j=6 ; j<=11 ; j++)
{ printf("\n + Tien cuoc thang %d : ",j);
scanf("%ld",&t); p.cuoc6t[j-6] = t*1000 ;
}
printf("\n tinh trang thue bao : \n An 1 : Hoat dong binh thuong \n An
0 : Dang tam ngung hoat dong ");
scanf("%d",&k); if(k) p.pit = 1 ;
else p.pit = 0 ;
printf("\n\n\t Ban co chac chan voi noi dung nay ko ? Y/N");
char ch = getch();
if(ch=='y' || ch=='Y') break;

}
puts("\n\t _______________________________!");

return p;
}
int ktra_makh(char makh[],dsmn *dauds);
• Chức năng:kiểm tra mã vừa nhập có trùng các mã có trong dữ liệu hay
không
int ktra_makh(char makh[],dsmn *dauds)
{
dsmn *p;
form(p,dauds)
if( !strcmp(p->ttin.makh, makh) ) return 0;
return 1;
}

int ktra_sodt(long int sodt,dsmn *dauds) ;

Bộ môn Tin học -5-


Quản lý thuê bao điện thoại

• Chức năng:kiểm tra số điện thoại có trùng các số điện thoại có trong dữ
liệu hay không
int ktra_sodt(long int sodt,dsmn *dauds) // ktra sdt nhap vao co bi trung
hay ko ?
{
dsmn *p;
form(p,dauds)
if(p->ttin.sodt == sodt) return 0; // Da bi trung
return 1;
}

+Tìm kiếm:
-Hàm chính:
dstimkiem *tim_hten(dsmn *dauds) ;
• Chức năng: tìm kiếm các thuê bao có tên chủ thuê bao chứa xâu được
nhập vào từ bàn phím
• Ý tưởng:chuẩn hóa xâu nhập vào và tên của từng chủ thuê bao bằng
hàm “chuanhoa3(char s [] ) ;”(chuyển thành xâu chỉ bao gồm chữ thường) để
so sánh
danh sách trả về kiểu “dstimkiem” là một danh sách móc nối kiểu hàng đợi tự
động sắp xếp theo tên chủ thuê bao.
dstimkiem *tim_hten(dsmn *dauds) // TIM KIEM THEO HO TEN NHAP VAO
{
char hten[30];
dsmn *p;
dstimkiem *pdau;
pdau= NULL;
printf("\nnhap vao ten can tim:");
fflush(stdin);gets(hten);
form(p,dauds)
if(chuoi(p->ttin.tenkh,hten)!= NULL)
pdau = themnode(pdau,&p->ttin);
return pdau;
}

Các hàm tìm kiếm dưới đây tương tự


dstimkiem *tim_sodt(dsmn *dauds);// Tìm kiếm theo số điện thoại

dstimkiem *tim_makh(dsmn *dauds);// Tìm kiếm theo mã khách hàng

dstimkiem *tim_job(dsmn *dauds) ;// Tìm kiếm theo nghề nghiệp

dstimkiem *tim_xa (dsmn *dauds);// Tìm kiếm theo địa chỉ xã

dstimkiem *tim_huyen(dsmn *dauds);// Tìm kiếm theo địa chỉ huyện

dstimkiem *tim_tinh(dsmn *dauds);/ Tìm kiếm theo địa chỉ tỉnh

Sau khi tìm kiếm nếu kết quả trả về khác rỗng thì có thêm tùy chọn để có
thể thực hiện các chức năng:
-Chỉ đổi địa chỉ (sửa địa chỉ chung cho tất cả các thuê bao này) .

Bộ môn Tin học -6-


Quản lý thuê bao điện thoại

- Sửa tất cả thông tin.


- In danh sách tìm được ra file văn bản( in ra desktop).
-Hàm hỗ trợ:
char *chuoi(char s[],char c[]);
• Chức năng :trả về NULL nếu xâu c[] không xuất hiện trong xâu s[] (sau
khi sử dụng hàm chuanhoa3(…) cho hai xâu) .
char *chuoi(char s[],char c[])
{
if(!c) return NULL;
char tg[30] ;
strcpy(tg,s);

chuanhoa3(tg);
chuanhoa3(c);
return strstr(tg,c);
}

dstimkiem *themnode(dstimkiem *pdau,thongtin *p);


• Chức năng: thêm một phần tử vào danh sách trả về của hàm tìm kiếm .
dstimkiem *themnode(dstimkiem *pdau,thongtin *p) // Them 1 node co du
lieu la p vao ds tim dc
{
dstimkiem *q , *pcuoi= pdau ;
q = (dstimkiem*)malloc(sizeof(dstimkiem));
q->ctdulieu = p ;q->next = NULL ;
if(pdau == NULL) pdau = q;
else {
while(pcuoi->next)pcuoi= pcuoi->next; // tim dia chi cuoi ds
pcuoi->next = q;
pcuoi =q;
}
return pdau;

+Sửa xóa:
-Hàm chính:
void suaxoa1(dsmn *dauds,int x);
• Chức năng: sửa thông tin hoặc xóa thuê bao trong dsmn có mã hoặc số
thuê bao trùng mã hoặc số thuê bao được nhập vào từ tìm kiếm(phải nhập chính
xác nếu không quay về hàm tìm kiếm để xác định mã hoặc số thuê bao cần
xóa).
• Ý tưởng: sau khi nhập mã hoặc số thuê bao duyệt dsmn để tìm chủ thuê
bao sau đó sửa hoặc xóa
-Hàm hỗ trợ:
dsmn *sua1(dsmn *dauds,dsmn *p);
• Chức năng : sửa thông tin khách hàng tìm được trùng với mã vừa nhập
dsmn *sua1(dsmn *dauds,dsmn *p)
{
printf("SUA THONG TIN:");

Bộ môn Tin học -7-


Quản lý thuê bao điện thoại

printf("nhung thong tin ko muon sua ban hay an 0");


int i ,k,j,d ;long int sodt, t; char tg[30] ;
printf("\n So thue bao : "); scanf("%ld",&sodt); if(sodt!=0)p->ttin.sodt
= sodt;
fflush(stdin);
printf("\n - Ma khach hang :"); ff;gets(tg);
if(strcmp(tg,"0")!=0)strcpy(p->ttin.makh , tg) ;
printf("\n - Ten chu thue bao : ");ff;
gets(tg);chuanhoa1(tg);if(strcmp(tg,"0")!=0)strcpy(p->ttin.tenkh , tg) ;
printf("\n - Nghe nghiep : ");ff; gets(tg);chuanhoa2(tg);
if(strcmp(tg,"0")!=0)strcpy(p->ttin.job , tg) ;
printf("\n - Dia chi cua chu thue bao : ");
printf("\n + Xa/phuong/thi tran : ");ff;gets(tg);chuanhoa1(tg);
if(strcmp(tg,"0")!=0)strcpy(p->ttin.dchi.xa , tg) ;
printf("\n + Huyen / Thi xa : ");ff;gets(tg);chuanhoa1(tg);
if(strcmp(tg,"0")!=0)strcpy(p->ttin.dchi.huyen , tg) ;
printf("\n + Tinh / Thanh Pho : ");ff;gets(tg);chuanhoa1(tg);
if(strcmp(tg,"0")!=0)strcpy(p->ttin.dchi.tinh , tg) ;
printf("\n tinh trang thue bao : \n An 1 : Hoat dong binh thuong \n An 0 :
Dang tam ngung hoat dong ");
scanf("%d",&k);
if(k) p->ttin.pit = 1 ;
else p->ttin.pit = 0 ;
printf("\nsau khi sua\n");
innode(p->ttin);
return dauds;
}

dsmn *xoa1(dsmn *dauds,dsmn *p) ;


•chức năng : xóa toàn bộ thông tin khách hàng tìm được ra khỏi danh sách
dsmn *xoa1(dsmn *dauds,dsmn *p)
{
dsmn *temp;
if(p==dauds){ temp = dauds->next ;free(dauds); return temp;}
if(p->next==NULL)
for(dsmn *q=dauds;q->next==p;q=q->next)q->next=NULL;
for(dsmn *q=dauds;q;q=q->next)
if(q->next==p){q->next=p->next;break;}
free(p);
return dauds;
}

*Trong chương trình còn có những hàm phụ thường được sử dụng trong các
hàm chính và hàm hỗ trợ cho hàm chính như:

void chuanhoa1(char *s);//dùng để chuẩn hóa tên “nguyen tIen NghiA ”->
”Nguyen Tien Nghia”

void chuanhoa2(char *s);// dùng để chuẩn hóa nghề " nhan viEn kINh doanh " ->
"Nhan vien kinh doanh"

void chuanhoa3(char *s);//dùng để chuyển toàn bộ xâu thành chữ thường

void savefile(dsmn *dauds);//lưu những thay đổi vào file nguồn

void innode_chitiet(thongtin p);//in thông tin chi tiết của một khách hàng

Bộ môn Tin học -8-


Quản lý thuê bao điện thoại

void innode(thongtin p);//in thông tin của một khách hàng

dsmn *sapxep(dsmn *dauds);//sắp xếp danh sách theo thứ tự alphabetical

char *tach(char s[]);//tách tên

Để có giao diện hài hòa hơn trong bài chúng tôi có sử dụng thêm 2 lệnh
trong DOS la “cls” và “color --” bằng cách sử dụng cấu trúc
system(“lệnh_trong_dos”);

IV – Hạn Chế Của Toàn Bộ Chương Trình

Do toàn bộ chương trình được làm trên danh sách moc nối và hàng đợi.Do
đó khi thực hiện hàm tìm kiếm thì sẽ không đạt được hiệu quả như làm với dữ
liệu được lưu trên cây nhị phân.
Tình thực dụng của chương trình chưa cao.

V – Hướng phát triển và mở rộng


+ Đưa toàn bộ dữ liệu vào cây nhị phân
+ Tạo project cho toàn bộ chương trình

The end

Bộ môn Tin học -9-

You might also like