Nhập n sinh viên in ra sinh viên có tổng điểm 15

1 class sinh viên nhập n sinh viên thì em phải dùm cách nào ? class và các hàm dựng liên quan em đã song hết rồi nhưng không biết làm cách nào để nhập n sinh viên rồi xuất n sinh viên ^^!

class danhsach {....};
danhsanh sinhvien[100];
// nhập n sv :> còn xuất thì thay cin = cout th :>
for(i=0;i<100;i++)
cin>>sinhvien[i].name;
cin>>sinhvien[i].diemso;
1 Like

class thì bạn phải tạo dựng hàm input, output; hàm input để nhập thông tin sinh viên, hàm out để xuất thông tin;

Ngoài ra tùy vào cách nhập thì bạn có thể sử dụng vector hay hàm for đơn giản (vector nếu không biết số lượng, for thì biết).

Nếu được bạn cứ post code của class đó lên đây, mình sẽ hướng dẫn chi tiết từng hàm cho.

1 Like

quên mất cách post code mới đau :joy:

copy code nguyên class dán vô phần reply, chọn tất cả ctrl + a rồi chọn biểu tượng </> trên thanh công cụ

Đây là file Candidate.h

#pragma once
#include <string>
using namespace std;

class Candidate
{
private:
    int ma;
    string ten;
    int ngay;
    int thang;
    int nam;
    float toan;
    float van;
    float anh;
public:
    void nhap();
    void xuat();
    float tong();


    Candidate();
    ~Candidate();
};
1 Like

mình cần Candidate.cpp nữa

Đây là file Candidate.cpp

#include "Candidate.h"
#include<iostream>

using namespace std;


Candidate::Candidate()
{
}

void Candidate::nhap()
{
	cout << "Nhap ma : ";
	cin >> ma;
	cout << "\nNhap ten :";
	fflush(stdin);
	getline(cin, ten);
	cout << "nhap ngay thang nam sinh " << endl;
	do{
		cout << "Nhap nam : ";
		cin >> nam;
	} while (nam < 1900 || nam>2015);
	do{
		cout << "\nNhap thang : ";
		cin >> thang;
	} while (thang < 1 || thang >12);
	if (thang == 1 || thang == 3 || thang == 5 || thang == 7 || thang == 8 || thang == 10 || thang == 12)
	{
		do{
			cout << "Nhap ngay : ";
			cin >> ngay;
		} while (ngay < 1 || ngay>31);
	}
	else if (thang == 2)
	{
		if (nam % 4 == 0)
			do{
			cout << "nhap ngay : ";
			cin >> ngay;
			} while (ngay < 1 || ngay>29);
		else
			do{

			} while (ngay < 1 || ngay>28);
	}
	else
	{
		do{
			cout << "nhap ngay : ";
			cin >> ngay;
		} while (ngay < 1 || ngay>30);
	}
	do{
		cout << "Nhap diem toan: ";
		cin >> toan;
	} while (toan < 0 || toan>10);
	do{
		cout << "Nhap diem van: ";
		cin >> van;
	} while (van < 0 || van>10);
	do{
		cout << "Nhap diem anh: ";
		cin >> anh;
	} while (anh<0||anh>10);
}

void Candidate::xuat()
{
	cout << "thong tin cua candidate"<<endl;
	cout << "ma so : "  << ma << endl;
	cout << "ho ten : "<< ten <<endl;
	cout << "ngay thang nam sinh :"<<ngay <<"/"<<thang<<"/"<<nam<< endl;
	cout << "diem toan : "<<toan <<endl;
	cout << "diem van : " << van << endl;
	cout << "diem anh : " << anh << endl;
}
float Candidate::tong()
{
	return (toan + van + anh);
}
Candidate::~Candidate()
{
}
1 Like

file main.cpp

#include"Candidate.h"
#include<iostream>

using namespace std;

void main()
{
	int n;
	Candidate danhsach[100];

	cout << "Nhap So sinh vien : ";
	cin >> n;

	for (int i = 0; i < n; i++)
	{
		danhsach[i].nhap();
	}
	cout << "danh sach sinh vien diem >15 la "<<endl;
	for (int i = 0;i < n; i++)
	{
		float t = danhsach[i].tong();
		if (t > 15)
		{
			danhsach[i].xuat();
		}
	}
	system("pause");
}
1 Like

okie, đợi mình tốc ký code cho :smiley: 5-10p debug nữa

mình muốn hỏi cái bạn nói ấy vecto là gì? nếu chưa biết trước số lượng ấy. VD như bài của mình cấp phát như thế nếu có 101 sinh viên thì mình nghĩ chắc nó sảy ra lỗ ngay. nên muốn tìm 1 cách để có thể viết mà khi nào người dùng nhập nó mới cấp phát ^^.

