啊哈磊_编程从这里起步

标题: 求救啊!!!哪里错了??? [打印本页]

作者: 4399APPLE    时间: 2013-10-22 18:57
标题: 求救啊!!!哪里错了???
本帖最后由 4399APPLE 于 2013-11-10 20:35 编辑

编写了一条商品管理系统的程序,红箭头也不出现,却说编译失败,哪里错了???代码如下#include<stdio.h>
#include<stdlib.h>
#include<conio.h>
#include<dos.h>
#include<string.h>
#define LEN sizeof(struct commdity)
#define FORMAT"%-8d%-15s%-12.11f%-12.11f%-12.11f\n"
#define DATA comm.num,comm.name,comm.price,comm.count,comm.total
struct commdity
{
        int num;
    char name[15];
    double price;
    double count;
    double total;
};
struct commdity comm[50];
void main()
{
        int n;
    menu();
    scanf("%d",&n);
    while(n)
    {
                switch(n)
        {
                        case 1:
                                in();
                break;
            case 2:
                                search();
                break;
            case 3:
                                del();
                break;
            case 4:
                                modify();
                break;
            case 5:
                                insert();
                break;
            case 6:
                                order();
                break;
            case 7:
                                total();
                break;
            default:break;
        }
        getch();
        menu();
        scanf("%d",&n);
        system("pause");
        return 0;
    }
}
void menu()
{
    system("cls");
    printf("\n\n\n\n\n");
    printf("\t\t|------------------商品管理系统------------------|\n");
        printf("\t\t|\t0.退出                                        |\n");
    printf("\t\t|\t1.录入记录                                    |\n");
    printf("\t\t|\t2.查找记录                                    |\n");
    printf("\t\t|\t3.删除记录                                    |\n");
    printf("\t\t|\t4.修改记录                                    |\n");
    printf("\t\t|\t5.插入记录                                    |\n");
    printf("\t\t|\t6.排序记录                                    |\n");
    printf("\t\t|\t7.统计记录                                    |\n");
    printf("\t\t|------------------------------------------------|\n\n");
    printf("\t\t\t选择<0-7>:");
}
void in()
{
        int i,m=0;
    char ch[2];
    FILE *fp;
    if((fp=fopen("data","ab+"))==NULL)
    {
                printf("不能打开文件!\n");
        return;
    }
    while(!feof(fp))
    {
                if(fread(&comm[m],LEN,1,fp)==1)
                        m++;
    }
    fclose(fp);
                if(m==0)
                        printf("没有找到!\n");
        else
        {
                        system("cls");
            show();
        }
        if((fp=fopen("data","wb"))==NULL)
        {
                        printf("不能打开文件!\n");
            return;
        }
                for(i=0;i<m;i++)
                        fwrite(&comm,LEN,1,fp);
        printf("是否输入?(y/n):");
        scanf("%s",ch);
        while(strcmp(ch,"Y")==0||strcmp(ch,"y")==0)
        {
                        printf("编号:");
            scanf("%d",&comm[m].num);
            for(i=0;i<m;i++)
                                if(comm.num==comm[m].num)
                {
                                        printf("该记录已存在,按任意键继续!");
                    getch();
                    fclose(fp);
                    return;
                }
                printf("商品名:");
                scanf("%s",comm[m].name);
                printf("单价:");
                scanf("%1f",&comm[m].price);
                printf("数量:");
                scanf("%1f",&comm[m].count);
                comm[m].total=comm[m].price*comm[m].count;
                if(fwrite(&comm[m],LEN,1,fp)!=1)
                {
                                        printf("不能保存!");
                    getch();
                }
                else
                {
                                        printf("%s已经保存!\n",comm[m].name);
                                        m++;
                }
                printf("是否继续?(y/n):");
                scanf("%s",ch);
        }
        fclose(fp);
        printf("OK!\n");
}
void search()
{
        FILE *fp;
    int snum,i,m=0;
    char ch[2];
    if((fp=fopen("data","ab+"))==NULL)
    {
                printf("不能打开文件!");
        return;
    }
    while(!feof(fp))
                if(fread(&comm[m],LEN,1,fp)==1)
                        m++;
        fclose(fp);
        if(m==0)
        {
                        printf("没有记录!\n");
            return;
        }
        printf("请输入编号:");
        scanf("%d",&snum);
        for(i=0;i<m;i++)
                        if(snum==comm.num)
            {
                                printf("已经找到该记录,是否显示?(y/n)");
                scanf("%s",ch);
                if(strcmp(ch,"Y")==0||strcmp(ch,"y")==0)
                {
                                        printf("编号       商品名称       单价       数量       总金额 \t\n");
                    printf(FORMAT,DATA);
                    break;
                }
                else
                                        return;
            }
            if(i==m)
                                printf("没有找到相应的记录!\n");
}
void del()
{
                FILE *fp;
        int snum,i,j,m=0;
        char ch[2];
        if((fp=fopen("data","ab+"))==NULL)
        {
                        printf("不能打开文件!\n");
            return;
        }
        while(!feof(fp))
                        if(fread(&comm[m],LEN,1,fp)==1)
                                m++;
            fclose(fp);
            if(m==0)
            {
                                printf("没有记录!\n");
                return;
            }
            printf("请输入编号:");
            scanf("%d",&snum);
            for(i=0;i<m;i++)
                                if(snum==comm.num)
                                        break;
                if(i==m)
                {
                                        printf("没有找到!");
                    getchar();
                    return;
                }
                printf("已经找到该记录,是否删除?(y/n)");
                scanf("%s",ch);
                if(strcmp(ch,"Y")==0||strcmp(ch,"y")==0)
                                {
                                        for(j=i;j<m;j++)
                                                comm[j]=comm[j+1];
                    m--;
                    printf("成功删除!\n");
                }
                if((fp=fopen("data","wb"))==NULL)
                {
                                        printf("不能打开!\n");
                    return;
                }
                for(j=0;j<m;j++)
                                        if(fwrite(&comm[j],LEN,1,fp)!=1)
                    {
                                                printf("不能保存!\n");
                        getch();
                    }
                    fclose(fp);
}
void modify()
{
        FILE *fp;
    int i,j,m=0,snum;
    if((fp=fopen("data","ab+"))==NULL)
    {
                printf("不能打开文件!\n");
        return;
    }
    while(!feof(fp))
                if(fread(&comm[m],LEN,1,fp)==1)
                        m++;
        if(m==0)
        {
                        printf("没有记录!\n");
            fclose(fp);
            return;
        }
        printf("请输入要修改的记录信息的编号!\n");
        scanf("%d",&snum);
        for(i=0;i<m;i++)
                        if(snum==comm.num)
                                break;
            if(i<m)
            {
                                printf("已经找到该记录,是否修改?\n");
                printf("商品名:\n");
                scanf("%s",comm.name);
                printf("\n单价:");
                scanf("%1f",&comm.price);
                printf("\n数量:");
                scanf("%1f",&comm.count);
                comm.total=comm.price *comm.count;
            }
            else
            {
                                printf("没有找到!");
                getchar();
                return;
            }
            if((fp=fopen("data","wb"))==NULL)
            {
                                printf("不能打开文件!\n");
                return;
            }
            for(j=0;j<m;j++)
                                if(fwrite(&comm[j],LEN,1,fp)!=1)
                {
                                        printf("不能保存!");
                    getch();
                }
                fclose(fp);
}
void insert()
{
        FILE *fp;
    int i,j,k,m=0,snum;
    if((fp=fopen("data","ab+"))==NULL)
    {
                printf("不能打开文件!\n");
        return;
    }
    while(!feof(fp))
                if(fread(&comm[m],LEN,1,fp)==1)
                        m++;
        if(m==0)
        {
                        printf("没有记录!\n");
            fclose(fp);
            return;
        }
        printf("请输入要插入的记录的位置!\n");
        scanf("%d",&snum);
        for(i=0;i<m;i++)
                        if(snum==comm.num)
                                break;
            for(j=m-1;j>i;j--)
                                comm[j+1]=comm[j];
            printf("现在输入新的信息!\n");
            printf("编号:");
            scanf("%d",&comm[i+1].num);
            for(k=0;k<m;k++)
                                if(comm[k].num==comm[i+1].num&&k!=i+1)
                {
                                        printf("该编号已存在,按任意键继续!");
                    getch();
                    fclose(fp);
                    return;
                }
                printf("商品名:\n");
                scanf("%s",comm[i+1].name);
                printf("\n单价:");
                scanf("%1f",&comm[i+1].price);
                printf("\n数量:");
                scanf("%1f",&comm[i+1].count);
                comm[i+1].total=comm[i+1].price *comm[i+1].count;
                if((fp=fopen("data","wb"))==NULL)
                {
                                        printf("不能打开文件!\n");
                    return;
                }
                for(k=0;k<=m;k++)
                                        if(fwrite(&comm[k],LEN,1,fp)!=1)
                    {
                                                printf("不能保存!");
                        getch();
                    }
                    fclose(fp);
}
void order()
{
        FILE *fp;
        printf("排序成功!");
        getch();
        fclose(fp);
}
void total()
{
        FILE *fp;
    int m=0;
    if((fp=fopen("data","ab+"))==NULL)
    {
                printf("不能打开记录!\n");
        return;
    }
    while(!feof(fp))
                if(fread(&comm[m],LEN,1,fp)==1)
                        m++;
        if(m==0)
        {
                        printf("没有记录!\n");
            fclose(fp);
            return;
        }
        printf("一共有%d条记录!\n",m);
        fclose(fp);
}


