




免费预览已结束,剩余33页可下载查看
下载本文档
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
计算机科学与通信工程学院课程设计报告课程数据结构A课程设计课题名称收藏夹的设计学生姓名李威学号3140608011专业班级软件1401指导教师王 新 胜成绩评定表作业质量评分分析能力(30分)总体功能分析逻辑结构分析存储结构分析设计能力(30分)系统功能设计存储结构设计算法设计与编码创新能力(10分)设计思路新颖,所设计的功能有扩展,有创新意识写作能力(10分)文字通顺,用词规范,叙述清晰,有条理性,格式、绘图、表格、插图等规范准确团队合作评价(20分)团队成员沟通,个人职责履行总分教师签名特别说明1. 无故缺席或请假未获批准擅自离开达到3次或课程设计上机时间内做与课程设计无关的事情达到3次,课程设计成绩为0分;2. 课程设计抄袭者,课程设计成绩为0分。目录1. 课题简介和设计要求1(1)收藏夹系统的实现:1(2)分工:12. 总体设计13. 详细设计33.1 结点类型的设计33.2 采用的逻辑结构33.3采用的存储结构43.4相关算法41.总体流程图52.分功能流程图54. 编码134.1 数据结构定义134.2 程序实现15Book.h15FV.h16收藏夹.cpp275. 测试295.1 测试用例295.2 程序运行结果30主目录:30图书列表:30收藏图书:31显示收藏:31删除图书:32查询收藏:32清空收藏:33按价格排序:33按收藏时间排序:346. 收获与体会341数据结构课程设计1. 课题简介和设计要求目前有一些著名的网上图书购买系统,比如当当网、亚马逊等,他们都有收藏夹和购物车的功能,通过收藏夹可以把你感兴趣的图书添加到收藏夹,可以直接把想购买的图书添加到购物车,也可以从收藏夹中把准备购买的图书加入购物车,等等功能。现在请你利用已经学到的程序设计和数据结构等课程的相关知识模拟实现具有收藏夹和购物车功能的系统。题目如下: (1)收藏夹系统的实现:(1) 能收藏一本图书,并记录收藏时间。图书的信息包括图书号(是唯一的)、书名、作者、出版社、出版时间、价格。(2) 能按照图书号查询显示收藏夹中图书的相关信息。(3) 能按照收藏时间的先后显示输出所收藏的所有图书的相关信息。(4) 能按照价格的大小显示输出收藏夹中的所有图书的相关信息。(5) 可以把不想收藏的某一本指定图书号的图书移出收藏夹。(2) 分工:邢志康负责所有图书的索引,收藏夹的添加和清空以及收藏夹与单链表同步。李威负责收藏夹的显示、删除,按书号查询图书以及按价格或收藏时间排序。Book结点和主程序文件为了方便分工是我们共同完成的,我们设计了一些符号构成的方块界面方便操作。在我负责的模块中,我设计了按照是(y)否(任意键)来操作的判断语句方便用户,并且为了防止错误操作引起程序出错做了一些错误操作的反馈语句用来提示用户,并且运用goto语句实现了各功能之间的切换。2. 总体设计整个系统准备实现的功能有9个,分别是所有图书的索引、收藏夹与单链表的同步、收藏夹添加图书、收藏夹的清空、收藏夹的显示、收藏夹图书的删除、按书号查询图书、收藏夹按照价格排序、收藏夹按照添加时间排序。由图可以明确的看出9大功能的实现与总体系统的关系,其中“收藏夹与单链表同步”这个模块是程序内置的,不需要用户操作,也就是说整个程序完成了8个用户使用的功能,即图书索引、收藏图书、显示收藏、删除收藏、查询收藏、清空收藏、按价格排序、按收藏时间排序。收藏夹系统所有图书的索引收藏夹与单链表同步收藏夹添加图书收藏夹的清空收藏夹的显示收藏夹图书的删除按书号查询图书收藏夹按照价格排序收藏夹按照添加时间排序图1 收藏夹总体系统模块各功能的含义如下:(1)图书索引:给出了整个图书馆的目录以及图书的编号、名字、作者、出版社、出版日期、图书价格。方便用户进行查找、添加收藏和浏览。(2)收藏图书:用户将图书添加到收藏夹的功能若编号不存在,则返回“!该图书不存在!”;若图书已经在收藏夹内,则返回“!该书已在收藏夹!”;若打不开收藏目录,则返回“目录打不开”;若打不开收藏夹,则返回“收藏夹打不开”。添加时获取当地时间,并给出添加成功的提示.(3)显示收藏:按照先后顺序输出已经收藏的图书所有信息,包括图书的编号、名字、作者、出版社、出版日期、图书价格和收藏时间。(4)删除图书:输入一本图书的编号来删除图书收藏夹中与该编号相同的图书,如果没有这本书,则输出“收藏夹不存在这本书”;如果删除成功,则返回“删除成功”。用户可以在该界面看到收藏夹中已有的图书,并且可以反复操作删除多个图书。(5)查询收藏:用户可以输入一本图书的编号来查询收藏夹中与该图书编号相同的图书,若收藏夹中没有这本图书,则返回“!收藏夹里没有这本书请重新输入!”;若操作成功,则返回“您要查询的图书为:”和图书的编号、名字、作者、出版社、出版日期、图书价格和收藏时间。(6)清空收藏:进入该操作会出现方框提示框(输入Y确定删除,任意键不删除),输入Y并输入回车键进行清空操作,若操作失败,则返回“找不到收藏夹”;若操作成功,则返回“收藏夹已清空”(7)价格排序:将用户收藏的图书按照价格从小到大进行排序,方便用户的购买和查询,若排序成功则自动返回菜单界面。(8)按收藏时间排序:将用户收藏的图书按照收藏的时间进行排序,为了方便排序使用了一个长整型函数来存储格林尼治时间(秒),避免了多次比较,降低了复杂度,操作成功则直接返回主菜单界面。3.详细设计3.1 结点类型的设计对图书设计了Book结点,数据成员包含了收藏时间、图书号(是唯一的)、书名、作者、出版社、出版时间、价格。还包含了用于排序的格林尼治时间。成员函数包含一个缺省构造函数和一个构造函数。用图表可以清晰的展现出来:结点的名字数据成员数据成员的类型数据成员的含义BookNOint图书的编号Booknamestring图书名Bookautherstring作者Bookpublisherstring出版社Booktime2Int数组出版日期BookPriceint价格BookTime6Int数组年月日时分秒Book*next指针后继结底BookTlong格林尼治时间表1结点的数据成员如图所示,前七个数据成员存储了图书的总体信息,后继结点是为了向空链表添加结点和数据,格林尼治时间单纯的为了排序方便。构造函数执行的同时对各个数据成员进行赋值并且存入线性表中,同时后继结点后移,每创建一个结点则执行同样的操作。析构函数释放构造函数使用的空间,避免造成空间的浪费。3.2 采用的逻辑结构该系统采取了线性表逻辑结构。因为每本图书都有图书号(是唯一的)、书名、作者、出版社、出版时间、价格和收藏时间等数据,分开存放和定义非常复杂,采用线性表可以将这些数据同时存入一个结点中,避免了复杂的操作;线性表的存储结构分为顺序存储结构和链式存储结构。使用顺序存储结构进行操作来调用各个数据,操作起来容易出错并且操作非常复杂。为了提高程序准确程度和便捷性最后我们采用了线性表的链式结构逻辑结构来编程。3.3采用的存储结构该系统采用了线性表的链式存储结构。将一个线性表存储到计算机中,可以采用许多不同的方法,其中既简单又自然的是顺序存储方法,即将线性表中的元素逐个存放于数组的一些连续的存储单元中。在这种表示方式下,容易实现对表的遍历。要在表的尾部插入一个新元素,也很容易。但是要在表的中间位置插入一个新元素,就必须先将其后面的所有元素都后移一个单元,才能腾出新元素所需的位置。执行删除运算的情形类似。如果被删除的元素不是表中最后一个元素,则必须将它后面的所有元素前移一个位置,以填补由于删除所造成的空缺。而链式存储结构不要求存储位置,只是按照指针来进行操作调用,总体来说,该系统最适用于链式存储结构结构。dataheadnextdatanextdatanext null3.4相关算法1.总体流程图图2总体流程图2.分功能流程图void List();/图书索引图书索引:给出了整个图书馆的目录以及图书的编号、名字、作者、出版社、出版日期、图书价格。方便用户进行查找、添加收藏和浏览。图3List()算法流程图void Updata();/收藏夹与单链表同步收藏夹与单链表同步:将收藏夹中的数据同步到单链表中,让用户打开程序就能看到已收藏的内容,这样可以避免每次打开程序都要重新收藏。图4Updata()算法流程图void Clear();/将收藏夹清空清空收藏:进入该操作会出现方框提示框(输入Y确定删除,任意键不删除),输入Y并输入回车键进行清空操作,若操作失败,则返回“找不到收藏夹”;若操作成功,则返回“收藏夹已清空”图5Clear()算法流程图void Add();/添加收藏图书:用户将图书添加到收藏夹的功能若编号不存在,则返回“!该图书不存在!”;若图书已经在收藏夹内,则返回“!该书已在收藏夹!”;若打不开收藏目录,则返回“目录打不开”;若打不开收藏夹,则返回“收藏夹打不开”。添加时获取当地时间,并给出添加成功的提示.图6Add()算法流程图void Show();/显示显示收藏:按照先后顺序输出已经收藏的图书所有信息,包括图书的编号、名字、作者、出版社、出版日期、图书价格和收藏时间。图7Show()算法流程图void Delete();/删除删除图书:输入一本图书的编号来删除图书收藏夹中与该编号相同的图书,如果没有这本书,则输出“收藏夹不存在这本书”;如果删除成功,则返回“删除成功”。用户可以在该界面看到收藏夹中已有的图书,并且可以反复操作删除多个图书。图8Delete()算法流程图void Query();/根据书名号查询收藏夹中的某一本书查询收藏:用户可以输入一本图书的编号来查询收藏夹中与该图书编号相同的图书,若收藏夹中没有这本图书,则返回“!收藏夹里没有这本书请重新输入!”;若操作成功,则返回“您要查询的图书为:”和图书的编号、名字、作者、出版社、出版日期、图书价格和收藏时间。图9Query()算法流程图void Porder();/ 按照价格排序价格排序:将用户收藏的图书按照价格从小到大进行排序,方便用户的购买和查询,若排序成功则自动返回菜单界面。图10Porder()算法流程图void Torder();/按照收藏时间排序按收藏时间排序:将用户收藏的图书按照收藏的时间进行排序,为了方便排序使用了一个长整型函数来存储格林尼治时间(秒),避免了多次比较,降低了复杂度,操作成功则直接返回主菜单界面。图11Torder()算法流程图4. 编码4.1 数据结构定义【提示】包括类名、数据成员、成员函数的设计和注释。结点类:Book#pragma once#include#includeusing namespace std;templateclass Book/图书结点public:int NO;/图书编号string name;/图书名string auther;/作者string publisher;/出版社int time2;/出版日期double price;/图书价格Book *next;int Time6;/收藏时间long T;/用于按收藏时间排序Book(void);/缺省构造函数Book(int no,string na,string au,string pu,int t1,int t2,double pr,int y,int mo,int d,int h,int mu,int s,long TT);/构造函数Book(void);/析构函数; 类名:FV#pragma once#include#include#include#include Book.h#include#include windows.husing namespace std;templateclass FVprivate:Book *head; /头结点int length;/结点长度int count;/用于编号的记数public:FV(void);/无参构造收藏夹函数FV(void);/析构void List();/图书索引void Updata();/收藏夹与单链表同步void Clear();/将收藏夹清空void Add();/添加void Show();/显示void Delete();/删除void Query();/根据书名号查询收藏夹中的某一本书void Porder();/ 按照价格排序 void Torder();/按照收藏时间排序;4.2 程序实现Book.h#pragma once#include#includeusing namespace std;templateclass Book/图书结点public:int NO;/图书编号string name;/图书名string auther;/作者string publisher;/出版社int time2;/出版日期double price;/图书价格Book *next;int Time6;/收藏时间long T;/用于按收藏时间排序Book(void)next=NULL;Book(int no,string na,string au,string pu,int t1,int t2,double pr,int y,int mo,int d,int h,int mu,int s,long TT)NO=no;name=na;auther=au;publisher=pu;time0=t1;time1=t2;price=pr;Time0=y;Time1=mo;Time2=d;Time3=h;Time4=mu;Time5=s;T=TT;next=NULL;Book(void); FV.h#pragma once#include#include#include#include Book.h#include#include windows.husing namespace std;templateclass FVprivate:Book *head;/头结点int length;/结点长度int count;/用于编号的记数public:FV(void)/无参构造收藏夹函数head=new Book;head-next=NULL;length=0;FV(void)/析构Book *q,*r;r=head-next;while(r!=NULL)q=r-next;delete r;r=q;void List()/图书索引int no;string na;string au;string pu;int t1;int t2;double pr;count=1000;ifstream file;file.open(data.txt,ios:in);if(!file)cerr目录打不开endl;exit(1);cout*endl;cout所有图书列表:nonaauput1t2pr;cout图书号:not图书名:nat作者:aut出版社:punttttt出版日期:t1/t2t价格:prendl;count+;file.close();cout*endl;void Updata()/收藏夹与单链表同步int no,i; string na; string au; string pu; int t1; int t2; double pr;long TT;int y,mo,d,h,mu,s;Book *p=head; ifstream file2; file2.open(FV.txt,ios:in); if(!file2) cerr目录打不开i) file2nonaauput1t2prymodhmusTT; Book*q=new Book(no,na,au,pu,t1,t2,pr,y,mo,d,h,mu,s,TT); p-next=q; p=p-next; length+; file2.close();void Clear()/将收藏夹清空while(1)string cc;cout endl;cout endl;cout endl;cout 确认清空? endl;cout endl;cout endl;cout 是(Y)/否(任意键) endl;cout endl;cout endl;cout endl;cout cc;if(cc=Y)Book *p=head-next;while(p!=NULL) head-next=p-next; delete p; p=head-next;length=0;ofstream fileout(FV.txt,ios:trunc); if(!fileout) cout 找不到收藏夹endl; exit(0); fileout.close(); cout清空成功endl; break;else break;void Add()/添加while(1)Book *p;int num;int no;string na;string au;string pu;int t1,t2;double pr;long TT;ifstream file;List();add:coutnum;if(num=110)break;elseBook *temp=head-next;while(temp!=NULL)if(temp-NO=num)cout*endl;cout !该书已在收藏夹! endl;cout*next;if(numcount)cout*endl;cout !该图书不存在!endl;cout*endl;goto add;elsefile.open(data.txt,ios:in);if(!file)cerr目录打不开nonaauput1t2pr;if(no=num)break;file.close();int year,month,day,h,m,s; SYSTEMTIME ct; GetLocalTime(&ct);/如果用GetSystemTime(&ct);那么获取的是格林尼治标准时间 year=ct.wYear; month=ct.wMonth; day=ct.wDay;h=ct.wHour; m=ct.wMinute; s=ct.wSecond;time_t now; now = time(NULL);TT=now;Book *q=new Book(no,na,au,pu,t1,t2,pr,year,month,day,h,m,s,TT);for(p=head;p-next!=NULL;p=p-next);p-next=q;length+;ofstream file1; file1.open(FV.txt,ios:app);if(!file1)cerr收藏夹打不开endl;exit(1);file11 no na au pu t1 t2 pr year month day h m s TTn;file1.close();cout收藏成功endl; cout*endl;cout !是否继续添加收藏?!endl;cout 是(Y)/否(任意键)endl; cout*gg;if(gg=Y)goto add;elsebreak;void Show()/显示cout*endl;cout收藏目录:endl;Book *p=head-next;while(p!=NULL)cout图书号:NOt图书名:namet作者:authert出版社:publisherntt出版日期:time0/time1t价格:pricet收藏时间:Time0/Time1/Time2 Time3:Time4:Time5next;cout*endl;void Delete()/删除 while(1) add2: int num; coutnum; if(num=110) break; else string cc; cout endl; cout endl; cout endl; cout 确认删除? endl; cout endl; cout endl; cout 是(Y)/否(任意键) endl; cout endl; cout endl; cout endl; cout cc; if(cc=Y) Book *p=head,*q; while(p-next-NO!=num) p=p-next; if(p-next=NULL) cout*endl; cout !收藏夹里没有这本书请重新输入!endl; cout*next; p-next=q-next; length-; delete q; ofstream fileout(FV.txt,ios:trunc); if(!fileout) cout 找不到收藏夹endl; exit(0); fileout.close(); ofstream file1; file1.open(FV.txt,ios:app); if(!file1) cerr收藏夹打不开next!=NULL) file11 next-NO next-name next-auther next-publisher next-time0 next-time1 next-price next-Time0 next-Time1 next-Time2 next-Time3 next-Time4 next-Time5 next-Tnext; file1.close(); cout删除成功endl; else goto add2; void Query()/根据书名号查询收藏夹中的某一本书while(1)add3:int num;coutnum;if(num=110)break;elseBook *p=head;while(p-next-NO!=num)p=p-next;if(p-next=NULL)cout*endl;cout !收藏夹里没有这本书请重新输入!endl;cout*endl;goto add3;elsecout*endl;cout您要查询的图书为:endl;cout图书号:next-NOt图书名:next-namet作者:next-authert出版社:next-publisherntt出版日期:next-time0/next-time1t价格:next-pricet收藏时间:next-Time0/next-Time1/next-Time2 next-Time3:next-Time4:next-Time5endl;cout*endl;void Porder()/ 按照价格排序Book *p, *q;int num;string str3;double pri;int tim2,Tim6;long TT;for (p = head-next; p != NULL; p = p-next)for (q = p; q != NULL; q = q-next)if (p-price q-price)/交换节点信息num = p-NO;str0 = p-name;str1 = p-auther;str2 = p-publisher;pri= p-price;tim0 = p-time0;tim1 = p-time1;for(int i=0;iTimei;TT=p-T;p-NO = q-NO;p-name = q-name;p-auther = q-auther;p-publisher = q-publisher;p-time0= q-time0;p-time1= q-time1;p-price = q-price;for(int i=0;iTimei=q-Timei;p-T=q-T;q-NO
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 法学概论考试中的选择题技巧与试题及答案
- 行政法学的历史与发展及试题
- 软件设计师备考常见问题将解答试题及答案
- 加强公司财务内控的工作计划
- 随州市随县事业单位2025年统一公开招聘笔试历年典型考题及考点剖析附带答案详解
- 硬件接口设计基础知识试题及答案
- 行政管理考试知识体系建立:试题及答案
- 分布式系统的设计与实现能力测试试题及答案
- 重要信息处理软件试题及答案参考
- 2025年VB编程的国际趋势及试题与答案
- 畜牧养殖大型沼气项目可行性研究报告
- 陈志海-发热伴血小板减少综合征
- 2024年武汉长江科创科技发展有限公司招聘笔试参考题库附带答案详解
- 《土石坝沥青混凝土面板和心墙设计规范》
- 世纪大道石灰固化土QC成果
- 人工打桩施工计划书
- 传奇辅助脚本
- 宗教场所消防安全培训课件
- 2024年广东湛江交通投资集团招聘笔试参考题库含答案解析
- 中华人民共和国人民武装警察法释义
- 华为经营管理-华为供应链管理(6版)
评论
0/150
提交评论