C链表-图书管理系统

无意间翻到了大一的C课设,那时候完完全全是小白,所以做的很简略,只用了链表,一次性的,没有文件也没有数据库,也没有界面,也没有什么判错机制啥的,只适合入门C。

在这里插入图片描述

#include<stdio.h>
#include<string.h>
#include<stdlib.h>
#define LEN 100

//图书信息链表 
struct Book{
    int Book_number;
	char Book_name[LEN+1];
	char Author_name[LEN+1];
	char Book_type[LEN+1]; 
	char Publishing_unit[LEN+1];
	char Publishing_time[LEN+1];
	float price;
	struct Book *next_book;
};


//学生信息链表 
struct Student_information{
	char  name[LEN+1];
	char *ID_number[LEN+1]; 
    char *Book_lending_time[LEN+1];
	char *Book_name[LEN+1];
	struct Student_information *next_student;
};


//函数声明 
void book_add(struct Book *p);
struct Book *book_search(struct Book*head);           
void book_modification(struct Book*head);
void book_delete(struct Book*head);    
void book_lending(struct Book*head,struct Student_information*m,struct Student_information *head1);        
void book_return(struct Student_information *head1);           
struct Student_information *book_student_search(struct Student_information*head1); 
void printer(struct Book *a);
void printer_student(struct Student_information *a);


//主函数 操作菜单 
int main(void)
{   
    struct Book *head=NULL;
	struct Book *tail=NULL;
	struct Book *p=NULL;
	head=(struct Book*)malloc(sizeof(struct Book));
	head->next_book=NULL;
	tail=head;
	
	struct Student_information *head1=NULL;
	struct Student_information *tail1=NULL;
	struct Student_information *m=NULL;
	head1=(struct Student_information*)malloc(sizeof(struct Student_information));
	head1->next_student=NULL;
	tail1=head1;
	
	
	printf("------欢迎使用图书借阅管理系统------\n");
    printf("----请通过键盘输入数字选择相关操作--\n");
    printf("-------------1添加新书--------------\n");
    printf("-------------2查询图书信息----------\n");
    printf("-------------3修改图书信息----------\n");
    printf("-------------4删除图书信息----------\n");
    printf("-------------5借阅图书--------------\n");
    printf("-------------6归还图书--------------\n");
    printf("-------------7查询学生借阅信息------\n");
    printf("-------------8退出系统--------------\n");
    char x;//操作选项 
    while(1){ 
		printf("请输入数字:");
		scanf("%c",&x); 
    	switch(x){
    		case'1':
				p=(struct Book *)malloc(sizeof(struct Book));
				p->next_book=NULL;
   				tail->next_book=p;
    			tail=p;
				book_add(p);      
	    		break; 
      		case'2':
	  			book_search(head);         
	  			break;
  	  		case'3':
				book_modification(head);                
				break; 
  	  		case'4':
				book_delete(head);                      
				break; 
  	  		case'5':
				m=(struct Student_information*)malloc(sizeof(struct Student_information));
				m->next_student=NULL;
    			tail1->next_student=m;
				tail1=m;    
				book_lending(head,m,head1);               
				break; 
  	  		case'6':
				book_return(head1);                      
				break; 
  	  		case'7':
				book_student_search(head1);         
				break;
	  		case'8':
				return 0;                            
		} 
	} 
    return 0; 
}


//打印图书信息函数 
void printer_book(struct Book *a){
	printf("%d\n",a->Book_number);
	printf("%s\n",a->Book_name);
	printf("%s\n",a->Author_name);
	printf("%s\n",a->Book_type);
	printf("%s\n",a->Publishing_unit);
	printf("%s\n",a->Publishing_time);
	printf("%.2f\n",a->price);
} 


//打印学生借阅图书信息函数
void printer_student(struct Student_information *a){
	int i;
	printf("%s\n",a->name);
	for(i=0;i<LEN;i++){
		printf("%s\n",a->Book_lending_time[i]);
		printf("%s\n",a->Book_name[i]);
	}
	
} 	
             

