采访记录路人信息

#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;
}

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值