C语言 购物卡程序

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

C语言课程设计
院系:
姓名:
学号:
班号:
指导教师:
日期:
购物卡管理系统程序设计
一、题目要求:
设计购物卡管理系统,系统主要模块:
(1)实现系统内制卡、发卡功能;
(2)实现系统内账户及相关账户管理;
(3)实现卡交易和合法性检查;
(4)实现卡金融交易积分功能;
(5)实现卡报表功能;
(6)数据以文件形式存储。

【提示】
制卡:指申请一张购物卡,但还没有使用。

发卡:指该购物卡已经启用。

实现卡交易:指从卡中消费掉一定的金额
二、需求分析
根据题目要求,由于数据要以文件形式存储,所以应提供文件的输入、输出等操作;在程序中要实现银行卡的各项功能,应提供制卡、发卡、存款、消费、查询账户相关信息、查询账户交易记录、查询全部信息、退出程序等一系列操作;另外还应提供键盘式选择菜单实现功能选择。

三、总体设计
分析了整个系统之后,根据上面的系统需求分析,可以将这个系统的设计分为如下七大模块:制卡、发卡、存款、消费积分、查询账户相关信息、查询账户交易记录、查询全部信息
四、详细设计
1.主函数设计
主函数的设计比较简介,只包括一个主菜单函数,主要实现菜单功能,提供了菜单输入、模块选择、退出系统等模块的调用。

其中各功能模块用菜单方式选择。

【流程图】
【程序】
N
{
printf("\n\n\n\n\n\n\n\n\n");
printf("\t\t*********************购物卡管理系统************************\n");
printf("\n\n\n\t\t 按任意键进入............");
getchar();
menu();
}
函数开头有“文件包含”的预处理命令,所谓“文件包含”处理是指一个源文件可以将另外一个源文件的全部内容包含进来,即将另外的文件包含到本文件之中。

C语言提供了#include命令用来实现“文件包含”的操作。

在本程序中包含了一下头文件:"string.h"、"ctype.h"、"stdio.h",方便调用库函数实现某些功能。

在程序设计中,只使用一些基本类型(或称简单类型)的变量(如整型、实型、字符型变量等)和构造类型数据——数组,是远远不够的。

有时候需要将不同类型的数据组合成一个有机的整体,以便于引用。

这些组合在一个整体中的数据是相互联系的。

在这个程序中,定义了一个结构体数组来存放购物卡用户的各种信息,包括账户卡号、户主姓名、账户余额、账户状态、账户积分,结构体如下:
struct user
{
int num;/*账户号码*/
char name[20];/*户主名称*/
float surplus;/*账户余额*/
char state[2];/*账户状态,y:已启用,n:未启用*/
int point;/*账户积分*/
}u[100];
同时在各分函数中,定义了int、float、char等一系列变量类型,用来实现函数功能。

在主函数前面,要加上对各功能函数的声明,声明的作用是把函数的名字、函数的类型以及形参的类型、个数和顺序通知编译系统,以便在调用该函数时系统按此进行对照检查,例如函数名是否正确,实参与形参的类型和个数是否一致等。

