| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1613 人关注过本帖
标题:【求助】教我写一个简单的头文件好吗?急!!!!!!
只看楼主 加入收藏
thlgood
Rank: 5Rank: 5
等 级:职业侠客
帖 子:281
专家分:381
注 册:2010-9-24
结帖率:91.43%
收藏
已结贴  问题点数:20 回复次数:21 
【求助】教我写一个简单的头文件好吗?急!!!!!!
我现在在搞课程设计
写一个图书馆管理之类的程序,但是我不会写头文件,发的资料上也有一些头文件的教程但是看不懂啊
所以各位教我一下好吗?

写一个这样的例子吧:
该头文件内有一个自定义函数,该函数可以把两个int数中较大的一个返回

这个很简单吧!
谢谢给为大神!

以下内容为2月26号补充内容

好了,我错了,我再解释一下吧

我要大家写这个头文件不是因为要用这个头文件,而是学着举一反三,试着写自己的头文件

[ 本帖最后由 thlgood 于 2011-2-26 21:04 编辑 ]
搜索更多相关主题的帖子: 图书馆 
2011-02-22 15:33
qq1023569223
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
来 自:湖南科技大学
等 级:贵宾
威 望:26
帖 子:2753
专家分:13404
注 册:2010-12-22
收藏
得分:3 
下面是a.cpp:
int max(int a,int b)
{
   int c=0;
   c=a>b?a:b;
   return c;
}
以后在同一个工程要用的话加上 #include "a.cpp" 就可以了。

   唯实惟新 至诚致志
2011-02-22 15:38
thlgood
Rank: 5Rank: 5
等 级:职业侠客
帖 子:281
专家分:381
注 册:2010-9-24
收藏
得分:0 
前面不要
#ifndef XXXX #define XXXX ?
之类的东西吗?
顺便问一下,我们学校的这个课程设计一定要一个组的人一起搞吗?
现在我是孤军奋战做第二个任务啊!

o(∩∩)Linux & Python 群:187367181
2011-02-22 16:04
qq1023569223
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
来 自:湖南科技大学
等 级:贵宾
威 望:26
帖 子:2753
专家分:13404
注 册:2010-12-22
收藏
得分:0 
我们学校???难道你和我是同一个学校的?怎么做是你们的事情啊!
我也不知道,为了避免重复编译,也许会用到你所说的那个吧!

   唯实惟新 至诚致志
2011-02-22 16:33
flyue
Rank: 10Rank: 10Rank: 10
来 自:江南西道
等 级:贵宾
威 望:19
帖 子:3465
专家分:1563
注 册:2006-6-20
收藏
得分:3 
2楼 误人子弟

谭浩强也没教过include .cpp

天之道,损有余而补不足.人之道则不然,损不足以奉有余.孰能有余以奉天下,唯有道者.
2011-02-22 19:12
wujieru
Rank: 10Rank: 10Rank: 10
等 级:青峰侠
威 望:1
帖 子:1108
专家分:1939
注 册:2010-10-9
收藏
得分:3 
#include "a.cpp" 也可以??????这样也行???
2011-02-22 20:11
qq1023569223
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
来 自:湖南科技大学
等 级:贵宾
威 望:26
帖 子:2753
专家分:13404
注 册:2010-12-22
收藏
得分:0 
我的意思是同一个工程里面的不同文件间的连接!!!就是一个文件使用另一个文件的时候在头文件上加上的!
请不要理解错了!

[ 本帖最后由 qq1023569223 于 2011-2-22 20:14 编辑 ]

   唯实惟新 至诚致志
2011-02-22 20:13
lyj23
Rank: 3Rank: 3
等 级:论坛游侠
帖 子:168
专家分:140
注 册:2010-10-31
收藏
得分:3 
以下是引用flyue在2011-2-22 19:12:10的发言:

2楼 误人子弟
 
