| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 346 人关注过本帖
标题:请求帮助~遇到个小问题
只看楼主 加入收藏
mz321
Rank: 1
等 级:新手上路
帖 子:3
专家分:0
注 册:2010-3-27
结帖率:0
收藏
已结贴  问题点数:20 回复次数:5 
请求帮助~遇到个小问题
在网上有个饭卡管理系统的代码~   部分修改后可以用 但是就是有一点 饭卡注销这个功能无法实现
能不能我我改改   谢谢
功能要求,循环显示如下图所示的主菜单:
选择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(); /*退出系统的时候,把数据保存到文件*/
}
搜索更多相关主题的帖子: 请求 
2010-03-27 23:34
hahayezhe
Rank: 15Rank: 15Rank: 15Rank: 15Rank: 15
来 自:湖南张家界
等 级:贵宾
威 望:24
帖 子:1386
专家分:6999
注 册:2010-3-8
收藏
得分:6 
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 ;
        }
}
2010-03-28 08:47
寒风中的细雨
Rank: 17Rank: 17Rank: 17Rank: 17Rank: 17
等 级:贵宾
威 望:66
帖 子:1710
专家分:8645
注 册:2009-9-15
收藏
得分:6 
#include <stdio.h>
#include <stdlib.h>
#include <conio.h>

struct Card
{
    int ID;       /*卡号*/
    char name[20];//用户名
    double value; /*金额 */
    int flag;     /*挂失信息 1 表示挂失*/
}card[1000];      //最大卡号数量

//定义全局变量
int counts; /*当前已有饭卡数量*/
FILE * fp;

//创建文件
void Create_file()
{
    if( (fp = fopen("d:data.txt", "w")) == NULL )
    {
        printf("\nError on open d:\\kcsj\\data.txt file!\n");
        getch();
        exit(1);
    }
    fclose(fp);
}

//写文件
void Written_file()
{
    int i;
    fp = fopen("d:data.txt", "w");
    for( i = 0; i<counts; i++ )
        fwrite( card, sizeof(struct Card), 1, fp);
    fclose(fp);
}

//读取文件信息
void Read_file()
{
    int i;
    fp = fopen("d:data.txt", "r");
    for( i = 0; i<counts; i++ )
        fread(card, sizeof(struct Card), 1, fp);
    fclose(fp);
}


//消费
void Expense_card()
{
    int id;
    double fee;
    printf("输入卡号:");
    scanf("%d", &id);
    printf("输入消费金额:");
    scanf("%f", &fee);

    //先要从文件当中读取数据 在修该数据 在 保存数据
    Read_file();
    int i;
    for(i=0;i<counts;i++)
    {
         if( card[i].ID == id )
         {
             if( card[i].flag == 1 )
             {
                  printf("本卡已挂失!\n");
                  return;
             }
             if(card[i].value<5)
             {
                  printf("金额不足,请续费!\n");
                  return;
             }
             printf("卡上金额为:");
             printf("%lf\n", card[i].value);
             card[i].value -= fee;
             printf("卡上余额为:");
             printf("%lf\n", card[i].value);
         }
    }
    Written_file();
}

//卡号充值
void Add_value()
{
    int id, i;
    double v;
    printf("输入卡号:");
    scanf("%d", &id);
    printf("输入充值额:");
    scanf("%d", &v);

    Read_file();

    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");
              printf("卡上余额为:%d\n", card[i].value);
              return ;
        }
    }
}

//购买饭卡
void Buy_card()
{
    int i = counts;

    int j;
    int id;
    Read_file();
LOOP:    printf("输入新的卡号:");
    scanf("%d", &id);
    for( j = 0; j<counts; j++ )
        if( card[j].ID == id )
            goto LOOP;
   
        
    card[i].ID = id;
    printf("输入姓名:");
    scanf("%s", card[i].name);
    getchar();
    printf("输入金额:");
    scanf("%d", &card[i].value);
    getchar();
    printf("输入挂失信息:");
    scanf("%d", &card[i].flag);
    getchar();
    counts++;
    Written_file();   
}

//注销过期卡
void Delete_card()
{
    int id;
    if( counts == 0 )
    {
        printf("没有卡,无法注销\n");
        return;
    }
    int i, j;
    printf("输入要注销的卡号:");
    scanf("%d", &id);
    Read_file();
    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");
            counts--;
            return ;
        }
    }
    Written_file();
}

//设置挂失信息
void Set_flag()
{
    int id,i,f;
    if( counts == 0 )
    {
        printf("没有卡,无法挂失\n");
        return;
    }
    printf("输入卡号:");
    scanf("%d", &id);
    Read_file();
    for( i=0; i<counts; i++ )
    {
        if( card[i].ID == id )
        {
            printf("当前卡号情况:\n");
            if( card[i].flag == 1 )
                printf("本卡正在挂失中!\n");
            else
                printf("本卡没有挂失!\n");
            printf("输入挂失信息(1:挂失,0:解除挂失):");
            scanf("%d%d", &f);
            card[i].flag = f;
            printf("设置完成 !\n");
            break;
        }
        else
            printf("非法卡!\n");
    }
    Written_file();
}

void main()
{
    int m;
    counts = 0;
    while(1)
    {
        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("| 7--推出系统                   |\n");
        printf("|-------------------------------|\n");
        scanf("%d",&m);
        
        switch(m)
        {
          case 1:  
              Create_file(); break;
          case 2:
              Expense_card(); break;
          case 3:
              Add_value(); break;
          case 4:
              Buy_card(); break;
          case 5:
              Delete_card(); break;
          case 6:
              Set_flag(); break;
          case 7:
              exit(0); break;
          default:
              printf("输入有误,重新输入!\n");
        }
      }
}
2010-03-28 11:04
寒风中的细雨
Rank: 17Rank: 17Rank: 17Rank: 17Rank: 17
等 级:贵宾
威 望:66
帖 子:1710
专家分:8645
注 册:2009-9-15
收藏
得分:0 
#include <stdio.h>
#include <stdlib.h>
#include <conio.h>

struct Card
{
    int ID;       /*卡号*/
    char name[20];//用户名
    double value; /*金额 */
    int flag;     /*挂失信息 1 表示挂失*/
}card[1000];      //最大卡号数量

//定义全局变量
int counts; /*当前已有饭卡数量*/
FILE * fp;

//创建文件
void Create_file()
{
    if( (fp = fopen("d:data.txt", "w")) == NULL )
    {
        printf("\nError on open d:\\kcsj\\data.txt file!\n");
        getch();
        exit(1);
    }
    fclose(fp);
}

//写文件
void Written_file()
{
    int i;
    fp = fopen("d:data.txt", "w");
    for( i = 0; i<counts; i++ )
        fwrite( card, sizeof(struct Card), 1, fp);
    fclose(fp);
}

//读取文件信息
void Read_file()
{
    int i;
    fp = fopen("d:data.txt", "r");
    for( i = 0; i<counts; i++ )
        fread(card, sizeof(struct Card), 1, fp);
    fclose(fp);
}


//消费
void Expense_card()//因为是以卡消费 所以不加判断 可以
{
    int id;
    double fee;
    printf("输入卡号:");
    scanf("%d", &id);
    printf("输入消费金额:");
    scanf("%f", &fee);

    //先要从文件当中读取数据 在修该数据 在 保存数据
    Read_file();
    int i;
    for(i=0;i<counts;i++)
    {
         if( card[i].ID == id )
         {
             if( card[i].flag == 1 )
             {
                  printf("本卡已挂失!\n");
                  return;
             }
             if(card[i].value<5)
             {
                  printf("金额不足,请续费!\n");
                  return;
             }
             printf("卡上金额为:");
             printf("%lf\n", card[i].value);
             card[i].value -= fee;
             printf("卡上余额为:");
             printf("%lf\n", card[i].value);
         }
    }
    Written_file();
}

//卡号充值
void Add_value()
{
    if( counts == 0 )
    {
        printf("没有卡,无法充值!\n");
        return;
    }
    int id, i;
    double v;
    printf("输入卡号:");
    scanf("%d", &id);
    printf("输入充值额:");
    scanf("%d", &v);

    Read_file();

    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");
              printf("卡上余额为:%d\n", card[i].value);
              return ;
        }
        else
            printf("非法卡!\n");
    }
    Written_file();
}

//购买饭卡
void Buy_card()
{
    int i = counts;

    int j;
    int id;
    Read_file();
LOOP:    printf("输入新的卡号:");
    scanf("%d", &id);
    for( j = 0; j<counts; j++ )
        if( card[j].ID == id )
            goto LOOP;
   
        
    card[i].ID = id;
    printf("输入姓名:");
    scanf("%s", card[i].name);
    getchar();
    printf("输入金额:");
    scanf("%d", &card[i].value);
    getchar();
    printf("输入挂失信息:");
    scanf("%d", &card[i].flag);
    getchar();
    counts++;
    Written_file();   
}

//注销过期卡
void Delete_card()
{
    int id;
    if( counts == 0 )
    {
        printf("没有卡,无法注销!\n");
        return;
    }
    int i, j;
    printf("输入要注销的卡号:");
    scanf("%d", &id);
    Read_file();
    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");
            counts--;
            return ;
        }
    }
    Written_file();
}

//设置挂失信息
void Set_flag()
{
    int id,i,f;
    if( counts == 0 )
    {
        printf("没有卡,无法挂失!\n");
        return;
    }
    printf("输入卡号:");
    scanf("%d", &id);
    Read_file();
    for( i=0; i<counts; i++ )
    {
        if( card[i].ID == id )
        {
            printf("当前卡号情况:\n");
            if( card[i].flag == 1 )
                printf("本卡正在挂失中!\n");
            else
                printf("本卡没有挂失!\n");
            printf("输入挂失信息(1:挂失,0:解除挂失):");
            scanf("%d%d", &f);
            card[i].flag = f;
            printf("设置完成 !\n");
            break;
        }
        else
            printf("非法卡!\n");
    }
    Written_file();
}

void main()
{
    int m;
    counts = 0;
    while(1)
    {
        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("| 7--推出系统                   |\n");
        printf("|-------------------------------|\n");
        scanf("%d",&m);
        
        switch(m)
        {
          case 1:  
              Create_file(); break;
          case 2:
              Expense_card(); break;
          case 3:
              Add_value(); break;
          case 4:
              Buy_card(); break;
          case 5:
              Delete_card(); break;
          case 6:
              Set_flag(); break;
          case 7:
              exit(0); break;
          default:
              printf("输入有误,重新输入!\n");
        }
      }
}
2010-03-28 11:15
mz321
Rank: 1
等 级:新手上路
帖 子:3
专家分:0
注 册:2010-3-27
收藏
得分:0 
注销功能可以用~
但是别的就出问题了 LS的
2010-03-28 13:38
longlong89
Rank: 11Rank: 11Rank: 11Rank: 11
来 自:广州
等 级:小飞侠
威 望:6
帖 子:1043
专家分:2754
注 册:2009-8-18
收藏
得分:6 
调试建议LZ自己动手,消减下浮躁,培养点耐心.

接分.

想象力征服世界
2010-03-28 20:59
快速回复:请求帮助~遇到个小问题
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.020182 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved