Tải bản đầy đủ (.docx) (38 trang)

Đồ án giải thuật và lập trình đề tài quản lý vật tư

Bạn đang xem bản rút gọn của tài liệu. Xem và tải ngay bản đầy đủ của tài liệu tại đây (1003.47 KB, 38 trang )

Đồ án: Giải thuật và Lập trình

LỜI NÓI ĐẦU
Ngày nay tin học đã trở thành một ngành khoa học cực kì quan trọng trong cuộc
sống hiện đại, có thể nói mọi ngành khoa học khác đều cần sự trợ giúp của máy vi tính,
ngược lại tin học cũng liên quan đến nhiều ngành. Do đó việc học tập và nghiên cứu về
tin học cũng trở nên hết sức cần thiết và tất yếu với tất cả mọi người .
Trong đó môn học Phân tích và Thiết kế giải thuật giúp sinh viên hiểu được tầm
quan trọng của giải thuật và cách tổ chức dữ liệu để giải những bài toán được đặt ra cho
ngành Công nghệ thông tin. Môn học được xem là nền tảng cơ bản của chương trình đào
tạo kĩ sư Công nghệ thông tin nói riêng và các bậc đào tạo khác nói chung .
Sau một thời gian học tập, nghiên cứu các môn Cấu trúc dữ liệu và môn Phân tích
& Thiết kế giải thuật nhóm chúng em được giao thực hiện đề tài : Xây dựng chương trình
“Quản lý vật tư “
Trong quá trình thực hiện đồ án chúng em đã nhận được sự hướng dẫn tận tình của
cô Đỗ Thị Tuyết Hoa và các thầy cô khác trong khoa Công nghệ thông tin , tuy nhiên do
trình độ còn hạn chế nên trong việc thực đề tài sẽ không tránh khỏi sai sót. Chúng em
mong nhận được sự góp ý của thầy cô để đề tài này được hoàn thiện hơn .

Chúng em xin chân thành cảm ơn!

Page 1


Đồ án: Giải thuật và Lập trình

ĐỀ BÀI
Viết chương trình quản lý đọc dữ liệu từ file văn bản có lưu trữ khoảng 10-20 mẫu tin
(record) và lưu vào mảng 1 chiều. Sau đó thực hiện các chức năng sau:
+ In danh sách các thông tin của tất cả các đối tượng.
+ Bổ sung thêm 1 đối tượng vào danh sách.


+ Tìm kiếm mẫu tin theo các tiêu chí khác nhau và hiển thị mẫu tin đó
+ Sắp xếp theo thứ tự tăng dần/ giảm dần
+ Chèn mẫu tin sao cho mảng vẫn được sắp theo thứ tự
+ Xóa 1 mẫu tin

Đề tài 2 “ Quản lý vật tư ”:
Thông tin quản lý vật tư gồm : Mã vật tư, tên vật tư, loại vật tư, đơn vị tính, ngày nhập
( ngày, tháng, năm), số lượng, đơn giá, thành tiền. Bổ sung các chức năng sau:
+Xóa các vật tư có số lượng lớn hơn 100.
+Tính thành tiền (TT) = số lượng* đơn giá và được giảm theo quy ước:
Giảm =
+In ra bảng thống kê theo loại vật tư gồm các cột: loại vật tư, số lượng, tổng tiền .

MỤC LỤC
Page 2


Đồ án: Giải thuật và Lập trình

LỜI NÓI ĐẦU……..…………………………………………….…………………………1
ĐỀ BÀI…………….………….………………………………………….………..2
MỤC LỤC………….………….…………………………………………….…….3
I.GIỚI THIỆU………………..…………………………………………….……...4
II.CẤU TRÚC DỮ LIỆU……..…….………………………………………….….4
III.THUẬT TOÁN……………………….…………………………………………4
IV.ĐÁNH GIÁ ĐỘ PHỨC TẠP CỦA THUẬT TOÁN………..………………….9
V.KẾT QUẢ CHƯƠNG TRÌNH……………………………...………………….10
VI.KẾT LUẬN……………………………………………………………………15
VII.PHỤ LỤC…………………………………………………………………….15
CÁC NGUỒN THAM KHẢO………………..……………….………………….37


