PDA

View Full Version : Chương trình quản lí sinh viên c++ | Xem giúp mình lỗi gì??



reallylove256
19-05-2009, 05:48 PM
#include<iostream.h>
#include<stdio.h>
#include<conio.h>
#include<string.h>
class sinhvien
{
public:
char ten[20];
char mssv[20];
float toan,li;
public:
sinhvien();
void nhap();
void xuat();
float tb();
int gettoan();
int getli();
void xeploai();
};
void sinhvien::sinhvien()
{
toan=0;
li=0;
}
int sinhvien::gettoan()
{
return toan;
}
int sinhvien::getli()
{
return li;
}
void sinhvien::nhap()
{
cout<<"Ten sv ";
gets(ten);
cout<<"Mssv ";
gets(mssv);
cout<<"Diem toan ";
cin>>toan;
while(toan>10||toan<0)
{
cout<<"\nBan hay nhp diem tu 1 den 10 ";
cin>>toan;
}
cout<<"Diem li ";
cin>>li;
while(li>10||li<0)
{
cout<<"\nBan hay nhp diem tu 1 den 10 ";
cin>>li;
}
}
void sinhvien::xuat()
{
cout<<"sinh vien "<<ten<<" "<<mssv<<" "<<toan<<" "<<li<<"\ttb "<<tb();
xeploai();
}
float sinhvien::tb()
{
return (toan+li)/2;
}
void sinhvien::xeploai()
{
if(tb()<5)
cout<<"\nTrung binh";
else
{
if(tb()<8)
cout<<"\nKha";
else
cout<<"\nGioi";
}
}
class danhsach
{
private:
sinhvien ds[100];
int n;
float tb1;
public:
void nhapds();
void xuatds();
void in();
void sapxep();
void timtheodiem();
void timtheoten();
void them();
void menu();
};
void danhsach::nhapds()
{
cout<<"nhap so luong sinh vien ";
cin>>n;
cout<<"\nNhap thong tin SV \n";
for(int i=0;i<n;i++)
{
ds[i].nhap();
}
}
void danhsach::xuatds()
{
cout<<"\nThong tin SV \n";

for(int i=0;i<n;i++)
{
ds[i].xuat();
cout<<"\n";
}
}
void danhsach::timtheodiem()
{ int dem=0;
cout<<"Nhap diem tb ma ban can tim ";
cin>>tb1;
for(int i=0;i<n;i++)
{
if(ds[i].tb()==tb1)
{
ds[i].xuat();
cout<<"\n";
dem++;
}
}
if(dem==0)
cout<<"\nKo tim thay thng tin";
}
void danhsach::timtheoten()
{ int dem=0;
char name[20];
cout<<"\nNhap ten ban muon tim ";
gets(name);
for(int i=0;i<n;i++)
{
if(strcmp(ds[i].ten,name)==0)
{
ds[i].xuat();
cout<<"\n";
dem++;
}
}
if(dem==0)
cout<<"Ko tim thay thong tin sinh vien";
}
void danhsach::in()
{ int dem=0;
cout<<"Cac sinh vien co diem dc len lop\n ";
for(int i=0;i<n;i++)
{
if(ds[i].tb()>7)
{
ds[i].xuat();
cout<<"\n";

dem++;
}
}
if(dem==0)
cout<<"\nLop hoc qua ngu !!! Cho o lai het";
}
void danhsach::sapxep()
{
sinhvien t;
for(int i=0;i<n-1;i++)
for(int j=i+1;j<n;j++)
if(ds[i].tb()>ds[j].tb())
{
t=ds[i];
ds[i]=ds[j];
ds[j]=t;


}
}
void danhsach::them()
{ int m;
cout<<"\nNhap so sinh vien can them ";
cin>>m;
int t=1;
while(t<=m)
{
//n++;
ds[t].nhap();
t++;
n+=1;
}
}
void danhsach::menu()
{
cout<<"\n****** QUAN LI SINH VIEN ******\n";
cout<<"\n1.Nhap du lieu sv ";
cout<<"\n2.Xuat du lieu sv ";
cout<<"\n3.Them sinh vien ";
cout<<"\n4.Tim sinh vien theo diem ";
cout<<"\n5.Tim sinh vien theo ten ";
cout<<"\n6.Nhung sinh vien duoc len lop ";
cout<<"\n7.Sap xep sinh vien theo diem tang dan ";
cout<<"\n8.Thoat khoi chuong trinh ";
cout<<"\n________________T_H_A_O__N_G_U_Y_E_N____________ _____\n";
}
void main()
{ clrscr();
danhsach t;
t.menu();
int cn;
do
{
cout<<"\nMoi ban chon 1 chuc nang ";
cin>>cn;
while(cn>8||cn<1)
{
cout<<"\nChuc nang ban chon ko co. Try again!! ";
cin>>cn;
}
switch(cn)
{
case 1:
clrscr();
t.menu();
t.nhapds();
break;
case 2:
clrscr();
t.menu();
t.xuatds();
break;
case 3:
clrscr();
t.menu();
t.them();
break;
case 4:
clrscr();
t.menu();
t.timtheodiem();
break;
case 5:
clrscr();
t.menu();
t.timtheoten();
break;
case 6:
clrscr();
t.menu();
t.in();
break;
case 7:
clrscr();
t.menu();
t.sapxep();
t.xuatds();
break;
default: cout<<"Best wishes !!!";
}
}while(cn!=8);
}
các bạn tét dùm mình cái phần thêm sinh viên nha. khi chạy nó báo lỗi

