資源簡介
1. 用戶登錄(登錄失敗可重復登錄);
2. 用戶注冊(已有用戶不能注冊,需要輸入兩次密碼);
3. 單詞查詢(根據客戶端輸入的單詞,服務器可以根據數據庫查找反饋查詢的單詞和解釋);
4. 歷史記錄查詢(查詢單詞時服務器會將歷史記錄存在數據庫中,客戶端查詢時刻查詢歷史記錄的時間和具體單詞);
5. 進入每一級后可以返回上一級繼續執行上一級的操作,有清屏功能;
6. 可同時登錄多個用戶(多個用戶可反復登錄,反復注冊);

代碼片段和文件信息
/*************************************************************************
???????File?Name:?client.c
?????Author:?Young
?????motto:?Continuous?efforts?will?lead?to?a?better?future?
?????Created?Time:?Sun?2?Sep?2018?10:00:05?CST
?************************************************************************/
#include?
#include?
#include?
#include?
#include?
#include?
#include?
#include?
#include?
#include?
#include?
#include?
#define?N?64
#define?M?512
typedef?struct //消息結構體
{
int?type;
char?name[N];
char?data[M];
}MSG;
int?n;
void?help_l(); //幫助手冊
void?display_1(); //第一個界面顯示
void?display_2(); //查詢界面顯示
void?display_3(int?sockfd?MSG?*msg); //查詢界面函數
int?login(int?sockfd?MSG?*msg); //登錄函數
int?register_z(int?sockfd?MSG?*msg); //注冊函數
int?search_word(int?sockfd?MSG?*msg); //單詞查詢函數
int?history(int?sockfd?MSG?*msg); //歷史記錄查詢函數
int?return_l(int?sockfd?MSG?*msg); //返回上一級給服務器發送相應的信號
int?main(int?argc?char?*argv[])
{
int?sockfd; //創建套接字
MSG?msg;
/*1.創建套接字*/
sockfd=socket(AF_INET?SOCK_STREAM?0);
if(sockfd?0)
{
perror(“socket“);
return?-1;
}
printf(“socket?success!\n“);
/*2.主動連接服務器*/
struct?sockaddr_in?serv_addr;
serv_addr.sin_family ?=AF_INET;
serv_addr.sin_port ?=htons(8888);
serv_addr.sin_addr.s_addr=inet_addr(“127.0.0.1“);
if(0>connect(sockfd?(struct?sockaddr?*)&serv_addrsizeof(serv_addr)))
{
perror(“connect“);
return?-1;
}
printf(“connect??success\n“);
loop://使用無條件轉移語句
while(1)
{
display_1(); //顯示選擇的頁面
printf(“please?input?num:“);
scanf(“%d“&n);
getchar(); //利用getchar吃掉垃圾字符
switch(n)
{
case?1:
if(1?==?login(sockfd&msg))//登錄函數返回值為說明登錄成功幾個跳到第二個選擇頁面
{
goto?loop1; //可用函數調用或者無條件轉移跳到第二個選擇頁面
}
break;
case?2:
register_z(sockfd&msg);//注冊用戶
break;
case?3:
close(sockfd); //關閉套接字
return?0;
break;
case?4:
system(“clear“); //清屏
break;
case?5:
help_l(); //幫助
break;
default:
printf(“輸入信息有誤!\n“);
}
}
loop1://第二個選擇的頁面
while(1)
{
display_2();
printf(“please?input?num:“);
scanf(“%d“&n);
getchar(); //吃掉輸入時的垃圾字符(‘\n‘)
switch(n)
{
case?1:
search_word(sockfd&msg); //查詢單詞函數
printf(“測試\n“);
break;
case?2:
if(1?==?history(sockfd&msg)) //歷史記錄函數返回值是1代表又跳到前一個選擇頁面
{
goto?loop1;
}
break;
case?3:
return_l(sockfd&msg);
goto?loop; //跳到第一個選擇頁面
exit(0);
break;
case?4:
system(“clear“);//清屏功能
break;
case?5:
help_l(); //幫助手冊
break;
default:
printf(“輸入信息有誤!\n“);
}
}
/*關閉套接字*/
close(sockfd);
return?0;
}
int?return_l(int?sockfdMSG?*msg)
{
msg->type=5;
if(0?>?send(sockfd?msg?sizeof(MSG)0))
{
perror(“send“);
return?-1;
}
return?0;
}
int?login(int?sockfd?MSG?*msg)//登錄函數
{
msg->type?=?1;//選擇數字功能為1
printf(“please?input?user:“);
scanf(“%s“msg->name);
getchar();
printf(“pleas
?屬性????????????大小?????日期????時間???名稱
-----------?---------??----------?-----??----
?????目錄???????????0??2018-09-10?14:10??18070614?楊建新?在線英英詞典\
?????文件??????????95??2018-09-10?14:10??18070614?楊建新?在線英英詞典\Makefile
?????文件???????12344??2018-09-10?14:10??18070614?楊建新?在線英英詞典\client
?????文件????????7716??2018-09-10?14:08??18070614?楊建新?在線英英詞典\client_客戶端原碼.c
?????文件?????1406598??2018-09-10?14:04??18070614?楊建新?在線英英詞典\dict.txt
?????文件????????1599??2018-09-10?14:04??18070614?楊建新?在線英英詞典\dict_數據庫處理程序.c
?????文件?????1468416??2018-09-10?14:04??18070614?楊建新?在線英英詞典\my_數據庫.db
?????文件???????12660??2018-09-10?14:10??18070614?楊建新?在線英英詞典\server
?????文件????????9640??2018-09-10?14:04??18070614?楊建新?在線英英詞典\server_服務器原碼.c
?????文件???????21874??2018-09-10?13:45??18070614?楊建新?在線英英詞典\在線英英詞典說明文檔及主函數說明.docx
- 上一篇:ansible-for-devops
- 下一篇:PCIe 3.0 標準文檔
評論
共有 條評論