⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 课程设计2.c

📁 用c语言编写的一个小型图书馆管理系统,实现会员管理
💻 C
📖 第 1 页 / 共 2 页
字号:
#include "stdio.h"
#include "malloc.h"
#include "conio.h"
#include "string.h"
#include "stdlib.h"
#define LEN sizeof(struct booklist)
#define LEN2 sizeof(struct memberlist)
#define LEN3 sizeof(struct readers)


typedef struct readers     //借书信息结构体
{
	char name[30];  //借书的会员姓名
    struct readers *next2;
}reader;

//书本信息结构体
typedef struct booklist   
{
	char num[20];   //书号
	char name[30];  //书名
	char concern[50];  //出版社
	char date[20];   //出版日期
	char author[20]; //作者
	int page;   //页数
	int price;  //价格  
    int imformation;  //图书剩余数量
	reader *a;  //借阅人 
	struct booklist *next;
}Book;


//会员信息结构体
typedef struct memberlist
{
	int num[8];  //会员号
	char name[30]; //会员名字
	char sex[10];   //会员性别
	char tel[15];   //会员联系电话
	char code[20];   //会员密码
    int  n;  //会员已借的书数量
	struct memberlist *next;
}Member;


void creatlist();   //创建新的书本信息    
void print(Book *head);   //打印书本信息
void print2(Member *head);    //打印会员信息
void save(Book *head);      //储存书本信息
void AddBook();    //添加书本信息 
void DelBook();    //删除书本信息
Book *read();      //读取书本信息
Member *read2();     //读取会员信息  
void manager();     //管理员操作
void Bookconsult();   //图书查询
int Borrow();   //借书
int Return();    //还书
void operate();   //会员操作
void operate2();   //非会员操作
void Delmember();   //删除会员
void Addmember();   //增加会员
void save2(Member *head);  //储存会员信息
void savenum(int *a);   //储存会员号
void resetcode(); //修改会员密码
int *loadnum();  //读取会员号
int *getnum();  //分配会员号
Book *sort(Book *head);    //书本信息按书号排序
void imformation();  //系统信息
void Memberconsult(); //查询会员信息


//储存会员号
void savenum(int *a)
{
	int *b;
	int i;
	FILE *fp;
	b=(int *)calloc(8,sizeof(int));
	b=a;
	fp=fopen("会员号.txt","wb");
	for(i=0;i<8;i++)
	{fwrite(&b[i],sizeof(int),1,fp);}
	fclose(fp);
}


//读取会员号
int *loadnum()
{
	FILE *fp;
	int *a;
	int i;
	a=(int *)calloc(8,sizeof(int));
	fp=fopen("会员号.txt","rb");
	for(i=0;i<8;i++)
	{
		fread(&a[i],sizeof(int),1,fp);
	}
	fclose(fp);
	return (a);
}
    

//分配会员号
int *getnum()
{
	int i=7;
	int *num;
	num=(int *)calloc(8,sizeof(int));
	num=loadnum();
	++num[i];
	while((num[i]==10)&&i>0)
	{
		num[i]=0;
		++num[--i];
	}
	savenum(num);
    return (num);
}


//创建新的书本信息
void creatlist()
{
  Book *head=NULL,*p1=NULL,*p2=NULL;
  int i,n;
  printf("要创建的书本数目=");
  scanf("%d",&n);
  p2=head=(Book *)malloc(LEN);   //创建带有头结点的链表
  p2->a=(reader *)malloc(LEN3);
  p2->a->next2=NULL;
  p2->next=NULL;
  printf("请输入书的信息:\n");
  for(i=1;i<=n;i++)
  {
	  p1=(Book *)malloc(LEN);
	  printf("书号:  ");  scanf("%s",p1->num);  
	  printf("书名:  ");  scanf("%s",p1->name);   
	  printf("出版社:  ");  scanf("%s",p1->concern);   
	  printf("出版日期:  ");  scanf("%s",p1->date);   
	  printf("作者:  ");   scanf("%s",p1->author);   
	  printf("书本页数:  ");  scanf("%d",&p1->page);   
	  printf("书本价格(元):  ");  scanf("%d",&p1->price);
	  p1->a=(reader *)malloc(LEN3);
	  p1->a->next2=NULL;
	  p1->imformation=10;
	  p1->next=NULL;
	  p2->next=p1;
	  p2=p1;
	  if(i<n) printf("下一本:\n");
  }
  head=sort(head);
  save(head);
  print(head);
}


