数据结构课程设计图书管理系统
来源:互联网 发布:阜宁新闻网络发言人 编辑:程序博客网 时间:2024/04/26 15:50
*Copyright (c) 2017,烟台大学计算机与控制工程学院 *文件名称:图书信息管理系统*文件标识:无*内容摘要:实现图书信息的输入、插入、删除、修改、排序和输出*其他内容:无*当前版本:v1.0*完成日期:2017.12.21*创作人:高晶*/
#include <iostream>#include <iomanip>#include <stdio.h>#include <fstream>#include <string.h>#include <stdlib.h>#include <conio.h>//catch() 任意键继续#include <windows.h>//system("cls") 清屏#include "library.h"/************************************* 功能描述:申请一个新结点,并将其初始化* 输入参数:无* 输出参数:无************************************/void InitList(LinkList *&head)//创建一个头结点{head=(LinkList *)malloc(sizeof(LinkList));head->next=NULL;}void NewNode(LNode *head)// 创建完成调用addstudent()函数将新节点尾插法插入链表{ LNode *a;a=new LNode;//申请空间string s;cout<<"图书编号"<<endl;cin>>s;if(num(s,head)==1){ a->num=s;cout<<"图书名"<<endl;cin>>a->name;cout<<"图书作者: "<<endl;cin>>a->writer;cout<<"图书分类: "<<endl;cin>>a->fenlei;cout<<"图书价格: "<<endl;cin>>a->price;cout<<"图书数量: "<<endl;cin>>a->coun;addstudent(a,head);}elsecout<<"编号已重复"<<endl;}/************************************* 功能描述:创建新的一个图书结构体,新节点。* 输入参数:无* 输出参数:无************************************/void addstudent(LNode *a,LNode *head)//添加图书{ LNode *p;if(head==NULL)//如果链表为空{head =a;a->next=NULL;return;//插入完成返回}else{ p = head;//从头结点开始找 while(p)//p非空则一直循环 { if(p->next==NULL)//找到尾节点 { p->next =a; a->next =NULL;return;//插入完成返回 } p= p->next;//找下一个节点 }}}/************************************* 功能描述:销毁线性表* 输入参数:无* 输出参数:无************************************/void DestroyList(LinkList *&head)//销毁线性表{LinkList *pre=head->next,*p=head->next->next; //准备好前驱后置指针while (p!=NULL){free(pre);//释放内存空间pre=p;p=pre->next;}free(pre);head->next=NULL;cout<<"图书信息已清空"<<endl;}/************************************* 功能描述:求图书种类个数* 输入参数:无* 输出参数:无************************************/int ListLength(LinkList *head)//求图书个数{ int n=0; LinkList *p=head->next; while (p->next!=NULL) { n++; p=p->next; } return (n+1);}/************************************* 功能描述:显示所有图书的信息,调用shuchujiedian()函数* 输入参数:无* 输出参数:输出图书的名、号、作者、价格,分类号,数量************************************/void DispList(LNode *head)//输出线性表{LinkList *p=head->next;if(p==NULL){cout<<"现在还没图书信息,请先输入图书信息"<<endl;return;}else{while (p!=NULL) {shuchujiedian(p);p=p->next; }}cout<<"共有"<<ListLength(head)<<"个图书"<<endl;}/************************************* 功能描述:根据输入的编号删除图书信息* 输入参数:图书编号* 输出参数:无************************************/void deletestudent(LNode *head)//删除图书信息{string num;int m;LNode *p,*pre;cout<<"请输入要删除图书的编号:"; cin>>num; if (head==NULL) { cout<<"编号输入有误"<<endl; return; } else { p=pre=head;while(p){ if (p->num==num) { shuchujiedian(p); cout<<"是否要删除图书信息?"<<endl; cout<<" 1.是 2.不是 "<<endl; cin>>m;if(m==1){if(p==head){head = head->next;free(p);p=NULL;cout<<"图书成绩信息删除!"<<endl;return;} else {pre->next =p->next;free(p);p=NULL;cout<<"图书信息已删除!"<<endl;return; }}if(m==2){return;}}else {pre=p;p=p->next; } }}cout<<"编号输入有误"<<endl;}/************************************* 功能描述:根据输入的名查找信息* 输入参数:图书编号* 输出参数:无************************************/void findstudentname(LNode *head)//按名查图书{ string name; int i=0;cout<<"请输入要查找的图书名"<<endl;cin>>name;LNode *p=head;if (head==NULL){cout<<"现在还没图书信息,请先输入图书信息"<<endl;return;}while(p){ if (p->name==name) { shuchujiedian(p); i++; } p= p->next;}if(i==0)cout<<"没有该本图书!"<<endl;}void findstudentnum(LNode *head)//按号查找图书{ string num;cout<<"请输入要查找的图书编号"<<endl;cin>>num;LNode *p=head;if (head==NULL){cout<<"现在还没图书信息,请先输入图书信息"<<endl;return;}p=head;while(p){ if (p->num==num) { shuchujiedian(p); return; } p= p->next;}cout<<"没有该本图书!"<<endl;}/************************************* 功能描述:判断编号是否重复* 输入参数:无* 输出参数:无************************************/int num(string a,LNode *head)//判断号是否重复{ for(LNode *p=head;p!=NULL;p=p->next) if(p->num==a) return 0; return 1;}/************************************* 功能描述:根据输入的编号查找信息* 输入参数:图书号* 输出参数:无************************************/void ChangeMarkByNum(LNode *head)//根据号修改图书{ LNode *p; string num; int m; int mark1; string mark2; string mark3; p=head; cout<<"请输入图书编号: "<<endl; cin>>num; while(p) { if(p->num==num) { shuchujiedian(p); cout<<"是否要修改图书信息?"<<endl; cout<<" 1.是 2.不是 "<<endl; cin>>m; if(m==1){cout<<"请输入新的分类号"<<endl;cin>>mark3;cout<<"请输入新的价格"<<endl;cin>>mark2;cout<<"请输入新的数量"<<endl;cin>>mark1;p->coun=mark1;p->fenlei=mark2;p->price=mark3;cout<<"信息修改成功!"<<endl;shuchujiedian(p);return;}if(m==2){cout<<"图书信息保留!"<<endl;return;} break;} p=p->next;} cout<<"对不起,不存在编号为"<<num<<"的图书"<<endl;}/************************************* 功能描述:输出一个结点信息* 输入参数:无* 输出参数:输出图书的名、号、作者、分类号和数量************************************/void shuchujiedian(LNode *p)//输出一个结点信息{ cout<<"编号:"<<p->name; cout<<setw(8)<<"图书名:"<<p->name; cout<<setw(8)<<"作者:"<<p->writer; cout<<setw(8)<<"分类号:"<<p->fenlei; cout<<setw(8)<<"价格:"<<p->price; cout<<setw(8)<<"数量:"<<p->coun<<endl;;}/************************************* 功能描述:保存链表数据到文件* 输入参数:无* 输出参数:无************************************/void Save(LNode *head)//保存链表数据到文件{ LNode *p1; int h; ofstream out; h=ListLength(head); out.open("xuesheng.txt",ios::app); if(!out) { cout<<"打开文件失败!"<<endl; } p1=head->next; out<<h<<endl; while(p1) { out<<p1->num<<setw(5)<<p1->name<<setw(5)<<p1->writer<<setw(5)<<p1->coun<<setw(5)<<p1->fenlei<<setw(5)<<p1->price<<setw(5)<<endl; p1=p1->next; } out.close(); cout<<"保存成功!"<<endl; cout<<"输入任意字符!继续……"; getch();}void qing(){ ofstream out; out.open("xuesheng.txt",ios::trunc); if(!out) { cout<<"打开文件失败!"<<endl; } cout<<"清除成功!"<<endl; out.close(); cout<<"输入任意字符!继续……"; getch();}/************************************* 功能描述:交换两个图书信息* 输入参数:无* 输出参数:无************************************/void huan(LNode *q,LNode *p){ LNode change;change.name=q->name;//将q结点的信息给changechange.num=q->num;change.writer=q->writer;change.coun=q->coun;change.price=q->price;change.fenlei=q->fenlei;q->name=p->name;//将p结点的信息给qq->num=p->num;q->writer=p->writer;q->coun=p->coun;q->price=p->price;q->fenlei=p->fenlei;p->name=change.name;//将change结点的信息给pp->num=change.num;p->writer=change.writer;p->coun=change.coun;p->price=change.price;p->fenlei=change.fenlei;}/************************************* 功能描述:按编号排序* 输入参数:无* 输出参数:图书信息************************************/void pai(LNode *head){ LNode change,*p,*q,*r;r=head->next;if(r==NULL){cout<<"现在还没图书信息,请先输入图书信息"<<endl;return;} while(r) { p=r; q=r->next; while(q) { if((q->num)<(p->num)) huan(q,p); q=q->next;}r=r->next; } DispList(head);}/************************************* 功能描述:显示菜单,根据用户的输入完成相应的功能* 输入参数:你要选择的功能的序号* 输出参数:选择的功能************************************/void Menu(LNode *head)// 显示菜单,根据用户的输入{ int choose; int m=0; cout<<" 图书 管理 系 统 "<<endl; cout<<" 1.----采编入库 "<<endl; cout<<" 2.----浏览图书信息 "<<endl; cout<<" 3.----删除图书信息 "<<endl; cout<<" 4.----查找图书信息 "<<endl; cout<<" 5.----修改图书信息 "<<endl; cout<<" 6.----保存图书信息 "<<endl; cout<<" 7.----清除已有信息 "<<endl; cout<<" 8.----清除文件信息 "<<endl; cout<<" 9.----按编号排序 "<<endl; cout<<" 0.----安全退出系统 "<<endl; cin>>choose;/*取得用户的选择*/ while(1) { if(choose<0||choose>10) { cout<<"您输入的选项不存在,请重新输入"<<endl; cin>>choose; } else break; } switch(choose) { case 0: exit(0); case 1: system("cls"); NewNode(head); //创建新的一个tushu结构体,新节点 cout<<"输入任意字符!继续……"<<endl; getch(); break; case 2: system("cls"); DispList(head);//输出图书信息 cout<<"输入任意字符!继续……"<<endl; getch(); break; case 3: system("cls"); deletestudent(head);//删除图书信息 cout<<"输入任意字符!继续……"<<endl; getch(); break; case 4: system("cls"); cout<<"请选择"<<endl; cout<<"1.按图书名查找 2.按编号查找"<<endl; cin>>m; if(m==1) findstudentname(head);//根据名查找图书信息 else findstudentnum(head);//按照号查找图书信息 cout<<"输入任意字符!继续……"<<endl; getch(); break; case 5: system("cls"); ChangeMarkByNum(head);//根据用户输入的号修改图书 getch(); break; case 6: system("cls"); Save(head);//保存数据 break; case 7: system("cls"); DestroyList(head);//清空图书信息 getch(); break; case 8: system("cls"); qing(); break; case 9: system("cls"); pai(head); break; default: break; } Menu(head);}
运行截图:
主菜单:
采编入库:
浏览图书信息:
删除
查找
修改
保存
排序
阅读全文
0 0
- 数据结构课程设计 图书管理系统
- 数据结构课程设计-图书管理系统
- 数据结构课程设计--图书管理系统
- 数据结构课程设计-图书管理系统
- 数据结构课程设计--图书管理系统
- 数据结构课程设计-图书管理系统
- 数据结构课程设计图书管理系统
- 数据结构课程设计(图书管理系统)
- 数据结构课程设计-图书管理系统 作者:彭子竹
- 数据结构课程设计之图书管理系统
- 数据结构课程设计—图书管理系统
- 数据结构课程设计—图书管理系统
- 数据结构课程设计-图书管理开发系统
- 数据结构课程设计——图书管理系统
- 课程设计:图书管理系统
- 课程设计:图书管理系统
- 课程设计--图书管理系统
- 数据结构课程设计--“模拟图书管理系统的开发”
- 1010 只包含因子2 3 5的数
- bzoj 1143:[CTSC2008]祭祀river 二分图最大独立集
- 数据结构课程设计--学生信息管理系统
- android 线程(AsyncTask,Threadhandler,intentService)详解
- 《七点三刻》043期 《妖猫传》上映/百度华为合作/王尼玛不干了…
- 数据结构课程设计图书管理系统
- MYSQL中字段char类型和varchar类型的区别
- 阅读《人类简史》思考的几个问题。
- 面相对象的三大特征
- 科大讯飞将建首个人工智能国家重点实验室
- JVM性能调优监控工具jps、jstack、jmap、jhat、jstat、hprof使用详解
- 封装
- 数据结构课程设计考生报名系统
- 程序员的四种境界