图书管理系统C语言

C语言简单编写图书管理系统(两种方法)

链表
线性表

主要内容

开发一个图书管理系统,基本信息包括图书的书名,作者,ISBN号。
基本实现:
输出,输入,删除,查询,插入的基本功能。

代码如下:(运行结果省略——链表)


#include 
#include
#include 
#include 
#define maxsize 10000
/* run this program using the console pauser or add your own getch, system("pause") or input loop */
typedef struct booknode{
	char name[50];
	char writer[20];
	int number;
}Book;

typedef struct sqnode{
	Book date;
	struct sqnode *next;
}linklist;

linklist *L;
int n;//保存图书的本数  
linklist* Initlist(linklist *L){
 	L=(linklist *)malloc(sizeof(linklist));
 	L->next=NULL;
 	return L;
 }
 //输入 
 //尾插法建立链表 
 void InputNumber(linklist *L){
 	linklist *p,*r;
 	r=L;
 	printf("请输入链表中元素的个数:");
 	scanf("%d",&n);
 	int i;
 	printf("请输入%d个元素:",n);
 	for(i=0;i<n;i++){
 	   p=(linklist *)malloc(sizeof(linklist)); 
 	   scanf("%s%s%d",p->date.name,p->date.writer,&p->date.number);
 	   p->next=r->next;
 	   r->next=p;
 	   r=p;
     }
 } 
 //头插法建立链表
 /* 
 void InputNumber(linklist *L){
 	linklist *p,*r;
 	r=L;
 	printf("请输入链表中元素的个数:");
 	scanf("%d",&n);
 	int i;
 	printf("请输入%d个元素:",n);
 	for(i=0;idate.name,p->date.writer,&p->date.number);
 	   p->next=r->next;
 	   r->next=p;
 	   r=p;
     }
 } 
 */
 //输出 
 void outputlist(linklist *L){   
 	linklist *p;
 	p=L->next;
 	printf("\t书名\t作者\t书号\n");
 	while(p!=NULL){
 	   printf("\t%s\t%s\t%d\n",p->date.name,p->date.writer,p->date.number);
 	   p=p->next;
 }
  printf("\n");
}
 //查找
void searchforname(linklist *L,char *name){  //按书名查询 
  	int i;
  	linklist *p;
 	p=L->next;
  	for(i=0;i<n;i++){ 
  	    if(strcmp(p->date.name,name )==0)
  	        break;
    }
    if(i<n){
        printf("你要查找的书名为%s的书号是:%d,作者是:%s\n",name,p->date.number,p->date.writer);
		p=p->next;}	
    else
        printf("所查找的书籍不在列表内!\n");
}
void searchforwriter(linklist *L,char *writer){  //按作者查询 
  	int i;
	linklist *p;
 	p=L->next; 
  	for(i=0;i<n;i++){ 
  	    if(strcmp(p->date.writer,writer)==0)
  	        break;
    }
    if(i<n){
        printf("你要查找的作者为%s的书号是:%d,书名是:%s\n",writer,p->date.number,p->date.name); 
        p=p->next;}	
    else
        printf("所查找的书籍不在列表内!");
}
void searchfornumber(linklist *L,int number){
	int i;
	linklist *p;
 	p=L->next; 
  	for(i=0;i<n;i++){ 
  	    if((p->date.number)==number)
  	        break;
    }
    if(i<n){
         printf("你要查找的书号为%d的作者是:%s,书名是:%s\n",p->date.number,p->date.writer,p->date.name); 
        p=p->next;}	
    else
        printf("所查找的书籍不在列表内!");
}
void searchlist(linklist *L){
	int choice;
	char name[20];
	char writer[50];
	int number;
	while(1){
		printf("********现在开始查找*********\n");
		printf("     1.按书名查找.\n") ; 
		printf("      2.按作者查找.\n") ; 
		printf("     3.按书号查找.\n") ; 
		printf("     0.退出\n") ;
		printf("请输入你的选择:");
		scanf("%d",&choice);
		if(choice==0)break;
		switch(choice){
			case 1:printf("请输入你要查找的书名:");scanf("%s",&name);
			       searchforname(L,name);break;
			case 2:printf("请输入你要查找的作者:");scanf("%s",&writer);
			       searchforwriter(L,writer);break;
			case 3:printf("请输入你要查找的书号:");scanf("%d",&number);
			       searchfornumber(L,number);break;
		}  
	}
}
//插入 
void Insertlist(linklist *L,int i,Book e){     //在带头结点的单链线性表L中的第i个位置前插入元素e
	linklist *p,*s;
	int j;
	p=L;j=0;
	while(p!=NULL&&j<i-1){
		p=p->next;
		j++;
	}
	if(p==NULL){
	printf("Error!\n");
	  return;
	}
	s=(linklist *)malloc(sizeof(linklist));      //生成新节点
	s->date=e;s->next=p->next;          //插入L中
	p->next=s;
}
//删除
void Deltelist(linklist *L,int i,Book e){     //在带头结点的单链线性表L中,删除第i个元素,并由e返回其值
	linklist *p,*q;     
	int j;
	p=L;j=0;
	while(p->next&&j<i-1){      //寻找第i个结点,并令p指向前趋
		p=p->next;++j;
	}
	if(!(p->next)||j>i-1){
	printf("Error!\n");
	  return;
	}
	q=(linklist *)malloc(sizeof(linklist));
	q=p->next;p->next=q->next;    //删除并释放结点
	e=q->date;free(q);
	
}   
int main(int argc, char *argv[]) { 
	int choice;
	Book e;
	int i;
	while(1){ 
    printf("******图书管理信息系统*********\n");
	printf("       1.初始化.\n");
	printf("       2.图书信息输入.\n");
	printf("       3.图书信息输出.\n");
	printf("       4.图书信息的查询.\n");
	printf("       5.图书信息的插入.\n");
	printf("       6.图书信息的删除.\n");
	printf("       0.退出.\n");
	printf("请输入你的选择:");
	scanf("%d",&choice);
	if(choice==0)break;
	else{
		switch(choice){
			case 1:L=Initlist(L);break;
			case 2:InputNumber(L);break;
			case 3:outputlist(L);break; 
			case 4:printf("********现在开始查找*******\n");
		           searchlist(L);break;
		    case 5:printf("********现在开始插入*******\n");
		           printf("请输入插入图书的信息:");scanf("%s%s%d",e.name,e.writer,&e.number);
		           printf("请输入插入的位置:");scanf("%d",&i);
		           Insertlist(L,i,e);break;
		    case 6:printf("********现在开始删除*******\n");
		           printf("请输入删除的位置:");scanf("%d",&i);
		           Deltelist(L,i,e);break;
		}
	}
}
	return 0;
}