//创建会员信息
void creatmember()
{
	Member *head=NULL,*p1=NULL,*p2=NULL;
	int m,n,p,i=0,j=0,k=1;
	char a[30],b[30];
	int *nu;
	nu=(int *)calloc(8,sizeof(int));
	printf("要创建的会员数量=");
	scanf("%d",&n);
	head=(Member *)malloc(LEN2);
	p2=head;
	p2->next=NULL;
	printf("请输入会员信息:\n");
	for(m=1;m<=n;m++)
	{
		p1=(Member *)malloc(LEN2);
		printf("会员姓名:  ");  scanf("%s",&p1->name);   
        printf("会员性别:  ");  scanf("%s",&p1->sex);   
        printf("联系电话:  ");  scanf("%s",&p1->tel);   
        p1->n=0;
        while(k==1)
		{
			printf("会员密码: "); 
            while((a[i]=getch())!=13)         //不带显示输入密码
			{
				if(a[i]==8)
				{
					if(i>0)
					{
						printf("\b \b");
						i--;
					}
				}
				else
				{
					i++;
					printf("*");
				}
			}
			a[i]='\0';
			printf("\n");
			printf("确认密码: "); 
			while((b[j]=getch())!=13)
			{
				if(b[j]==8)
				{
					if(j>0)
					{
						printf("\b \b");
						j--;
					}
				}
				else
				{
					j++;
					printf("*");
				}
			}
			b[j]='\0';
			if(strcmp(a,b)==0) 
			{
				strcpy(p1->code,a);
				k=0;
				break;
			}
			else 
			{
				printf("密码输入有误!\n");
				i=0;j=0;
				continue;
			}
		}
		printf("\n创建成功!你的会员号是:");
		nu=getnum();
		for(p=0;p<8;p++)
		{
			p1->num[p]=nu[p];
			printf("%d",nu[p]);
		}
        p2->next=p1;
		p2=p1;
	}
	p1->next=NULL;
	printf("\n");
	save2(head);
}



//打印书本信息  
void print(Book *head)
{
 Book *p=NULL;
 reader *p0=NULL;
 p=head->next;
 printf("*******************************************************************************\n");
 while(p!=NULL)
 {
  printf("书号: %s\n书名: %s\n出版社: %s\n出版日期: %s\n作者: %s\n书本页数(页) : %d\n书本价格(元) : %d\n剩余数量 : %d\n",p->num,p->name,p->concern,p->date,p->author,p->page,p->price,p->imformation);
  printf("借阅图书的人:");
  if(p->a->next2==NULL) printf("------------暂无借阅人!");
  else
  {
	  for(p0=p->a->next2;p0!=NULL;p0=p0->next2)
	  {
		  printf("%s  ",p0->name);
	  }
  }
  p=p->next;    /* p后移一个结点 */
  printf("\n");
  printf("\n");
 }
}




//书本信息按书号排序
Book *sort(Book *head)
{
	Book *p1=NULL,*p2=NULL,*p3=NULL,*min=NULL,*min2=NULL,*head2=head->next;
    p1=head2;
	while(p1->next!=NULL) 
	{
		min=p2=p1;  /*把首结点作为最小值*/ 
		while(p2->next!=NULL) 
		{
           if(strcmp(min->num,p2->next->num)>0)  /*首结点与下一结点比较*/
			{
				min2=p2;
				min=p2->next;
			}
			p2=p2->next;
		}
		if(min!=p1)
		{
			min2->next=min->next;   /*删除最小结点*/
			min->next=p1;   /*插入最小结点*/
			if(p1==head2) head2=min;
			else p3->next=min;  /*p3为min前的结点指针*/
			p3=min;
		}
		else
		{
			p3=p1;
			p1=p1->next;
		}
	}
	head->next=head2;
	return(head);
}


//储存书本信息
void save(Book *head)
{
 FILE *fp,*fp2;
 Book *p=NULL;
 reader *q=NULL;
 fp=fopen("书本信息.txt","wb"); //printf("不能打开文件!\n");
 fp2=fopen("借阅信息.txt","wb"); //printf("不能打开文件!\n"); 
 p=head;
 while(p!=NULL)
 {
	fwrite(p,LEN,1,fp);  /*逐个结点写文件*/ 
	for(q=p->a;q!=NULL;q=q->next2)
	{fwrite(q,LEN3,1,fp2);}
	p=p->next;
 }
 fclose(fp);
 fclose(fp2);
}



