📄 global.h
字号:
#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 + -