| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 619 人关注过本帖
标题:求教! 这断代码能运行,但不能实现功能
只看楼主 加入收藏
刘欣2
Rank: 1
等 级:新手上路
帖 子:32
专家分:6
注 册:2014-5-12
结帖率:72.73%
收藏
已结贴  问题点数:10 回复次数:9 
求教! 这断代码能运行,但不能实现功能
#include<time.h>
#include<stdlib.h>
#include<stdio.h>
#include<string.h>
struct car_type                     //定义结构体变量
{
    int num;
    char name[10];
    int age;
    float price;
    struct student *naxt;
}car[100];


int sum = 0;
FILE *fp;                   //定义文件指针

void input();                      //定义输入函数
void output();                                   //定义输出函数
void save();                          //定义文件接受函数
void Addrecode();                       //定义添加汽车信息函数
int menu1();                                   //定义菜单函数
int Selectsearch();                  //定义选择查找类型函数
void cancel();                         //定义删除函数
void search();                            //定义查找函数
void searchName();                         //定义查找名字类型函数
void searchNum();                            //定义查找编码类型函数
void searchAge();                                //定义查找车龄类型函数

void save()                                      //定义文件接受函数
{
    int i;
    if((fp=fopen("car.txt","a+"))==NULL)         //判断能不能打开文件
    {
         printf("can not open file\n");
         exit(0);
    }
    for(i=0;i<sum;i++)                                         //判断能不能输入文件信息
    {
        if(fwrite(&car[i],sizeof(struct car_type),1,fp)!=1)
        {
            printf("file write error\n");
        }
   }
   fclose(fp);
}



void input()
{
    int i,j;
    srand((int)time(0));
    for(i=0;i<100;i++)                        //进行输入汽车信息
    {
        system("cls");
        sum=sum+1;
        printf("请输入第%d汽车的编码    名字     价格:\n",i+1);
        scanf("%d%s%f",&car[i].num,car[i].name,&car[i].price);
        car[i].age=1+(int)(10.0*rand()/(RAND_MAX+1.0));
        printf("\n是否继续添加:1是0否\n");               //判断是否继续输入
        scanf("%d",&j);
        if(j==1)
        {
            printf("\n");
        }
        else
        {
            exit(0);
        }
    }
    save();
}


