《面向对象程序设计实践》课程实习

更新时间:2023-04-30 06:57:01 阅读量: 综合文库 文档下载

说明:文章内容仅供预览,部分内容可能不全。下载后的文档,内容与下面显示的完全一致。下载之前请确认下面内容是否您想要的,是否完整无缺。

《面向对象程序设计实践》课程实习

学生姓名张少涛

所在专业计算机科学与技术

所在班级1132

任课老师陈有英

实习时间2014年 5 月 3 日

摘要

当今时代是飞速发展的信息时代。在各行各业中离不开信息处理,这正是计算机被广泛应用于信息管理系统的环境。计算机的最大好处在于利用它能够进行信息管理。使用计算机进行信息控制,不仅提高了工作效率,而且大大的提高了其安全性。尤其对于复杂的信息管理,计算机能够充分发挥它的优越性。计算机进行信息管理与信息管理系统的开发密切相关,系统的开发是系统管理的前提。

系统就是为了管理好图书馆信息而设计的。

图书馆作为一种信息资源的集散地,图书和用户借阅资料繁多,包含很多的信息数据的管理。根据调查得知,他们以前对信息管理的主要方式是基于文本、表格等纸介质的手工处理,对于图书借阅情况(如被谁所借,是否归还)的统计和核实等往往采用对借书卡的人工检查进行。数据信息处理工作量大,容易出错;由于数据繁多,容易丢失,且不易查找。总的来说,缺乏系统,规范的信息管理手段。尽管有的图书馆有计算机,但是尚未用于信息管理,没有发挥它的效力,资源闲置比较突出,这就是管理信息系统的开发的基本环境。

基于这此问题,有必要建立一个图书管理系统,使图书管理工作规范化,系统化,程序化,避免图书管理的随意性,提高信息处理的速度和准确性,能够及时、准确、有效的查询和修改图书情况。

关键字:面向对象程序设计;c++;

目录

一、系统需求分析 (4)

1.1系统设计的目的和意义 (4)

1.2系统的功能需求 (4)

二、系统总体设计 (6)

三、详细设计 (7)

3.1类层次图 (7)

3.2界面设计 (7)

3.3图书管理系统各功能模块的实现 (8)

3.3.1借阅书刊模块 (8)

3.3.2归还书刊模块 (8)

3.3.3预定书刊模块 (9)

3.3.4取消预定书刊模块 (9)

3.3.5借阅者维护模块 (9)

3.3.6书刊维护模块 (10)

四、系统实现 (10)

五、实习总结与体会 (15)

附录:源程序清单 (16)

参考资料 (43)

一、系统需求分析

1.1系统设计的目的和意义

随着计算机技术的飞速发展,电子信息化替代了传统的管理方法。这是一种现代流行的经营模式,采用管理系统是能够有效提高管理效率的。

图书馆管理系统是学校管理机制中重要的一环。图书馆代表着一间学校或者地区的文化标志。因为图书馆馆丰富的资源能改带给我们重要并且优越的学习资源。通过对图书管理系统的运行管理机制进行调查研究,开发了此图书系统。

1.2系统的功能需求

经过详细的用户调查,在现行业务流程和数据分析的基础上,基本可以确定系统设计必须达到的目标。

以下是图书管理系统必须具备的功能:

1.新进图书的录入功能:对于购进的新书,系统必须具备图书信息资料的录入功能。

2.图书的查询修改功能:当图书资料发生变化,如图书丢失或有错误信息输入时,则应能够及时对数据进行修改和补充。

3.借阅的登记,归还的登记,预定的登记功能:系统的主要功能之一,供借阅者借阅图书、归还图书,预定图书并进行登记。

4.借阅者信息的增加、删除和修改功能:系统主要功能之一,建立借阅者信息,并对其进行维护。

系统流程图:

二、系统总体设计

在图书管理系统中,借阅者的主要信息为:借阅者卡号、借阅者姓名、借书编号、预定书编号;书刊的主要信息为:ISBN/ISSN号、书籍名称、书籍数量。

图书管理系统中系统需要我们实现十二个功能:1.新增借阅者 2.删除借阅者 3.显示借阅者4.查找借阅者 5.新增书刊 6.删除书刊7.显示书刊8.查找书刊9.借阅书刊10.归还书刊11.预定书刊12.取消预定

