单链表实现图书管理系统_第1页
单链表实现图书管理系统_第2页
单链表实现图书管理系统_第3页
单链表实现图书管理系统_第4页
单链表实现图书管理系统_第5页
已阅读5页,还剩4页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、单链表:typedef struct char num20; char name50; float pri; Book;typedef struct LNode /线性表的单链表存储 Book book; /数据域struct LNode *next; /指针域LNode,*LinkList;void Input(LinkList &L) /前插法创建图书链表 LinkList p; L=new LNode; L->next=NULL;/初始化单链表 ifstream inFile("book.txt"); if(!inFile)cerr<<&qu

2、ot;Cannot open this file!"<<endl;exit(1); char book_head110,book_head210,book_head310; /定义文件中标题 inFile>>book_head1>>book_head2>>book_head3;/读取文件中的标题 while(!inFile.eof()/到达文件尾部前逐行依次读取所有图书数据 p=new LNode; /生成新结点 inFile>>p->book.num>>p->>>p-&

3、gt;book.pri; p->next=L->next; /插入到表头 L->next=p;h inFile.close(); cout<<"读取完毕!"<<endl;void Output(LinkList &L)/输出 LinkList p; p=L->next; while(p) cout<<left<<setw(15)<<p->book.num<<"t"<<left<<setw(50)<<p->

4、<<"t"<<left<<setw(5)<<p->book.pri<<endl; p=p->next; cout<<"n信息显示完毕n"<<endl;void Searchname(LinkList &L) LinkList p; p=L->next; char name120; cout<<"请输入要查找的书名:" cin>>name1; while(p) if(strcmp(nam

5、e1,p->)=0) cout<<left<<setw(15)<<p->book.num<<"t"<<left<<setw(50)<<p-><<"t"<<left<<setw(5)<<p->book.pri<<endl; p=p->next; void Searchnum(LinkList &L) int i; int j=0; LinkL

6、ist p; p=L->next; /p指向第一个结点 cout<<"请输入要查找的书籍的位置" cin>>i; while(p&&j<i-1) /顺着链表向后扫描,直到p指向第i个元素或p为空 j+;p=p->next; if(!p|j>i) /第i个元素不存在 cout<<"错误!"<<endl; cout<<"第"<<i<<"本书信息如下:"<<endl; cout<&

7、lt;left<<setw(15)<<p->book.num<<"t"<<left<<setw(50)<<p-><<"t"<<left<<setw(5)<<p->book.pri<<endl; void Max(LinkList &L) LinkList pmax,p; pmax=L->next; p=L->next->next; while(p) if(p-&g

8、t;book.pri>pmax->book.pri)pmax=p; p=p->next; cout<<left<<setw(15)<<pmax->book.num<<"t"<<left<<setw(50)<<pmax-><<"t"<<left<<setw(5)<<pmax->book.pri<<endl;void Sort(LinkList L)cout<

9、;<"此功能还未实现,研究中"<<endl;void Inverse(LinkList &L)LinkList p; /待插入到链表的节点LinkList q; p = L->next; L->next = NULL; /初始化链表 ofstream outFile("bookinverse.txt");/每一次将p插入到L(头结点)与L->next(链表的第一个结点之间) while (p) q = p->next; p->next = L->next; L->next = p; p

10、= q; p=L->next;/循环完后,p指向的是链表末尾,需要重置回首元结点,否则无法写入文件 while(p) cout<<setw(15)<<p->book.num<<"t"<<setw(50)<<p-><<"t"<<setw(5)<<p->book.pri<<endl; outFile<<left<<setw(15)<<p->book.num<<

11、;"t"<<left<<setw(50)<<p-><<"t"<<left<<setw(5)<<p->book.pri<<endl; p=p->next; cout<<"信息已写入bookinverse.txt中!"<<endl;void Count(LinkList L) int i=0; LinkList p; p=L->next; while(p) i+; p=p->

12、;next; cout<<"当前的图书总数为:"<<i<<endl;void Insert(LinkList L) Book bk; LinkList p=L; /初始化 LinkList s=new LNode; /新结点s int i; int j=0; cout<<"请输入待插入书籍的位置"<<endl; cin>>i; cout<<"请输入待插入的书籍的信息"<<endl; cout<<"书号: "&

13、lt;<endl; cin>>bk.num; cout<<"书名: "<<endl; cin>>; cout<<"价格: "<<endl; cin>>bk.pri; while(p&&j<i-1) /寻找第i-1个结点 j+; p=p->next; if(!p|j>i-1) cout<<"错误!"<<endl; s->book=bk; /将结点s的数据域置为bk s-&

14、gt;next=p->next; /将结点s插入L中 p->next=s; /重新写入book.txt文件 ofstream outFile("book.txt"); p=L->next; while(p) outFile<<left<<setw(15)<<p->book.num<<"t"<<left<<setw(50)<<p-><<"t"<<left<<setw(5)

15、<<p->book.pri<<endl; p=p->next; cout<<"插入新的书籍后的书籍信息已重新写入book.txt文件"<<endl;void Delete(LinkList L) Book bk1; LinkList p=L; /初始化 LinkList q; /临时保存被删除结点的地址以备释放 int i; int j=0; cout<<"请输入待删除书籍的位置"<<endl; cin>>i; while(p->next&&am

16、p;j<i-1) j+; p=p->next; if(!(p->next)|j>i-1) cout<<"错误!"<<endl; q=p->next; p->next=q->next; bk1=q->book; delete q; /重新写入book.txt文件 ofstream outFile("book.txt"); p=L->next; while(p) outFile<<left<<setw(15)<<p->book.num<

