最开始运行程序的时候,要先建立文件,就是要选菜单1.
#include <stdio.h>
struct Card
{
int ID//卡号
char name[20]
double value//金额
int flag//挂失信息
}
card[1000]//假设最多1000张
int counts//当前已有饭卡数量
FILE * fp
int menu()
{
int choose
printf("|-------------------------------|\n")
printf("| 请输入选项编号(0--7) |\n")
printf("|-------------------------------|\n")
printf("| 0——退出 |\n")
printf("| 1——建立饭卡文件 |\n")
printf("| 2——买饭 |\n")
printf("| 3——续钱 |\n")
printf("| 4——添加新饭卡 |\n")
printf("| 5——注销旧饭卡 |\n")
printf("| 6——设置与解除挂失 |\n")
printf("| 7——显示全部饭卡信息 |\n")
printf("|-------------------------------|\n")
scanf("%d",&choose)
return choose
}
void write_file()
{
int i
FILE * f
f=fopen("card.dat","w")
for(i=0i<countsi++)
fprintf(f,"%d %s %lf %d\n",card[i].ID,card[i].name,card[i].value,card[i].flag)
fclose(f)
}
void create_file() //如果已经存在了card.dat那么就打开该文件
{
int i=0
fp=fopen("card.dat","r")
if(fp!=NULL) //如果已经存在
{
printf("文件已经存在!\n")
while(fscanf(fp,"%d%s%lf%d",&card[i].ID,card[i].name,&card[i].value,&card[i].flag)!=EOF)
i++
counts=i
fclose(fp)
return
}
fp=fopen("card.dat","w")
printf("输入卡号,姓名,金额,挂失信息(0/1)(卡号-1表示输入结束!):\n")
while(scanf("%d%s%lf%d",&card[i].ID,card[i].name,&card[i].value,&card[i].flag),card[i].ID!=-1)
i++
counts=i
fclose(fp)
write_file()
}
void buy1(int card_id,double cost)
{
int i
for(i=0i<countsi++)
{
if(card[i].ID==card_id)
{
if(card[i].flag==1)
{
printf("本卡已挂失!\n")
return
}
if(card[i].value<5)
{
printf("金额不足!\n")
return
}
printf("%lf\n",card[i].value)
card[i].value-=cost
printf("%lf\n",card[i].value)
}
}
printf("非法卡!\n")
}
void buy()
{
int id
double v
printf("输入卡号和消费金额:\n")
scanf("%d%lf",&id,&v)
buy1(id,v)
}
void add_value()
{
int id,i
double v
printf("输入卡号和续钱金额:\n")
scanf("%d%lf",&id,&v)
for(i=0i<countsi++)
{
if(card[i].ID==id)
{
printf("%lf\n",card[i].value)
card[i].value+=v
printf("%lf\n",card[i].value)
printf("ok!\n")
return
}
}
printf("error!\n")
}
void add_card()
{
int i=counts
printf("输入卡号,姓名,金额,挂失信息(0/1)(卡号-1表示输入结束!):\n")
while(scanf("%d%s%lf%d",&card[i].ID,card[i].name,&card[i].value,&card[i].flag),card[i].ID!=-1)
i++
counts=i
}
void del_card()
{
int id
int i,j
printf("输入要注销的卡号:\n")
scanf("%d",&id)
for(i=0i<countsi++)
{
if(card[i].ID==id)
{
for(j=ij<counts-1j++)
card[j]=card[j+1]
printf("注销成功!\n")
return
}
}
}
void set_flag()
{
int id,i,f
printf("输入卡号和挂失信息(1:挂失,0:解除挂失)\n")
scanf("%d%d",&id,&f)
for(i=0i<countsi++)
{
if(card[i].ID==id)
{
card[i].flag=f
printf("设置完成 !\n")
break
}
}
}
void output()
{
int i
printf("%6s%11s%10s%6s\n","卡号","姓名","金额","挂失")
for(i=0i<countsi++)
printf("%6d%11s%10.3lf%2d\n",card[i].ID,card[i].name,card[i].value,card[i].flag)
}
void main()
{
int m
while(m=menu(),m)
{
switch(m)
{
case 1:
create_file()
break
case 2:
buy()
break
case 3:
add_value()
break
case 4:
add_card()
break
case 5:
del_card()
break
case 6:
set_flag()
break
case 7:
output()
break
default:
printf("输入有误,重新输入!\n")
}
}
write_file()//退出系统的时候,把数据保存到文件
}
定义struct Card
{
int ID//卡号
char name[20]//姓名
double value//金额
int flag//挂失信息
} //特别注意,这里的分号不可以少
以后,struct Card就是和int,char一样是一种类型了
然后可以定义变量
struct Card card
card.ID,card.flag等等就可以用了
如果是在C++中
struct Card card和Card card效果一样
但是C中,定义变量的时候,struct不可以省略,如果要省略的话,在定义这个struct的时候用typedef定义一个别名
typedef struct Card
{
..
}Card//Card变成struct Card的别名
然后可以使用struct Card card或者Card card来定义变量
struct Card
{
int ID//卡号
char name[20]//姓名
double value//金额
int flag//挂失信息
}card[1000]表示定义一个card数组,该包含了1000个Card变量
就变成了card[0].ID,card[1].name这样了
假如struct Card card
struct Card *p=&card
当变量是指针的时候,用p->ID,p->name //指针的时候这种更常用
等价于(*p).ID,(*p).name
#include "stdio.h"static int num =1
static int name =2
static int type =3
static int m
static void Sel()
static void Sel1()
static void Dis()
static void Dis1()
static void Sel()
{
/*这里读者号,姓名和读者类型默认为1 2 3*/
scanf("%d", & num)
scanf("%d", & name)
scanf("%d", & type)
if (num == 1)
{
if (name == 2)
{
if (type == 3)
{
Dis1()
Sel1()
}
}
}
else
{
printf("你输入的信息有误。")
printf("请输入读者号,姓名和读者类型,中间用空格隔开:\n")
}
}
/*输入信息提示界面*/
static void Dis()
{
Sel()
}
/*功能选择界面*/
static void Dis1()
{
printf("+++ 服务 +++\n")
printf("+++1.挂失 +++\n")
printf("+++2.功能2+++\n")
}
/*读者信息输入和验证功能*/
/*挂失功能*/
static void Sel1()
{
int c
scanf("%d", & m)
if (m == 1)
{
printf("确定要挂失吗?\r\n 1.确定 2.取消\n")
scanf("%d", &c)
if (c == 1)
{
printf("挂失成功!")
}
else
{
Dis1()
Sel1()
}
}
}
int main(void)
{
printf("请输入读者号,姓名和读者类型,中间用空格隔开:\n")
Sel()
return 0
}