| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1184 人关注过本帖
标题:写了一个工程加上最后一个功能就出问题了但工程本身0错误
只看楼主 加入收藏
斯基兔
Rank: 1
等 级:新手上路
帖 子:15
专家分:1
注 册:2013-12-15
收藏
得分:0 
回复 8楼 love云彩
我在这个工程的其他文件中已经定义完了
extern声明外部变量
2013-12-17 11:34
embed_xuel
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
等 级:贵宾
威 望:58
帖 子:3845
专家分:11385
注 册:2011-9-13
收藏
得分:4 
回复 11楼 斯基兔
你的工程里有void classfy(void)这个函数定义吗?

总有那身价贱的人给作业贴回复完整的代码
2013-12-17 11:56
斯基兔
Rank: 1
等 级:新手上路
帖 子:15
专家分:1
注 册:2013-12-15
收藏
得分:0 
初始化数据



#include "stdio.h"
#include "stdlib.h"
#include "stu.h"

extern int peo;
extern STU stu[N];

void init(){//初始化函数,将数据从文件中取出,放到stu数组中,记录个数放在peo中。

    FILE *fp;
    int n=0;
    if((fp=fopen("main.txt","rb"))==NULL){
      if((fp=fopen("main.txt","wb"))==NULL)  {
          printf("创建main.txt文件失败,请检查磁盘空间。");
          system("pause");
      }
      else {
          peo=0;
          fclose(fp);
      }

    }
    else {
        fseek(fp,0,SEEK_SET);//定位到文件的开始
        fseek(fp,0,SEEK_END);//定位到文件的结束
        peo=ftell(fp);// 文件的长度
   
        peo=peo/(sizeof(STU));//记录个数
        fseek(fp,0,SEEK_SET);
        fread(stu,sizeof(STU),peo,fp);//读文件中的数据,放到stu中

        fclose(fp);
    }
}
2013-12-17 12:04
斯基兔
Rank: 1
等 级:新手上路
帖 子:15
专家分:1
注 册:2013-12-15
收藏
得分:0 
回复 12楼 embed_xuel
有,
在菜单下定义的
extern void add();
extern void query();
extern void modi();
//extern void delet();
 extern void classfy();
2013-12-17 12:06
embed_xuel
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
等 级:贵宾
威 望:58
帖 子:3845
专家分:11385
注 册:2011-9-13
收藏
得分:0 
那void classfy()实现在哪个文件里?把工程发出来吧

总有那身价贱的人给作业贴回复完整的代码
2013-12-17 12:11
斯基兔
Rank: 1
等 级:新手上路
帖 子:15
专家分:1
注 册:2013-12-15
收藏
得分:0 
/*
  Name:        STU类型定义   
  Description: 定义一个STU类型,定义一个最大的可处理的人数N
  Modify Date:
*/
#if !defined(kerwss)
#define kerwss  123
#define N 200
struct equipmentInfo
{
    int   no     ;    //设备序号
  char equipcode[10];  //设备编号
  char equiptype[20];  //设备总类
  char equipname[20]; //设备名称
  float equipprice;    //设备价格
  char buydate[20];   //设备购入日期
  int  scrap;         //是否报废,0表示没有报废,1表示报废
  char scrapdate[20];  //报废日期
};
typedef struct equipmentInfo STU;//自定义一个类型

#endif



/*
  Name:       查询操作   
 Description:
  Modify Date:
*/
#include "stdio.h"
#include "stu.h"
#include "stdlib.h"

extern void showall();
extern void show(int i);
extern void showhead();

extern int peo;
extern STU stu[N];


void showname(){
    int i,j,k,flag=1;
    char equipname[15];
    printf("请输入查询的名字:");
    scanf("%s",equipname);
    showhead();
    for(i=0;i<peo;i++)
        for(j=0;stu[i].equipname[j]!=0;j++){
            for(k=0;equipname[k]!=0;k++)
                if(stu[i].equipname[j+k]!=equipname[k])break;
                if(equipname[k]==0){flag=0;show(i);break;}
        }
    if(flag)printf("查无此人......\n");
    system("pause");
}
void query(){
    int c;
    while(1){//查询菜单,有按全部、姓名、序号查询
        if(peo==0)
        {  printf("为空,不能查询,");
           system("pause");
           return;
        }
        system("cls");
        printf("\n\n********************查询子功能菜单*********************\n");
        printf("\n                        1.全部记录\n");
        printf("                        2.按姓名\n");
        printf("                        3.按序号\n");
        printf("                        4.返回上一级\n\n");
        printf("********************查询子功能菜单*********************\n");
        printf("       请输入数字(1~4)选择相应的功能:");
        scanf("%d",&c);
        switch(c){
          case 1:showall();break;
          case 2://按姓名查询
              showname();
              break;
           case 3:
              printf("请输入查询的序号(1~%d):",peo);
              scanf("%d",&c);
              if(c<=0 ||c>peo)printf("输入的序号有误......\n");
              else{
                 showhead();
                 show(c-1);
              }
              system("pause");
              break;
          case 4:return;
          default:    printf("请输入正确的选项,");
                   system("pause");

        }

    }
}



/*
  Name:       修改操作
Description:
  Modify Date:
*/
#include "stdio.h"
#include "stu.h"
#include "stdlib.h"
#include "string.h"


extern void show(int i);
extern void showhead();
extern void  writestu();

extern int peo;
extern STU stu[N];

void sortstu(){//按姓名排序,并重新安排序号
    STU tmp;
    int i,j,flag=1;
    for(i=0;i<peo-1&& flag;i++)
    {   flag=0;
        for(j=0;j<peo-1-i;j++)//冒泡排序
          if(strcmp(stu[j].equipname,stu[j+1].equipname)>0){
              tmp=stu[j];
              stu[j]=stu[j+1];
              stu[j+1]=tmp;
              flag=1;
          }
      stu[peo-1-i].no=peo-i;//每次冒泡后,重新编号
    }
    stu[0].no=1;//第一个元素的序号为1

}

void modify(int i){
    int c;
    char s[31];
    int y;
    float  b;
    int flag=0;
    while(1){
        if(peo==0)
        {  printf("为空,不能修改,");
           system("pause");
           return;
        }
       printf("选择要修改的内容\n");
       printf(" 1.设备编号 2.设备总类 3.设备名称 4.设备价格 5.购入日期 6.是否报废 7.报废日期 8.结束并保存 9.结束不保存\n请输入操作的序号:");
       scanf("%4d",&c);
       switch(c){
       case 1://修改设备编号
            printf("请输入设备编号(1~10数字):");
            scanf("%s",s);
            strcpy(stu[i].equipcode ,s);
            printf("已修改!\n");
            break;
        case 2://修改设备总类
            printf("请输入设备总类(1~20个汉字)");
            scanf("%s",s);
            strcpy(stu[i].equiptype ,s);
            printf("已修改!\n");
            break;
       case 3://修改设备名称
            printf("请输入设备名称(1~20个汉字):");
            scanf("%s",s);
            strcpy(stu[i].equipname ,s);
            printf("已修改!\n");
            flag=1;
            break;
        case 4://修改设备价格
            printf("请输入设备价格(yuan):");
            scanf("%f",&b);
            stu[i].equipprice =b;
            printf("已修改!\n");
            break;
        case 5://修改购入日期
            printf("请输入设备购入日期(年 月 日1~20个汉字:");
            scanf("%s",s);
            strcpy(stu[i].buydate ,s);
            printf("修改成功!\n");
            break;
    case 6:///修改是否报废
            printf("请输入是否报废(0表示没有报废,1表示报废:");
            scanf("%d",&y);
            stu[i].scrap =y;
            printf("已修改!\n");
            break;
     case 7://修改报废日期
            printf("请输入报废日期(年 月 日1~20个汉字:");
            scanf("%s",s);
            strcpy(stu[i].scrapdate ,s);
            printf("修改成功!\n");
            break;


        case 8://结束修改之前,要排序,写到数据文件中
            if(flag)sortstu();//如果姓名修改了,需要重新排序stu
        //可以不用冒泡排序,只是这一个记录无序,可用其他方法
        //需要优化
            writestu();//写文件,这个函数定义 在add.cpp中
            return;
        case 9:
            return;
        default:    printf("请输入正确的选项,");
                   system("pause");

        }
    }
}

void modino(){//按序号修改
    int no;
    printf("请输入修改的记录序号(1~%d):",peo);
    do{
        scanf("%d",&no);
        if(no>peo||no<=0)
            printf("输入的序号不存在,请重新输入序号(1~%d):",peo);
    }while(no>peo||no<=0);
    showhead();//显示表头
    show(no-1);//显示记录
    modify(no-1);//修改stu[no-1]中的数据
}

void modiequipname(){//输入设备名称,找到记录,修改
    char equipname[11];
    int i=0,j=peo-1,k,flag=0;
    printf("请输入修改记录的姓名(1~5个汉字,输入0,返回上一级菜单):");
    do{
        scanf("%s",equipname);
        //在stu数组中,折半查找与equipname完全相同的记录
        if(strcmp(equipname,"0")==0)return;
        do{
           k=(i+j)/2;
           if(strcmp(stu[k].equipname,equipname)==0){flag=1;break;}//找到,flag=1,结束循环
           else if(strcmp(stu[k].equipname,equipname)>0)j=k-1;
           else i=k+1;
        }while(i<=j);
        if(flag==0)//没有找到
            printf("%s 不存在,请重新输入设备名称(1~5个汉字,输入0,返回上一级菜单):",equipname);     
    }while(flag==0);
    showhead();//显示表头
    show(k);//显示记录
    modify(k);

}

void modi(){//修改主菜单
    int c;
    while(1){
        if(peo==0)
        {  printf("为空,不能修改了,");
           system("pause");
           return;
        }
        system("cls");
        printf("\n\n********************修改子功能菜单*********************\n");
        printf("\n                        1.按序号修改\n");
        printf("                        2.按设备名称修改\n");
        printf("                        3.返回上一级\n\n");
        printf("********************修改子功能菜单*********************\n");
        printf("       请输入数字(1~3)选择相应的功能:");
        scanf("%d",&c);
        switch(c){
          case 1:
              modino();//输入序号修改   
              break;
          case 2:
              modiequipname();//输入设备名称修改
              break;
           case 3:return;
          default:    printf("请输入正确的选项,");
                   system("pause");

        }
    }
}

/*
  Name:        menu菜单函
  Description: 这是一个菜单,通过输入1~6来选择相应的函数,
               完成相应的操作
  Modify Date:
*/

#include "stdio.h"
#include "stdlib.h"
 
extern void add();
extern void query();
extern void modi();
//extern void delet();
 extern void classfy();

void menu(){//主菜单函数
    int c;
    while(1){
        system("cls");
        printf("\n\n\n");
        printf("************* 通迅录管理系统主菜单  **************\n\n");
        printf("               1.实验设备信息输入\n");
        printf("               2.实验设备信息添加\n");
        printf("               3.实验设备信息修改\n");
        printf("               4.实验设备分类统计\n");
        printf("               5.实验设备查询\n\n");
        printf("               6.退        出\n\n");
        printf("************* 通迅录管理系统主菜单  **************\n");
        printf("       请输入的数字(1~6),选择您的操作:");

        scanf("%d",&c);
        switch(c){
                case 1:
             //    input();    //实验设备信息输入
                break;
                case 2:
                add();    //实验设备信息添加
                break;
                case 3:
                modi();//实验设备信息修改
                break;
                case 4:
                  classfy();//实验设备分类统计
                break;
            case 5:
                query();//实验设备查询
                break;
            case 6:
                return ;
            default:    printf("请输入正确的选项,");
                   system("pause");

        }
        
    }

}
2013-12-17 12:15
斯基兔
Rank: 1
等 级:新手上路
帖 子:15
专家分:1
注 册:2013-12-15
收藏
得分:0 
/*
  Name:       主函数
  Description:
  Modify Date:shifei
*/
#include "stdio.h"
#include "stu.h"

extern void init();
extern void menu();

STU stu[N];
int peo = 0;//当前的记录个数

void main()
{
    init();//初始化函数,从文件中取出数据,统计好当前人数。
    menu();//主操作菜单
    return ;
}




/*
  Name:        初始化数据
  Description:
  Modify Date:
*/
#include "stdio.h"
#include "stdlib.h"
#include "stu.h"

extern int peo;
extern STU stu[N];

void init(){//初始化函数,将数据从文件中取出,放到stu数组中,记录个数放在peo中。

    FILE *fp;
    int n=0;
    if((fp=fopen("main.txt","rb"))==NULL){
      if((fp=fopen("main.txt","wb"))==NULL)  {
          printf("创建main.txt文件失败,请检查磁盘空间。");
          system("pause");
      }
      else {
          peo=0;
          fclose(fp);
      }

    }
    else {
        fseek(fp,0,SEEK_SET);//定位到文件的开始
        fseek(fp,0,SEEK_END);//定位到文件的结束
        peo=ftell(fp);// 文件的长度
   
        peo=peo/(sizeof(STU));//记录个数
        fseek(fp,0,SEEK_SET);
        fread(stu,sizeof(STU),peo,fp);//读文件中的数据,放到stu中

        fclose(fp);
    }
}




/*
  Name:       显示信息操
  Description:
  Modify Date:
*/