17、;<"t"<<left<<setw(50)<<p-><<"t"<<left<<setw(5)<<p->book.pri<<endl; p=p->next; cout<<"删除所选书籍后的书籍信息已重新写入book.txt文件"<<endl;顺序表typedef struct Book *book; int length;/图书表的图书记录个数SqList;void Input

18、(SqList &L) int i=0;char book_head110,book_head210,book_head310; /定义文件中标题 L.book=new BookMAXSIZE; ifstream inFile("book.txt"); /打开文件if(!inFile)cerr<<"Cannot open this file!"<<endl;exit(1);inFile>>book_head1>>book_head2>>book_head3;/读取文件中的标题L.leng

19、th=0;while(!inFile.eof() /逐行依次读取所有图书数据inFile>>L.booki.num >>L.>>L.booki.pri;i+; /记录图书个数 L.length=i;inFile.close();cout<<"n读取 book.txt 信息完毕!"<<endl;void Output(SqList L) for(int i=0;i<L.length;i+)cout<<left<<setw(15)<<L.booki.num&

20、lt;<"t"<<left<<setw(50)<<L.<<"t"<<left<<setw(5)<<L.booki.pri<<endl;cout<<"n信息显示完毕n"<<endl;void Searchname(SqList &L) int y; char name120; cout<<"请输入要查找的书名:" cin>>name1; fo

21、r(y=0;y<L.length;y+)/比较输入的name1与结构体数组中name是否相同; if(strcmp(name1,L.)=0) cout<<left<<setw(15)<<L.booky.num<<"t"<<left<<setw(50)<<L.<<"t"<<left<<setw(5)<<L.booky.pri<<endl; break; void Sea

22、rchnum(SqList &L) int i; cout<<"请输入要查找的书的位置"<<endl; cin>>i; cout<<left<<setw(15)<<L.booki-1.num<<left<<setw(50)<<L.<<left<<setw(5)<<L.booki-1.pri<<endl;void Max(SqList L)int max=0;cout<<&quo

23、t;价格最高的书是:"<<endl;cout<<"书号"<<"t"<<"书名"<<"t"<<"价格"<<endl;for (int i=0;i<L.length;i+)if(L.booki.pri>L.bookmax.pri)max=i;cout<<left<<setw(15)<<L.bookmax.num<<"t"<

24、<left<<setw(50)<<L.<<"t"<<left<<setw(5)<<L.bookmax.pri<<endl;for (int j=0;j<L.length-1;j+)if(j!=max)if(L.bookj.pri=L.bookmax.pri)cout<<left<<setw(15)<<L.bookj.num<<"t"<<left<<setw(50)&

25、lt;<L.<<"t"<<left<<setw(5)<<L.bookj.pri<<endl;cout<<endl;void Sort(SqList L) /冒泡排序 Book book1; /重新定义一个结构体变量 for(int m=0;m<L.length-1;m+) for(int n=0;n<L.length-m-1;n+)if(L.bookn.pri<L.bookn+1.pri) /交换结构体数组的值book1=L.bookn;L.bookn=L.b

26、ookn+1;L.bookn+1=book1; /写入booksort.txt文件 ofstream outFile("booksort.txt",ios:out); for(m=0;m<L.length-1;m+) outFile<<left<<setw(15)<<L.bookm.num<<"t"<<left<<setw(50)<<L.<<"t"<<left<<setw(5)<<

27、;L.bookm.pri<<endl; outFile.close(); cout<<"排序后书籍信息已写入booksort.txt文件"<<endl;void Inverse(SqList L) Input(L); Book book2; int i,j,k; k=L.length/2; for(i=0;i<k;i+)j=L.length-1-i;book2=L.booki; L.booki=L.bookj;L.bookj=book2;/写入bookinverse.txt文件ofstream outFile("booki

28、nverse.txt");for(i=0;i<L.length;i+) outFile<<left<<setw(15)<<L.booki.num<<"t"<<left<<setw(50)<<L.<<"t"<<left<<setw(5)<<L.booki.pri<<endl; outFile.close(); cout<<"排序后书籍信息已写入bookinv

29、erse.txt文件"<<endl;void Count(SqList L) cout<<"当前的图书总数为:"<<L.length<<endl<<endl;void Insert(SqList L) Book book3; int i; int j; cout<<"请输入待插入书籍的位置"<<endl; cin>>i; cout<<"请输入待插入的书籍的信息"<<endl; cout<<&qu

30、ot;书号: "<<endl; cin>>book3.num; cout<<"书名: "<<endl; cin>>; cout<<"价格: "<<endl; cin>>book3.pri; if(i<1|i>L.length+1) /i值不合法 cout<<"输入的位置错误,请重新输入:"<<endl; cout<<"请输入待插入书籍的位置"<<endl; cin>>i; for(j=L.length-1;j>=i-1;j-) L.bookj+1=L.bookj; /输入位置及之后的元素位置后移 L.booki-1=book3; /将新元素book3放入第i个位置 L.length+; /表长增加1 /重新写入book.txt文件 ofstream outFile("book.txt"); for(i=0;i<L.le

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论