#include "../include/staff.h"
int main(int argc, const char *argv[])
{
//创建哈系表
Hash *pHash = NULL;
if(HashCreate(&pHash) < 0)
{
return ERROR;
}
printf("创建哈系表成功!\n");
//一旦创建哈系表成功之后,立即导入文件中的内容至哈系表中
//文件操作---》选取文件IO ---》read,write
//打开一个指定需要读取的文件
int fr = open("Message.txt", O_RDONLY);
if(fr < 0)
{
perror("open_read error");
//不敢退出!!!
}
else
{
printf("打开存储路人信息的文件成功!\n");
//读取
//定义一个可以存储每一个路人信息的变量
data_type OneData;
while(1)
{
int MyRead = read(fr, &OneData, sizeof(OneData));
if(MyRead < 0)
{
perror("读取路人信息失败");
close(fr);
DestroyHash(&pHash);
return ERROR;
}
else if(0 == MyRead)
{
//到达文件末尾
printf("导入路人信息完毕!\n");
break;
}
else
{
//证明读取路人的信息已经OK,此时应该将存储读取
//到信息的变量OneData进行登记
if(AddStaffMessageToHash(pHash, OneData) < 0)
{
DestroyHash(&pHash);
close(fr);
return ERROR;
}
printf("已经导入一个路人的信息!\n");
//更新LastID 的值
pHash->LastID = OneData.ID;
}
}
}
//定义变量保存新路人的数据
data_type Data;
//定义保存路人ID 的变量
int ID;
char op[20];
//定义一个保存路人信息的变量
data_type LeaveData;
while(1)
{
printf("请输入需要进行的操作:Add, Delete, Alter, Search...\n");
scanf("%s",op);
if(0 == strcmp("Quit", op))
{
printf("退出啦!\n");
break;
}
if(0 == strcmp(op, "Add"))
{
//登记
printf("记录信息中......\n");
printf("请输入路人的姓名:\n");
scanf("%s",Data.Name);
//自动生成ID
Data.ID = pHash->LastID + 1;
printf("请输入路人的职位:\n");
scanf("%s",Data.Position);
printf("请输入路人的薪资:\n");
scanf("%d",&Data.Salary);
printf("请输入路人的婚姻状态:\n");
scanf("%s",Data.Status);
//调用接口
if(AddStaffMessageToHash(pHash,Data) < 0)
{
DestroyHash(&pHash);
return ERROR;
}
printf("%d号新路人记录成功!\n",Data.ID);
//更新LastID的值
pHash->LastID = Data.ID;
}
else if(0 == strcmp(op, "Search"))
{
//查找所有路人或者指定的路人信息
printf("请输入需要查找的路人ID:\n");
scanf("%d",&ID); //0 ---》查看所有路人 非0,查看指定的路人信息
if(SearchStaffMessage(pHash, ID, NULL) < 0)
{
DestroyHash(&pHash);
return ERROR;
}
printf("查找成功!\n");
}
else if(0 == strcmp(op, "Delete"))
{
//删除指定的路人
printf("删除信息中......\n");
printf("请输入需要删除信息的路人ID:\n");
scanf("%d",&ID);
//调用接口
if(LeaveStaffFromHash(pHash, ID, &LeaveData) < 0)
{
DestroyHash(&pHash);
return ERROR;
}
printf("%d号路人删除信息完毕!",ID);
printf("已删除路人的信息如下:\n");
printf("***********删除路人**************\n");
printf("姓名:%s\n",LeaveData.Name);
printf("ID:%d\n",LeaveData.ID);
printf("职位:%s\n",LeaveData.Position);
printf("薪资:%d\n",LeaveData.Salary);
printf("婚姻状态:%s\n",LeaveData.Status);
printf("********** 显示完毕**************\n");
}
else if(0 == strcmp(op, "Alter"))
{
//修改路人的信息
printf("请输入需要修改信息的路人ID :\n");
scanf("%d",&ID);
printf("%d号路人的信息修改中......\n",ID);
data_type SourseData;
if(SearchStaffMessage(pHash, ID, &SourseData) < 0)
{
DestroyHash(&pHash);
return ERROR;
}
printf("需要修改的路人%d号的信息已找到!\n",ID);
printf("请重新输入职位:\n");
scanf("%s",SourseData.Position);
printf("请输入对应的薪资!\n");
scanf("%d",&SourseData.Salary);
//调用修改接口
if(AlterStaffMessage(pHash, SourseData) < 0)
{
DestroyHash(&pHash);
return ERROR;
}
printf("修改%d号路人的信息成功.信息如下:\n",ID);
SearchStaffMessage(pHash, ID, NULL);
}
}
//自动保存路人的信息
int fw = open("Message.txt", O_WRONLY | O_CREAT | O_TRUNC, 0664);
if(fw < 0)
{
perror("open_write error");
close(fr);
DestroyHash(&pHash);
return ERROR;
}
printf("打开保存信息的文件成功,即将保存所有的路人信息!\n");
int i;
for(i=0;i<pHash->LastID;i++)
{
HashNode *pTemp = pHash->HashArr[i];
while(NULL != pTemp)
{
//准备写入文件
int MyWrite = write(fw, &pTemp->data, sizeof(pTemp->data));
if(MyWrite < 0)
{
perror("write error");
close(fr);
close(fw);
DestroyHash(&pHash);
return ERROR;
}
else if(0 == MyWrite)
{
printf("没有内容被写入!\n");
close(fr);
close(fw);
DestroyHash(&pHash);
return ERROR;
}
else
{
printf("写入一个路人信息至文件OK!\n");
}
//更新pTemp的指向
pTemp = pTemp->pNext;
}
}
//销毁hash表
if(DestroyHash(&pHash) < 0)
{
printf("销毁哈系表失败!\n");
return ERROR;
}
printf("销毁哈系表成功!\n");
//关闭打开的所有文件描述符
close(fr);
close(fw);
return 0;
}
10-16
80
09-06