``

代码如下(运行结果省略——线性表)

#include 
#include 
#include 
#define max 100
/* run this program using the console pauser or add your own getch, system("pause") or input loop */

typedef struct booknode{
	char name[50];
	char writer[20];
	int number;
}Book;

typedef struct listnode{
	Book *elem;
	int length;
}seqlist;
seqlist L;

//初始化
void Inistlist(seqlist *L){
	L->elem=(Book *)malloc(max*sizeof(Book)); 
	L->length=0;
}

//输入 
void Inputelem(seqlist *L){
	int i;
	printf("请输入书的数目:");
	scanf("%d",&L->length);
	for(i=0;i<L->length;i++){
		scanf("%s%s%d",L->elem[i].name,L->elem[i].writer,&L->elem[i].number);
	}
} 

//输出
void Outputelem(seqlist *L){
	int i;
	printf("\t书名\t作者\t书号\n");
	for(i=0;i<L->length;i++)
		printf("\t%s\t%s\t%d\n",L->elem[i].name,L->elem[i].writer,L->elem[i].number);
} 


//查找书名 
void searchforname(seqlist *L,char *name){
	int i;
	for(i=0;i<L->length;i++){
		if(strcmp(L->elem[i].name,name)==0)
			break;
	}
	if(i<L->length)
		printf("查找的书名是%s的书号是:%d,作者是:%s\n",name,L->elem[i].number,L->elem[i].writer);
	else
		printf("查无此书"); 
} 

//查找作者
void searchforwriter(seqlist *L,char *writer){
	int i;
	for(i=0;i<L->length;i++){
		if(strcmp(L->elem[i].writer,writer)==0)
			break;
	}
	if(i<L->length)
		printf("查找的作者是%s的书名是:%s,书号是:%d\n",writer,L->elem[i].name,L->elem[i].number );
	else
		printf("查无此书"); 
}

//查找书号
void searchfornumber(seqlist *L,int number){
	int i;
	for(i=0;i<L->length;i++){
		if(L->elem[i].number==number)
			break;
	}
	if(i<L->length)
		printf("查找的书号是%d的书名是:%s,作者是:%s\n",number,L->elem[i].name,L->elem[i].writer);
	else
		printf("查无此书");
}

