俱乐部DVD管理系统C语言.docx
《俱乐部DVD管理系统C语言.docx》由会员分享,可在线阅读,更多相关《俱乐部DVD管理系统C语言.docx(29页珍藏版)》请在冰豆网上搜索。
![俱乐部DVD管理系统C语言.docx](https://file1.bdocx.com/fileroot1/2022-10/9/9308c057-ebd1-4034-b582-219e34b0049b/9308c057-ebd1-4034-b582-219e34b0049b1.gif)
俱乐部DVD管理系统C语言
俱乐部DVD管理系统
题目要求
允许俱乐部成员租用DVD。
若想成为会员,首先应签约并且可按月缴纳费用。
会员一次可租用三个DVD,没有时间限制。
可浏览所有可租用的DVD,能实现新成员的开户,会员对其账户状况的查询以及俱乐部管理者对所有交易情况的查看功能。
需求分析
DVD信息和俱乐部会员信息用文件存储,提供文件的输入输出操作;注册新会员,提供文件的添加操作;实现按月交纳费用,提供文件的修改操作;浏览信息应提供显示操作;实现查询则提供文件的查找操作;另外提供键盘是选择菜单以实现功能选择。
总体设计
整体设计为会员注册模块,会员缴费模块,会员租用DVD模块,会员租用DVD模块,信息浏览模块和信息查询模块等。
选择菜单以实现功能选择。
如下图所示。
详细设计
1主函数
主函数一般设计的比较简单,只提供输入,处理和输出部分的函数调用。
其中各功能模块用菜单方式选择。
如下图所示。
voidmenu()/*实现键盘选择式菜单*/
{
intn,k;
do
{puts("\t\t*********************MENU*********************\n\n");
puts("\t\t\t\t1.enter");
puts("\t\t\t\t2.MemberRegister");
puts("\t\t\t\t3.MemberPayment");
puts("\t\t\t\t4.DVDReturn");
puts("\t\t\t\t5.DVDRent");
puts("\t\t\t\t6.MessageBrowse");
puts("\t\t\t\t7.MessageSearch");
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)/*switch函数实现功能选择*/
{case1:
enter();break;/*输入信息模块*/
case2:
Register();break;/*会员注册模块*/
case3:
Payment();break;/*会员缴费模块*/
case4:
Reback();break;/*会员归还DVD模块*/
case5:
Rent();break;/*会员租用DVD模块*/
case6:
Browse();break;/*信息浏览模块*/
case7:
Search();break;/*信息查询模块*/
case8:
modify();break;/*信息修改模块*/
case9:
exit(0);
}
}
2各功能模块设计
(1)输入模块
【数据结构】
原始数据有两类:
一是会员信息,二是DVD信息;两个信息分别保存在两个文件中。
文件名分别为member.txt,dvd.txt。
采用结构体的形式把信息作为一个整体来处理。
会员的信息用结构体数组形式表示如下:
structMember
{
charname[20];
charsex[20];
intage;
chardvd1[20];
chardvd2[20];
chardvd3[20];
intdate;/*表示会员该缴费的时期*/
}Mem[M];/*member[m]中每个数组元素对应一个会员的信息*/
DVD的信息用结构体数组表示如下:
structDvd
{
charnum[20];
charname[20];
charperson[20];
intyes;/*yes=1表示DVD被借,yes=0表示DVD未被借*/
}Dvd[N];/*dvd[n]中每一个元素对应一个dvd的信息*/
voidenterM()/*输入会员信息模块*/
{inti,m;
printf("howmanyMembers?
:
");
scanf("%d",&m);
printf("\nEnterMemberdatanow\n\n");
for(i=0;i{printf("\nintput%dthMemberrecord.\n",i+1);
printf("name\tsex\tage\tdvd1\tdvd2\tdvd3\tday\n");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].date);}
saveM(m);/*调用保存函数*/
printf_back();/*一个任务结束时让用户选择是继续浏览还是返回*/
}
voidenterD()/*输入模块*/
{inti,n;
printf("howmanyDVDs?
:
");
scanf("%d",&n);
printf("\nEnterDVDdatanow\n\n");
for(i=0;i{printf("\nintput%dthDVDrecord.\n",i+1);
printf("number\tname\tperson\tyes\n");
scanf("%s%s%s%d",Dvd[i].num,Dvd[i].name,Dvd[i].person,&Dvd[i].yes);}
saveD(n);/*调用保存函数*/
printf_back();/*一个任务结束时让用户选择是继续浏览还是返回*/
}
voidenter()
{inti;
printf("whatdoyouwanttoenter?
1).Membermessage2).DVDmessage[]\b\b");
scanf("%d",&i);
switch(i)
{case1:
enterM();break;
case2:
enterD();break;
menu();/*如果输入的数字不是1-2,返回菜单栏*/
}
(2)注册模块
【需求分析】
该模块的功能是用会员的注册,从键盘输入并逐条写到原来的输入文件中。
如图所示。
voidRegister()/*追加模块*/
{
inti,n,m,k;
;
n=loadM();/*调用加载函数n=load(),并计算可以记录的个数*/
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");
}
printf_back();/*一个任务结束时让用户选择是继续浏览还是返回*/
}
(3)缴费模块
【需求分析】
该模块的功能是记录会员的缴费情况以及进行修改。
如下图所示。
voidPayment()/*修改模块*/
{inti,n,k,j;
n=loadM();/*调用加载函数n=load(),并计算可以记录的个数*/
printf("\nInputtoday'sday");
scanf("%d",&k);
for(i=0;i<=n;i++)
if(Mem[i].date\n",i+1);
scanf("%d",&j);/*如果会员该缴费的日期小于输入的日期显示该缴费*/
if(j==1)printf("memberhavepaid\n");
elseprintf("membernotpaid\n");}
printf_back();/*一个任务结束时让用户选择是继续浏览还是返回*/
}
注:
该函数的不足之处是显示会员缴费之后不能是文件中会员该缴费日期不会变。
必须利用修改模块进行修改。
(4)归还模块
【需求分析】
该模块的功能是管理DVD的情况,会员归还后消除会员记录和DVD的记录。
如下图所示。
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();/*一个任务结束时让用户选择是继续浏览还是返回*/
}
注:
该函数可是算是一个失败的函数,因为输入会员的号码后,程序根本没有默认,及归还会员所借的DVD之后,会员信息里并没有将原来所借的DVD归还,并且DVD信息中已归还的DVD的yes值并不归零,必须在利用修改模块进行信息的修改。
(5)租用模块
【需求分析】
该模块的功能是对会员借用DVD进行管理,先判断该会员能否再借用,可以后记录会员借用的DVD,同时DVD信息中也会记录下会员的姓名。
如下图所示。
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(strcmp(Mem[i].dvd1,’0’)){strcpy(Mem[i].dvd1,Dvd[j].name);Dvd[j].yes