I. GIỚI THIỆU:
Page 3


Đồ án: Giải thuật và Lập trình
Trong xây dựng , vật tư và quản lý vật tư hết sức quan trọng , với những công trình
lớn số lượng vật tư rất nhiều, việc quản lý bằng thủ công có những nhược điểm nhất
định , chính vì vậy yêu cầu đặt ra cho lập trình viên đó là xây dựng một chương trình
quản lý trên máy tính, chương trình này sẽ bao gồm có những công việc như : in thông tin
vật tư ra màn hình, bổ sung thêm vật tư vào danh sách, tìm kiếm vật tư theo tên, theo
ngày tháng năm nhập kho, sắp xếp theo thứ tự tăng dần, giảm dần… với những tính năng
trên người sử dụng chỉ cần đưa dữ liệu vào và chọn vào các menu công việc cần thiết,
thuật toán sẽ tự động xử lý cho ra các kết quả nhanh chóng, chính xác hỗ trợ tốt hơn cho
công việc .

II.CẤU TRÚC DỮ LIỆU:
Dữ liệu được lưu trong file .txt, khi chạy chương trình sẽ tự động chuyển dữ liệu
trong file vào 1 danh sách liên kết, để thuận tiện cho các thao tác với dữ liệu,
typedef char if1[5], if2[10], if3[30], if4[12], if5[12], if6[30];
typedef long if7,if8;
struct element
{
if1 ma;
if2 ten;
if3 loai;
if4 donvi;
if5 ngay;
if6 hang;
if7 sluong;

if8 dongia;
};
typedef element ds[100];
ds a;

III.THUẬT TOÁN:
Page 4


Đồ án: Giải thuật và Lập trình
Trong chương trình cho phép thực hiện các công việc như sau:
1.Hiển thị thông tin tất cả các vật tư.
2.Bổ sung thêm một đối tượng .
3.Tìm kiếm theo tên vật tư, mã vật tư, ngày nhập.
4.Sắp xếp theo thứ tự tăng dần, giảm dần theo số lượng.
5.Chèn thêm thông tin của một vật tư mới.
6.Xóa một mẫu tin.
7.Xóa vật tư có số lượng >100
8.Tính thành tiền của các loại vật tư.
9.In bản thống kê.
Để thực hiện tiến hành xây dựng các hàm :
Int dem(FILE *f) để đếm số loại vật tư trong file f.
 Khai báo biến line[100], biến đếm d=0 kiểu int.;
 While(fgets(line,100,f) !=NULL) thì tăng d lên 1;
 Trả về giá trị d;
• Void luuvaomang(FILE *f, int &n) để lưu dữ liệu trong file vào mảng a.
 Khai báo biến I kiểu int;
 Cho i=0 đến n-1
Đọc giá trị trong file và lần lượt lưu vào a[i].ma, a[i].ten,
a[i].loại, a[i].donvi, a[i].ngay, a[i].hang, a[i].sluong và

a[i].dongia.
• Void luuvaofile(ds a, int n) để lưu giá trị hiện có trong mảng a vào file f.
 Khai báo biến I kiểu int;
 Khai báo biến s kiểu FILE, và mở file input.txt để ghi dữ liệu;
 Cho i=0 đến n-1
Ghi lần lượt các giá trị a[i].ma, a[i].ten, a[i].loại, a[i].donvi,
a[i].ngay, a[i].hang, a[i].sluong và a[i].dongia vào file.
 Đóng file;
• Void hienthi(ds a, int n) để hiển thị dữ liệu lưu ở mảng a ra màn hình.
 Khai báo biến I;
 Cho i=0 đến n-1
