C++程序设计课程设计图书管理系统_第1页
C++程序设计课程设计图书管理系统_第2页
C++程序设计课程设计图书管理系统_第3页
C++程序设计课程设计图书管理系统_第4页
C++程序设计课程设计图书管理系统_第5页
已阅读5页,还剩10页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、c+程序设计课程设计图书管理系统一、目的与要求学生已学完c+语言程序设计课程,并进行了第一次课程设计,学习了如何将有关处理文件的数据结构和操作进行封装,从而掌握了c+语言程序设计中的一些基本知识与方法,且对抽象、封装、继承与多态有了一定的了解。为巩固c+有关知识,加强面向对象编程的方法训练,增加学生软件设计能力和动手能力,学习使用现有工具,特设计了这个利用mfc类开发一个小型完整应用程序的题目。主要要求如下:通过本课程设计,学生应达到以下要求:1、学会在自己的软件工程中利用mfc提供的成熟数据类型(class),这里主要要用的类有,cstring,cfile,carchive,cobject以

2、及cobarray等一些通用类;2、掌握冒泡法。掌握数据类型大小(operator )的重载,进而利用冒泡法对数据进行排序。3、学习mfc中数据序列化(serialize)的方法,掌握如何利用mfc提供的数据类型进行数据序列化。二、设计任务题目:图书管理系统要求: 设计一个小型图书管理系统。1)数据上要求保存图书的如下几各方面的信息编号(应是图书的唯一标识符)、分类号、书名、作者、出版社(版次)、出版日期、单价、借阅者、借出日期、归还日期。借阅者要有,证件编号、姓名、性别、类别(大学生、研究生、教师等)。日期数据应包含,年、月、日。2)界面上要含有以下主要功能主菜单:预览,添加,删除,排序,查

3、找,修改,借书、还书、打印催还书通知,保存,退出等预览 选择此菜单,列出所有图书;添加 选择此菜单,由用户在系统的提示下输入图书资料,系统根据用户资料添加图书;删除 让用户选择按照什么原则删除;排序 让用户选择排序的原则,比如按人名排序、按书名排序等;查找 由用户给出查找的依据,书名、作者或借阅者等,然后根据用户所给信息进行查找,并列出查找结果;修改 利用查找功能将用户要修改的图书显示出来,然后提供一个接口让用户修改数据。借书 根据书籍编号借书还书 打印催还书通知 选择此菜单后,用户给出借书最长期限,然后依据不同类型的借阅者分别判断借书期限是否超过,然后列出所有逾期不还者名单以及所借书籍。保存

4、 利用序列化技术对所有图书进行保存,还要提供文本文件的数据导入导出的功能;退出 退出系统。三、设计准备1、环境准备需要windows操作系统与visual c+6.0集成开发环境。2、知识准备熟悉windows操作系统的基本操作。掌握c+基本知识,主要有类的定义与实现,一些简单操作符重载等。知道mfc一些通用类的基本属性与方法以及其使用。能利用visual c+界面的。知道c+编译程序的若干调试技术。四、 设计指导1、为什么计算机语言从最开始的二进制码到第一个高级语言的出现,发展到今天经过了半个多世纪,语言已由刚开始的面向机器(asm),到面向程序员(过程式程序),到面向数据(od),到面向对

5、象(oo),其表述方式愈来愈接近人们的日常语言与思维方式。从数据的表述上,从刚开始的简单数据类型(int, char, float,double, ),到抽象数据类型(adt),也就是各种编译程序提供的用户数据类型的定义方式(比如,struct, class, enum, enum),到范式编程思想(gp)。语言千变万化,技术日新月异,但是如果学会了利用已有的成果,掌握了阅读源代码(源码之前,了无秘密)的方法,就可以以最短的时间,获得最高的效益。掌握c/c+是计算机科学系学生最重要的基本功。一方面要通过不断地学习以及实践提高自己编写代码、算法设计以及软件实现的功力,另一方面,由于历史的沉积,前

