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

📄 图书管理.cpp

📁 图书管理系统
💻 CPP
字号:
#include<stdio.h>
#include<malloc.h>
#include<stdlib.h>
#define Max 100
#define null 0
struct date{
	int year;
    int month;int day;};
typedef struct node{
	   char name[Max];//书名
	   char write[Max];//作者
	   int prize;//价格
	   struct date data;//购买日期
       struct node *next;
}in;
in *create(void)
{   int n=0,k;
    in *p,*q,*head;head=null;
   printf("请输入书的数目:   ");scanf("%d",&k);
   while(k>0)
   { q=(in *)malloc(sizeof(in));
   printf("请输入书名:   ");scanf("%s",q->name);
   printf("请输入作者名:   ");scanf("%s",q->write);
   printf("请输入书的价格:   ");scanf("%d",&q->prize);
   printf("请输入书的购买日期(年月日):");
   scanf("%d",&q->data.year);
   scanf("%d",&q->data.month);
   scanf("%d",&q->data.day);
   n++;//控制创建的链表是否是对头结点的创建,可以对链表的创建用if,else来控制
   if(n==1) {head=q; p=q;}
   else if(n>=2) { p->next=q; p=q;}
     	   q=q->next;   
   --k;		
   }
   p->next=null;//必须对链表的尾结点的指针域赋值为null,这样可以对程序的输出和处理有好的控制
   return head;
}
void print(in *la)
{    in * p=la;
     while(p!=null)//用while来控制指针的指向
	  {  printf("---------------------------------------------------------\n");
		  printf("书名:   ");printf("%s\n",p->name);
         printf("作者名:   ");printf("%s\n",p->write);
         printf("书的价格:   ");printf("%13d\n",p->prize);
        printf("请输入书的购买日期(年月日):");printf("%d--%d--%d\n",p->data.year,p->data.month,p->data.day);  
        p=p->next;}
}
in *insert(in *la,int i)//插入书
{
in *p,*s;int j=0;p=la;
while (p!=null&&j<i-1) 
{p=p->next;
j++;
} 
      if (p==null||(i<0)) printf("error ('No this position') "); //对空的链表和非法的插入进行排除
else  if(i>=0)
	  {  
            s=(in *)malloc(sizeof(in));
         	printf("请输入书名:   ");scanf("%s",s->name);
            printf("请输入作者名:   ");scanf("%s",s->write);
            printf("请输入书的价格:   ");scanf("%d",&s->prize);
            printf("请输入书的购买日期(年月日):");
            scanf("%d",&s->data.year);
            scanf("%d",&s->data.month);
            scanf("%d",&s->data.day);
            s->next=p->next;//指针的指向不能颠倒,否则将会出现错误
			p->next=s;
      }   
return  la;
}
in *scan(in *head)
{in *p,*q;char name[Max];
 int i,flag;
p=q=head;
printf("请输入想要查找的书名:   ");scanf("%s",name);
while(p!=null)          /*找出全部有一门不及格或几门不及格学生的成绩*/
{i=0;flag=0;
while(name[i]!='\0')
{if(name[i]!=p->name[i]) flag=1;
i++;}
if(!flag)
{printf("这些书里面有你要找的书:\n");
printf("---------------------------------------------------------\n");
         printf("书名:   ");printf("%s\n",p->name);
         printf("作者名:   ");printf("%s\n",p->write);
         printf("书的价格:   ");printf("%13d\n",p->prize);
         printf("请输入书的购买日期(年月日):");printf("%d--%d--%d\n",p->data.year,p->data.month,p->data.day); 
break;
}
if(p->next==null) printf("没有您要查找的书!\n");
p=p->next;

}
return(head);
}
in *paixu(in *head)
{ in *p,*q;p=q=head;
int t;char c;int i=0;
while(p!=null)
{while(q!=null)
  { if(p->prize>q->prize) 
{  t=p->prize;p->prize=q->prize;q->prize=t;
   t=p->data.year;p->data.year=q->data.year;q->data.year=t;
   t=p->data.month;p->data.month=q->data.month;q->data.month=t;
   t=p->data.day;p->data.day=q->data.day;q->data.day=t;i=0;
   while(p->name[i]!='\0'||q->name[i]!='\0')
   { c=p->name[i];p->name[i]=q->name[i];q->name[i]=c;
   i++;
   }
   i=0;
   while(p->write[i]!='\0'||q->write[i]!='\0')
   { c=p->write[i];p->write[i]=q->write[i];q->write[i]=c;
   i++;}

}
    
    q=q->next;
  }
  p=p->next;q=p;}
print(head);
return head;
}

void main()
{ struct  node *Head;int k,s;
  Head=create();system("cls");
  print(Head);
  while(1)
  { printf("1--插入,2--查找,3--排序,4--退出:\n");scanf("%d",&s);
  switch(s)
  {case 1:printf("请输入你想要插入的位置:");
         scanf("%d",&k);
         Head=insert(Head,k);
         print(Head);break;//system("cls");
  case 2:Head=scan(Head);break;//system("cls");
  case 3:Head=paixu(Head);break;
  case 4:goto end;break;}}
end:;
	printf("程序已经结束!\n");
}

⌨️ 快捷键说明

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