《面向对象程序设计》课程设计报告书(模板)
《面向对象程序设计》课程设计报告书(模板) 《面向对象程序设计》课程设计报告书
设计题目:
指导老师:
学生学号:
学生姓名:
同组人员:
时间:
目录
第1章选
题 ..................................................................... ..................................................... 2 1.1 题目背
景 ..................................................................... .................................................... 2 1.2系统实现的具体分
工 ..................................................................... . (2)
1.2.1 标
题 ..................................................................... ..................................................... 2 1.3开发环
境 ..................................................................... ..................................................... 2 第2章设计内
容 .....................................................................
................................................. 3 2.1实现功
能 ..................................................................... ..................................................... 3 2.2 概要设计(涉及类的框图)..................................................................... ...................... 3 2.3 界面设
计 ..................................................................... .................................................... 4 第3章系统实
现 ..................................................................... ................................................. 5 3.1 涉及知识
点 ..................................................................... ................................................ 5 3.2 系统运行(主要运行界面抓
图) .................................................................... ............... 5 3.3 源程序清单(关键代
码) .................................................................... .......................... 6 第4章结束
语 ..................................................................... (16)
第1章选题
1.1 题目背景
随着信息时代的到来和全社会信息化、网络化建设的兴起,传统的图书管理模式和操作方法越来越不能满足用户的需要.智能化、网络化、信息化的图书管理系统应用势在必行。
1.2系统实现的具体分工
系统分为读者类、读者类库、图书类以及主函数等几大模块,其中读者类实现对读者信息的描述,读者类库实现建立读者的个人资料,图书类实现对图书信息的描述,main() 函数实现对程序主界面的引导。
1.2.1 标题
高校图书管理系统
1.3开发环境
Visual C++ 6.0
机型: 方正电脑
处理器名称:Intel(R)Core(TM)2 Duo CPU E7200 @ 2.53GHz
硬盘驱动器:WDC WD1600AAJS-22WAAO
系统内存: 金士顿内存2GB
显示卡: NVIDIA GeFORCE 9400 GT
显示器: 方正科技FG981-W9
操作系统: Microsoft Windows XP Professional
第2章设计内容
2.1实现功能
系统主要包括读者服务、借还图书和退出功能。用户只需先进入读者服务中注册一下就可以进行借阅、查询。
2.2 概要设计(涉及类的框图)
高校图书管理系统
读者类,实现对读
者的信息的描述
Reader
设置姓名增加读者读出读者信息
setname addreader disp
读者类库,实现建
立读者的个人资料
构造RDatabase()函添加、删除、查找、voidreaderdata()
数,将reader.txt读输出读者信息读者库维护
到read[]中
书库的建立
Book
VoidBook::borrowvoidBook::restor
图书命名 ()借书 e()还书
主程序
main
由主界面进入子界主界面的输出
面或退出
2.3 界面设计
界面设计在工作流程上分为结构设计、交互设计、视觉设计三个部分。
结构设计 Structure Design
结构设计也称概念设计 (Conceptual Design),是界面设计的骨架。该图书管理系统运行时界面上的目录体系和词语定义易于用户理解和操作,例如主界面的目录体系包括1 读者服务、2 借还图书、0 退出。其中读者服务又下分目录1 新增、2 更改、3 查找、4 显示、5 删除、0 退出。借还图书一栏中详细列出了书库中所存书本的编号及书名,即1 大学英语、2 高等数学、3 高级语言程序设计。充分体现了结构化的界面设计理念。
交互设计 Interactive Design
交互设计的目的是使产品让用户能简单使用。任何产品功能的实现都是通过人和机器的交互来完成的。该图书管理系统中包含1)清楚的错误提示,误操作后,系统提供有针对性的提示。例如读者输入的姓名或编号错误时,系统会给出相应的提示,以指导读者进行正确的操作。2) 使用用户的语言,而非技术的语言。
3)方便退出。4)导航功能。随时转移功能,很容易从一个功能跳到另外一个功能。例如读者所需各服务间功能转换。人的因素被作为设计的核心体现出来。
视觉设计 Visual Design
该管理系统界面清晰明了,在结构设计的基础上,参照目标群体的心理模型和任务达成进行了视觉设计。
第3章系统实现
3.1 涉及知识点
类封装、面向对象程序设计、数组的应用、循环语句的使用、过程化设计
的思想等
3.2 系统运行(主要运行界面抓图)
主界面
读者服务
借还图书
退出
3.3 源程序清单(关键代码)
#include
#include
#include
#include
class Reader
{
private:
int tag; //删除标记 1:已删 0:未删
int no; //读者编号
char name[10]; //读者姓名
int borbook[5];//所借图书
public:
Reader() {}
char *getname() {return name;} //获取姓名
int gettag() {return tag;} //获取删除标记
int getno() {return no;} //获取读者编号
void setname(char na[]) //设置姓名
{
strcpy(name,na); //strcpy()是字符串函数,用来进行字符串的复制;
strcpy(x,y)把Y的数据复制到X中
}
void addreader(int n,char *na)//增加读者
{
tag=0;
no=n;
strcpy(name,na);
for(int i=0;i<100;i++)
borbook[i]=0;
}
void disp()//读出读者信息
{
cout << setw(5) << no < 书~"< } }; //------------------------------------------------------------------------------------ 读者类库,实现建立读者的个人资料 // class RDatabase { private: int top; //读者记录指针 Reader read[100];//读者记录 public: RDatabase() //构造函数,将reader.txt读到read[]中 { Reader s; top=-1; fstream file("reader.txt",ios::in);//打开一个输入文件 while (1) { file.read((char *)&s,sizeof(s));//sizeof返回一个对象或者类型所占的内存字节数 if (!file)break; top++; read[top]=s; } file.close(); //关闭 reader.txt } void clear()//删除所有读者信息 { top=-1; } int addreader(int n,char *na)//添加读者时先查找是否存在 { Reader *p=query(n); if (p==NULL) { top++; read[top].addreader(n,na); return 1; } return 0; } Reader *query(int readerid)//按编号查找 { for (int i=0;i<=top;i++) if (read[i].getno()==readerid && read[i].gettag()==0) { return &read[i]; } return NULL; } void disp() //输出所有读者信息 { for (int i=0;i<=top;i++) read[i].disp(); } void readerdata();//读者库维护 ~RDatabase() //析构函数,将read[]写到reader.txt文件中{ fstream file("reader.txt",ios::out); for (int i=0;i<=top;i++) if (read[i].gettag()==0) file.write((char *)&read[i],sizeof(read[i]));//sizeof()当操作数具有数组类型时,其结果是数组的总字节数 file.close(); } }; void RDatabase::readerdata() { char choice; char rname[20]; int readerid; Reader *r; while (choice!='0') { cout <<"\n\n\t\t\t读者服务\n\n\n\t\t\t 1 新增 \n\n\t\t\t 2 更改\n\n\t\t\t 3 查找\n\n\t\t\t 4 显示 \n\n\t\t\t 5 删除\n\n\t\t\t 0 退出"< cout<<"请输入您的选择:"; cin >> choice; switch (choice) { case '0': return; case '1': cout << "输入读者编号:"; cin >> readerid; cout << "输入读者姓名:"; cin >> rname; addreader (readerid,rname); break; case '2': cout << "输入读者编号:"; cin >> readerid; r=query(readerid); if (r==NULL) { cout << " 该读者不存在 "< } cout << "输入新的姓名:"; cin >> rname; r->setname(rname); break; case '3': cout << "读入读者编号:"; cin >> readerid; r=query(readerid); if (r==NULL) { cout <<"该读者不存在"<< endl; break; } r->disp(); break; case '4': disp(); break; case '5': clear(); break; default: cout<<"输入错误,请重新输入:"; break; } } }; //----------------------------------------------------------------------------------------------- ------ class Book { public: void setBook(char*,int); void borrow(); void restore(); void display(); void T(); private: char bookname[40]; int number; char flag; }; //在类外定义Book类的成员函数 void Book::T() { cout<<"请输入借阅或归还标志(b/r):"; cin>>flag; switch (flag) {case 'b':borrow();break; case 'r':restore(); } } void Book::setBook(char *name,int num) { strcpy(bookname,name); number=num; } void Book::borrow() { if (number==0) {cout<<"已没存书,退出~"< abort(); } number=number-1; cout<<"借一次,现存书量为:"< } void Book::restore() { number=number+1; cout<<"还一次,现存书量为:"< } void Book::display() { cout<<"存书情况: "< //main() 函数的实现,程序的主界面的引导 int main() { char choice; int bookid,readerid; RDatabase R; Reader *r; Book B; while(choice!='0') { cout < 系统??????\n\n\n"; cout <<"\t\t\t1 读者服务 \n\n\t\t\t2 借还图书 \n\n\t\t\t0 退出"< cout<<"请输入您的选择:"; cin >> choice; switch (choice) { case '0': cout <<" 谢谢使用"< return 0; case '1': R.readerdata(); break; case '2': cout <<"\n\n\n\t\t\t 借还图书\n\n\n"; cout<<"\t\t\t书库中现存三种图书:\n\n\t\t\t1 大学英语\n\n\t\t\t2 高等数学\n\n\t\t\t3 高级语言程序设计"< cout<<"请输入读者编号:"< cin >>readerid; cout <<"请输入图书编号: "; cin >>bookid; r=R.query(readerid);//按编号查找 if (NULL==r) { cout <<" 不存在该读者,不能借书"<< endl; break; } switch(bookid) { case 1: B.setBook("大学英语",1000); B.display(); B.T(); break; case 2: B.setBook("高等数学",1000); B.display(); B.T(); break; case 3: B.setBook("高级程序语言设计",1000); B.display(); B.T(); break; default:cout<<"输入错误,请重新输入:"; break; } } } } 第4章结束语 这次课程设计历经一个星期左右,通过这一个星期的学习,发现了自己的很多不足,自己知识的很多漏洞,也有很多闻所未闻的东西,理解实践的能力急需提高。课程设计是培养学生综合运用所学知识,发现,提出,分析和解决实际问题,锻炼实践能力的重要环节,是对学生实际工作能力的具体训练和考察过程. 它为学生提供了一个既动手又动脑,独立实践的机会,将课本上的理论知识和实际有机的结合起来,锻炼学生的分析解决实际问题的能力。提高学生运用所学知识解决实际问题的能力。 这次的课程设计也让我看到了团队的力量,我认为我们的工作是一个团队的工作,团队需要个人,个人也离不开团队,必须发扬团结协作的精神。刚开始的时候,大家就按照分配好了的任务进行,并且经常聚在一起讨论各个方案的可行性。在课程设计中只有一个人的知识是远远不够的,必须要结合每个人的知识,否则一个人的错误,就有可能导致整个工作失败。团结协作是我们成功的一项非常重要的保证。而这次设计也正好锻炼我们这一点,这也是非常宝贵的。 回顾起此次课程设计,至今我仍感慨颇多,起初在选题时,做出决定是非常困难的,若选择简单的题目,很有可能会很早就做完了,那样岂不是浪费了许多宝贵的时间;若选择比较难的题目,感觉自己的能力可能不够,不能完成课程设计,最后,在我们组的商量之下选了高校图书管理系统这个课题。定下了我们的目标。接着我们都开始做了,我们明确的分了一下任务,然后每个人都去干自己的了,对于 不会的,不太清楚的我们都会在一起讨论,研究。通过本次课程设计,我深刻认识到了“理论联系实际”的这句话的重要性与真实性,我不但知道了以前不知道的理论知识,而且也巩固了以前知道的知识。最重要的是在实践中理解了书本上的知识,明白了学以致用的真谛。也明白老师为什么要求我们做好这个课程设计的原因。他是为了教会我们如何运用所学的知识去解决实际的问题,提高我们的动手能力。在整个设计到按各种功能输出以及调试过程中,我个人感觉调试部分是最难的,我们把运行错误和不能运行的部分一遍遍的修改直到达到预期的效果。初拿到题目觉得很沮丧,虽然学了这么久的C++语言,但还是觉得它很深奥,对它几乎是一无所知。如何着手,在接下来的时间里大家集思广益,在一起认真讨论,不甚理解的问题去查阅一些资料。然后写代码,运行调试……虽然在这个过程中遇到了很多问题,有时候甚至为某个地方而茶饭不思。但程序编辑成功后那种激动,问题解决中遇到挑战自己亲自动手,终于解决那种成就感,几个人一起讨论,一起分析,同悲同喜那种患难与共的感觉,都使我们深深地体会到了感到学习的快乐和团结的力量,也让我们真正学习到了一些的知识,使我们感到前途是光明的、充满挑战与趣味的。计算机专业是一个需要紧密合作的工 作,只有在一起合作才能高做出好的程序,但在其中也有一些的问题是我们都不能理解的,有很多是我们上课没有碰到的一些的问题真的是很让人头疼的。通过这次编程使我们认识到在以后的学习中要多做练习增加自己的知识面才能更好的适应自己的工作,在其中由最初的沮丧中出来,充满信心地去解决问题。通过这次课程设计使我懂得了理论与实际相结合是很重要的,只有理论知识是远远不够的,只有把所学的理论知识与实践相结合起来,从理论中得出结论,才能真正为社会服务,从而提高自己的实际动手能力和独立思考的能力。在设计的过程中遇到问题,可以说得是困难重重,同时在设计的过程中发现了自己的不足之处,对以前所学过 的知识理解得不够深刻,掌握得不够牢固,比如说return的用法……通过这次课程设计之后,我决定一定把以前所学过的知识重新温故。 这次课程设计终于顺利完成了,在设计中遇到了很多编程问题,最后在张老师的辛勤指导下,以及同学们的帮助下,最终迎刃面解。在此我向张老师和那些帮助过我的同学们表示最衷心的感谢~ 参考文献 [1] 钱能. C++程序设计教程(第一版).清华大学出版社 [2] 钱能. C++程序设计教程(第二版).清华大学出版社 [3] C++入门经典(清华大学出版) 简答题 1、传统的结构化程序设计的优点和缺点是什么? 优点: (1)这种程序设计方法力求算法描述准确。 (2)对每一子过程模块容易进行程序正确性证明。 缺点: (1)这种程序设计方法本质上是面向“过程”的,而“过程”和“操作”又是不稳定和多变的,因此不能直接反映人类求解问题的思路。 (2)程序代码可重用性差。程序中除少数标准库函数外,每设计一个程序时,程序员几乎从零做起。即使重用代码,通常也是通过拷贝或编辑重新生成一份。 (3)维护程序的一致性困难。该种方法将数据与对数据进行处理的程序代码分离。 2、什么是对象? 每个对象都具有属性(Attribute)和方法(Method)这两方面的特征。对象的属性描述了对象的状态和特征,对象的方法说明了对象的行为和功能,并且对象的属性值只应由这个对象的方法来读取和修改,两者结合在一起就构成了对象的完整描述。 3、什么是消息? 在面向对象的程序设计中,由于对象描述了客观实体,它们之间的联系通过对象间的联系来反映。当一个对象需要另外一个对象提供服务时,它向对方发出一个服务请求,而收到请求的对象会响应这个请求并完成指定的服务。这种向对象发出的服务请求就称为消息。4、什么是多态性? 所谓多态性是指当程序中的其他部分发出同样的消息时,按照接收消息对象的不同能够自动执行类中相应的方法。其好处是,用户不必知道某个对象所属的类就可以执行多态行为,从而为程序设计带来更大方便。 5、什么是面向对象的程序设计方法? 这种方法将设计目标从模拟现实世界的行为转向了模拟现实世界中存在的对象及其各自的行为。 在OOP中,将“对象”作为系统中最基本的运行实体,整个程序即由各种不同类型的对象组成,各对象既是一个独立的实体,又可通过消息相互作用,对象中的方法决定要向哪个对象发消息、发什么消息以及收到消息时如何进行处理等。 6、面向对象方法的特点是什么? (1)OOP以“对象”或“数据”为中心。由于对象自然地反映了应用领域的模块性,因此具有相对稳定性,可以被用作一个组件去构成更复杂的应用,又由于对象一般封装的是某一实际需求的各种成分,因此,某一对象的改变对整个系统几乎没有影响。 (2)引入了“类”(class)的概念。类与类以层次结构组织,属于某个类的对象除具有该类所描述的特性外,还具有层次结构中该类上层所有类描述的全部性质,OOP中称这种机制为继承。 (3)OOP方法的模块性与继承性,保证了新的应用程序设计可在原有对象的数据类型和功能的基础上通过重用、扩展和细化来进行,而不必从头做起或复制原有代码,这样,大大减少了重新编写新代码的工作量,同时降低了程序设计过程中出错的可能性,达到了事半功倍的效果。 7、面向对象的程序设计方法与结构化程序设计方法的比较 (1)传统的结构化程序设计方法以过程为中心构造应用程序,数据和处理数据的过程代码是分离的、相互独立的实体,设计出的程序可重用代码少,且当代码量增加时维护数据和代码的一致性困难。 专题摄影职业装与色彩作品 设计制作说明书 设计制作人:胡雯 班级 15媒体2 学号 2015145216 2016.9 一、本设计的目的和任务 通过本设计主要达到以下目的: 1、使学生进一步增强“摄影的具像特征和象征性特征”的感性认识,加深对摄影曝光、感光度、镜头景深、光圈快门等技术理论和方法的全面理解和掌握。 2、使学生全面掌握以数码照相机为主要器材手段进行摄影创作的流程和方法。尝试创作一组具有个性视角、和独特技术方法的“专题摄影作品”,并自我点评,作出恰当“命名”和“寓意说明”以备推荐到“相应级别摄影赛事”上参展。 通过本设计主要完成的任务: 使学生在课内20学时+课外20学时内(一周时间)完成一组具有个性视角、和独特技术方法的“摄影作品至少6幅”,并自我点评和作出恰当的“命名”和“寓意说明”,以备推荐参展。 二、完成本设计的“创意”准备和技术准备 (一)、选题说明和“创意”简介 1.选题说明 我的选题是“职业装与色彩”,例如我们看到橘色不难想到环卫工人,看到绿色不难想到军人,看到蓝色不难想到警察……所以我想以有代表色的职业装的为出发点,来表现不同职业的劳动人民的工作状态,以表达对劳动者的尊敬与感激之情。 2.“创意”简介 偶然在微博上看见了一段记录清朝长安街头的黑白影像,对比如今的生活,我觉得其中很大的一个变化就是我们现在的职业划分更加的明确并且管理的更加规范,不同种类,色彩各异的职业装的出现便能够说明这点,所以我选取了几种大众已经非常熟悉且有代表性的制服作为代表,来表现劳动者的工作状态。 3.附:选题创意策划分析报告表(最下) (二)、拍摄技术准备和计划 1.创作“摄影作品”的技术手段简述 1)摄影镜头的光学特性和景深原理的应用 景深是指镜头所能对应拍摄到的景物的清晰范围。景深原理可以从下图中得到分析。 影响景深的两个主要因素是光圈和焦距。 (1)光圈口径愈大,在感光片上的弥散圆愈大,所以得到的景深越小。 1 什么是面向对象程序设计,它与传统的结构式程序有什么不同。 面向对象程序设计是一种适用于设计、开发各类软件的范型。它是将软件看成是一个由对象组成的社会:这些对象具有足够的智能,能理解从其他对象接受的信息,并以适当的行为作出响应;允许低层对象从高层对象继承属性和行为。通过这样的设计思想和方法,将所模拟的现实世界中的事物直接映射到软件系统的解空间。 与传统的结构式程序设计相比,面向对象程序设计吸取了结构式程序设计的一切优点(自顶向下、逐步求精的设计原则)。而二者之间的最大差别表现在: ·面向对象程序采用数据抽象和信息隐藏技术使组成类的数据和操作是不可分割的,避免了结构式程序由于数据和过程分离引起的弊病。 · 面向对象程序是由类定义、对象(类实例)和对象之间的动态联系组成的。而结构式程序是由结构化的数据、过程的定义以及调用过程处理相应的数据组成的 2 用面向对象方法建立模型的思维过程是怎样的。 用面向对象方法建立拟建系统的模型的过程就是从被模拟现实世界的感性具体中抽象要解决的问题概念的过程。这种抽象过程分为知性思维和具体思维两个阶段,其中:·知性思维是从感性材料中分解对象,抽象出一般规定,形成了对对象的普遍认识。·具体思维是从知性思维得到出的一般规定中揭示的事物的深刻本质和规律,其目的是把握具体对象的多样性的统一和不同规定的综合。 3 解释以下概念: ①对象:在现实世界中,对象就是可以感觉到的实体。每个对象具有一个特定的名字以 区别于其他对象;具有一组状态用来描述它的某些特性;具有一组操作,每一个操作决定对象的一种功能或行为(为自身服务的操作和为其他对象提供服务的操作)。而在面向对象系统中,对象是可以标识的存储区域。每个对象的状态被保存在此区域中,而实现一类对象行为的操作(代码)被保存在另外相关的存储器区域中。 ②消息:消息是要求某个对象执行其某种功能操作(方法)的规格说明。因此,消息是 由消息的接收者、消息要求提供的操作(消息名)和必要的参数组成的。 ③类:在现实世界中,类是对一组具有共同特性(属性和行为)的客观对象的抽象。而 在面向对象系统中,类是由程序员自定义的具有特定结构和功能的类型,是一种代码共享的手段。 ④实例:任何一个对象都是该对象所属类的一个具体实例。 ⑤公有消息:是由对象外向对象发送的消息,用于激活该对象的某种方法。 ⑥私有消息:是由对象向自身发送的消息,用于内部操作;该类消息不能从对象外向该 对象发送。 ⑦消息序列:在面向对象系统中一个事件的发生总会有多个对象的多次相互作用才能完 成,使得这些对象能够相互作用的消息组成的序列被称为消息序列。 4 类与实例的关系如何? 类是创建对象的模板,而对象是实现类的实例。属于同一类的不同实例必须具有: ·相同的操作集合; ·相同的静态属性集合; ·不同的对象名和属性动态值。 实验7 分光计的调整与使用 ★1、本实验所用分光计测量角度的精度是多少仪器为什么设两个游标如何测量望远镜转过的角度 本实验所用分光计测量角度的精度是:1'。为了消除因刻度盘和游标盘不共轴所引起的偏心误差,所以仪器设两个游标。望远镜从位置Ⅰ到位置Ⅱ所转过的角度为2 )_()('1'212?????+-= ,注:如越过刻度零点,则必须按式)(120360??--来计算望远镜的转角。 ★2、假设望远镜光轴已垂直于仪器转轴,而平面镜反射面和仪器转轴成一角度β,则反射的小十字像和平面镜转过1800后反射的小十字像的位置应是怎样的此时应如何调节试画出光路图。 反射的小十字像和平面镜转过180o 后反射的小十字像的位置是一上一下,此时应该载物台下螺钉,直到两镜面反射的十字像等高,才表明载物台已调好。光路图如下: ★3、对分光计的调节要求是什么如何判断调节达到要求怎样才能调节好 调节要求:①望远镜、平行光管的光轴均垂直于仪器中心转轴;②望远镜对平行光聚焦(即望远调焦于无穷远);③平行光管出射平行光;④待测光学元件光学面与中心转轴平行。 判断调节达到要求的标志是:①望远镜对平行光聚焦的判定标志;②望远镜光轴与分光计中心转轴垂直的判定标志;③平行光管出射平行光的判定标志;④平行光管光轴与望远镜光轴共线并与分光计中心轴垂直的判定标志。 调节方法:①先进行目测粗调;②进行精细调节:分别用自准直法和各半调节法进行调节。 4、在分光计调节使用过程中,要注意什么事项 ①当轻轻推动分光计的可转动部件时,当无法转动时,切记不能强制使其转动,应分析原因后再进行调节。旋转各旋钮时动作应轻缓。②严禁用手触摸棱镜、平面镜和望远镜、平行光管上各透镜的光学表面,严防棱镜和平面镜磕碰或跌落。③转动望远镜时,要握住支臂转动望远镜,切忌握住目镜和目镜调节手轮转动望远镜。④望远镜调节好后不能再动其仰角螺钉。 5、测棱镜顶角还可以使用自准法,当入射光的平行度较差时,用哪种方法测顶角误差较小 ?2 1=A 的成立条件是入射光是平行的,当入射光的平行度较差时,此公式已不再适用,应用自准直法测三棱镜的顶角,用公式?-=1800 A 来计算,误差较小。面向对象程序设计考前复习题及答案
摄影作品课程设计报告书
什么是面向对象程序设计
大学物理实验答案2
(完整版)《面向对象程序设计》答案