主函数比较简单,但是函数的调用很多,所以,在程序的开头就加上了各函数的声明,如下:
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();/*给用户提示已有信息*/
实现菜单选择功能,使用的是switch语句,根据用户输入的菜单选项a,调用不同的函数实现各种功能:
{
case 1:c_c();break;/*制卡模块*/
case 2:s_u();break;/*发卡模块*/
case 3:in_m();break;/*存款模块*/
case 4:out_m();break;/*取款模块*/
case 5:c_i();break;/*查询账户相关信息模块*/
case 6:c_r();break;/*查询交易记录模块*/
case 7:check();break;/*查看所有信息模块*/
case 8:exit(0);break;/*退出模块*/
}
主菜单函数
[程序]
void menu()
{
int v,w1;
do
{
printf("\n\n\n\n");
printf("\t\t <________________________THE MENU_______________________>\n");
printf("\t\t|| (1) 制卡操作||\n");
printf("\t\t||------------------------------------------------------||\n");
printf("\t\t|| (2) 帐号激活||\n");
printf("\t\t||------------------------------------------------------||\n");
printf("\t\t|| (3) 帐户登陆||\n");
printf("\t\t||------------------------------------------------------||\n");
printf("\t\t|| (4) 报表操作||\n");
printf("\t\t||------------------------------------------------------||\n");
printf("\t\t|| (5) 退出||\n");
printf("\t\t||______________________________________________________||\n");
printf("\n\n\t\t 请选择操作(1--5):< >\b\b");
scanf("%d",&v);
if(v<1||v>5)
{
printf("\n\n\t\t**********输入有误 !************");
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、功能模块设计
2.1 制卡模块
1、制卡
【数据结构】
所输入的数据信息在磁盘上以文本文件的形式保存,一条记录对应一个购物卡,既符合习惯也方便信息管理。

【分析】
制卡时需要把开卡的户主的信息输入,包括卡号、姓名、初始金额、是否开始使用此卡,并且还需要输出其信息。

把购物卡的卡号、姓名、密码、存款金额、消费金额、积分数作为结构体成员,存放在结构体数组:
struct credicard /*定义信用卡结构体*/
{
int number;
char name[20];
char ID[20];
char word[8];
int flag;
float account;
int integal;
int jifen;
}card[M];
【流程图】
【程序】
void made() /*制卡操作*/
{
int i;
char h[20];
do
{
printf("\n\n\t请输入要申请的号码:<\t\t\t>\b\b\b\b\b\b\b");
scanf("%s",h);
if(strlen(h)!=6)
{
printf("\n\n\n\t\t***************输入有误,请重新输入****************\n\n");
continue;
}
for(i=0;i<n;i++)
if(strcmp(card[i].ID,h)==0)
{
printf("\n\n\t\t***********该号码已经存在,请重新输入************\n\n");
break;
}
}
while(((strlen(h))!=6)||strcmp(card[i].ID,h)==0);
card[n].number=n;
strcpy(card[n].name,"***");
strcpy(card[n].ID,h);
strcpy(card[n].word,"000000");
card[n].flag=0;
card[n].account=0.00;
card[n].integal=0;
printf("\n\n\n\t\t********************制卡成功!**********************\n\n");
print_one(n);
n++;
add();
menu();
}
2、显示卡的信息
【分析】
将刚制的卡的信息输出到屏幕。

【程序】
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|",
card[j].number,card[j].name,card[j].ID,card[j].flag,card[j].account,card[j].integal);
printf("\n|----|--------------------|--------------------|----|----------|----------|");
}
3、用文件的形式将卡保存
void add() /*写入文件*/
{
int i;
FILE *fp;
if((fp=fopen("score.txt","wb"))==NULL)
{
printf("\t\t Can not open the file \n");
return;
}
for(i=0;i<n;i++)
if(fwrite(&card[i],sizeof(struct credicard),1,fp)!=1)
{
printf("\t\t File write error \n");
return;
}
fclose(fp);
printf("\n\n\n\t\t************成功保存!!!************");
}
2.2 发卡模块
【分析】
该模块的功能是根据输入的卡号查找对应的记录,找到后可进行发卡,填写申请人的姓名、设置密码等操作,并决定是否激活。

最后登录此卡查看是否已激活,输出到屏幕。

【流程图】
N
1、首先输入卡号进行激活该卡操作:
【程序】
void huo(int k) /*激活操作*/
{
char m[20],p[8];
int x,w2;
do
{
printf("\n\n\t\t 是否激活该卡? (1) 是(2) 否\n");
printf("\n\t\t 请选择卡号:< >\b\b");
scanf("%d",&x);
if(x<1||x>2)
{w2=1;getchar();}
else w2=0;
}
while(w2==1);
if(x==1)
{
printf("\n\n\t\t请输入姓名:<\t\t\t>\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b");
scanf("%s",m);
strcpy(card[k].name,m);
printf("\n\n\t\t请输入六位数密码:< >\b\b\b\b\b\b\b");
scanf("%s",p);
strcpy(card[k].word,p);
card[k].flag=1;
printf("\n\n\n\t\t********************激活成功!**********************\n\n");
print_one(k);
add();
}
}
2、登陆该卡验证是否激活
【程序】
void life() /*登陆*/
{
int k=-1;
char h[20];
FILE *fp;
if((fp=fopen("score.txt","r"))==NULL)
{
printf("\t\t Can not open the file \n");
return;
}
for(n=0;!feof(fp);n++)
{
fread(&card[n],sizeof(struct credicard),1,fp);
}
if(n==0)
printf("\n\n\t\t****************请先制卡*********************\n");
else
{
printf("\n\n\t请输入购物卡号码:<\t\t\t>\b\b\b\b\b\b\b");
scanf("%s",h);
k=search(h);
if(k==-1)
printf("\n\n\t\t\t*****************该号码不存在!****************\n");
else
{
if(card[k].flag==1)
printf("\n\n\t\t****************该卡已经激活!*****************\n");
else huo(k);
}
}
menu();
}
int search(char h[20])
{
int i,k=-1;
for(i=0;i<n;i++)
if(strcmp(card[i].ID,h)==0)k=i;
return(k);
}
3、进入该卡进行核对信息
【程序】
void enter() /*进入*/
{
int k=-1;
char h[20];
if(n==0)
printf("\n\n\t\t****************请先制卡*********************\n");
else
{
printf("\n\n\t请输入购物卡号码:<\t\t\t>\b\b\b\b\b\b\b");
scanf("%s",h);
k=search(h);
if(k==-1)
printf("\n\n\t\t\t*****************该号码不存在!****************\n");
else
{
if(card[k].flag=0)
printf("\n\n\t\t************该卡还未激活,请先激活!************\n");
else
hedui(k);
}
}
menu();
}
4、核对卡号密码
【程序】
void hedui(int k) /*验证核对*/
{
int c=0,w3=0;
char p[8];
do
{
printf("\n\n\t\t*******请输入密码:< >\b\b\b\b\b\b\b");
scanf("%s",p);
if(strcmp(card[k].word,p)!=0)
{
printf("\n\n\t\t********密码不正确,请重新输入!**********\n");
c++;
continue;
}
else
{
printf("\n\n\t\t**********密码正确!***********\n");
w3=1;
menu1(k);
}
}
while(w3==0&&c<3);
}
5、核对户主信息并选择操作
【程序】
void menu1(int k) /*显示*/
{
int v,w4;
do
{
printf("\n\n\n");
printf("\t\t <_______________________THE MENU1_______________________>\n");
printf("\t\t|| (1) 查询||\n");
printf("\t\t||------------------------------------------------------||\n");
printf("\t\t|| (2) 存款||\n");
printf("\t\t||------------------------------------------------------||\n");
printf("\t\t|| (3) 消费||\n");
printf("\t\t||------------------------------------------------------||\n");
printf("\t\t|| (4) 修改密码||\n");
printf("\t\t||------------------------------------------------------||\n");
printf("\t\t|| (5) 返回主菜单||\n");
printf("\t\t||______________________________________________________||\n");
printf("\n\n\t\t 请选择操作(1--5):< >\b\b");
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();
}
}
2.3 存款模块
【分析】
该模块的功能是在账户登录后,通过选择步骤进行对此卡进行此存款,最后以表格的形式将卡上的信息输出。

【流程图】
【程序】
void deposit(int k)
{
float a=0.00;
printf("\n\n\t\t请输入存款金额:<\t\t>\b\b\b\b\b\b\b\b\b\b\b");
scanf("%f",&a);
card[k].account+=a;
printf("\n\n\t\t**********存款成功!***********");
print_one(k);
add();
menu1(k);
}
2.4 消费积分模块
【分析】
该模块的功能是使用该卡进行消费,最后以表格的形式将此卡现状输出到屏幕。

【流程图】Array
【程序】
void fetch(int k) /*消费*积分*/
{
float b=0.00,jifen=0.00;
printf("\n\n\t\t请输入消费金额:<\t\t>\b\b\b\b\b\b\b\b\b\b\b");
scanf("%f",&b);
if(b>card[k].account)
printf("\n\n\t\t**********余额不足!*************");
else
{
card[k].account-=b;
card[k].integal=b;
card[k].jifen+=b;
printf("\n\n\t\t**********谢谢惠顾!***********");
print_one(k);
add();
}
menu1(k);
}
2.5 查询账户相关信息模块
【分析】
该模块的功能是在户主登录后对账户的信息进行查询,并且可以根据需要进行密码修改。

【选择程序】
void menu1(int k) /*显示*/
{
int v,w4;
do
{
printf("\n\n\n");
printf("\t\t <_______________________THE MENU1_______________________>\n");
printf("\t\t|| (1) 查询||\n");
printf("\t\t||------------------------------------------------------||\n");
printf("\t\t|| (2) 存款||\n");
printf("\t\t||------------------------------------------------------||\n");
printf("\t\t|| (3) 消费||\n");
printf("\t\t||------------------------------------------------------||\n");
printf("\t\t|| (4) 修改密码||\n");
printf("\t\t||------------------------------------------------------||\n");
printf("\t\t|| (5) 返回主菜单||\n");
printf("\t\t||______________________________________________________||\n");
printf("\n\n\t\t 请选择操作(1--5):< >\b\b");
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("\n\n\t\t*************操作成功!***************");
print_one(k);
menu1(k);
}
【密码修改程序】
void change(int k) /*修改密码*/
{
char a[8],b[8];
printf("\n\n\t\t请输入新六位数密码:< >\b\b\b\b\b\b\b");
scanf("%s",a);
printf("\n\t\t请再次输入新六位数密码:< >\b\b\b\b\b\b\b");
scanf("%s",b);
if(strcmp(a,b)==0)
{
printf("\n\n\t\t**********密码修改成功!*************");
add();
}
else
printf("\n\n\t\t两次密码输入不一致,密码修改失败!");
menu1(k);
}
2.7报表模块
【分析】
该模块的功能是通过报表的形式对所有账户的信息进行查询。

【流程图】
【程序】
void browse()
{
int i;
FILE *fp;
if((fp=fopen("score.txt","r"))==NULL)
{
printf("\t\t Can not open the file \n");
return;
}
for(n=0;!feof(fp);n++)
{
fread(&card[n],sizeof(struct credicard),1,fp);
}
if(n==0)
printf("\n\n\t\t**********无记录,请先制卡!***********");
else
{
printf("\n\n\t\t*************操作成功!**************\n");
printf("\n|----|--------------------|--------------|----|----------|----------|-------|");
printf("\n|NO. | 姓名| 卡号|flag| account | integal | jifen |");
printf("\n|----|--------------------|--------------|----|----------|----------|-------|");
for(i=0;i<n;i++)
printf("\n|%4d|%20s|%14s|%4d|%10.2f|%10d|%7d|",
card[i].number,card[i].name,card[i].ID,card[i].flag,card[i].account,card[i].integal,card[i].jifen);
printf("\n|----|--------------------|--------------|----|----------|----------|-------|");
}
menu();
}
3、公共函数设计
返回模块,即在完成一项命令之后,可以选择返回主菜单或者是退出
程序。

【流程图】
五、上级操作
1、主菜单
N
2、制卡操作
3、发卡操作
4、存款模块
5、消费积分模块
6、查询模块
7、报表模块
六、总结
经过一周的实习,基本掌握了简单程序的编写方法和编程的基本流程,学会使用流程图辅助程序设计。

经过连日的奋斗,终于完成了这个购物卡管理系统的设计制作,给予每一个用户清晰明了的界面和全面的信息,方便每一位用户的操作,鉴于找一点,我添加了一个函数来实现查询全部信息的功能,使程序更加完善。

虽然过程有许多困难,但在老师和同学的帮助下解决了。

毋庸置疑,学习的过程就是寻找错误和改正错误的过程,在这次实习中,我发现了很多自己编程方面的不足,也遇到了很多的困难,在这次C语言课程设计实习中,我充分的利用了以前学习的知识,更加系统地理解和掌握C语言的基本概念、语言特点和编程技巧,利用系统提供的标准函数和自定义函数进行程序设计,培养了利用C语言设计综合程序的能力。

虽然我们学机械的对这方面要求不是很高,但至少自己又掌握了一些知识,经过这一星期的实习,对c语言的认识更深了一步。

【源程序】
#include<stdio.h>
#include<ctype.h> /*调用字符函数*/
#include<stdlib.h>
#include<conio.h> /*通用输入输出库*/
#include<string.h>
#define M 1000
void menu();
void made();
void add();
void life();
void enter();
void browse();
void huo(int k);
void hedui(int k);
void menu1(int k);
void fetch(int k);
void change(int k);
void deposit(int k);
void stat_one(int k);
void print_one(int j);
int search(char h[20]);
int n=0;
struct credicard /*定义信用卡结构体*/
{
int number;
char name[20];
char ID[20];
char word[8];
int flag;
float account;
int integal;
int jifen;
}card[M];
void menu() /*主菜单*/
{
int v,w1;
do
{
printf("\n\n\n\n");
printf("\t\t <________________________THE MENU_______________________>\n");
printf("\t\t|| (1) 制卡操作||\n");
printf("\t\t||------------------------------------------------------||\n");
printf("\t\t|| (2) 帐号激活||\n");
printf("\t\t||------------------------------------------------------||\n");
printf("\t\t|| (3) 帐户登陆||\n");
printf("\t\t||------------------------------------------------------||\n");
printf("\t\t|| (4) 报表操作||\n");
printf("\t\t||------------------------------------------------------||\n");
printf("\t\t|| (5) 退出||\n");
printf("\t\t||______________________________________________________||\n");
printf("\n\n\t\t 请选择操作(1--5):< >\b\b");
scanf("%d",&v);
if(v<1||v>5)
{
printf("\n\n\t\t**********输入有误!************");
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); /*退出*/
}
}
void main() /*主菜单*/
{
printf("\n\n\n\n\n\n\n\n\n");
printf("\t\t*********************购物卡管理系统************************\n");
printf("\n\n\n\t\t 按任意键进入............");
getchar();
menu();
}
void made() /*制卡操作*/
{
int i;
char h[20];
do
{
printf("\n\n\t请输入要申请的号码:<\t\t\t>\b\b\b\b\b\b\b");
scanf("%s",h);
if(strlen(h)!=6)
{
printf("\n\n\n\t\t***************输入有误,请重新输入****************\n\n");
continue;
}
for(i=0;i<n;i++)
if(strcmp(card[i].ID,h)==0)
{
printf("\n\n\t\t***********该号码已经存在,请重新输入************\n\n");
break;
}
}
while(((strlen(h))!=6)||strcmp(card[i].ID,h)==0);
card[n].number=n;
strcpy(card[n].name,"***");
strcpy(card[n].ID,h);
strcpy(card[n].word,"000000");
card[n].flag=0;
card[n].account=0.00;
card[n].integal=0;
printf("\n\n\n\t\t********************制卡成功!**********************\n\n");
print_one(n);
add();
menu();
}
void print_one(int j) /*显示消息*/
{
printf("\n|----|--------------------|--------------|----|----------|----------|-------|");
printf("\n|NO. | name | ID |flag| account | integal | jifen |");
printf("\n|----|--------------------|--------------|----|----------|----------|-------|");
printf("\n|%4d|%20s|%14s|%4d|%10.2f|%10d|%7d|",
card[j].number,card[j].name,card[j].ID,card[j].flag,card[j].account,card[j].integal,card[j].jifen);
printf("\n|----|--------------------|--------------|----|----------|----------|-------|");
}
void add() /*写入文件*/
{
int i;
FILE *fp;
if((fp=fopen("score.txt","wb"))==NULL)
{
printf("\t\t Can not open the file \n");
return;
}
for(i=0;i<n;i++)
if(fwrite(&card[i],sizeof(struct credicard),1,fp)!=1)
{
printf("\t\t File write error \n");
return;
}
fclose(fp);
printf("\n\n\n\t\t************成功保存!!!************");
}
void huo(int k) /*激活操作*/
{
char m[20],p[8];
int x,w2;
{
printf("\n\n\t\t 是否激活该卡? (1) 是(2) 否\n");
printf("\n\t\t 请选择:< >\b\b");
scanf("%d",&x);
if(x<1||x>2)
{w2=1;getchar();}
else w2=0;
}
while(w2==1);
if(x==1)
{
printf("\n\n\t\t请输入姓名:<\t\t\t>\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b");
scanf("%s",m);
strcpy(card[k].name,m);
printf("\n\n\t\t请输入六位数密码:< >\b\b\b\b\b\b\b");
scanf("%s",p);
strcpy(card[k].word,p);
card[k].flag=1;
printf("\n\n\n\t\t********************激活成功!**********************\n\n");
print_one(k);
add();
}
}
void life() /*激活*/
{
int k=-1;
char h[20];
FILE *fp;
if((fp=fopen("score.txt","r"))==NULL)
{
printf("\t\t Can not open the file \n");
return;
}
for(n=0;!feof(fp);n++)
{
fread(&card[n],sizeof(struct credicard),1,fp);
}
if(n==0)
printf("\n\n\t\t****************请先制卡*********************\n");
else
printf("\n\n\t请输入购物卡号码:<\t\t\t>\b\b\b\b\b\b\b");
scanf("%s",h);
k=search(h);
if(k==-1)
printf("\n\n\t\t\t*****************该号码不存在!****************\n");
else
{
if(card[k].flag==1)
printf("\n\n\t\t****************该卡已经激活!*****************\n");
else huo(k);
}
}
menu();
}
int search(char h[20]) /*查找*/
{
int i,k=-1;
for(i=0;i<n;i++)
if(strcmp(card[i].ID,h)==0)k=i;
return(k);
}
void enter() /*登录菜单*/
{
int k=-1;
char h[20];
FILE *fp;
if((fp=fopen("score.txt","r"))==NULL)
{
printf("\t\t Can not open the file \n");
return;
}
for(n=0;!feof(fp);n++)
{
fread(&card[n],sizeof(struct credicard),1,fp);
}
if(n==0)
printf("\n\n\t\t****************请先制卡*********************\n");
else
{
printf("\n\n\t请输入购物卡号码:<\t\t\t>\b\b\b\b\b\b\b");
scanf("%s",h);
k=search(h);
if(k==-1)
printf("\n\n\t\t\t*****************该号码不存在!****************\n");
else
{
if(card[k].flag=0)
printf("\n\n\t\t************该卡还未激活,请先激活!************\n");
else
hedui(k);
}
}
menu();
}
void hedui(int k) /*验证核对*/
{
int c=0,w3=0;
char p[8];
do
{
printf("\n\n\t\t*******请输入密码:< >\b\b\b\b\b\b\b");
scanf("%s",p);
if(strcmp(card[k].word,p)!=0)
{
printf("\n\n\t\t********密码不正确,请重新输入!**********\n");
c++;
continue;
}
else
{
printf("\n\n\t\t**********密码正确!***********\n");
w3=1;
menu1(k);
}
}
while(w3==0&&c<3);
}
void menu1(int k) /*子菜单*/
{
int v,w4;
do
{
printf("\n\n\n");
printf("\t\t <_______________________THE MENU1_______________________>\n");
printf("\t\t|| (1) 查询||\n");
printf("\t\t||------------------------------------------------------||\n");
printf("\t\t|| (2) 存款||\n");
printf("\t\t||------------------------------------------------------||\n");
printf("\t\t|| (3) 消费||\n");
printf("\t\t||------------------------------------------------------||\n");
printf("\t\t|| (4) 修改密码||\n");
printf("\t\t||------------------------------------------------------||\n");
printf("\t\t|| (5) 返回主菜单||\n");
printf("\t\t||______________________________________________________||\n");
printf("\n\n\t\t 请选择操作(1--5):< >\b\b");
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("\n\n\t\t*************操作成功!***************");
print_one(k);
menu1(k);
}
void deposit(int k) /*存款*/
{
float a=0.00,jifen=0.00;
printf("\n\n\t\t请输入存款金额:<\t\t>\b\b\b\b\b\b\b\b\b\b\b");
scanf("%f",&a);
card[k].account+=a;
printf("\n\n\t\t**********存款成功!***********");
print_one(k);
add();
menu1(k);
}
void fetch(int k) /*消费*/
{
float b=0.00,jifen=0.00;
printf("\n\n\t\t请输入消费金额:<\t\t>\b\b\b\b\b\b\b\b\b\b\b");
scanf("%f",&b);
if(b>card[k].account)
printf("\n\n\t\t**********余额不足!*************");
else
{
card[k].account-=b;
card[k].integal=b;
card[k].jifen+=b;
printf("\n\n\t\t**********谢谢惠顾!***********");
print_one(k);
add();
}
menu1(k);
}
void change(int k) /*修改密码*/
{
char a[8],b[8];
printf("\n\n\t\t请输入新六位数密码:< >\b\b\b\b\b\b\b");
scanf("%s",a);
printf("\n\t\t请再次输入新六位数密码:< >\b\b\b\b\b\b\b");
scanf("%s",b);
if(strcmp(a,b)==0)
{
printf("\n\n\t\t**********密码修改成功!*************");
add();
}
else
printf("\n\n\t\t两次密码输入不一致,密码修改失败!");
menu1(k);
}
void browse() /*报表*/
{
int i;
FILE *fp;
if((fp=fopen("score.txt","r"))==NULL)
{
printf("\t\t Can not open the file \n");
return;
}
for(n=0;!feof(fp);n++)
{
fread(&card[n],sizeof(struct credicard),1,fp);
}
if(n==0)
printf("\n\n\t\t**********无记录,请先制卡!***********");
else
{
printf("\n\n\t\t*************操作成功!**************\n");
printf("\n|----|--------------------|--------------|----|----------|----------|-------|");
printf("\n|NO. | 姓名| 卡号|flag| account | integal | jifen |");
printf("\n|----|--------------------|--------------|----|----------|----------|-------|");
for(i=0;i<n-1;i++)
printf("\n|%4d|%20s|%14s|%4d|%10.2f|%10d|%7d|",
card[i].number,card[i].name,card[i].ID,card[i].flag,card[i].account,card[i].integal,card[i].jifen);
printf("\n|----|--------------------|--------------|----|----------|----------|-------|");
}
menu();
}。

相关文档
最新文档