In ra màn hình giá trị a[i].ma, a[i].ten, a[i].loại, a[i].donvi,
a[i].ngay, a[i].hang, a[i].sluong và a[i].dongia.


Page 5


Đồ án: Giải thuật và Lập trình










Void them(ds &a, int &n) để thêm 1 vật tư vào danh sách.

 Khai báo các biến i=n, x,y,z, mảng y[13] kiểu int, biến sl,dg kiểu
long, s kiểu if5;
 n=n+1;
 Nhập mã và lưu vào a[i].ma;
 Nhập tên và lưu vào a[i].ten;
 Nhập loại và lưu vào a[i].loai;
 Nhập đơn vị và lưu vào a[i].donvi;
 Nhập ngày
Chừng nào ngày nhập vào hợp lệ thì lưu ngày nhập vào
a[i].ngay, không thì bắt nhập lại.
 Nhập nhà sản xuất và lưu vào a[i].hang;
 Nhập số lượng, nếu số lượng nhỏ hơn 1 thì bắt nhập lại số lượng;
 Nhập đơn giá, nếu đơn giá nhỏ hơn 1 thì bắt nhập lại đơn giá;
Void timkiemngay(ds a, int n) để tìm kiếm vật tư có ngày nhập cần tìm.
 Khai báo s kiểu if5, các biến i, d=0, x, y, z, ngay[13] kiểu int;
 Nhập ngày cần tìm kiếm
Kiểm tra xem ngày nhập vào có hợp lệ hay ko, nếu không thì
nhập lại;
 Cho i=0 đến n-1: nếu a[i].ngay trùng với s thì d=1;
 Nếu d=0 thì in ra màn hình thông báo “ không có dữ liệu”
Ngược lại
Cho i=0 đến n-1, nếu a[i].ngày trùng với s thì in ra
thông tin của vật tư i;
Void timkiemten(ds a, int n) để tìm kiếm vật tư có tên cần tìm.
 Khai báo x kiểu if2, biến i, d=0 kiểu int;
 Nhập tên cần tìm kiếm;
 Cho i=0 đến n-1 nếu a[i].ten trùng với x thì d=1;
 Nếu d=0 thì in ra thông báo không tìm thấy dữ liệu
Ngược lại: cho i=0 đến n-1, nếu a[i] trùng với x thì in ra
thông tin của vật tư thứ I;

Void timkiemma(ds a, int n) để tìm kiếm vật tư có mã cần tìm.
 Khai bái x kiểu if1, i, d=0 kiểu int;
 Nhập mã cần tìm;
 Cho i-0 đến n-1, nếu a[i].ma trùng với x thì d=1;
 Nếu d=0 thì in ra thông báo “không có dữu liệu”
Ngược lại cho i=0 đến n-1 nếu a[i].ma trung với x thì in ra
thông tin của vật tư tại i;
Void sapxeptang(ds &a, int n) để sắp xếp vật tư theo số lượng tăng dần
 Khai báo biến i, j kiểu int; các biến t1,t2,…t7 ứng với kiểu fi1, if2…
if7 ;
Page 6


Đồ án: Giải thuật và Lập trình
Cho i=0 đến i=n-1
Cho j=i+1 đến n-1
Nếu a[i].sluong>a[j].sluong thì hoán đổi dữ liệu giữa
a[i] và a[j];
• Void sapxepgiam(ds &a, int n) để sắp xếp vật tư theo số lượng giảm dần
 Khai báo biến i, j kiểu int; các biến t1,t2,…t7 ứng với kiểu fi1, if2…
if7 ;
 Cho i=0 đến i=n-1
Cho j=i+1 đến n-1
Nếu a[i].sluonga[i] và a[j];


+ Void xoamautin(ds &a, int &n) để xóa 1 mẫu tin cần xóa.
Khai báo biến x kiểu if1 ; i=0,j=0,m=0 kiểu int ; b kiểu ds;
Nhập mã vật tư cần xóa;