//添加书本信息 
void AddBook()
{
   FILE *fp,*fp2;
   Book *addbook=NULL;
   reader *p0=NULL;
   fp=fopen("书本信息.txt","ab");  //追加方式打开文件
   fp2=fopen("借阅信息.txt","ab");
   addbook=(Book *)malloc(LEN);
   printf("输入书本信息:\n");
   printf("书号:  ");  scanf("%s",addbook->num);  
   printf("书名:  ");  scanf("%s",addbook->name);   
   printf("出版社:  ");  scanf("%s",addbook->concern);   
   printf("出版日期:  ");  scanf("%s",addbook->date);   
   printf("作者:  ");   scanf("%s",addbook->author);   
   printf("书本页数:  ");  scanf("%d",&addbook->page);   
   printf("书本价格(元):  ");  scanf("%d",&addbook->price);
   p0=(reader *)malloc(LEN3);
   p0->next2=NULL;
   addbook->a=p0;
   addbook->imformation=10;
   addbook->next=NULL;
   fwrite(addbook,LEN,1,fp);  /*块写*/
   fwrite(p0,LEN3,1,fp2);  
   fclose(fp);
   fclose(fp2);
}



//读取书本信息
Book *read()
{
  FILE *fp,*fp2;
  Book *p=NULL,*p1=NULL,*head=NULL;
  reader *p0=NULL,*p2=NULL;
  if((fp=fopen("书本信息.txt","rb"))==NULL) printf("不能打开文件或文件不存在!\n");
  if((fp2=fopen("借阅信息.txt","rb"))==NULL) printf("不能打开文件或文件不存在!\n");
  head=(Book *)malloc(LEN);
  fread(head,LEN,1,fp);
  p1=head;
  p0=(reader *)malloc(LEN3);
  fread(p0,LEN3,1,fp2);
  p0->next2=NULL;
  head->a=p0;
  head->next=NULL;
  p=(Book *)malloc(LEN);
  while(fread(p,LEN,1,fp))    /*逐个结点读取*/
  {
	  p1->next=p;
	  p1=p1->next;
	  p0=(reader *)malloc(LEN3);
	  p1->a=p0;
		  while(fread(p0,LEN3,1,fp2))
		  {   
			  if(p0->next2==NULL) 
			  {
                 p2=p0;
				 p0=(reader *)malloc(LEN3);
				 break;
			  }
			  
			  p2=p0;
			  p0=(reader *)malloc(LEN3);
			  p2->next2=p0;
		  }
		  free(p0);
		  p2->next2=NULL;
          p=(Book *)malloc(LEN);
  }
  p1->next=NULL;
  free(p);
  fclose(fp);
  fclose(fp2);
  head=sort(head);
  if(head!=NULL) return(head);
  else 
  {
	  printf("文件为空!\n");
	  return 0;
  }
}



//删除书本信息
void DelBook()
{
   Book *head=NULL,*p=NULL,*q=NULL;
   char bookname[30];
   head=read();
   printf("输入要删除的书名: ");
   scanf("%s",bookname);              
   p=head;
   while(p!=NULL)/*按名字查找要删除的图书*/
   {
      if(strcmp(p->name,bookname)==0)
      {
        if(p==head) 
		{
			head=head->next;
			break;
		}
        else
        {
		 q->next=p->next;
		 break;
		}
      }
      q=p;  
      p=p->next;
   }
   save(head);
}



//管理员操作
void manager()
{
	int n,i=0,k=1;
	char a[13];
    char b[13];
	Book *head=NULL;
	Member *head2=NULL;
	strcpy(a,"managercode");
	printf("请输入你的管理员密码:");
   	while((b[i]=getch())!=13)   //不带显示的密码输入
	{
		if(b[i]==8)
		{
			if(i>0)
			{
				printf("\b \b");
				i--;
			}
		}
		else
		{
		 i++;
		 printf("*");
		}
	}
	b[i]='\0';
    printf("\n");
	if((strcmp(a,b))==0)
    {
	 printf("管理员验证已通过\n");
	 while(k==1)
	 {
		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");
		printf("                           ◎ 9.读取所有会员信息\n");
        printf("                           ◎10.读取指定会员信息\n");
		printf("                           ◎11.返回到上级目录\n");
		printf("                           ◎12.保存并退出\n");
		printf("请输入:");
		scanf("%d",&n);
		switch(n)
		{
		 case 1: creatlist();break;
		 case 2: AddBook();break;
		 case 3: DelBook();break;
		 case 4: head=read();system("CLS");print(head);break;
		 case 5: system("CLS");Bookconsult();break;
		 case 6: creatmember();break;
		 case 7: Addmember();break;
		 case 8: Delmember();break;
		 case 9: head2=read2();system("CLS");print2(head2);break;
		 case 10: system("CLS");Memberconsult();break;
		 case 11: k=0;break;
		 default: k=0;break;
		}
	 }
	}
	else printf("你不是管理员,没权这个操作。\n");
}



