电影俱乐部.docx
《电影俱乐部.docx》由会员分享,可在线阅读,更多相关《电影俱乐部.docx(23页珍藏版)》请在冰点文库上搜索。
电影俱乐部
目录
第一部分:
课程设计编号、名称、内容3
第二部分:
程序总体设计思路4
第三部分:
程序功能模块划分、图示及流程图
第四部分:
程序的优缺点
第五部分:
程序改进思路
第六部分:
实习的感受10
第七部分:
附录(源代码)13
第一部分:
课程设计编号、名称、内容
编号:
二十九题
名称:
电影俱乐部
内容:
【要求】
允许俱乐部成员租用DVD。
若想成为会员,首先应签约并且可按月缴纳费用。
会员一次可租用三个DVD,没有时间限制。
浏览所有可租用的DVD,新成员的开户,会员对其账户状况的查询以及俱乐部管理者对所有交易情况的查看。
【提示】
(1)需要分析
DVD信息和俱乐部会员信息文件存储,提供文件的输入输出操作;注册新会员;提供文件的添加操作;实现按月缴纳费用;提供文件的修改操作;浏览信息应提供显示操作;实现查询则提供文件的查找操作;另外提供健盘式选择菜单以实现功能选择。
(2)总体设计
整体设计为会员注册模块、会员交费模块、会员租用DVD模块、会员归还DVD模块、信息浏览模块和信息查询模块等。
第二部分:
程序总体设计思路
由于C语言是面对过程的语言,故我的设计思路是根据目标程序运行的过程来编写的。
在编写本程序的过程中,首先借助老师给的指导材料,确定了目标程序运行的次序与界面,即本程序首先运行《电影俱乐部管理系统》的菜单界面,其次程序运行[新会员注册]菜单界面,进入之后新会员可以根据提示依次输入自己的相关信息,并进行保存,以后如果会员或者管理员想对会员信息进行查看或者修改,可以通过第六步的修改功能进行相关的操作。
接下来第二步是会员的付费功能,进入相关界面后可依次输入会员的信息和付费情况,并保存到文件夹以便于查询。
接着进入DVD的的出租信息界面,管理员可通过此对DVD进行管理,如果已被借则在后面标记0,否则标记1。
这样已便于会员在进行租借时快速的找到自己喜欢的未被借的DVD。
同理下面是DVD的归还界面。
然后进入信息查询的部分,在这里管理员和会员都可以找到会员的基本信息以及所借DVD的情况,一目了然,十分清楚。
如果想对会员的信息进行修改就需要进如第六步的修改界面,第七步是对会员情况的输入,进行完全部操作后,系统提示exit后就可以推出该系统了。
具体的相关操作见下面的图示。
第三部分:
程序功能模块划分、图示及流程图
第一步,进入总菜单界面:
可输入1进行新会员的注册操作
↓
依次输入信息后进入下面的界面:
↓
如果要进行查询可进行如下操作:
↓
然后是DVD的租借和归还分别是第三和第四步
第五步是信息的浏览
在这里你可以查找到所有关于会员的基本信息和租借DVD的情况
第七步是信息的输入,管理员可以用此功能对会员的信息进行管理
接下来的功能是对信息的修改:
最后输入【9】系统退回到原界面
第四部分程序的优缺点
优点:
1.程序采用模块化设计,程序的主体的功能大都由各功能模块完成。
程序设计模块化有利于程序的进一步改进及有助于程序执行效率的提高。
2.
3.简洁明了的程序菜单。
程序主要采用了四组层次不同的菜单,相互独立又相互联系,巧妙相接,符合用户的使用习惯与思维。
4.人性化的程序提示语言,程序提示语言较人性化,不仅大多为祈使语句、疑问句,而且提示明确,具有较强的明确的指导作用。
程序提示不仅层次分明,提示方式多样,而且提示信息井然有序,更加有利于用户顺利、准确地进行程序的操作。
5.智能化的模块设计。
程序的智能化主要体现在减少了许多人工操作。
例如智能化的会员扣费系统,无须管理员手动干遇,程序自动依据系统时间按月进行会费扣除操作,再如功能模块操作结束后,均会提示是否返回主菜单,并提示是否再进行类似的操作,这样给用户带来了操作的方便,大大提高了电影俱乐部的管理效率。
缺点:
1.程序虽然经过多次精简,但仅仅是形式上、小范围的精简,仍未得到本质上的精简,即未找到更加简单、更加高效、更加合理、更小占用的资源的算法。
2.程序仍然存在不合理的地方,例如程序某些部分输入错误会导致程序中止或转向其他功能模块,即程序建议用户注意提示,进行合理的准确的输入,这样更有利于管理工作。
3.程序功能仍然不够完善。
例如程序没有[管理员对会员的删除功能模块][管理员对DVD的删除及DVD信息修改功能模块][会员信息修改的功能模块]。
4.操作界面为DOS界面,不符合时代潮流,也不符合现代用户操作的习惯,信息表达方式不丰富,比较单一,缺少图片、音乐等元化表达方式。
5.由于能力有限,程序很多地方有不足之处,比如:
在会员的交费模块里存在一些问题,不能实现按月缴纳费用,所以还需要进一步的改进,还有第一步和第七步的部分地方有重复,导致程序有点繁琐,不是很简练,以及在查找的模块里只能根据姓名进行查找,不能根据其他信息进行查询
总之,有很多地方还需要老师的指教,所以有遇到不足的地方还请老师多多指教,学生在此先谢谢了...
第五部分:
程序改进思路
本部分主要是针对第五部分[程序的优缺点]提出程序的改进思路。
【针对第一点:
程序算法精简问题】
>>改进思路:
1.算法上除了采用结构体数组外,考虑在程序的算法设计上引入链表结构,考察这样对数据组织存贮效率上是否具有提高作用。
2.就现有知识水平、经验来看,对我来说,本程序的算法设计上已经是最精简的了。
C语言知识博大精深,有必要对C语言的专著进行研究学习,多阅读别人的程序代码、多动手实践操作与设计,这样便对程序算法精简改进提供了可能。
【针对第二点:
用户输入错误问题】
>>改进思路:
对每个数据输入段代码进行更深的研究与分析,明确变量的类型、可能的数值,然后进行分类判断(if或switch语句),必要时借助for循环语句来控制程序进行,保障各模块运行相对独立,稳定准确执行各自功能。
典型方法是如果输入数据错误,通过printf输出问题,并用for或(do)while构成循环,直到用户输入正确为止。
【针对第三点:
程序功能完善问题】
>>改进思路:
[管理员对会员的删除功能模块]设计思路:
将磁盘上文本文件全部读入,并且全部赋给结构体数组mem,通过查找算法(综合fread、if与strcmp函数),找到相应的会员,将在其后的所以结构体依次向前进行结构体的整体赋值,新建方式打开一个文本文件,用fwrite将前(会员总数-1)个会员信息输出到文本文件当中。
[管理员对DVD的删除及DVD信息修改功能模块]设计思路:
[管理员对DVD的删除模块]与[管理员对会员的删除功能模块]设计思路类似,在此不述,而[管理员对DVD信息修改功能模块]可参照[会员租借、归还DVD模块]的设计方法。
[会员信息修改的功能模块]设计思路:
可参照[会员租借、归还DVD模块]的设计方法。
【针对第四点:
操作界面单调问题】
>>改进思路:
C语言是面向过程的语言,当时语言开发的程序主要是面向DOS用户,虽具有较强的绘图功能等等功能,但主要还是面向DOS的。
当今的主流语言是面向对象的语言,开发的平台大多为WINDOWS界面平台,开发的程序也主要是WINDOWS组件基础之上的图形界面程序,故可将程序要求移植到VC++之上,借助VC++强大的功能,编写WINDOWS界面程序,利用API接口函数方便调用各种WINDOWS强大功能,服务程序,使程序更加丰富、直观、生动、高效。
第六部分实习的感受
经过一个星期的集训,使我对编程有了更深的认识,能力也有了很大的提高,以前需然学了很多与之有关的知识,但很多都是书本上的,没有感觉有多大的感受。
通过这次实习,使我的感受颇深,以前学到的东西也有了用武之地,是真真正正的有用,而且又通过老师学到了许多新的有用的东西,也使我认识到其重要性,并且产生了很大的学习的兴趣和学好它的决心,在以后的时间里,一定会在这方面多下点功夫。
第七部分:
附录(源代码)
#defineN100
#defineM100
#include
#include
#include
#include
voidmenu();
voidRegister();
voidPayment();
voidReback();
voidRent();
voidBrowse();
voidSearch();
voidenter();
structDvd
{
charnum[20];
charname[20];
charperson[20];
intyes;
}Dvd[N];
structMember
{
charname[20];
charsex[20];
intage;
chardvd1[20];
chardvd2[20];
chardvd3[20];
intday;
}Mem[M];
saveD(intm)
{FILE*fp;
inti;
if((fp=fopen("dvd.txt","wb"))==NULL)
{printf("\nCannotopenfile\n");
returnNULL;
}
for(i=0;iif(fwrite(&Dvd[i],sizeof(structDvd),1,fp)!
=1)
printf("filewriteerror\n");
fclose(fp);
}
voidenterD()
{inti,n;
printf("howmanyDVDs?
:
");
scanf("%d",&n);
printf("\nEnterDVDdatanow\n\n");
for(i=0;i{printf("\nintput%dthDVDrecord.\n",i+1);
scanf("%s%s%s%d",Dvd[i].num,Dvd[i].name,Dvd[i].person,&Dvd[i].yes);}
saveD(n);
menu();
}
saveM(intm)
{FILE*fp;
inti;
if((fp=fopen("member.txt","wb"))==NULL)
{printf("\nCannotopenfile\n");
returnNULL;
}
for(i=0;iif(fwrite(&Mem[i],sizeof(structMember),1,fp)!
=1)
printf("filewriteerror\n");
fclose(fp);
}
voidenterM()
{inti,m;
printf("howmanyMembers?
:
");
scanf("%d",&m);
printf("\nEnterMemberdatanow\n\n");
for(i=0;i{printf("\nintput%dthMemberrecord.\n",i+1);
scanf("%s%s%d%s%s%s%d",Mem[i].name,Mem[i].sex,&Mem[i].age,Mem[i].dvd1,Mem[i].dvd2,Mem[i].dvd3,&Mem[i].day);}
saveM(m);
menu();
}
voidenter()
{inti;
printf("whatdoyouwanttoenter?
1).Membermessage2).DVDmessage[]\b\b");
scanf("%d",&i);
switch(i)
{case1:
enterM();break;
case2:
enterD();break;
menu();
}
}
voidmenu()
{
intn,k;
do
{puts("\t\t*********************MENU*********************\n\n");
puts("\t\t\t\t1.MemberRegister");
puts("\t\t\t\t2.MemberPayment");
puts("\t\t\t\t3.DVDReturn");
puts("\t\t\t\t4.DVDRent");
puts("\t\t\t\t5.MessageBrowse");
puts("\t\t\t\t6.MessageSearch");
puts("\t\t\t\t7.enter");
puts("\t\t\t\t8.modify");
puts("\t\t\t\t9.Exit");
puts("\n\n\t\t*******************************************\n\n");
printf("Choiceyournumber(1-9):
[]\b\b");
scanf("%d",&n);
if(n<1||n>9)
{k=1;getchar();}
elsek=0;
}while(k==1);
switch(n)
{case1:
Register();break;
case2:
Payment();break;
case3:
Reback();break;
case4:
Rent();break;
case5:
Browse();break;
case6:
Search();break;
case7:
enter();break;
case8:
modify();break;
case9:
exit(0);
}
}
voidRegister()
{
inti,n,m,k;
FILE*fp;
n=loadM();
printf("Howmanymembersareyouwanttoadd(0-%d)?
:
",N-1-n);
scanf("%d",&m);
k=m+n;
if((fp=fopen("member.txt","ab"))==NULL)
{printf("cannotopenfile\n");
}
for(i=n;i{printf("\nInput%dthmemberrecord.\n",i-n+1);
input(i);
fwrite(&Mem[i],sizeof(structMember),1,fp);
printf("\n");
}
for(i=n;i<=n+m;i++)
fprintf(fp,"%s%s%d%s%s%s%d",Mem[i].name,Mem[i].sex,Mem[i].age,Mem[i].dvd1,Mem[i].dvd2,Mem[i].dvd3,Mem[i].day);
fclose(fp);
printf_back();
}
voidPayment()
{inti,n,k,j;
n=loadM();
printf("\nInputtoday'sday");
scanf("%d",&k);
for(i=0;i<=n;i++)
if(Mem[i].day!
=k){printf("itistimeformember%dtopayfee!
\n",i+1);
scanf("%d",&j);
if(j==1)printf("memberhavepaid\n");
elseprintf("membernotpaid\n");}
printf_back();
}
voidReback()
{inti,n;
printf("Inputthenumberofmember");
scanf("%d",&n);
printf("InputthenumberofDVD");
scanf("%d",&i);
if(Mem[n].dvd1==Dvd[i].name){strcpy(Mem[n].dvd1,'0');Dvd[i].yes=0;}
if(Mem[n].dvd2==Dvd[i].name){strcpy(Mem[n].dvd2,'0');Dvd[i].yes=0;}
if(Mem[n].dvd3==Dvd[i].name){strcpy(Mem[n].dvd3,'0');Dvd[i].yes=0;}
printf_back();
}
voidRent()
{inti,j;
printf("Inputthenumberofmember");
scanf("%d",&i);
printf("InputthenumberofDVDwhatyouwanttorent!
");
scanf("%d",&j);
if(Mem[i].dvd1!
=0||Mem[i].dvd2!
=0||Mem[i].dvd3!
=0)
printf("cannotrentanymore!
");
elseif(strcpy(Mem[i].dvd1,'0')){strcpy(Mem[i].dvd1,Dvd[j].name);Dvd[j].yes=1;strcpy(Dvd[j].person,Mem[i].name);}
elseif(strcpy(Mem[i].dvd2,'0')){strcpy(Mem[i].dvd2,Dvd[j].name);Dvd[j].yes=1;strcpy(Dvd[j].person,Mem[i].name);}
elseif(strcpy(Mem[i].dvd3,'0')){strcpy(Mem[i].dvd3,Dvd[j].name);Dvd[j].yes=1;strcpy(Dvd[j].person,Mem[i].name);}
printf_back();
}
voidBrowse()
{inti,j,n,x,y,z,k;
n=loadM();
printf("\n\tnamesexagedvd1dvd2dvd3day\n");
for(i=0;i{if((i!
=0)&&(i%10==0))
{printf("\n\nPassanykeytocontiune\n");
getch();
}
printf_Mone(i);
printf("\n");
}
printf("\n\tThereare%drecord.\n",n);
printf("\nPassanykeytoback\n");
getch();
printf("\nEnternumber\n");
scanf("%d",&k);
if(k==0)menu();
z=loadD();
printf("\n\tnumnamepersonyes\n");
for(i=0;i{if((i!
=0)&&(i%10==0))
{printf("\n\nPassanykeytocontiune");
getch();
}
printf_Done(i);
printf("\n");
}
printf("\tThereare%drecord.\n",z);
printf("\nPassanykeytoback");
getchar();
printf_back();
}
voidSearch()
{inti,n,m,k;
structMembers;
structDvdt;
n=loadM();
printf("\n\nEntermembernamethatyouwanttosearch!
name:
");
scanf("%s",s.name);
printf("\n\tnamesexagedvd1dvd2dvd3day\n");
for(i=0;iif(strcmp(s.name,Mem[i].name)==0)
{
printf_Mone(i);break;
}
printf("\nEnternumber\n");
scanf("%d",&k);
if(k==0)menu();
m=loadD();
printf("\n\nEnterDVDnamethatyouwanttosearch!
name:
");
scanf("%s",t.name);
printf("\n\tnumnamepersonyes\n");
for(i=0;iif(strcmp(t.name,Dvd[i].name)==0)
{
printf_Done(i);break;
}
printf_back();
}
intmodify()
{inti,n,m,k;
structMembers;
structDvdt;
n=loadM();
printf("\n\nEnternamethatyouwanttosearch!
name:
");
scanf("%s",s.name);
printf("\n\tnamesexagedvd1dvd2dvd3day\n");
for(i=0;iif(strcmp(s.name,Mem[i].name)==0)
{
printf_Mone(i);
printf("\npleaseenterthemembermassages:
\nnamesexagedvd1dvd2dvd3day\n");
scanf("%s%s%d%s%s%s%d",s.name,s.sex,s.age,s.dvd1,s.dvd2,s.dvd3,s.day);
strcpy(Mem[i].name,s.name);
strcpy(Mem[i].sex,s.sex);
strcpy(Mem[i].dvd1,s.dvd1);
strcpy(Mem[i].dvd2,s.dvd2);
strcpy(Mem[i].dvd3,s.dvd3);
Mem[i].age=s.age;
Mem[i].day=s.day;
}
printf("\nEnternumber\n");
scanf("%d",&k);
if(k==0)menu();
m=loadD();
printf("\n\nEnternamethatyouwanttosearch!
name:
");
scanf("%s",t.name)