int menu1()
{
    int num;
    while(1)
    {
         system("cls");
         printf("***************二手车管理系统*****************\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("**********************************************\n");
        printf("请输入您需要的功能编号0--5:");
        scanf("%d",&num);
        if(num<0||num>6)
        {
            printf("您输入的编号有误,按任意键继续输入:");
            scanf("%d",&num);
        }
        else
        {
            break;
        }
    }
    return num;
}

void Addrecode()
{
    int i,j;
    srand((int)time(0));
    printf("请输入你要插入的车辆数:  ");
    scanf("%d",&j);
    for(i = 0;i<j;i++)
    {
         sum = sum + 1;
         printf("请输入你要插入的第%d辆汽车信息(编码  名字   价格)\n",i+1);
         scanf("%d%s%f",car[sum].num,car[sum+i].name,car[sum+i].price);
         car[sum].age=1+(int)(10.0*rand()/(RAND_MAX+1.0));
    }
    save();
}

int main()
{
    int menu;
    menu = menu1();
    while(1)
    {
        switch(menu)
        {
             case 0: exit(0);
                     break;
             case 1: input();
                     break;
             case 2: Addrecode();
                     break;
             case 3: cancel();
                     break;
             case 4: output();
                     break;
             case 5: search();
                     break;
        }
    }
}




void cancel()
{
    int i,t,j,k,count;
    if((fp = fopen("car.dat","rb"))==NULL)
    {
        printf("不能打开文件\n");
        exit(0);
    }
    for(i = 0;i<sum;i++)
    {
        fread(&car[i],sizeof(struct car_type),1,fp);
        if(car[i].age>=8)
        {
             for(j=i;j<t+1;j++)
             {
                 car[j].age=car[j+1].age;
             }
             count++;
             t--;
        }

        if(count==0)
        {
            printf("没有该汽车的信息!\n");
        }
        else
        {
            output();
        }
        save();
    }
}



void output()
{
    int i;
    if((fp = fopen("car.dat","rb"))==NULL)
    {
        printf("不能打开文件\n");
        exit(0);
    }
    printf("编码     名字      车龄     价格\n");
    for(i = 0;i<sum;i++)
    {
        fread(&car[i],sizeof(struct car_type),1,fp);
        printf("%d    %10s    %d    %f",car[i].num,car[i].name,car[i].age,car[i].price);
    }
    fclose(fp);
}


int Selectsearch()
{
    int i;
    while(1)
    {
         system("cls");
         printf("***************1.按编码查找***************\n");
         printf("***************2.按名字查找***************\n");
         printf("***************3.按车龄查找***************\n");
         printf("*******************0.退出*****************\n");
         printf("请输入你要进行那种查找:  ");
         scanf("%d",&i);
         if(i<0||i>3)
         {
               printf("输入错误,请重新输入:\n");
               scanf("%d",&i);
         }
         else
         {
            exit(0);
         }
    }
    return i;
}



void search()
{
    int num;
    num = Selectsearch();
    while(1)
    {
        switch(num)
        {
            case 0:
                   exit(0);
                   break;
            case 1:
                   searchNum();
                   break;
            case 2:
                   searchName();
                   break;
            case 3:
                   searchAge();
                   break;
        }
    }
}


void searchNum()
{
    struct car_type m;
    int i,j;
    if((fp = fopen("car_type","rb"))==NULL)
    {
        printf("不能打开\n");
        exit(0);
    }
    while(1)
    {

         printf("请输入你要查找的编码:  ");
         scanf("%d",&m.num);
         for(i =0;i<sum;i++)
         {
             fread(&car[i],sizeof(struct car_type),1,fp);
             if(car[i].num)
             {
                  printf("%d   %10s   %d   %4.2f\n",car[i].num,car[i].name,car[i].age,car[i].price);
             }
         }
         printf("请问是否还有继续  1是   0否\n");
         scanf("%d",&j);
         if(j<0||j>1)
         {
               printf("输入错误,请从新输入\n");
               scanf("%d",&j);
         }
         if(j == 0)
         {
             exit(0);
         }
    }
}



void searchName()
{
    struct car_type N,*p = &N;
    int i,j;
    if((fp = fopen("car_type","rb"))==NULL)
    {
        printf("不能打开\n");
        exit(0);
    }
    while(1)
    {
        printf("请输入你要查找的汽车名字:\n");
        scanf("%s",p->name);
        for(i = 0;i<sum;i++)
        {
            fread(&car[i],sizeof(struct car_type),1,fp);
            if(strcmp(p->name,car[i].name)==0)
            {
                   printf("%d   %10s   %d   %4.2f\n",car[i].num,car[i].name,car[i].age,car[i].price);
            }
        }
        printf("请问是否还有继续  1是   0否\n");
        scanf("%d",&j);
        if(j<0||j>1)
        {
              printf("输入错误,请从新输入\n");
              scanf("%d",&j);
        }
        if(j == 0)
        {
            exit(0);
        }
    }

}


void searchAge()
{
    int Age,i,j;
    if((fp = fopen("car_type","rb"))==NULL)
    {
        printf("不能打开\n");
        exit(0);
    }
    while(1)
    {
        printf("请输入你要查找的汽车车龄:  \n");
        scanf("%d",&Age);
        for(i = 0;i<sum;i++)
        {
            fread(&car[i],sizeof(struct car_type),1,fp);
            if(Age==car[i].age)
            {
                   printf("%d   %10s   %d   %4.2f\n",car[i].num,car[i].name,car[i].age,car[i].price);
            }
        }
        printf("请问是否还有继续  1是   0否\n");
        scanf("%d",&j);
        if(j<0||j>1)
        {
              printf("输入错误,请从新输入\n");
              scanf("%d",&j);
        }
        if(j == 0)
        {
            exit(0);
        }
    }
}
搜索更多相关主题的帖子: include 结构体 price 
2014-05-25 21:01
砖家的谎言
Rank: 12Rank: 12Rank: 12
等 级:禁止访问
威 望:30
帖 子:693
专家分:3898
注 册:2013-12-6
收藏
得分:0 
你把代码贴出来了,你想要怎么做呢,比如你如果要实现其中一个功能,如果没实现,就要找这块的代码是否有问题

我不是砖家,要努力成为砖家。
2014-05-27 15:44
刘欣2
Rank: 1
等 级:新手上路
帖 子:32
专家分:6
注 册:2014-5-12
收藏
得分:0 
int main()
{
    int menu;
    menu = menu1();
    while(1)
    {
        switch(menu)
        {
             case 0: exit(0);
                     break;
             case 1: input();
                     break;
             case 2: Addrecode();
                     break;
             case 3: cancel();
                     break;
             case 4: output();
                     break;
             case 5: search();
                     break;
        }
    }
}

我这里为什么不能循环输入呢?
  比如:我按了1进行输入数据,
这是我想在返回主菜单  在进行输入
  我应该怎么修改呢?
2014-05-27 16:22
忘了_这一切
Rank: 3Rank: 3
来 自:星星
等 级:论坛游侠
威 望:1
帖 子:41
专家分:145
注 册:2014-4-25
收藏
得分:0 
程序代码:
void input()
{
    int i,j;
    srand((int)time(0));
    for(i=0;i<100;i++)                        //进行输入汽车信息
    {
        system("cls");
        sum=sum+1;
        printf("请输入第%d汽车的编码    名字     价格:\n",i+1);
        scanf("%d%s%f",&car[i].num,car[i].name,&car[i].price);
        car[i].age=1+(int)(10.0*rand()/(RAND_MAX+1.0));
        printf("\n是否继续添加:1是0否\n");               //判断是否继续输入
        scanf("%d",&j);
        if(j==1)
        {
            printf("\n");
        }
        else
        {
            return;   //这里讲exit(0)换为return!!!
        }
    }
    save();
}


程序代码:
int main()
{
    int menu;
    
    while(1)
    {   system("cls");     //增加一个刷新功能
    menu = menu1();     //将menul()函数移动到这里,可满足你的要求
        switch(menu)
        {
             case 0: exit(0);
                     break;
             case 1: input();
                     break;
             case 2: Addrecode();
                     break;
             case 3: cancel();
                     break;
             case 4: output();
                     break;
             case 5: search();
                     break;
        }
    }
}

更改你的代码,运行后能满足你的要求,其他模块如果也想修改,请参照input()函数
2014-05-27 16:56
忘了_这一切
Rank: 3Rank: 3
来 自:星星
等 级:论坛游侠
威 望:1
帖 子:41
专家分:145
注 册:2014-4-25
收藏
得分:0 
程序代码:
void input()
{
    int i,j;
    srand((int)time(0));
    for(i=0;i<100;i++)                        //进行输入汽车信息
    {
        system("cls");
        sum=sum+1;
        printf("请输入第%d汽车的编码    名字     价格:\n",i+1);
        scanf("%d%s%f",&car[i].num,car[i].name,&car[i].price);
        car[i].age=1+(int)(10.0*rand()/(RAND_MAX+1.0));
        printf("\n是否继续添加:1是0否\n");               //判断是否继续输入
        scanf("%d",&j);
        if(j==1)
        {
            printf("\n");
        }
        else
        {
            break;   //这里感觉用break更好一些,要不然最后的save函数就无法执行了!!!
        }
    }
    save();
}

用break代替exit(0)应该更好,如上
2014-05-27 17:01
刘欣2
Rank: 1
等 级:新手上路
帖 子:32
专家分:6
注 册:2014-5-12
收藏
得分:0 
void input()
{
    int i,j;
    srand((int)time(0));
    for(i=0;i<100;i++)                        //进行输入汽车信息
    {
        system("cls");
        sum=sum+1;
        printf("请输入第%d汽车的编码    名字     价格:\n",i+1);
        scanf("%d%s%f",&car[i].num,car[i].name,&car[i].price);
        car[i].age=1+(int)(10.0*rand()/(RAND_MAX+1.0));
        printf("\n是否继续添加:1是0否\n");               //判断是否继续输入
        scanf("%d",&j);
        if(j==1)
        {
            printf("\n");
        }
        else
        {
            break;   //这里感觉用break更好一些,要不然最后的save函数就无法执行了!!!
        }
    }
    save();
}


这里用break就值是退出了if语句,不能退出for语句!  我试了,不行
2014-05-27 17:10
刘欣2
Rank: 1
等 级:新手上路
帖 子:32
专家分:6
注 册:2014-5-12
收藏
得分:0 
棒~~~  可以了!非常感谢
2014-05-27 17:13
刘欣2
Rank: 1
等 级:新手上路
帖 子:32
专家分:6
注 册:2014-5-12
收藏
得分:0 
回复 6 楼 刘欣 2
能你能帮我看看为什么我输入了信息!而后我运行case 4就输不出来了呢?
2014-05-27 17:20
刘欣2
Rank: 1
等 级:新手上路
帖 子:32
专家分:6
注 册:2014-5-12
收藏
得分:0 
回复 7 楼 刘欣 2
我的一个c语言菜鸟!非常感谢你的帮忙
2014-05-27 17:21
忘了_这一切
Rank: 3Rank: 3
来 自:星星
等 级:论坛游侠
威 望:1
帖 子:41
专家分:145
注 册:2014-4-25
收藏
得分:10 
回复 8 楼 刘欣 2
程序代码:
void save()                                      
{
    int i;
    
    if((fp=fopen("car.txt","ab+"))==NULL)     //你是以二进制保存的,模式就应该是ab+    
    {
         printf("can not open file\n");
         exit(0);
    }
    for(i=0;i<sum;i++)                                         
    {
        if(fwrite(&car[i],sizeof(struct car_type),1,fp)!=1)
        {
            printf("file write error\n");
        }
   }
   fclose(fp);
}

程序代码:
void output()
{
    int i;
    if((fp = fopen("car.txt","rb"))==NULL)     //你保存是保存的car.txt,但是打开的却是car.bat。文件不一致当然无法打开!!!
    {
        printf("不能打开文件\n");
        exit(0);
    }
    printf("编码     名字      车龄     价格\n");
    for(i=0;i<sum;i++)
    {
        fread(&car[i],sizeof(struct car_type),1,fp);
        printf("%d    %10s    %d    %f",car[i].num,car[i].name,car[i].age,car[i].price);
    }
    system("pause");
    fclose(fp);
}
2014-05-27 17:44
快速回复:求教! 这断代码能运行,但不能实现功能
数据加载中...
 
   



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

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