01/10/2018, 13:33

Đề thi cuối kỳ c++ ptit

Khai báo lớp Người (Họ tên, Địa chỉ, Số ĐT)
Khai báo lớp Nhân viên bán hàng kế thừa từ lớp Người và có thêm (mã NV, ngày ký hợp đồng), mã NV là một số nguyên có 4 chữ số, tự động tăng.
Khai báo lớp Mặt hàng trong kho gồm các thuộc tính (mã hàng, Tên hàng, Nhóm hàng, Giá bán, Số lượng) – trong đó Nhóm hàng có thể là: Điện tử, Điện lạnh, Máy tính, Thiết bị văn phòng. Mã hàng là một số nguyên có 4 chữ số, tự động tăng.
Khai báo lớp Bảng Danh sách bán hàng (trong một ngày) là bạn của lớp Nhân viên và lớp Mặt hàng trong đó với mỗi nhân viên, nhập danh sách các mặt hàng mà nhân viên đó đã bán được. Giả sử mỗi nhân viên chỉ tham gia bán tối đa 5 mặt hàng khác nhau.
Viết chương trình trong ngôn ngữ C++ thực hiện các yêu cầu sau:
1. Nhập thêm mặt hàng mới vào file MH.DAT. In ra danh sách các mặt hàng đã có trong file.
2. Nhập thêm nhân viên vào file NV.DAT. In ra danh sách nhân viên đã có trong file.
3. Lập Bảng danh sách bán hàng cho từng nhân viên, lưu vào file QLBH.DAT và in danh sách ra màn hình (chú ý: cùng một nhân viên với một mặt hàng thì không thể xuất hiện 2 lần trong bảng này).
4. Sắp xếp danh sách Bảng danh sách bán hàng đã lưu trong QLBH.DAT
a. Theo tên nhân viên
b. Theo nhóm mặt hàng
5. Lập bảng kê doanh thu cho mỗi nhân viên

Mình đang dừng đến phần 4: sắp xếp bang ds bán hàng, bị lỗi sau khi xuất ra ds bql sau khi sắp xếp bql theo tên (a problem caused the program to stop working correctly), còn phần 4b thì vẫn sx bình thường. Mình nghi lỗi ở đâu đó trong hàm void nv5(), các bạn check giúp mình với (bài này có phần vào ra file nhưng k phải làm)

#include<iostream>
#include<string.h>
using namespace std;
int pc=100;
int cc=100;
class Nguoi{
	protected:
		char hoten[50]; 
		string diachi,sdt;
	public:
		Nguoi(){
			diachi="",sdt="";
		}
};
class Nhanvien: public Nguoi{
	int manv;
	string ngaykyhd;
	public:
		Nhanvien(){
			cout<< "nhap ten nhan vien: ";cin.getline(hoten,50);
			cout<< "nhap dia chi nhan vien: ";getline(cin,diachi);
			cout<< "sdt: ";getline(cin,sdt);
			cout<< "ngay ky hop dong: ";getline(cin,ngaykyhd);
			manv=cc;
			cc++;
		}
		INTT(){
			cout<< "

_____________________";
			cout<< "
ma nhan vien: "<<manv;
			cout<< "
ten nhan vien: "<<hoten;
			cout<< "
dia chi: "<<diachi;
			cout<< "
sdt: "<<sdt;
			cout<< "
ngay ky hop dong: "<<ngaykyhd;
		}
		int getmanv(){
			return this->manv;
		}
		char* getten(){
			return this->hoten;
		}
		friend class BQL;
};
class Mathang{
	string tenhang,nhom;
	int ma,giaban, soluong;
	public:
		Mathang(){
			cout<< "nhap ten hang: ";getline(cin,tenhang);
			cout<< "nhom hang: ";getline(cin,nhom);
			cout<< "gia ban: ";cin>>giaban;
			cout<< "so luong: ";cin>>soluong;
			cin.ignore();
			ma=pc;
			pc++;
		}
		INTT(){
			cout<< "

************";
			cout<< "
ma hang: "<<ma;
			cout<< "
ten hang: "<<tenhang;
			cout<< "
nhom hang: "<<nhom;
			cout<< "
gia ban: "<<giaban;
			cout<< "
so luong: "<<soluong;
		}
		int getgia(){
			return this->giaban;
		}
		int getmamh(){
			return this->ma;
		}
		string getnhom(){
			return this->nhom;
		}
		friend class BQL;
};
class BQL{	
	public:
		Nhanvien *nv;
		Mathang **mh;
		void setnv(Nhanvien *nv){
			this->nv= nv;
		}
		Nhanvien getnv(){
			return *this->nv;
		}
		void setsl(int n){
			mh= new Mathang *[n];
		}
		void setmh(int i, Mathang *m){
			this-> mh[i]= m;
		}
		Mathang getmh(int i){
			return *this->mh[i];
		}
};
Nhanvien *nv;
Mathang *mh;
BQL *bql;
int m,n,sl,slmh[50],index[50];
void menu(){
	cout<< "
1.nhap va xuat ten nhan vien"
	<< "
2.nhap va xuat cac mat hang"
	<< "
3.nhap va xuat bang ds ban hang"
	<< "
4.xuat thong tin bang ds ban hang"
	<< "
5.sap xep bang ds ban hang"
	<< "
6.lap bang doanh thu";
	cout<< "
moi ban lua chon(enter 0 to exit): ";
}
void nv1(){
	cout<< "
nhap so luong nhan vien: ";cin>>m;cin.ignore();
	nv= new Nhanvien[m];
	cout<< "
Thogn tin nv: ";
	for(int i=0;i<m;i++)
		nv[i].INTT();
}
void nv2(){
	cout<< "
nhap so luong mat hang: ";cin>>n;cin.ignore();
	mh=new Mathang[n];
	cout<< "
Thong tin mat hang: ";
	for(int i=0;i<n;i++)
		mh[i].INTT();
	
}
void nv3(){
	int manv,mamh;
	cout<< "
nhap so luong bang ds ban hang: ";cin>>sl;
	bql=new BQL[sl];
	for(int i=0;i<sl;i++){
		cout<< "
nhap ma nhan vien: ";	cin>>manv;
		for(int j=0;j<m;j++){
			if(manv==nv[j].getmanv())
				bql[i].setnv(nv+j);
		}
		do{
			cout<< "
nhap so luong mat hang ban duoc: ";cin>>slmh[i];
		}while(slmh[i]>5);
		bql[i].setsl(slmh[i]);
		cout<< "
ma cac mat hang ban duoc: ";
		for(int k=0;k<slmh[i];k++){
			cin>>mamh;
			for(int h=0;h<n;h++){
				if(mamh==mh[h].getmamh()){
					bql[i].setmh(k,mh+h);
				}
			}
		}
	}
}
void nv4(){
	cout<< "
Bang ds ban hang: ";
	for(int i=0;i<sl;i++){
		bql[i].getnv().INTT();
		cout<< "
Cac mat hang nhan vien nay ban duoc: ";
		for(int j=0;j<slmh[i];j++)
			bql[i].getmh(j).INTT();
	}
}
string tachten(char str[]){
	char *p= strtok(str, " ");
	int i=0;
	char a_str[5][10];
	while(p!=''){
		strcpy(a_str[i],p);
		i++;
		p=strtok('', " ");
	}
	return a_str[i-1];
}
string s1,s2;
void ad_swap(BQL &bql1, BQL &bql2){
	BQL temp= bql1;
	bql1=bql2;
	bql2=temp;
}
void nv5(){
	int lc;
	cout<< "
sap xep theo(1.ten nhan vien 	2.nhom mat hang): ";cin>>lc;
	switch(lc){
		case 1:
			for(int i=0;i<sl;i++){
				for(int j=i+1;j<sl;j++){
					s1=tachten(bql[i].getnv().getten());
					s2=tachten(bql[j].getnv().getten());
					if(s1>s2){
						ad_swap(bql[i],bql[j]);
					}
				}
			}nv4();
		break;
		case 2:
			for(int i=0;i<sl;i++){
				for(int j1=0;j1<slmh[i];j1++){
					for(int j2=j1+1;j2<slmh[i];j2++)
						if(bql[i].getmh(j1).getnhom()>bql[i].getmh(j2).getnhom()){
							swap(bql[i].mh[j1],bql[i].mh[j2]);
						}
				}		
			}nv4();
		break;
	cout<< "
";
	}
} 
int S[20]={0};
void nv6(){
	//lap bang thong ke doanh thu
	cout<< "
";
	for(int i=0;i<sl;i++){
		bql[i].getnv().INTT();
		for(int j=0;j<slmh[i];j++)
			S[i]+=bql[i].getmh(j).getgia();
		cout<< "
Doanh thu: "<<S[i];	
	}
	
}
int main(){
	int lc;
	do{
		menu();
		cin>>lc;
		switch(lc){
			case 1:nv1();break;// nv1 o day la viet tat cua nhiem vu 1, dung nham voi tu nhan vien nhe
			case 2:nv2();break;
			case 3:nv3();break;
			case 4:nv4();break;
			case 5:nv5();break;
			case 6:nv6();break;
			default:
			break;
		}
	}while(lc!=0);
	
}
rogp10 viết 15:45 ngày 01/10/2018

Bạn phải viết riêng các phương thức swap cho class.

nghia viết 15:37 ngày 01/10/2018
Learn C++ – 25 Jul 07

7.3 — Passing arguments by reference

While pass by value is suitable in many cases, it has a couple of limitations. First, when passing a large struct or class to a function, pass by value will make a copy of the argument into the fun…

tran luong viết 15:42 ngày 01/10/2018

trang này hay đấy. tks bạn

tran luong viết 15:34 ngày 01/10/2018

Bạn phải viết riêng các phương thức swap cho class.

được rồi. thanks bạn

tran luong viết 15:46 ngày 01/10/2018

tạm thời là ổn rồi. giờ mình muốn bổ sung thêm tính năng:[quote=“Gia_Cat_Luong, post:1, topic:59406”]
(chú ý: cùng một nhân viên với một mặt hàng thì không thể xuất hiện 2 lần trong bảng này).
[/quote]
giúp mình nhé, thanks all <3

Quang Minh viết 15:41 ngày 01/10/2018

sinh viên của cô Ngọc :v

Leng Keng viết 15:46 ngày 01/10/2018

đã pass. sinh viên thầy Quang, cô Ngọc.

tran luong viết 15:36 ngày 01/10/2018

sv của t dũng nhé =)

Bài liên quan
0