要为每个借阅者建立一个账户,并给借阅者发放借阅卡(借卡可以提供借阅卡号、借阅者名),账户中存储借阅者的个人信息、借阅信息以及预定信息。持有借阅卡的借阅者可以借阅书刊、返还书刊、查询书刊信息、预定书刊并取消预定,但这些操作都是通过图书管理员进行的,也即借阅者不直接与系统交互,而是图书管理员充当借阅者的代理与系统交互。在借阅书刊时,需要输入所借阅的书刊名,书刊的ISBN/ISSN号,然后输入借阅者的图书卡号和借阅者名,完成后提交所填表格,系统验证借阅者是否有效(在系统中存在账户),若有效,借阅请求被接受,系统查询数据库系统,看借阅者所借阅的书刊是否存在,若存在,则借阅者可借出书刊,建立并在系统中存储借阅记录。借阅者还书后,删除关于所还书刊的借阅记录。如果借阅者所借的书刊已被借出,借阅者还可预定该书刊,一旦借阅者预定的书刊可以获得,就将书刊直接寄给预定人。

经过初步分析,图书馆管理系统应该具有以下几个模块:

三、详细设计

3.1类层次图

图书管理系统的四个类的层次图为:

3.2界面设计

3.3图书管理系统各功能模块的实现

3.3.1借阅书刊模块

3.3.2归还书刊模块

3.3.3预定书刊模块

3.3.4取消预定书刊模块

3.3.5借阅者维护模块

3.3.6书刊维护模块

四、系统实现

·

1.借阅书刊

2.返还书刊

3.预定书刊

4.取消预定

5.书刊维护

5.1新增书刊

5.2删除书刊

5.3查找书刊

5.4显示书刊

6借阅者维护

6.1发行借阅卡

6.2删除借阅者

6.3查找借阅者

通过借阅卡卡号查找:

通过借阅者姓名查找:

6.4显示借阅者

五、实习总结与体会

经过一个学期对《c++程序设计》的学习,我学习到了基本的理论知识,了解到了C++语言程序设计的思想,这些知识都为我的课程实践和进一步的学习打下了坚实的基础。

在C++课程设计中,我体会颇多,学到了很多东西。我加强了对C++程序设计这门课程的认识,并且复习了自己以前学习到的知识。这些都使得我对计算机语言的学习有了更

深入的认识!总之,通过这次课程设计,我收获颇丰,相信会为自己以后的学习和工作带来很大的好处。像图书管理系统这样的程序设计,经历了平时在课堂和考试中不会出现的问题和考验。而这些问题,这并不是我们平时只靠课本,就可以轻易解决的。所以,锻炼了我们挑战难题,学会用已掌握的知识去解决具体问题的能力,进一步培养了独立思考问题和解决问题的能力。特别是学会了在Visual C++中如何调试程序的方法。当然,老师的指导和同学的帮助也是不可忽视的,他们给了我许多提示和帮助,教会了我编译复杂程序的方法。

在老师和同学的帮助下,通过自己的努力,终于完成了这次图书管理系统的简单课程设计。我经过这段时间的编程,对其中的艰辛,我是深有体会。从刚开始的选择程序、理解程序到后来的调试程序以及改进程序这个过程中,我遇到了各种各样的困难和挫折。但是我坚定信念,对自己充满了信心,想尽一切办法克服重重困难。

通过课程设计的训练,我进一步学习和掌握了对程序的设计和编写,从中体会到了面向对象程序设计的方便和巧妙。懂得了在进行编写一个程序之前,要有明确的目标和整体的设计思想。另外某些具体的细节内容也是相当的重要。这些宝贵的编程思想和从中摸索到的经验都是在编程的过程中获得的宝贵财富。这些经验对我以后的编程会有很大的帮助的,我要好好利用。

虽然这次课程设计是在参考程序的基础之上进行的,但是我觉得对自己是一个挑战和锻炼。我很欣慰自己能在程序中加入自己的想法和有关程序内容,也就是对它的程序改进了一番改进,并有创新。但是我感觉自己的创新还不够典型,总之还不是很满意。另外由于时间的紧迫和对知识的了解不够广泛,造成了系统中还存在许多不足,功能上还不够完善。以后我会继续努力,大胆创新,争取能编写出透射着自己思想的程序。这次课程设计让我充分认识到了自己的不足,认识到了动手能力的重要性。我会在以后的学习中更加努力锻炼自己,提高自己,让自己写出更好更完善的程序,为以后的编程打好基础!