trunkthai
20-05-2009, 09:51 AM
#include<iostream.h>

void danhsach::them()
{ int m;
cout<<"\nNhap so sinh vien can them ";
cin>>m;
int t=1;
while(t<=m)
{
//n++;
ds[t].nhap();
t++;
n+=1;
}
}



t==1,bạn muốn thêm vào vị trí thứ 2 trong ds??

reallylove256
20-05-2009, 01:38 PM
mình đã sửa đc rồi


#include<iostream.h>

void danhsach::them()
{ int m;
cout<<"\nNhap so sinh vien can them ";
cin>>m;
int t=1;
while(t<=m)
{
//n++;
ds[t].nhap();//thay t= n là ok
t++;
n+=1;
}
}
t=1; ở đây khởi tạo giá trị ban đầu cho t khi chạy vòng while

chocolate1146
20-05-2009, 01:47 PM
Khư khư.


void sinhvien::sinhvien()
{
toan=0;
li=0;
}

Êu. Hàm tạo mà cũng có kiểu cơ à???



int sinhvien::gettoan()
{
return toan;
}
int sinhvien::getli()
{
return li;
}

Toán, lý kiểu float mà ép sang int, dễ mất học bổng lắm đấy.



void danhsach::sapxep()
{
sinhvien t;
for(int i=0;i<n-1;i++)
for(int j=i+1;j<n;j++)
if(ds[i].tb()>ds[j].tb())
{
t=ds[i];
ds[i]=ds[j];
ds[j]=t;


}
}

Không kế thừa cũng không friend mà gọi như thật ấy nhỉ?????

