俱乐部DVD管理系统C语言Word文档格式.doc
《俱乐部DVD管理系统C语言Word文档格式.doc》由会员分享,可在线阅读,更多相关《俱乐部DVD管理系统C语言Word文档格式.doc(28页珍藏版)》请在冰豆网上搜索。
详细设计
1主函数
主函数一般设计的比较简单,只提供输入,处理和输出部分的函数调用。
其中各功能模块用菜单方式选择。
voidmenu()/*实现键盘选择式菜单*/
{
intn,k;
do
{puts("
\t\t*********************MENU*********************\n\n"
);
puts("
\t\t\t\t1.enter"
\t\t\t\t2.MemberRegister"
\t\t\t\t3.MemberPayment"
\t\t\t\t4.DVDReturn"
\t\t\t\t5.DVDRent"
\t\t\t\t6.MessageBrowse"
\t\t\t\t7.MessageSearch"
\t\t\t\t8.modify"
\t\t\t\t9.Exit"
\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();
/*会员注册模块*/
case3:
Payment();
/*会员缴费模块*/
case4:
Reback();
/*会员归还DVD模块*/
case5:
Rent();
/*会员租用DVD模块*/
case6:
Browse();
/*信息浏览模块*/
case7:
Search();
/*信息查询模块*/
case8:
modify();
/*信息修改模块*/
case9:
exit(0);
}
开始
显示一系列功能选项
输入n,判断n是否是1-9
根据n的值调用各功能模块函数
结束
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];
charperson[20];
intyes;
/*yes=1表示DVD被借,yes=0表示DVD未被借*/
}Dvd[N];
/*dvd[n]中每一个元素对应一个dvd的信息*/
输入i选择想要输入的信息
i=1,调用函数enterM()
i=2,调用函数enterN()
结束
voidenterM()/*输入会员信息模块*/
{inti,m;
printf("
howmanyMembers?
:
"
scanf("
m);
\nEnterMemberdatanow\n\n"
for(i=0;
i<
m;
i++)
{printf("
\nintput%dthMemberrecord.\n"
i+1);
name\tsex\tage\tdvd1\tdvd2\tdvd3\tday\n"
%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;
howmanyDVDs?
\nEnterDVDdatanow\n\n"
n;
\nintput%dthDVDrecord.\n"
number\tname\tperson\tyes\n"
%s%s%s%d"
Dvd[i].num,Dvd[i].name,Dvd[i].person,&
Dvd[i].yes);
saveD(n);
/*调用保存函数*/
voidenter()
{inti;
printf("
whatdoyouwanttoenter?
1).Membermessage2).DVDmessage[]\b\b"
scanf("
i);
switch(i)
{case1:
enterM();
case2:
enterD();
menu();
/*如果输入的数字不是1-2,返回菜单栏*/
(2)注册模块
【需求分析】
该模块的功能是用会员的注册,从键盘输入并逐条写到原来的输入文件中。
如图所示。
开始
调用加载函数n=load()
并计算可以记录的个数n
输入用户要加载的记录个数m
K=n+m
调用输入函数
保存追加的记录
voidRegister()/*追加模块*/
inti,n,m,k;
FILE*fp;
n=loadM();
/*调用加载函数n=load(),并计算可以记录的个数*/
Howmanymembersareyouwanttoadd(0-%d)?
N-1-n);
/*输入要追加的记录个数*/
k=m+n;
/*加载后结构体数组中元素的个数*/
if((fp=fopen("
member.txt"
"
ab"
))==NULL)
cannotopenfile\n"
for(i=n;
k;
\nInput%dthmemberrecord.\n"
i-n+1);
input(i);
/*调用输入函数*/
fwrite(&
Mem[i],sizeof(structMember),1,fp);
/*载入文件*/
printf("
\n"
(3)缴费模块
该模块的功能是记录会员的缴费情况以及进行修改。
开始
输入日期
判断从0-n需要交费的会员
j=1,会员缴费
j!
=1,会员未交费
结束
voidPayment()/*修改模块*/
{inti,n,k,j;
n=loadM();
/*调用加载函数n=load(),并计算可以记录的个数*/
\nInputtoday'
sday"
k);
for(i=0;
=n;
if(Mem[i].date<
k){printf("
itistimeformember%dtopayfee!
i+1);
j);
/*如果会员该缴费的日期小于输入的日期显示该缴费*/
if(j==1)printf("
memberhavepaid\n"
elseprintf("
membernotpaid\n"
printf_back();
/*一个任务结束时让用户选择是继续浏览还是返回*/
注:
该函数的不足之处是显示会员缴费之后不能是文件中会员该缴费日期不会变。
必须利用修改模块进行修改。
(4)归还模块
该模块的功能是管理DVD的情况,会员归还后消除会员记录和DVD的记录。
结束
输入会员号码以及要归还的DVD名
判断会员所借的DVD中等于要归还的DVD名的
等于,会员对应的DVD=0,DVD信息中yes=0
voidReback()
{inti,n;
Inputthenumberofmember"
scanf(