⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 global.h

📁 使用C++Builder开发的常住人口管理系统
💻 H
📖 第 1 页 / 共 2 页
字号:
#ifndef GLOBAL_H
#define GLOBAL_H
#include <cstdio>
#include <vcl.h>
using namespace std;

/*人口信息结构体*/
struct PerInfo
{
  char Name[32];                  /*姓名*/
  int Sex;                        /*性别*/
  int  Birthday;                  /*出生*/
  char JiGuan[32];                /*籍贯*/
  char MinZu[32];                 /*民族*/
  char SfzID[19];                 /*身份证*/
  int ZengZhi;                    /*政治面貌*/
  int Age;                        /*年龄*/
  int HunYin;                     /*0结婚,1未结婚*/
  int WenHua;                     /*文化水平*/
  int ShouRu;                     /*收入水平*/
  int XingZhi;                    /*性质(暂住/常住/迁入)*/
  char Address[32];               /*地址*/
  char SheHuiGuanXi[64];          /*社会关系 */
  int QianRuShiJian;              /*迁入时间*/
  char QianRuDiDian[32];          /*迁入地点*/
  char QianRuYuanYin[32];         /*迁入原因*/
  int ZhongDian;                  /*重点人员 */
  int ZhanZhuZeng;                /*暂住证   */
  int QianChuShiJian;             /*迁出时间 */
  char QianChuDiDian[32];         /*迁出地点 */
  char QianChuYuanYin[32];        /*迁出原因 */
  double SiWangShiJian;           /*死亡时间 */
  char SiWangYuanyin[32];         /*死亡原因 */
};

struct UserIndex                  /*索引结构体 */
{
  double Index;                  /*索引号 */
  char SfzID[19];                /*身份证号 */
  UserIndex *pNext;              /*索引结构体指针 */
};

struct RenKouJieGou
{
 double NLJieGou[4]; /* NLJieGou[0]未成年,NLJieGou[1]青年人,NLJieGou[2]中年人,NLJieGou[3]老年人*/
 double WHJieGou[5]; /* WHJieGou[0]本科以上,WHJieGou[1]大专,WHJieGou[2]高中,WHJieGou[3]初中,WHJieGou[4]小学下*/
 double SRJieGou[4]; /* SRJieGou[0]800以下,SRJieGou[1]800~2000,SRJieGou[2]2000~5000,SRJieGou[3]5000以上 */
 double XZJieGou[3]; /* XZJieGou[0]常住,XZJieGou[1]迁入,XZJieGou[2]暂住 */

};

struct Room   /*定义房间信息结构体*/
{
    int Number;       /*房间号 */
    int Type;         /*高,中,低档 */
    int Propert;      /*属性,销售还是出租 */
    char Address[60]; /*房间地址 */
    double Price;     /*价钱*/
    int Ordered;      /*是否被销售或出租 0未,1 */

};

struct RoomGuest   /*定义房客信息结构体*/
{
    char Name[32];  /*姓名*/
    int Sex;        /*性别 */
    char SfzID[19]; /*身份证 */
    int RoomNumber; /*购买或出租的房间号 */
    int ZuQin;       /*租期 */
};

struct Manager /*定义管理员结构体*/
{
    char username[20];  /*管理员用户名*/
    char password[16];  /*管理员密码*/
};

//全局变量,函数的封装声明,使它们从全局名称空间中移出掉。
//这么做的原因是使用了快速的c语言自由函数来完成文件索引系统操作。

struct Global
{
   //static UserIndex *pHead,*pIndex;
   static FILE *MyOpenFile(char *fName);    //打开文件
   static UserIndex *ReadIndexFromFile(char *fName); //从文件里读索引链表
   static UserIndex *AddPerson(UserIndex *pHead,UserIndex *pIndex);      //增加人口信息,pIndex只知道"SfzID"
   static int SaveIndexToFile(UserIndex *pHead,char *fName);      //把索引保存到文件里
   static double SearchIndex(UserIndex *pHead,char *SfzID);       //查找个人信息
   static UserIndex *DeleteIndex(UserIndex *pHead,char *SfzID);
   static void FreeLinker(UserIndex *pHead);              //释放链表
   static double GetEndIndex(UserIndex *pHead);

   static int WritePerInfoToFile(char *filename,int index,PerInfo *perinfo);  //信息写入操作
   static int ReadPerInfoFromFile(char *filename,int index,PerInfo *perinfo);  //信息读取操作

   static RenKouJieGou *ReadRenYuanTJFromFile(char *fName);//读取人员统计信息
   static int WriteRenKouTJToFile(char *fName,RenKouJieGou *RenKouTJ);//保存人员统计信息
   static int AddJieGouMes(RenKouJieGou *RenKouTJ,int Age,int WenHua,int ShouRu,int XingZhi);//更新(加)人员统计信息
   static int DeleteJieGouMes(RenKouJieGou *RenKouTJ,int Age,int WenHua,int ShouRu,int XingZhi);//更新(减)人员统计信息

   static int WriteRoomToFile(char *filename,Room *room); //将房间信息保存到文件
   static int WriteRoomGuestToFile(char *filename,RoomGuest *guest);//将房客信息保存到文件
   static int IsOrderedRoom(char *filename,int roomnum);//判断该房间号是否已经被订
   static int SetOrderedRoom(char *filename,int roomnum,int order);//设置该房间号是否已经被订
   static int SetGuestRoomNumber(char *filename,char *id,int number);//设置该房间号是否已经被订
   static int GetLastRoomNumber(char *filename);//得到最后的房间号
   static Room* FindSingleRoom(char *filename,int roomnum);//用房间号查找房间

};

