【DOS界面下的小优化】C++实现TCP协议下的CS架构的图书馆书籍管理系统(数据库mysql)

图书管理系统链接:C++实现TCP协议下的CS架构的图书馆书籍管理系统(数据库mysql)


【DOS界面下的小优化】

1.客户端在连接不上服务器是不进入主界面,而是提示连接错误并退出程序,优化用户体验;


程序实现,在TCP协议connectToServer函数中加入一个全局变量goon,用来控制主函数是否进入主选择界面;

void MySocket::connectToServer()
{
	//连接服务器  
	retVal = connect(sHost, (LPSOCKADDR)&servAddr, sizeof(servAddr));
	if (SOCKET_ERROR == retVal)
	{
		cout << "connect failed!" << endl;
		closesocket(sHost); //关闭套接字  
		WSACleanup(); //释放套接字资源  
		goon = 1;//终止后面的进入窗口
	}
	else
	{
		cout << "*********服务器连接成功**********" << endl;
	}
}
int main()
{
	cout <<" ||~●~●~●<Client>●~●~●~||"<< endl;
	cout << "************正在连接服务器***********" << endl;
	mgc send_data;						//数据发送包
	mgc recv_data;				//数据接受包
	MySocket MySocket(2333, "127.0.0.1");
	MySocket.connectToServer();
	
	if (goon == 0)
	{
		cout << "正在进入图书馆服务窗口......" << endl;
		while (1)
		{
			MySocket.Choose(&send_data);
			MySocket.sendData(&send_data);//需要返回值
19	ZeroMemory(&send_data, sizeof(&send_data));
			MySocket.reveiveData(&recv_data);//接受反馈指令
			ZeroMemory(&recv_data, sizeof(&recv_data));
			if (shutdownf == 1)
			{
				MySocket.~MySocket();
				//break;
			}
		}
	}
	else
	{
		cout << " o(╥﹏╥)o 糟糕,服务器连接失败了." << endl;
		system("pause");
	}
}
2.还书时判断是否逾期;

return时通过数据库函数,在update时,调用ReTime=TO_DAYS(redate),BackTime=TO_DAYS(curdate())分别获取预设定的日期的days表示,即从1970.1.1到该日期的天数然后对两个日期进行大小比较的到是否逾期的信号;

void mysqldata::Whetherovertime(int book_id)
{
	if (borrow)
	{
		if (strcmp(Agetretime, Agetbacktime) >= 0)
		{
			cout << "该同学已按期完成还书。" << endl;
			strcpy_s(Sgetbookinf, "您已按期完成还书,谢谢。\n");
			cout << endl;
		}
		else
		{
			int min, money;
			min = atoi(Agetbacktime) - atoi(Agetretime);
			money = min*0.5;
			cout << endl;
			cout << "o(╥﹏╥)o "<<endl<<"小伙子,你逾期【" << min << "】天了,请交【" << money << "元】逾期费用到管理员处!" << endl;
			char cmin[64], cmoney[64];
			itoa(min, cmin, 10);
			itoa(money, cmoney, 10);
			strcpy_s(Sgetbookinf, "o(╥﹏╥)o \n小伙子,你逾期【");
			strcat_s(Sgetbookinf, cmin);
			strcat_s(Sgetbookinf, "】天了,请交【");
			strcat_s(Sgetbookinf, cmoney);
			strcat_s(Sgetbookinf, "元】逾期费用到管理员处!\n");
		}

	}
}
3.DOS界面客户端接收到程序后,跳转回主界面太快,用户读取信息体验不好,优化体验,在打印cout完rece_data的信息后,加上延时函数sleep,一段时间后再自动返回主界面。头文件调用:#include<Windows.h>

void MySocket::reveiveData(mgc *rec_data)
{
		ZeroMemory(buf, BUF_SIZE);
		memset(rec_data, 0, sizeof(*rec_data));
		retVal = recv(sHost, buf, sizeof(*rec_data), 0); // 接收服务器端的数据
		memcpy(rec_data, buf, sizeof(buf));
		cout << endl<<"从服务器接收到数据:\n" << endl;
		cout << "-----------------------------------------------------------" << endl;
		cout<<endl<< rec_data->send1 << endl;
		cout <<"-----------------------------------------------------------" << endl;
		Sleep(3*1000);
		cout << "正在返回图书馆服务窗口......" << endl;
}





猜你喜欢

转载自blog.csdn.net/qq_39540224/article/details/79221372