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 f
2、ile!book_head1book_head2book_head3;/读取文件中的标题 while(!inFile.eof()/到达文件尾部前逐行依次读取所有图书数据 p=new LNode; /生成新结点 inFilep-book.nump-book.namep-book.pri; p-next=L-next; /插入到表头 L-next=p;h inFile.close(); cout读取完毕!next; while(p) coutleftsetw(15)book.numtleftsetw(50)book.nametleftsetw(5)book.prinext; coutn信息显示完毕
3、nnext; char name120; coutname1; 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; coutl
4、eftsetw(15)book.numtleftsetw(50)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(bookinvers
5、e.txt); /每一次将p插入到L(头结点)与L-next(链表的第一个结点之间) 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信息已写入bo
6、okinverse.txt中!next; while(p) i+; 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的数据域
7、置为bk s-next=p-next; /将结点s插入L中 p-next=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
8、 i; int j=0; cout请输入待删除书籍的位置i; while(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;顺序表typ
9、edef struct Book *book; int length;/图书表的图书记录个数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(!inFile.
10、eof() /逐行依次读取所有图书数据 inFileL.booki.num L.booki.nameL.booki.pri; i+; /记录图书个数 L.length=i; inFile.close(); 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+) /比较输入的name1与结构体数组中name是否相同; if(strcmp(name1,L.booky.name)=0) coutl
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1