C++课程设计(图书管理系统)

来源:互联网 发布:mac 日历 广告 编辑:程序博客网 时间:2024/05/01 11:01
#include <iostream>#include <iomanip>#include <cstring>using namespace std;#define N 20struct book   //一本书所应该包含的内容(名字,书籍编码,作者,出版社,库存){char name[N];//名字int num;//书籍编码char author[N];//作者char pub[N];//出版社int total;//这本书总共数量book *next;}*head=NULL,*p1,*p2;int n=0;    /********************增加书籍**********************/book *creat()    //建立链表  {        p1=new(book);            //开辟动态内存存储空间存放新结点      cout<<"请输入要增加的书籍编号,输入为0时停止输入: ";      cin>>p1->num;     while(p1->num!=0)      {          n++;          if(n==1)              head=p1;            //第一个结点赋给头结点          else                  p2->next=p1;     //往下链接新建立的结点              cout<<"请输入书籍名字:";              cin>>p1->name;              cout<<"请输入书籍作者:";              cin>>p1->author;              cout<<"请输入书籍出版社:";              cin>>p1->pub;  cout<<"请输入要添加该书籍数目:";cin>>p1->total;            p2=p1;              cout<<"请输入要增加的书籍编号,输入为0时停止输入: ";          p1=new(book);        //继续开辟动态内存存储空间存放新结点          cin>>p1->num;      }cout<<endl<<endl;    delete p1;                  //停止建立新结点      p2->next=NULL;                     return head;  } /*********************输出显示当前书籍信息*******************/ void print(book *head)//输出链表  {      book *p;      p=head;      if(p==NULL){cout<<"书库里没有书籍! "<<endl;        return;}    cout<<"目前书库所含书籍信息为:"<<endl<<"编号"<<"      "<<"名字"<<"        "<<"作者"<<"        "<<"出版社"<<"        "<<"数目"<<endl;do      {  cout<<p->num<<"      "<<p->name<<setw(10)<<p->author<<"    "<<p->pub<<setw(10)<<p->total<<endl;          p=p->next;      }      while(p!=NULL);    }/****************删除书籍**************************/book *del(book *head)         //删除结点  {      book *p1,*p2; int num;if(head==NULL)          //如果原先链表为空      {          cout<<"书库里没有书籍!"<<endl;          return head;      }  cout<<"请输入要删除书籍的编码:"<<endl;cin>>num;    p1=head;      while(num!=p1->num && p1->next!=NULL)     //找不到相应的结点就往下继续搜索      {          p2=p1;          p1=p1->next;      }      if(num==p1->num)         //找到结点      {          if(p1==head)            //结点是第一位              head=p1->next;          else                    //结点不是第一位              p2->next=p1->next;          cout<<"删除成功"<<endl<<endl;          n--;  print(head);    }      else          cout<<"不存在该编号的书籍"<<endl<<endl;        return head;  }  /****************通过编号查询书籍**************************/void find_num(book *head)         //删除结点  {      book *p1; int num;cout<<"请输入要查询的书籍编号:"<<endl;cin>>num;    if(head==NULL)          //如果原先链表为空      {          cout<<"书库里没有书籍!"<<endl;  return;    }      p1=head;      while(num!=p1->num && p1->next!=NULL)     //找不到相应的结点就往下继续搜索      {           p1=p1->next;      }      if(num==p1->num)         //找到结点      {          cout<<"查找到的书籍信息为:"<<endl<<"编号"<<"    "<<"名字"<<"    "<<"作者"<<"    "<<"出版社"<<"    "<<"数目"<<endl;cout<<p1->num<<setw(10)<<p1->name<<setw(7)<<p1->author<<setw(10)<<p1->pub<<setw(8)<<p1->total<<endl;    }      else          cout<<"找不到该书籍!"<<endl<<endl;   }/****************通过书名查询书籍**************************/void find_name(book *head)         //删除结点  {      book *p1;char name[N];cout<<"请输入要查询的书籍名字:"<<endl;cin>>name;  if(head==NULL)          //如果原先链表为空      {          cout<<"书库里没有书籍!"<<endl;return;    }      p1=head;      while(strcmp(name,p1->name)!=0 && p1->next!=NULL)     //找不到相应的结点就往下继续搜索      {           p1=p1->next;      }      if(strcmp(name,p1->name)==0)         //找到结点      {          cout<<"查找到的书籍信息为:"<<endl<<"编号"<<"    "<<"名字"<<"    "<<"作者"<<"    "<<"出版社"<<"    "<<"数目"<<endl;cout<<p1->num<<setw(10)<<p1->name<<setw(7)<<p1->author<<setw(10)<<p1->pub<<setw(8)<<p1->total<<endl;    }      else          cout<<"找不到该书籍!"<<endl<<endl;   }/*********************借阅书籍*******************/ book *borrow(book *head){if(head==NULL)          //如果原先链表为空      {          cout<<"书库里没有书籍!"<<endl;return head;    }  cout<<"请输入要借阅书籍的名称:"<<endl;char name[N];cin>>name;book *p1;    p1=head;      while(strcmp(name,p1->name)!=0 && p1->next!=NULL)     //找不到相应的结点就往下继续搜索      {           p1=p1->next;      }      if(strcmp(name,p1->name)==0)         //找到结点      {  cout<<"查找到的书籍信息为:"<<endl<<"编号"<<"    "<<"名字"<<"    "<<"作者"<<"    "<<"出版社"<<"    "<<"数目"<<endl;cout<<p1->num<<setw(10)<<p1->name<<setw(7)<<p1->author<<setw(10)<<p1->pub<<setw(8)<<p1->total<<endl;if(p1->total!=0){cout<<"确定要借阅该书籍吗?"<<endl<<"1.确定"<<'\t'<<"2.取消"<<endl;int num; cin>>num;switch(num){case 1:cout<<"借阅成功!"<<endl;(p1->total)--;break;case 2: break;default:cout<<"输入有误!"<<endl;break;}}elsecout<<"书籍已全被借阅!"<<endl;    }      else          cout<<"找不到该书籍!"<<endl<<endl;   return head;}/*********************归还书籍*********************/book *back(book *head){if(head==NULL)          //如果原先链表为空      {          cout<<"书库未借出过任何书籍! "<<endl;return head;    }  cout<<"请输入要归还书籍的名称:"<<endl;char name[N];cin>>name;book *p1;    p1=head;      while(strcmp(name,p1->name)!=0 && p1->next!=NULL)     //找不到相应的结点就往下继续搜索      {           p1=p1->next;      }      if(strcmp(name,p1->name)==0)         //找到结点      {  cout<<"确定要归还该书籍吗?"<<endl<<"1.确定"<<'\t'<<"2.取消"<<endl;int num; cin>>num;switch(num){case 1:cout<<"还书成功!"<<endl;(p1->total)++;break;case 2: break;default:cout<<"输入有误!"<<endl;break;}    }      else          cout<<"不存在该书籍!"<<endl<<endl;   return head;}  /***********************查询菜单***********************/void find(){int num;cout<<"***************************************************"<<endl;cout<<"*           请输入对应功能的数字完成操作          *"<<endl;cout<<"*                 1.通过编号查找                  *"<<endl;cout<<"*                 2.通过书名查找                  *"<<endl;cout<<"***************************************************"<<endl;cin>>num;switch(num){case 1:find_num(head);break;case 2:find_name(head);break;default:cout<<"输入有误!"<<endl;break;}}    /***********************管理菜单***********************/void manage(){int num1;cout<<"请输入管理员密码(123456):"<<endl;//规定只有管理员才有权限增减图书cin>>num1;if(num1==123456){int num;cout<<"***************************************************"<<endl;cout<<"*           请输入对应功能的数字完成操作          *"<<endl;cout<<"*                     1.增加书籍                  *"<<endl;cout<<"*                     2.删除书籍                  *"<<endl;cout<<"***************************************************"<<endl;cin>>num;switch(num){case 1:head=creat();print(head);break;case 2:head=del(head);break;default:cout<<"输入有误!"<<endl;break;}}elsecout<<"输入错误,你没有权限修改图书管理系统!"<<endl;}void displaymain(){cout<<"***************************************************"<<endl;cout<<"*           请输入对应功能的数字完成操作          *"<<endl;cout<<"*                     1.查询                      *"<<endl;cout<<"*                     2.借书                      *"<<endl;cout<<"*                     3.还书                      *"<<endl;cout<<"*                     4.管理                      *"<<endl;cout<<"*                     5.书库                      *"<<endl;cout<<"*                     6.退出                      *"<<endl;cout<<"***************************************************"<<endl;} int main(){cout<<endl<<"                        欢迎使用图书管理系统"<<endl<<endl;int choice=1;while(choice!=0){displaymain();cin>>choice;switch(choice){case 1:find();break;case 2: head=borrow(head);break;case 3: head=back(head);break;case 4:manage();break;case 5:print(head);break;case 6:choice=0;break;default:cout<<"输入有误,请重新输入!"<<endl;break;}}cout<<"***************************************************"<<endl;cout<<"*                                                 *"<<endl;cout<<"*                  感谢您的使用!                  *"<<endl;cout<<"*                                                 *"<<endl;cout<<"*     designer:赵锦堃          from:自动化1122    *"<<endl;cout<<"*                                                 *"<<endl;cout<<"***************************************************"<<endl;return 0;}


菜单首页


进入界面要首先为书库添加书籍,否则其它操作无法完成例如


添加书籍在管理板块,但是我设定了只有管理员才有权限添加,这样加强了系统的安全性


选择相应编号添加书籍,输入书籍的相关信息,输入结束后会显示出所有书籍信息


如果删除书籍只需输入对应的编码便可以删除(前提也是要有管理员权限并且书籍的编码正确)


查询模块有按书名查找和按编号查找

按编号查找

按书名查找


当要找的书书库没有


借书模块是输入书名查找(因为我们借书通常都只知道书名,总不可能还没借到书就知道书的编号了吧!)


当借了书之后该书籍总量就会少一本,


当总量只剩下0本,系统就会提示借不了了


同样,还书的话如果书库有这本书,那它的总量就会+1了


还书后书库显示


最后是退出界面



1 0
原创粉丝点击