请求帮助~遇到个小问题
在网上有个饭卡管理系统的代码~ 部分修改后可以用 但是就是有一点 饭卡注销这个功能无法实现 能不能我我改改 谢谢
功能要求,循环显示如下图所示的主菜单:
选择1:在d:\kcsj下建立名为data.txt的文件,并在其中添加若干人的饭卡号,姓名、金额、挂失信息,要求饭卡号是唯一的;
选择2:要求用户输入饭卡号、饭费,然后系统自动从该人的饭卡中减去饭钱,并分别显示买饭前后的金额,如果原来饭卡中的余额不足5元,则不能买饭,而且显示“余额不够,请续钱!”,如果挂失信息为真,则显示“本卡已冻结!”;
选择3:要求用户输入饭卡号、续钱额,续钱完成后分别显示续钱前后的金额;
选择4:添加新饭卡,这时要求新饭卡号和已有的饭卡号不能重复;
选择5:注销饭卡;
选择6:要求用户输入饭卡号和挂失信息,然后更新该饭卡的挂失信息。
#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("| 请输入选项编号(1--6) |\n");
printf("|-------------------------------|\n");
printf("| 1--建立饭卡文件 |\n");
printf("| 2--买饭 |\n");
printf("| 3--续钱 |\n");
printf("| 4--添加新饭卡 |\n");
printf("| 5--注销旧饭卡 |\n");
printf("| 6--设置与解除挂失 |\n");
printf("|-------------------------------|\n");
scanf("%d",&choose);
return choose;
}
void xie_file()
{
int i=counts;
FILE * y;
y=fopen("d:\\kcsj\\data.txt","a+");
fprintf(y,"%d %s %lf %d\n",card[i].ID,card[i].name,card[i].value,card[i].flag);
fclose(y);
}
void chuang_file() /*如果已经存在了data.txt那么就打开该文件*/
{
int i=counts;
printf("输入卡号,姓名,金额,挂失信息(0/1)(卡号-1表示输入结束!):\n");
scanf("%d",&card[i].ID);
scanf("%s%lf%d",card[i].name,&card[i].value,&card[i].flag);
xie_file();
i++;
counts=i;
}
void buy(int card_id,double cost)
{
int i;
for(i=0;i<counts;i++)
{
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);
}
}
}
void mai()
{
int id;
double v;
printf("输入卡号和消费金额:\n");
scanf("%d%lf",&id,&v);
buy(id,v);
}
void add_value()
{
int id,i;
double v;
printf("输入卡号和续钱金额:\n");
scanf("%d%lf",&id,&v);
for(i=0;i<counts;i++)
{
if(card[i].ID==id)
{
printf("%lf\n",card[i].value);
card[i].value+=v;
printf("%lf\n",card[i].value);
printf("充值成功,谢谢!\n");
return ;
}
}
printf("非法卡!\n");
}
void add_card()
{
int i=counts;
printf("输入卡号,姓名,金额,挂失信息(0/1)(卡号-1表示输入结束!):\n");
scanf("%d%s%lf%d",&card[i].ID,card[i].name,&card[i].value,&card[i].flag);
i++;
counts=i;
}
void del_card()
{
int id;
int i,j;
printf("输入要注销的卡号:\n");
scanf("%d",&id);
for(i=0;i<counts;i++)
{
if(card[i].ID==id)
{
for(j=i;j<counts-1;j++)
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=0;i<counts;i++)
{
if(card[i].ID==id)
{
card[i].flag=f;
printf("设置完成 !\n");
break;
}
else printf("非法卡!\n");
}
}
void main()
{
int m;
int counts=0;
while(m=menu(),m)
{
switch(m)
{
case 1: chuang_file(); break;
case 2: mai(); break;
case 3: add_value(); break;
case 4: add_card(); break;
case 5: del_card(); break;
case 6: set_flag(); break;
default: printf("输入有误,重新输入!\n");
}
}
xie_file(); /*退出系统的时候,把数据保存到文件*/
}