单链表实现图书管理系统.doc

上传人:rrsccc 文档编号:8855817 上传时间:2021-01-20 格式:DOC 页数:18 大小:38.50KB
返回 下载 相关 举报
单链表实现图书管理系统.doc_第1页
第1页 / 共18页
单链表实现图书管理系统.doc_第2页
第2页 / 共18页
单链表实现图书管理系统.doc_第3页
第3页 / 共18页
单链表实现图书管理系统.doc_第4页
第4页 / 共18页
单链表实现图书管理系统.doc_第5页
第5页 / 共18页
点击查看更多>>
资源描述

《单链表实现图书管理系统.doc》由会员分享,可在线阅读,更多相关《单链表实现图书管理系统.doc(18页珍藏版)》请在三一文库上搜索。

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)cerrCannot open this file!book_head

2、1book_head2book_head3;/读取文件中的标题 while(!in()/到达文件尾部前逐行依次读取所有图书数据 p=new LNode; /生成新结点 inFilep-book.nump-book.namep-book.pri; p-next=L-next; /插入到表头 L-next=p;h in(); cout读取完毕!next; while(p) coutleftsetw(15)book.numtleftsetw(50)book.nametleftsetw(5)book.prinext; coutn信息显示完毕nnext; char name120; coutname1;

3、 while(p) if(strcmp(name1,p-book.name)=0) coutleftsetw(15)book.numtleftsetw(50)book.nametleftsetw(5)book.prinext; void Searchnum(LinkList &L) int i; int j=0; LinkList p; p=L-next; /p指向第一个结点 couti; while(p&jnext; if(!p|ji) /第i个元素不存在 cout错误!endl; cout第i本书信息如下:endl; coutleftsetw(15)book.numtleftsetw(50

4、)book.nametleftsetw(5)book.prinext; p=L-next-next; while(p) if(p-book.pripmax-book.pri)pmax=p; p=p-next; coutleftsetw(15)book.numtleftsetw(50)book.nametleftsetw(5)book.priendl;void Sort(LinkList L)cout此功能还未实现,研究中next; L-next = NULL; /初始化链表 ofstream outFile(bookinverse.txt);/每一次将p插入到L(头结点)与L-next(链表的

5、第一个结点之间) while (p) q = p-next; p-next = L-next; L-next = p; p = q; p=L-next;/循环完后,p指向的是链表末尾,需要重置回首元结点,否则无法写入文件 while(p) coutsetw(15)book.numtsetw(50)book.nametsetw(5)book.priendl; outFileleftsetw(15)book.numtleftsetw(50)book.nametleftsetw(5)book.prinext; cout信息已写入bookinverse.txt中!next; while(p) i+;

6、p=p-next; cout当前的图书总数为:iendl;void Insert(LinkList L) Book bk; LinkList p=L; /初始化 LinkList s=new LNode; /新结点s int i; int j=0; cout请输入待插入书籍的位置i; cout请输入待插入的书籍的信息endl; cout书号: bk.num; cout书名: bk.name; cout价格: bk.pri; while(p&jnext; if(!p|ji-1) cout错误!book=bk; /将结点s的数据域置为bk s-next=p-next; /将结点s插入L中 p-ne

7、xt=s; /重新写入book.txt文件 ofstream outFile(book.txt); p=L-next; while(p) outFileleftsetw(15)book.numtleftsetw(50)book.nametleftsetw(5)book.prinext; cout插入新的书籍后的书籍信息已重新写入book.txt文件endl;void Delete(LinkList L) Book bk1; LinkList p=L; /初始化 LinkList q; /临时保存被删除结点的地址以备释放 int i; int j=0; cout请输入待删除书籍的位置i; whi

8、le(p-next&jnext; if(!(p-next)|ji-1) cout错误!next; p-next=q-next; bk1=q-book; delete q; /重新写入book.txt文件 ofstream outFile(book.txt); p=L-next; while(p) outFileleftsetw(15)book.numtleftsetw(50)book.nametleftsetw(5)book.prinext; cout删除所选书籍后的书籍信息已重新写入book.txt文件endl;顺序表typedef struct Book *book; int length

9、;/图书表的图书记录个数SqList;void Input(SqList &L) int i=0;char book_head110,book_head210,book_head310; /定义文件中标题 L.book=new BookMAXSIZE; ifstream inFile(book.txt); /打开文件if(!inFile)cerrCannot open this file!book_head1book_head2book_head3;/读取文件中的标题L.length=0;while(!in() /逐行依次读取所有图书数据inFileL.booki.num L.booki.na

10、meL.booki.pri;i+; /记录图书个数 L.length=i;in();coutn读取 book.txt 信息完毕!endl;void Output(SqList L) for(int i=0;iL.length;i+)coutleftsetw(15)L.booki.numtleftsetw(50)L.booki.nametleftsetw(5)L.booki.priendl;coutn信息显示完毕nendl;void Searchname(SqList &L) int y; char name120; coutname1; for(y=0;yL.length;y+)/比较输入的n

11、ame1与结构体数组中name是否相同; if(strcmp(name1,L.booky.name)=0) coutleftsetw(15)L.booky.numtleftsetw(50)L.booky.nametleftsetw(5)L.booky.priendl; break; void Searchnum(SqList &L) int i; cout请输入要查找的书的位置i; coutleftsetw(15)L.booki-1.numleftsetw(50)L.booki-1.nameleftsetw(5)L.booki-1.priendl;void Max(SqList L)int m

12、ax=0;cout价格最高的书是:endl;cout书号t书名t价格endl;for (int i=0;iL.bookmax.pri)max=i;coutleftsetw(15)L.bookmax.numtleftsetw(50)L.bookmax.nametleftsetw(5)L.bookmax.priendl;for (int j=0;jL.length-1;j+)if(j!=max)if(L.bookj.pri=L.bookmax.pri)coutleftsetw(15)L.bookj.numtleftsetw(50)L.bookj.nametleftsetw(5)L.bookj.pr

13、iendl;coutendl;void Sort(SqList L) /冒泡排序 Book book1; /重新定义一个结构体变量 for(int m=0;mL.length-1;m+) for(int n=0;nL.length-m-1;n+)if(L.bookn.priL.bookn+1.pri) /交换结构体数组的值book1=L.bookn;L.bookn=L.bookn+1;L.bookn+1=book1; /写入booksort.txt文件 ofstream outFile(booksort.txt,ios:out); for(m=0;mL.length-1;m+) outFile

14、leftsetw(15)L.bookm.numtleftsetw(50)L.bookm.nametleftsetw(5)L.bookm.priendl; out(); cout排序后书籍信息已写入booksort.txt文件endl;void Inverse(SqList L) Input(L); Book book2; int i,j,k; k=L.length/2; for(i=0;ik;i+)j=L.length-1-i;book2=L.booki; L.booki=L.bookj;L.bookj=book2;/写入bookinverse.txt文件ofstream outFile(bo

15、okinverse.txt);for(i=0;iL.length;i+) outFileleftsetw(15)L.booki.numtleftsetw(50)L.booki.nametleftsetw(5)L.booki.priendl; out(); cout排序后书籍信息已写入bookinverse.txt文件endl;void Count(SqList L) cout当前的图书总数为:L.lengthendlendl;void Insert(SqList L) Book book3; int i; int j; cout请输入待插入书籍的位置i; cout请输入待插入的书籍的信息end

16、l; cout书号: book3.num; cout书名: book3.name; cout价格: book3.pri; if(iL.length+1) /i值不合法 cout输入的位置错误,请重新输入:endl; cout请输入待插入书籍的位置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;iL.leng

17、th;i+) outFileleftsetw(15)L.booki.numtleftsetw(50)L.booki.nametleftsetw(5)L.booki.priendl; out(); cout插入新的书籍后的书籍信息已重新写入book.txt文件endl;void Delete(SqList L) Book book4; int i; int j; cout请输入待删除书籍的位置i; if(iL.length) cout输入的位置错误,请重新输入:endl; cout请输入待删除书籍的位置i; book4=L.booki-1; /将要删除的元素保存在book4中 for(j=i;j=L.length-1;j+) L.bookj-1=L.bookj; /删除位置之后的元素前移 L.length-; /表长-1 /重新写入book.txt文件 ofstream outFile(book.txt);for(i=0;iL.length;i+) outFileleftsetw(15)L.booki.numtleftsetw(50)L.booki.nametleftsetw(5)L.booki.priendl; out(); cout删除所选书籍后的书籍信息已重新写入book.txt文件endl;18 / 18文档可自由编辑

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 社会民生


经营许可证编号:宁ICP备18001539号-1