搜索
查看: 4328|回复: 35
打印 上一主题 下一主题

求救啊!!!哪里错了???

[复制链接]
跳转到指定楼层
楼主
发表于 2013-10-22 18:57:14 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
10啊哈币
本帖最后由 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);
}

最佳答案

查看完整内容

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

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

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

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

void main()
{
    void menu();
    ......
}
void menu()
{
    ......
}
9#
 楼主| 发表于 2013-10-24 09:08:11 | 只看该作者
Smallbee 发表于 2013-10-24 08:20
void main()
{
    void menu();

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

不是,试过了。。。
12#
发表于 2013-10-24 15:31:39 | 只看该作者
本帖最后由 Smallbee 于 2013-10-24 15:35 编辑

你的程序里还有一句是:
show();
这个函数声明我没写,我试的时候是将show()这一行注释了的。
13#
 楼主| 发表于 2013-10-24 15:45:53 | 只看该作者
Smallbee 发表于 2013-10-24 15:31
你的程序里还有一句是:
show();
这个函数声明我没写,我试的时候是将show()这一行注释了的。

删掉注释试试
14#
发表于 2013-10-24 15:52:09 | 只看该作者
4399APPLE 发表于 2013-10-24 15:45
删掉注释试试

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

注释了只能管理一次啊,再输入就弹出“请按任意键继续。。。”
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

广播台
特别关注
快速回复 返回顶部 返回列表