c++语言课程设计影像管理系统课程设计论文.docx
《c++语言课程设计影像管理系统课程设计论文.docx》由会员分享,可在线阅读,更多相关《c++语言课程设计影像管理系统课程设计论文.docx(27页珍藏版)》请在冰豆网上搜索。
c++语言课程设计影像管理系统课程设计论文
本科生课程设计说明书
题目:
c++语言课程设计
——影像管理系统
学生姓名:
学号:
专业:
计算机科学与技术
班级:
计算机三班
指导教师:
课程设计任务书
课程名称
c++++语言课程设计
设计题目
影碟信息管理系统
指导教师
时间
一、教学要求
1.巩固和加深学生对c++++语言课程的基本知识的理解和掌握
2.掌握c++++语言编程和程序调试的基本技能
3.利用c++++语言进行基本的软件设计
4.掌握书写程序设计说明文档的能力
5.提高运用c++语言解决实际问题的能力
二、设计资料及参数
每个学生在教师提供的课程设计题目中任意选择一题,独立完成,题目选定后不可更换。
影碟信息管理系统
图影碟息包括:
电影名称、出品公司、导演姓名、主演姓名(至少2个)、上映时间、库存数量、价格等。
试设计一影碟信息管理系统,使之能提供以下功能:
v影碟信息录入功能(影碟信息用文件保存)--输入;影碟信息浏览功能--输出
v查询或排序功能:
(至少两种查询方式)--算法
●按电影名称查询●按主演姓名查询
v影碟信息的插入、删除与修改
v影碟的借出与归还
三、设计要求及成果
1.分析课程设计题目的功能需求(可选用数组或链表实现,可多人(最多3人)协作完成一个题目)
2.写出详细设计说明(至少包括功能实现分析和模块流程图)
3.编写程序代码,调试程序使其能正确运行(代码书写要规范,标示符要见名知意,要有必要的注释,每人至少3个函数,每人至少200行代码,不包括注释和花括号)
4.设计完成的软件要便于操作和使用
5.设计完成后提交课程设计报告(请严格按照模板进行排版)
四、进度安排
第一天 选择课程设计题目,分析课题的要求
第二天 编程
第三天 编程及调试
第四天 写课程设计报告
第五天 提交课程设计报告(打印稿及电子稿)
五、评分标准
1.根据平时上机考勤、表现和进度,教师将每天点名和检查
2.根据课程设计完成情况,必须有可运行的软件。
3.根据课程设计报告的质量,如有雷同,则所有雷同的所有人均判为不及格。
六、建议参考资料
1.《c++语言程序设计》,谭浩强,清华大学出版社
2.《c++语言程序设计课程设计》,刘振安,机械工业出版社
影像信息管理系统目录
第一章需求分析
1.1引言
c++语言具有高级语言的强大功能,却又有很多直接操作计算机硬件的功能(这些都是汇编语言的功能),因此,c++语言通常又被称为中级语言。
学习和掌握c++语言,既可以增进对于计算机底层工作机制的了解,又为进一步学习其他高级语言打下了坚实的基础。
为了方便对影像进行管理,用c++程序实现这一想法。
1.2任务概述
影像信息管理系统
影像信息包括:
碟片名称,演员,类型,可否借阅等。
试设计一碟片信息管理系统,使之能提供以下功能:
v碟片信息录入功能(碟片信息用文件保存)--输入
v碟片信息浏览功能--输出
v查询或排序功能:
(至少两种种查询方式)--算法
●按名称查询●按演员名查询
v碟片的借出与归还
1.3数据描述
classcd
{
friendclassMoiveSystem;
private:
charfilm_name[10];
charactor[10];
chartype[10];
intn;
};
classMoiveSystem
{
public:
MoiveSystem();
public:
voidadd(void);
intcheck_name(void);
intcheck_actor(void);
intrent(void);
voidretur_n(void);
private:
cdCD[1000];
intcd_number;
};
MoiveSystem:
:
MoiveSystem()
{
cd_number=1;
}定义结构体类型,该类型包括四个成员:
依次为碟片的名称,演员,类型,可否借阅。
1.4功能需求
实现:
按名称查询
按演员名查询
增加碟片
借阅碟片
归还碟片
1.5性能需求
要求反应时间快,对碟片的信息了解较全面。
(时间特性)
1.6运行需求
屏幕格式:
有菜单和工具栏以方便操作
各数据信息可以在屏幕直接修改
各数据结果可在屏幕显示
硬件环境:
普通计算机
编译环境:
vc++++6.0
1.7任务计划
设计c++程序,实现影像管理的各项功能。
碟片查询:
两种查询方式分别为按名称查询,按演员查询,其中如果按要求找到对应的碟片,则输出该书目的所有信息。
碟片增加:
可输入碟片信息。
碟片借阅:
可按名称查询到碟片并借阅。
碟片归还:
可按名称查询到碟片并归还。
第二章概要设计
2.1总体设计
总体设计目标:
使用者可以利用本系统进行对影像借阅的各项运算操作,根据用户的需求自动的进行添加碟片,借阅碟片,归还碟片。
查找所要的碟片,查阅碟片的详细资料,查阅演员的详细资料。
最后清晰完整的结果于屏幕中。
大大方便使用者对碟片借阅的操作,不仅节省时间,而且提高准确性,可以达到事半功倍的效果。
总体设计策略:
本系统采用的是自顶向下、层次化的模块结构。
结构图:
2.2数据类型设计(或数据结构设计)
classcd
{
friendclassMoiveSystem;
private:
charfilm_name[10];
charactor[10];
chartype[10];
intn;
};
2.3接口设计
一.voidadd(void);
二.intcheck_name(void);
三.intcheck_actor(void);
四.intrent(void);
五.voidretur_n(void);
2.4运行界面设计
第三章详细设计
3.1输入模块设计
voidMoiveSystem:
:
add(void)
{
FILE*a;
chars;
s='y';
system("cls");
while(s=='y')
{
system("cls");
cout<<"请输入碟片名称:
\n";
scanf("%s",CD[cd_number].film_name);getchar();
cout<<"请输入演员名字:
\n";
scanf("%s",CD[cd_number].actor);getchar();
cout<<"请输入碟片类型:
\n";
scanf("%s",CD[cd_number].type);getchar();
cout<<"请输入碟片状态:
\n";
scanf("%d",&CD[cd_number].n);
getchar();
a=fopen("cd.txt","a");
fprintf(a,"%s%s%s%d\n",CD[cd_number].film_name,CD[cd_number].actor,CD[cd_number].type,CD[cd_number].n);
fclose(a);
cd_number++;
cout<<"是否继续添加?
(Y/N)\n";
cin>>s;
fclose(a);
system("cls");
}
}
3.2查询(名称)模块设计
intMoiveSystem:
:
check_name(void)
{
inti;
FILE*a;
charcd_name[10];
system("cls");
a=fopen("cd.txt","r");
while(!
feof(a))
{
fscanf(a,"%s%s%s%d",&CD[cd_number].film_name,&CD[cd_number].actor,&CD[cd_number].type,&CD[cd_number].n);if(!
feof(a))cd_number++;
}
cout<<"请输入碟片名:
\n";
cin>>cd_name;
getchar();
for(i=0;i{
if((strcmp(CD[i].film_name,cd_name))==0)
{
if(CD[i].n==1)
{
cout<<"可借阅\n";
fclose(a);
return1;
}
if(CD[i].n==0)
{
cout<<"已借出\n";
fclose(a);
return1;
}
}
}
for(i=0;i{
if((strcmp(CD[i].film_name,cd_name))!
=0)
{
cout<<"无此片\n";
fclose(a);
return1;
}
}
fclose(a);
return0;
}
3.3查询(演员)模块设计
intMoiveSystem:
:
check_actor(void)
{
inti;
FILE*a;
charactor[10];
system("cls");
a=fopen("cd.txt","r");
while(!
feof(a))
{
fscanf(a,"%s%s%s%d",&CD[cd_number].film_name,&CD[cd_number].actor,&CD[cd_number].type,&CD[cd_number].n);if(!
feof(a))cd_number++;
}
cout<<"请输入演员名字:
\n";
cin>>actor;
getchar();
for(i=0;i{
if((strcmp(CD[i].actor,actor))==0)
{
if(CD[i].n==1)
{
cout<<"可借阅\n";
fclose(a);
return1;
}
if(CD[i].n==0)
{
cout<<"已借出\n";
fclose(a);
return1;
}
}
}
for(i=0;i{
if((strcmp(CD[i].actor,actor))!
=0)
{
cout<<"无此片\n";
fclose(a);
return1;
}
}
fclose(a);
return0;
}
3.4借阅模块设计
intMoiveSystem:
:
rent(void)
{
inti;
intj,f=0;
charcd_name[10];
FILE*a;
intk=0;
charchoice;
choice='a';
system("cls");
while(choice!
='b')
{
a=fopen("cd.txt","r");
while(!
feof(a))
{
fscanf(a,"%s%s%s%d",&CD[cd_number].film_name,&CD[cd_number].actor,&CD[cd_number].type,&CD[cd_number].n);if(!
feof(a))cd_number++;
}
cout<<"请输入碟片名:
\n";
cin>>cd_name;
getchar();
k++;
for(j=0;j{
if((strcmp(CD[j].film_name,cd_name))==0)
{
CD[j].n=0;
f=1;
}
}
if(f==0)
cout<<"不存在此片!
\n";
cout<<"A:
再借一张\n";
cout<<"B:
退出\n";
fclose(a);
scanf("%c",&choice);
getchar();
}return0;
}
3.5归还模块设计
voidMoiveSystem:
:
retur_n(void)
{
inti;
intj;
charcd_name[10];
FILE*a;
intk=0;
charchoice;
choice='a';
system("cls");
while(choice!
='b')
{
a=fopen("cd.txt","r");
while(!
feof(a))
{
fscanf(a,"%s%s%s%d",&CD[cd_number].film_name,&CD[cd_number].actor,&CD[cd_number].type,&CD[cd_number].n);if(!
feof(a))cd_number++;
}
cout<<"请输入碟片名:
\n";
cin>>cd_name;
getchar();
k++;
for(j=0;j{
if((strcmp(CD[j].film_name,cd_name))==0)
{
CD[j].n=1;
}
else
cout<<"不存在此片!
\n";
}
fclose(a);
cout<<"A:
再还一张\n";
cout<<"B:
退出\n";
cin>>choice;
getchar();
}
}
第四章测试分析
4.1测试程序执行情况
第五章课程设计总结
一门课程设计是一种对语言内容的提炼和使用,当确定所要设计的内容是,要从其所要实现的功能上下手,所确立的课题要拥有的功能是从一个用户的角度所来考虑的,用户是不知道其源程序,同时不知道任何内部细节,对于用户或者所该软件的使用者来说,你所要呈现的是一个清楚明了的界面,而他们可以从这个界面上得到他们所要实现的东西这是开发一个软件里应具有的思维程序,如同一个源程序的算法一样,这样一个算法的建立会让你有理有章,先要做些什么,然后下一步是什么,这也是从一个解决问题的理论高度上所出发的,每一问题的解决理所当然有一个如何解决的思路呈现,下面就具体用这个
程序的设计过程来说明。
当确立要设计一个影像管理系统的c++语言程序时,所呈现的第一个问题是什么:
当你对所谓的影像管理流程一无所知时,你应当做的第一步是什么,对了,就是首先去了解它——了解它的作用,它的流程,它的功能。
这是一个必须要经历的阶段,只有当你熟练掌握你所要求的东西的细节之后,你的围绕才能展开,你所做的后续工作一切的核心都将围绕它,当你要一个个实现它的功能是时,你的思路里要求孕育着它,这就是你做这个软件的前提,当我了解一个影像管理系统的功能时,了解他所要求的细节时,一切就更加顺理成章。
我知道了一个影像管理系统要求有影像信息的录入,影像信息的修改,影像信息的删除,影像的排序,影像信息的浏览,影像信息的查询当然还有后续的一些功能,这首先必须得建立在基础的功能之上,然后达到进一步的实现。
然后就是组装这些功能,实现一个算法的流程。
显而易见主函数就起到一个选择的作用,使用switch语句来选择相应的功能,当然也可以附加一个menu的子函数,用主函数对他的调用,再通过它来实现选择的作用。
而主函数中的printf语句就可以呈现给用户一个明确的界面信息,告诉用户如何选择,如何实现相应的功能。
当然这一切都只是个框架,并不具备具体的内容,要达到具体的内容不是让让其成为一个空架子,所以对于相应子函数的逐个设计是整个重心!
而每一个子函数的实现都是一个对于细节相当程度上的把握问题,需要一遍又一遍的提炼。
最终才能做得更好。
往往所学习的知识内容,即你所拥有的知识储备,难以实现所有的要求,利用资源,而且是合理的吸收资源,反而成为一个相当比重的能力,对于新知识的吸收和把握才能更好的体现你所具备的能力,从我所设计这个程序的过程上讲,当具体着手做的时候,所具备的知识是不足以实现的,学习链表的相应使用,学习文件的相应功能上的应用都是一个必须所经过的过程。
这其中有许多可以借鉴的子函数,它们所具备的功能加以改进就可以实现自己程序的功能,例如建立动态链表的函数,节点插入的insert函数,以及最基本的一些函数如排序的灵活运用都是一个利用资源的能力,要做的是理解这些程序,然后才能灵活的运用这些东西,通过这些东西的理解也是对c++语言具体相应规则的更加深刻的了解!
同时还有仅靠课本上的内容不足以使程序达到一定的程度,因此借用一些完善程序的某些内容可以使自己的程序更加趋于完善!
这一切的过程说起来也许可以条分缕析,但是真正做的时候要求的东西更多,需要更加的定下心来,面对一串串代码,运算符,以及标点符号一个也许很不显眼的问题就足以让你头昏脑胀,要理清思路,要关注每一点。
整体上的把握,例如不要忽视了函数的声明,以至于无法运行,尝试着多一些调试,每一次改动都要考虑到方方面面,要整体上把握你的程序,这样才能减少不知所以的错误,当错误出现的时候,你可以准确的把握错误所出现的地方,这种能力的实现就是要求足够的细心,要求你对程序整体上的把握足够的熟练,当用三天的时间就针对一个链表排序来改变不同种做法的时候,也许你觉得这一切都足够的不可思议,然而实际上远远不是如此,你可以从这个过程中旁敲侧击的理解许多容易忽略的东西,熟练不是说出来的,熟练是做出来的!
特别对于计算机专业的来说,对于软件的开发来说,一切的错误不可避免,一切都趋于正常为此你所建立的信心是足够强大的!
一切其实只是个开始,我们还都只是个门外汉,当你知道的越多,你能感受到什么,是的,你会明白你是无知的,往往你所拥有的知识只不过是凤毛麟角,当你逐渐明白或者说感受到这些东西的话你就不会沾沾自喜,你需要更加去学习去钻研,如果你无法定下心来这一切都不可能实现。
一次课程设计并不是最重要的,重要的是什么?
是你通过自主的学习理解到如何去面对你生活或者学习上的问题,一个解决问题处理问题的方案,一个身在问题之中,然后你能够如何不被它搅得不知所措,能够把握住自己的思路,一步一步走下去,时间只是个过程,过程中会有好多东西值得去做!
课程设计并不是结束了,它只是暂告了一个段落,如果真正能够从中得到什么,我想就是需要做的东西更多,需要做的事情更多!
面对挑战面对知识的接踵而至总以一种孜孜不倦的态度,永远需求!
附录:
程序代码
#include
#include
#include
usingnamespacestd;
classcd
{
friendclassMoiveSystem;
private:
charfilm_name[10];
charactor[10];
chartype[10];
intn;
};
classMoiveSystem
{
public:
MoiveSystem();
public:
voidadd(void);
intcheck_name(void);
intcheck_actor(void);
intrent(void);
voidretur_n(void);
private:
cdCD[1000];
intcd_number;
};
MoiveSystem:
:
MoiveSystem()
{
cd_number=1;
}
voidMoiveSystem:
:
add(void)
{
FILE*a;
chars;
s='y';
system("cls");
while(s=='y')
{
system("cls");
cout<<"请输入碟片名称:
\n";
scanf("%s",CD[cd_number].film_name);getchar();
cout<<"请输入演员名字:
\n";
scanf("%s",CD[cd_number].actor);getchar();
cout<<"请输入碟片类型:
\n";
scanf("%s",CD[cd_number].type);getchar();
cout<<"请输入碟片状态:
\n";
scanf("%d",&CD[cd_number].n);
getchar();
a=fopen("cd.txt","a");
fprintf(a,"%s%s%s%d\n",CD[cd_number].film_name,CD[cd_number].actor,CD[cd_number].type,CD[cd_number].n);
fclose(a);
cd_number++;
cout<<"是否继续添加?
(Y/N)\n";
cin>>s;
fclose(a);
system("cls");
}
}
intMoiveSystem:
:
check_name(void)
{
inti;
FILE*a;
charcd_name[10];
system("cls");
a=fopen("cd.txt","r");
while(!
feof(a))
{
fscanf(a,"%s%s%s%d",&CD[cd_number].film_name,&CD[cd_number].actor,&CD[cd_number].type,&CD[cd_number].n);if(!
feof(a))cd_number++;
}
cout<<"请输入碟片名:
\n";
cin>>cd_name;
getchar();
for(