电影俱乐部.docx
- 文档编号:7238095
- 上传时间:2023-01-22
- 格式:DOCX
- 页数:22
- 大小:247.42KB
电影俱乐部.docx
《电影俱乐部.docx》由会员分享,可在线阅读,更多相关《电影俱乐部.docx(22页珍藏版)》请在冰豆网上搜索。
电影俱乐部
设计要求
允许俱乐部成员租用DVD。
若想成为会员,首先应签约并且可按月缴纳费用。
会员一次可租用三个DVD,没有时间限制。
可以浏览所有可租用的DVD,能实现新成员的开户、会员对其帐户状况的查询以及俱乐部管理者对所有交易情况的查看功能。
需求分析
DVD信息和俱乐部会员信息用文件存储,提供未见的输入输出操作;注册新会员,提供文件的添加操作;实现按月缴纳费用,提供未见的修改操作;浏览信息提供显示操作;实现查询则提供文件的查找操作;另外提供键盘式选择菜单以实现功能选择。
总体设计
整体设计为会员注册模板、会员缴费模板、会员租用DVD模板、会员归还DVD模板、信息浏览模块和信息查询模块等。
概要设计
1.系统结构图:
2.功能模块说明:
(1)DVD输入:
输入有的DVD的信息(包括DVD的租出状态)。
(2)会员注册:
申请新的会员号码,输入会员的基本信息。
(3)会员租用DVD:
输入会员号,输入书名,进行租书。
(4)会员归还DVD:
输入会员号,输入书名,进行还书。
(5)总DVD信息浏览:
输出所有DVD的所有信息。
(6)已租出DVD信息浏览:
输出所有已租出的DVD的所有信息。
(7)会员信息浏览:
输出所有已注册的会员的所有信息。
详细设计的流程图
1.主函数设计:
2.各功能模块设计:
(1)DVD信息输入模块:
(2)会员注册模块:
(3)会员DVD租用模块:
(4)会员归还DVD模块:
(5)总DVD信息浏览:
(6)已租出的DVD信息模块:
(7)会员信息浏览:
(8)查找信息模块:
调试及体会
1、尽量使用指针完成了整个程序设计,其中没有用到全局变量。
程序功能基本完善,用户可根据需求自主选择,界面优化较良。
但系统没有修改模块,只能进行添加和删除,并不能对原有信息进行修改。
改进方案:
增加一个修改模块,使其可对已有信息进行修改。
2.设计初期,先完成初步构思,写出主函数。
然后对主函数所涉及的各个模块进行编程,将各个模块利用指针和链表联系起来。
在环境中进行调试,应一边编译,一边调试,并且要一个模块一个模块的调试。
直至此模块完全没有错误时,在进入下一模块的调试。
不能直接输入全部的代码一次性调,这样错误会很多,并且不易找出和修改。
在完成程序的编译链接后,要用多组数据进行审查,确保做到系统无误。
设计过程中,不应忽视环境提示的警告,有时程序运行不正确与警告也有很大的关系。
这次设计中遇到很多问题都是提示类型不匹配,这时就要认真检查前面的代码,及时改正并且认真仔细,杜绝此类错再次发生。
编写代码时应该少用全局变量,全局变量在编写试看似定义次数少,很方便。
但全局变量出错几率较大,且不易修改,每次修改时都要全面考虑,所以应避免用到。
此外,在信息的保存和读取这里用到了文件指针,这时要特别注意判断文件是否到尾,经常发生越界情况,使保存和读取发生错误,影响正常的系统数据。
程序调试中碰到的错误可以使自己学到知识。
养成良好的编程习惯,可以节省很多时间,避免很多不必要的错误。
源代码
#include
#include
structmember/*定义会员类型,用于存放借出的dvd*/
{
intcarnum;
charlenddvd[10];
}member[1000];
structdvd/*定义dvd的类型*/
{
intdvdnum;/*dvd的序列号*/
chardvdname[10];/*dvd名*/
intturefalse;/*用于借dvd和还dvd模块判断dvd是否借出的条件*/
}dvd[1000];
structcar/*会员卡的数据类型*/
{
intcarnum;/*卡号*/
charmembername[10];/*卡主人*/
}car[1000];
main()/*主函数*/
{
charch1,ch2;
do
{
system("cls");
printf("-----------请你选择操作类型----------\n");
printf("1:
printf("2:
<会员注册>\n");
printf("3:
<会员租用DVD>\n");
printf("4:
<会员归还DVD>\n");
printf("5:
<信息浏览>\n");
printf("6:
<信息查询>\n");
printf("0:
<退出>\n");
printf("请输入0--6\n");
scanf("%s",&ch1);
switch(ch1)
{
case'1':
system("cls");adddvd();break;/*system("cls")是一个清屏函数*/
case'2':
system("cls");addcar();break;
case'3':
system("cls");lenddvd();break;
case'4':
system("cls");dvdback();break;
case'5':
{
do
{
system("cls");
printf("---------------欢迎进入信息浏览系统!
--------------\n");
printf("1:
<总DVD浏览>\n");
printf("2:
<租出DVD浏览>\n");
printf("3:
<会员浏览>\n");
printf("0:
<返回>\n");
printf("请输入0-3,其他输入非法!
\n");
scanf("%s",&ch2);
switch(ch2)
{
case'1':
dvdcount();break;
case'2':
lendcount();break;
case'3':
carcount();break;
case'0':
break;
default:
printf("无此操作\n");getch();break;
}
}
while(ch2!
='0');}break;
case'6':
finddvd();break;
case'0':
getch();break;
}
}while(ch1!
='0');
}
dvdback()/*还dvd函数*/
{
FILE*fp,*fp2;/*定义两个文件指针,fp2用于修改数据时设立临时文件用,防止数据遭破坏*/
inti,n;
intcarnum;
charlenddvd[10];
printf("请你输入你的卡号\n");
scanf("%d",&carnum);
fp=fopen("car.txt","r");/*读取卡号记录*/
for(i=0;fread(&car[i],sizeof(structcar),1,fp)!
=0;i++)/*fread(&car[i],sizeof
(structcar),1,fp)!
=0判断是否读到文件尾*/
{
if(car[i].carnum==carnum)/*卡号存在,进入下一循环*/
{
n=i;
fclose(fp);
printf("请输入你要还的dvd的名字\n");
scanf("%s",lenddvd);
fp=fopen("record.txt","r");/*fp中存放有car.txt(卡号信息)record.txt(借dvd的会员信息)
*/
for(i=0;fread(&member[i],sizeof(structmember),1,fp)!
=0;i++)/*判断是否租借了输入的
dvd*/
{
if(strcmp(member[i].lenddvd,lenddvd)==0)/*租借了dvd,进入下一循环,否则出错显示*/
{
fclose(fp);
fp=fopen("record.txt","r");
fp2=fopen("dvd1.txt","w");
for(i=0;fread(&member[i],sizeof(structmember),1,fp)!
=0;i++)
{
if(strcmp(member[i].lenddvd,lenddvd)==0)
{
continue;/*删除还掉的dvd的租借记录*/
}
fwrite(&member[i],sizeof(structmember),1,fp2);/*写入原来没还的dvd的记录*/
}
fclose(fp);
fclose(fp2);
fp=fopen("record.txt","w");
fp2=fopen("dvdl.txt","r");
for(i=0;fread(&member[i],sizeof(structmember),1,fp2)!
=0;i++)/*=o是读到结束*/
{
fwrite(&member[i],sizeof(structmember),1,fp);/*将借dvd记录信息写回*/
}
fclose(fp);
fclose(fp2);
fopen("dvdl.txt","w");/*清临时文件的记录*/
fclose(fp2);
fp=fopen("dvd.txt","r");
fp2=fopen("dvdl.txt","w");
for(i=0;fread(&dvd[i],sizeof(structdvd),1,fp)!
=0;i++)/*将dvd的记录写入临时文件,防止因为修改信息破坏以前的记录*/
{
if(i==n)
{
dvd[i].turefalse=1;
fwrite(&dvd[i],sizeof(structdvd),1,fp2);/*将还dvd的原来状态设为无人借阅的*/
continue;
}
fwrite(&dvd[i],sizeof(structdvd),1,fp2);
}
fclose(fp);
fclose(fp2);
fp=fopen("dvd.txt","w");
fp2=fopen("dvdl.txt","r");
for(i=0;fread(&dvd[i],sizeof(structdvd),1,fp2)!
=0;i++)
{
fwrite(&dvd[i],sizeof(structdvd),1,fp);/*将临时文件写回*/
}
fclose(fp);
fclose(fp2);
fopen("dvdl.txt","w");/*清临时文件*/
fclose(fp2);
printf("还dvd完毕,按任意键返回\n");
getch();
return;
}
}
printf("你没有借这样的书。
任意键返回\n");/*出错提示*/
fclose(fp);
getch();
return;
}
}
printf("系统没这样的卡,和管理员联系,按任意键返回\n");/*出错提示*/
fclose(fp);
getch();
}
lendcount()/*借dvd统计函数*/
{
FILE*fp;
inti,n=0;
fp=fopen("record.txt","r");
for(i=0;fread(&member[i],sizeof(structmember),1,fp)!
=0;i++)
{
printf("卡号:
%d借出的DVD:
%s\n",member[i].carnum,member[i].lenddvd);
n=n+1;
}
fclose(fp);
printf("目前共有%ddvd借出\n",n);
printf("按任意键\n");
getch();
}
finddvd()/*按电影名查找函数*/
{
FILE*fp;
chardvdname[10];
intture,i;
fp=fopen("dvd.txt","r");
printf("请输入你要查找的电影名\n");
scanf("%s",dvdname);
for(i=0;fread(&dvd[i],sizeof(structdvd),1,fp)!
=0;i++)
{
if(strcmp(dvdname,dvd[i].dvdname)==0)
{
if(dvd[i].turefalse==1)
{
printf("这dvd的详细资料是:
dvd号:
%d电影名:
%s此dvd现在无人租借\n",dvd[i].dvdnum,dvd[i].dvdname);
printf("按任意键");
getch();
return;
}
else{printf("这本书的详细资料是:
dvd号:
%d电影名:
%s此dvd现在已有人借阅\n",dvd[i].dvdnum,dvd[i].dvdname);fclose(fp);
printf("按任意键");
getch();
return;
}
}
}
printf("没有你要查询的电影\n");
fclose(fp);
printf("按任意键");
getch();
return;
}
lenddvd()/*租借dvd函数*/
{
FILE*fp,*fp2;
inti,n;
intcarnum;
printf("请你输入你的卡号\n");
scanf("%d",&carnum);
fp=fopen("car.txt","r");
for(i=0;fread(&car[i],sizeof(structcar),1,fp)!
=0;i++)
{
if(car[i].carnum==carnum)
{
n=i;
fclose(fp);
printf("请输入你要租借电影的名字\n");
scanf("%s",member[n].lenddvd);
fp=fopen("dvd.txt","r");
for(i=0;fread(&dvd[i],sizeof(structdvd),1,fp)!
=0;i++)
{
if(strcmp(dvd[i].dvdname,member[n].lenddvd)==0)
{
if(dvd[i].turefalse==0){printf("对不起,此dvd有人借出,请借其他dvd\n");fclose(fp);getch();return;}
else
fclose(fp);
fp=fopen("record.txt","a+");
member[n].carnum=carnum;
fwrite(&member[n],sizeof(structmember),1,fp);
fclose(fp);
fp=fopen("dvd.txt","r");
fp2=fopen("dvdl.txt","w");
for(i=0;fread(&dvd[i],sizeof(structdvd),1,fp)!
=0;i++)
{
if(strcmp(dvd[i].dvdname,member[n].lenddvd)==0)
{
dvd[i].turefalse=0;
fwrite(&dvd[i],sizeof(structdvd),1,fp2);
continue;
}
fwrite(&dvd[i],sizeof(structdvd),1,fp2);
}
fclose(fp);
fclose(fp2);
fp=fopen("dvd.txt","w");
fp2=fopen("dvdl.txt","r");
for(i=0;fread(&dvd[i],sizeof(structdvd),1,fp2)!
=0;i++)
{
fwrite(&dvd[i],sizeof(structdvd),1,fp);
}
fclose(fp);
fclose(fp2);
fopen("dvdl.txt","w");
fclose(fp2);
printf("借dvd完毕,按任意键返回\n");
getch();
return;
}
}
printf("不存在这样的dvd,任意键返回\n");
fclose(fp);
getch();
return;
}
}
printf("你的卡号不存在,请申请新卡,按任意键返回\n");
fclose(fp);
getch();
}
carcount()/*卡号统计函数*/
{
FILE*fp;
inti,n=0;
fp=fopen("car.txt","r");
for(i=0;fread(&car[i],sizeof(structcar),1,fp)!
=0;i++)
{
printf("第%d张卡卡号:
%d姓名:
%s\n",i+1,car[i].carnum,car[i].membername);
n=n+1;
}
fclose(fp);
printf("目前共有%d个会员\n",n);
printf("按任意键\n");
getch();
}
dvdcount()/*dvd统计函数*/
{
FILE*fp;
inti,n=0;
fp=fopen("dvd.txt","r");
for(i=0;fread(&dvd[i],sizeof(structdvd),1,fp)!
=0;i++)
{
if(dvd[i].dvdnum!
=0&&strlen(dvd[i].dvdname)!
=0)
{
printf("第%d本书<序号:
%d书名:
%s状态:
%d>\n",i,dvd[i].dvdnum,dvd[i].dvdname,dvd[i].turefalse);
n=n+1;
}
}
fclose(fp);
printf("目前共有%d张DVD\n",n);
printf("按任意键\n");
getch();
}
addcar()/*申请新卡函数*/
{
FILE*fp;
inti=0;
fp=fopen("car.txt","a+");/*添加内容*/
printf("请你输入卡号\n");
scanf("%d",&car[i].carnum);
printf("请你输入会员姓名\n");
scanf("%s",car[i].membername);
fwrite(&car[i],sizeof(structcar),1,fp);
fclose(fp);
printf("输入完毕,任意键返回\n");
getch();
}
adddvd()/*增加dvd函数*/
{
FILE*fp;
inti=0;
charchoice='y';
fp=fopen("dvd.txt","a+");
while(choice=='y'||choice=='Y')
{
printf("请你输入第%d张dvd的序号\n",i+1);
scanf("%d",&dvd[i].dvdnum);
printf("请你输入电影名\n");
scanf("%s",dvd[i].dvdname);
printf("请设为1或0,1代表dvd还没人借,0表示dvd已经借出,设其他值,程序运行时无法得出正常结果\n");
printf("请你设定dvd的状态\n");
scanf("%d",&dvd[i].turefalse);
fwrite(&dvd[i],sizeof(structdvd),1,fp);
printf("是否要输入下张dvd,N代表\"否\",Y代表\"是\"\n");
scanf("%s",&choice);
}
fclose(fp);
}
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 电影 俱乐部