ABCBank(MFC版)

来源:互联网 发布:ubuntu grub 启动顺序 编辑:程序博客网 时间:2024/05/16 10:40

       之前在控制台写完了ABCBank项目,但是没有界面,所以这几天也是有空就边学MFC边将MFC中的操作应到项目中来,做一个界面。下面是完成的基本情况:


在这个密码编辑框里,将控件的password属性改为FALSE就会出现******字样,这在之前需要我们编写代码来实现这一功能,因而方便了不少,输入的数据要求和之前一样,通过代码来实现。处理消息的服务器一端并没有进行改动,客户端则放在MFC中进行重新编写,下面是客户端与服务器进行通信连接的代码段,放在主界面的构造函数之中:

CABCBankDlg::CABCBankDlg(CWnd* pParent /*=NULL*/): CDialogEx(CABCBankDlg::IDD, pParent){m_hIcon = AfxGetApp()->LoadIcon(IDR_MAINFRAME);//检查协议栈安装情况WORD wVersionRequested;WSADATA wsaData;int err;wVersionRequested = MAKEWORD( 2, 2 );err = WSAStartup( wVersionRequested, &wsaData );if ( err != 0 ){return ;}if ( LOBYTE( wsaData.wVersion ) != 2 ||HIBYTE( wsaData.wVersion ) != 2 ) {WSACleanup( );return ; }//创建监听套接口sock = socket(PF_INET, SOCK_STREAM, IPPROTO_TCP);   if (sock == INVALID_SOCKET){cout<<"error with code = "<<WSAGetLastError()<<endl;exit(1);}//初始化服务器地址结构sockaddr_in servaddr;memset(&servaddr, 0, sizeof(servaddr));servaddr.sin_family = AF_INET;servaddr.sin_addr.s_addr = inet_addr("127.0.0.1");servaddr.sin_port = htons(8888);//连接服务器int ret;ret = connect(sock, (sockaddr*)&servaddr, sizeof(servaddr));if (ret == -1){cout<<"2error with code = "<<WSAGetLastError()<<endl;exit(1);}sock_pre = sock ;/*HANDLE jubin = AfxBeginThread(read_inforfrom,(LPVOID)sock,THREAD_PRIORITY_NORMAL,0,0,NULL);//c创建一个线程    WaitForSingleObject(jubin, INFINITE);*/DWORD ThreadID;//创建一个线程用来读服务器发过来的消息HANDLE handle = CreateThread(NULL,0,read_inforfrom,(LPVOID )sock ,0,&ThreadID);if(NULL == handle){cout<<"错误原因是"<<GetLastError()<<endl ;exit(1);}WaitForSingleObject(handle,0);CloseHandle(handle);}

登陆之后会进入功能界面:

每一个功能都可以用之前的控制台代码段去实现,由于在mfc里都是放在类中去操作,需要你创建大量的文件,而不同的文件经常会共用同一变量的数据,但是若包含同样的头文件就会发生重定义的错误,这里可以用extern关键字来解决共享的问题,客户端的线程可以采用mfc中的创建线程方法来实现读写的不同操作,当然c++中的线程同样适用,

开户:


跟其他几个功能一样,根据需求做出对应的控件并放在合理的位置,这里的确定按钮若符合要求则执行功能,若不符合要求,也应创建一个对话框来给“客户”一个友好的提示,取消则直接返回功能的界面,存储数据依旧是放在mysql中,服务器进行相应的操作,在账单查询中:


      这里是用MFC中的CFile进行操作,从文件中以结构体的大小将数据依次读出来,并显示在控件的静态文本中,但是现在有一个不足的地方,就是数据一旦位数不同,整体上就会参差不齐,很不好看,之后会对此进行修改。

其余功能的实现方式之前也有说过,大体上是没有什么变化的,在MFC中操作要注意好每个窗口间的联系,检查错误时用AfxMessageBox("错误信息");显示在窗口中,能够较好的利用句柄对不同的控件间的进行操作。总的框架目前是这样,之后会继续对界面进行修改,让之更加“逼真“一些。


0 0
原创粉丝点击