//图书查询
void Bookconsult()
{
	int n,m=1,sign=0;
	Book *p=NULL,*p1=NULL,*p0=NULL,*head=NULL;
	reader *p2=NULL;
	char a[30],b[20],c[20];
    head=read();
	while(m==1)
	{
 	 printf("   请选择你查询书本的方式: 1.按书名  2.按书的编号  3.按书的作者  4.退出查询\n");
     printf("输入=");
	 scanf("%d",&n);
	 switch(n)
	 {
      case 1: printf("请输入书名:");
		      scanf("%s",a);
			  p0=head;
			  while(p0!=NULL)
			  {
				 if(strcmp(a,p0->name)==0)
                 {  
					printf("*******************************************************************************\n");
                    printf("书号: %s\n书名: %s\n出版社: %s\n出版日期: %s\n作者: %s\n书本页数(页) : %d\n书本价格(元) : %d\n剩余数量 : %d\n",p0->num,p0->name,p0->concern,p0->date,p0->author,p0->page,p0->price,p0->imformation);
                    printf("借阅图书的人:"); 
					if(p0->a->next2==NULL) printf("------------暂无借阅人!\n");
                    else
					{
						for(p2=p0->a;(p2=p2->next2)!=NULL;)
						{printf("%s  ",p2->name);}
					}
					printf("\n");
					sign=1;
					p0=p0->next;
				 }
				 else p0=p0->next;
			  }
			  if(sign==0) printf("没有这本书的信息.\n");
			  break;
	  case 2: printf("请输入书的编号:");
		      scanf("%s",b);
			  p0=head;
			  while(p0!=NULL)
			  {
				 if(strcmp(b,p0->num)==0)
                 {  
					printf("*******************************************************************************\n");
                    printf("书号: %s\n书名: %s\n出版社: %s\n出版日期: %s\n作者: %s\n书本页数(页) : %d\n书本价格(元) : %d\n剩余数量 : %d\n",p0->num,p0->name,p0->concern,p0->date,p0->author,p0->page,p0->price,p0->imformation);
                    printf("借阅图书的人:");
					if(p0->a->next2==NULL) printf("------------暂无借阅人!\n");
                    else
					{
						for(p2=p0->a;(p2=p2->next2)!=NULL;)
						{printf("%s  ",p2->name);}
					}
					printf("\n");
				    break; 
				 }
				 else p0=p0->next;
			  }
			  if(p0==NULL) printf("没有这本书的信息.\n");
			  break;
	  case 3: printf("请输入书的作者:");
		      scanf("%s",c);
			  p0=head;
			  while(p0!=NULL)
			  {
				 if(strcmp(c,p0->author)==0)
                 {  
					printf("*******************************************************************************\n");
                    printf("书号: %s\n书名: %s\n出版社: %s\n出版日期: %s\n作者: %s\n书本页数(页) : %d\n书本价格(元) : %d\n剩余数量 : %d\n",p0->num,p0->name,p0->concern,p0->date,p0->author,p0->page,p0->price,p0->imformation);
                    printf("借阅图书的人:");
					if(p0->a->next2==NULL) printf("------------暂无借阅人!\n");
                    else
					{
						for(p2=p0->a;(p2=p2->next2)!=NULL;)
						{printf("%s  ",p2->name);}
					}
					printf("\n");
					sign=1;
					p0=p0->next;
				 }
				 else p0=p0->next;
			  }
			  if(sign==0) printf("没有这本书的信息.\n");
			  break;
	  default: m=0;break;
	 }
	}
}


//查询会员信息
void Memberconsult()
{
    int i,j,n,m=1,sign=0,sign2=0;
	Member *p0=NULL,*head=NULL;
	char a[30];
	int b[8];
	char c;
    head=read2();
	while(m==1)
	{
 	 printf("   请选择你查询会员的方式: 1.按会员名  2.按会员编号  3.退出查询\n");
     printf("输入=");
	 scanf("%d",&n);
	 switch(n)
	 {
      case 1: printf("请输入会员名:");
		      scanf("%s",a);
			  p0=head;
			  while(p0!=NULL)
			  {
				 if(strcmp(a,p0->name)==0)
                 {  

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -