1、 详细设计1 主函数主函数一般设计的比较简单,只提供输入,处理和输出部分的函数调用。其中各功能模块用菜单方式选择。 void menu() /*实现键盘选择式菜单*/ int n,k; do puts(tt*MENU*nn); puts(tttt 1.entertttt 2.Member Registertttt 3.Member Paymenttttt 4.DVD Returntttt 5.DVD Renttttt 6.Message Browsetttt 7.Message Searchtttt 8.modifytttt 9.Exitnntt*nn printf(Choice your n
2、umber(1-9): bb scanf(%d,&n); if(n9) /*对输入的数字做判断*/ k=1;getchar(); else k=0; while(k=1); switch(n) /*switch函数实现功能选择*/ case 1:enter();break; /*输入信息模块*/ case 2:Register(); /*会员注册模块*/ case 3:Payment(); /*会员缴费模块*/ case 4:Reback(); /*会员归还DVD模块*/ case 5:Rent(); /*会员租用DVD模块*/ case 6:Browse(); /*信息浏览模块*/ case
3、 7:Search(); /*信息查询模块*/ case 8:modify(); /*信息修改模块*/ case 9:exit(0); 开 始显示一系列功能选项输入n,判断n是否是1-9根据n的值调用各功能模块函数结 束2 各功能模块设计 (1)输入模块【数据结构】原始数据有两类:一是会员信息,二是DVD信息;两个信息分别保存在两个文件中。文件名分别为member.txt,dvd.txt。采用结构体的形式把信息作为一个整体来处理。会员的信息用结构体数组形式表示如下:struct Member char name20; char sex20; int age; char dvd120; char
4、 dvd220; char dvd320; int date; /*表示会员该缴费的时期*/MemM; /*memberm中每个数组元素对应一个会员的信息*/DVD的信息用结构体数组表示如下:struct Dvd char num20; char person20; int yes; /*yes=1表示DVD被借,yes=0表示DVD未被借*/DvdN; /*dvdn中每一个元素对应一个dvd的信息*/输入i选择想要输入的信息i=1,调用函数enterM()i=2,调用函数enterN()结 束 void enterM() /*输入会员信息模块*/ int i,m; printf( how m
5、any Members ?: scanf(m);n Enter Member data nownn for (i=0;im;i+) printf(n intput %dth Member record.n , i+1);name t sex t age t dvd1 t dvd2 t dvd3 t dayn%s%s%d%s%s%s%d,Memi.name,Memi.sex,&Memi.age,Memi.dvd1,Memi.dvd2,Memi.dvd3, &Memi.date); saveM(m); /*调用保存函数*/ printf_back(); /*一个任务结束时让用户选择是继续浏览还是返
6、回*/void enterD() /*输入模块*/ int i,n; how many DVDs ?n Enter DVD data nownnn;n intput %dth DVD record.n number t name t person t yesn%s%s%s%d,Dvdi.num, Dvdi.name, Dvdi.person, &Dvdi.yes); saveD(n); /*调用保存函数*/ void enter()int i;printf(what do you want to enter? 1).Member message 2).DVD message bbscanf(i
7、);switch(i)case 1:enterM();case 2:enterD();menu(); /*如果输入的数字不是1-2,返回菜单栏*/(2)注册模块【需求分析】该模块的功能是用会员的注册,从键盘输入并逐条写到原来的输入文件中。如图所示。开 始调用加载函数n=load()并计算可以记录的个数n输入用户要加载的记录个数mK=n+m调用输入函数保存追加的记录 void Register() /*追加模块*/ int i,n,m,k; FILE*fp; n=loadM(); /*调用加载函数n=load(),并计算可以记录的个数*/How many members are you want
8、 to add(0-%d)?,N-1-n); /*输入要追加的记录个数*/ k=m+n; /*加载后结构体数组中元素的个数*/ if(fp=fopen(member.txt,ab)=NULL)cannot open filen for(i=n;k;n Input %dth member record.n,i-n+1); input(i); /*调用输入函数*/ fwrite(&Memi,sizeof(struct Member),1,fp); /*载入文件*/ printf(n(3)缴费模块该模块的功能是记录会员的缴费情况以及进行修改。开 始输入日期判断从0-n需要交费的会员j=1,会员缴费j
9、!=1,会员未交费结 束 void Payment() /*修改模块*/int i,n,k,j; n=loadM(); /*调用加载函数n=load(),并计算可以记录的个数*/nInput todays dayk);for(i=0;=n; if(Memi.datek)printf(it is time for member %d to pay fee!,i+1);j); /*如果会员该缴费的日期小于输入的日期显示该缴费*/ if(j=1)printf(member have paidn else printf(member not paidn printf_back(); /*一个任务结束时让用户选择是继续浏览还是返回*/注:该函数的不足之处是显示会员缴费之后不能是文件中会员该缴费日期不会变。必须利用修改模块进行修改。(4)归还模块该模块的功能是管理DVD的情况,会员归还后消除会员记录和DVD的记录。结 束输入会员号码以及要归还的DVD名判断会员所借的DVD中等于要归还的DVD名的 等于,会员对应的DVD=0,DVD信息中yes=0void Reback()int i,n;Input the number of member scanf(
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1