Cho i=0 đến n-1 nếu a[i].ma trùng với x thì :
b[j]=a[i];
j++;
m++;
 Nếu m=n thì in ra thông báo “mã vật tư ko có trong danh sách”;
Ngược lại
n=m;
Cho i=0 đến n-1 a[i]=b[i];
• Void xoavattu100(ds &a, int &n) để xóa vật tư có số lượng lớn hơn 100.
 Khai báo i,j,d=0 kiểu int, biến b kiểu ds;
 Cho i=0 đến n -1
Nếu a[i].sluong >100
Cho j=0 đến n-1: a[j-1]=a[j];
n--;
i--;
• Void thanhtien(ds a, int n) để tính tổng tiền của tất cả vật tư và in ra màn hình.
 Khai báo i kiểu int; tien, t=0 kiểu long;
 Cho i=0 đến n-1
Nếu a[i]>200 : tien=3*a[i].sluong*a[i].dongia/4 ;
Ngược lại:
Nếu 100< a[i].sluong =<200:
tien=9*a[i].sluong*a[i]dongia /10 ;
Ngược lại:
tien =a[i].sluong*a[i].dongia;
In ra thông tin và giá của vật tư tai i;
t=t+tien;





Page 7


Đồ án: Giải thuật và Lập trình



In tổng tiền ra màn hình.

Void thongke(ds a, int n) để In ra bảng thống kê theo loại vật tư gồm các cột: loại
vật tư, số lượng, tổng tiền.
 Khai báo i,j,k,m kiểu int; tien,sluong, t kiểu long; t=0;
 Cho i=0 đến n-1 :
Nếu a[i].sluong<200: tien=3*a[i].sluong*a[i].dongia/4 ;
Ngược lại:
Nếu 100tien=9*a[i].sluong*a[i].dongia/10;

Ngược lại:
Tien=a[i].sluong*a[i].dongia;
sluong=a[i].sluong;
Cho j=i+1 đến n:
Nếu strcmp(a[i].loai,a[j].loai)==0
Nếu a[j].sluong>200:
tien =tien + 3*a[j].sluong*a[j].dongia/4;
Ngược lại: nếu 100tien=tien+9*a[j].sluong*a[j].dongia/4;
Ngược lại:
Tien=tien+a[i].sluong*a[i].dongia ;
n--;

Cho k=j đến n-1: a[k]=a[k+1];
In ra thông tin của loại vật tư thứ i;
t=t+tien;


In tổng tiền.
Page 8


Đồ án: Giải thuật và Lập trình



Void menu() in ra danh sách các lựa chọn.
Main()
 Khai báo x, n kiểu int;
 Mở file input.txt để đọc ;
 n=dem(f) ;
 Nhập dữ liệu tư file vào mảng a ;
 While (1)
In ra danh sach lựa chọn;
Kiểm tra giá trị nhập vào, nếu ko hợp lệ thì bắt nhập lại;
Switch(x)
1: Hiển thị danh sách vật tư;
2: Bổ sung đối tượng vào danh sách;
3: Tìm kiếm theo tên vật tư;
4: Tìm kiếm theo mã vật tư;
5: Tìm kiếm theo ngày nhập;
6: Sắp xếp tăng dần theo số lượng;
7: Sắp xếp giảm dần về số lượng;

8: Chèn vào 1 vật tư và sắp xếp;
9: Xóa 1 vật tư;
10: Xóa vật tư có số lượng >100;
11: Thành tiền;
12: Liệt kê loại vật tư;

