




已阅读5页,还剩30页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
北华航天工业学院课程设计报告北 华 航 天 工 业 学 院基于C+的面向对象程序设计实例课程设计报告报告题目: 媒体库管理系统 作者所在系部: 计算机科学与工程系 作者所在专业: 计算机科学与技术 作者所在班级: 作 者 姓 名 : 指导教师姓名: 完 成 时 间 : 北华航天工业学院教务处制摘 要在当前科技水平飞速发展的今天,中国的大学教育面临着巨大的挑战。大学教育图书馆的建设势必不可少的,图书馆是当代大学生生充电与升华殿堂。然而在信息时代的今天,我们的大学图书馆就必须拥有一套完善的并且适合自身特点的信息化图书馆管理系统。用来实现图书馆数字化管理,及时更新图书信息,完善借书效率,实现后台操作管理系统等目的。本文利用Visual c+ 6.0的ADO编写程序,实现了分类对图书馆中的资料流通进行管理,建立了一个媒体库管理系统。图书馆共有三大类物品资料:图书、视频光盘、图画。这三类物品共同具有的属性有:编号、标题、作者、评级(未评级,一般,成人,儿童)等。其中图书类增加出版社、ISBN号、页数等信息;视频光盘类增加出品者的名字、出品年份和视频时长等信息;图画类增加出品国籍、作品的长和宽(以厘米计,整数)等信息。本系统还增加了八个功能模块:添加物品,查询物品,显示物品库,编辑物品,删除物品,统计信息,物品存盘,读出物品。此程序已经过全面的系统测试,能够很好的的运行,达到了预期的效果。关键词:系统设计 面向对象 课程设计 计算机科学与技术 图书馆 媒体库管理系统 目 录摘要第1章 绪 论11.1 课程设计的目的11.2 课程设计的背景和意义11.2.1 课程设计的背景11.2.2 课程设计的意义11.3 课程设计环境1第2章 需求分析22.1 问题描述2 2.2 功能要求2 2.3 问题的解决方案3第3章 系统设计4 3.1 数据设计4 3.1.1 类设计5 3.1.2 类之间的关系5 3.1.3 函数设计5 3.2 结构设计5 3.2.1 系统流程图6 3.2.2 界面设计6第4章 系统实现9 4.1 类实现9 4.2 函数实现10 4.3 主函数实现17第5章 系统测试18 5.1 模块测试20 5.2 课程设计过程中遇到的问题25总结27致谢28参考文献29北华航天工业学院课程设计报告第1章 绪论1.1 课程设计的目的图书馆中的资料很多,如果能分类的对其资料流通进行管理,将会带来很多的方便,因此我们需要建立一个媒体库管理系统,来管理图书馆的部分工作。从而实现图书馆信息化管理,以提高图书馆工作效率。1.2 课程设计的背景和意义1.2.1课程设计的背景1. 理论研究基础(1)图书馆有三个物品资料,分别为:图书,视频关盘。(2)实现添加,查询,显示,编辑,删除,统计,存储,读取的功能。2. 技术层面的支持通过设计任务书中的要求以及介绍,大致确定的技术层面的要求是:学习和掌握软件开发过程的问题分析、系统设计、程序编码、测试等基本方法和技能。1.2.2 课程设计的意义为了更好的完成此次课程设计,我首先了解了学校教师的管理结构,并查询了大量书籍,制订了合理的方案,然后设计出大体的框架,接下来将各个部分慢慢的扩充起来,使其充盈丰实,然后完成了大致的雏形,并通过不断地测试和调试,完成了最终的成品。最后,经过自己的一番努力以及指导老师的悉心指导,终于完成了此方针软件的设计,通过这次课程设计,我基本了解并且学习了如何分析研究数据对象的特性、数据的组织方法、如何选取合适的数据逻辑结构和存储结构。这对以后的学习都有着很大的帮助1.3 课程设计环境Windows xp 、Visual c+ 6.0第2章 需求分析2.1 问题描述图书馆中的资料很多,如果能分类对其资料流通进行管理,将会带来很多方便,因此需要有一个媒体库管理系统。图书馆共有三大类物品资料:图书、视频光盘、图画。这三类物品共同具有的属性有:编号、标题、作者、评级(未评级,一般,成人,儿童)等。其中图书类增加出版社、ISBN号、页数等信息;视频光盘类增加出品者的名字、出品年份和视频时长等信息;图画类增加出品国籍、作品的长和宽(以厘米计,整数)等信息。2.2 功能要求(1)基本功能1)添加物品:主要完成图书馆三类物品信息的添加,要求编号唯一。当添加了重复的编号时,则提示数据添加重复并取消添加;当物品库已满,则提示不能再添加新的数据。2)查询物品 可按照三种方式来查询物品,分别为: 按标题查询:输入标题,输出所查询的信息,若不存在该记录,则提示“该标题不存在!”; 按编号查询:输入编号,输出所查询的信息,若不存在该记录,则提示“该编号不存在!”; 按类别查询:输入类别,输出所查询的信息,若不存在记录,则提示“该类别没有物品!”;3)显示物品库:输出当前物品库中所有物品信息,每条记录占据一行。4)编辑物品:可根据查询结果对相应的记录进行修改,修改时注意编号的唯一性。5)删除物品:主要完成图书馆物品信息的删除。如果当前物品库为空,则提示“物品库为空!”,并返回操作;否则,输入要删除的编号,根据编号删除该物品的记录,如果该编号不在物品库中,则提示“该编号不存在”。6)统计信息输出当前物品库中总物品数,以及按物品类别,统计出当前物品中各类别的物品数并显示。例如:总物品数 30图书类 10视频光盘类 15图画类 57)物品存盘:将当前程序中的物品信息存入文件中。8)读出物品:从文件中将物品信息读入程序。(2)扩展功能 在完成以上基本功能的基础上,可自行进行扩展或完善,例如:1)可按物品编号进行排序。2)使用二进制文件存储信息。3)添加记录时,考虑各种数据的有效性。4)组合查询功能的实现。2.3 问题的解决方案根据系统功能要求,可以将问题解决分为以下步骤: (1)应用系统分析,建立该系统的功能模块框图以及界面的组织和设计;(2)分析系统中的各个实体及它们之间的关系; (3)根据问题描述,设计系统的类层次; (4)完成类层次中各个类的描述; (5)完成类中各个成员函数的定义; (6)完成系统的应用模块; (7)功能调试; (8)完成系统总结报告。 第3章 系统设计3.1 数据设计3.1.1 类设计1一共设计了七个类,分别是媒体类Medium,图书类Book,视频关盘类Disk,图画类Picture,图书管理类Book_Manage,视频光盘管理类Disk_Manage,图画管理类Picture_Manage。下面以Medium,Book,Book_Manage为例。类名Medium(基类)数据成员protected:编号(number),标题(title),作者(author),评级(grade)成员函数public:Medium(n,t,a,g):构造函数。Input():输入各个数据成员。Output():输出各个数据成员。Get*():得到单一的数据成员。Set*():输入单一的数据成员。 图3-1类名Book(派生类,仅以Book为例)数据成员protected:出版社(publish),ISBN号(isbn),页数(pagenumber)成员函数public:Book(n,t,a,g,p,I,page):构造函数。Input1():输入各个数据成员。Output1():输出各个数据成员。Get*():得到单一的数据成员。Set*():输入单一的数据成员。 图3-2类名Book_Manage(Book派生类,仅以为例)数据成员protected:Book类数组(bn),总数(top)成员函数public:Book_Manage() :记录top的值。 Add():实现该类记录的添加。 Show():实现该类所有记录的显示。 Search():实现该类记录的查询。 Edit():实现该类记录的修改。 Delete():实现该类记录的删除。 Total():实现该类记录的统计。 Save():将该类记录保存到文件。 Read():可从文件中将记录读取到该类的数组中。图3-33.1.2 类之间的关系首先定义的是媒体类Medium;之后通过Medium类派生了图书类Book,视频关盘类Disk,图画类Picture;然后通过Book类派生了图书管理类Book_Manage,通过Disk类派生了视频光盘管理类Disk_Manage,通过Picture类派生了图画管理类Picture_Manage。通过继承,派生类可以用基类的成员函数。3.1.3 函数设计定义了如下函数,其功能分别如下:1.构造函数:处理对象的初始化。2. Input():输入各个数据成员。3.Output():输出各个数据成员。4. Get*():得到单一的数据成员。5.Set*():输入单一的数据成员。6. Add():实现该类记录的添加。7. Show():实现该类所有记录的显示。8. Search():实现该类记录的查询。9. Edit():实现该类记录的修改。10. Delete():实现该类记录的删除11. Total():实现该类记录的统计。12. Save():将该类记录保存到文件。13. Read():可从文件中将记录读取到该类的数组中。3.2 结构设计媒体类3.2.1 系统流程图图画类视频光盘类图书类图画管理类视频光盘管理类图书管理类 图3-43.2.2 界面设计主菜单:包括图书管理,视频光盘管理,图画管理,退出四个功能。 分别调用了调用了三个子菜单。来进一步实现媒体库管理功能。 图3-5子菜单:包括三个菜单,分别是图书管理,视频光盘管理,图书管理来实现添加,显示,查询,编辑,删除,统计,保存,读取,退出的功能。图书管理菜单 图3-6视频光盘管理菜单图3-7图画管理菜单图3-8第4章 系统实现4.1 类实现媒体类 Medium(基类)class Mediumprotected:int number; string title; string author; string grade;定义数据成员。public:Medium(int n=0,string t= ,string a= ,string g= ):number(n),title(t),author(a),grade(g) 构造函数,来初始化。void Input();输入各个数据成员。void Output();输出各个成员。int Getnumber()return number; 输出number的值。string Gettitle()return title;输出title的值。string Getauthor()return author;输出author的值。string Getgrade()return grade;输出grade的值。void Setnumber()cinnumber;输入number的值。void Settitle()cintitle;输入title的值。void Setauthor()cinauthor;输入author的值。void Setgrade()cingrade;输入grade的值。;图书类Book;视频光盘类Disk;图画类Picture分别继承Medium类由于三个类大体相同,我们以Book类为例。class Book:public Medium 公有继承Medium类protected:string publish; string isbn; int pagenumber;定义数据成员。public:Book(int n=0,string t= ,string a= ,string g= ,string p= ,string i= ,int page=0):Medium(n,t,a,g),publish(p),isbn(i),pagenumber(page)构造函数friend class Book_Manage;定义友元类Book_Managevoid Input1();输入各个数据成员。void Output1();输出各个数据成员。string Getpublish()return publish;输出publish的值。string Getisbn()return isbn; 输出isbn的值。int Getpagenumber()return pagenumber; 输出pagenumber的值。void Setpublish()cinpublish; 输入publish的值。void Setisbn()cinisbn; 输入isbn的值。void Setpagenumber()cinpagenumber; 输入pagenumber的值。;图书管理类Book;视频光盘管理类Disk;图画管理类Picture;分别继承图书类Book_Manage,视频光盘类Disk_Manage,图画类Picture_Manage。此处我们以图书管理类为例。class Book_Manage:public Book 公有继承Book类protected:Book bbmax; int top; 定义数据成员。public: Book_Manage()top=0; /初始时记录的个数为0,所以设置top=0;void Add(); /实现该类记录的添加;void Show(); /实现该类所有记录的显示; void Search(); /实现该类记录的查询;void Edit(); /实现该类记录的修改;void Delete(); /实现该类记录的删除;void Total(); /实现该类记录的统计;void Save(); /将该类记录保存到文件;void Read(); /可从文件中将记录读取到该类的数组中;;4.2 函数实现输入函数(输入各个数据成员。):void Input()coutnumber;coutendltitle;coutendlauthor;coutendlgrade;coutendl;输出函数(输出各个数据成员):void Output()cout【编号:】 setfill(-)setw(50)setiosflags(ios:right)Getnumber()endl;cout【标题:】setfill(-)setw(50)setiosflags(ios:right)Gettitle()endl;cout【作者:】setfill(-)setw(50)setiosflags(ios:right)Getauthor()endl;cout【评级:】setfill(-)setw(50)Getgrade()=bmax) /如果当前数组的空间已满,提示用户不能再添加;cout空间已满,不能再添加了。endl; return; Book b1;/提示输入新添加的人员的信息;cout 【请输入新添加图书的信息:】endl;b1.Input1();for(int i=0;itop;i+)if(bi.Getnumber()=b1.Getnumber()cout该记录的编号已经存在。添加失败!endl;return;top=top+1; btop-1=b1;cout添加成功。endl; return;显示函数(实现该类所有记录的显示)void Book_Manage:Show()/对输出进行提示,然后输出当前数组中已存储的记录的信息;for(int i=0;itop;i+)bi.Output1();查询函数(实现该类记录的查询)void Book_Manage:Search()if(top=0)cout当前系统中没有存储记录,无法查找。endl; return;/如果当前系统中没有存储记录,则直接提示信息,并返回;elsecout请选择查询方式:n*【1.标题】*【2.编号】*choices;switch(choices)case 1:int m=0;string t1;cout请输入你要查找图书的标题:t1;for(int i=0;itop;i+)if(bi.Gettitle()=t1)cout*查找到了,信息如下:*endl; bi.Output1();m=m+1;if(m=0)cout查无此书.endl;break;case 2:int m=0;int t1;cout请输入你要查找图书的编号:t1;for(int i=0;itop;i+)if(t1=bi.Getnumber()cout查找到了,信息如下:endl;bi.Output1();m=m+1;if(m=0)cout查无此书.endl;break;default:cout你并没有做出选择。endl;编辑函数(实现该类记录的修改)void Book_Manage:Edit()if(top=0)cout当前系统中没有存储记录,无法查找。endl; return;/如果当前系统中没有存储记录,则直接提示信息,并返回;elsecout*【提示】首先你要查找出你要编辑的书籍,请选择查询方式:*endl;cout*【1.标题】*【2.编号】*choices;switch(choices)case 1:int m=0; string t1;cout请输入你要查找图书的标题:t1;for(int i=0;itop;i+)if(bi.Gettitle()=t1)cout查找到了,信息如下:endl; bi.Output1(); cout请重新输入更改之后该图书的信息。(注意:编号不能更改!)endl; cout标题:;bi.Settitle(); cout作者:;bi.Setauthor(); cout评级:;bi.Setgrade(); cout出版社:;bi.Setpublish(); coutISBN号:;bi.Setisbn(); cout页数:; bi.Setpagenumber(); m=m+1;cout*修改成功!*endl;if(m=0)cout查无此书.endl;break;case 2:int m=0; int t1;cout请输入你要查找图书的编号:t1;for(int i=0;itop;i+)if(t1=bi.Getnumber()cout查找到了,信息如下:endl;bi.Output1(); cout请重新输入更改之后该图书的信息。(注意:编号不能更改!)endl; cout标题:;bi.Settitle(); cout作者:;bi.Setauthor(); cout评级:;bi.Setgrade(); cout出版社:;bi.Setpublish(); coutISBN号:;bi.Setisbn(); cout页数:; bi.Setpagenumber();m=m+1;if(m=0)cout查无此书.endl;break;default:cout你并没有做出选择。endl;删除函数(实现该类记录的删除)void Book_Manage:Delete()if(top=0)cout当前系统中没有存储记录,无法查找。endl;return;/如果当前系统中没有存储记录,则直接提示信息,并返回;elsecout请输入你要删除图书的编号:t2;for(int j=0;jtop;j+)if(t2=bj.Getnumber()char p;cout找到了,该图书的信息如下:endl;bj.Output1();docout你是否删除此信息。请输入:是(Y/y)/否(N/n)p;if(p=y|p=Y)for(j;jtop-1;j+)bj=bj+1;top=top-1;cout删除成功!endl;if(p=n|p=N) cout取消操作!endl;while(p!=n&p!=N&p!=y&p!=Y); else cout查无此书。endl;统计函数(实现该类记录的统计)void Book_Manage:Total()int m=0;for(int i=0;itop;i+)m=m+1;cout*图书类的个数是:mendl;保存函数(将该类记录保存到文件)void Book_Manage:Save()ofstream outfile(c:Documents and SettingsAdministrator桌面课设book.txt,ios:out); if(!outfile) cerropen test.dat error!endl;exit(1);cout存储数据中 .endl;for(int i=0;itop;i+) outfilebi.Getnumber() ; outfilebi.Gettitle() ; outfilebi.Getauthor() ; outfilebi.Getgrade() ; outfilebi.Getpublish() ; outfilebi.Getisbn() ; outfilebi.Getpagenumber() ; / outfile*endl;/outfiletop的个数:topendl;cout *存储成功!*endl; outfile.close();读取函数(可从文件中将记录读取到该类的数组中)void Book_Manage:Read()/如果当前系统中没有存储记录,则直接提示信息,并返回;ifstream infile(c:Documents and SettingsAdministrator桌面课设book.txt,ios:in);if(!infile)cerropen test.dat error!bi.numberbi.titlebi.authorbi.gradebi.publishbi.isbnbi.pagenumber)i+;top+;cout*读取成功!*endl;infile.close();4.3 主函数实现int main() cout,.,.,. endl;cout o,.,. endl;cout田田田 ,.,. endl;coutendlendlendl;cout 欢迎进入北华航天工业学院媒体库管理系统endl;char choice5;do cout ._. endl;cout | _ | endl;cout | I I | endl;cout | I I | endl;cout | I 主菜单 I | endl;cout | I I | endl;cout | I_I | endl;cout !_! endl;cout ._. endl;cout ._|_|_.endl; cout |: _ |endl;cout | CD-ROM |endl; cout !_!endl; coutendl;cout| |endl;cout 图书管理 2 = 视频光盘管理 3 = 图画管理 0 = 退出系统 |endl;cout| |endl;coutendl;coutchoice;if(strlen(choice)=1)switch(choice0)case 1:BookMenu();break;case 2:DiskMenu();break;case 3:PictureMenu();break;case 0:coutn您已安全退出系统.endl;break;default:coutn没有此选项.请重选.endl;break;elsecoutn没有此选项.请重选.endl;continue;while(choice0!=0);coutn *欢迎您下次再使用本系统!*endl;return 0;第5章 系统测试5.1 模块测试由于三个管理的功能实现基本相同,以图书管理功能为例(视频关盘管理,图画管理同理。)添加功能:图5-1图5-2图5-3显示功能:图5-4查询功能:图5-5查询失败,没有此信息。继续查询。图5-6查询成功!按编号查询,同理,在此不做重复。统计功能:图5-7修改功能:图5-8图5-9修改成功!保存功能:图5-10保存成功!读取功能:图5-11验证读取是否成功。显示一下。图5-12读取成功!删除功能:图5-13验证删除是否成功。显示一下。图5-14删除成功。因此该系统所有功能均能实现,测试完毕。5.2 课程设计过程中遇到的问题问题1、死循环问题在以下这段程序段中:coutchoice;switch(choice)/*case 1:BookMenu();break;*/case 2:DiskMenu();break;/*case 3:PictureMenu();break;*/case 0:coutn您已安全退出系统.endl;break;default:coutn没有此选项.请重选.endl;break;若输入的是整数程序可以正常运行,如果误输入了非数字字符(比如:a)则程序运行到这里时会是一个“死循环”中。解决方法:把int型变量“choice”定义为一个字符数组char5;再把switch(choice)改为switch(choice 0),通过比较字符数组中的第一个元素。但是如果用户输入“225”这样的话,程序比较字符数组中的第一个字符是“1”程序还是会正确运行下去。这个问题的解决方案是在switch(choice 0)前加一条语句if(strlen(choice)=1),elsecoutt错误!请重新输入!n。修改后的程序段如下:coutchoice;char choice5;if(strlen(choice)=1)switch(choice0)case 1:BookMenu();break;case 2:DiskMenu();break;case 3:PictureMenu();break;case 0:coutn您已安全退出系统.endl;break;default:coutn没有此选项.请重选.endl;break;elsecoutn没有此选项.请重选.endl;continue;问题2、区分“=”,“=”在C+中的区别。“=”是赋值的意思;而“=”是恒等于的意思。问题3、提高数据录入的正确性以程序中的“评级”为例,它只允许四种格式(未评级,一般,成人,儿童),所以一般用户不清楚这些。解决这类问题,只要将提示输入的时候,在评级的后面加上(未评级,一般,成人,儿童)就可以了。总 结面向对象课程设计是计算机专业一门重要的专业基础课。此次课程设计的目的是以C+程序设计语言为基础,通过完成一些具有一定难度的课程设计题目的编写、调试、运行工作,使我进一步掌握面向过程和面向对象程序设计的基本方法和编程技巧,巩固所学理论知识,使理论与实际相结合。从而提高自我分析问题、解决问题的能力。培养独立的C+语言程序实际与算法设计方法,具备初步的独立分析和设计能力;软件开发过程的问题分析、系统设计、程序编码、测试等基本方法和技能;能够综合运用所学的理
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 养护安全培训照片墙课件
- 农业学安全培训课件
- 农业农村法律法规课件
- 化工企业安全培训脚本课件
- 农业农机安全培训会课件
- 银行展厅营销活动方案(3篇)
- 化学用品安全培训内容课件
- 创造宣言课件制作
- 内科消化性溃疡课件
- 先横后竖课件
- 职高课件模板
- 【生物】第四节 激素调节课件-2025-2026学年人教版生物八年级上册
- 卫生院安全生产培训课件
- 物流紧急事件应急预案方案
- 期中专题复习-词汇句型训练-2025-2026学年 译林版2024 英语八年级上册 原卷
- 2025年全国中小学校科普知识竞赛题库(+答案)
- 2.2创新永无止境教学课件 2025-2026学年度九年级上册 道德与法治 统编版
- 矿山爆破作业安全培训课件
- 2025-2026学年九年级英语上学期第一次月考 (四川成都专用) 2025-2026学年九年级英语上学期第一次月考 (四川成都专用)解析卷
- 高陡边坡稳定性控制技术及其工程实践
- 河南省委党校在职研究生入学考试真题及答案
评论
0/150
提交评论