6、人又为我们提供了许多宝贵的经验和成果,学会使用前人的成果是一条快速进入科学前沿的捷径,也是当今科技高速发展的一种必经之路。学习的最好方法,特别是语言的学习,是实践!有鉴于此,我们设计了这样一个利用mfc为我们提供的一些通用类来实现日常管理中经常需要的一些简单操作。总的目的是让同学们通过此次课程设计,提高自己的编程能力和应用能力。2、系统设计系统要求用菜单方式(dos或windows均可)提供交互式的应用软件,主要菜单及其功能的详细说明见第2款(设计任务)。数据要求1)为图书设计一个类(cbooks),要有一个用于保存数据的成员函数和以下的数据唯一标识书籍编号、书名(cstring)、作者(cs

7、tring)、出版单位、出版日期、单价、购买日期、借阅者、借出日期、还书日期等。其中,所有日期要用一个结构,包含年、月、日。借阅者的结构中包含姓名、证号、性别与型别(大学生、研究生还是教师)。2)为管理图书设计一个类(cmanager),有唯一的数据成员(m_list),存放书籍的一个链,与若干函数,其目的为:保存,删除、查找等。3、系统实现概述(控制台应用程序)第一步 开启vc;第二步 filenew,在弹出的对话框中作如图所示的选择与填写,然后点击“ok”;第三步 选择“an application than supports mfc.”,点击“finish”,点击“ok”;第四步 打开“

8、cbooksapp.cpp”文件,删除语句“cwinapp theapp;”以及函数体“int _tmain(int argc, tchar* argv, tchar* envp)”,添加函数体“void main()”。第五步 编译运行,程序框架ok;第六步 建立数据结构与算法实现:a) 日期结构,包含有年、月、日,以及减法与小于号的重载struct dateint m_year;int m_moth;int m_day;int operator (const date&d)int days=365*(m_year-a. m_year);days+=30*(m_moth-d.m_moth)+

9、m_day-d.m_day;return days;bool operator (const date& d)if(*this-d0)return true;return false;b) 读者结构,包含有姓名、借书证号、性别与类别,小于号的重载struct readercstring m_name;cstring m_certificateno;bool m_sex;/1-male,0-femaleint m_type;/0-student,1-graduate,2-teacherbool operator (reader &r)if(m_typer.m_type)return true;i

10、f(m_certificatenor.m_certificateno)return true;if(m_namer.m_name)return true;if(m_sexr.m_sex)return true;return false;c) cbooks类class cbooks : public cobject declare_serial(cbooks)public:cstring m_serialnumber;/编号cstring m_category;/类别cstring m_title;/书名cstring m_auther;/作者cstring m_press;/出版社date m

11、_publicdate;/出版日期double m_price;date m_purchasedate;/购书时间reader m_lender;/借阅者date m_lenddate;/借书日期date m_returndate;/还书日期cbooks();virtual cbooks();void serialize(carchive&ar);cbooks类具有所需要的数据成员外,需要注意到首先,它是由cobject派生的,cobject是绝大部分mfc类的基类;其次,类中有一个宏declare_serial(cbooks),其作用就是为了实现文件的序列化与类的动态创建。相应的,在此类的实

12、现文件中必定要有宏implement_serial(cbooks,cobject,1)。最后,cbooks应重载cobject虚拟函数serialize(carchive&ar)。cbooks类的实现文件类似于:implement_serial(cbooks,cobject,1)cbooks:cbooks()m_price=0.0;m_lender.m_sex=true;m_lender.m_type=2;m_publicdate.m_year=0;m_publicdate.m_moth=0;m_publicdate.m_day=0;m_lenddate.m_year=0;m_lenddate