作者: 4399APPLE    时间: 2013-10-22 18:57
如题,谁来帮帮我!!!???
作者: Smallbee    时间: 2013-10-22 18:57
自定义函数原则上要在引用前声明。你在主函数开始处加上声明语句即可:
void menu();
void in();
void search();
void del();
void modify();
void insert();
void order();
void total();
另一种处理方法是直接将自定义函数写到主函数前,这样可省去上述声明语句。
作者: 4399APPLE    时间: 2013-10-23 15:43
是在case那里吗?
作者: 4399APPLE    时间: 2013-10-23 15:44
Smallbee 发表于 2013-10-23 08:25
自定义函数原则上要在引用前声明。你在主函数开始处加上声明语句即可:
void menu();
void in();

是在case那里吗?
作者: 4399APPLE    时间: 2013-10-23 15:54
Smallbee 发表于 2013-10-23 08:25
自定义函数原则上要在引用前声明。你在主函数开始处加上声明语句即可:
void menu();
void in();

说明白些,看不懂
作者: rosynirvana    时间: 2013-10-23 15:55
Smallbee 发表于 2013-10-23 08:25
自定义函数原则上要在引用前声明。你在主函数开始处加上声明语句即可:
void menu();
void in();

C90允许隐式声明函数,如果函数原型是这些的话那么隐式声明也不会出错
作者: Smallbee    时间: 2013-10-24 08:20
4399APPLE 发表于 2013-10-23 15:54
说明白些,看不懂

