Từ 1 tới 4 trên tổng số 4 kết quả

Đề tài: không xóa được sinh viên trong danh sách

  1. #1
    Ngày gia nhập
    03 2008
    Bài viết
    4

    Mặc định không xóa được sinh viên trong danh sách

    xem giúp minh đoạn code xóa tên sinh viên với,mình không biết sai chỗ nào mà không xóa được thông tin về sinh viên
    Code:
     #include<iostream.h>
    #include<string.h>
    #include <stdlib.h>
    
    #define max 100
    
    struct ng_sinh{
    	int ngay, thang, nam;
    };
    
    typedef struct{
    	char ho[max],ten[max],hoten[max],gioitinh[10];
    	ng_sinh ngaysinh;
    	float toan,ly,hoa,tb;
    }hs;
    
    typedef struct{
    	int soluong;
    	hs *dshs;
    }lop;
    
    void hoanvi(hs &a, hs &b)
    {
    	hs t=a;
    	a=b;
    	b=t;
    }
    
    void hoanviTang_dtb(hs &a, hs &b)
    {
    	if (a.tb>b.tb)
    		hoanvi(a,b);
    }
    
    void hoanviGiam_dtb(hs &a,hs &b)
    {
    	if (a.tb<b.tb)
    		hoanvi(b,a);
    }
    
    void hoanviGiam_ten(hs &a, hs &b)
    {
    	if (strcmp(a.ten,b.ten)==-1)
    		hoanvi(a,b);
    }
    
    void hoanviTang_ten(hs &a,hs &b)
    {
    	if (strcmp(a.ten,b.ten)==1)
    		hoanvi(b,a);
    }
    
    
    
    
    void nhap_hs(hs &hocsinh)
    {
    	
    	cout << "Nhap ho ten: ";
    	cin.ignore();
    	cin.get(hocsinh.hoten,max);
    	cout << "Gioi tinh: ";
    	cin.ignore();
    	cin.get(hocsinh.gioitinh,max);
    	cout << "Nhap ngay thang nam sinh: "<<"\n";
    	cout<<"Ngay sinh : "<<"\n";
    	cin>>hocsinh.ngaysinh.ngay;
    	cout<<"Thang sinh : "<<"\n";
    	cin>>hocsinh.ngaysinh.thang;
    	cout<<"Nam sinh : ";
    	cin.ignore();
    	cin>>hocsinh.ngaysinh.nam;
    	cout << "Diem toan: ";
    	cin >> hocsinh.toan;
    	cout << "Diem ly: ";
    	cin >> hocsinh.ly;
    	cout << "Diem hoa: ";
    	cin >> hocsinh.hoa;
    	hocsinh.tb = (hocsinh.toan+hocsinh.ly+hocsinh.hoa) / 3;
    }
    
    void xuat_hs(hs hocsinh)
    {
    	cout << "Ho & ten: " <<hocsinh.hoten<< "\n";
    	cout<< "Gioi tinh: " << hocsinh.gioitinh << "\n";
    	cout<< "Ngay thang nam sinh: " << hocsinh.ngaysinh.ngay<< "/"<< hocsinh.ngaysinh.thang<<"/"<<hocsinh.ngaysinh.nam<<"\n";
    	cout<< "Diem toan: " << hocsinh.toan << "\n";
    	cout<< "Diem ly: " << hocsinh.ly << "\n";
    	cout<< "Diem hoa: " << hocsinh.hoa << "\n";
    	cout<< "Diem tb: " << hocsinh.tb << "\n";
    }
    
    void nhap_lop(lop &lophoc)
    {
    	cout << "Nhap so luong hoc sinh: ";
    	cin >> lophoc.soluong;
    	lophoc.dshs= new hs [lophoc.soluong];
    	for (int i=0;i<lophoc.soluong;i++)
    	{
    		cout << "+--------Nhap thong tin hoc sinh thu " << i+1 << "--------+\n";
    		nhap_hs(lophoc.dshs[i]);
    		cout << "\n";
    	}
    }
    
    void xuat_lop(lop lophoc)
    {
    	cout << "+--------Danh sach lop--------+" << "\n";
    	for (int i=0;i<lophoc.soluong;i++)
    	{
    		cout << i+1 << ". ";
    		xuat_hs(lophoc.dshs[i]);
    		cout << "\n";
    	}
    }
    void them_1hs(lop &lophoc)
    {
    	nhap_hs(lophoc.dshs[lophoc.soluong++]);
    }
    
    void them_nhieuhs(lop &lophoc, int k)
    {
    	for (int i=lophoc.soluong;i<lophoc.soluong+k;i++)
    	{
    		cout << "Nhap thong tin hoc sinh thu " << i+1 << "\n";
    		nhap_hs(lophoc.dshs[i]);
    	}
    	lophoc.soluong += k;
    }
    
    void sapxep_dtb(lop lophoc,void (*troham)(hs &, hs &))
    {
    	for (int i=0;i<lophoc.soluong-1;i++)
    		for (int j=i+1;j<lophoc.soluong;j++)
    				(*troham)(lophoc.dshs[i],lophoc.dshs[j]);
    }
    
    
    
    void xoa(lop &lophoc, int k)
    {
    	for (int i=k;i<lophoc.soluong;i++)
    		lophoc.dshs[i]=lophoc.dshs[i+1];
    	lophoc.soluong--;
    
    }
    
    
    void xoa_hs(lop &lophoc,char ten1[])
    {
    
    	for (int i=0;i<lophoc.soluong;i++)
    		if(strcmp(ten1,lophoc.dshs[i].ten)==0)
    			xoa(lophoc,i);
    
    }
    
    void sapxep_ten(lop lophoc, void (*troham)(hs &, hs &))
    {
    
    		for (int i=0;i<lophoc.soluong-1;i++)
    			for (int j=i+1;j<lophoc.soluong;j++)
    					(*troham)(lophoc.dshs[i],lophoc.dshs[j]);
    
    }
    
    
    int vitriln(lop lophoc)
    {
    	int k=0;
    	float gtln = lophoc.dshs[0].tb;
    	for (int i=1;i<lophoc.soluong;i++)
    		if (gtln<lophoc.dshs[i].tb)
    		{
    			gtln=lophoc.dshs[i].tb;
    			k=i;
    		}
    		return k;
    }
    
    void xuatTopn(lop lophoc, int n)
    {
    	int k = vitriln(lophoc), j;
    	float giatritg;
    	xuat_hs(lophoc.dshs[k]);
    	n--;
    	while(n>0)
    	{
    		giatritg= lophoc.dshs[0].tb;
    		for (int i=1;i<lophoc.soluong;i++)
    		{
    			if (i!=k)
    				if (giatritg<lophoc.dshs[i].tb)
    				{
    					giatritg=lophoc.dshs[i].tb;
    					j = i;
    				}
    		}
    		k = j;
    		cout << "\n";
    		xuat_hs(lophoc.dshs[j]);
    		n--;
    	}
    }
    
    
    
    
    void main()
    {
    	lop lophoc;int chon,n;
    	cout << "******Chuong trinh quan ly sinh vien******\n";
    	do{
    		cout << "--Chon 1 trong cac tinh nang sau(1-9)--\n"
    			<<" 1. Tao moi 1 lop hoc\n"
    			<<" 2. Them 1 hoc sinh vao lop hoc\n"
    			<<" 3. Them nhieu hoc sinh vao lop hoc\n"
    			<<" 4. Xuat danh sach hoc sinh trong lop\n"
    			<<" 5. Xoa hoc sinh ra khoi lop hoc\n"
    			<<" 6. Sap xep hoc sinh theo ten(tang dan/giam dan)\n"
    			<<" 7. Sap xep hoc sinh theo diem tb(tang dan/giam dan)\n"
    			<<" 8. Xuat ra top n hoc sinh co diem tb cao nhat\n"
    			<<" 9. Thoat chuong trinh\n";
    		cin >> chon;
    		switch(chon)
    		{
    		case 1:
    			cout << " 1.Tao moi mot lop hoc \n";
    			nhap_lop(lophoc);
    			break;
    		case 2:
    			cout << " 2. Them 1 hoc sinh vao lop hoc \n";
    			cout << "--Nhap thong tin hoc sinh muon them--\n ";
    			them_1hs(lophoc);
    			break;
    		case 3:
    			cout <<" 3. Them nhieu hoc sinh vao lop hoc\n";
    			cout << "Ban muon them bao nhieu hoc sinh: ";
    			cin >> n;
    			them_nhieuhs(lophoc,n);
    			break;
    		case 4:
    			cout <<" 4. Xuat danh sach hoc sinh trong lop\n";
    			xuat_lop(lophoc);
    			break;
    		case 5:
    			cout <<" 5. Xoa hoc sinh ra khoi lop hoc\n";
    			char ten2[max];
    			cout << "Nhap ten hoc sinh muon xoa: ";
    			cin.ignore(1);
    			cin.get(ten2,max);
    			xoa_hs(lophoc,ten2);
    			cout << "Hoc sinh " << ten2 << " da duoc xoa \n";
    			break;
    		case 6:
    			cout <<" 6. Sap xep hoc sinh theo ten(tang dan/giam dan)\n";
    			cout << "Ban muon sap xep tang dan hay giam dan?\n"
    				<< "  1.Tang dan\n "
    				<< "  2.Giam dan\n ";
    			cin >> chon;
    			if (chon==1)
    			{
    				sapxep_ten(lophoc,hoanviTang_ten);
    				cout << "Danh sach hoc sinh da duoc sap xep theo ten tang dan\n";
    			}
    			else
    			{
    				sapxep_ten(lophoc,hoanviGiam_ten);
    				cout << "Danh sach hoc sinh da duoc sap xep theo ten giam dan\n";
    			}
    			break;
    		case 7:
    			cout <<" 7. Sap xep hoc sinh theo diem tb(tang dan/giam dan)\n";
    			cout << "Ban muon sap xep tang dan hay giam dan?\n"
    				<< "  1.Tang dan\n "
    				<< "  2.Giam dan\n ";
    			cin >> chon;
    			if (chon==1)
    			{
    				sapxep_dtb(lophoc,hoanviTang_dtb);
    				cout << "Danh sach hoc sinh da duoc sap xep theo diem tb tang dan\n";
    			}
    			else
    			{
    				sapxep_dtb(lophoc,hoanviGiam_dtb);
    				cout << "Danh sach hoc sinh da duoc sap xep theo diem tb giam dan\n";
    			}
    			break;
    		case 8:
    			cout << "Ban muon ra top bao nhieu hoc sinh: ";
    			cin >> n;
    			cout << "Top " << n << " hoc sinh theo diem tb la:\n ";
    			xuatTopn(lophoc, n);
    			break;
    		case 9:exit(0);break;
    		default:cout << "Chon tu 1 den 9\n";
    
    		}
    	}while (chon!=9);
    	delete [] lophoc.dshs;
    
    
    }

  2. #2
    Ngày gia nhập
    12 2006
    Nơi ở
    US
    Bài viết
    1,917

    - Đã test 2 hàm xóa chưa, kết quả output thế nào ?

  3. #3
    Ngày gia nhập
    03 2008
    Bài viết
    4

    khi mình nhập vào thông tin của sinh vien(ví dụ là 2 người),khi minh chọn chức năng xoá 1 người,chương trình báo là đã xóa, nhưng khi mình cho xuất ra danh sách sinh viên thì vẫn là 2 người

  4. #4
    Ngày gia nhập
    12 2007
    Bài viết
    54

    void hoanviGiam_ten(hs &a, hs &b)
    {
    if (strcmp(a.ten,b.ten)==-1)
    hoanvi(a,b);
    }
    void hoanviTang_ten(hs &a,hs &b)
    {
    if (strcmp(a.ten,b.ten)==1)
    hoanvi(b,a);
    }
    Mình ko hiểu ý bạn , viết 2 hàm này để sắp xếp theo tên à . Mà viết hàm này sai rồi . strcmp(s1,s2) hàm này trả về giá trị >0 khi s1>s2 chứ đâu phải là 1
    void them_1hs(lop &lophoc)
    {
    nhap_hs(lophoc.dshs[lophoc.soluong++]);
    }
    Hàm này cũng viết sai rồi bởi vì bạn lai phải cấp phát lại bộ nhớ cho số lượng học sịnh ( tức là nhập lại số học sinh đã có ban đầu )
    Còn cái khác thì tớ chưa xem
    Rất mong được mọi người giúp đỡ :

    Kiến thức mình biết chỉ là hạt cát trên sa mạc

