久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费
標(biāo)題:
在線電子詞典項(xiàng)目C語(yǔ)言源碼
[打印本頁(yè)]
作者:
居高聲自遠(yuǎn)
時(shí)間:
2018-8-26 23:55
標(biāo)題:
在線電子詞典項(xiàng)目C語(yǔ)言源碼
邏輯清晰,框架規(guī)范的在線電子詞典源程序
0.png
(45.2 KB, 下載次數(shù): 49)
下載附件
2018-8-27 00:12 上傳
C語(yǔ)言源程序如下:
#include <stdio.h>
#include <string.h>
#include <sqlite3.h>
#define MAXLEN_DATA 256
int main ()
{
char buff[MAXLEN_DATA]={0};
FILE *fp;
int i= 0;
char word[35]="\0";
char *p;
char meaning[256];
char sql_cmd[128];
char *errmsg;
sqlite3 *db;
/*查找單詞*/
if ((fp = fopen("dict.txt", "r")) == NULL)
{
perror("fail to open");
return -1;
}
if( sqlite3_open("wmk.db", &db) != SQLITE_OK)
{
printf("fail to open %s\n",sqlite3_errmsg(db));
}
while (fgets(buff, MAXLEN_DATA, fp) != NULL)
{
i= 0;
p= buff;
while (*p != ' ')
{
word[i] = *p;
i++;
p++;
continue;//跳過(guò)第一個(gè)單詞
}
word[i] = '\0';
while (*(++p) == ' ')
{
continue;//跳過(guò)單詞后面的空格
}
strcpy(meaning,p);
sprintf(sql_cmd,"insert into word values('%s','%s')",word,meaning);
if(sqlite3_exec(db, sql_cmd,NULL,NULL,&errmsg) != SQLITE_OK)
{
printf("fail exec\n");
}
}
if( sqlite3_close(db) != SQLITE_OK)
{
printf("fail to close %s\n",sqlite3_errmsg(db));
}
return 0;
}
復(fù)制代碼
/*************************************************************************
> File Name: dict_server.c
> Author: WangMingkai
> Created Time: Sun 22 Apr 2018 06:40:59 PM CST
************************************************************************/
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#include<sys/types.h>
#include<sys/stat.h>
#include<fcntl.h>
#include<sys/socket.h>
#include<unistd.h>
#include<netinet/in.h>
#include<arpa/inet.h>
#include<sqlite3.h>
#include<signal.h>
#include<time.h>
#include<pthread.h>
#include<time.h>
//定義用戶數(shù)據(jù)結(jié)構(gòu)體
struct message_user
{
char name[24];
char password[24];
char telephone[24];
char address[24];
char word[18];
char meaning[256];
char record[48][24];//存放查找結(jié)果內(nèi)容的數(shù)組
char head[6][24]; //存放查找結(jié)果字段名稱的數(shù)組
int state; //用戶在線狀態(tài)
int nrow; //數(shù)據(jù)庫(kù)函數(shù)執(zhí)行后得到記錄的數(shù)目
int ncolumn;//數(shù)據(jù)庫(kù)函數(shù)執(zhí)行后得到字段的數(shù)目
int flag; //客戶端發(fā)送的命令
int err; //判斷執(zhí)行數(shù)據(jù)庫(kù)函數(shù)后是否成功
int binary; //判斷查詢歷史記錄的方式,0/姓名,1/單詞
int update; //修改個(gè)人信息選項(xiàng),0/密碼,1/電話,2/地址
};
typedef struct message_user Mess_user;
char buffer1[256]={0};
int fd;
time_t timep;
//使用多線程來(lái)實(shí)現(xiàn)并發(fā)服務(wù)器
void *fun_pthread(void *arg)
{
int accept_sock_fd = *(int *)arg;
int addrlen;
Mess_user user;
char word[18] = {0};
char sql_cmd1[128] = {0};
char sql_cmd2[128] = {0};
time_t t;
int flag;
free(arg);
char buff[128];
char time_c[30];
int num = 1;
int i, j, index;
char **resultp;
int nrow, ncolumn;
sqlite3 *db;
char *errmsg;
//打開(kāi)sqlite3數(shù)據(jù)庫(kù)
if(sqlite3_open("wmk.db", &db) != 0)
{
perror("fail open sqlite3");
exit(-1);
}
while(1)
{
if(read(accept_sock_fd, &user, sizeof(struct message_user)) == -1)
{
perror("fail recv flag");
exit(-1);
}
switch(user.flag)
{
case 1:
//向數(shù)據(jù)庫(kù)中插入用戶名信息
read(accept_sock_fd, &user, sizeof(struct message_user));
sprintf(sql_cmd1,"select * from user where name='%s'",user.name);
if(sqlite3_get_table(db, sql_cmd1, &resultp, &nrow, &ncolumn, &errmsg) != 0)
{
printf("fail exec %s\n",errmsg);
exit(-1);
}
if(nrow != 0)
{
user.err = 1;
write(accept_sock_fd, &user, sizeof(struct message_user));
break;
}
if(nrow == 0)
{
user.err = 0;
write(accept_sock_fd, &user, sizeof(struct message_user));
read(accept_sock_fd, &user, sizeof(struct message_user));
sprintf(sql_cmd2,"insert into user values ('%s','%s','%s','%s', %d)", user.name, user.password, user.telephone, user.address, user.state);
if(sqlite3_get_table(db, sql_cmd2, &resultp, &nrow, &ncolumn, &errmsg) != 0)
{
printf("fail exec %s\n",errmsg);
exit(-1);
}
user.err = 0;
write(accept_sock_fd, &user, sizeof(struct message_user));
time(&timep);//參數(shù)是能返回 time_t 型對(duì)象 的指針 timer ,那里存放著當(dāng)時(shí)時(shí)間。
strcpy(time_c, ctime(&timep));
sprintf(buff, "%s用戶%s注冊(cè)\n", time_c, user.name);
write(fd, buff, strlen(buff));
}
break;
//用戶開(kāi)始登錄
case 2:
read(accept_sock_fd, &user, sizeof(struct message_user));
sprintf(sql_cmd1,"select * from user where name='%s'",user.name);
if(sqlite3_get_table(db, sql_cmd1, &resultp, &nrow, &ncolumn, &errmsg) != 0)
{
printf("fail exec %s\n",errmsg);
exit(-1);
}
if( nrow == 0 )
{
user.err = 1;
write(accept_sock_fd, &user, sizeof(struct message_user));
break;
}
if( nrow == 1)
{
user.err = 0;
write(accept_sock_fd, &user, sizeof(struct message_user));
while(num != 0)
{
read(accept_sock_fd, &user, sizeof(struct message_user));
sprintf(sql_cmd2,"select password from user where name='%s'",user.name);
if(sqlite3_get_table(db, sql_cmd2, &resultp, &nrow, &ncolumn, &errmsg) != 0)
{
printf("fail exec %s\n",errmsg);
exit(-1);
}
num = strcmp(user.password, resultp[ncolumn]);
if(num == 0)
{
user.err = 0;//登錄成功
sprintf(sql_cmd1, "update user set state=1 where name='%s'", user.name);
sqlite3_exec(db, sql_cmd1, NULL, NULL,&errmsg);
time(&timep);
strcpy(time_c, ctime(&timep));
sprintf(buff, "%s用戶%s登錄\n", time_c, user.name);
write(fd, buff, strlen(buff));
}
if(num != 0)
{
user.err = 1;//登錄失敗
}
write(accept_sock_fd, &user, sizeof(struct message_user));
}
}
break;
case 3:
//開(kāi)始查找單詞含義,在數(shù)據(jù)庫(kù)中插入查找時(shí)間戳記錄,并把查找結(jié)果發(fā)送給客戶端
if(read(accept_sock_fd, &user, sizeof(struct message_user)) == -1)
{
perror("fail recv word");
exit(-1);
}
sprintf(sql_cmd1,"select meaning from word where word='%s'",user.word);
if(sqlite3_get_table(db, sql_cmd1, &resultp, &nrow, &ncolumn, &errmsg) != 0)
{
printf("fail exec %s\n",errmsg);
exit(-1);
}
if(nrow == 0)
{
user.err = 1;
write(accept_sock_fd, &user,sizeof(struct message_user));
break;
}
if(nrow != 0)
{
strcpy(user.meaning, resultp[ncolumn]);
user.err = 0;
write(accept_sock_fd, &user,sizeof(struct message_user));
sprintf(sql_cmd1, "insert into record values ('%s','%s')", user.name, user.word);
if(sqlite3_exec(db,sql_cmd1, NULL, NULL, &errmsg) != 0)
{
printf("fail ecec %s\n",errmsg);
exit(-1);
}
time(&timep);
strcpy(time_c, ctime(&timep));
sprintf(buff, "%s用戶%s查找單詞%s\n", time_c, user.name, user.word);
write(fd, buff, strlen(buff));
break;
}
case 4:
//查找歷史記錄
read(accept_sock_fd, &user, sizeof(struct message_user));
if(user.binary == 0)
{
sprintf(sql_cmd1,"select word from record where name='%s'",user.name);
}
if(user.binary == 1)
{
sprintf(sql_cmd1,"select name from record where word='%s'",user.word);
}
if(sqlite3_get_table(db, sql_cmd1, &resultp, &nrow, &ncolumn, &errmsg) != 0)
{
printf("fail exec %s\n",errmsg);
exit(-1);
}
if( nrow == 0 )
{
user.err = 1;
write(accept_sock_fd, &user, sizeof(struct message_user));
break;
}
if( nrow != 0)
{
user.err = 0;
j = ncolumn;
for(i = 0; i < nrow; i++)
{
strcpy(user.record[i], resultp[j++]);
}
user.nrow = nrow;
write(accept_sock_fd, &user, sizeof(struct message_user));
time(&timep);
strcpy(time_c, ctime(&timep));
sprintf(buff, "%s用戶%s查看歷史記錄\n", time_c, user.name);
write(fd, buff, strlen(buff));
}
break;
case 5:
//查看個(gè)人信息
read(accept_sock_fd, &user, sizeof(struct message_user));
sprintf(sql_cmd1, "select * from user where name='%s'", user.name);
sqlite3_exec(db, ".header on", NULL, NULL, &errmsg);
sqlite3_get_table(db, sql_cmd1, &resultp, &nrow, &ncolumn, &errmsg);
sqlite3_exec(db, ".header off", NULL, NULL, &errmsg);
if( nrow == 0 )
{
user.err = 1;
write(accept_sock_fd, &user, sizeof(struct message_user));
break;
}
if( nrow != 0)
{
user.err = 0;
index = ncolumn;
for(i = 0; i < nrow; i++)
{
for(j = 0; j < ncolumn; j++)
{
strcpy(user.record[j], resultp[index++]);
strcpy(user.head[j], resultp[j]);
}
}
user.nrow = nrow;
user.ncolumn = ncolumn;
write(accept_sock_fd, &user, sizeof(struct message_user));
time(&timep);
strcpy(time_c, ctime(&timep));
sprintf(buff, "%s用戶%s查看個(gè)人信息\n", time_c, user.name);
write(fd, buff, strlen(buff));
}
break;
case 6:
//修改個(gè)人信息
read(accept_sock_fd, &user, sizeof(struct message_user));
if(user.update == 0)
{
sprintf(sql_cmd1,"select password from user where name='%s'",user.name);
sqlite3_get_table(db, sql_cmd1, &resultp, &nrow, &ncolumn, &errmsg);
num = strcmp(user.password, resultp[ncolumn]);
if(num != 0)
{
user.nrow = 0;
write(accept_sock_fd, &user, sizeof(struct message_user));
break;
}
if(num == 0)
{
user.nrow = 1;
write(accept_sock_fd, &user, sizeof(struct message_user));
read(accept_sock_fd, &user, sizeof(struct message_user));
sprintf(sql_cmd2,"update user set password='%s' where name='%s'", user.password, user.name);
if(sqlite3_get_table(db, sql_cmd2, &resultp, &nrow, &ncolumn, &errmsg) != 0)
{
user.err = 1;
}
else
user.err = 0;
write(accept_sock_fd, &user, sizeof(struct message_user));
time(&timep);
strcpy(time_c, ctime(&timep));
sprintf(buff, "%s用戶%s修改個(gè)人密碼為%s\n", time_c, user.name, user.password);
write(fd, buff, strlen(buff));
break;
}
}
if(user.update == 1)
{
sprintf(sql_cmd1,"update user set telephone='%s' where name='%s'", user.telephone, user.name);
if(sqlite3_get_table(db, sql_cmd1, &resultp, &nrow, &ncolumn, &errmsg) != 0)
{
user.err = 1;
}
else
user.err = 0;
write(accept_sock_fd, &user, sizeof(struct message_user));
time(&timep);
strcpy(time_c, ctime(&timep));
sprintf(buff, "%s用戶%s修改個(gè)人電話為%s\n", time_c, user.name, user.telephone);
write(fd, buff, strlen(buff));
break;
}
if(user.update == 2)
{
sprintf(sql_cmd1,"update user set address='%s' where name='%s'", user.address, user.name);
if(sqlite3_get_table(db, sql_cmd1, &resultp, &nrow, &ncolumn, &errmsg) != 0)
{
user.err = 1;
}
else
user.err = 0;
write(accept_sock_fd, &user, sizeof(struct message_user));
time(&timep);
strcpy(time_c, ctime(&timep));
sprintf(buff, "%s用戶%s修改個(gè)人地址為%s\n", time_c, user.name, user.address);
write(fd, buff, strlen(buff));
break;
}
case 0:
//關(guān)閉數(shù)據(jù)
read(accept_sock_fd, &user, sizeof(struct message_user));
sprintf(sql_cmd1, "update user set state=0 where name='%s'", user.name);
sqlite3_exec(db, sql_cmd1, NULL, NULL,&errmsg);
time(&timep);
strcpy(time_c, ctime(&timep));
sprintf(buff, "%s用戶%s退出\n", time_c, user.name);
write(fd, buff, strlen(buff));
break;
}
if(user.flag == 0)
break;
}
sqlite3_close(db);
pthread_exit(NULL);
}
//管理員模式顯示所有用戶
void fun_admin_show(sqlite3 *db)
{
char *errmsg, **resultp;
int nrow, ncolumn, i, j, index;
if(sqlite3_get_table(db, "select * from user", &resultp, &nrow, &ncolumn, &errmsg) != 0)
{
printf("fail admin show : %s\n",errmsg);
return;
}
index = ncolumn;
for(i = 0; i < nrow; i++)
{
for(j = 0; j < ncolumn; j++)
{
printf("%s:%s\n", resultp[j], resultp[index++]);
}
printf("-------------------------------------\n");
}
}
//管理員模式修改用戶信息
void fun_admin_alter(sqlite3 *db)
{
char name[24];
char telephone[24];
char address[24];
int alter_cmd;
char sql[128];
char *errmsg, **resultp;
int nrow, ncolumn, i, j, index;
while(1)
{
printf("請(qǐng)輸入您要修改的用戶名:");
scanf("%s",name);
sprintf(sql, "select * from user where name='%s'",name);
sqlite3_get_table(db, sql, &resultp, &nrow, &ncolumn, &errmsg);
if(nrow == 0)
{
printf("沒(méi)有此用戶,請(qǐng)更換用戶名\n");
}
if(nrow != 0)
{
while(1)
{
printf("請(qǐng)輸入您要修改的屬性(0/電話,1/地址):");
scanf("%d",&alter_cmd);
if(alter_cmd > 1 || alter_cmd < 0)
{
printf("輸入錯(cuò)誤,請(qǐng)重新輸入\n");
}
else
{
if(alter_cmd == 0)
{
printf("請(qǐng)輸入需要更改的新電話號(hào)碼:");
scanf("%s",telephone);
sprintf(sql, "update user set telephone='%s' where name='%s'", telephone, name);
if(sqlite3_get_table(db, sql, &resultp, &nrow, &ncolumn, &errmsg) == 0)
{
printf("更改成功!\n");
break;
}
}
if(alter_cmd == 1)
{
printf("請(qǐng)輸入需要更改的新地址:");
scanf("%s",address);
sprintf(sql, "update user set address='%s' where name='%s'", address, name);
if(sqlite3_get_table(db, sql, &resultp, &nrow, &ncolumn, &errmsg) == 0)
{
printf("更改成功!\n");
break;
}
}
}
}
break;
}
}
}
//管理員模式添加用戶
void fun_admin_add(sqlite3 *db)
{
char name[24];
char password[24];
char telephone[24];
char address[24];
int state;
char sql[128];
char *errmsg, **resultp;
int nrow, ncolumn, i, j, index;
while(1)
{
printf("請(qǐng)輸入您要添加的用戶名:");
scanf("%s",name);
sprintf(sql, "select * from user where name='%s'",name);
sqlite3_get_table(db, sql, &resultp, &nrow, &ncolumn, &errmsg);
if(nrow == 1)
{
printf("該用戶已存在,請(qǐng)更換用戶名\n");
}
if(nrow == 0)
{
printf("請(qǐng)輸入您的密碼:");
scanf("%s",password);
printf("請(qǐng)輸入您的電話:");
scanf("%s",telephone);
printf("請(qǐng)輸入您的地址:");
scanf("%s",address);
state = 0;
sprintf(sql, "insert into user values ('%s', '%s', '%s', '%s', %d)", name, password, telephone, address, state);
if(sqlite3_exec(db, sql, NULL, NULL, &errmsg) == 0)
{
printf("添加成功!");
break;
}
else
{
printf("添加失敗\n");
}
}
}
}
//管理員刪除用戶
void fun_admin_delete(sqlite3 *db)
{
char name[24];
char sql[128];
char *errmsg, **resultp;
int nrow, ncolumn;
while(1)
{
printf("請(qǐng)輸入您要?jiǎng)h除的用戶名:");
scanf("%s", name);
sprintf(sql, "select * from user where name='%s'",name);
sqlite3_get_table(db, sql, &resultp, &nrow, &ncolumn, &errmsg);
if(nrow == 0)
{
printf("該用戶不存在,請(qǐng)更換用戶名\n");
}
if(nrow != 0)
{
sprintf(sql, "delete from user where name='%s'",name);
if(sqlite3_get_table(db, sql, &resultp, &nrow, &ncolumn, &errmsg) == 0)
{
printf("刪除用戶成功\n");
break;
}
}
}
}
//服務(wù)器的管理員模式
void *fun_admin_pthread()
{
int f_cmd;
char name[24];
char telephone[24];
char address[24];
char admin;
sqlite3 *db;
if(sqlite3_open("wmk.db", &db) != 0)
{
perror("fail open sqlite3");
exit(-1);
}
while(1)
{
printf("請(qǐng)按A進(jìn)入管理員模式\n");
scanf("%c",&admin);
if(admin == 'A')
{
system("clear");
printf("*********************************\n");
printf("管理員模式開(kāi)啟\n");
printf("*********************************\n");
printf("1:顯示所有用戶信息\n");
printf("2:修改用戶信息\n");
printf("3:添加用戶\n");
printf("4:刪除用戶\n");
printf("0:退出\n");
printf("*********************************\n");
while(f_cmd)
{
printf("請(qǐng)輸入您要進(jìn)行的操作:");
scanf("%d",&f_cmd);
if(f_cmd < 0 || f_cmd > 4)
{
printf("輸入有誤,請(qǐng)重新輸入\n");
}
switch(f_cmd)
{
case 1:
fun_admin_show(db);
break;
case 2:
fun_admin_alter(db);
break;
case 3:
fun_admin_add(db);
break;
case 4:
fun_admin_delete(db);
break;
case 0:
break;
}
if(f_cmd == 0)
{
break;
}
printf("請(qǐng)按回車(chē)鍵繼續(xù):");
getchar();
while(getchar() != '\n')
{
;
}
system("clear");
printf("*********************************\n");
printf("管理員模式開(kāi)啟\n");
printf("*********************************\n");
printf("1:顯示所有用戶信息\n");
printf("2:修改用戶信息\n");
printf("3:添加用戶\n");
printf("4:刪除用戶\n");
printf("0:退出\n");
printf("*********************************\n");
}
}
}
}
int main(int argc, char *argv[])
{
Mess_user user;
int sock_fd, accept_sock_fd, addrlen;
pthread_t pid, f_pid;
int *fun_sockfd = NULL;
char word[18] = {0};
char sql_cmd[128] = {0};
int flag;
sqlite3 *db;
char *errmsg;
fd = open("log.txt", O_RDWR|O_CREAT|O_APPEND, 0666);
struct sockaddr_in server_addr, client_addr;
memset(&server_addr, 0, sizeof(server_addr));
server_addr.sin_family = AF_INET;
server_addr.sin_port = htons(2342);
server_addr.sin_addr.s_addr = inet_addr("192.168.1.165");
//創(chuàng)建套接字
sock_fd = socket(AF_INET, SOCK_STREAM, 0);
if(sock_fd == -1)
{
perror("fail socket");
exit(-1);
}
//綁定套接字
if(bind(sock_fd, (struct sockaddr *)&server_addr, sizeof(server_addr)) == -1)
{
perror("fail bind");
exit(-1);
}
//監(jiān)聽(tīng)套接字
if(listen(sock_fd, 4) == -1)
{
perror("fail listen");
exit(-1);
}
//管理員模式
pthread_create(&f_pid, NULL, fun_admin_pthread, NULL);
//使用并發(fā)服務(wù)器,可保證多客戶端使用
while(1)
{
memset(&user, 0, sizeof(struct message_user));
addrlen = sizeof(client_addr);
accept_sock_fd = accept(sock_fd, (struct sockaddr *)&client_addr,(socklen_t *)&addrlen);
if(accept_sock_fd == -1)
{
perror("fail accept");
exit(-1);
}
fun_sockfd = (int *)malloc(sizeof(int));
*fun_sockfd= accept_sock_fd;
pthread_create(&pid, NULL, fun_pthread, (void*)fun_sockfd);
}
return 0;
}
復(fù)制代碼
所有資料51hei提供下載:
在線詞典.rar
(975.63 KB, 下載次數(shù): 17)
2018-8-26 23:54 上傳
點(diǎn)擊文件名下載附件
在線電子詞典源碼
下載積分: 黑幣 -5
歡迎光臨 (http://www.zg4o1577.cn/bbs/)
Powered by Discuz! X3.1
主站蜘蛛池模板:
久久一区二区三区四区
|
成人免费区一区二区三区
|
精产嫩模国品一二三区
|
天天干人人
|
成人在线精品视频
|
鲁大师一区影视
|
岛国毛片在线观看
|
亚洲www
|
国产性生活一级片
|
亚洲精品一区在线观看
|
国产精品久久久久久久久久了
|
欧美日韩电影一区二区
|
亚洲成人一区二区三区
|
аⅴ资源新版在线天堂
|
色中文在线
|
色爽女
|
一级黄色毛片免费
|
免费一区二区三区
|
美女久久
|
一级欧美
|
日韩欧美国产精品一区二区三区
|
成人毛片视频免费
|
一区二区三区视频在线观看
|
成人欧美一区二区三区在线播放
|
国产一区二区三区在线观看免费
|
日本久久综合网
|
在线观看成人
|
成人片免费看
|
99精品国产一区二区三区
|
欧美一区2区三区3区公司
|
一级a性色生活片久久毛片波多野
|
国产日韩欧美一区
|
午夜激情国产
|
久久久久国产精品午夜一区
|
国产精品欧美一区二区三区
|
视频二区在线观看
|
视频第一区
|
黄色精品
|
精品视频免费
|
日韩精品一区二区三区高清免费
|
51ⅴ精品国产91久久久久久
|