俱乐部DVD管理系统——C语言.doc_第1页
俱乐部DVD管理系统——C语言.doc_第2页
俱乐部DVD管理系统——C语言.doc_第3页
俱乐部DVD管理系统——C语言.doc_第4页
俱乐部DVD管理系统——C语言.doc_第5页
已阅读5页,还剩23页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

俱乐部DVD管理系统题目要求 允许俱乐部成员租用DVD。若想成为会员,首先应签约并且可按月缴纳费用。会员一次可租用三个DVD,没有时间限制。可浏览所有可租用的DVD,能实现新成员的开户,会员对其账户状况的查询以及俱乐部管理者对所有交易情况的查看功能。需求分析DVD信息和俱乐部会员信息用文件存储,提供文件的输入输出操作;注册新会员,提供文件的添加操作;实现按月交纳费用,提供文件的修改操作;浏览信息应提供显示操作;实现查询则提供文件的查找操作;另外提供键盘是选择菜单以实现功能选择。总体设计 整体设计为会员注册模块,会员缴费模块,会员租用DVD模块,会员租用DVD模块,信息浏览模块和信息查询模块等。选择菜单以实现功能选择。如下图所示。俱乐部管理系统注册缴费 归还租用浏览查询输信息修改 详细设计1 主函数主函数一般设计的比较简单,只提供输入,处理和输出部分的函数调用。其中各功能模块用菜单方式选择。如下图所示。 void menu() /*实现键盘选择式菜单*/ int n,k; do puts(tt*MENU*nn); puts(tttt 1.enter); puts(tttt 2.Member Register); puts(tttt 3.Member Payment); puts(tttt 4.DVD Return); puts(tttt 5.DVD Rent); puts(tttt 6.Message Browse); puts(tttt 7.Message Search); puts(tttt 8.modify); puts(tttt 9.Exit); puts(nntt*nn); printf(Choice your number(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();break; /*会员注册模块*/ case 3:Payment();break; /*会员缴费模块*/ case 4:Reback();break; /*会员归还DVD模块*/ case 5:Rent();break; /*会员租用DVD模块*/ case 6:Browse();break; /*信息浏览模块*/ case 7:Search();break; /*信息查询模块*/ case 8:modify();break; /*信息修改模块*/ 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 dvd220; char dvd320; int date; /*表示会员该缴费的时期*/MemM; /*memberm中每个数组元素对应一个会员的信息*/DVD的信息用结构体数组表示如下:struct Dvd char num20; char name20; 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 many Members ?:); scanf(%d,&m); printf(n Enter Member data nownn); for (i=0;im;i+) printf(n intput %dth Member record.n , i+1); printf(name t sex t age t dvd1 t dvd2 t dvd3 t dayn); scanf(%s%s%d%s%s%s%d,M,Memi.sex,&Memi.age,Memi.dvd1,Memi.dvd2,Memi.dvd3, &Memi.date); saveM(m); /*调用保存函数*/ printf_back(); /*一个任务结束时让用户选择是继续浏览还是返回*/void enterD() /*输入模块*/ int i,n; printf( how many DVDs ?:); scanf(%d,&n); printf(n Enter DVD data nownn); for (i=0;in;i+) printf(n intput %dth DVD record.n , i+1); printf(number t name t person t yesn); scanf(%s%s%s%d,Dvdi.num, D, Dvdi.person, &Dvdi.yes); saveD(n); /*调用保存函数*/ printf_back(); /*一个任务结束时让用户选择是继续浏览还是返回*/ void enter()int i;printf(what do you want to enter? 1).Member message 2).DVD message bb);scanf(%d,&i);switch(i)case 1:enterM();break;case 2:enterD();break;menu(); /*如果输入的数字不是1-2,返回菜单栏*/(2)注册模块【需求分析】该模块的功能是用会员的注册,从键盘输入并逐条写到原来的输入文件中。如图所示。开 始调用加载函数n=load()并计算可以记录的个数n输入用户要加载的记录个数mK=n+m调用输入函数保存追加的记录结 束 void Register() /*追加模块*/ int i,n,m,k; FILE*fp; n=loadM(); /*调用加载函数n=load(),并计算可以记录的个数*/ printf(How many members are you want to add(0-%d)?:,N-1-n); scanf(%d,&m); /*输入要追加的记录个数*/ k=m+n; /*加载后结构体数组中元素的个数*/ if(fp=fopen(member.txt,ab)=NULL) printf(cannot open filen); for(i=n;ik;i+) printf(n Input %dth member record.n,i-n+1); input(i); /*调用输入函数*/ fwrite(&Memi,sizeof(struct Member),1,fp); /*载入文件*/ printf(n); printf_back(); /*一个任务结束时让用户选择是继续浏览还是返回*/(3)缴费模块【需求分析】该模块的功能是记录会员的缴费情况以及进行修改。如下图所示。开 始输入日期判断从0-n需要交费的会员j=1,会员缴费j!=1,会员未交费结 束 void Payment() /*修改模块*/int i,n,k,j; n=loadM(); /*调用加载函数n=load(),并计算可以记录的个数*/ printf(nInput todays day); scanf(%d,&k);for(i=0;i=n;i+) if(Memi.datek)printf(it is time for member %d to pay fee!n,i+1); scanf(%d,&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; printf(Input the number of member); scanf(%d,&n); printf(Input the number of DVD); scanf(%d,&i); if(Memn.dvd1=D)strcpy(Memn.dvd1,0); Dvdi.yes=0; if(Memn.dvd2=D)strcpy(Memn.dvd2,0); Dvdi.yes=0; if(Memn.dvd3=D)strcpy(Memn.dvd3,0); Dvdi.yes=0; printf_back(); /*一个任务结束时让用户选择是继续浏览还是返回*/注:该函数可是算是一个失败的函数,因为输入会员的号码后,程序根本没有默认,及归还会员所借的DVD之后,会员信息里并没有将原来所借的DVD归还,并且DVD信息中已归还的DVD的yes值并不归零,必须在利用修改模块进行信息的修改。(5)租用模块【需求分析】该模块的功能是对会员借用DVD进行管理,先判断该会员能否再借用,可以后记录会员借用的DVD,同时DVD信息中也会记录下会员的姓名。如下图所示。开 始输入要租用DVD的会员以及要租用的DVD名判断会员信息中DVD是否有等于零的无,显示不能租借有,为零的DVD等于要租用的DVD名,DVD信息中person等于会员名结 束void Rent()int i,j; printf(Input the number of member); scanf(%d,&i); printf(Input the number of DVD what you want to rent!); scanf(%d,&j); if(Memi.dvd1!=0|Memi.dvd2!=0|Memi.dvd3!=0) printf(can not rent any more!);/*判断该会员是否还可以借*/ else if(strcmp(Memi.dvd1,0)strcpy(Memi.dvd1,D);Dvdj.yes=1;strcpy(Dvdj.person,M);/*表示若dvd1为零,则借用成功*/ else if(strcmp(Memi.dvd2,0)strcpy(Memi.dvd2,D);Dvdj.yes=1;strcpy(Dvdj.person,M); else if(strcmp(Memi.dvd3,0)strcpy(Memi.dvd3,D);Dvdj.yes=1;strcpy(Dvdj.person,M); printf_back(); /*一个任务结束时让用户选择是继续浏览还是返回*/(6)浏览操作【需求分析】该模块的功能是显示所有会员的记录信息。开 始调用加载函数loadM()并计算个数输出全部会员信息调用加载函数loadN()并计算个数输出全部DVD信息结 束void Browse() /*浏览模块*/int i,j,n,x,y,z,k; n=loadM(); /*调用加载函数n=load(),并计算可以记录的个数*/ printf(nt name sex age dvd1 dvd2 dvd3 dayn); for(i=0;in;i+) if(i!=0)&(i%10=0) printf(nnPass any key to contiunen); getch(); printf_Mone(i); /*调用显示一个会员信息记录的函数*/ printf(n); printf(ntThere are %d record.n,n); z=loadD(); printf(ntnum name person yesn); for(i=0;iz;i+) if(i!=0)&(i%10=0) printf(nnPass any key to contiune); getch(); printf_Done(i); /*调用显示一个DVD信息记录的函数*/ printf(n); printf(tThere are %d record.n,z); printf(nPass any key to back); getchar(); printf_back(); /*一个任务结束时让用户选择是继续浏览还是返回*/ (7)查询操作【需求分析】该模块的功能是根据输入的会员的姓名查找对应的记录,找到以后可以进行增加,删除或修改信息的操作。如下图所示。注:由于查询会员信息和查询DVD信息是一样的,因此流线图只呈现一种。开 始输入会员姓名查找该会员记录找到则显示信息没有则提示没有记录结 束 void Search() /*查询模块*/int i,n,m,k; struct Member s; struct Dvd t; n=loadM(); /*调用加载函数n=load(),并计算可以记录的个数*/ printf(nnEnter member name that you want to search! name:); scanf(%s,); printf(nt name sex age dvd1 dvd2 dvd3 dayn); for(i=0;in;i+) if(strcmp(,M)=0) /*通过字符串比较函数查找想要查询的会员*/ printf_Mone(i);break; /*调用显示找到会员信息记录的函数* m=loadD(); /*调用加载函数n=load(),并计算可以记录的个数*/ printf(nnEnter DVD name that you want to search! name:); scanf(%s,); printf(ntnum name person yesn); for(i=0;im;i+) if(strcmp(,D)=0) printf_Done(i);break; printf_back(); /*一个任务结束时让用户选择是继续浏览还是返回*/(8)修改模块【需求分析】程序要求中并没有要求有修改模块,但是在缴费模块中需要用到修改模块,而且,由于未知原因,租用模块和归还模块不能正常运行,也要用到修改模式进行修改,才能实现程序的可用性。同样在此也只显示修改会员的信息,修改DVD信息是一样的。输入要修改的会员名开 始显示该会员的记录输入新信息新信息覆盖旧信息结 束int modify()int i,n,m,k; struct Member s; struct Dvd t; n=loadM(); /*调用加载函数n=load(),并计算可以记录的个数*/ printf(nnEnter name that you want to search! name:); scanf(%s,); printf(nt name sex age dvd1 dvd2 dvd3 dayn); for(i=0;in;i+) if(strcmp(,M)=0) /*运用查找模块,找到想要修改的会员的记录*/ printf_Mone(i); /*利用只显示一条会员信息函数,显示找到的会员信息*/ printf(n please enter the member massages:n name sex age dvd1 dvd2 dvd3 daten); scanf(%s%s%d%s%s%s%d,,s.sex,s.age,s.dvd1,s.dvd2,s.dvd3,s.date); /*输入新的信息*/ strcpy(M,); strcpy(Memi.sex,s.sex); strcpy(Memi.dvd1,s.dvd1); strcpy(Memi.dvd2,s.dvd2); strcpy(Memi.dvd3,s.dvd3); /*利用字符串复制将新信息载入文件*/ Memi.age=s.age; Memi.day=s.day; /*整型就直接赋值*/ m=loadD(); /*调用加载函数n=load(),并计算可以记录的个数*/ printf(nnEnter name that you want to search! name:); scanf(%s,); printf(ntnum name person yesn); for(i=0;im;i+) if(strcmp(,D)=0) printf_Done(i); printf(please enter the dvd massages:num name person yesn); scanf(%s%s%s%d,t.num,,t.person,t.yes); strcpy(Dvdi.num,t.num); strcpy(D,); strcpy(Dvdi.person,t.person); Dvdi.yes=t.yes; printf_back(); /*一个任务结束时让用户选择是继续浏览还是返回*/3 公共函数 下面介绍一些在每个功能模块中都有可能会用到的一些公共函数。 (1)保存函数 save(int n) 【说明】 形参m控制保存的个数。该模块的功能是将输入的信息保存到文件中。saveD(int m) /*保存函数,将m个DVD信息保存到文件中*/FILE *fp; /*定义文件指针*/ int i;if(fp=fopen(dvd.txt,wb)=NULL) /*以只写方式为输出打开一个二进制文件*/ printf(nCannot open filen); return NULL; for(i=0;im;i+) if(fwrite(&Dvdi,sizeof(struct Dvd),1,fp)!=1) /*表示把一个数据项写入DVD二进制文件中,如果fwrite调用成功,则函数返回只是count的值,在此就是1,!=1就表示函数调用不成功*/ printf(file write errorn);fclose(fp) ;saveM(int m) /*保存函数,将m个数据项保存到会员文件中*/FILE *fp; /*定义文件指针*/ int i;if(fp=fopen(member.txt,wb)=NULL) /*以只写方式为输出打开一个二进制文件*/ printf(nCannot open filen); return NULL; for(i=0;im;i+) if(fwrite(&Memi,sizeof(struct Member),1,fp)!=1) /*表示把一个数据项写入DVD二进制文件中,如果fwrite调用成功,则函数返回只是count的值,在此就是1,!=1就表示函数调用不成功*/ printf(file write errorn);fclose(fp) ; (2)加载函数load() 【说明】 该函数可以用来加载所有记录,并且可以返回所有记录的个数。loadM() /*加载并记录所有会员信息的个数*/FILE*fp; /*定义文件指针*/ int i; if(fp=fopen(member.txt,rb)=NULL)/*以只写方式为输出打开一个二进制文件*/ printf(nCan not open filen); return NULL; for(i=0;!feof(fp);i+)fread(&Memi,sizeof(struct Member),1,fp); fclose(fp); return(i-1) /*返回记录的个数*/;int loadD() /*加载并记录所有DVD信息个数*/FILE*fp; /*定义文件指针*/ if(fp=fopen(dvd.txt,rb)=NULL) /*以只写方式为输出打开一个二进制文件*/ printf(nCan not open filen); return NULL; for(i=0;!feof(fp);i+) fread(&Dvdi,sizeof(struct Dvd),1,fp); fclose(fp); return(i-1); /*返回记录的个数*/;(3)输入输出函数该函数的功能是实现程序运行时一输出一输入功能,使程序更加人性化,并且减小了模块的大小,更清楚易理解。input(int i)printf(name);scanf(%s,&M);printf(sex);scanf(%s,&Memi.sex);printf(age);scanf(%d,&Memi.age);printf(dvd1);scanf(%s,&Memi.dvd1);printf(dvd2);scanf(%s,&Memi.dvd2);printf(dvd3);scanf(%s,&Memi.dvd3);printf(day);scanf(%d,&Memi.day);(4)只输入一项纪录函数该函数的功能是指定输出想要的记录。printf_Mone(int i) /*只输出一项会员记录函数*/printf(%11s%5s%2d%10s%10s%10s%5d,M,Memi.sex,Memi.age,Memi.dvd1,Memi.dvd2,Memi.dvd3,Memi.day);printf_Done(int i) /*只输出一项DVD记录函数*/printf(%10s%10s%10s%5d,Dvdi.num,D,Dvdi.person,Dvdi.yes);(5)返回函数该函数的功能是一个任务结束时让用户选择是继续浏览还是返回。printf_back()int k,w; printf(nntSuccessful.nn); printf(What do you want to do?nnt1).Browse all nowt2).Back: bb); /*菜单选择式*/ scanf(%d,&w); if(w=1)Browse(); /*浏览所在模块运行的结果*/ else menu(); /*返回菜单栏*/ 实习感受在为期四天的C语言实习过程中,我学到了很多东西。在平时上课时,我学到一个程序就是由数据结构和算法应用一定的结构组合起来的。数据结构有整型,实型和字符型以及变量和常量之分;算法由函数和语句组合而成;结构有顺序,选择,循环,和模块结构;还学了结构体,数组和文件等。对程序有了大概的认识。通过实习,把所学的东西应用起来,亲自去边一个程序的时候,才发现其中的奥妙,有很多细节的东西需要注意,例如在实习过程中,由于dowhile的循环顺序没有注意使得运行时一直出错。最后在看书,才发现是dowhile语句的用法出错了。这只是一个很小的例子,编写一个程序远比读一个程序要难得多,比如每个语句后一定要加分号,一个大程序如果就少了一个分号很可能无法运行。在以前的学习中,经常有算法思路就可以了,最多就是会编一个小程序,实现一个数学算法而已。本次实习,要针对实际问题编一个大的程序,一开始的时候,根本无法下手,看了书上的示例,明白了对于这样的问题,要划分成几个小模块,一个模块处理一个功能,也就是说一个模块就是一个函数,一个函数完成一个任务,这样就把一个大的程序分成若干个小程序。于是感觉简单了许多。同时,我还有一个很大的感受就是在运行程序的时候一定要耐心,细心。因为前面已经提到,一个小小的分号就很可能引起系统无法运行,因此在运行时出现很多错误时常有的事情,我又一次出现过二十几个错误,这时候一定不能厌烦放弃,看错误提示,常常你把一个关键处改掉之后就可以了。 实习之后,我对C语言有了更深的认识,当然然存在很多问题,希望老师指导。 附录(源代码)#define N 100#define M 100#include #include #include #include void menu();void Register();void Payment();void Reback();void Rent();void Browse();void Search();void enter();struct Dvd char num20; char name20; char person20; int yes;DvdN;struct Member char name20; char sex20; int age; char dvd120; char dvd220; char dvd320; int date;MemM; saveD(int m)FILE *fp; int i;if(fp=fopen(dvd.txt,wb)=NULL) printf(nCannot open filen); return NULL; for(i=0;im;i+) if(fwrite(&Dvdi,sizeof(struct Dvd),1,fp)!=1) printf(file write errorn);fclose(fp) ;void enterD() int i,n; printf( how many DVDs ?:); scanf(%d,&n); printf(n Enter DVD data nownn); for (i=0;in;i+) printf(n intput %dth DVD record.n , i+1); printf(number t name t person t yesn); scanf(%s%s%s%d,Dvdi.num,D,Dvdi.person,&Dvdi.yes); saveD(n); menu(); saveM(int m)FILE *fp; int i;if(fp=fopen(member.txt,wb)=NULL) printf(nCannot open filen); return NULL; for(i=0;im;i+)if(fwrite(&Memi,sizeof(struct Member),1,fp)!=1)printf(file write errorn);fclose(fp) ;void enterM() int i,m; printf( how many Members ?:); scanf(%d,&m); printf(n Enter Member data nownn); for (i=0;im;i+) printf(n intput %dth Member record.n , i+1); printf(name t sex t age t dvd1 t dvd2 t dvd3 t dayn); scanf(%s%s%d%s%s%s%d,M,Memi.sex,&Memi.age,Memi.dvd1,Memi.dvd2,Memi.dvd3, &Memi.date); saveM(m); menu(); void enter()int i;printf(what do you want to enter? 1).Member message 2).DVD message bb);scanf(%d,&i);switch(i)case 1:enterM();break;case 2:enterD();break;menu();input(int i)printf(name);scanf(%s,&M);printf(sex);scanf(%s,&Memi.sex);printf(age);scanf(%d,&Memi.age);printf(dvd1);scanf(%s,&Memi.dvd1);printf(dvd2);scanf(%s,&Memi.dvd2);printf(dvd3);scanf(%s,&Memi.dvd3);printf(date);scanf(%d,&Memi.date);void menu() int n,k; do puts(tt*MENU*nn); puts(tttt 1.enter); puts(tttt 2.Member Register); puts(tttt 3.Member Payment); puts(tttt 4.DVD Return); puts(tttt 5.DVD Rent); puts(tttt 6.Message Browse); puts(tttt 7.Message Search); puts(tttt 8.modify); puts(tttt 9.Exit); puts(nntt*nn); printf(Choice your number(1-9): bb); scanf(%d,&n); if(n9) k=1;getchar(); else k=0; while(k=1); switch(n) case 1:enter();break; case 2:Register();break; case 3:Payment();break; case 4:Reback();break; case 5:Rent();break; case 6:Browse();break; case 7:Search();break; case 8:modify();break; case 9:exit(0); void Register() int i,n,m,k; FILE*fp; n=loadM(); printf(How many members are you want to add(0-%d)?:,N-1-n); scanf(%d,&m); k=m+n; if(fp=fopen(member.txt,ab)=NULL) printf(cannot open filen); for(i=n;ik;i+) printf(n Input %dth member record.n,i-n+1); input(i); fwrite(&Memi,sizeof(struct Member),1,fp); printf(n); printf_back();void Payment()int i,n,k,j; n=loadM(); printf(nInput todays day); scanf(%d,&k);for(i=0;i=n;i+) if(Memi.day!=k)printf(it is time for member %d to pay fee!n,i+1); scanf(%d,&j); if(j=1)printf(member have paidn); else printf(member not paidn); printf_back();void Reback()int i,n; printf(Input the number of member); scanf(%d,&n); printf(Input the number of DVD); scanf(%d,&i); if(Memn.dvd1=D)strcpy(Memn.dvd1,0); Dvdi.yes=0; if(Memn.dvd2=D)strcpy(Memn.dvd2,0); Dvdi.yes=0; if(Memn.dvd3=D)strcpy(Memn.dvd3,0); Dvdi.yes=0; printf_back();void Rent()int i,j; printf(Input the number of member); scanf(%d,&i); printf(Input the number of DVD what you want to rent!); scanf(%d,&j); if(Memi.dvd1!=0|Memi.dvd2!=0|Memi.dvd3!=0) printf(can not rent any more!); else if(strcmp(Memi.dvd1,0)strcpy(Memi.dvd1,D);Dvdj.yes=1;strcpy(Dvdj.person,M); else if(strcmp(Memi.dvd2,0)strcpy(Memi.

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

最新文档

评论

0/150

提交评论