void main()
{
    void menu();
    ......
}
void menu()
{
    ......
}
作者: 4399APPLE    时间: 2013-10-24 09:08
Smallbee 发表于 2013-10-24 08:20
void main()
{
    void menu();

哪里话,还是不行,你自己试一试
作者: heychao    时间: 2013-10-24 09:24
如果所有声明都加了的话,是不是那个" return 0; "的问题。
作者: 4399APPLE    时间: 2013-10-24 09:50
本帖最后由 4399APPLE 于 2013-11-22 10:10 编辑
heychao 发表于 2013-10-24 09:24
如果所有声明都加了的话,是不是那个" return 0; "的问题。

不是,试过了。。。
作者: Smallbee    时间: 2013-10-24 15:31
本帖最后由 Smallbee 于 2013-10-24 15:35 编辑

你的程序里还有一句是:
show();
这个函数声明我没写,我试的时候是将show()这一行注释了的。

作者: 4399APPLE    时间: 2013-10-24 15:45
Smallbee 发表于 2013-10-24 15:31
你的程序里还有一句是:
show();
这个函数声明我没写,我试的时候是将show()这一行注释了的。

删掉注释试试
作者: Smallbee    时间: 2013-10-24 15:52
4399APPLE 发表于 2013-10-24 15:45
删掉注释试试

删除了肯定编译不过!你这条show();是在引用函数,和menu();in();什么的是一样的:先声明再引用。我之所以注释掉是因为你的代码只有show()的引用而没有show()函数的具体执行代码。如果先声明了show(),后面再加上show()的具体代码,那删除了注释肯定编译通过
作者: 4399APPLE    时间: 2013-10-24 15:53
Smallbee 发表于 2013-10-24 15:31
你的程序里还有一句是:
show();
这个函数声明我没写,我试的时候是将show()这一行注释了的。

注释了只能管理一次啊,再输入就弹出“请按任意键继续。。。”
作者: 4399APPLE    时间: 2013-10-24 15:54
Smallbee 发表于 2013-10-24 15:31
你的程序里还有一句是:
show();
这个函数声明我没写,我试的时候是将show()这一行注释了的。

输入记录时输入不了数量,查找时什么都错误了
作者: Smallbee    时间: 2013-10-24 15:55
4399APPLE 发表于 2013-10-24 15:53
注释了只能管理一次啊,再输入就弹出“请按任意键继续。。。”

那不注释编译都通不过。你的问题不就是无法通过编译么
作者: 4399APPLE    时间: 2013-10-24 15:57
Smallbee 发表于 2013-10-24 15:55
那不注释编译都通不过。你的问题不就是无法通过编译么

那起码得能实现功能啊,功能都错误了,编译成功有什么用
作者: Smallbee    时间: 2013-10-24 15:58
4399APPLE 发表于 2013-10-24 15:54
输入记录时输入不了数量,查找时什么都错误了

那这个就是算法等方面的问题了。
作者: 4399APPLE    时间: 2013-10-24 15:59
Smallbee 发表于 2013-10-24 15:58
那这个就是算法等方面的问题了。

算法哪里的问题?说出来我改正
作者: 4399APPLE    时间: 2013-10-24 16:05
Smallbee 发表于 2013-10-24 15:31
你的程序里还有一句是:
show();
这个函数声明我没写,我试的时候是将show()这一行注释了的。

完了完了,注释掉全部坏了
作者: heychao    时间: 2013-10-25 10:10
4399APPLE 发表于 2013-10-24 09:50
不是,试过了!!!!!!

我看 in 函数里边的 show 函数调用应该是编译不过的原因吧
注释掉了就能通过,不过你得算法应该还有些问题吧,我操作感觉有问题(还是我不会用?)。

呀,好像已经有人指出了,呵。
作者: 4399APPLE    时间: 2013-10-25 10:15
heychao 发表于 2013-10-25 10:10
我看 in 函数里边的 show 函数调用应该是编译不过的原因吧
注释掉了就能通过,不过你得算法应该还有些问 ...

show()函数已经定义过了也没什么用,算法哪里的问题?我找不出来
作者: 4399APPLE    时间: 2013-10-25 10:16
heychao 发表于 2013-10-25 10:10
我看 in 函数里边的 show 函数调用应该是编译不过的原因吧
注释掉了就能通过,不过你得算法应该还有些问 ...

调用的show()函数是为了让它显示,并没什么用
作者: 4399APPLE    时间: 2013-10-25 10:31
heychao 发表于 2013-10-25 10:10
我看 in 函数里边的 show 函数调用应该是编译不过的原因吧
注释掉了就能通过,不过你得算法应该还有些问 ...

你不是在线吗?回答啊???
作者: 4399APPLE    时间: 2013-10-27 11:55
rosynirvana 发表于 2013-10-23 15:55
C90允许隐式声明函数,如果函数原型是这些的话那么隐式声明也不会出错

能说清楚一点吗???这函数本身就有点怪怪的
作者: heychao    时间: 2013-10-28 08:35
4399APPLE 发表于 2013-10-25 10:31
你不是在线吗?回答啊???

啊 不好意思 我不能随便上网的 呵

我学习C语言很浅的 你的函数有些我都没用过 算法表示还没看懂
作者: 4399APPLE    时间: 2013-10-28 10:01
heychao 发表于 2013-10-28 08:35
啊 不好意思 我不能随便上网的 呵

我学习C语言很浅的 你的函数有些我都没用过 算法表示还没看懂

那你现在应该在了吧?很浅?
作者: heychao    时间: 2013-10-28 15:58
4399APPLE 发表于 2013-10-28 10:01
那你现在应该在了吧?很浅?

我想你那问题应该解决了现在
作者: 4399APPLE    时间: 2013-10-28 16:00
heychao 发表于 2013-10-28 15:58
我想你那问题应该解决了现在

一直悬而未决······
作者: heychao    时间: 2013-10-28 16:06
heychao 发表于 2013-10-28 15:58
我想你那问题应该解决了现在

里边所有的 return 语句都注释掉 其中 search 函数还要连同上边的 else
in 函数里边 double 小数 输入时 用 %LF (字母小写 怕看不清 所以大写了)  另外 给一位 太短了 我给了五位
作者: heychao    时间: 2013-10-28 16:08
嘿 奇怪  我的回复  没有呢怎么

里边所有的 return 语句都注释掉 其中 search 函数还要连同上边的 else
in 函数里边 double 小数 输入时 用 %LF (字母小写 怕看不清 所以大写了)  另外 给一位 太短了 我给了五位
作者: 4399APPLE    时间: 2013-10-28 16:13
heychao 发表于 2013-10-28 16:08
嘿 奇怪  我的回复  没有呢怎么

里边所有的 return 语句都注释掉 其中 search 函数还要连同上边的 else
...

然后我的烂电脑就死机了······
作者: 4399APPLE    时间: 2013-10-30 09:42
啊啊啊,好无聊啊,都是没人··········
作者: 4399APPLE    时间: 2013-10-30 10:57
Smallbee 发表于 2013-10-23 08:25
自定义函数原则上要在引用前声明。你在主函数开始处加上声明语句即可:
void menu();
void in();

哈哈谢谢,已经成功
作者: 4399APPLE    时间: 2013-11-22 10:12
Smallbee 发表于 2013-10-24 15:52
删除了肯定编译不过!你这条show();是在引用函数,和menu();in();什么的是一样的:先声明再引用。我之所以 ...

无论如何,还是要谢谢你,我加上了show()函数的具体代码,成功了(^-^)




欢迎光临 啊哈磊_编程从这里起步 (https://bbs.codeaha.com/) Powered by Discuz! X3.2