reallylove256
20-05-2009, 09:43 PM
uhm, mình hiểu rồi mình còn gà lắm... chỗ gettoan getli minh hieu roi
còn chỗ hàm tạo bạn giúp mình chút đi. hàm cơ là hàm gì :( còn friend gì đó mình cũng ko hiểu nữa

chocolate1146
20-05-2009, 10:34 PM
uhm, mình hiểu rồi mình còn gà lắm... chỗ gettoan getli minh hieu roi
còn chỗ hàm tạo bạn giúp mình chút đi. hàm cơ là hàm gì :( còn friend gì đó mình cũng ko hiểu nữa

Do toán và lý là thuộc tính tuyên bố private nên phải dùng hàm get để lấy ra phục vụ cho tính toán. Tương tự hàm set là đưa vào. Hàm tạo là hàm khởi gán giá trị cho các thuộc tính của đối tượng.


void danhsach::sapxep()
{
sinhvien t;
for(int i=0;i<n-1;i++)
for(int j=i+1;j<n;j++)
if(ds[i].tb()>ds[j].tb())
{
t=ds[i];
ds[i]=ds[j];
ds[j]=t;


}
}
Ở trên trong lớp danhsach bạn có gọi đến sinhvien. Mà sinhvien có hàm tạo nên bạn phải lập trình hàm tạo của đối tượng thàn phần. Ở đây sinhvien là đối tượng thành phần của danhsach nên bạn làm như sau:
danhsach():sinhvien()
{...}

phamngocxuyen
19-08-2013, 10:18 AM
Bài đã sửa cho bạn :)


#include<iostream>
#include<stdio.h>
#include<conio.h>
#include<string.h>

using namespace std;

class sinhvien
{
public:
char ten[20];
char mssv[20];
int toan,li;
public:
//sinhvien();
void nhap();
void xuat();
float tb();
int gettoan();
int getli();
void xeploai();
};
/*void sinhvien::sinhvien()
{
toan =0;
li=0;
}*/
int sinhvien::gettoan()
{
return toan;
}
int sinhvien::getli()
{
return li;
}
void sinhvien::nhap()
{
cout<<"Ten sv ";
gets(ten);
cout<<"Mssv ";
gets(mssv);
cout<<"Diem toan ";
cin>>toan;
while(toan>10||toan<0)
{
cout<<"\nBan hay nhp diem tu 1 den 10 ";
cin>>toan;
}
cout<<"Diem li ";
cin>>li;
while(li>10||li<0)
{
cout<<"\nBan hay nhp diem tu 1 den 10 ";
cin>>li;
}
}
void sinhvien::xuat()
{
cout<<"sinh vien "<<ten<<" "<<mssv<<" "<<toan<<" "<<li<<"\ttb "<<tb();
xeploai();
}
float sinhvien::tb()
{
return (toan+li)/2;
}
void sinhvien::xeploai()
{
if(tb()<5)
cout<<"\nTrung binh";
else
{
if(tb()<8)
cout<<"\nKha";
else
cout<<"\nGioi";
}
}
class danhsach
{
private:
sinhvien ds[100];
int n;
float tb1;
public:
void nhapds();
void xuatds();
void in();
void sapxep();
void timtheodiem();
void timtheoten();
void them();
void menu();
};
void danhsach::nhapds()
{
cout<<"nhap so luong sinh vien ";
cin>>n;
cout<<"\nNhap thong tin SV \n";
for(int i=0;i<n;i++)
{
ds[i].nhap();
}
}
void danhsach::xuatds()
{
cout<<"\nThong tin SV \n";

for(int i=0;i<n;i++)
{
ds[i].xuat();
cout<<"\n";
}
}
void danhsach::timtheodiem()
{ int dem=0;
cout<<"Nhap diem tb ma ban can tim ";
cin>>tb1;
for(int i=0;i<n;i++)
{
if(ds[i].tb()==tb1)
{
ds[i].xuat();
cout<<"\n";
dem++;
}
}
if(dem==0)
cout<<"\nKo tim thay thng tin";
}
void danhsach::timtheoten()
{ int dem=0;
char name[20];
cout<<"\nNhap ten ban muon tim ";
gets(name);
for(int i=0;i<n;i++)
{
if(strcmp(ds[i].ten,name)==0)
{
ds[i].xuat();
cout<<"\n";
dem++;
}
}
if(dem==0)
cout<<"Ko tim thay thong tin sinh vien";
}
void danhsach::in()
{ int dem=0;
cout<<"Cac sinh vien co diem dc len lop\n ";
for(int i=0;i<n;i++)
{
if(ds[i].tb()>7)
{
ds[i].xuat();
cout<<"\n";

dem++;
}
}
if(dem==0)
cout<<"\nLop hoc qua ngu !!! Cho o lai het";
}
void danhsach::sapxep()
{
sinhvien t;
for(int i=0;i<n-1;i++)
for(int j=i+1;j<n;j++)
if(ds[i].tb()>ds[j].tb())
{
t=ds[i];
ds[i]=ds[j];
ds[j]=t;


}
}
void danhsach::them()
{ int m;
cout<<"\nNhap so sinh vien can them ";
cin>>m;
int t=1;
while(t<=m)
{
//n++;
ds[t].nhap();
t++;
n+=1;
}
}
void danhsach::menu()
{
cout<<"\n****** QUAN LI SINH VIEN ******\n";
cout<<"\n1.Nhap du lieu sv ";
cout<<"\n2.Xuat du lieu sv ";
cout<<"\n3.Them sinh vien ";
cout<<"\n4.Tim sinh vien theo diem ";
cout<<"\n5.Tim sinh vien theo ten ";
cout<<"\n6.Nhung sinh vien duoc len lop ";
cout<<"\n7.Sap xep sinh vien theo diem tang dan ";
cout<<"\n8.Thoat khoi chuong trinh ";
cout<<"\n________________T_H_A_O__N_G_U_Y_E_N____________ _____\n";
}
int main()
{ //clrscr();
danhsach t;
t.menu();
int cn;
do
{
cout<<"\nMoi ban chon 1 chuc nang ";
cin>>cn;
while(cn>8||cn<1)
{
cout<<"\nChuc nang ban chon ko co. Try again!! ";
cin>>cn;
}
switch(cn)
{
case 1:

t.menu();
t.nhapds();
break;
case 2:

t.menu();
t.xuatds();
break;
case 3:

t.menu();
t.them();
break;
case 4:

t.menu();
t.timtheodiem();
break;
case 5:

t.menu();
t.timtheoten();
break;
case 6:

t.menu();
t.in();
break;
case 7:

t.menu();
t.sapxep();
t.xuatds();
break;
default: cout<<"Best wishes !!!";
}
}while(cn!=8);
}

DuckyDuckling
19-08-2013, 02:56 PM
Bài đã sửa cho bạn :)


