1、 getchar(); menu();函数开头有“文件包含”的预处理命令,所谓“文件包含”处理是指一个源文件可以将另外一个源文件的全部内容包含进来,即将另外的文件包含到本文件之中。C语言提供了#include命令用来实现“文件包含”的操作。在本程序中包含了一下头文件:string.h、ctype.hstdio.h,方便调用库函数实现某些功能。在程序设计中,只使用一些基本类型(或称简单类型)的变量(如整型、实型、字符型变量等)和构造类型数据数组,是远远不够的。有时候需要将不同类型的数据组合成一个有机的整体,以便于引用。这些组合在一个整体中的数据是相互联系的。在这个程序中,定义了一个结构体数组来存
2、放购物卡用户的各种信息,包括账户卡号、户主姓名、账户余额、账户状态、账户积分,结构体如下:struct user int num;/*账户号码*/ char name20;/*户主名称*/ float surplus;/*账户余额*/ char state2;/*账户状态,y:已启用,n:未启用*/ int point;/*账户积分*/u100;同时在各分函数中,定义了int、float、char等一系列变量类型,用来实现函数功能。在主函数前面,要加上对各功能函数的声明,声明的作用是把函数的名字、函数的类型以及形参的类型、个数和顺序通知编译系统,以便在调用该函数时系统按此进行对照检查,例如函数
3、名是否正确,实参与形参的类型和个数是否一致等。主函数比较简单,但是函数的调用很多,所以,在程序的开头就加上了各函数的声明,如下:void c_c();/*制卡函数模块*/void s_u();/*发卡函数模块*/void in_m();/*存款函数模块*/void out_m();/*取款函数模块*/void c_i();/*查询账户相关信息函数模块*/void c_r();/*查询账户交易记录函数模块*/void check();/*查询全部信息函数模块*/void menu();/*主菜单函数模块*/void back();/*返回函数模块*/void check_b();/*给用户提示已
4、有信息*/实现菜单选择功能,使用的是switch语句,根据用户输入的菜单选项a,调用不同的函数实现各种功能:switch(a) case 1:c_c();break;/*制卡模块*/ case 2:s_u();/*发卡模块*/ case 3:in_m();/*存款模块*/ case 4:out_m();/*取款模块*/ case 5:c_i();/*查询账户相关信息模块*/ case 6:c_r();/*查询交易记录模块*/ case 7:check();/*查看所有信息模块*/ case 8:exit(0);/*退出模块*/ 主菜单函数程序void menu() int v,w1; do p
5、rintf(nnnntt ntt| (1) 制 卡 操 作 |ntt|-|ntt| (2) 帐 号 激 活 |ntt| (3) 帐 户 登 陆 |ntt| (4) 报 表 操 作 |ntt| (5) 退 出 |ntt|_|nnntt 请选择操作(1-5):bb scanf(%d,&v); if(v5) printf(nntt*输 入 有 误 !* w1=1; getchar(); else w1=0; while(w1=1); switch(v)made(); /*制作*/life(); /*激活*/enter(); /*登陆*/browse(); /*报表*/ /*退出*/2、 功能模块设计
6、2.1 制卡模块1、制卡【数据结构】所输入的数据信息在磁盘上以文本文件的形式保存,一条记录对应一个购物卡,既符合习惯也方便信息管理。【分析】制卡时需要把开卡的户主的信息输入,包括卡号、姓名、初始金额、是否开始使用此卡,并且还需要输出其信息。把购物卡的卡号、姓名、密码、存款金额、消费金额、积分数作为结构体成员,存放在结构体数组:struct credicard /*定义信用卡结构体*/ int number; char ID20; char word8; int flag; float account; int integal; int jifen;cardM;void made() /*制卡操
7、作*/ int i; char h20;nnt请输入要申请的号码:tttbbbbbbb%s,h); if(strlen(h)!=6)nnntt*输入有误,请重新输入*nn continue; for(i=0;in;i+) if(strcmp(cardi.ID,h)=0) printf(nntt*该号码已经存在,请重新输入*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 card
8、n.flag=0; cardn.account=0.00; cardn.integal=0;nnntt*制 卡 成 功 !*nn print_one(n); n+; add();2、显示卡的信息将刚制的卡的信息输出到屏幕。void print_one(int j) /*显示消息*/n|-|-|-|-|-|-|n|NO. | name | ID |flag| account | integal |n|%4d|%20s|%20s|%4d|%10.2f|%10d|, cardj.number,cardj.name,cardj.ID,cardj.flag,cardj.account,cardj.int
9、egal);3、用文件的形式将卡保存void add() /*写入文件*/ FILE *fp; if(fp=fopen(score.txt,wb)=NULL)tt Can not open the file n return; for(i=0; if(fwrite(&cardi,sizeof(struct credicard),1,fp)!=1)tt File write error n return; fclose(fp);nnntt*成功保存!2.2 发卡模块该模块的功能是根据输入的卡号查找对应的记录,找到后可进行发卡,填写申请人的姓名、设置密码等操作,并决定是否激活。最后登录此卡查看是否
10、已激活,输出到屏幕。【流程图】1、 首先输入卡号进行激活该卡操作:void huo(int k) /*激活操作*/ char m20,p8; int x,w2;nntt 是否激活该卡? (1) 是 (2) 否 nntt 请选择卡号: scanf(x); if(x2) w2=1;getchar(); else w2=0; while(w2=1); if(x=1)nntt请输入姓名:bbbbbbbbbbbbbbbbbbbb,m); strcpy(cardk.name,m);nntt请输入六位数密码:,p); strcpy(cardk.word,p); cardk.flag=1;nnntt*激 活
11、成 功! print_one(k);2、 登陆该卡验证是否激活void life() /*登陆*/ int k=-1;FILE *fp;r for(n=0;feof(fp);n+) fread(&cardn,sizeof(struct credicard),1,fp); if(n=0)nntt*请 先 制 卡*n elsennt请输入购物卡号码: k=search(h); if(k=-1)nnttt*该号码不存在!*n else if(cardk.flag=1)nntt*该卡已经激活!*n else huo(k);int search(char h20) int i,k=-1; if(strc
12、mp(cardi.ID,h)=0)k=i; return(k);3、进入该卡进行核对信息void enter() /*进入*/ if(cardk.flag=0)nntt*该卡还未激活,请先激活!*n else hedui(k);4、核对卡号密码void hedui(int k) /*验证核对*/ int c=0,w3=0; char p8; nntt*请输入密码: if(strcmp(cardk.word,p)!=0)nntt*密码不正确,请重新输入!*n c+; continue;nntt*密 码 正 确 !*n w3=1; menu1(k); while(w3=0&ctt| (1) 查 询
13、 |ntt| (2) 存 款 |ntt| (3) 消 费 |ntt| (4) 修 改 密 码 |ntt| (5) 返回主菜单 |n w4=1; else w4=0; while(w4=1);stat_one(k);deposit(k);fetch(k);change(k);menu();2.3 存款模块该模块的功能是在账户登录后,通过选择步骤进行对此卡进行此存款,最后以表格的形式将卡上的信息输出。void deposit(int k) float a=0.00;nntt请输入存款金额:ttbbbbbbbbbbb%fa); cardk.account+=a;nntt*存 款 成 功 !* print_one(k); 2.4 消费积分模块该模块的功能是使用该卡进行消费,最后以表格的形式将此卡现状输出到屏幕。【流程图】void fetch(int k) /*消费*积分*/ float b=0.00,jifen=0.00;nntt请输入消费金额:b); if(bcardk.account)nntt*余 额 不 足 !* cardk.account-=b; cardk.integal=b; cardk.jifen+=b;nntt*谢 谢 惠 顾 !2.5 查询账户相关信息模块该模块的功能是在户主登录后对账户的信息进行查询,并且可以根据需要进行密码修改。【选择程序】tt|-
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1