图书库存管理的设计与实现
- 格式:doc
- 大小:302.00 KB
- 文档页数:19
学号:0121110340134基础强化训练题目图书库存管理的设计与实现学院计算机科学与技术专业计算机科学与技术班级计科1101班姓名李梦瑶指导教师闵联营2013 年9 月 2 日目录一.任务书 (1)二.课程设计 (2)2.1系统描述 (2)2.1.1问题分析 (2)2.1.2数据需求 (2)2.1.3功能需求 (2)2.2系统 (2)2.2.1内存数据结构设计 (2)2.2.2数据文件设计 (3)2.3系统测试 (3)2.3.1输入\输出设计 (3)2.3.2用户界面设计 (3)三.源程序 (5)四.评分表 (17)计算机基础强化训练任务书学生姓名:李梦瑶专业班级:计科1101班指导教师:闵联营工作单位:计算机科学与技术学院题目:初始条件:理论:学完计算机基础知识,掌握C++语言编程基础和VC开发平台的使用。
实践:计算机科学系实验中心提供计算机及软件开发环境。
要求完成的主要任务:(1)系统需求分析,得到系统的数据需求和功能需求,分析结果用表格记录。
(2)系统设计,包括内存数据结构设计、数据文件设计、代码设计、输入/输出设计、用户界面设计、处理过程设计。
要求内存数据用链表组织,数据文件用文本文件,用户界面用字符界面。
至少实现数据记录的增加、修改、删除、查询(查询应能按不同数据项进行)。
(2)编制好程序后,设计若干测试用例,上机测试所设计的程序。
(4)设计报告按格式要求书写。
设计报告正文的内容应包括:1)系统描述包括问题说明、数据需求和功能需求。
2)系统设计包括内存数据结构设计、数据文件设计、代码设计、输入/输出设计、用户界面设计、处理过程设计。
3)系统测试包括测试用例的描述、测试方法和测试结果。
4)设计的特点、不足、收获和体会。
时间安排:1、第19周(7月5日至7月9日)完成。
2、7月9 日8:00到计算机学院实验中心(三楼)检查程序、交课程设计报告、源程序(CD盘)。
指导教师签名: 2013年9月 31日系主任(或责任教师)签名: 2013年9月 31 日二.课程设计2.1系统描述2.1.1问题分析完成程序,实现图书库存的管理。
至少实现数据记录的增加、修改、删除、查询及相应结果的显示,查询应能按不同数据项进行2.1.2数据需求图书本身的信息有图书的ISBN,图书的名称,图书的作者,图书的出版社,图书的价格。
图书的库存管理信息应包含图书的上次入库时间,图书的上次出库时间,现库存图书的数目。
故所需的数据项如下:图书的ISBN string ISBN;图书的名称:string name;图书的作者:string author;图书上次入库时间:string in_date;图书上次出库时间:string out_date;图书现在库存数量:int num.2.1.3功能需求功能程序中的实现1、查询库存图书的信查询某书在结构体中的位置并输出该节点的信息2、图书入库在结构体链表中添加相应的节点3、图书出库在结构体链表中删除相应的节点4、修改某图书的库存信息在结构体链表中修改相应的节点的信息2.2系统设计2.2.1内存数据结构设计内存中,图书的相关信息用结构体链表定义,每一个节点包含某本书的全部信息struct book{string ISBN;string name;string author;string in_date;string out_date;int num;book *next;};由于在系统退出时,相关的图书信息都用表格的形式存储在文本文档中,其中第一行存储的不是图书信息,二十对下列图书信息对应项的说明。
因此,在内存中定义了一个表示文本文档中第一行的结构体,如下:struct headline{string firstline;book *next;};用来保存文本中第一行的内容。
在内存中,数据的结构如下图所示:ISBN ……firstlinenameauthornumin_dateOut_date∧2.2.2数据文件设计图书的相关信息在退出系统是都保存在文本文档中。
文本文档命名为” bookinformation”文本文档用列表的形式表示保存的图书信息,如下列所示:(部分图书信息,)ISBN 书名作者数量上次入库时间上次出库时间7-115-13416-2 C++ Primer Plus 张建春 5 2008-07-01 2008-07-057-121-01665-6 算法引论黄林鹏 6 2005-09-10 2005-09-157-302-08599-4 C++ 程序设计谭浩强 6 2004-06-01 2004-06-067-900643-22-2 数据结构严蔚敏10 2006-05-01 2006-05-067-5427-2975-6 Flash8培训教程柏松15 2006-05-01 2006-05-062.3系统测试2.3.1输入\输出设计把文本文档里面的初始信息当成是原始的输入,程序运行时把该信息放到结构里链表中去。
当执行查询,修改,添加,删除功能是,则用户通过键盘输入,通过用户手动选择,实现其相应的功能。
输出则是把每次操作执行后的链表信息保存大文本文档中,从而实现输出。
2.3.2用户界面设计1.主菜单界面2.查询图书界面3.图书入库界面4.图书出库界面5.修改图书记录界面6.退出系统界面三.源程序#include<iostream>#include<string>#include<fstream>using namespace std;struct book{string ISBN;string name;string author;string in_date;string out_date;int num;book *next;};struct headline{string firstline;book *next;};void Search(); //函数申明void Add();void Delete();void Modify();void Menu();headline *Creatlink() //以图书馆的现存数据创建结构体链表的代码{headline *head=new headline;string line,temp;ifstream fin("bookinformation.txt");getline(fin,line);{head->firstline=line;head->next=NULL;}int i,j=0,k=0,n;int a[5];book *q,*p;while(getline(fin,line)){q=new book;j=0,k=0;for(i=k;i<line.size();){if(line[i]=='\t'){a[j]=i;j++;k=i+1;}i++;}for(n=0;n<a[0];n++)//找出该行图书信心的ISBN{temp=temp+line[n];}q->ISBN=temp;temp="";for(n=a[0]+1;n<a[1];n++)//找出该行图书信息的图书名称{temp=temp+line[n];}q->name=temp;temp="";for(n=a[1]+1;n<a[2];n++)//找出该行图书信息的图书作者{temp=temp+line[n];}q->author=temp;temp="";q->num=0; //找出该行图书信息的图书的数目for(n=a[2]+1;n<a[3];n++){q->num=q->num*10+(int(line[n])-48);}for(n=a[3]+1;n<a[4];n++)// 找出该行图书信息的图书的入库时间{temp=temp+line[n];}q->in_date=temp;temp="";for(n=a[4]+1;n<line.size();n++)// 找出该行图书信息的图书的出库时间{temp=temp+line[n];}q->out_date=temp;temp="";if(head->next==NULL){head->next=q;p=q;}else{p->next=q;p=q;p->next=NULL;}}fin.close();return head;}void main(){Menu();cout<<"谢谢使用!!"<<endl;}void Menu() //主菜单的代码{cout<<" 图书库存管理系统"<<endl;cout<<" 查询图书请输入1"<<endl;cout<<" 图书入库请输入2"<<endl;cout<<" 图书出库请输入3"<<endl;cout<<" 修改图书记录请输入4"<<endl;cout<<" 退出系统请输入5"<<endl;cout<<endl;;char choice;cout<<"请输入需要执行的操作(1-5):";cin>>choice;while(int(choice)<49||int(choice)>53){cout<<"输入错误,请选择正确的操作(1-5)";cin>>choice;cout<<"\n\n\n\n";}switch(choice){case '1':cout<<"\n\n";Search();break;case '2':cout<<"\n\n";Add();break;case '3':cout<<"\n\n";Delete();break;case '4':cout<<"\n\n";Modify();break;case '5':exit(0);break;}}void Search() //查找功能的代码{cout<<" 图书查询系统:"<<endl;cout<<"* 按 ISBN 序列号查询请输入1 *"<<endl;cout<<"* 按书名查询请输入2 *"<<endl;cout<<"* 按作者查询请输入3 *"<<endl;cout<<"* 返回上级菜单请输入4 *"<<endl; cout<<endl;;cout<<"请选择查询方法:";char choice;cin>>choice;while(int(choice)<49||int(choice)>52){cout<<"请从新输入:";cin>>choice;}switch(choice){case '1':{cout<<"请输入要查询图书的ISBN:";string ISBN;cin>>ISBN;headline *head=Creatlink();book *p=head->next;int tag=0; //表征是否查找成功,默认为查找不成功while(p){if(p->ISBN==ISBN){tag=1; //表示查找成功cout<<"查找的图书信息如下:"<<endl;cout<<head->firstline<<endl;cout<<p->ISBN<<"\t"<<p->name<<"\t"<<p->author<<"\t"<<p->num<<"\t"<<p->in_date<< "\t"<<p->out_date<<endl;cout<<endl;break;}elsep=p->next;}if(tag==0){cout<<"未找到所要查找的图书信息!!\n\n";}break;}case '2':{cout<<"请输入要查询图书的书名:";string name;cin>>name;headline *head=Creatlink();book *p=head->next;int tag=0; //表征是否查找成功,默认为查找不成功while(p){if(p->name==name){tag=1; //表示查找成功cout<<"查找的图书信息如下:"<<endl;cout<<head->firstline<<endl;cout<<p->ISBN<<"\t"<<p->name<<"\t"<<p->author<<"\t"<<p->num<<"\t"<<p->in_date<< "\t"<<p->out_date<<endl;cout<<endl;break;}elsep=p->next;}if(tag==0){cout<<"未找到所要查找的图书信息!!\n\n";}break;}case '3':{cout<<"请输入要查询图书的作者:";string author;cin>>author;headline *head=Creatlink();book *p=head->next;int tag=0; //表征是否查找成功,默认为查找不成功while(p){if(p->author==author){tag=1; //表示查找成功cout<<"查找的图书信息如下:"<<endl;cout<<head->firstline<<endl;cout<<p->ISBN<<"\t"<<p->name<<"\t"<<p->author<<"\t"<<p->num<<"\t"<<p->in_date<< "\t"<<p->out_date<<endl;cout<<endl;break;}elsep=p->next;}if(tag==0){cout<<"未找到所要查找的图书信息!!\n\n";}break;}case '4':{Menu();}}cout<<"是否显示所有图书的信息?(y/n)"<<endl;char decision;cin>>decision;if(decision=='y'||decision=='Y'){headline *head=Creatlink();cout<<head->firstline<<endl;book *p=head->next;while(p){cout<<p->ISBN<<"\t"<<p->name<<"\t"<<p->author<<"\t"<<p->num<<"\t"<<p->in_da te<<"\t"<<p->out_date<<endl;p=p->next;}}cout<<"是否继续查询图书的信息?(y/n)"<<endl;cin>>decision;if(decision=='y'||decision=='Y'){Search();}elseMenu();}void Add() //图书入库功能的代码{cout<<"* 图书入库*"<<endl;cout<<"请输入入库图书的相关信息:"<<endl;string ISBN,name,author,in_date,out_date="";int num;book *addbook=new book;cout<<"ISBN:";cin>>ISBN;cin.get();cout<<"书名:";getline(cin,name);cout<<"作者:";cin>>author;cout<<"数量:";cin>>num;cout<<"入库时间:";cin>>in_date;addbook->ISBN=ISBN;addbook->name=name;addbook->author=author;addbook->num=num;addbook->in_date=in_date;addbook->next=NULL;headline *head=Creatlink();book *p=head->next;int tag=0;while(p->next!=NULL){if(p->ISBN==ISBN){tag=1;p->num=p->num+num;delete addbook;break;}elsep=p->next;}if(tag==0){if(p->ISBN==ISBN){p->num=p->num+num;delete addbook;}elsep->next=addbook;}char decision;cout<<"是否将改动写入文件?(y/n)"<<endl;cin>>decision;if(decision=='y'||decision=='Y'){ofstream fout("bookinformation.txt");fout<<head->firstline<<endl;p=head->next;while(p){fout<<p->ISBN<<"\t"<<p->name<<"\t"<<p->author<<"\t"<<p->num<<"\t"<<p->in_da te<<"\t"<<p->out_date<<endl;p=p->next;}}cout<<"是否继续图书入库?(y/n)"<<endl;cin>>decision;if(decision=='y'||decision=='Y'){Add();}elseMenu();}void Delete() //图书出库功能的代码{cout<<"* 图书出库*"<<endl;cout<<"请输入出库图书的ISBN:"<<endl;string ISBN;cin>>ISBN;headline *head=Creatlink();book *p=head->next;int tag=0;if(p->ISBN==ISBN){tag=1;cout<<"该图书的信息如下:"<<endl;cout<<" ISBN\t 书名\t 作者\t数量\t入库时间"<<endl;cout<<p->ISBN<<"\t"<<p->name<<"\t"<<p->author<<"\t"<<p->num<<"\t"<<p->in_date<< endl;head->next=p->next;delete p;}else{book *q=p->next;while(q){if(q->ISBN==ISBN){tag=1;cout<<"该图书的信息如下:"<<endl;cout<<" ISBN\t 书名\t 作者\t数量\t入库时间"<<endl;cout<<q->ISBN<<"\t"<<q->name<<"\t"<<q->author<<"\t"<<q->num<<"\t"<<q->in_date<< endl;p->next=q->next;delete q;break;}else{p=q;q=q->next;}}}if(tag==0){cout<<"输入有错,请从新输入"<<endl;Delete();}char decision;cout<<"是否将改动写入文件?(y/n)"<<endl;cin>>decision;if(decision=='y'||decision=='Y'){ofstream fout("bookinformation.txt");fout<<head->firstline<<endl;p=head->next;while(p){fout<<p->ISBN<<"\t"<<p->name<<"\t"<<p->author<<"\t"<<p->num<<"\t"<<p->in_da te<<"\t"<<p->out_date<<endl;p=p->next;}}cout<<"是否继续图书出库?(y/n)"<<endl;cin>>decision;if(decision=='y'||decision=='Y'){Delete();}elseMenu();}void Modify() //修改图书库存信息功能的代码{cout<<"* 图书信息的修改*"<<endl;cout<<"请输入要修改图书的相关信息:"<<endl;string ISBN,in_date,out_date;int num;cout<<"ISBN:";cin>>ISBN;cout<<"数量:";cin>>num;cout<<"上次入库时间:";cin>>in_date;cout<<"上次出库时间:";cin>>out_date;headline *head=Creatlink();book *p=head->next;int tag=0;while(p){if(p->ISBN==ISBN){tag=1;p->num=num;p->in_date=in_date;p->out_date=out_date;break;}else{p=p->next;}}if(tag==0){cout<<"要修改的图书项不存在,请从新输入"<<endl;Modify();}char decision;cout<<"是否将改动写入文件?(y/n)"<<endl;cin>>decision;if(decision=='y'||decision=='Y'){ofstream fout("bookinformation.txt");fout<<head->firstline<<endl;p=head->next;while(p){fout<<p->ISBN<<"\t"<<p->name<<"\t"<<p->author<<"\t"<<p->num<<"\t"<<p->in_da te<<"\t"<<p->out_date<<endl;p=p->next;}}cout<<"是否继续修改其他图书的信息?(y/n)"<<endl;cin>>decision;if(decision=='y'||decision=='Y'){Modify();}elseMenu();}本科生课程设计成绩评定表班级:计算机1101班姓名:李梦瑶学号:0121110340134 序号评分项目满分实得分1 学习态度认真、遵守纪律202 报告分析合理性303 报告观点正确性,专业认识深刻程度304 设计报告的规范性20总得分/等级评语:注:最终成绩以五级分制记。