IV.ĐÁNH GIÁ ĐỘ PHỨC TẠP CỦA THUẬT TOÁN
Hàm Int dem(FILE *f) có T(n)=O(n)
Hàm void luuvaomang( FILE *f, int &n) có T(n)=O(n)
Hàm void luuvaofile(ds a,int n) có T(n)=O(n)
Hàm void hienthi(ds a, int n ) có T(n)=O(n)
Hàm void them(ds &a, int &n) có T(n)=O(1)
Hàm void timkiemngay(ds a, int n ) có T(n)=O(n)
Hàm void timkiemten(ds a, int n) có T(n)=O(n)
Hàm void timkiemma(ds a, int n) có T(n)=O(n)
Hàm void sapxeptang(ds &a, int n) có T(n)=O(n2)
Hàm void sapxepgiam(ds &a, int n) có T(n)=O(n2)
Page 9


Đồ án: Giải thuật và Lập trình
Hàm void xoamautin(ds &a, int &n) có T(n)=O(n)
Hàm void xoavattu100(ds &a, int &n) có T(n)=O(n2)
Hàm void thanhtien(ds a, int n) có T(n)=O(n)
Hàm void thongke(ds a, int n) có T(n)=O(n3)
Hàm voidmenu() có T(n) = O(1)

V.KẾT QUẢ CHƯƠNG TRÌNH:
File input.txt:


Giao diện chính:

Page 10


Đồ án: Giải thuật và Lập trình
In danh sách các loại vật tư:

Thêm 1 vật tư vào danh sách:

Tìm kiếm theo tên:

Page 11


Đồ án: Giải thuật và Lập trình

Tìm kiếm theo mã vật tư:

Tìm kiếm theo ngày nhập:

Page 12


Đồ án: Giải thuật và Lập trình
Sắp xếp tăng dần về số lượng:

Sắp xếp giảm dần về số lượng:

Xóa vật tư có Sl>100:


Page 13


Đồ án: Giải thuật và Lập trình
Chèn 1 mẫu tin và sắp xếp:

Thành tiền:

Page 14


Đồ án: Giải thuật và Lập trình
In danh sách theo loại vật tư:

VI.KẾT LUẬN:
Cùng với một yêu cầu đề bài, có thể kết hợp thêm thuật toán khác như Danh sách liên
kết để thực hiện, lúc này độ phức tạp sẽ cao hơn .Tuy nhiên mỗi thuật toán sẽ có các ưu,
nhược điểm riêng .
Việc sử dụng ngôn ngữ C cơ bản( ở đây là làm việc với mảng) sẽ giúp khai thác tối đa
khả năng lập trình , tốc độ truy nhập đến một vị trí bất kỳ trên mảng nhanh, hiệu quả. Và
vì đọc dữ liệu từ file nên trong trường hợp này việc sử dụng mảng sẽ thuận lợi hơn do
thuật toán đã quét và xác định được số phần tử của mảng .
Nhưng bên cạnh đó cũng có nhiều mặt hạn chế, trong quá trình chèn xóa phần tử diễn
ra liên tục, tốc độ xử lý sẽ rất chậm và các thuật toán này sẽ không phù hợp với các bài
toán chưa biết số lượng các phần tử , trái ngược với Danh sách liên kết đó là khả năng
dùng tới đâu thì cấp phát bộ nhớ tới đó .

Page 15



Đồ án: Giải thuật và Lập trình

