Week7——图书管理系统

Week7——图书管理系统

1.(图书管理系统)我们对于图书馆以后会买多少书是未知的,所以如果定义数组就有可能在将来的某一天,数组的大小不够用,本题需要用动态链表做。自己定义关于图书的结构体,该结构体包括:书号,书名,书类别(类别如通信,英语,计算机等),馆藏量,剩余量,本题需要的主要函数如下:初始化:程序运行之初,应该创建一个包含一定数量结点的链表。添加:当有新书进来时,需要创建一个结点,将新书信息存到这个结点当中,并将这个结点放在链表末尾。删除:删除指点信息的书目。排序:根据指定的关键字进行排序。查找:根据指定的要求进行查找。借书:将所借书的剩余量减1还书:将所还的书的剩余量加1。初始的馆藏量可以通过键盘输入,也可以结合文件读写操作从预先写好的一个文件中读入。

整个程序的菜单如下:

0.退出

        0.返回上一级菜单(意思就是不想添加了,所以只有返回)

 

1.添加

1.添加图书

 

                 0.返回上一级菜单(意思同上)

                 

2.删除   1.根据书号删除(输入书号,如果该书号的书就删除,否则提示没有该书)                      

2.根据书名删除(输入书名,如果该书号的书就删除,否则提示没有该书)        

                0.返回上一级菜单(意思同上)

 

                1.根据书号排序

3.排序

                2.根据藏书量排序

 

 

                0.返回上一级菜单(意思同上)

                

