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

Đề tài: [ Solved ] Xin sửa giúp bài :quản lý sách thư viện

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

    Mặc định [ Solved ] Xin sửa giúp bài :quản lý sách thư viện

    1. Viết chương trình quản lý sách trong thư viện, mỗi cuốn sách bao gồm các thông tin sau:
    Mã sách: số nguyên
    Tên sách: chuỗi
    Tác giả: chuỗi
    Số lượng: số nguyên
    Cài đặt các hàm sau:
    • Xem thông tin 1 cuốn sách dựa vào mã sách
    • Tìm cuốn sách có số lượng nhiều nhất và xuất tất cả thông tin liên quan đến cuốn sách này
    • Tính tổng số sách có trong thư viện
    • Sắp xếp các cuốn sách tăng dần theo mã sách

    Các bạn xem dùm mình và chỉ giúp mình câu:Tìm cuốn sách có số lượng nhiều nhất và xuất tất cả thông tin liên quan đến cuốn sách này.thanks
    Code:
    #include<stdio.h>
    #include<conio.h>
    #include<alloc.h>
    #include<stdlib.h>
    
    #define TRUE 1
    #define FALSE 0
    
    typedef struct sach
    { 	int masach;
    	char tensach[20];
    	char tentacgia[20];
    	int soluong;
    };
    
    struct node
    {	sach info;
    	struct node *next;
    };
    
    typedef node *NODEPTR;
    
    NODEPTR getnode(void)
    {	NODEPTR p;
    	p=(NODEPTR)malloc(sizeof(struct node));
    	return(p);
    }
    
    void initialize(NODEPTR *plist)
    {	*plist=NULL;
    }
    
    int empty(NODEPTR *plist)
    { return(*plist == NULL ? TRUE : FALSE);
    }
    
    void push(NODEPTR *plist,sach x)
    {	NODEPTR p;
    	p=getnode();
    	p->info=x;
    	p->next=*plist;
    	*plist=p;
    }
    
    void traverse(NODEPTR *plist)
    {	NODEPTR p;
    	int stt=0;
    	p=*plist;
    	if(p==NULL)
    		printf("khong co cuon sach nao trong thu vien!!!\n");
    	else
    	{	while(p!=NULL)
    		{	printf("\n %d %8d %17s %17s %5d",stt++,p->info.masach,p->info.tensach,p->info.tentacgia,p->info.soluong);
    			p=p->next;
    		}
    	}
    }
    
    NODEPTR search(NODEPTR *plist,int x)
    {	NODEPTR p;
    	p=*plist;
    	while(p->info.masach!=x&&p!=NULL)
    		p=p->next;
    	return(p);
    }
    
    NODEPTR searchmax(NODEPTR *plist,int max)
    {	NODEPTR p;
    	max=0;
    	p=*plist;
    	for(p=*plist;p->next!=NULL;p=p->next)
    	{	max=p->info.soluong;
    
    }
    
    void selectionsort(NODEPTR *plist)
    {	NODEPTR p,q,pmin;
    	sach min;
    	for(p=*plist;p->next!=NULL;p=p->next)
    	{	min=p->info;
    		pmin=p;
    		for(q=p->next;q!=NULL;q=q->next)
    			if(min.masach>q->info.masach)
    			{	min=q->info;
    				pmin=q;
    			}
    		pmin->info=p->info;
    		p->info=min;
    	}
    }
    
    NODEPTR total(NODEPTR *plist)
    {	NODEPTR p,t=0;
    	for(p=*plist;p->next!=NULL;p=p->next)
    		t+=p->info.soluong;
    	return(t);
    }
    
    void main()
    {	NODEPTR plist;
    	sach s;
    	NODEPTR p;
    	int point,menu;
    	clrscr();
    	initialize(&plist);
    	do
    	{   //clrscr();
    		printf("\n\n");
    		printf("\nCHUONG TRINH QUAN LY SACH THU VIEN\n");
    		printf("Cac chuc nang\n");
    		printf("1.xem danh sach cac sach\n");
    		printf("2.them sach vao danh sach\n");
    		printf("3.xem thong tin 1 cuon sach theo masach\n");
    		printf("4.tim cuon sach co soluong nhiu nhat & xem thong tin cua no\n ");
    		printf("5.tinh tong so sach\n");
    		printf("6.sap xep tang dan theo masach\n");
    		printf("7.thoat\n");
    		printf("Chuc nang ban chon la:");
    		scanf("%d",&menu);
    		switch(menu)
    		{
    			case 1:
    			{	printf("xem danh sach cac sach\n");
    				printf("STT  Masach       Tensach            Tentacgia      Soluong\n");
    				traverse(&plist);
    				break;
    			}
    			case 2:
    			{	printf("1.them sach vao danh sach\n");
    				printf("nhap vao masach:");
    				scanf("%d",&s.masach);
    				printf("nhap vao tensach:");
    				scanf("%s",&s.tensach);
    				printf("nhap vao tentacgia:");
    				scanf("%s",&s.tentacgia);
    				printf("nhap vao soluong:");
    				scanf("%d",&s.soluong);
    				push(&plist,s);
    				break;
    			}
    			case 3:
    			{	printf("3.xem thong tin 1 cuon sach bang masach\n");
    				printf("\n masach can tim:");
    				scanf("%d",&s.masach);
    				p=search(&plist,s.masach);
    				if(p==NULL)
    					printf("ko co sach theo masach %d can tim",s.masach);
    				else
    				{	printf("masach %d co trong danh sach",s.masach);
    					printf("STT  Masach       Tensach            Tentacgia      Soluong\n");
    					traverse(&plist);
    				}
    				break;
    			}
    			case 4:
    			{	printf("4.tim sach co soluong nhiu nhat va in ra thong tin ve sach do\n");
    
    				break;
    			}
    			case 5:
    			{	printf("5.tinh tong so sach co trong thu vien\n");
    				printf("tong so sach la:%d",total(&plist));
    				break;
    			}
    			case 6:
    			{	printf("6.sap xep sach theo ma sach\n");
    				selectionsort(&plist);
    				printf("danh sach theo masach tu nho-->lon sau khi duoc sap xep\n");
    				traverse(&plist);
    				break;
    			}
    			case 7:
    			{	printf("thoat");
    				break;
    			}
    		}
    	}
    	while(menu!=7);
    }

  2. #2
    Ngày gia nhập
    04 2008
    Bài viết
    336

    Code:
    NODEPTR searchmax(NODEPTR *plist,int max)
    {	NODEPTR p;
    	max=0;
    	p=*plist;
    	for(p=*plist;p->next!=NULL;p=p->next)
    	{	max=p->info.soluong;  }
    
    }
    chài ... code này bạn tự viết hay của ai viết mà có cái lỗi thiếu dấu ngoặc vậy ?
    code ra gió bão

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

    thiếu sót....mình muốn hỏi 2 hàm là total và searchmax cua mình só sai gì ko?
    bác cũng trả lời dùm bài bên C.thanks

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

    C Code:
    1. //với hàm này của bạn thì nó sẽ trả về giá trị infor.soluong cuối cùng của list của bạn.
    2.  
    3. NODEPTR searchmax(NODEPTR *plist,int max)
    4. {   NODEPTR p;
    5.     max=0;
    6.     p=*plist;
    7.     for(p=*plist;p->next!=NULL;p=p->next)
    8.     {   max=p->info.soluong;}
    9.  
    10. }
    11. //nên sửa thành thế này.
    12. NODEPTR searchmax(NODEPTR *plist,int max)
    13. {   NODEPTR p, pResult;
    14.     max=0;
    15.     p = *plist;
    16.        pResult = p;
    17.     for(;p->next!=NULL;p=p->next)
    18.        {
    19.             if(max < p->info.soluong) // nếu giá trị hiện hành max nhỏ hơn giá trị soluong tại con trỏ đang xét (p) thì lưu lại giá tri của con trỏ đó.
    20.           {
    21.                 pResult = p; // lưu lại p hiện hành  
    22.                 max=p->info.soluong;}
    23.         }
    24.        
    25.  
    26. //hàm trên không biết bạn muốn lấy về cái gì nhưng ở đây zkday sẽ lấy về  p có giá trị MAX
    27.        return pResult;
    28. }
    29. // hàm này không hiểu mục đích của bạn là muốn làm gì nhưng đọc qua thấy là bạn tính tổng số lượng  có trong list;
    30. //nên zkday sửa lại như sau:
    31. int total(NODEPTR *plist)
    32. {   NODEPTR p;
    33.         int t = 0;
    34.     for(p=*plist;p->next!=NULL;p=p->next)
    35.         t+=p->info.soluong;
    36.     return(t);
    37. }


    chúc bạn thành công.

  5. #5
    Ngày gia nhập
    06 2008
    Bài viết
    6

    thanks...mình sẽ sửa lại

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

  1. Cần giúp đỡ add Slideshow viết bằng Jquery vào MVC 4 !!!
    Gửi bởi steven2211 trong diễn đàn Nhập môn lập trình C#, ASP.NET
    Trả lời: 2
    Bài viết cuối: 21-07-2013, 03:16 PM
  2. Roadshow – Hình thức quảng cáo hiệu quả.
    Gửi bởi thoa.etv trong diễn đàn Giới thiệu website, sản phẩm của bạn
    Trả lời: 0
    Bài viết cuối: 10-10-2012, 10:58 AM
  3. viết chương trình quản lý khách sạn sử dụng kế thừa và đa xạ
    Gửi bởi andythieu trong diễn đàn Thắc mắc lập trình C/C++/C++0x
    Trả lời: 3
    Bài viết cuối: 25-01-2011, 10:51 AM
  4. Xin sửa giúp bài struct :quản lý sách thư viện
    Gửi bởi mynameisrat trong diễn đàn Nhập môn lập trình C/C++
    Trả lời: 1
    Bài viết cuối: 20-09-2008, 02:38 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