//1添加新书函数 
void book_add(struct Book *p)
{
    printf("1添加新书\n");
    printf("请输入图书编号:"); 
    scanf("%d",&p->Book_number);
    printf("请输入书名:");
	scanf("%s",&p->Book_name); 
	printf("请输入作者名:");
	scanf("%s",&p->Author_name);
	printf("请输入书的种类(学科/杂志/小说/传记):");
	scanf("%s",&p->Book_type);
	printf("请输入图书出版社名称:"); 
	scanf("%s",&p->Publishing_unit);
	printf("请输入图书出版时间:"); 
	scanf("%s",&p->Publishing_time);
	printf("请输入图书价格:");
	scanf("%f",&p->price);
	getchar(); 
	printf("添加成功\n"); 
}	


//2查询图书信息函数 
struct Book *book_search(struct Book*head) 
{ 
    struct Book *p; 
	char book_name[LEN+1];
	int book_number;
	int z;
	printf("2查询图书信息\n");
	printf("------1按书名查询--------\n");
	printf("------2按图书编号查询----\n");
	printf("请输入相应数字:");
	scanf("%d",&z);
	switch(z){
		case 1:
			printf("请输入书名:");
			scanf("%s",book_name);
			getchar();
			for (p=head;p!=NULL;p=p->next_book){
				if(strcmp(p->Book_name,book_name)==0){
					printer_book(p);
	        		break;
	        	}
			}
			if(p==NULL)
	    	printf("暂无此书\n");
	    	break;
	    case 2:
	    	printf("请输入图书编号:");
			scanf("%d",&book_number);
			getchar();
			for (p=head;p!=NULL;p=p->next_book){
				if(book_number==p->Book_number){
					printer_book(p);
	        		break;
	        	}
			}
			if(p==NULL)
	    	printf("暂无此书\n");
	    	break;
    }
	return NULL;
}


//3修改图书信息函数 
void book_modification(struct Book *head){
	struct Book *p;  
	char book_name[LEN+1];
	printf("3修改图书信息\n");
    printf("请输入书名:");
	scanf("%s",book_name);
	getchar();
	for (p=head;p!=NULL;p=p->next_book)
	    if(strcmp(p->Book_name,book_name)==0){
			printf("------1修改图书编号--------\n");
			printf("------2修改书名------------\n");
			printf("------3修改作者名----------\n");
			printf("------4修改书的种类--------\n");
			printf("------5修改图书出版社名称--\n");
			printf("------6修改出版时间--------\n");
			printf("------7修改图书价格--------\n");
			printf("------8完成修改------------\n");
			while(1){		
			    printf("请输入相应数字:");
				char y;
				scanf("%c",&y);
				switch(y) {
					case'1': 
						printf("请输入新的图书编号:"); 
    					scanf("%d",&p->Book_number);
						getchar(); 
    					printf("修改图书编号成功\n"); 
    					break;
					case'2':
						printf("请输入新的书名:");
						scanf("%s",&p->Book_name);
						getchar(); 
						printf("修改书名成功\n"); 
						break;
					case'3':
						printf("请输入新的作者名:");
						scanf("%s",&p->Author_name);
						getchar(); 
						printf("修改作者名成功\n"); 
						break;
					case'4':
						printf("请输入新的书的种类(学科/杂志/小说/传记):");
						scanf("%s",&p->Book_type);
						getchar(); 
						printf("修改书的种类成功\n");
						break; 
					case'5':
						printf("请输入新的图书出版社名称:"); 
						scanf("%s",&p->Publishing_unit);
						getchar(); 
						printf("修改图书出版社名称成功\n"); 
						break;
					case'6':	
						printf("请输入新的图书出版时间:"); 
						scanf("%s",&p->Publishing_time);
						getchar(); 
						printf("修改图书出版时间成功\n"); 
						break;
					case'7':
				    	printf("请输入新的图书价格:");
						scanf("%f",&p->price);
						getchar(); 
						printf("修改图书价格成功\n"); 
						break;
					case'8':
						getchar();
						return; 
				}
			}
	    }
		if(p==NULL)
	        printf("暂无此书\n");
}