13、.m_moth=0;m_lenddate.m_day=0;m_returndate.m_year=0;m_returndate.m_moth=0;m_returndate.m_day=0;m_purchasedate.m_year=0;m_purchasedate.m_moth=0;m_purchasedate.m_day=0;cbooks:cbooks()void cbooks:serialize(carchive&ar)if(ar.isstoring()arm_serialnumberm_categorym_titlem_autherm_pressm_price;arm_lender.m_

14、namem_lender.m_certificatenom_lender.m_sexm_lender.m_type;arm_publicdate.m_yearm_publicdate.m_mothm_publicdate.m_day;arm_lenddate.m_yearm_lenddate.m_mothm_lenddate.m_day;arm_returndate.m_yearm_returndate.m_mothm_returndate.m_day;arm_purchasedate.m_yearm_purchasedate.m_mothm_serialnumberm_categorym_t

15、itlem_autherm_pressm_price;arm_lender.m_namem_lender.m_certificatenom_lender.m_sexm_lender.m_type;arm_publicdate.m_yearm_publicdate.m_mothm_publicdate.m_day;arm_lenddate.m_yearm_lenddate.m_mothm_lenddate.m_day;arm_returndate.m_yearm_returndate.m_mothm_returndate.m_day;arm_purchasedate.m_yearm_purcha

16、sedate.m_mothm_purchasedate.m_day;第七步 建立管理图书的类首先建一个基类class cmanagercobarray m_list;public:void addtail(cbooks*pbook);/在链表尾部放书籍void addhead(cbooks*pbook); /在链表头部放书籍void add(cbooks*pbook,int index);/将书籍放到index处void delete(int index);/删除index处的书籍void fit(int index);/修改index处的书籍cbooks* getbook(int index

17、);/获取index出的书籍cmanager();virtual cmanager();virtual int find(void*para,cobarray&list);virtual void delete (void*para);viraul void sort();void serialize(carchive&ar);friend ostream & operator (ostream& os,cmanager &mg);其实现文件类似于cmanager:cmanager()cmanager:cmanager()int num=m_list.getsize();for(int i=0

18、;im_list.getsize();for(i=0;im_listi;if(p-m_title=pstr)list.add(p);if(value0)value=i;return value;void cmanagertitle:delete (void*para)if(!m_pparent)return;cstring pstr= (char*)para;int i=0;while(im_list.getsize()cbooks*p=(cbooks*) m_pparent-m_listi;if(p-m_title=pstr)delete p;m_pparent-m_list.removea

19、t(i);elsei+;void cmanagertitle:sort() if(!m_pparent)return;int i,jfor(i=0;im_listi;for(j=i+1;jm_listj;if(b2-m_titlem_title)m_pparent-m_list.removeat(i);m_pparent-m_list.insertat(i,b2);m_pparent-m_list.removeat(j);m_pparent-m_list.insertat(j,b1);b1=b2;类似的,可以构造管理其他项目的子类,只需要重载基类三个虚函数,find, delete,sort。

20、如果要使用他们只需如下作为cmanager manager;/这是全局对象,由他保存所有书籍cmanager*pmanager;/这是一个操作指针pmanager=new cmanagertitle;/准备管理书名pmanager-m_pparent=& manager;/和全局对象联系起来pmanager-sort();/manager中的书就按书名排序了pmanager-delete(“mfc”);/这就删除了manager中书名为“mfc”的所有书籍。注:文件的保存与打开类似于int save(char*filename,cmanager*mg)cfile file;if(!file.o

21、pen(filename,cfile:modewrite|cfile:modecreate)return 0;carchive ar(&file,carchive:store);mg-serialize(ar);return 1;int open(char*filename,cmanager*mg)cfile file;if(!file.open(filename,cfile:modread)return 0;carchive ar(&file,carchive:store);mg-serialize(ar);return 1;第八步 完成主界面的设计与实现菜单类class cmenua pu

22、blic:void showmain();void showsort();void showfind();void showdelete();.cmenua();virtual cmenua();4、系统测试首先提供5本书籍的资料供程序启动之用,可以见此五本书的资料用一个文本文件保存,然后每次运行时读入数据。例如编号类别书名作者出版社单价出版日期购书时间00013/tp.1417编译原理吕映芝清华大学出版社23.5019981120011100021/tp.646stl源码剖析侯捷华中科技大学出版社58.8020026120021010003x/tp.12数值分析李庆扬华中科技大学出版社15.2019827120001125、设计报告要求5000字,所名设计思想,界面使用,关键技术,函数实现等。五、成绩评定平时考核20分;界面通畅30分;功能齐全30分;实习报告20分。六、封底封面模板程序设计课程设计

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论