📄 图书管理.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 + -