FILE* Global::MyOpenFile(char *fName)                         //打开文件
{
  FILE *fp;
  if((fp=fopen(fName,"rb+"))==NULL)                 //不存在则新建一个
  {
    if((fp=fopen(fName,"wb+"))==NULL)
    {  ShowMessage("创建文件失败!!");
       return NULL;
    }
    UserIndex pHead;
    pHead.Index=-1;
    pHead.pNext=NULL;
    fwrite(&pHead,sizeof(UserIndex),1,fp);
  }
  return fp;
}


UserIndex *Global::ReadIndexFromFile(char *fName)         //从文件里读索引链表
{
  FILE *fpIndex;
  UserIndex *pHead=NULL,*pIndex,*p2;

  fpIndex=MyOpenFile(fName);
  fseek(fpIndex,0L,0);
  while(1)
  {
    pIndex=new UserIndex;
    if(fread(pIndex,sizeof(UserIndex),1,fpIndex)!=1)     //循环遍历每一个接点
    {
      delete pIndex;
      break;
    }

    if(!pHead) p2=pHead=pIndex;
    else p2->pNext=pIndex;
    p2=pIndex;
    p2->pNext=NULL;
  }
  fclose(fpIndex);
  return pHead;                                 //返回头指针
}


UserIndex *Global::AddPerson(UserIndex *pHead,UserIndex *pIndex)      //增加人口信息,pIndex只知道"SfzID"
{
    UserIndex *p1;
    for(p1=pHead;p1->pNext;p1=p1->pNext);            //得到最后一个结点

    pIndex->Index=p1->Index+1;
    p1->pNext=pIndex;
    pIndex->pNext=NULL;
    return pHead;                                       //成功返回
}

int Global::SaveIndexToFile(UserIndex *pHead,char *fName)      //把索引保存到文件里
{
  FILE *fpIndex;

  UserIndex *p;
  fpIndex=fopen(fName,"wb+");
  for(p=pHead;p;p=p->pNext)
     fwrite(p,sizeof(UserIndex),1,fpIndex);

  fclose(fpIndex);
  return 0;                                        //成功返回“0”
}


double Global::SearchIndex(UserIndex *pHead,char *SfzID)       //查找个人信息
{
   UserIndex *p1;
   bool Find=false;
   for(p1=pHead->pNext;p1;p1=p1->pNext)
   {
      if(strcmp(p1->SfzID,SfzID)==0)
      {
        Find=true;
        break;
      }
   }
   if(Find)
   {
     
     return p1->Index;                //Find为“1”则找到返回索引号

   }
   else                                      //为“0”则找不到返回“-1”
   {
     //ShowMessage("此身份证号不存在!");
     return -1;
   }
}

UserIndex *Global::DeleteIndex(UserIndex *pHead,char *SfzID)
{
   UserIndex *Parent,*p1;
   bool Find=false;
   for(p1=pHead->pNext,Parent=pHead;p1;p1=p1->pNext,Parent=Parent->pNext)
   {
      if(strcmp(p1->SfzID,SfzID)==0)
      {
        Find=true;
        Parent->pNext=p1->pNext;
        delete p1;
        break;
      }
   }
   if(Find)                           //Find为“1”则找到并删除
      ;//ShowMessage("该人信息已删除!");
   else                                      //为“0”则找不到返回“0”
      ShowMessage("此身份证号不存在!");
    return  pHead;
}

double Global::GetEndIndex(UserIndex *pHead)
{
   UserIndex *p;
   for(p=pHead;p->pNext;p=p->pNext);
   return p->Index;
}


void Global::FreeLinker(UserIndex *pHead)              //释放链表
{
   UserIndex *p1,*p2;
   for(p1=pHead;p1;p2=p1->pNext,delete p1,p1=p2);
}

int Global::WritePerInfoToFile(char *filename,int index,PerInfo *perinfo)
{
   FILE *fp;
   if((fp=fopen(filename,"rb+"))==NULL)                 //不存在则新建一个
   {
     if((fp=fopen(filename,"wb+"))==NULL)
     {
       ShowMessage("创建文件失败!!");
       fclose(fp);
       return -1;
     }
   }
   fseek(fp,index*sizeof(PerInfo),0);
   fwrite(perinfo,sizeof(PerInfo),1,fp);
   fclose(fp);
   return 0;
}

int Global::ReadPerInfoFromFile(char *filename,int index,PerInfo *perinfo)  //信息读取操作
{
   FILE *fp;
   if((fp=fopen(filename,"rb"))==NULL)                 //不存在
   {

       ShowMessage("对不起,您要的数据文件不存在!!");
       fclose(fp);
       return -1;
     
   }
   fseek(fp,index*sizeof(PerInfo),0);
   fread(perinfo,sizeof(PerInfo),1,fp);
   fclose(fp);
   return 0;
}

RenKouJieGou * Global::ReadRenYuanTJFromFile(char *fName)
{
    FILE *fp;
    if((fp=fopen(fName,"rb+"))==NULL)          //不存在则新建一个
    {
      if((fp=fopen(fName,"wb+"))==NULL)
      {
         ShowMessage("创建文件失败!!");
         return NULL;
      }

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -