| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 328 人关注过本帖
标题:求帮助啊。。。明天就交了。。。
只看楼主 加入收藏
paotaishan
Rank: 1
等 级:新手上路
帖 子:6
专家分:0
注 册:2011-6-23
结帖率:0
收藏
已结贴  问题点数:20 回复次数:8 
求帮助啊。。。明天就交了。。。
额。。求教C语言的问天。。明天就要交了,求帮忙。。
我写的是点菜系统。
现在主要问题是在enter1子函数里写入D:\\TEXT.TXT的内容是乱码额。。
还有个问题就是xiugai子函数里的while(p!=NULL)循环直接被跳过了,我觉得是因为p根本没有被赋值,怎么改啊。。。求帮忙啊。。
代码在2楼
搜索更多相关主题的帖子: C语言 
2011-06-23 12:21
paotaishan
Rank: 1
等 级:新手上路
帖 子:6
专家分:0
注 册:2011-6-23
收藏
得分:0 
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <io.h>
#include <fcntl.h>
#define FILENAME "test.txt"/*文件名*/

struct Cmenu
{
  int num;/*菜品编号*/
  char fname[10]; /*菜系名称*/
  char name[10];/*菜名*/
  char introduce[1000];/*菜的介绍*/
  int binprice;/*菜的原始价格*/
  float zhekou;/*若有折扣卡的折扣*/
  
};

typedef struct Link
{
  struct Cmenu data;
  struct Link *next;
  
};
struct Link *head;


struct Link *enter1()/*初始化型录入菜的品种*/
{
  int n=1,a=1;

  struct Link *p,*q;
  struct Link *head=NULL;
  FILE *fp;
  fp=fopen("D:\\text.txt","w+");
  q=NULL;
  if(fp==NULL)
  {
    printf("error,can't open the file");
    exit(1);
  }
  p=NULL;
  q=NULL;
  p=(struct Link *)malloc(sizeof(struct Cmenu));
  if(p==NULL)
     {
       printf("NO MEMORY");
       exit(0);
     }
  printf("输入菜品编号\n");
  scanf("%d",&(p->data.num));
  getchar();
  printf("输入菜名\n");
  gets(p->data.name);
  printf("输入菜系\n");
  gets(p->data.fname);
  printf("输入该菜介绍\n");
  gets(p->data.introduce);
  printf("输入菜的初始价格\n");
  scanf("%d",&p->data.binprice);
  getchar();
  printf("若客人有折扣单,输入该菜的折扣\n");
  scanf("%f",&p->data.zhekou);
  getchar();
  
  while(a==1)
  {
    /*if(n==1)
     {
       head=p;
       q=p;
    }
    else*/
     q=p;
     p=(struct Link *)malloc(sizeof(struct Cmenu));
     q->next=p;
     if(p==NULL)
     {
       printf("NO MEMORY");
       exit(0);
     }
        system("cls");
   
        printf("输入菜品编号\n");
        scanf("%d",&p->data.num);
        getchar();
        printf("输入菜名\n");
        gets(p->data.name);
        printf("输入菜系\n");
        gets(p->data.fname);
        printf("输入该菜介绍\n");
        gets(p->data.introduce);
        printf("输入菜的初始价格\n");
        scanf("%d",&p->data.binprice);
        getchar();
        printf("若客人有折扣单,输入该菜的折扣\n");
        scanf("%f",&p->data.zhekou);
        getchar();
        
     
     
     //p=(struct Link *)malloc(sizeof(struct Cmenu));
    // p=q->next;
     printf("按0结束输入,按1继续输入\n");
     printf("是否继续输入\n");
     scanf("%d",&a);
     if(a==0)
     {
       p->next=NULL;
      
     }
     n++;
  }
 fwrite(&p,sizeof(struct Cmenu),1,fp);
  //free(p);
  fclose(fp);
  return head;
}



struct Link * enter2()/*补充型录入菜的品种*/

{
   FILE* fp;
   float a1;
   char ch;
   struct Link *p,*q;
   struct Link *head=NULL;
   fp=fopen("D:\\text.txt","aw+");
   if(fp==NULL)
   {
      printf("error,can't open the file");
      exit(1);
   }
   p=head;
   fread(p,sizeof(struct Cmenu),1,fp);
   while(p!=NULL)
   {
     p++;
   }
   printf("请问想添加菜名吗?Y/y:是   N/n:否");
   scanf("%s",&ch);
   getchar();
   system("cls");
   while((ch=='Y')||(ch=='y'))
   {
     
     p=(struct Link*)malloc(sizeof(struct Cmenu));
     printf("输入菜品编号\n");
     scanf("%d",&p->data.num);
     getchar();
     printf("输入菜名\n");
     gets(p->data.name);
     printf("输入菜系\n");
     gets(p->data.fname);
     printf("输入该菜介绍\n");
     gets(p->data.introduce);
     printf("输入菜的初始价格\n");
     scanf("%d",&(p->data.binprice));
     printf("若客人有折扣单,输入该菜的折扣\n");
     scanf("%f",&a1);
     getchar();
     q=p;
     p=(struct Link *)malloc(sizeof(struct Cmenu));
     q->next=p;
     printf("请问想添加菜名吗?Y/y:是   N/n:否");
     scanf("%s",&ch);
     system("cls");
   }
   p->next=NULL;
   fwrite(p,sizeof(struct Cmenu),1,fp);
   fclose(fp);
   return head;
   

}




void menu1()/*总菜单*/
{
  printf("                      欢迎使用\n");
  printf("------------------------点菜系统-----------------------\n");
  printf("   请选择:\n");
  printf("   1录入(餐厅老板使用)\t\t2使用(客户使用)\n");
  printf("-------------------------------------------------------\n");
}

void menu2()/*菜品录入的菜单*/
{
  printf("                        欢迎使用\n");
  printf("------------------------点菜系统------------------------\n");
  printf("请选择:\n");
  printf("  1始化录入\t\t\t\t2补充录入\n");
  printf("  3修改菜品\t\t\t\t4删除菜品\n");
  printf("  5返回上一页\n");
  printf("--------------------------------------------------------\n");


}



void menu3()/*顾客点菜菜单1*/
{
  printf("------------------------点菜系统------------------------\n");
  printf("请选择:\n");
  printf("   1点菜\t\t\t\t\t2结账\n");
  printf("--------------------------------------------------------\n");

}

void menu4()/*顾客点菜菜单2*/
{
  printf("------------------------点菜系统------------------------\n");
  printf("请选择:\n");
  printf("   1菜谱一览表\t\t\t\t\t2菜名查找\n");
  printf("--------------------------------------------------------\n");

}

 void xiugai(struct Link *head)/*餐馆修改菜单中的菜*/
{
   FILE* fp;
   //int n ;
  // n=sizeof(struct Cmenu);
  char buf[sizeof(struct Cmenu)];
  // char *buf;
   int flag=1;
   int a;
   struct Link *p,*q;
   //struct Link *head=NULL;
   fp=fopen("D:\\text.txt","aw+");
   //p=head;
   if(fp==NULL)
   {
      printf("error,can't open the file");
      exit(1);
   }
   p=head;
   fseek(fp,0,SEEK_SET);
   fread(buf,sizeof(struct Cmenu),1,fp);
   p=buf;
   q=p;
   while(p!=NULL)
   {
         printf("编号\t菜系\t菜名\t菜品介绍\t价格\t折扣后价格\n");
         printf("%2d\t\t%5s\t\t%5s\t\t%5s\t\t%2f\t\t%2f",p->data.num,p->data.fname,p->data.name,p->data.introduce,p->data.binprice,p->data.zhekou);
         p=p->next;
    }
   printf("请输入需要修改的菜品编号:");
   scanf("%d",&a);
   
   while(flag==1)
   {
      // p=head;
       if(a==p->data.num)
        {
          printf("请输入修改方案:\n");
          printf("输入菜品编号\n");
          scanf("%d",&p->data.num);
          getchar();
          printf("输入菜名\n");
          scanf("%s",p->data.name);
          getchar();
          printf("输入菜系\n");
          scanf("%s",p->data.fname);
          getchar();
          printf("输入该菜介绍\n");
          scanf("%s",p->data.introduce);
          getchar();
          printf("输入菜的初始价格\n");
          scanf("%f",&p->data.binprice);
          getchar();
          printf("若客人有折扣单,输入该菜的折扣\n");
          scanf("%f",&p->data.zhekou);
          getchar();
          flag=0;
        }
        else
        {
            p=p->next;
        }
   
   }
   fwrite(p,sizeof(struct Cmenu),1,fp);
   fclose(fp);
   free(p);

}

 void shanchu()  /*删除菜单中的菜*/
 {
  FILE* fp;
   int flag=1;
   int a;
   struct Link *p,*q;
   struct Link *head;
   fp=fopen("D:\\text.txt","aw+");
   if(fp==NULL)
   {
      printf("error,can't open the file");
      exit(1);
   }
   p=head;
  
   fread(p,sizeof(struct Cmenu),1,fp);
   
   while(p!=NULL)
   {
         printf("编号\t\t菜系\t\t菜名\t\t菜品介绍\t\t价格\t\t折扣后价格\n");
         printf("%2d\t\t%5s\t\t%5s\t\t%5s\t\t%2d\t\t%2f",p->data.num,p->data.fname,p->data.name,p->data.introduce,p->data.binprice,p->data.zhekou);
         p=p->next;
    }
   printf("请输入需要删除的菜品编号:");
   scanf("%d",&a);
   q=p;
   while(a!=p->data.num&&p!=NULL)
   {
     q=p;
     p=p->next;
   }
   if(a==p->data.num)
     {
     if(p==head)
     {
       head=p->next;
      }
     else
     {
       q->next=p->next;
     }
    free(p);
   }
}



void main()
{
  int a,b,c;

  menu1();
  scanf("%d",&a);
  system("cls");
  b=1;
  switch (a)
  {
 
  case 1:
         menu2();
         scanf("%d",&c);
         switch (c)
         {
         case 1:
                 system("cls");
                 enter1();
                 break;
         case 2:
                 system("cls");
                 enter2();
                 break;
         case 3:
                  system("cls");
                  printf("%d",head);
                  xiugai(head);
                  break;
         case 4:
                  system("cls");
                  shanchu();
                  break;
         
         case 5:exit(0);
                 
                  break;
         default:
                 system("cls");
                 printf("error");
                 menu2();
         }

  case 2:
         system("cls");
         use(head);
         break;
  default:
          system("cls");
          printf("输入错误,请重新选择:");
          //menu1();
  }
  printf("是否退出?   1:继续  0:退出 ");
  scanf("%d",&b);
  if(b)

      exit(0);
2011-06-23 12:23
paotaishan
Rank: 1
等 级:新手上路
帖 子:6
专家分:0
注 册:2011-6-23
收藏
得分:0 
求帮助啊。。谢谢了
2011-06-23 12:23
Pirelo
Rank: 7Rank: 7Rank: 7
等 级:黑侠
帖 子:118
专家分:550
注 册:2011-1-28
收藏
得分:7 
  fread(buf,sizeof(struct Cmenu),1,fp);//buf 为char吧?
   p=buf;   //p却是struct Link型,这个怎么赋值?

use(head);=>你的use()函数没定义

[ 本帖最后由 Pirelo 于 2011-6-23 12:32 编辑 ]
2011-06-23 12:23
paotaishan
Rank: 1
等 级:新手上路
帖 子:6
专家分:0
注 册:2011-6-23
收藏
得分:0 
大哥。。。帮帮忙。。。
2011-06-23 12:27
vandychan
Rank: 15Rank: 15Rank: 15Rank: 15Rank: 15
等 级:贵宾
威 望:18
帖 子:2296
专家分:6418
注 册:2010-8-20
收藏
得分:7 
你除了会说这句 还有没别的?

到底是“出来混迟早要还”还是“杀人放火金腰带”?
2011-06-23 12:33
paotaishan
Rank: 1
等 级:新手上路
帖 子:6
专家分:0
注 册:2011-6-23
收藏
得分:0 
这是我后来改的
刚开始用的
struct Link *p,*q;
 fread(p,sizeof(struct Cmenu),1,fp);
一样没法赋值额。。
用单步调试的时候p一直为0
我那有个PRINTF语句,输出来P也是0.。
怎么改啊。。谢谢了

use的子函数我没贴,因为跟这个没什么关系额。。太长了,怕麻烦你们啊。。
2011-06-23 12:38
paotaishan
Rank: 1
等 级:新手上路
帖 子:6
专家分:0
注 册:2011-6-23
收藏
得分:0 
好吧。。没人了?。。。
2011-06-23 12:58
voidx
Rank: 12Rank: 12Rank: 12
来 自:邯郸
等 级:火箭侠
帖 子:1250
专家分:3538
注 册:2011-4-7
收藏
得分:7 
等下帮你看看
2011-06-23 14:15
快速回复:求帮助啊。。。明天就交了。。。
数据加载中...
 
   



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

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