nghĩa là bạn đã chạy được rồi à, về vector thì hơi đúng có phần chạy tới đâu cấp phát tơi đó, hơi đúng thôi nhé

bài này mình đã chạy được rồi bạn. nhưng mình muốn viết 1 cái hàm main mà ở đó mình không dùm mảng đã khởi tạo giá trị sẵn
VD: trong bài mình có đoạn

Candidate danhsach[100];

mình muốn khi người dùng nhập số lượng vào cái biến n sẽ thay thế cho 100 á.

mình hiểu ý của bạn, đợi chốc mình cho bạn xem 1 đoạn code sử dụng vector để bạn hình dung ra

mình viết sẵn 1 class CCongty sử dụng vector, bạn xem nghiên cứu cách dùng ha

#include "Congty.h"
void CCongty::Input()
{
	int LuaChon;
	do{
		cout << "------------------------------Menu------------------------------" << endl;
		cout << "1. Nhap du lieu nhan vien quan ly." << endl;
		cout << "2. Nhap du lieu nhan vien cong nhat. " << endl;
		cout << "3. Nhap du lieu nhan vien san xuat." << endl;
		cout << "0. Ket thuc nhap du lieu" << endl;
		cout << endl;
		do {
			cout << "Nhap vao lua chon: ";
			cin >> LuaChon;
		} while (LuaChon<0 || LuaChon>3);

		if (LuaChon<0 || LuaChon>3)
		{
			cout << "Lua chon khong hop le" << endl;
		}

		if (LuaChon == 1)
		{
			CNhanVienQuanLy*x = new CNhanVienQuanLy;
			x->Input();
			ListQuanLy.push_back(*x);
		}
		else if (LuaChon == 2)
		{
			CNhanVienCongNhat*x = new CNhanVienCongNhat;
			x->Input();
			ListCongNhat.push_back(*x);
		}
		else if (LuaChon == 3)
		{
			CNhanVienSanXuat*x = new CNhanVienSanXuat;
			x->Input();
			ListSanXuat.push_back(*x);
		}
		
	} while (LuaChon != 0);
	
}

còn đây là file .h

#pragma once
#include "NhanVienCongNhat.h"
#include "NhanVienQuanLy.h"
#include "NhanVienSanXuat.h"
#include <vector>
class CCongty
{
private:
	vector<CNhanVienCongNhat> ListCongNhat;
	vector<CNhanVienQuanLy> ListQuanLy;
	vector<CNhanVienSanXuat> ListSanXuat;
public:
	void Input();
	void Output();
	unsigned long TinhTongLuong();
	void NhanVienLuongCaoNhat();
	CCongty(void);
	~CCongty(void);
};

Tất nhiên bạn chỉ cần xem cách sử dụng vector trong thư viện vector.h rồi áp dụng vào code của mình, những phần còn lại thì đừng để ý làm gì :smiley:. Bản chấn của vector thì trên mạng rất nhiều

1 Like

Đây là 1 hàm input dựng sẵn trong các class còn lại, xem để mườn tượng ra thêm:

void CNhanVienQuanLy::Input()
{
	CNhanVien::Input();
	// he so luong khong duoc nho hon 0
	do{
		cout << "Nhap he so luong co ban: ";
		cin >> HeSoLuongCoBan;
		if (HeSoLuongCoBan < 0)
		{
			cout << "He so luong khong hop le, vui long kiem tra lai" << endl;
		}
	} while (HeSoLuongCoBan < 0);
	
	do{
		cout << "Nhap luong co ban: ";
		cin >> LuongCoBan;
		if (LuongCoBan < 0)
		{
			cout << "luong co ban khong hop le, vui long kiem tra lai" << endl;
		}
	} while (LuongCoBan < 0);

	
}

còn đây là cách truy xuất bằng vector, tất nhiên không khác mảng là mấy

for (int i = 0; i < ListQuanLy.size(); i++)
	{
		cout << "---------Thong tin nhan vien quan ly thu " << i + 1 << "---------" << endl;
		ListQuanLy[i].Output();
		cout << "Luong cua nv: " << ListQuanLy[i].TinhLuong() << endl;
	}

tức là cấp phát động phải không bạn??? nó nhìn có vẻ gần giống với con trỏ ha.

nó giao thoa giữa mảng và con trỏ thôi, còn bản chất sâu xa thì bác có thể search google cáhc mà nó lưu dữ liệu

1 Like

Em coi sinhvien là 1 kiểu dữ liệu mới do người dùng định nghĩa. Ta khai báo 1 mảng sinh viên và sử dụng như bình thường.

83% thành viên diễn đàn không hỏi bài tập, còn bạn thì sao?