谭浩强也没教过include .cpp
我记得可以的吧,后缀‘a.cpp’为什么不行?为了区分有时候会写‘.h’,到C++里根本不用写‘.’了
2011-02-22 20:28
lyj23
Rank: 3Rank: 3
等 级:论坛游侠
帖 子:168
专家分:140
注 册:2010-10-31
收藏
得分:0 
没事为什么要用头文件啊?这么简单一个函数随便弄弄嘛,爱写哪里写哪里,看起来楼主新手吧,技术烂额!
#indef XXX
程序段1//比如printf("%d",i);   或者cout<<"i="<<i<<endl;
#endif
这种是用来调试的,比如你i++,j++,<< ,>>弄不清楚i,j的值时输出一下或者咋的。
2011-02-22 20:35
lyj23
Rank: 3Rank: 3
等 级:论坛游侠
帖 子:168
专家分:140
注 册:2010-10-31
收藏
得分:0 
白送你一整套图书管理系统
程序代码:
#include <stdlib.h>
#include <stdio.h>
#include <conio.h>
#include "math.h"
struct Date                     /*日期结构*/
{
   int m_nYear;                /**/
   int m_nMonth;               /**/   
   int m_nDay;                 /**/  
};

struct Reader                   /*读者结构*/
{
   char  num[20];       /*借书证号*/
   struct Date  bro;           /*借出时间*/
   struct Date  back;          /*归还时间*/
};
struct  Book                     /*书本结构*/
{
   int  m_iBook_Number;         /*对应书本号*/          
   char m_strTitle[150];        /*书名*/
   char m_strWroter[150];       /*作者*/  
   int  m_nMoreNum;             /*当前在架册数*/   
   int  m_nTotalHoldNum;        /*馆藏册数*/     
   char m_strComment[300];      /*图书简介*/  
   struct Reader reader[200];
};
struct Info                      /*借书信息结构*/
{
   struct Info *m_pParentPoint; /*前驱结点*/     
   struct Book *m_pBookInfo;    /*对应书本的信息*/   
   struct Info *m_pSun;         /*后继结点*/
};
struct Book *InputNode();
struct Info *Search(struct Info *bth,int x,int *k,int *flag);/*查找图书*/
struct Info *Insert_BookInfo(struct Info *bth);/*图书上架*/
struct Info *Delete_BookInfo(struct Info *bth);/*图书下架*/
void   Output_BookInfo(struct Info *bth);/*打印输出书本信息*/
void   Borrow_TheBook(struct Info *bth);/*图书出借*/
void   TurnBack_TheBook(struct Info *bth);/*图书归还*/
char   Select_Menu();/*图书馆管理系统主菜单*/ char Select_Menu()
{    /*主菜单显示函数*/
   system("cls");
    printf("/******************************************\\\n");
    printf("*                                          *\n");
    printf("*        图  书  馆  管  理  系  统        *\n");
    printf("*                  主菜单                  *\n");
    printf("*                                          *\n");
    printf("*               1. 图书上架                *\n");
    printf("*               2. 图书下架                *\n");
    printf("*               3. 查找图书                *\n");
    printf("*               4. 图书出借                *\n");
    printf("*               5. 图书归还                *\n");
    printf("*               6. 退出系统                *\n");
    printf("*                                          *\n");
    printf("*             请选择菜单项:(1~6)          *\n");
    printf("\\******************************************/\n");
   return getch();
}
void main()
{
   char c,t;
   int flag,p=1;
   struct Info *bth=NULL;
   while(1)
   {
      c=Select_Menu();
       printf("您选择了:%c",c);
      getch();
      switch(c) 
      {
      case '1':
         bth=Insert_BookInfo(bth);    /*图书上架*/
            break;
      case '2':
         bth=Delete_BookInfo(bth);    /*图书下架*/
            break;
      case '3': Output_BookInfo(bth);    /*查找图书*/
            break;
      case '4': Borrow_TheBook(bth);    /*图书出借*/
            break;
      case '5': TurnBack_TheBook(bth);    /*图书归还*/
            break;
      case '6':
      case '0': system("cls");
            printf("\n\t你想退出系统 ?(y/n)");
            t=getch();
            if(t=='y'||t=='Y') exit(0);
            break;
      }
      printf("\n\t按任意键返回主菜单....");
      getch();
   }
} void Borrow_TheBook(struct Info *bth)
{
   struct Info *q;
   struct Book *p;
   int i,k, x, flag,t;
   system("cls");/*清屏*/
   printf("\n\t请输入你想借的书本号: ");    /*打印消息*/
   scanf("%d",&x); /*接受输入*/
   q=Search(bth,x,&k,&flag);     /*查找书本*/
   if(flag==1) 
   {
      p=q->rec[k-1];
      printf("\n\t借出这本书 ?(y/n)");
      printf("\n\t书名:             %s",p->m_strTitle);
      printf("\n\t作者:            %s",p->m_strWroter);
      printf("\n\t当前在架册数:     %d",p->m_nMoreNum);
      printf("\n\t馆藏册数:       %d",p->m_nTotalHoldNum);
      printf("\n\t本书简介: %s\n",p->m_strComment);
      t=getch();
      if(t=='y'||t=='Y')
      {    /*确认借这本书*/
         if( (p->m_nMoreNum)==0) printf("\n\t对不起,本书已经全部借出...");
         else
         {
            system("cls");
            for(i=0;i<20;i++) if( (p->reader[i]).num[0]=='\0') break;
            printf("\n\t请输入借书证号: "); 
            scanf("%s",(p->reader[i]).num);
            printf("\n\t请输入借出的日期: ");
            printf("\n\t年:  ");
            scanf("%d",&((p->reader[i]).bro.m_nYear));
            printf("\t月: ");
            scanf("%d",&((p->reader[i]).bro.m_nMonth));
            printf("\t日:   ");
            scanf("%d",&((p->reader[i]).bro.m_nDay));
            printf("\n\t请输入归还日期: ");
            printf("\n\t年:  ");
            scanf("%d",&((p->reader[i]).back.m_nYear));
            printf("\t月: ");
            scanf("%d",&((p->reader[i]).back.m_nMonth));
            printf("\t日:   ");
            scanf("%d",&((p->reader[i]).back.m_nDay));
            p->m_nMoreNum--;      
            printf("\n\t成功借到本书.");}
      }
   }
   else printf("\n\t这本书不存在!");
}void TurnBack_TheBook(struct Info *bth)
{
   struct Info *q;
   struct Book *p;
   int i,k, x, flag,t,j;
   int year,month,day,d;
   float pay;
   char temp[20];
   system("cls");    /*清屏*/
   printf("\n\t请输入归还的书本号: ");
   scanf("%d",&x);
   q=Search(bth,x,&k,&flag);    /*书本查找*/  
   if(flag==1)
   {    /*找到本书*/
      p=q->rec[k-1];
      printf("\n\t你想归还这本书 ?(y/n)");
      printf("\n\t书名:             %s",p->m_strTitle);
      printf("\n\t作者:            %s",p->m_strWroter);
      printf("\n\t当前在架册数:     %d",p->m_nMoreNum);
      printf("\n\t馆藏册数:       %d",p->m_nTotalHoldNum);
      printf("\n\t本书简介: %s\n",p->m_strComment);
      t=getch();    /*接受选择*/
      if(t=='y'||t=='Y')
      {    /*确认归还这本书*/
         if( (p->m_nMoreNum) >=(p->m_nTotalHoldNum) )
            printf("\n\t想再上架一本书吗 ??\n");
         else
         {
            system("cls");
            printf("\n\t请输入借书证号: ");
            scanf("%s",temp);
            j=0;
            for(i=0;i<20;i++)
            {
               if(! (strcmp(temp,(p->reader[i]).num))) {j=1;break;}
            }
            if(j==0) {printf("\n\t你不能借这本书。");return;} 
            printf("\n\t今天是:");  
            printf("\n\t年:  ");
            scanf("%d",&year);
            printf("\t月: ");
            scanf("%d",&month);
            printf("\t日:   ");
            scanf("%d",&day);
            d=0;
            if(year<(p->reader[i]).back.m_nYear) d=1;
            if(year<=(p->reader[i]).back.m_nYear && month<(p->reader[i]).back.m_nMonth) d=1;
            if(year<=(p->reader[i]).back.m_nYear && month<=(p->reader[i]).back.m_nMonth && day<(p->reader[i]).back.m_nDay) d=1;
            if(d==0)
            {    /*超过还书日期,在此还书*/
               system("cls");
               pay=(year-(p->reader[i]).back.m_nYear)*365+(month-(p->reader[i]).back.m_nMonth) *30+(day-(p->reader[i]).back.m_nDay);
               printf("\n\t你的借书日期是: %d-%d-%d",(p->reader[i]).bro.m_nYear,(p->reader[i]). bro.m_nMonth,(p->reader[i]).bro.m_nDay); 
               printf("\n\t你的还书日期是: %d-%d-%d之前",(p->reader[i]).back.m_nYear, (p->reader[i]).back.m_nMonth,(p->reader[i]).back.m_nDay);
               printf("\n\t今天是                   %d-%d-%d",year,month,day);
               printf("\n\n\t因此你超出借期,");
               printf("\n\t应该支付%2.1f 元罚款.",0.1*pay);
            }
            (p->reader[i]).num[0]='\0';
            p->m_nMoreNum++; 
            printf("\n\t你已经归还了这本书.");
         }
      }
   }
   else printf("\n\t你不能归还不存在的一本书!!!"); 
}struct Book *InputNode()
{
   struct Book *p=NULL;
   int i;
   p=(struct Book *)malloc(sizeof(struct Book));   /*分配内存*/
   system("cls");/*清屏*/
   fflush(stdin);  /*清除以前的输入*/
   printf("\n\t请输入书名: ");  
   gets(p->m_strTitle);/*从键盘取得书名*/
   printf("\n\t请输入作者: ");
   gets(p->m_strWroter);/*从键盘取得作者名*/
   printf("\n\t请输入当前在架册数: ");
   scanf("%d",&p->m_nMoreNum);/*从键盘取得当前在架册数*/
   printf("\n\t请输入馆藏册数: ");
   scanf("%d",&p->m_nTotalHoldNum);/*从键盘取得当前馆藏册数*/
   fflush(stdin);
   printf("\n\t请输入本书简介: ");/*从键盘取得本书内容简要介绍*/
   gets(p->m_strComment);
   /*以上从输入输出设备取得要求的信息*/
   for(i=0;i<20;i++)
      (p->reader[i]).num[0]='\0';/*初始化书本结构成员的相关读者指针内容为空*/
   return(p);  /*返回成功插入的一本书信息*/
}
struct Info *Insert_BookInfo(struct Info *bth)
{
   int flag,j,k,t;
   int y,x,z;
   struct Info *p=NULL,*q=NULL,*u=NULL,*s=NULL;
   struct Book *r=NULL,*l=NULL;
   system("cls");/*清屏*/
   printf("\n\t请输入你想上架的书本号: ");
   scanf("%d",&x);/*取书号*/ 
   q=Search(bth,x,&k,&flag);/*查找上架的书是否已经上架,返回已经找到的书的信息*/
   if(flag==1)  
    {/*查找成功,存在此书*/
      printf("\n\t当前存在这本书%d本,您想再增加一本<<%s>>书?(y/n)\n",q->m_pBookInfo->m_nTotalHoldNum,q->m_pBookInfo->m_strTitle);
      z=getch();
      if(z=='y'||z=='Y')      
      {/*确认上架另一本书*/
         printf("\n\t本馆此书一共有: %d 本",q->m_pBookInfo->m_nTotalHoldNum);
         printf("\n\t并且有: %d 本在图书馆中内未借出.",q->m_pBookInfo->m_nMoreNum);
         q->m_pBookInfo->m_nTotalHoldNum++;
         q->m_pBookInfo->m_nMoreNum++; 
         printf("\n\t上架后一共有:  %d 本",q->m_pBookInfo->m_nTotalHoldNum);
         printf("\n\t上架后当前有:  %d 本在图书馆中.",q->m_pBookInfo->m_nMoreNum);
      }
      return(bth);
    }
   r=InputNode(bth); /*成功插入书本信息,指针r存放刚刚插入的书本*/
   if(bth==NULL)
    {
      /*指针bth为空时,表示当前链表为空,此时需要单独处理,即链表头内存分配*/
      bth=p=(struct Info *)malloc(sizeof(struct Info));/*申请内存*/
      r->m_iBook_Number = x;/*将书号存入书本信息结构体*/
      p->m_pParentPoint= NULL;/*前驱结点置空*/
      p->m_pSun=NULL;/*后继结点置空*/
      p->m_pBookInfo=r;
      return(p); /*返回新成功插入的书本结点*/
    }
   else
   {
      /*说明已经有头指针,则在此开始处理新插入的结构体指针*/
      p=NULL;
      p=bth;
      while(p->m_pSun!=NULL)
      {
         p = p->m_pSun;/*当后继结点不为空时,表示还未到链表尾部*/
      }
      /*当循环结束后,p指向的就是最后一个结点*/

      q=(struct Info *)malloc(sizeof(struct Info));/*申请内存*/
      r->m_iBook_Number = x;/*将书号存入书本信息结构体*/
      p->m_pSun = q;        /*双向链表的前驱与后继结点链接*/
      q->m_pParentPoint= p;/*前驱结点置为p*/
      q->m_pSun=NULL;/*后继结点置空,相当于电线接地*/
      q->m_pBookInfo=r;/*指向新插入的书本信息结构体*/
   }
   return(bth); 
}struct Info *Delete_BookInfo(struct Info *bth)
{
   int flag,j,k,t;
   int x,y;
   struct Info  *u=NULL,*s=NULL,*p=NULL,*q=NULL;
   struct Book  *bookinfo=NULL;
     
   struct Info *BookLeftPoint=NULL;/*前驱结点*/
   struct Info *BookRightPoint = NULL;/*后继结点*/
   system("cls");/*清屏*/
   printf("\n\t请输入你想下架的书本号: ");
   scanf("%d",&x);/*接受输入*/
   q=Search(bth,x,&k,&flag);/*查找指定的书是否存在*/      
   if(flag==0)
   { /*书本不存在是,直接输出消息并返回*/
      printf("\n\t这本书不存在!\n");
      return(bth);
   }
   else
   {
      if(q==NULL)
      {
         printf("未知错误");
         return bth;/*确保当前工作指针是有效的,防止出现非法操作*/
      }
      else
      {
         bookinfo=q->m_pBookInfo;
         printf("\n\t想下架的书本信息: ");  
         printf("\n\t书名:             %s",bookinfo->m_strTitle);   
         printf("\n\t作者:            %s",bookinfo->m_strWroter);
         printf("\n\t当前在架册数:     %d",bookinfo->m_nMoreNum);
         printf("\n\t馆藏册数:       %d",bookinfo->m_nTotalHoldNum);
         printf("\n\t本书简介: %s\n",bookinfo->m_strComment);
         /*删除指定的书本信息的思路:设当前找到的链表中的结点是q,它的前驱为q-1,后继为q+1,
         则,只需要作三步操作:
         1.将要删除的结点的后继结点的前驱指针域指向要删除的结点的前驱结点
         2.将要删除的结点的前驱结点的后继指针域指向要删除的结点的后继结点
         3.释放要删除的结点的书本信息域的内存,释放要删除的结点的内存
         需要注意两个特殊结点:要删除的结点是首结点或尾结点时,需要分别判断处理*/
         if(q->m_pParentPoint!=NULL && q->m_pSun!=NULL)
         {
            /*夹在链表中间的结点*/
            BookLeftPoint = q->m_pParentPoint;/*要删除的结点的前驱指向赋给前驱结点指针变量*/
            BookRightPoint = q->m_pSun;/*要删除的结点的后继指向赋给后继结点的指针变量*/
            BookLeftPoint->m_pSun = BookRightPoint;/*将后继结点指针指向的地址作为前驱结点中新后继域*/
            BookRightPoint->m_pParentPoint = BookLeftPoint;/*将后继结点指向的前驱域设定为要删除的结点的前驱结点*/
            q->m_pParentPoint = NULL;
            q->m_pSun = NULL;
            free(q->m_pBookInfo);/*先将书本信息结构体的内存释放*/
            q->m_pBookInfo = NULL;/*使指针指向安全地址*/
            free(q);/*将要删除的借还书信息结构体指针使用的内存空间释放*/
            q = NULL;/*要习惯将动态分配的内存在使用后动态释放,并将指针域指向空*/
            return bth;/*返回首结点*/
         }
         else if(q->m_pParentPoint==NULL)
         {
            /*首结点的前驱为空,这里处理首结点删除操作*/
            if(q->m_pSun==NULL)
            {/*前后指针域均为空时,说明只有一个结点,此时只需要将此结点删除*/
               free(q->m_pBookInfo);
               q->m_pBookInfo = NULL;
               free(q);
               q = NULL;
               return q;
            }
            bth = q->m_pSun;
            bth->m_pParentPoint = NULL;
           
            /*要删除的结点的后继指向赋给后继结点的指针变量*/
            BookRightPoint = q;
            BookRightPoint->m_pParentPoint = NULL;/*将链表中指向首结点的后继指针的前驱指针域置为空,表明是新的首结点*/
            BookRightPoint->m_pSun = NULL;/*将链表中指向首结点的后继指针的前驱指针域置为空,表明是新的首结点*/
           
            free(BookRightPoint->m_pBookInfo);/*先将书本信息结构体的内存释放*/
            BookRightPoint->m_pBookInfo = NULL;/*使指针指向安全地址*/
            free(BookRightPoint);/*将要删除的借还书信息结构体指针使用的内存空间释放*/
            BookRightPoint = NULL;/*要习惯将动态分配的内存在使用后动态释放,并将指针域指向空*/
           
            return bth;/*返回首结点*/
         }
         else if (q->m_pSun==NULL)
         {
            /*尾结点的后继结点为空,这里处理尾结点的删除操作*/

            BookLeftPoint = q->m_pParentPoint; /*将要删除的结点即尾结点的前驱域保存到前驱指针变量中*/
            BookLeftPoint->m_pSun = NULL;/*将要删除的结点的前驱结点与链表断开,前驱结点作为新的尾结点*/
            q->m_pParentPoint = NULL;
            free(q->m_pBookInfo);/*先将书本信息结构体的内存释放*/
            q->m_pBookInfo = NULL;/*使指针指向安全地址*/
            free(q);/*将要删除的借还书信息结构体指针使用的内存空间释放*/
            q = NULL;/*要习惯将动态分配的内存在使用后动态释放,并将指针域指向空*/
            return bth;/*返回首结点*/
         }
      }
   }
}





自己去琢磨,分给我吧!那么多代码累死额
2011-02-22 20:39
快速回复:【求助】教我写一个简单的头文件好吗?急!!!!!!
数据加载中...
 
   



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

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