资源描述
购物卡管理系统
(一)系统主要功效模块:
(1)实现系统内制卡、发卡功效。
(2)实现系统内购物卡帐户及相关帐户管理。
(3)实现购物卡交易和正当性检验。
(4)实现购物卡交易积分功效。
(5)实现购物卡报表功效。
(6)数据以文件形式存放。
提醒:
制卡:指申请一个购物卡,但还没有使用。
发卡:指该卡已经起用。
实现卡交易:指从卡中消费掉一定金额。
(二)题目及要求分析:
依照题目要求,系统应该实现以下功效:
(1)制卡:主要是新建出一张购物卡,并输入了用户部分信息,如姓名、密码等,但卡没有激活,依然不可使用。
(2)发卡:激活新建购物卡,用户能够使用卡进行各项活动。
(3)消费:进入帐户后,取走少于帐户金额钱款进行消费,并在帐户少减
少对应金额,增加对应积分。
(4)存款:进入帐户后,在金额项加上用户要存入钱款。
(5)报表:显示用户购物卡上统计全部信息,除密码外。
(6)存放:购物卡内信息以文件形式存放。
(7)退出:从系统中退出。
(8)菜单:提供良好界面,方便用户操作。
代码:
#include <stdio.h>
#include<ctype.h> /*调用字符函数*/
#include<stdlib.h>
#include<conio.h> /*通用输入输出库*/
#include<string.h>
#include<windows.h>
int flag=5;
struct card
{
char name[20];
char number[20];
float money;
char key[10];
float jifen;
float mid;
int power;
struct card *next;
};
save(struct card *head);
void list();
void jihuo();
struct card *chaxun();
save(struct card *head)
{
FILE *fp;
struct card *q;
q=head;
if((fp=fopen("e:\\123.txt","ab+"))==NULL)
{
printf("无法打开\n");
exit(0);
}
while(q!=NULL)
{
if(fwrite(q,sizeof(struct card),1,fp)!=1)
{
printf("文件写入错误!");
fclose(fp);
return (head);
}
q=q->next;
}
fclose(fp);
}
struct card *save1(struct card *head)
{
FILE *fp;
struct card *q;
q=head;
if((fp=fopen("e:\\123.txt","wb"))==NULL)
{
printf("无法打开\n");
exit(0);
}
while(q!=NULL)
{
if(fwrite(q,sizeof(struct card),1,fp)!=1)
{
printf("文件写入错误!");
fclose(fp);
return (head);
}
q=q->next;
}
fclose(fp);
}
struct card *duqu()//读取数据
{
struct card *head = NULL;
struct card *p1, *p2;
FILE *fp;
if((fp=fopen("e:\\123.txt","rb+"))==NULL)
{
printf("打开文件犯错\n");
exit(0);
}
while(!feof(fp))
{
if((p1=(struct card*)malloc(sizeof(struct card)))==NULL)
{
printf("something is wrong!\n");
fclose(fp);
exit(0);
}
if(fread(p1,sizeof(struct card),1,fp)!=1)
{
free(p1);
break;
}
if(head==NULL)
head=p2=p1;
else
{
p2->next=p1;
p2=p1;
}
}
fclose(fp);
return (head);
}
struct card *createlist()
{
struct card *head,*p,*q;
int i;
char num[20];
head=(struct card*)malloc(sizeof(struct card));
head->next=NULL;
head->money=0;
head->jifen=0;
system("cls");
printf("\n\t\t********************注册购物卡*******************\n\n\n");
do
{
printf("\n\n\t请输入要注册卡号(六位数): ");
scanf("%s",head->number);
if(strlen(head->number)!=6)
{
system("cls");
printf("\n\n\n\n\n\n\n\n\n\n\t\t\t对不起您输入有误,请重新输入!\n\n");
Sleep(1000);
system("cls");
printf("\n\t\t********************注册购物卡*******************\n\n\n");
continue;
}
printf("\n\n\t请输入您名字: ");
scanf("%s",head->name);
printf("\n\n\t请输入您密码: ");
scanf("%s",head->key);
head->power=99;
}
while(strlen(head->number)!=6);
p=head;
system("cls");
printf("\n\t\t********************注册购物卡*******************\n\n\n");
printf("您购物卡为:\n\n");
printf("\n\t姓 名 卡 号 余 额 积分 \n\n");
printf("\t%2s %16s %13.2f %13.2f",p->name,p->number,p->money,p->jifen);
getche();
p->next=NULL;
save(head);
printf("\n\n\n\n\n\n\t\t\t");
printf("购物卡注册成功!\n\n\n\n\t\t\t\t按任意键返回.....");
getche();
}
void cost(struct card *q)
{
struct card *p,*a;
p=duqu();
a=p;
while(strcmp(q->number,p->number)!=0)
{
p=p->next;
}
system("cls");
printf("\n\t\t********************账户消费*******************\n\n\n");
printf("\n\n\n\n\n\n");
printf("\t\t\t请输入您消费金额:");
scanf("%f",&p->mid);
(p->money)=(p->money)-(p->mid);
(p->jifen)=(p->jifen)+(p->mid);
printf("\n\n\t\t\t您余额为:%.2f",p->money);
printf("\n\n\n\n\n\t\t\t显示完成,按任意键返回子菜单.....");
getche();
p=a;
save1(p);
}
void cunkuan(struct card *q)
{
struct card *p,*a;
p=duqu();
a=p;
while(strcmp(q->number,p->number)!=0)
{
p=p->next;
}
system("cls");
printf("\n\t\t********************账户存款*******************\n\n\n");
printf("\n\n\n\n\n\n");
printf("\t\t\t请输入您存款金额:");
scanf("%f",&p->mid);
(p->money)=(p->mid)+(p->money);
printf("\n\n\t\t\t您余额为:%.2f",p->money);
printf("\n\n\n\n\n\t\t\t显示完成,按任意键返回子菜单.....");
getche();
p=a;
save1(p);
}
void xiugai(struct card *q)
{
char key[10],num[10];
struct card *p,*a;
p=duqu();
a=p;
while(strcmp(q->number,p->number)!=0)
{
p=p->next;
}
system("cls");
printf("\n\t\t********************修改账户密码*******************\n\n\n");
printf("\n\n\n\n");
printf("\t\t\t请输入您新密码:");
scanf("%s",num);
printf("\n\n\t\t\t请再次输入您密码:");
scanf("%s",key);
if(strcmp(key,num)!=0)
{
system("cls");
printf("\n\t\t********************修改账户密码*******************\n\n\n");
printf("\n\n\n\n\n\t\t对不起,两次输入密码不一样,修改密码失败!");
Sleep(1000);
system("cls");
}
if(strcmp(key,num)==0)
{
system("cls");
printf("\n\t\t********************修改账户密码*******************\n\n\n");
strcpy(p->key,num);
printf("\n\n\n\n\n\n\t\t\t修改密码成功!");
Sleep(1000);
p=a;
save1(p);
}
}
void chaxun2(struct card *q)
{
struct card *p,*a;
p=duqu();
a=p;
while(strcmp(q->number,p->number)!=0)
{
p=p->next;
}
system("cls");
printf("\n\t\t********************账户查询*******************\n\n\n");
printf("\t您账户信息为:\n\n\n");
printf("\n\t\t姓 名 卡 号 余 额 积分 \n\n");
printf("\t\t%2s %16s %13.2f %13.2f",p->name,p->number,p->money,p->jifen);
printf("\n");
getch();
}
struct card *chaxun()
{
int b,i=0;
int flag=9;
struct card *head;
char num[10],key[10];
struct card *p,*head1;
head1=duqu();
p=head1;
system("cls");
printf("\n\t\t********************账户登陆*******************\n\n\n");
printf("\n\n\t请输入您卡号(六位数): ");
scanf("%s",num);
while(p!=NULL)
{
if(strcmp(num,p->number)!=0)
{
p=p->next;
if(p==NULL)
{
system("cls");
printf("\n\t\t********************账户登陆*******************\n\n\n");
printf("\n\n\n\n\n\n\n\t\t\t没有该卡号信息,请重新输入!\n\n");
Sleep(1000);
system("cls");
printf("\n\t\t********************账户登陆*******************\n\n\n");
printf("\n\n\t请重新输入卡号(六位数): ");
scanf("%s",num);
p=head1;
}
continue;
}
if((p->power)==99)
{
system("cls");
printf("\n\t\t********************账户登陆*******************\n\n\n");
printf("\n\n\n\n\n\n\n\t\t\t对不起,该卡未激活,请先激活!");
getche();
system("cls");
main();
}
if(p->power==100)
{
while(flag==9)
{
printf("\n\n\t请输入密码(六位数): ");
scanf("%s",key);
if(strcmp(key,p->key)==0)
{
flag=10;
}
if(strcmp(key,p->key)!=0)
{
system("cls");
printf("\n\t\t********************账户登陆*******************\n\n\n");
printf("\n\n\n\n\n\n\n\t\t\t对不起,密码输入错误%d次!",i+1);
flag=9;
i++;
if(i==3)
{
system("cls");
printf("\n\n\n\n\n\n\n\t\t\t密码输入错误三次,系统自动返回主菜单!");
Sleep();
system("cls");
return;
}
}
}
if(flag==10)
break;
}
}
while(1)
{
system("cls");
printf(" *****************************************\n");
printf(" * *\n");
printf(" * 账户查询 *\n");
printf(" * *\n");
printf(" * —————————————————— *\n");
printf(" * *\n");
printf(" * 1:查询 *\n");
printf(" * *\n");
printf(" * 2:存款 *\n");
printf(" * *\n");
printf(" * 3:消费 *\n");
printf(" * *\n");
printf(" * 4:修改密码 *\n");
printf(" * *\n");
printf(" * 5:返回主菜单 *\n");
printf(" * *\n");
printf(" *****************************************\n");
printf("\n");
printf("\t\t请选择操作: ");
scanf("%d",&b);
switch(b)
{
case 1:chaxun2(p); break;
case 2:cunkuan(p);break;
case 3:cost(p);break;
case 4:xiugai(p);break;
case 5:main();
default:printf("对不起,您输入有误,请重新输入!");
}
}
}
void jihuo()
{
char x;
char num[10];
struct card *p,*head1;
head1=duqu();
p=head1;
system("cls");
printf("\n\t\t********************激活购物卡*******************\n\n\n");
printf("\t请输入您要激活卡号(六位数): ");
scanf("%s",num);
while(p!=NULL)
{
if(strcmp(num,p->number)!=0)
{
p=p->next;
}
else
break;
while(p==NULL)
{
system("cls");
printf("\n\t\t********************激活购物卡*******************\n\n\n");
printf("\n\n\n\n\n\n\t\t\t没有该卡号信息,请重新输入卡号!\n\n");
Sleep(1000);
system("cls");
printf("\n\t\t********************激活购物卡*******************\n\n\n");
printf("\t请重新输入您申请卡号(六位数): ");
scanf("%s",num);
p=head1;
}
}
system("cls");
printf("\n\t\t********************激活购物卡*******************\n\n\n");
printf("您购物卡为:\n\n");
printf("\n\t姓 名 卡 号 余 额 积分 \n\n");
printf("\t%2s %16s %13.2f %13.2f",p->name,p->number,p->money,p->jifen);
printf("\n\n\n\n\n\t\t\t确认激活您购物卡? \n\n\t\t\t <1> 是 <2> 否");
printf("\n\n\t\t\t请选择:");
scanf(" %c",&x);
switch(x)
{
case '1':
system("cls");
printf("\n\t\t********************激活购物卡*******************\n\n\n");
p->power=100;
save1(head1);
printf("\n\n\n\n\n\n\n\t\t\t");
printf("激活成功,按任意键返回主菜单.....");
getche();
break;
case '2':
system("cls");
printf("\n\t\t********************激活购物卡*******************\n\n\n");
printf("\n\n\n\n\n\n\n\t\t\t");
printf("您已放弃激活,按任意键返回主菜单.....");
getche();
break;
default:
system("cls");
printf("\n\t\t********************激活购物卡*******************\n\n\n");
printf("\n\n\n\n\n\n\n\t\t\t");
printf("对不起,您输入有误,请重新输入!");
Sleep();
}
}
void list()
{
struct card *p1;
p1=duqu();
system("cls");
printf("\n\t\t********************显示购物卡*******************\n\n\n");
printf("全部购物卡信息为:\n\n\n");
printf("\n\t姓 名 卡 号 余 额 积分 \n\n");
while(p1!=NULL)
{
printf("\t %2s %16s %14.2f %14.2f",p1->name,p1->number,p1->money,p1->jifen);
printf("\n");
p1=p1->next;
}
}
main()
{
int a;
struct *head;
printf("\n\n\n\n\n\n\n\n\t\t\t\t");
printf(" 欢迎使用");
printf("\n\n");
printf("\t ******************购 物 卡 管 理 系 统*******************\n");
Sleep(1000);
system("cls");
while(1)
{
printf("\n");
printf(" *****************************************\n");
printf(" * 购 物 卡 管 理 系 统 *\n");
printf(" *****************************************\n");
printf(" * 菜 单 *\n");
printf(" * *\n");
printf(" * 1:注册 *\n");
printf(" * *\n");
printf(" * 2:激活 *\n");
printf(" * *\n");
printf(" * 3:帐户登录 *\n");
printf(" * *\n");
printf(" * 4:名单 *\n");
printf(" * *\n");
printf(" * 0:退出系统 *\n");
printf(" * *\n");
printf(" *****************************************\n");
printf("\n");
printf("\t\t请选择操作: ");
scanf("%d",&a);
switch(a)
{
case 1:createlist(head);
system("cls");break;
case 2:jihuo();system("cls");break;
case 3:chaxun();break;
case 4:
list();
printf("\n\n\n\n\t\t\t显示完成,按任意键返回主菜单....");
getche();
system("cls");
break;
case 0:
system("cls");
printf("\n\n\n\n\n\n\n\n\n\n\n\t\t\t");
printf(" 感激您使用,再见!");
printf("\n\n\n\n\n\t\t\t\t\t");
Sleep(1000);
exit(0);
default:system("cls");
printf("\n\n\n\t\t\t对不起!您输入有误!请重新输入。");
printf("\n");
}
}
}
展开阅读全文