Các đề tài tương tự

  1. Xóa một sinh viên trong một danh sách sinh viên
    Gửi bởi tuanvi261 trong diễn đàn Thắc mắc lập trình C#
    Trả lời: 2
    Bài viết cuối: 19-04-2012, 07:57 PM
  2. Tạo danh sách sinh viên trên C++. Chỉnh sửa, xóa sinh viên thì làm thế nào?
    Gửi bởi hiepsiao trong diễn đàn Thắc mắc CTDL & Giải thuật
    Trả lời: 3
    Bài viết cuối: 28-08-2011, 10:26 AM
  3. Xóa 1 MSSV trong danh sách sinh viên !!!
    Gửi bởi bus trong diễn đàn Nhập môn lập trình C/C++
    Trả lời: 2
    Bài viết cuối: 20-05-2011, 08:30 PM
  4. Bài tập C++ Xâu dựng hàm xóa sinh viên trong Danh sách liên kết?
    Gửi bởi Dark Ghost trong diễn đàn Thắc mắc lập trình C/C++/C++0x
    Trả lời: 5
    Bài viết cuối: 17-12-2010, 10:49 AM
  5. Xóa danh sách sinh viên!!!
    Gửi bởi luudiecphi trong diễn đàn Thắc mắc lập trình Visual C++
    Trả lời: 3
    Bài viết cuối: 05-05-2009, 08:17 PM

Quyền hạn của bạn

  • Bạn không thể gửi đề tài mới
  • Bạn không thể gửi bài trả lời
  • Bạn không thể gửi các đính kèm
  • Bạn không thể chỉnh sửa bài viết của bạn