总而言之,这次C++程序设计实践让我收获很大。

附录:源程序清单

#include

#include

#include

#include

#include

using namespace std;

const int Maxbor=10;//借阅者最多借10本书

const int Marbooking=5;//借阅者最多预定5本书

const int Maxbook=5;//一本书刊最多被5个人同时预定

//借阅者类,对借阅者信息进行描述

class Reader{

unsigned int no;

string name;

string bookid[Maxbor];//所借图书

string booking[Marbooking];//所预定图书

int bookforno;//预定书刊数量

int borno;//所借书刊数量

public:

Reader(){}

Reader *next;

int getno(){return no;}//获取借阅者卡号

string getname(){return name;}//获取借阅者姓名

int getbookforno(){return bookforno;}//获取预定书刊数量int getborno(){return borno;}//获取所借书刊数量

void addreader(int n,string na){//增加借阅者

no=n;

name=na;

bookforno=0;

borno=0;

for(int i=0;i

bookid[i]="NULL";

for(i=0;i

booking[i]="NULL";

}

void borrowbook(string bbookid){//借书操作

for(int i=0;i

if(bookid[i]=="NULL"){

bookid[i]=bbookid;

borno++;

return;

}

}

int bookfor(string bookid){//预定操作

for(int i=0;i

if(booking[i]=="NULL"){

booking[i]=bookid;

bookforno++;

return 1;

}

return 0;

}

int retbook(string book){//还书操作

for(int i=0;i

if(bookid[i]==book){

bookid[i]="NULL";

borno--;

return 1;

}

return 0;

}

int disbookfor(string book){//删除预定记录

for(int i=0;i

if(booking[i]==book){

booking[i]="NULL";

bookforno--;

return 1;

}

return 0;

}

void input(ifstream &is)//从文件读取信息

{

is>>no>>name>>borno>>bookforno;

for(int i=0;i

is>>bookid[i];

for(i=0;i

is>>booking[i];

}

void output(ofstream &os)//将借阅者信息写到文件中

{

os<

for(int i=0;i

os<

for(i=0;i

os<

}

void display(){//显示借阅者信息

cout<<"借阅者卡号:"<

for(int i=0;i

if(bookid[i]!="NULL")

cout<

cout<

for(i=0;i

if(booking[i]!="NULL")

cout<

cout<

}

};

//借阅者库类,实现建立借阅者的个人资料

class RDatabase{

Reader *head;//表头指针

Reader *top;//表尾指针

public:

RDatabase(){//构造函数,将reader.dat读到链表中

Reader s;

head=NULL;

top=NULL;

ifstream infile("reader.dat",ios::in);

if(!infile)

{cout<<"打开reader.dat文件失败";return;}

while(!infile.eof()){

Reader *temp=new Reader();

temp->input(infile);

if(infile.eof())//由于文件末端有一换行,忽略最后一次读取break;

if(head==NULL)

head=temp;

else

top->next=temp;

top=temp;

top->next=NULL;

}

infile.close();

}

void find()

{

char choice;

string name;

int readerid;

Reader *r;

cout<

choice=getch();

switch(choice)

{

case '1':cout<<"请输入借阅卡卡号:";

cin>>readerid;

while(!cin)

{

cin.clear();

cin.ignore(1024,'\n');

cout<<"借阅卡卡号为整形,请输入整形:";

cin>>readerid;

}

r=find(readerid);

if(r==NULL)

{

cout <<" 该借阅者不存在" << endl;

system("pause");

system("cls");

break;

}

r->display();

system("pause");

system("cls");

break;

case '2':cout<<"请输入借阅者姓名:";

cin>>name;

find(name);

system("pause");

system("cls");

break;

default:system("cls");return;

}

}

Reader *find(int readid){//按编号查找

for(Reader *temp=head;temp!=NULL;temp=temp->next) if(temp->getno()==readid)

return temp;

return NULL;

}

void find(string cname)//按姓名查找

{

Reader *temp=head;

int tag=0;

while(temp!=NULL)

{

if(temp->getname()==cname)

{

temp->display();

tag=1;

本文来源:https://www.bwwdw.com/article/6tye.html

Top