当前位置:文档之家› 单链表实现图书管理系统

单链表实现图书管理系统

实用文档 单链表:typedef struct {

char num[20]; char name[50]; 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<<"Cannot open this file!">book_head1>>book_head2>>book_head3;//读取文件中的标题

while(!inFile.eof()){//到达文件尾部前逐行依次读取所有图书数据 p=new LNode; //生成新结点 inFile>>p->book.num>>p->book.name>>p->book.pri; p->next=L->next; //插入到表头 L->next=p;h } inFile.close(); cout<<"读取完毕!"<} void Output(LinkList &L){//输出 LinkList p; p=L->next; while(p){

coutnext; } cout<<"\n信息显示完毕\n"<实用文档 } void Searchname(LinkList &L){ LinkList p; p=L->next; char name1[20]; cout<<"请输入要查找的书名:"; cin>>name1; while(p){ if(strcmp(name1,p->book.name)==0){

coutnext; } } void Searchnum(LinkList &L){ int i; int j=0; LinkList p; p=L->next; //p指向第一个结点 cout<<"请输入要查找的书籍的位置"; cin>>i; while(p&&j

j++; p=p->next; } if(!p||j>i){ //第i个元素不存在 cout<<"错误!"< } cout<<"第"<

cout

void Max(LinkList &L){ LinkList pmax,p; pmax=L->next; p=L->next->next; while(p){ if(p->book.pri>pmax->book.pri) pmax=p; 实用文档 p=p->next; }

cout

void Sort(LinkList L){ cout<<"此功能还未实现,研究中"<}

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 = q; } p=L->next;//循环完后,p指向的是链表末尾,需要重置回首元结点,否则无法写入文件 while(p){

cout

outFilenext; } cout<<"信息已写入bookinverse.txt中!"<} void Count(LinkList L){ int i=0; LinkList p; p=L->next; while(p){ i++; p=p->next; 实用文档 } cout<<"当前的图书总数为:"<}

void Insert(LinkList L){ Book bk; LinkList p=L; //初始化 LinkList s=new LNode; //新结点s int i; int j=0; cout<<"请输入待插入书籍的位置"< cin>>i; cout<<"请输入待插入的书籍的信息"< cout<<"书号: "< cin>>bk.num; cout<<"书名: "< cin>>bk.name; cout<<"价格: "< cin>>bk.pri; while(p&&j j++; p=p->next; } if(!p||j>i-1){ cout<<"错误!"< } s->book=bk; //将结点s的数据域置为bk s->next=p->next; //将结点s插入L中 p->next=s;

//重新写入book.txt文件 ofstream outFile("book.txt"); p=L->next; while(p){

outFilenext; } cout<<"插入新的书籍后的书籍信息已重新写入book.txt文件"<} void Delete(LinkList L){ Book bk1; LinkList p=L; //初始化 实用文档 LinkList q; //临时保存被删除结点的地址以备释放 int i; int j=0; cout<<"请输入待删除书籍的位置"< cin>>i; while(p->next&&j j++; p=p->next; } if(!(p->next)||j>i-1){ cout<<"错误!"< } q=p->next; p->next=q->next; bk1=q->book; delete q;

//重新写入book.txt文件 ofstream outFile("book.txt"); p=L->next; while(p){

outFilenext; } cout<<"删除所选书籍后的书籍信息已重新写入book.txt文件"<}

顺序表 typedef struct{ Book *book; int length;//图书表的图书记录个数 }SqList;

void Input(SqList &L){ int i=0; char book_head1[10],book_head2[10],book_head3[10]; //定义文件中标题 L.book=new Book[MAXSIZE];

ifstream inFile("book.txt"); //打开文件 if(!inFile) {

相关主题