#include<iostream>



Vẫn báo lỗi bạn ơi! Không chạy được .

nguyenhoanghung
14-03-2014, 09:40 AM
Minh đã chỉnh sửa code của bạn và nó đã chạy được. Còn ở chổ phần thêm sv mình cũng đã hoàn thành cho bạn. còn việc sau khi thêm sv xong bạn gọi hàm in danh sách sv thì thiếu những sv được thêm thì là do hàm in danh sách của bạn ban đầu chỉ có n sv, để in đầy đủ thì bạn phải cho vòng lặp này chạy từ 0 cho tới n+m với m là số sinh viên cần thêm.Tức bạn phải viết lại một hàm in danh sách mới, danh sách sau khi thêm, vì mình không có thời gian nên không viết được, mình nghĩ bạn dư khả năng đó.


#include<iostream>
#include<stdio.h>
#include<conio.h>
#include<string.h>
using namespace std;
class sinhvien{
public:
char ten[20];
char mssv[20];
float toan,li;
public:
sinhvien();
void nhap();
void xuat();
float tb();
float gettoan();
float getli();
void xeploai();
};

sinhvien::sinhvien(){
toan = 0.0;
li = 0.0;
}

float sinhvien::gettoan(){

return toan;
}

float sinhvien::getli(){

return li;
}
void sinhvien::nhap(){
cout << "Ten sv ";
cin.getline(ten,50);
cout<<"Mssv ";
cin.getline(mssv,50);
cout<<"Diem toan ";
cin>>toan;
while(toan>10||toan<0)
{
cout<<"\nBan hay nhp diem tu 1 den 10 ";
cin>>toan;
}
cout<<"Diem li ";
cin>>li;
while(li>10||li<0)
{
cout<<"\nBan hay nhp diem tu 1 den 10 ";
cin>>li;
}
}

void sinhvien::xuat(){
cout<<"sinh vien "<<ten<<" "<<mssv<<" "<<toan<<" "<<li<<"\ttb "<<tb();
xeploai();
}

float sinhvien::tb(){
return (toan+li)/2;
}

