C语言课程设计(论文)购物卡管理系统.doc
C语言课程设计报告班学号: 1姓名: 指导老师: 日期: 2010年6月中国地质大学(武汉)计算机学院一、题目要求系统主要功能模块:1,实现系统内制卡,发卡功能。2,实现系统内购物卡帐户及相关帐户管理。3,实现购物卡交易和合法性检查。4,实现购物卡交易积分功能。5,实现购物卡报表功能。6,数据以文件形式存储。提示:制卡:指申请一个购物卡,但还没有使用。发卡:指该卡已经起用。实现卡交易:指从卡中消费掉一定金额。二、需求分析根据题目要求,由于购物卡信息是存放在文件中,所以应提供文件的输入、输出等操作;在程序中需浏览购物卡的信息,应提供报表、查询等操作;另外还应提供键盘式选择菜单实现功能选择。三、总体设计根据需求分析,可以将系统分为五大模块:制卡、发卡、登陆、报表、积分。购物卡管理系统制卡模块发卡模块登录模块积分模块报表模块查询储蓄修改密码消费四、详细设计1、主函数将main()函数体内的界面选择部分语句单独抽取出来作为一独立函数,目的在于系统执行完每部分功能模块后能够方便返回到系统界面。void menu()int v,w1;doprintf("tt*MENU*nn");printf("tttt 1.card-maden");printf("tttt 2.card-lifen");printf("tttt 3.card-entern");printf("tttt 4.card-browsen");printf("tttt 5.exitn");printf("nntt *n");printf("Choice your number(1-5):bb");scanf("%d",&v);if(v<1|v>5) w1=1;getchar();else w1=0;while(w1=1);switch(v)case 1:made();break; case 2:life();break; case 3:enter();break; case 4:browse();break; case 5:exit(0); 2、各功能模块设计(1)制卡模块【数据结构】struct credicard int number;char name20;char ID20;char word8;int flag;float account; int integal; cardM;/*cardM中每个数组元素对应一个运动员信息* /【程序】void made() int i;char h20;doprintf("nnt Input your number:<ttt>bbbbbbb");scanf("%s",h);if(strlen(h)!=6)printf("nnntt*Wrong!Input again*nn");continue;for(i=0;i<n;i+)if(strcmp(cardi.ID,h)=0)printf("nntt*The number exist,input again*nn");break;while(strlen(h)!=6)|strcmp(cardi.ID,h)=0); cardn.number=n;strcpy(cardn.name,"*");strcpy(cardn.ID,h);strcpy(cardn.word,"000000");cardn.flag=0;cardn.account=0.00;cardn.integal=0; printf("nnntt*The card is made!*nn"); print_one(n);n+; add();menu();print_one(n):显示一张卡信息的函数。【程序】void print_one(int j) printf("n|-|-|-|-|-|-|"); printf("n|NO. | name | ID |flag| account | integal |"); printf("n|-|-|-|-|-|-|"); printf("n|%4d|%20s|%20s|%4d|%10.2f|%10d|", cardj.number,cardj.name,cardj.ID,cardj.flag,cardj.account,cardj.integal); printf("n|-|-|-|-|-|-|");(2)发卡模块void life() int k=-1;char h20;if(n=0) printf("nntt*Make card first*n");elseprintf("nnt Input your applied number:<ttt>bbbbbbb");scanf("%s",h);k=search(h);if(k=-1)printf("nnttt*Wrong number!*n");elseif(cardk.flag=1)printf("nntt*Life already!*n");else huo(k);menu();huo(k):激活一张卡的函数。void huo(int k) char m20,p8;int x,w2;do printf("nntt Life? (1) Yes (2) No n"); printf("ntt Chioce your number:< >bb"); scanf("%d",&x); if(x<1|x>2) w2=1;getchar(); else w2=0;while(w2=1);if(x=1)printf("nnttInput your name:<ttt>bbbbbbbbbbbbbbbbbbbb");scanf("%s",m);strcpy(cardk.name,m);printf("nnttInput six-number code :< >bbbbbbb");scanf("%s",p); strcpy(cardk.word,p); cardk.flag=1; printf("nnntt*Life!*nn");print_one(k); add();(3)登陆模块void enter() int k=-1;char h20;if(n=0) printf("nntt*Make card first*n");elseprintf("nntInput your applied number:<ttt>bbbbbbb");scanf("%s",h);k=search(h);if(k=-1)printf("nnttt*Wrong number!*n");elseif(cardk.flag=0)printf("nntt*LIFE FIRST!*n");elsehedui(k);menu();hedui(k):登陆信息。void hedui(int k) int c=0,w3=0;char p8;do printf("nntt*Input your code:< >bbbbbbb");scanf("%s",p); if(strcmp(cardk.word,p)!=0) printf("nntt*Wrong code!*n"); c+; continue;elseprintf("nntt*Right code!*n");w3=1; menu1(k);while(w3=0&&c<3);子菜单设计如下:void menu1(int k) int v,w4; printf("tt*MENU*nn");printf("tttt 1.Inquiren");printf("tttt 2.Depositn");printf("tttt 3.fetchn");printf("tttt 4.change coden");printf("tttt 5.back to menun");printf("nntt *n");printf("Choice your number(1-5):< >bb");scanf("%d",&v);if(v<1|v>5)w4=1;getchar();else w4=0;while(w4=1);switch(v)case 1:stat_one(k);break;case 2:deposit(k);break;case 3:fetch(k);break;case 4:change(k);break; case 5:menu();子模块设计如下查询模块:void stat_one(int k)printf("nntt*Operate successfully!*");print_one(k);menu1(k);储蓄模块void deposit(int k)float a=0.00;printf("nnttInput your amount:<tt>bbbbbbbbbbb");scanf("%f",&a);cardk.account+=a; printf("nntt*deposit successfully!*");print_one(k);add();menu1(k); 消费模块:void fetch(int k) float b=0.00;printf("nnttInput your amount:<tt>bbbbbbbbbbb");scanf("%f",&b);if(b>cardk.account)printf("nntt*Remaining sum is not enough !*");else cardk.account-=b; cardk.integal=b; printf("nntt*Your patronage !*"); print_one(k); add();menu1(k);修改密码模块:void change(int k) char a8,b8;printf("nnttInput new six-number code:< >bbbbbbb");scanf("%s",a);printf("nttInput new code again:< >bbbbbbb");scanf("%s",b);if(strcmp(a,b)=0)printf("nntt*Code change!*");add();elseprintf("nnttDifferent codes,code change failed!");menu1(k);(4)报表模块:void browse() int i; if(n=0) printf("nntt*Make card first!*"); else printf("nntt*Operate successfully!*n"); printf("n|-|-|-|-|-|-|"); printf("n|NO. | name | ID |flag| account | integal |"); printf("n|-|-|-|-|-|-|"); for(i=0;i<n;i+) printf("n|%4d|%20s|%20s|%4d|%10.2f|%10d|", cardi.number,cardi.name,cardi.ID,cardi.flag,cardi.account,cardi.integal); printf("n|-|-|-|-|-|-|"); menu( ); 3、公共函数(1)保存函数void add() int i;FILE *fp;if(fp=fopen("score.txt","wb")=NULL)printf("tt Can not open the file n");return;for(i=0;i<n;i+)if(fwrite(&cardi,sizeof(struct credicard),1,fp)!=1)printf("tt File write error n");return;fclose(fp);printf("nnntt*Keep!*n");(2)查找函数int search(char h20)int i,k=-1;for(i=0;i<n;i+)if(strcmp(cardi.ID,h)=0)k=i;return(k);五、运行结果(1)主菜单(2)制卡模块:输入卡号(3)制卡成功(4)发卡模块(5)发卡成功(6)登录模块(7)储蓄成功(8)修改密码(9)报表功能六、总结 以前在没有做课程设计的时候,总觉得自己编写一个程序那简直就是天方夜谭,自己怎么可能写的出来。可是现在,照着书本一点点模仿设计,自己竟然也可以写个大概,虽然过程不是很顺利,有些部分还需要学长的指点,但是,我觉得已经有很大的收获了。对于有些部分,可能还是不会写,最起码可以看懂了,不会像以前一样,只是能做一两道题目,写个三四十行程序,现在是对于程序有了一个整体的把握。虽然花费了很多时间和精力,但是可以学到很多东西,现在自己对于C语言有了更深一点的理解和认识。我知道,现在只是学了一点皮毛而已,离熟练掌握C语言还有很大一段距离,要做的还有很多,我一定会在这个暑假继续加强学习,在理解学习好自己编写的这个程序后,再尝试编写一些其他程序,使自己更加熟练运用和掌握c语言。