VII.PHỤ LỤC:
Chương trình nguồn:
#include<stdio.h>
#include<conio.h>
#include<string.h>
typedef char if1[5], if2[10], if3[30], if4[12], if5[12], if6[30];
typedef long if7,if8;
struct element
{
if1 ma;
if2 ten;
if3 loai;
if4 donvi;
if5 ngay;
if6 hang;
if7 sluong;
if8 dongia;
};
typedef element ds[100];
ds a;
int dem(FILE *f)
{
int d=0;
char line[100];
Page 16



Đồ án: Giải thuật và Lập trình
while(fgets(line,100,f) != NULL)
{
d++;
}
return d;
}
void luuvaomang( FILE *f, int &n)
{
int i;
for(i=0;i{
fscanf(f,"%s",&a[i].ma);
fscanf(f,"%s",&a[i].ten);
fscanf(f,"%s",&a[i].loai);
fscanf(f,"%s",&a[i].donvi);
fscanf(f,"%s",&a[i].ngay);
fscanf(f,"%s",&a[i].hang);
fscanf(f,"%ld",&a[i].sluong);
fscanf(f,"%ld",&a[i].dongia);
}
}
void luuvaofile(ds a,int n)
{
int i;
Page 17


Đồ án: Giải thuật và Lập trình
FILE *s=fopen("input.txt","w");

for(i=0;i{
fprintf(s,"%s %s %s %s %s %s %ld
%ld\n",a[i].ma,a[i].ten,a[i].loai,a[i].donvi,a[i].ngay,a[i].hang,a[i].sluong,a[i].dongia);
}
fclose(s);
}
void hienthi(ds a, int n )
{
int i;
printf("\nDanh sach:\n");
printf("==========================================================
===================\n");
printf("| Ma | Ten vl | Loai vl |Don vi| Ngay nhap | Nha SX | SL | Don
gia|\n");
printf("==========================================================
===================\n");
for(i=0;i{
printf("|%2s | %6s | %13s|%6s|%11s| %10s|%6d|
%7d|\n",a[i].ma,a[i].ten,a[i].loai,a[i].donvi,a[i].ngay,a[i].hang,a[i].sluong,a[i].dongia);
}

Page 18


Đồ án: Giải thuật và Lập trình
printf("==========================================================
===================\n");
}

void them(ds &a, int &n)
{
int i=n,x,y,z,ngay[13]={0,31,29,31,30,31,30,31,31,30,31,30,31};
n=n+1;
long sl,dg;
if5 s;
printf("Nhap ma: ");
fflush(stdin);
gets(a[i].ma);
printf("Nhap ten: ");
gets(a[i].ten);
printf("Nhap loai: ");
gets(a[i].loai);
printf("Nhap don vi: ");
gets(a[i].donvi);
printf("Nhap ngay: ");
gets(s);
x=(s[0]-48)*10+s[1]-48;
y=(s[3]-48)*10+s[4]-48;
z=(s[6]-48)*1000+(s[7]-48)*100+(s[8]-48)*10+(s[9]-48);
if((z%4==0 && z%100!=0 )|| (z%400 ==0)) ngay[2]=29;
Page 19


Đồ án: Giải thuật và Lập trình
while((x<1)||(x>31)||(y<1)||(y>12)||(z<1990)||(z>2015)||(x>ngay[y]))
{
printf("Loi !!!. Nhap lai:");
gets(s);
x=(s[0]-48)*10+s[1]-48;

y=(s[3]-48)*10+s[4]-48;
z=(s[6]-48)*1000+(s[7]-48)*100+(s[8]-48)*10+(s[9]-48);
if((z%4==0 && z%100!=0 )|| (z%400 ==0)) ngay[2]=29;
}
strcpy(a[i].ngay,s);
printf("Nhap nha SX: ");
gets(a[i].hang);
printf("Nhap So luong: ");
scanf("%ld",&sl);
while(sl<1)
{
printf("Loi !!!. Nhap Lai So luong: ");
scanf("%ld",&sl);
}
a[i].sluong=sl;
printf("Nhap don gia: ");
scanf("%ld",&dg);
while(dg<1)
{
Page 20


Đồ án: Giải thuật và Lập trình
printf("Loi !!!. Nhap Lai don gia : ");
scanf("%ld",&dg);
}
a[i].dongia=dg;
}
void timkiemngay(ds a, int n )
{

if5 s;
int i,d=0,x,y,z,ngay[13]={0,31,28,31,30,31,30,31,31,30,31,30,31};
printf("Nhap ngay thang can tim kiem: ");
fflush(stdin);
gets(s);
x=(s[0]-48)*10+s[1]-48;
y=(s[3]-48)*10+s[4]-48;
z=(s[6]-48)*1000+(s[7]-48)*100+(s[8]-48)*10+(s[9]-48);
if((z%4==0 && z%100!=0 )|| (z%400 ==0)) ngay[2]=29;
while((x<1)||(x>31)||(y<1)||(y>12)||(z<1990)||(z>2015)||(x>ngay[y]))
{
printf("Loi !!!. Nhap lai: ");
gets(s);
x=(s[0]-48)*10+s[1]-48;
y=(s[3]-48)*10+s[4]-48;
z=(s[6]-48)*1000+(s[7]-48)*100+(s[8]-48)*10+(s[9]-48);
if((z%4==0 && z%100!=0) || (z%400 ==0)) ngay[2]=29;
Page 21


Đồ án: Giải thuật và Lập trình
}
printf("\nKet qua:\n");
for(i=0;iif(d==0) printf("

Khong co du lieu!! \n");

else
{

printf("==========================================================
===================\n");
printf("| Ma | Ten vl | Loai vl |Don vi| Ngay nhap | Nha SX | SL | Don
gia|\n");
printf("==========================================================
===================\n");
for(i=0;i{
if (strcmp(a[i].ngay,s)==0)
{
d=1;
printf("|%2s | %6s | %13s|%6s|%11s| %10s|%6d|
%7d|\n",a[i].ma,a[i].ten,a[i].loai,a[i].donvi,a[i].ngay,a[i].hang,a[i].sluong,a[i].dongia);
}
}
}
}
void timkiemten(ds a, int n)
Page 22


Đồ án: Giải thuật và Lập trình
{
if2 x;
int i,d=0;
printf("Nhap ten can tim kiem: ");
fflush(stdin);
gets(x);
printf("\nKet qua:\n");
for(i=0;i

if(d==0) printf("

Khong co du lieu!! \n");

else
{
printf("==========================================================
===================\n");
printf("| Ma | Ten vl | Loai vl |Don vi| Ngay nhap | Nha SX | SL | Don
gia|\n");
printf("==========================================================
===================\n");
for(i=0;i{
if (strcmp(a[i].ten,x)==0)
{
d=1;
printf("|%2s | %6s | %13s|%6s|%11s| %10s|%6d|
%7d|\n",a[i].ma,a[i].ten,a[i].loai,a[i].donvi,a[i].ngay,a[i].hang,a[i].sluong,a[i].dongia);
Page 23


Đồ án: Giải thuật và Lập trình
}
}
}
}
void timkiemma(ds a, int n)
{
if1 x;

int i,d=0;
printf("Nhap ma can tim kiem: ");
fflush(stdin);
gets(x);
printf("\nKet qua:\n");
for(i=0;iif(d==0) printf("

Khong co du lieu!! \n");

else
{
printf("==========================================================
===================\n");
printf("| Ma | Ten vl | Loai vl |Don vi| Ngay nhap | Nha SX | SL | Don
gia|\n");
printf("==========================================================
===================\n");
for(i=0;i{
Page 24


Đồ án: Giải thuật và Lập trình
if (strcmp(a[i].ma,x)==0)
{
d=1;
printf("|%2s | %6s | %13s|%6s|%11s| %10s|%6d|
%7d|\n",a[i].ma,a[i].ten,a[i].loai,a[i].donvi,a[i].ngay,a[i].hang,a[i].sluong,a[i].dongia);
}

}
}
}
void sapxeptang(ds &a, int n)
{
int i,j;
if1 t1;if2 t2; if3 t3; if4 t4; if5 t5; if6 t6; if7 t7;
for(i=0;i{
for(j=i+1;jif (a[i].sluong>a[j].sluong)
{
strcpy(t1,a[i].ma);
strcpy(a[i].ma,a[j].ma);
strcpy(a[j].ma,t1);
strcpy(t2,a[i].ten);
strcpy(a[i].ten,a[j].ten);
strcpy(a[j].ten,t2);
Page 25


×