




已阅读5页,还剩36页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
北华航天工业学院课程设计报告北 华 航 天 工 业 学 院基于c+的面向对象程序设计实例实践报告报 告 题 目 : 图书馆管理系统设计 作者所在系部: 计算机科学与工程系 作者所在专业: 计算机科学与技术 作者所在班级: b12511 作 者 学 号 : 20124051117 作 者 姓 名 : 王硕 指导教师姓名: 赵辉 完 成 时 间 : 2013-6-19 北华航天工业学院教务处制摘 要随着计算机网络技术的发展,各种各样基于网络的应用也随之诞生,比如基于互联网的信息发布,通信,数据共享等等。局域网的发展也同样迅速。很多政府机构,企业,学校,都是先以一个统一的局域网联结在一起,再分别接入internet.因此基于局域网的即时通信工具,就这样应运而生了。所以本文提出了一个更加合理的设计,并在windows平台上加以了实现.在本实现内将客户端和服务端综合在一个程序之内,用多线程实现不同的并行任务。并进行了人性化的界面设计,使用起来更加简单方便,并且功能十分合理,又易于扩展以及个性化定制。本文通过局域网聊天系统来具体共享内存实现进程间的数据交换,利用windows消息机制实现进程间的同步,两种机制结合使用。关键词:局域网;即时通信;客户端;服务端;多线程;共享内存;信息第一章 绪论111 课程设计的目的112 课程设计的背景和意义1121 课程设计的背景1122 课程设计的意义113 课程设计环境1第二章 需求分析221 问题描述222 功能要求223 问题的解决方案3第三章 系统设计431 数据设计4311 类设计4312 类之间的关系5313 函数设计632 结构设计6321 系统流程图6322 界面设计9第四章 系统实现1141 类实现1142 函数实现1343 主函数实现31第五章 系统测试3251 模块测试3252 课程设计过程中遇到的问题36总 结36致 谢37参考文献37附 录38第一章 绪论11 课程设计的目的(1)能够熟练掌握c+语言的基本知识和技能。(2)基本掌握面向对象程序设计的基本思路和方法。(3)能够利用所学的基本知识和技能,解决简单的面向对象程序设计问题。12 课程设计的背景和意义121 课程设计的背景1. 理论研究基础(1)c+在c的基础上增加了面向对象的机制(2)充分运用面向对象机制中的继承性与多态性实现函数的设计。2. 技术层面的支持运用系统为c+面向对象程序设计提供的各种设计方法和vc+系统提供的库函数实现项目的开发。122 课程设计的意义图书馆中的资料很多,如果能分类对其资料流通进行管理,将会带来很多方便,因此需要有一个媒体库管理系统。通过设计此系统,熟练掌握c+语言的基本知识和技能,基本掌握面向对象程序开发的基本思路和方法,培养学生的动手操作能力,提高自主学艺能力,能够利用所学的基本知识和技能,进行简单应用程序设计。13 课程设计环境计算机+windows xp +visual c+6.0第二章 需求分析21 问题描述图书馆共有三大类物品资料:图书、视频光盘、图画。这三类物品共同具有的属性有:编号、标题、作者、评级(未评级,一般,成人,儿童)等。其中图书类增加出版社、isbn号、页数等信息;视频光盘类增加出品者的名字、出品年份和视频时长等信息;图画类增加出品国籍、作品的长和宽(以厘米计,整数)等信息。设计程序能够对图书馆资料进行管理,应用到继承、抽象类、虚函数、虚基类、多态和文件的输入/输出等内容。22 功能要求(1)添加物品:主要完成图书馆三类物品信息的添加,要求编号唯一。当添加了重复的编号时,则提示数据添加重复并取消添加;当物品库已满,则提示不能再添加新的数据。(2)查询物品可按照三种方式来查询物品,分别为:按标题查询:输入标题,输出所查询的信息,若不存在该记录,则提示“该标题不存在!”;按编号查询:输入编号,输出所查询的信息,若不存在该记录,则提示“该编号不存在!”;按类别查询:输入类别,输出所查询的信息,若不存在记录,则提示“该类别没有物品!”;(3)显示物品库:输出当前物品库中所有物品信息,每条记录占据一行。(4)编辑物品:可根据查询结果对相应的记录进行修改,修改时注意编号的唯一性。(5)删除物品:主要完成图书馆物品信息的删除。如果当前物品库为空,则提示“物品库为空!”,并返回操作;否则,输入要删除的编号,根据编号删除该物品的记录,如果该编号不在物品库中,则提示“该编号不存在”。(6)统计信息输出当前物品库中总物品数,以及按物品类别,统计出当前物品中各类别的物品数并显示。(7)物品存盘:将当前程序中的物品信息存入文件中。(8)读出物品:从文件中将物品信息读入程序。23 问题的解决方案根据系统功能要求,可以将问题解决分为以下步骤: (1)应用系统分析,建立该系统的功能模块框图以及界面的组织和设计;(2)分析系统中的各个实体及它们之间的关系; (3)根据问题描述,设计系统的类层次; (4)完成类层次中各个类的描述; (5)完成类中各个成员函数的定义; (6)完成系统的应用模块; (7)功能调试; (8)完成系统总结报告。 第三章 系统设计31 数据设计311 类设计根据题目要求首先设计虚基类things:类名 物品资料类things数据成员 int number; string title; string age; string rate; 编号 标题 作者 评级 成员函数 有参构造函数 things(int nu,string ti,string au,string ra); 显示函数 virtual void show(); 存盘函数 virtual void save(fstream &fout);基类things派生出book类:类名 图书类book 数据成员 int number; string title; string age; string rate; 编号 标题 作者 评级string publishing_house; string isbn; double pages; book *next 出版社 isbn号 页数 指向book类的指针 成员函数构造函数book(int nu,string ti,string au,string ra,string ph,string is,double pa);显示函数void show();存盘函数void save(fstream &fout);基类things派生出video类:类名 视频光盘类video 数据成员 int number; string title; string age; string rate; 编号 标题 作者 评级 string author_name; int year; double time; video *next 出品者的名字 出品年份 视频时长 指向video类的指针成员函数构造函数 video(int nu,string ti,string au,string ra,string an,int ye,double te);显示函数 void show();存盘函数 void save(fstream &fout);基类things派生出paint类:类名 图画类paint 数据成员 int number; string title; string age; string rate; 编号 标题 作者 评级string country; long length; long width; video *next 出品国家 作品的长 作品的宽 指向video类的指针成员函数构造函数 paint(int nu,string ti,string au,string ra,string co,long len,long wi);显示函数 void show();存盘函数 void save(fstream &fout);根据功能要求设计操作类manage:类名 操作类manage成员函数构造函数 manage();析构函数manage();添加物品函数void add(); 查询物品函数void query();显示物品库函数void display();编辑(修改)物品函数void modify();删除物品函数void del(); 统计信息函数void statistics();物品存盘函数void save();读出物品函数void load();清空内存函数void clear();数据成员指向基类的指针things *header;312 类之间的关系book类、video类、paint类都是虚基类things的派生类,因为book类、video类、paint类中有相同的成员,为了在软件开发中减少人力、物力,财力,所以应用类的继承机制解决软件的重用问题。manage类是book类、video类、paint类和things类的友元函数,以便调用他们的私有成员,实现对book类、video类、paint类的增、删、查、改、显、读、写等功能。313 函数设计在本次课程设计中,总共用到了以下几种函数。分别是:things(int nu,string ti,string au,string ra); /构造函数virtual void show()=0;/纯虚函数,使面向对象的多态性得以体现virtual void save(fstream &fout)=0;/纯虚函数,同上book(int nu,string ti,string au,string ra,string ph,string is,double pa);/构造函数video(int nu,string ti,string au,string ra,string an,int ye,double te);/构造函数paint(int nu,string ti,string au,string ra,string co,long le,long wi);/构造函数void show();/派生类的显示函数,为manage的多个成员函数调用。void save(fstream &fout);/派生类的存盘函数,为manage的存盘函数调用。以上为基类things和派生类book、video和paint的成员函数,为下面的manage类的成员函数调用。void add(); /添加物品void query();/查询物品,该函数输出所要查询的信息。void display(); /显示物品库,显示物品的具体信息;void modify(); /编辑(修改)物品,这个函数使得物品信息能够及时改变,这些功能在实际应用中有很大的作用。void del(); /删除物品,及时删除不必要的信息,节省空间。void statistics();/统计信息,这个函数可以达到对物品信息的具体信息的管理。void save(); /物品存盘void load(); /读出物品定义了哪些函数;各个函数完成的功能及主要算法描述。32 结构设计321 系统流程图添加函数流程图:种类=2?种类=3?种类=1?video信息录入paint信息录入book信息录入编号100?201=编号301?添加101=编号201?否否储存已满录入成功是是是否显示显示函数流程图:显示物品信息查找查询函数流程图: 种类=2?种类=3?种类=1?按标号查询按类别查询按标题查询找到?未找到物品显示物品信息是否编辑输入编号找到?未找到信息编号=3?编号=2?编号=1?否对图画修改对光盘修改对图书修改录入修改信息修改完成是322 界面设计主菜单样式 物品查询物品修改:主要用switch语句来实现这些菜单功能第四章 系统实现41 类实现class things /物品资料类public:things(int nu,string ti,string au,string ra); /构造函数 virtual void show()=0;/纯虚函数virtual void save(fstream &fout)=0;protected:int number;string title;string author;string rate;things *next;friend class manage; /manage是操作类;class book:virtual public things /派生类图书public:book(int nu,string ti,string au,string ra,string ph,string is,double pa);void show();void save(fstream &fout);private:string publishing_house; string isbn;double pages;book *next;friend class manage;class video:virtual public things /派生类视频光盘public:video(int nu=101,string ti=e,string au=fei,string ra=一般,string an=fg,int ye=1002,double te=3);void show();void save(fstream &fout);private:string author_name; int year; double time;video *next;friend class manage;class paint:virtual public things /派生类图画public:paint(int nu=101,string ti=e,string au=fei,string ra=一般,string co=china,long le=5,long wi=6);void show();void save(fstream &fout);private:string country;long length;long width;paint *next;friend class manage;class manage / 操作类public: manage();manage();void add(); /添加物品void query();/查询物品void display(); /显示物品库void modify(); /编辑(修改)物品void del(); /删除物品void statistics();/统计信息void save(); /物品存盘void load(); /读出物品private:things *header; /物品链表,header为头指针void clear(); /类内部使用函数,清空内存的链表数据;42 函数实现things:things(int nu=0,string ti=c,string au=shi,string ra=一般)/物品构造函数number=nu;title=ti;author=au;rate=ra;virtual void show()=0;/纯虚函数virtual void save(fstream &fout)=0;book:book(int nu=1,string ti=d,string au=shu,string ra=一般,string ph=廊坊,string is=1,double pa=345):things(nu,ti,au,ra) / 图书构造函数publishing_house=ph; isbn=is;pages=pa;void book:show() /图书显示函数coutsetw(20)编号setw(20)标题setw(20)作者setw(20)评级setw(20)出版社setw(20)isbn号setw(20)页数endl;coutsetw(20)numbersetw(20)titlesetw(20)authorsetw(20)ratesetw(20)publishing_housesetw(20)isbnsetw(20)pagesendl;void book:save(fstream &fout) /图书存盘函数foutpublishing_housetisbntpagest;video:video(int nu,string ti,string au,string ra,string an,int ye,double te):things(nu,ti,au,ra)author_name=an;year=ye;time=te;void video:show()coutsetw(20)编号setw(20)标题setw(20)作者setw(20)评级setw(20)出品者的名字setw(20)出品年份setw(20)视频时长endl;coutsetw(20)numbersetw(20)titlesetw(20)authorsetw(20)ratesetw(20)author_namesetw(20)yearsetw(20)timeendl;void video:save(fstream &fout)foutauthor_nametyearttimet;paint:paint(int nu,string ti,string au,string ra,string co,long le,long wi):things(nu,ti,au,ra)country=co;length=le; width=wi;void paint:show()coutsetw(20)编号setw(20)标题setw(20)作者setw(20)评级setw(20)出品国籍setw(20)作品的长setw(20)作endl;coutsetw(20)numbersetw(20)titlesetw(20)authorsetw(20)ratesetw(20)countrysetw(20)lengthsetw(20)widthendl;void paint:save(fstream &fout)foutcountrytlengthtwidtht;manage:manage() /构造函数在定义操作类的对象时加载文件中的信息.header=0;/load(); /定义对象时,自动加载文件中的数据/析构函数在对象结束时逐个删除链表里各个结点manage:manage()clear();/添加物品信息void manage:add()char ch;string title,author,rate;cout1类别为bookn;cout2类别为videon;cout3类别为paintn;coutch;switch(ch)case 1:things *p;string publishing_house,isbn;double pages;b_num+;if(b_num=100)cout新增图书endl;cout编号=b_numendl;couttitle;coutauthor;coutrate;coutpublishing_house;coutisbn;coutpages;p=new book(b_num,title,author,rate,publishing_house,isbn,pages);p-next=0;if(header!=0) /如果链表已经存在结点things *p2;p2=header;while(p2-next) /查找尾结点p2=p2-next;p2-next=p; /将新结点连接在链表的后面else /若不存在结点(空链表)header=p; /链表头结点即为新建结点elsecout图书库已满,不能添加新的数据。;break;case 2:things *p;string author_name;int year;double time;v_num+;if(v_num=200)cout新增视频光盘endl;cout编号=v_numendl;couttitle;coutauthor;coutrate;coutauthor_name;coutyear;couttime;p=new video(v_num,title,author,rate,author_name,year,time);p-next=0;if(header!=0) /如果链表已经存在结点things *p2;p2=header;while(p2-next) /查找尾结点p2=p2-next;p2-next=p; /将新结点连接在链表的后面else /若不存在结点(空链表)header=p; /链表头结点即为新建结点elsecout视频光盘库已满,不能添加新的数据。;break;case 3:things *p;string country;long length,width;p_num+;if(p_num=300)cout新增图画endl;cout编号=p_numendl;couttitle;coutauthor;coutrate;coutcountry;coutlength;coutwidth;p=new paint(p_num,title,author,rate,country,length,width);p-next=0;if(header!=0) /如果链表已经存在结点things *p2;p2=header;while(p2-next) /查找尾结点p2=p2-next;p2-next=p; /将新结点连接在链表的后面else /若不存在结点(空链表)header=p; /链表头结点即为新建结点elsecout图画库已满,不能添加新的数据。;break;default: cout此物品不存在,请取消添加。;/查询物品信息void manage:query()char ch;cout1按标题查询n;cout2按标号查询n;cout3按类别查询n;coutch;switch(ch)case 1:things *p=header;string ti;coutti;if(header-title=ti)header-show();return; /return的作用为跳出所在函数即query()。elsewhile(p-next)if(p-next-title=ti)p-show();break;p=p-next;if(p-next=null)cout该标题不存在;break; case 2:things *p=header;int no;coutno;if(header-number=no)header-show();return; elsewhile(p-next)if(p-next-number=no)p-show();break;p=p-next;if(p-next=null)cout该编号不存在;break;case 3:things *p=header;char c;cout1类别为图书n;cout2类别为视频光盘n;cout3类别为图画n;coutc;switch(c)case 1:if(header-number=1&header-numbershow();elsewhile(p-next)if(p-next-number=1&p-next-numbershow();p=p-next;if(p-next=null)coutnumber=101&header-numbershow(); elsewhile(p-next)if(p-next-number=101&p-next-numbershow();p=p-next;if(p-next=null)coutnumber=201&header-numbershow();elsewhile(p-next)if(p-next-number201&p-next-numbershow();p=p-next;if(p-next=null)cout该类别没有物品。;break;default: cout该类别不存在。;break;default: coutshow();coutnext;elsecout没有物品信息!endl;/修改物品信息(实际上是删除原来结点,然后把增加的新结点替换原来结点的位置)void manage:modify()int no;coutno;/查找要修改的结点things *p1,*p2;p1=header;while(p1)if(p1-number=no)break;elsep2=p1; /p2记录查找的结点的前一个结点p1=p1-next;/编辑修改物品信息if(p1!=0) /找到要修改的结点/int number; /实参string title,author,rate;p1-show();char c; cout1类别为图书n; cout2类别为视频光盘n; cout3类别为图画n; coutc; switch(c)case 1:string publishing_house,isbn;double pages;couttitle;coutauthor;coutrate;coutpublishing_house;coutisbn;coutpages; /修改的物品信息,编号不能变things *p3;p3=new book(b_num,title,author,rate,publishing_house,isbn,pages);/修改结点替换到链表中 p3-next=p1-next;if(p1=header) /若要替换结点是头结点header=p3; elsep2-next=p3; /要替换的结点p1的前一个结点连接上p3 break;case 2:string author_name;int year;double time;couttitle;coutauthor;coutrate;coutauthor_name;coutyear;couttime;things *p3; p3=new video(v_num,title,author,rate,author_name,year,time);/修改结点替换到链表中 p3-next=p1-next;if(p1=header) /若要替换结点是头结点header=p3; elsep2-next=p3; /要替换的结点p1的前一个结点连接上p3 break;case 3:string country;long length,width;couttitle;coutauthor;coutrate;coutcountry;coutlength;coutwidth;things *p3;p3=new paint(p_num,title,author,rate,country,length,width);/修改结点替换到链表中 p3-next=p1-next;if(p1=header) /若要替换结点是头结点header=p3; elsep2-next=p3; /要替换的结点p1的前一个结点连接上p3 break;default: cout不存在此类别。; /删除原来的物品结点delete p1;cout修改完成!endl;elsecout未找到要编辑的物品信息!endl;/删除物品信息void manage:del()int no;coutno;things *p1,*p2;p1=header;while(p1) /查找要删除的结点if(p1-number=no)break;elsep2=p1; /p2是删除结点的前一个结点p1=p1-next;/删除结点if(p1!=0) /若找到结点,则删除if(p1-number=1&p1-numbernumber=101&p1-
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 林业完善合同(2篇)
- 《婴幼儿常见疾病的识别与预防》课件-婴幼儿的照护特点
- 2025监理师《合同管理》招标方式与合同风险控制要点
- 2025年人教版美术五年级下册教学进度安排表
- 高层力挺新质生产力
- 2025年工厂租赁合同范本
- 2025武汉市存量房屋买卖合同
- 2025年土地使用权抵押合同
- 指甲里有黑线的临床护理
- 2025华茶网技术服务合同
- 瓷砖空鼓装修合同协议
- 河南省普通高中2024-2025学年高三下学期学业水平选择性模拟考试(四)历史试题(原卷版+解析版)
- 一例盆腔脏器脱垂全盆底重建术患者的护理
- 旅游消费者决策
- 企业员工环保培训
- 2025年河北省唐山市玉田县第三中学中考一模地理试卷(含答案)
- 2025届金丽衢十二校高三语文第二次联考考场高分作文点评:“效率至上”与“深度求索”
- 完形填空 20篇 集训-2025年译林版七年级英语下册寒假预习(含答案)
- 各岗位应知应会“明白卡”(含矿长等)
- T-CNSAIA 005-2024 纯钛真空杯标准
- 抖音来客本地生活服务餐饮商家代运营策划方案
评论
0/150
提交评论