//查找位置
void searchforloc(seqlist *L,int i){
	printf("第%d位置上的书是:%s,%s,%d\n",i,L->elem[i-1].name,L->elem[i-1].writer,L->elem[i-1].number);
} 
//查找 
void searchlist(seqlist *L){
	int choice,i,number;
	char name[20];
	char writer[20];
	while(1){
		printf("*****查找方式*****\n");
		printf("     1.按书名查找\n");
		printf("     2.按作者查找\n");
		printf("     3.按书号查找\n");
		printf("     4.按位置查找\n");
		printf("     0.退出\n");
		printf("输入查找方式:");
		scanf("%d",&choice);
		if(choice==0)
			break;
		switch(choice){
			case 1:printf("输入书名:");scanf("%s",name);
					searchforname(L,name);break;
			case 2:printf("输入查找的作者:");scanf("%s",writer);
					searchforwriter(L,writer);break;
			case 3:printf("输入查找的书号: ");scanf("%d",&number);
					searchfornumber(L,number);break;
			case 4:printf("输入查找的位置:");scanf("%d",&i);
					searchforloc(L,i);break;
		} 
	}
}

//插入 
int  insertlist(seqlist *L){
	int i;
	i=L->length;
	L->length=L->length+1;
	printf("插入书的书名,作者,书号: ");
	scanf("%s%s%d",L->elem[i].name,L->elem[i].writer,&L->elem[i].number);
	return L->length;
}


//根据书名删除 
int delforname(seqlist *L,char name[20]){
	int i;
	L->length=L->length-1;
	for(i=0;i<L->length;i++){
		if(strcmp(L->elem[i].name,name)==0)
			for(;i<L->length;i++){
				L->elem[i]=L->elem[i+1]; 
			}
			break;
		}
	return L->length;
}

//根据作者删除 
int delforwriter(seqlist *L,char writer[20]){
	int i;
	L->length=L->length-1;
	for(i=0;i<L->length;i++){
		if(strcmp(L->elem[i].writer,writer)==0)
			for(;i<L->length;i++){
				L->elem[i]=L->elem[i+1]; 
			}
			break;
		}
	return L->length;
}

//根据书号删除 
int delfornumber(seqlist *L,int number){
	int i;
	L->length=L->length-1;
	for(i=0;i<L->length;i++){
		if(L->elem[i].number==number)
			for(;i<L->length;i++){
				L->elem[i]=L->elem[i+1]; 
			}
			break;
		}
	return L->length;
}

//根据位置删除 
int delforloc(seqlist *L,int i){
	int j;
	L->length=L->length-1;
	for(j=0;j<L->length;j++){
		if(i==1){
			for(j=0;j<L->length;j++)
				L->elem[j]=L->elem[j+1];
		}
		if(j!=i-1)continue;
		else L->elem[j]=L->elem[j+1];
	}
	return L->length;
}
//删除
void del(seqlist *L){
	int choice,i,number;
	char name[20];
	char writer[20];
	while(1){
		printf("*****删除方式*****\n");
		printf("     1.按书名删除\n");
		printf("     2.按作者删除\n");
		printf("     3.按书号删除\n");
		printf("     4.按位置删除\n");
		printf("     0.退出\n");
		printf("输入删除方式:");
		scanf("%d",&choice);
		if(choice==0)
			break;
		switch(choice){
			case 1:printf("输入书名:");scanf("%s",name);
					delforname(L,name);break;
			case 2:printf("输入作者:");scanf("%s",writer);
					delforwriter(L,writer);break;
			case 3:printf("输入书号: ");scanf("%d",&number);
					delfornumber(L,number);break;
			case 4:printf("输入位置:");scanf("%d",&i);
					delforloc(L,i);break;
		} 
	}
}
int main(int argc, char *argv[]){
	int choice;
	char name[20];
	while(1){
		printf("*****图书管理系统*****\n");
		printf("     1.初始化。\n");
		printf("     2.图书信息输入。\n");
		printf("     3.图书信息输出。\n");
		printf("     4.图书信息查找。\n");
		printf("     5.图书信息插入。\n");
		printf("     6.图书信息删除。\n");
		printf("     0.退出。\n");
		printf("请输入选项:");
		scanf("%d",&choice);
		if(choice==0) break;
		else{
			switch(choice){
				case 1:Inistlist(&L);break;//初始化 
				case 2:Inputelem(&L);break;//输入 
				case 3:Outputelem(&L);break;//输出 
				case 4:searchlist(&L);break;//查找 
				case 5:insertlist(&L);break;//插入 
				case 6:del(&L);break;//删除 
			}
		}
	}
	return 0;
}

你可能感兴趣的:(笔记,学习,c语言,开发语言,后端)