C语言课程设计报告-俱乐部会员管理系统.doc
计算机学院高级语言程序设计课程设计报告学号2016-2017学年 第二学期1608220203高级语言程序设计课程设计报告题目:俱乐部会员管理系统专业:网络工程(对口)班级:16(3)班姓名:指导教师:成绩:计算机学院2017 年 4月 25 日目 录一、需求分析31题目要求32需求分析33总体设计4二、代码设计41.宏定义42.主函数53.各功能模块6三实验结果17一、需求分析1题目要求)要求允许俱乐部成员租用DVD.若想成为会员,首先应签约并且按月交纳费用。会员一次可租用三个DVD,没有时间限制。可浏览所有可租用的DVD,能实现新成员的开户、会员对其账户状况的查询以及俱乐部管理者对其所交易情况的查看功能。)提示需求分析:DVD信息和俱乐部会员信息用文件存储,提供文件的输入输出操作;注册新会员,提供文件的添加操作;实现按月缴纳费用,提供文件的修改操作;浏览信息提供显示操作;实现查询提供文件的查找操作;另外提供键盘式选择菜单以实现功能选择。总体设计:整体设计为会员注册模块、会员交费模块、会员租用DVD模块、会员归还DVD模块、信息浏览模块和信息查询模块等。2需求分析)【输入要求】应用程序运行后,在屏幕上显示一个菜单。用户可以根据需求,选定相应的操作项目。进入每个操作后,根据应用程序的提示信息,从键盘输入相应的信息。)【输出要求】应用程序运行后,要在屏幕上显示一个菜单;要求用户输入数据时,要给出清晰、明确的提示信息,包括输入的数据内容、格式及结束方式等。3总体设计根据需求分析,可以对这个系统的设计分为以下几个模块:欢迎界面主菜单注册会员缴纳会费会员DVD信息浏览信息查询退出建立新档案二、代码设计1.宏定义#include stdio.h #include string.h #include stdlib.h #include math.h #include time.h int n,n1; /* 全局*/ int N3;/* 记录着上次建立的档案数,从新运行程序时,不会丢上次信息*/ int yuefei=30; menu1(); quit(); menu2(); menu3(); create();/*建立档案 */ add(); /* 增加信息*/ monfei(); dvd(); search1(); search2(); printhuiyuan(); printdvd(); moon(); struct dvdA char name20; int num; int sex; int huifei; int day; int dvd1; int dvd2; int dvd3; stu1100; struct dvdB int num; char name20; int k; dd1100;2.主函数主函数一般设计得比较简洁,只提供输入输出和功能处理的函数调用。其各功能模块用菜单方式选择。本题将main()函数体内的界面选择部分语句单独抽取出来作为一独立函数,目的在于系统执行完每部分功能模块后能够方便返回到系统界面。【程序】main() printf(*欢迎使用dvd信息管理系统*n); printf(nnnn请输入管理员密码:); if(check() menu1(); else printf( 密码输入错误n); printf( *你无权使用本系统*n); quit(); 3.各功能模块密码验证模块int check() char a20,str=123; int count; for(count=0;count3;count+) gets(a); if(strcmp(a,str)=0) return 1 ; else continue; return 0; 主菜单功能选择模块int menu1() FILE *fp1; int a; if(fp1=fopen(n.txt,a+)=NULL) printf(cannot open file); exit(0); fread(&N1,sizeof(int),1,fp1); fread(&N2,sizeof(int),1,fp1); fclose(fp1); n=N1; n1=N2; moon(); printf(n 1. 建立新档案n); printf(n 2. 注册会员n); printf(n 3. 缴纳会费n); printf(n 4. 会员dvdn); printf(n 5. 信息浏览n); printf(n 6. 信息查询n); printf(n 7. 退出n); printf(nnn请选择编号:); scanf(%d,&a); switch(a) case 1: create(); menu1();break; case 2: add(); menu1(); break; case 3: monfei();menu1();break; case 4: dvd();menu1();break; case 5: menu2();break; case 6: menu3();break; case 7: quit();break; default: printf(输入编号错误n); menu1(); 子菜单功能选择模块int menu2() int a; printf( 信息浏览n); printf(n 1.会员信息浏览n); printf(n 2.dvd信息浏览n); printf(n 3.返回上级菜单n); printf(nnn请输入编号:); scanf(%d,&a); switch(a) case 1: printhuiyuan();break; case 2: printdvd();break; case 3: menu1();break; default:printf(输入编号错误n); menu2(); 建立新档案模块create() FILE *fp,*fp1; int i; struct dvdA stu2100; struct dvdB dd2100; int y,m,d,s1; time_t timep; struct tm *p; time(&timep); p=localtime(&timep); /*取得当地时间*/ m=1+p-tm_mon; d=p-tm_mday; s1=m*30+d; printf(请输入档案的个数:); scanf(%d,&n); N0=n; for(i=0;in;i+) printf(请输入会员名:); scanf(%s,&stu1i.name); printf(请输入会员编号; ); scanf(%d,&stu1i.num); printf(请输入会员性别:男1女2:); scanf(%d,&stu1i.sex); printf(请输入充入的会费:); scanf(%d,&stu1i.huifei); stu1i.day=s1; stu1i.dvd1=stu1i.dvd2=stu1i.dvd3=0; getchar(); if(fp=fopen(huiyuan.txt,w+)=NULL) printf(cannot open file); exit(0); for(i=0;in;i+) fwrite(&stu1i,sizeof(struct dvdA),1,fp); fclose(fp); if(fp=fopen(huiyuan.txt,r+)=NULL) printf(cannot open file); exit(0); for(i=0;in;i+) fread(&stu2i,sizeof(struct dvdA),1,fp); printf(姓名 编号 性别 会费 n); printf(%4s,%5d,%5d,%4dn, stu2i.name,stu2i.num,stu2i.sex,stu2i.huifei); fclose(fp); printf(请输入dvd档案的个数:); scanf(%d,&n1); N2=n1; for(i=0;in1;i+) printf(请输入dvd编号:); scanf(%d,&dd1i.num); printf(请输入dvd名; ); scanf(%s,&dd1i.name); dd1i.k=1; getchar(); if(fp=fopen(dvd.txt,w+)=NULL) printf(cannot open file); exit(0); for(i=0;in1;i+) fwrite(&dd1i,sizeof(struct dvdB),1,fp); fclose(fp); if(fp=fopen(dvd.txt,r+)=NULL) printf(cannot open file); exit(0); for(i=0;in1;i+) fread(&dd2i,sizeof(struct dvdB),1,fp); printf( 编号 dvd名 数量n); printf(%4d,%5s %dn, dd2i.num,dd2i.name,dd2i.k); fclose(fp); if(fp1=fopen(n.txt,w+)=NULL) printf(cannot open file); exit(0); fwrite(&N0,sizeof(int),1,fp1); fwrite(&N2,sizeof(int),1,fp1); fclose(fp1); 注册会员模块add() FILE *fp,*fp1; int i,a; struct dvdA stu2100; int m,d,s1; time_t timep; struct tm *p; time(&timep); p=localtime(&timep); /*取得当地时间*/ m=1+p-tm_mon; d=p-tm_mday; s1=m*30+d; printf(请输入增加会员档案的个数:); scanf(%d,&a); for(i=n;i(n+a);i+) printf(请输入会员名:); scanf(%s,&stu1i.name); printf(请输入会员编号: ); scanf(%d,&stu1i.num); printf(请输入会员性别:男1女2:); scanf(%d,&stu1i.sex); printf(请输入初始的会费:); scanf(%d,&stu1i.huifei); stu1i.day=s1; stu1i.dvd1=stu1i.dvd2=stu1i.dvd3=0; getchar(); if(fp=fopen(huiyuan.txt,a+)=NULL) printf(cannot open file); exit(0); for(i=n;i(n+a);i+) fwrite(&stu1i,sizeof(struct dvdA),1,fp); fclose(fp); n=n+a; if(fp=fopen(huiyuan.txt,r+)=NULL) printf(cannot open file); exit(0); for(i=0;in;i+) fread(&stu2i,sizeof(struct dvdA),1,fp); printf(姓名 编号 性别 会费 n); printf(%4s,%5d,%5d,%4dn, stu2i.name,stu2i.num,stu2i.sex,stu2i.huifei); fclose(fp); N0=n; if(fp1=fopen(n.txt,w+)=NULL) printf(cannot open file); exit(0); fwrite(&N0,sizeof(int),1,fp1); fclose(fp1); 缴纳会费模块monfei() FILE *fp,*fp1; int i,c; char name20; struct dvdA stu2100; printf(n请输入会员姓名:n); scanf(%s,&name); if(fp=fopen(huiyuan.txt,r+)=NULL) printf(cannot open file); exit(0); for(i=0;in;i+) fread(&stu2i,sizeof(struct dvdA),1,fp); c=strcmp(name,stu2i.name); if(c=0) printf(姓名 编号 性别 会费 dvd1 dvd2 dvd3 n); printf(%4s,%5d,%5d,%4d %4d %4d %4dn, stu2i.name,stu2i.num,stu2i.sex,stu2i.huifei,stu2i.dvd1,stu2i.dvd2,stu2i.dvd3); printf(请输入你要充入会费n); scanf(%d,&stu2i.huifei); fclose(fp); if(fp=fopen(huiyuan.txt,w+)=NULL) printf(cannot open file); exit(0); for(i=0;in;i+) fwrite(&stu2i,sizeof(struct dvdA),1,fp); fclose(fp); 会员DVD信息模块dvd() FILE *fp,*fp1; int i,c; char name20; struct dvdA stu2100; printf(n请输入会员姓名:n); scanf(%s,&name); if(fp=fopen(huiyuan.txt,r+)=NULL) printf(cannot open file); exit(0); for(i=0;in;i+) fread(&stu2i,sizeof(struct dvdA),1,fp); c=strcmp(name,stu2i.name); if(c=0) printf(姓名 编号 性别 会费 dvd1 dvd2 dvd3 n); printf(%4s,%5d,%5d,%4d %4d %4d %4dn, stu2i.name,stu2i.num,stu2i.sex,stu2i.huifei,stu2i.dvd1,stu2i.dvd2,stu2i.dvd3); printf(请输入你要修改后的dvd1编号:); scanf(%d,&stu2i.dvd1); printf(n请输入你要修改后的dvd2编号:); scanf(%d,&stu2i.dvd2); printf(n请输入你要修改后的dvd3编号:); scanf(%d,&stu2i.dvd3); fclose(fp); if(fp=fopen(huiyuan.txt,w+)=NULL) printf(cannot open file); exit(0); for(i=0;in;i+) fwrite(&stu2i,sizeof(struct dvdA),1,fp); fclose(fp); menu1(); 信息浏览模块moon() FILE *fp;int i; struct dvdA stu2100; int m,d,s1,s2; time_t timep; struct tm *p; time(&timep); p=localtime(&timep); /*取得当地时间*/ m=1+p-tm_mon; d=p-tm_mday; s1=m*30+d; if(fp=fopen(huiyuan.txt,a+)=NULL) printf(cannot open file); exit(0); for(i=0;in;i+) fread(&stu2i,sizeof(struct dvdA),1,fp); s2=(s1-stu2i.day)/30; if(s20) stu2i.huifei=stu2i.huifei-yuefei*s2; stu2i.day=s1; fclose(fp); if(fp=fopen(huiyuan.txt,w+)=NULL) printf(cannot open file); exit(0); for(i=0;in;i+) fwrite(&stu2i,sizeof(struct dvdA),1,fp); fclose(fp); printhuiyuan() FILE *fp; int i; struct dvdA stu2100; if(fp=fopen(huiyuan.txt,r+)=NULL) printf(cannot open file); exit(0); for(i=0;in;i+) fread(&stu2i,sizeof(struct dvdA),1,fp); printf(姓名 编号 性别 会费 n); printf(%4s,%5d,%5d,%4dn, stu2i.name,stu2i.num,stu2i.sex,stu2i.huifei); fclose(fp); menu2(); printdvd() FILE *fp; int i; struct dvdB dd2100; if(fp=fopen(dvd.txt,r+)=NULL) printf(cannot open file); exit(0); for(i=0;in1;i+) fread(&dd2i,sizeof(struct dvdB),1,fp); printf( 编号 dvd名 数量n); printf(%4d,%5s %4dn, dd2i.num,dd2i.name,dd2i.k); fclose(fp); menu2(); 信息查询模块search1() FILE *fp,*fp1; int i,c; char name20; struct dvdA stu2100; printf(n请输入会员姓名:n); scanf(%s,&name); if(fp=fopen(huiyuan.txt,r+)=NULL) printf(cannot open file); exit(0); for(i=0;in;i+) fread(&stu2i,sizeof(struct dvdA),1,fp); c=strcmp(name,stu2i.name); if(c=0) printf(姓名 编号 性别 会费 dvd1 dvd2 dvd3 n); printf(%4s,%5d,%5d,%4d %4d %4d %4dn, stu2i.name,stu2i.num,stu2i.sex,stu2i.huifei,stu2i.dvd1,stu2i.dvd2,stu2i.dvd3); break; fclose(fp); menu3(); search2() FILE *fp,*fp1; int i,c; struct dvdB dd2100; printf(n请输入dvd编号:n); scanf(%d,&c); if(fp=fopen(dvd.txt,r+)=NULL) printf(cannot open file); exit(0); for(i=0;in1;i+) fread(&dd2i,sizeof(struct dvdB),1,fp); if(c=dd2i.num) printf( 编号 dvd名 数量n); printf(%4d,%5s %dn, dd2i.num,dd2i.name,dd2i.k); break; fclose(fp); menu3(); menu3() int a; printf(n 信息查询n ); printf(n 1.按会员名查找n); printf(n 2.按dvd查找n); printf(n 3.返回上级菜单 n); printf(nnn请输入编号:); scanf (%d,&a); switch (a) case 1: search1();break; case 2: search2();break; case 3: menu1();break; default:printf(输入编码错误n);menu3(); 退出模块quit() char ch; printf(n真的要退出?(Y/N); scanf(%c,&ch); if(ch=Y|ch=y) printf(n谢谢使用!_); exit(0); menu1(); 三实验结果各模块截图如下:1)密码验证模块2)主菜单功能选择模块3)建立新档案模块4)注册新会员模块5)缴纳会费模块6)会员DVD模块7)信息浏览8)信息查询9)退出系统20