void sinhvien::xeploai(){
if(tb()<5)
cout<<"\nTrung binh";
else
{
if(tb()<8)
cout<<"\nKha";
else
cout<<"\nGioi";
}
}

class danhsach{
private:
sinhvien ds[100];
int n;
float tb1;
public:
void nhapds();
void xuatds();
void in();
void sapxep();
void timtheodiem();
void timtheoten();
void them();
void menu();
friend class sinhvien;
};

void danhsach::nhapds(){
cout<<"nhap so luong sinh vien ";
cin>>n;
cout<<"\nNhap thong tin SV \n";
for(int i=0;i<n;i++)
ds[i].nhap();
}


void danhsach::xuatds(){
cout<<"\nThong tin SV \n";
for(int i=0;i<n;i++)
{
ds[i].xuat();
cout<<"\n";
}
}

void danhsach::timtheodiem(){
int dem=0;
cout<<"Nhap diem tb ma ban can tim ";
cin>>tb1;
for(int i=0;i<n;i++)
{
if(ds[i].tb()==tb1)
{
ds[i].xuat();
cout<<"\n";
dem++;
}
}

if(dem==0)

cout<<"\nKo tim thay thng tin";
}


void danhsach::timtheoten()
{ int dem=0;
char name[20];
cout<<"\nNhap ten ban muon tim ";
cin.getline(name,50);
for(int i=0;i<n;i++)
{
if(strcmp(ds[i].ten,name)==0)
{
ds[i].xuat();
cout<<"\n";
dem++;
}
}
if(dem==0)
cout<<"Ko tim thay thong tin sinh vien";
}



void danhsach::in()
{ int dem=0;
cout<<"Cac sinh vien co diem dc len lop\n ";
for(int i=0;i<n;i++)
{
if(ds[i].tb()>7)
{
ds[i].xuat();
cout<<"\n";
dem++;
}
}
if(dem==0)
cout<<"\nLop hoc qua ngu !!! Cho o lai het";
}


void danhsach::sapxep()
{
sinhvien t;
for(int i=0;i<n-1;i++)
for(int j=i+1;j<n;j++)
if(ds[i].tb()>ds[j].tb())
{
t=ds[i];
ds[i]=ds[j];
ds[j]=t;
}
}
void danhsach::them()

{ int m,N;
cout<<"\nNhap so sinh vien can them ";
cin>>m;
N=m+n;
for(int i=n;i<N;i++)
ds[i].nhap();
}


void danhsach::menu(){

cout<<"\n****** QUAN LI SINH VIEN ******\n";
cout<<"\n1.Nhap du lieu sv ";
cout<<"\n2.Xuat du lieu sv ";
cout<<"\n3.Them sinh vien ";
cout<<"\n4.Tim sinh vien theo diem ";
cout<<"\n5.Tim sinh vien theo ten ";
cout<<"\n6.Nhung sinh vien duoc len lop ";
cout<<"\n7.Sap xep sinh vien theo diem tang dan ";
cout<<"\n8.Thoat khoi chuong trinh ";

cout<<"\n________________T_H_A_O__N_G_U_Y_E_N____________ _____\n";
}


int main(){
fflush(stdin);
danhsach t;
t.menu();
int cn;
do
{
cout<<"\nMoi ban chon 1 chuc nang ";
cin>>cn;
while(cn>8||cn<1)
{
cout<<"\nChuc nang ban chon ko co. Try again!! ";
cin>>cn;
}
switch(cn)
{
case 1:
fflush(stdin);
t.menu();
t.nhapds();
break;
case 2:
fflush(stdin);
t.menu();
t.xuatds();
break;
case 3:
fflush(stdin);
t.menu();
t.them();
break;
case 4:
fflush(stdin);
t.menu();
t.timtheodiem();
break;
case 5:
fflush(stdin);
t.menu();
t.timtheoten();
break;
case 6:
fflush(stdin);
t.menu();
t.in();
break;
case 7:
fflush(stdin);
t.menu();
t.sapxep();
t.xuatds();
break;
default: cout<<"Best wishes !!!";
}
}while(cn!=8);
}