#include "stdio.h"
#include "stu.h"
#include "stdlib.h"

extern int peo;
extern STU stu[N];

void showhead(){//显示表头
    printf("%4s %-4s %4s %-4s %-6s %4s %-6s\n","设备编号",
        "设备总类","设备名称","设备价格","设备购入日期","是否报废","报废日期");
}

void show(int i)//显示单个记录,无表头
{   
    printf("%8s %-10s %8s %-6f",stu[i].equipcode,stu[i].equiptype,stu[i].equipname,stu[i].equipprice   );
        printf(" %-10s%4d%10s\n",stu[i].buydate,stu[i].scrap,stu[i].scrapdate  );

}

void showall()//显示所在记录
{
    int i;
    showhead();
    for(i=0;i<peo;i++){
        printf("%8s %-10s %8s %-6f",stu[i].equipcode,stu[i].equiptype,stu[i].equipname,stu[i].equipprice   );
        printf(" %-10s%4d%10s\n",stu[i].buydate,stu[i].scrap,stu[i].scrapdate  );
        if((i+1)%20==0)
            system("pause");
    }
    system("pause");
}



/*
  Name:        添加新成员        
  Description:

            这个文件包括:
            insert()函数,功能:
            writestu()函数,功能:
            add()函数,功能:
  Modify Date:
*/
#include "stdio.h"
#include "stu.h"
#include "stdlib.h"
#include "string.h"

extern int peo;
extern STU stu[N];

void insert(STU tmp){//把tmp,按stu[i].equipname的字典顺序,插入排序到stu中
    int i,j;
    for(i=0;i<peo;i++)
        if(strcmp(tmp.equipname ,stu[i].equipname)<0)break;//找到插入点
    tmp.no=i+1;
    for(j=peo;j>i;j--){
        stu[j]=stu[j-1];//都向后移
        stu[j].no =j+1;//重置序号
    }
    stu[i]=tmp;
    peo++;
}

void writestu(){//将stu中的数据写到main.txt文件中
    FILE *fp;
    if((fp=fopen("main.txt","wb"))==NULL){
        printf("main.txt文件不存在!\n");
        exit(0);
    }
    if(peo>0)
        fwrite(stu,sizeof(STU),peo,fp);//将stu写到文件中
    fclose(fp);
}


void add()//添加子菜单
{

    char c[2];
    int n=0;
    STU tmp;
    int no=0;
   
    do{
        if(peo>N){//超出最大的存储空间
            printf("通讯录已满%d个,请升级后继续添加,",peo);
            system("pause");
            return;
        }
          printf("添加新设备\n\n请输入设备编号(1~10数字):");
        scanf("%s",tmp.equipcode);
        printf("请输入设备总类(1~20个汉字):");
        scanf("%s",tmp.equiptype);
        printf("请输入设备名称(1~20个汉字):");
        scanf("%s",tmp.equipname);
        printf("请输入设备价格(yuan):");
        scanf("%f",&tmp.equipprice);
        printf("请输入设备购入日期(年 月 日1~20个汉字:");
        scanf("%s",tmp.buydate);
        printf("请输入是否报废(0表示没有报废,1表示报废:");
        scanf("%d",&tmp.scrap);
        printf("请输入报废日期(年 月 日1~20个汉字:");
        scanf("%s",tmp.scrapdate);
        insert(tmp);//将tmp插入到stu的相应位置,peo增1
        writestu();//写到文件中

        printf("添加完成,还要继续添加吗?(Y/N)");
        scanf("%s",c);
        }while(c[0]=='Y'||c[0]=='y');
}
2013-12-17 12:17
embed_xuel
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
等 级:贵宾
威 望:58
帖 子:3845
专家分:11385
注 册:2011-9-13
收藏
得分:0 
void classfy()实现在哪里?

总有那身价贱的人给作业贴回复完整的代码
2013-12-17 12:19
斯基兔
Rank: 1
等 级:新手上路
帖 子:15
专家分:1
注 册:2013-12-15
收藏
得分:0 
这是我整个的工程了
2013-12-17 12:29
embed_xuel
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
等 级:贵宾
威 望:58
帖 子:3845
专家分:11385
注 册:2011-9-13
收藏
得分:0 
还不明白?你没有void classfy(),编译器找不到void classfy(),ok?

总有那身价贱的人给作业贴回复完整的代码
2013-12-17 12:30
快速回复:写了一个工程加上最后一个功能就出问题了但工程本身0错误
数据加载中...
 
   



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

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