By GokiSoft.com|
19:28 03/11/2020|
Lập Trình C
[Share Code] Quản lý tranh - quản lý gallery - Lập trình C - 2020-11-03
Phat trien du an : Quan ly tranh
Cách làm: Làm từng bước, từ trên xuống dưới
1.Dữ liệu
2.Tao menu chuong trinh => OK
3.Nhap thong tin tranh theu
- Chu y: de tranh TH ko nhap dc string (mang char)=>
fflush(stdin);fflush(stdout);
4.Sap xep, thong ke, hien thi
- Chung ta co the su dung 3 function khac nhau de giai quyet yeu cau nay
- sapxep + thongke + hienthi
#include <stdio.h>
#include <stdlib.h>
/* run this program using the console pauser or add your own getch, system("pause") or input loop */
typedef struct tranhtheu_st {
char ten[30], tacgia[30];
int chieudai, chieurong, giaban;
} tranhtheu;
void showMenu();
void input(tranhtheu *p);
void sort(tranhtheu *p);
void statistic(tranhtheu *p);
void display(tranhtheu *p);
//Cach don gian trong lap trinh
//return : 0 -> size nho
// 1 -> size Trung Binh
// 2 -> size LON
int checkSize(int dt);
void search(tranhtheu *p);
void showHeader();
void showFooter();
void saveFile(tranhtheu *p);
void readFile(tranhtheu *p);
int main(int argc, char *argv[]) {
tranhtheu dsTranh[3];
int choose;
do {
showMenu();
scanf("%d", &choose);
switch(choose) {
case 1:
input(dsTranh);
break;
case 2:
sort(dsTranh);
display(dsTranh);
statistic(dsTranh);
break;
case 3:
search(dsTranh);
break;
case 4:
saveFile(dsTranh);
break;
case 5:
readFile(dsTranh);
break;
case 6:
printf("\nThoat!!! byebye ...");
break;
default:
printf("\nNhap lai!!!");
break;
}
} while(choose != 6);
return 0;
}
void showMenu() {
printf("\n1.Nhap danh sach tranh");
printf("\n2. Sap xep, thong ke, hien thi");
printf("\n3. Tim buc tranh theo gia ban");
printf("\n4. Ghi vao file tranhtheu.dat");
printf("\n5. Doc du lieu tu file tranhtheu.dat");
printf("\n6. Thoat");
printf("\nChoose: ");
}
void input(tranhtheu *p) {
//Nhap thong tin tranh theu
int i;//bien su dung cho loop >> for
for(i=0;i<3;i++) {
printf("\nNhap thong tin buc tranh so : %d", i + 1);
printf("\nTen: ");
fflush(stdin);fflush(stdout);
gets(p[i].ten);
printf("\nTac gia: ");
fflush(stdin);fflush(stdout);
gets(p[i].tacgia);
printf("\nChieu dai: ");
fflush(stdin);fflush(stdout);
scanf("%d", &p[i].chieudai);
printf("\nChieu rong: ");
fflush(stdin);fflush(stdout);
scanf("%d", &p[i].chieurong);
printf("\nGia ban: ");
fflush(stdin);fflush(stdout);
scanf("%d", &p[i].giaban);
}
}
void sort(tranhtheu *p) {
int i, j;//su dung trong vong lap >> for
int s1, s2;
for(i=0;i<2;i++) {
//so sanh dien tich tai vi tri i vs cac vi tri j
//=> hoan doi vi tri dien tich max ve vi tri i
//dien tich i
s1 = p[i].chieudai * p[i].chieurong;
for(j=i+1;j<3;j++) {
//tinh dien tich vi tri j
s2 = p[j].chieudai * p[j].chieurong;
//so sanh dien tich tai vi tri i & j
//do sap xep giam dan
if(s1 < s2) {
//doi cho vi tri cua i & j
tranhtheu tmp = p[i];
p[i] = p[j];
p[j] = tmp;
}
}
}
}
void statistic(tranhtheu *p) {
//Tai moi vi tri cua mang p => 1 kho LON, TRUNG BINH, NHO
//Y tuong: Su dung 1 mang count[3] => khoi tao gia tri bang 1
//Y nghia: Tai moi vi tri se la 1 kho.
int count[3];
//khoi tao du lieu
int i;
for(i=0;i<3;i++) {
count[i] = 1;
}
//Bai toan: Dem so lan xuat hien cua kho LON, TRUNG BINH, NHO trong mang p
//Giai thuat nhu sau:
//Don mang du lieu cua count => vi tri dau tien se luu tong so kho LON, TRUNG BINH, NHO
//Vi tri sau => khi kiem tra trung => reset ve 0
int j;
int s1, s2, size1, size2;
for(i=0;i<2;i++) {
//Kiem tra neu count[i] = 0 => khong can kiem tra vi tri nay nua
//Da dc su dung cho lan truoc roi
if(count[i] == 0) continue;
//Lay dc ten kho tai vi tri i.
//Su dung 1 function => kiem tra ten kho.
s1 = p[i].chieudai * p[i].chieurong;
//size i
size1 = checkSize(s1);
for(j=i+1;j<3;j++) {
//kiem tra count[j] == 0 => ko can kiem tra nua
if(count[j] == 0) continue;
s2 = p[j].chieudai * p[j].chieurong;
size2 = checkSize(s2);
if(size1 == size2) {
count[i]++;
count[j]--;
}
}
}
//Hien thi du lieu thong ke
for(i=0;i<3;i++) {
if(count[i] > 0) {
//Hien thi du lieu
s1 = p[i].chieudai * p[i].chieurong;
size1 = checkSize(s1);
switch(size1) {
case 0:
printf("\n+ Kho nho co %d buc tranh", count[i]);
break;
case 1:
printf("\n+ Kho trung binh co %d buc tranh", count[i]);
break;
case 2:
printf("\n+ Kho lon co %d buc tranh", count[i]);
break;
}
}
}
}
int checkSize(int dt) {
if(dt >= 10000) {
return 2;
}
if(dt >= 2000) {
return 1;
}
return 0;
}
void display(tranhtheu *p) {
int i, s, size;
showHeader();
for(i=0;i<3;i++) {
s = p[i].chieudai * p[i].chieurong;
size = checkSize(s);
switch(size) {
case 0:
printf("\n%5d||%15s||%10s||%5d||%5d||%5d||%10s",
i+1, p[i].ten, p[i].tacgia, p[i].chieudai, p[i].chieurong,p[i].giaban, "Nho");
break;
case 1:
printf("\n%5d||%15s||%10s||%5d||%5d||%5d||%10s",
i+1, p[i].ten, p[i].tacgia, p[i].chieudai, p[i].chieurong,p[i].giaban, "Trung Binh");
break;
case 2:
printf("\n%5d||%15s||%10s||%5d||%5d||%5d||%10s",
i+1, p[i].ten, p[i].tacgia, p[i].chieudai, p[i].chieurong,p[i].giaban, "Lon");
break;
}
}
showFooter();
}
void showHeader() {
int i;
printf("\n");
for(i=0;i<67;i++) {
printf("-");
}
printf("\nDanh sach tranh");
printf("\n");
for(i=0;i<67;i++) {
printf("-");
}
printf("\n%5s||%15s||%10s||%5s||%5s||%5s||%10s", "STT", "Ten", "Tac Gia", "Dai", "Rong","Gia Tien", "Kho");
}
void showFooter() {
int i;
printf("\n");
for(i=0;i<67;i++) {
printf("-");
}
}
void search(tranhtheu *p) {
int i, s, size;
int price, count = 0;//deu so phan tu tim dc
printf("\nNhap gia ban toi da: ");
scanf("%d", &price);
for(i=0;i<3;i++) {
if(price >= p[i].giaban) {
//Tim thay
if(count == 0) {
//Hien thi header
showHeader();
}
count++;
s = p[i].chieudai * p[i].chieurong;
size = checkSize(s);
switch(size) {
case 0:
printf("\n%5d||%15s||%10s||%5d||%5d||%5d||%10s",
i+1, p[i].ten, p[i].tacgia, p[i].chieudai, p[i].chieurong,p[i].giaban, "Nho");
break;
case 1:
printf("\n%5d||%15s||%10s||%5d||%5d||%5d||%10s",
i+1, p[i].ten, p[i].tacgia, p[i].chieudai, p[i].chieurong,p[i].giaban, "Trung Binh");
break;
case 2:
printf("\n%5d||%15s||%10s||%5d||%5d||%5d||%10s",
i+1, p[i].ten, p[i].tacgia, p[i].chieudai, p[i].chieurong,p[i].giaban, "Lon");
break;
}
}
}
if(count > 0) {
showFooter();
} else {
printf("\nKhong co buc tranh nao ban voi gia nhu vay");
}
}
void saveFile(tranhtheu *p) {
//Mo ket noi toi file => chuan bi ghi du lieu
FILE *fp = fopen("tranhtheu.dat", "wb");
//Ghi du lieu
fwrite(p, sizeof(tranhtheu), 3, fp);
//Dong ket noi
fclose(fp);
}
void readFile(tranhtheu *p) {
//Mo ket noi toi file => chuan bi ghi du lieu
FILE *fp = fopen("tranhtheu.dat", "rb");
//Doc du lieu
fread(p, sizeof(tranhtheu), 3, fp);
//Dong ket noi
fclose(fp);
}
Tags:
Phản hồi từ học viên
5
(Dựa trên đánh giá ngày hôm nay)