//4删除图书信息函数 
void book_delete(struct Book *head){ 
 	char book_name[LEN+1];
	struct Book *p,*q;
	printf("4删除图书信息\n");
    printf("请输入书名:");
	scanf("%s",book_name); 
	getchar();
	for(p=head,q=NULL;
	    p!=NULL&&strcmp(p->Book_name,book_name)!=0;
		q=p,p=p->next_book);
	if(p==NULL)
	    printf("暂无此书\n"); 
	if(q==NULL)
	    head=head->next_book;
	else
		q->next_book=p->next_book;
	free(p);
	printf("已成功删除该图书\n"); 
	return;
} 


//5借阅图书函数 
void book_lending(struct Book *head,struct Student_information *m,struct Student_information *head1){
    struct Book *p;
    struct Student_information *n;
	char book_name[LEN+1]; 
	char name[LEN+1]; 
    printf("5借阅图书\n");
	printf("请输入借阅书名:"); 
	scanf("%s",book_name);
	getchar();
	for (p=head;p!=NULL;p=p->next_book){
		if(strcmp(p->Book_name,book_name)==0){
		    printf("请输入借阅人姓名:"); 
            scanf("%s",name);
    
            for(n=head1;n!=NULL;n=n->next_student){
            	if(strcmp(n->name,name)==0){
            		static int i=1;
	    			n->Book_name[i]=(char*)malloc(100*sizeof(char));
	    			n->ID_number[i]=(char*)malloc(100*sizeof(int));
	    			n->Book_lending_time[i]=(char*)malloc(100*sizeof(char));
	    			strcpy(n->Book_name[i],book_name);
					printf("请输入借阅时间:");
		    		scanf("%s",n->Book_lending_time[i]);
		    		getchar();
		    		i++;
					printf("借阅成功,请于借书之日起两周内归还\n");
					break; 
					
           		}
           	}
	        	if(n==NULL){
	        		m->Book_name[0]=(char*)malloc(100*sizeof(char));
	        		m->ID_number[0]=(char*)malloc(100*sizeof(int));
	    			m->Book_lending_time[0]=(char*)malloc(100*sizeof(char));
	    			strcpy(m->Book_name[0],book_name);
	        		strcpy(m->name,name);
	        		printf("请输入学号:");
		   			scanf("%s",m->ID_number[0]);
		   			getchar();
		   			printf("请输入借阅时间:");
		    		scanf("%s",m->Book_lending_time[0]);
		    		getchar();
		    		printf("借阅成功,请于借书之日起两周内归还\n");
		    		break;
	        	}
	        	break;
			
		}
	}
	if(p==NULL)
		printf("暂无该书"); 

}


//6归还图书函数 
void book_return(struct Student_information *head1){
	struct Student_information *m;
	char student_name[LEN+1];
	char book_name[LEN+1]; 
	int i;
	printf("6归还图书\n");
    printf("请输入学生姓名:");
	scanf("%s",student_name);
	getchar();
	for (m=head1;m!=NULL;m=m->next_student){
		if(strcmp(m->name,student_name)==0){
	    	printf("请输入归还书名:");
			scanf("%s",book_name);
			getchar();
			for(i=0;i<LEN;i++){
				if(strcmp(m->Book_name[i],book_name)==0){
					strcpy(m->Book_name[i]," ");
	    			strcpy(m->Book_lending_time[i]," ");
	    			strcpy(m->ID_number[i]," ");
					break;
				}
			
			}
	    }
    }
	if(m==NULL)
	    printf("无借书记录");
	printf("归还图书成功\n");
}	

		
//7查询学生借阅信息函数 
struct Student_information *book_student_search(struct Student_information*head1) { 
    struct  Student_information *m; 
	char student_name[LEN+1];
	printf("7查询学生借阅图书信息\n");
    printf("请输入姓名:");
	scanf("%s",student_name);
	getchar();
	for (m=head1;m!=NULL;m=m->next_student){
		if(strcmp(m->name,student_name)==0){
		
	       printer_student(m);
	       break;
		}
	}
	if(m==NULL)
		printf("无借书记录\n");
		
	    
	return NULL; 
}``
  • 8
    点赞
  • 53
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值