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

Đề tài: Giúp đỡ danh sách liên kết đơn trong c

  1. #1
    Ngày gia nhập
    02 2012
    Bài viết
    5

    Wink Giúp đỡ danh sách liên kết đơn trong c

    Code:
    //file thucthi
    #include "khaibao.h"
    int menu()
    {	int c;
    	cout<<"~*~*~CHUONG TRINH QUAN LY THU VIEN ~*~*~"<<endl;
    	cout<<"1. Them Sach Vao Thu Vien"<<endl;
    	cout<<"2. In ra danh sach sach"<<endl;
    	cout<<"3. Xoa sach theo ten tac gia"<<endl;
    	cout<<"4. Tim sach theo ten tac gia"<<endl;
    	cout<<"0. Thoat khoi chuong trinh"<<endl;
    	cin>>c;
    	return c;
    }
    int main()
    {
    	int chon;
    		thuvien tv;
    		list l;
    		do
    		{
    			chon=menu();
    			switch(chon)
    			{
    			case 1:
    				{
    					createlist(l);
    					input(tv,l);
    					cout<<endl<<endl<<endl;
    				}break;
    			case 2:
    				cout<<endl<<endl<<endl<<"Danh Sach Sach"<<endl;
    				show(l);
    				break;
    			case 3:
    				{
    					cout<<endl<<endl<<endl<<"Danh Sach Sau Khi Xoa"<<endl;
    					xoatacgia(l);
    					break;
    				}
    			case 4:
    				{
    					cout<<endl<<endl<<endl<<"Danh Sach Sach Theo Ten Tac Gia"<<endl;
    					show_tg(l);
    					break;
    				}
    			case 0:
    				return 0;
    			default:cout<<endl<<endl<<"Nhap sai xin moi nhap lai"<<endl<<endl;
    				break;
    			}
    		}while(true);
    		system("pause");
    }
    Code:
    //file caidat#include "khaibao.h"
    void createlist(list &l)
    {
    	l = NULL;
    }
    bool emptylist(list l)
    {
    	return (l == NULL);
    }
    list searchlist(list l, char x[])
    {
    	list p;
    	p = l;
    	while((p != NULL) && (p->info.tentacgia != x))
    		p = p->next;
    	return p;
    }
    list searchprevlist(list l, char x[])
    {
    	list p,c ;
    	bool stop = false;
    	c = l;
    	p = NULL;
    	while( c != NULL && !stop)
    	{
    		if(c->info.tentacgia != x)
    		{
    			p = c;
    			c = c->next;
    		}
    		else
    			stop = true;
    	}
    	return p;
    }
    void insertlist(list &l, list p, data x)
    {
    	list newp;
    	newp = new node();
    	newp ->info = x;
    	if(p == NULL)
    	{
    		newp ->next =l;
    		l = newp;
    	}
    	else
    	{
    		newp ->next = p->next;
    		p->next = newp;
    	}
    }
    void input(data &x,list &l)
    {	int n;
    	cout<<"Nhap vao so quyen sach: ";
    	cin>>n;
    	for(int i = 0; i < n; i++)
    	{
    		cout<<"Nhap vao ma sach:";
    		cin>>x.masach;
    		cin.ignore(1);
    		cout<<"Nhap vao ten sach: ";
    		gets(x.tensach);
    		cout<<"Nhap ten tac gia: ";
    		gets(x.tentacgia);
    		cout<<"Nhap nha xuat ban: ";
    		gets(x.nhaxb);
    		cout<<"Nhap vao nam xuat ban:";
    		cin>>x.namxb;
    		cout<<"Trang thai:";
    		cin>>x.trangthai;
    		insertlist(l,0,x);
    	}
    }
    void show(list l)
    {	while(!emptylist(l))
    	{
    		cout<<"Ma so sach:"<<l->info.masach<<endl;
    		cout<<"Ten sach :";
    		puts(l->info.tensach);
    		cout<<"Ten tac gia: ";
    		puts(l->info.tentacgia);
    		cout<<"Nha xuat ban:"<<l->info.nhaxb<<endl;
    		cout<<"Nam xuat ban:"<<l->info.namxb<<endl;
    		cout<<"Tinh Trang Sach :"<<l->info.trangthai<<endl;
    		l = l->next;
    	}
    }
    void deletelist(list &l, list p)
    {
    	list temp;
    	if(p==NULL)
    	{
    		temp = l;
    		l = temp->next;
    	}
    	else
    	{
    		temp = p->next;
    		p->next = temp->next;
    	}
    	delete temp;
    }
    void xoatacgia(list &l)
    {
    	char tentg[30];
    	cin.ignore(1);
    	cout<<"Nhap vao ten tac gia can xoa: ";
    	gets(tentg);
    	list p;
    	p = searchlist(l, tentg);
    	deletelist(l,p);
    	
    }
    void show_tg(list l)
    {
    	char x[30];
    	cin.ignore(1);
    	cout<<"Nhap vao ten tac gia: ";
    	gets(x);
    	while(!emptylist(l))
    	{
    		if(l->info.tentacgia != x)
    		{
    			cout<<"Ma so sach:"<<l->info.masach<<endl;
    			cout<<"Ten sach :";
    			puts(l->info.tensach);
    			cout<<"Ten tac gia: ";
    			puts(l->info.tentacgia);
    			cout<<"Nha xuat ban:"<<l->info.nhaxb<<endl;
    			cout<<"Nam xuat ban:"<<l->info.namxb<<endl;
    			cout<<"Tinh Trang Sach :"<<l->info.trangthai<<endl;
    		}
    		l=l->next;
    	}
    }
    Code:
    //file khai bao
    #include <iostream>
    #include <iomanip>
    using namespace std;
    typedef struct thuvien
    {
    	int masach;
    	char tensach[30];
    	char tentacgia[30];
    	char nhaxb[30];
    	int namxb;
    	int trangthai;
    }thuvien;
    typedef thuvien data;
    typedef struct node
    {
    	data info;
    	node* next;
    }node;
    typedef struct node *list; 
    void createlist(list &l);
    bool emptylist(list l);
    list searchlist(list l, char x[]);
    list searchprevlist(list l, data x);
    void insertlist(list &l, list p, data x);
    void input(data &x,list &l);
    void xoatacgia(list &l);
    void show(list l);
    void deletelist(list &l, list p);
    void show_tg(list l);
    Xin bà con xem hộ cái code xóa theo tác giải và tìm theo tác giả, mình làm nó in không đúng theo yêu cầu. Thank bà con trước.
    Lý Trọng Nhân

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

    (p->info.tentacgia != x))
    Bạn thay bằng hàm strcmp(const char *str1, const char *str2)
    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

  3. #3
    Ngày gia nhập
    02 2012
    Bài viết
    5

    Trích dẫn Nguyên bản được gửi bởi thangit Xem bài viết
    Bạn thay bằng hàm strcmp(const char *str1, const char *str2)
    Thank bạn nhiều mình làm được rồi! Lỗi khi chạy thì tìm hoài không biết sai ở đâu hihi
    Lý Trọng Nhân

  4. #4
    Ngày gia nhập
    12 2010
    Nơi ở
    Cần thơ
    Bài viết
    273

    nếu liên quan tới chuổi mà bạn so sánh chúng " != " thì khác nào so sáng 2 mảng :|
    Ai bất tài, tôi nhìn hoài chẳng thấy,
    Đi khắp phòng tôi lấy 1 tấm gương,
    Khẽ đặt lên một góc phía bức tường,
    Nhìn vào đó, tôi tận tường kẻ đó.

  5. #5
    Ngày gia nhập
    03 2012
    Bài viết
    2

    Thumbs down So sánh chuỗi

    Code của bạn dài quá (mình test bằng tay):
    C Code:
    1. if(l->info.tentacgia != x)
    Làm vậy tức là bạn đang so sánh hai địa chỉ của chuỗi đấy.
    Phải dùng
    C Code:
    1. if(strcmp(l->info.tentacgia, x) != 0)
    để so sánh nội dung của hai chuỗi hoặc strcmpi hay stricmp để phòng trường hợp bạn nhập hai chuỗi không giống nhau về hình thức.
    Nếu gặp lỗi chỗ nào thì bạn ghi ra để sửa.

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

  1. Lập trình C++ giúp e bài thêm/xoá phần tử trong danh sách liên kết đơn với :)
    Gửi bởi duhocsinhlx trong diễn đàn Nhập môn lập trình C/C++
    Trả lời: 5
    Bài viết cuối: 30-09-2013, 01:43 PM
  2. Mọi người tìm lỗi giúp tôi trong hàm nhập danh sách liên kết với!
    Gửi bởi conga2012 trong diễn đàn Nhập môn lập trình C/C++
    Trả lời: 4
    Bài viết cuối: 13-12-2012, 03:30 PM
  3. Bài tập C Giúp mình sửa lỗi việc chèn số trong danh sách liên kết đơn
    Gửi bởi chetlahet_92 trong diễn đàn Nhập môn lập trình C/C++
    Trả lời: 7
    Bài viết cuối: 29-11-2012, 10:56 AM
  4. xóa phần tử cuối trong danh sách liên kết? cần giúp
    Gửi bởi lklnn trong diễn đàn Thắc mắc lập trình C/C++/C++0x
    Trả lời: 1
    Bài viết cuối: 21-04-2010, 08:58 PM
  5. Tìm kiếm vị trí trong danh sách liên kết. Giúp em với!
    Gửi bởi theanh3112 trong diễn đàn Thắc mắc lập trình C/C++/C++0x
    Trả lời: 1
    Bài viết cuối: 23-12-2008, 12:22 AM

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