4.查找   1.根据书名查找

 

                2.根据书号查找

 

              0.返回上一级菜单(意思同上)

 

     5.借书

              1.借书(输入书号,如果没有该书的书号则进行提示,该书剩余量为0时,则应该提示已借完,否则然后将馆藏量减1

 

               0.返回上一级菜单(意思同上)

 

6.还书

        1.还书(输入书号,如果没有该书的书号则进行提示,否则然后将馆藏量加1)    

 程序

#include<iostream>
#include<cstdio>
#include<cmath>
#include<cstring>
#include<string>
#include<algorithm>
#include<stack>
#include<queue>
#include<cstdlib>
using namespace std;
typedef struct library List;
typedef struct library Position;
struct library
{
 int offical_number;
 char book_name[100];
 int book_num;
 List *next;
};
void Primary_menu();
List *Add_book();
void Delete_book();
void Sort_book();
void Find_book();
void Use_book();
void Bake_book_menu();
void Exmine_library();
int menu();
List *Head,*Head1;
int main()
{
 //std::ios::sync_with_stdio(false);
 puts("     **************************");
 puts("     **Week7——图书管理系统**");
 puts("     **************************");
 Primary_menu();
 return 0;
}
void Primary_menu()
{
 int flag = 1;
 while (true)
 {
  if (!flag) break;
  flag = 1;
  switch (menu())
  {
  case 1:
   Head1 = Add_book();
   Head = Head1->next; break;//aldery;
  case 2:
   Delete_book(); break;//aldery
  case 3:
   Sort_book(); break;
  case 4:
   Find_book(); break;
  case 5:
   Use_book(); break;
  case 6:
   Bake_book_menu(); break;
  case 7:
   Exmine_library(); break;
  default:
   puts("     Goodbay\n"); flag = 0;
  }
 }
}
int menu()
{
 puts("       0,End Program");
 puts("       1.Add_book");
 puts("       2,Delete_book");
 puts("       3,Sort_book");
 puts("       4,Find_book");
 puts("       5,Lent_book");
 puts("       6,Back_book");
 puts("       7 output library information");
 puts("       Please intput'0--7'");
 int n, cn;
 do
 {
  cin >> n;
  cn = n;
 } while (n < 0 || n>7);
 return cn;
}
List *Add_book()
{
 List *head, *p, *tail;
 head = (List*)malloc(sizeof(List));
 head->next = NULL;
 puts("     输入的图书序号为'-1'时,则输入结束");
 p = head;
 while (1)
 {
  tail = (List*)malloc(sizeof(List));
  cin >> tail->offical_number;
  getchar();
  if (tail->offical_number == -1) break;
  cin >> tail->book_name >> tail->book_num;
  p->next = tail;
  p = tail;
 }
 p->next = NULL;
 return head;
}
Position *Findnum(int x)
{
 Position *L = Head;
 if (L == NULL)
  return false;
 else
 {
  while (L)
  {
   if (L->offical_number == x)
    return L  ;
   L = L->next;
  }
 }
 return false;
}
void delete1()
{
 puts("     please intput  position");
 int pos;
 cin >> pos;
 Position *P = Findnum(pos);
 List *L = Head;
 if (P == false)
 {
  puts("     Delete error,please intput right position");
  return;
 }
 if (L == NULL || pos == NULL)
 {
  puts("     Delete error,please intput right position");
  return;
 }
 else
 {
  if (P == L)
  {
   L->book_num--;
   if (!L->book_num)
   {
    L = L->next;
    Head = L;
   }
   puts("     Delete success");
   return;
  }
  else
  {
   while (L->next != NULL&&L->next != P)
    L = L->next;
   if (L->next != P)
   {
    puts("     Delete error,please intput right position");
    return;
   }
   else
   {
    L->next->book_num--;
    if (!L->next->book_num)
    {
     L->next = L->next->next;
    }
    puts("     Delete success");
   }
  }
 }
}
Position *Findchar(char *x)
{
 Position *L = Head;
 if (L == NULL)
  return false;
 else
 {
  while (L)
  {
   if (!strcmp(L->book_name, x))
    return L;
   L = L->next;
  }
 }
 return false;
}
void delete2()
{
 puts("");
 puts("     Please intput Book_name");
 char pos[100];
 cin >> pos;
 Position *P = Findchar(pos);
 List *L = Head;
 if (P == false)
 {
  puts("     Delete error,please intput right position");
  return;
 }
 if (L == NULL || pos == NULL)
 {
  puts("     Delete error,please intput right position");
  return;
 }
 else
 {
  if (P == L)
  {
   L->book_num--;
   if (!L->book_num)
   {
    L = L->next;
    Head = L;
   }
   puts("     Delete success");
   return;
  }
  else
  {
   while (L->next != NULL&&L->next != P)
    L = L->next;
   if (L->next != P)
   {
    puts("     Delete error,please intput right position");
    return;
   }
   else
   {
    L->next->book_num--;
    if (!L->next->book_num)
    {
     L->next = L->next->next;
    }
    puts("     Delete success");
   }
  }
 }
}
void Delete_book()
{
 puts("      1.根据书号删除输入书号");
 puts("     2.根据书名删除输入书名\n*************");
 puts("     输入'0'返回上级菜单");
 int n;
 cin >> n;
 if (n == 1)
  delete1();
 else if (n == 2)
  delete2();
 else if (n == 0)
  Primary_menu();
 else
 {
  puts("     Please inpute right number");
  Delete_book();
 }
}
void swap_num(int &a,int &b)
{
 int temp = a;
 a =b;
 b = temp;
}
void swap_char(char *a, char *b)
{
 char str[100];
 strcpy(str, a);
 strcpy(a, b);
 strcpy(b, str);
}
void Sort_offical_num()
{
 List *p, *q, *min;
 for (p = Head; p != NULL; p = p->next)
 {
  min = p;
  for (q = p->next; q != NULL; q = q->next)
  {
   if (q->offical_number < min->offical_number)
   {
    min = q;
   }
  }
  if (min != p)
  {
   swap_num(min->book_num, p->book_num);
   swap_num(min->offical_number, p->offical_number);
   swap_char(min->book_name, p->book_name);
  }
 }
 puts("     排序成功");
}
void Sort_book_num()
{
 List *p, *q, *min;
 for (p = Head; p != NULL; p = p->next)
 {
  min = p;
  for (q = p->next; q != NULL; q = q->next)
  {
   if (q->book_num < min->book_num)
   {
    min = q;
   }
    
  }
  if (min != p)
  {
   swap_num(min->book_num, p->book_num);
   swap_num(min->offical_number, p->offical_number);
   swap_char(min->book_name, p->book_name);
  }
 }
 puts("     排序成功");
}
void Sort_book()
{
 puts("     1.根据书号排序");
 puts("     2.根据藏书量排序");
 puts("     0.返回上一级菜单");
 int n;
 cin >> n;
 if (n == 1)
  Sort_offical_num();
 else if (n == 2)
  Sort_book_num();
 else if (!n)
  void Sort_book();
 else
  menu();
}
void Find_book_name()
{
 puts("     Please intput Book_name");
 char Book_name[100];
 cin >> Book_name;
 List *L = Head;
 int flag = 1;
 if (L == NULL)
 {
  puts("     Library don't have this book.\nplease find again");
  Find_book();
 }
 else
 {
  while (L)
  {
   if (!strcmp(Book_name, L->book_name))
   {
    flag = 0;
    puts("     Libarary book information");
    cout << L->offical_number << " ";
    cout << L->book_name << " ";
    cout << L->book_num << endl;
    Find_book();
   }
   L = L->next;
  }
 }
 if (flag==1)
 {
  puts("     Library don't have this book.\nplease find again");
  Find_book();
 }
}
void Find_book_offical()
{
 puts("     Please intput Book_offical");
 int Book_offical;
 cin >> Book_offical;
 List *L = Head;
 int flag = 1;
 if (L == NULL)
 {
  puts("     Library don't have this book.\nplease find again");
  Find_book();
 }
 else
 {
  while (L)
  {
   if (Book_offical==L->offical_number)
   {
    flag = 0;
    puts("     Libarary book information");
    cout << L->offical_number << " ";
    cout << L->book_name << " ";
    cout << L->book_num << endl;
    Find_book();
   }
   L = L->next;
  }
 }
 if (flag==1)
 {
  puts("     Library don't have this book.\nplease find again");
  Find_book();
 }
}
void Find_book()
{
 puts("      1.根据书名查找");
 puts("      2.根据书号查找");
 puts("      0.返回上一级菜单");
 int n;
 cin >> n;
 if (!n)
  menu();
 else  if (n == 1)
  Find_book_name();
 else if (n == 2)
  Find_book_offical();
 else
  menu();
}
void Read_book_offical()
{
 puts("     Please intput Book_offical");
 int Book_offical;
 cin >> Book_offical;
 List *L = Head;
 if (L == NULL)
 {
  puts("     Library don't have this book.\nplease find again");
  Find_book();
 }
 else
 {
  while (L)
  {
   if (Book_offical == L->offical_number)
   {
    if (L->book_num == 0)
     puts("     This book don't have more.\nPlease lent other book");
    else
    {
     puts("     Congratulation you have borrow this book ");
     L->book_num--;
    }
     Find_book();
   }
  }
 }
 puts("     Library don't have this book.\nplease find again");
 Find_book();
}
void Use_book()
{
 puts("     1.借书 输入书号");
 puts("     0.返回上一级菜单");
 int n;
 cin >> n;
 if (!n)
  Primary_menu();
 else if (n == 1)
 {
  Read_book_offical();
 }
 else
 {
  puts("     Please input right way");
   Use_book();
 }
  
}
void Back_book()
{
 puts("     Pleae int Book_offical");
 puts("     -1,return last menu");
 int Book_offical;
 cin >> Book_offical;
 if (Book_offical == -1)
  return;
 List *L = Head;
 if (L == NULL)
 {
  puts("     Library don't have this book.\nplease find again");
  Find_book();
 }
 else
 {
  while (L)
  {
   if (Book_offical == L->offical_number)
   {
    puts("     return book sucess");
    L->offical_number++;
    return;
   }
  }
 }
 puts("     Library don't have this book.\nplease find again");
 Back_book();
}
void Bake_book_menu()
{
 puts("     1.还书(输入书号,如果没有该书的书号则进行提示,否则然后将馆藏量加1");
 puts("     0 Go to last menu");
 int n;
 cin >> n;
 if (!n)
  return;
 else if (n == 1)
  Back_book();
 else
 {
  puts("     Intput  error,please intput again");
  Bake_book_menu();
 }
}
void Exmine_library()
{
 List *L;
 L = Head;
 puts("     oooooooooooooooooo");
 puts("");
 while (L)
 {
  printf("     ");
  cout << L->offical_number << " " << L->book_name << " " << L->book_num << endl;
  L = L->next;
 }
 puts("");
 puts("     0000000000000000000");
 return;
}

运行实例
                                        **************************
                                        **Week7——图书管理系统**
                                        **************************
                                          0,End Program
                                          1.Add_book
                                          2,Delete_book
                                          3,Sort_book
                                          4,Find_book
                                          5,Lent_book
                                          6,Back_book
                                          7 output library information
                                          Please intput'0--7'
1
                                        输入的图书序号为'-1'时,则输入结束
5241 my_love 8848
1314 never_say_never 888
520 no_say 1111
-1
                                          0,End Program
                                          1.Add_book
                                          2,Delete_book
                                          3,Sort_book
                                          4,Find_book
                                          5,Lent_book
                                          6,Back_book
                                          7 output library information
                                          Please intput'0--7'
2
                                         1.根据书号删除输入书号
                                        2.根据书名删除输入书名
*************
                                        输入'0'返回上级菜单
1
                                        please intput  position
5241
                                        Delete success
                                          0,End Program
                                          1.Add_book
                                          2,Delete_book
                                          3,Sort_book
                                          4,Find_book
                                          5,Lent_book
                                          6,Back_book
                                          7 output library information
                                          Please intput'0--7'
7
                                        oooooooooooooooooo
                                        5241 my_love 8847
                                        1314 never_say_never 888
                                        520 no_say 1111
                                        0000000000000000000
                                          0,End Program
                                          1.Add_book
                                          2,Delete_book
                                          3,Sort_book
                                          4,Find_book
                                          5,Lent_book
                                          6,Back_book
                                          7 output library information
                                          Please intput'0--7'
2
                                         1.根据书号删除输入书号
                                        2.根据书名删除输入书名
*************
                                        输入'0'返回上级菜单
2
                                        Please intput Book_name
my_love
                                        Delete success
                                          0,End Program
                                          1.Add_book
                                          2,Delete_book
                                          3,Sort_book
                                          4,Find_book
                                          5,Lent_book
                                          6,Back_book
                                          7 output library information
                                          Please intput'0--7'
7
                                        oooooooooooooooooo
                                        5241 my_love 8846
                                        1314 never_say_never 888
                                        520 no_say 1111
                                        0000000000000000000
                                          0,End Program
                                          1.Add_book
                                          2,Delete_book
                                          3,Sort_book
                                          4,Find_book
                                          5,Lent_book
                                          6,Back_book
                                          7 output library information
                                          Please intput'0--7'
5
                                        1.借书 输入书号
                                        0.返回上一级菜单
0
                                          0,End Program
                                          1.Add_book
                                          2,Delete_book
                                          3,Sort_book
                                          4,Find_book
                                          5,Lent_book
                                          6,Back_book
                                          7 output library information
                                          Please intput'0--7'
3
                                        1.根据书号排序
                                        2.根据藏书量排序
                                        0.返回上一级菜单
1
                                        排序成功
                                          0,End Program
                                          1.Add_book
                                          2,Delete_book
                                          3,Sort_book
                                          4,Find_book
                                          5,Lent_book
                                          6,Back_book
                                          7 output library information
                                          Please intput'0--7'
7
                                        oooooooooooooooooo
                                        520 no_say 1111
                                        1314 never_say_never 888
                                        5241 my_love 8846
                                        0000000000000000000
                                          0,End Program
                                          1.Add_book
                                          2,Delete_book
                                          3,Sort_book
                                          4,Find_book
                                          5,Lent_book
                                          6,Back_book
                                          7 output library information
                                          Please intput'0--7'
3
                                        1.根据书号排序
                                        2.根据藏书量排序
                                        0.返回上一级菜单
2
                                        排序成功
                                          0,End Program
                                          1.Add_book
                                          2,Delete_book
                                          3,Sort_book
                                          4,Find_book
                                          5,Lent_book
                                          6,Back_book
                                          7 output library information
                                          Please intput'0--7'
7
                                        oooooooooooooooooo
                                        1314 never_say_never 888
                                        520 no_say 1111
                                        5241 my_love 8846
                                        0000000000000000000
                                          0,End Program
                                          1.Add_book
                                          2,Delete_book
                                          3,Sort_book
                                          4,Find_book
                                          5,Lent_book
                                          6,Back_book
                                          7 output library information
                                          Please intput'0--7'
4
                                        1.根据书名查找
                                        2.根据书号查找
                                         0.返回上一级菜单
1
                                        Please intput Book_name
my_love
                                        Libarary book information
5241 my_love 8846
                                        1.根据书名查找
                                        2.根据书号查找
                                         0.返回上一级菜单
2
                                        Please intput Book_offical
5241
                                        Libarary book information
5241 my_love 8846
                                        1.根据书名查找
                                        2.根据书号查找
                                         0.返回上一级菜单
0
                                          0,End Program
                                          1.Add_book
                                          2,Delete_book
                                          3,Sort_book
                                          4,Find_book
                                          5,Lent_book
                                          6,Back_book
                                          7 output library information
                                          Please intput'0--7'
5
                                          0,End Program
                                          1.Add_book
                                          2,Delete_book
                                          3,Sort_book
                                          4,Find_book
                                          5,Lent_book
                                          6,Back_book
                                          7 output library information
                                          Please intput'0--7'
6
                                        1.还书(输入书号,如果没有该书的书号则进行提示,否则然后将馆藏量加1
                                        0 Go to last menu
5241
                                        Intput  error,please intput again
                                        1.还书(输入书号,如果没有该书的书号则进行提示,否则然后将馆藏量加1
                                        0 Go to last menu
0
                                          0,End Program
                                          1.Add_book
                                          2,Delete_book
                                          3,Sort_book
                                          4,Find_book
                                          5,Lent_book
                                          6,Back_book
                                          7 output library information
                                          Please intput'0--7'
6
                                        1.还书(输入书号,如果没有该书的书号则进行提示,否则然后将馆藏量加1
                                        0 Go to last menu
1
                                        Pleae int Book_offical
                                        -1,return last menu
1314
                                        return book sucess
                                          0,End Program
                                          1.Add_book
                                          2,Delete_book
                                          3,Sort_book
                                          4,Find_book
                                          5,Lent_book
                                          6,Back_book
                                          7 output library information
                                          Please intput'0--7'

y

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值