既然我们已经写完了电子词典,那不妨将学生信息管理和电子词典合并一下
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
//基于TCP通信,使用数据库完成学生信息管理系统,并增加电子词典功能
//服务端
int socket_ok = -1;
char sql[512];//存储服务端发来的sql
//查找操作
void select_info(sqlite3* mydb){
//操作数据库,执行特定的sql语句
//定义sql语句,查询
char sql2[128] = "select * from student;";
//操作数据库
char** resultp; //resultp里面存储了数据表中的所有数据
int row;
int column;
int n=0;
sqlite3_get_table(mydb,sql2,&resultp,&row,&column,NULL);
char resultStr[4096] = "";//存储结果集
memset(resultStr,0,sizeof(resultStr));
//拼接字符串
for(int i=0;i<(row+1)*column;i++)//(row+1)这里加1,是因为没有把头算进去,我们要想输出头,就需要+1
{
strcat(resultStr, resultp[i]);//拼接字符串
strcat(resultStr, "\t\t"); // 使用制表符分隔
if((i+1)%column == 0)//这里是换行,每当下标i取模列为0的时候换行
{
strcat(resultStr, "\n");//换行
}
}
//发送数据
send(socket_ok,resultStr,sizeof(resultStr),0);
}
//增加操作
void add(sqlite3* mydb){
char** resultp; //resultp里面存储了数据表中的所有数据
int row;
int column;
recv(socket_ok,sql,sizeof(sql),0);//阻塞等待,这里等客户端发来sql语句
//执行sql
sqlite3_get_table(mydb,sql,&resultp,&row,&column,NULL);
char buf[12] = "1";
//发送数据
send(socket_ok,buf,sizeof(buf),0);
memset(sql,0,sizeof(sql));
}
//删除操作
void delete_info(sqlite3* mydb){
//接收客户端发来的名字
char name[12];
memset(name,0,sizeof(name));
recv(socket_ok,name,sizeof(name),0);
//判断名字是否合法
char** resultp; //resultp里面存储了数据表中的所有数据
int row;
int column;
char sql1[256] = "select name from student;";
sqlite3_get_table(mydb,sql1,&resultp,&row,&column,NULL);
for(int i=1;i<(row+1)*column;i++){
if(strcmp(name,resultp[i])==0){
//到这里名字合法,可以执行删除操作
//拼接sql语句
snprintf(sql,sizeof(sql),"delete from student where name = '%s';",name);
sqlite3_get_table(mydb,sql,&resultp,&row,&column,NULL);
//发送结果
char msg2[128] = "0";
send(socket_ok,msg2,sizeof(msg2),0);
memset(sql,0,sizeof(sql));
return;
}
}
//程序走到这就说明,要删除的学生不存在
//发送结果
char msg[128] = "-1";
send(socket_ok,msg,strlen(msg),0);
}
//修改操作
void update(sqlite3* mydb){
//接收客户端发来的名字
char name[12];
memset(name,0,sizeof(name));
recv(socket_ok,name,sizeof(name),0);
//判断名字是否合法
char** resultp; //resultp里面存储了数据表中的所有数据
int row;
int column;
char sql1[256] = "select name from student;";
sqlite3_get_table(mydb,sql1,&resultp,&row,&column,NULL);
//遍历判断名字是否合法
for(int i=1;i<(row+1)*column;i++){
if(strcmp(name,resultp[i])==0){
//到这里名字合法,可以执行修改操作
//发送结果
char msg1[128] = "1";
send(socket_ok,msg1,sizeof(msg1),0);
//接收sql
recv(socket_ok,sql,sizeof(sql),0);//阻塞等待,这里等客户端发来sql语句
sqlite3_get_table(mydb,sql,&resultp,&row,&column,NULL);
//发送结果
char msg2[128] = "0";
send(socket_ok,msg2,sizeof(msg2),0);
memset(sql,0,sizeof(sql));
return;
}
}
//程序走到这就说明,要修改的学生不存在
//发送结果
char msg[128] = "-1";
send(socket_ok,msg,sizeof(msg),0);
}
//计算平均分
void avg(sqlite3* mydb){
char** resultp; //resultp里面存储了数据表中的所有数据
int row;
int column;
//拼接字符串
char sql1[256]= "select score from student;";
sqlite3_get_table(mydb,sql1,&resultp,&row,&column,NULL);
int sum = 0;
int num = 0;
for(int i=1;i<(row+1)*column;i++){
sum += atoi(resultp[i]);
num++;
}
float avg_sum = sum/(float)num;
char msg[12];
snprintf(msg,sizeof(msg),"%lf",avg_sum);
//发送数据
send(socket_ok,msg,sizeof(msg),0);
}
//查找一个学生信息
void select_one(sqlite3* mydb){
//接收客户端发来的名字
char name[12];
memset(name,0,sizeof(name));
recv(socket_ok,name,sizeof(name),0);
//操作数据库,执行特定的sql语句
char** resultp;
int row;
int column;
snprintf(sql,sizeof(sql),"select * from student where name = '%s';",name);
printf("%s\n",sql);
sqlite3_get_table(mydb,sql,&resultp,&row,&column,NULL);
char resultStr[4096] = "";//存储结果集
memset(resultStr,0,sizeof(resultStr));
//拼接字符串
for(int i=0;i<(row+1)*column;i++)//(row+1)这里加1,是因为没有把头算进去,我们要想输出头,就需要+1
{
strcat(resultStr, resultp[i]);//拼接字符串
strcat(resultStr, "\t\t"); // 使用制表符分隔
if((i+1)%column == 0)//这里是换行,每当下标i取模列为0的时候换行
{
strcat(resultStr, "\n");//换行
}
}
//发送数据
send(socket_ok,resultStr,sizeof(resultStr),0);
memset(sql,0,sizeof(sql));
}
//查询学生老师信息
void sel_stu_tea(sqlite3* mydb){
//接收客户端发来的名字
char name[12];
memset(name,0,sizeof(name));
recv(socket_ok,name,sizeof(name),0);
char** resultp; //resultp里面存储了数据表中的所有数据
int row;
int column;
//拼接sql语句
snprintf(sql,sizeof(sql),"select student.*,teacher.name from student,teacher where teacher.teacher_stu = student.name and student.name = '%s';",name);
sqlite3_get_table(mydb,sql,&resultp,&row,&column,NULL);
char resultStr[4096] = "";//存储结果集
memset(resultStr,0,sizeof(resultStr));
//拼接字符串
for(int i=0;i<(row+1)*column;i++)//(row+1)这里加1,是因为没有把头算进去,我们要想输出头,就需要+1
{
strcat(resultStr, resultp[i]);//拼接字符串
strcat(resultStr, "\t\t"); // 使用制表符分隔
if((i+1)%column == 0)//这里是换行,每当下标i取模列为0的时候换行
{
strcat(resultStr, "\n");//换行
}
}
//发送数据
send(socket_ok,resultStr,sizeof(resultStr),0);
memset(sql,0,sizeof(sql));
}
//给学生添加一个老师
void add_tea(sqlite3* mydb){
char** resultp; //resultp里面存储了数据表中的所有数据
int row;
int column;
recv(socket_ok,sql,sizeof(sql),0);//阻塞等待,这里等客户端发来sql语句
//执行sql
sqlite3_get_table(mydb,sql,&resultp,&row,&column,NULL);
char buf[12] = "1";
//发送数据
send(socket_ok,buf,sizeof(buf),0);
memset(sql,0,sizeof(sql));
}
//查找所有老师信息
void select_tea(sqlite3* mydb){
//定义sql语句,查询
char sql2[128] = "select * from teacher;";
//操作数据库
char** resultp;
int row;
int column;
int n=0;
sqlite3_get_table(mydb,sql2,&resultp,&row,&column,NULL);
char resultStr[4096] = "";//存储结果集
memset(resultStr,0,sizeof(resultStr));
//拼接字符串
for(int i=0;i<(row+1)*column;i++)//(row+1)这里加1,是因为没有把头算进去,我们要想输出头,就需要+1
{
strcat(resultStr, resultp[i]);//拼接字符串
strcat(resultStr, "\t\t"); // 使用制表符分隔
if((i+1)%column == 0)//这里是换行,每当下标i取模列为0的时候换行
{
strcat(resultStr, "\n");//换行
}
}
//发送数据
send(socket_ok,resultStr,sizeof(resultStr),0);
}
//登录管理
void login(sqlite3* mydb){
char** resultp; //resultp里面存储了数据表中的所有数据
int row;
int column;
//接收账号
char id[12];
memset(id,0,sizeof(id));
recv(socket_ok,id,sizeof(id),0);
//接收账号
char password[12];
memset(password,0,sizeof(password));
recv(socket_ok,password,sizeof(password),0);
snprintf(sql,sizeof(sql),"select * from user where id = '%s' and password = '%s'",id,password);
//执行sql
sqlite3_get_table(mydb,sql,&resultp,&row,&column,NULL);
char resultStr[4096] = "";//存储结果集
memset(resultStr,0,sizeof(resultStr));
//拼接字符串
for(int i=0;i<(row+1)*column;i++)//(row+1)这里加1,是因为没有把头算进去,我们要想输出头,就需要+1
{
strcat(resultStr, resultp[i]);//拼接字符串
strcat(resultStr, "\t\t"); // 使用制表符分隔
if((i+1)%column == 0)//这里是换行,每当下标i取模列为0的时候换行
{
strcat(resultStr, "\n");//换行
}
}
//发送数据
send(socket_ok,resultStr,sizeof(resultStr),0);
memset(sql,0,sizeof(sql));
}
//注册管理
void user_register(sqlite3* mydb){
char** resultp;
int row;
int column;
//接收账号
char id[12];
memset(id,0,sizeof(id));
recv(socket_ok,id,sizeof(id),0);
//接收账号
char password[12];
memset(password,0,sizeof(password));
recv(socket_ok,password,sizeof(password),0);
//首先检查账号合不合法
char sql2[128] = "select * from user;";
sqlite3_get_table(mydb,sql2,&resultp,&row,&column,NULL);
for(int i=0;i<(row+1)*column;i++){
if(strcmp(id,resultp[i])==0){//账号重复,非法
char msg[12] = "-1";
send(socket_ok,msg,strlen(msg),0);
return;
}
}
//到这里账号合法
snprintf(sql,sizeof(sql),"insert into user(id,password)values('%s','%s')",id,password);
//执行sql
sqlite3_get_table(mydb,sql,&resultp,&row,&column,NULL);
char msg2[12] = "1";
send(socket_ok,msg2,strlen(msg2),0);
memset(sql,0,sizeof(sql));
}
//记录查询单词记录
void history(sqlite3* mydb,char str1[],char str2[]){
char** resultp;
int row;
int column;
//拼接sql
memset(sql,0,sizeof(sql));
snprintf(sql,sizeof(sql),"insert into dict_history(word,explain)values('%s','%s');",str1,str2);
sqlite3_get_table(mydb,sql,&resultp,&row,&column,NULL);
memset(sql,0,sizeof(sql));
}
//字典功能
void dict(sqlite3* mydb){
//首先读出字典的数据
//使用标准io打开字典文件
FILE* fp = fopen("./dict.txt","r");
if(fp==NULL){
perror("open dict.txt failed");
return;
}
//接收查询的单词
char msg[30];
memset(msg,0,sizeof(msg));
recv(socket_ok,msg,sizeof(msg),0);
printf("查询%s\n",msg);
char buf[1024];//存储一行数据
memset(buf,0,sizeof(buf));
char msg2[1024];//存储单词解释
//feof 函数用于检查文件流的文件结束标志。如果 feof(fp) 返回 0(假),
//表示文件流 fp 还没有到达文件的末尾,如果返回非零值(真),表示文件流 fp 已经到达文件的末尾。
while(fgets(buf,sizeof(buf),fp)!=NULL && !feof(fp)){//确保读到了文件尾
//这里为了避免记录单词查询记录时出错,我们把buf最后的回车符去掉
size_t ret = strcspn(buf,"\n");// 使用strcspn函数找到回车符的位置
// 如果找到回车符,则将其替换为字符串结束符'\0'
if (buf[ret] == '\n') {
buf[ret] = '\0';
}
char dest[25];//存储读出来的单词
memset(dest,0,sizeof(dest));//清0
//sscanf 函数在提取数据时是以空白字符(例如空格、制表符、换行符等)作为分隔符的。当你使用 "%s" 格式指定来提取一个字符串时
//,sscanf 会从输入字符串 input 中找到第一个非空白字符,然后开始提取字符,直到再次遇到空白字符为止。
sscanf(buf,"%s",dest);//观察字典文件可知,只需要拷贝前17个字节中的单词部分
if( strcmp(msg,dest) == 0 ){//匹配查询的单词
memset(msg2,0,sizeof(msg2));
strcpy(msg2,&buf[17]);//从第18个字节开始一直到最后,就是单词的解释
send(socket_ok,msg2,strlen(msg2),0);
history(mydb,msg,msg2);//查询到记录查询
return;
}
memset(buf,0,sizeof(buf));
}
//程序到这里说明没有找到单词
char msg3[64] = "-1";
send(socket_ok,msg3,strlen(msg3),0);
fclose(fp);
}
//查看单词查询记录
void dict_history(sqlite3* mydb){
//操作数据库,执行特定的sql语句
char sql2[128] = "select * from dict_history;";
//操作数据库
char** resultp; //resultp里面存储了数据表中的所有数据
int row;
int column;
sqlite3_get_table(mydb,sql2,&resultp,&row,&column,NULL);
char resultStr[4096] = "";//存储结果集
memset(resultStr,0,sizeof(resultStr));
//拼接字符串
for(int i=0;i<(row+1)*column;i++)//(row+1)这里加1,是因为没有把头算进去,我们要想输出头,就需要+1
{
strcat(resultStr, resultp[i]);//拼接字符串
strcat(resultStr, "\t\t"); // 使用制表符分隔
if((i+1)%column == 0)//这里是换行,每当下标i取模列为0的时候换行
{
strcat(resultStr, "\n");//换行
}
}
//发送数据
send(socket_ok,resultStr,sizeof(resultStr),0);
}
int main(int argc,char** argv)
{
//打开数据库
sqlite3* mydb = NULL;
int ret = sqlite3_open("./stu.db",&mydb);
if(ret==-1){
perror("open failed");
return -1;
}
//1. 创建套接字
int socket_fd = socket(AF_INET,SOCK_STREAM,0);
if(socket_fd == -1){
printf("创建套接字失败\n");
return -1;
}
//2. 绑定套接字与服务端网络地址
struct sockaddr_in s_addr;
s_addr.sin_family = AF_INET;
s_addr.sin_port = htons(atoi(argv[2]));
s_addr.sin_addr.s_addr = inet_addr(argv[1]);
//绑定
int bind_ok = bind(socket_fd,(struct sockaddr*)&s_addr,sizeof(s_addr));
if(bind_ok==-1){
perror("bind failed");
}
//3. 设置监听
int socket_listen = listen(socket_fd,4);
//4.等待对端连接
printf("等待连接\n");
struct sockaddr_in c_addr;//保存客户端地址信息
socklen_t size_len = sizeof(c_addr);
socket_ok = accept(socket_fd,(struct sockaddr*)&c_addr,&size_len);
if(socket_ok==-1){
perror("连接失败\n");
return -1;
}
printf("连接成功\n");
char buf[128];
while(1){
//5.接收客户端发来的sql语句
memset(buf,0,sizeof(buf));
recv(socket_ok,buf,sizeof(buf),0);//阻塞等待,接收操作标志位
printf("服务端接收到 %s 号操作\n",buf);
int input = atoi(buf);
switch (input)
{
case 1:
add(mydb);
break;
case 2:
delete_info(mydb);
break;
case 3:
update(mydb);
break;
case 4:
select_info(mydb);
break;
case 5:
select_one(mydb);
break;
case 6:
sel_stu_tea(mydb);
break;
case 7:
add_tea(mydb);
break;
case 8:
select_tea(mydb);
break;
case 9:
avg(mydb);
break;
case 10:
login(mydb);
break;
case 11:
user_register(mydb);
break;
case 12:
dict(mydb);
break;
case 13:
dict_history(mydb);
break;
case 0:
exit(0);
break;
default:
printf("输入错误,请重新输入\n");
break;
}
}
close(socket_fd);
close(socket_ok);
return 0;
}
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
//基于TCP通信,使用数据库完成学生信息管理系统,并增加电子词典功能
//客户端
int socket_fd = -1;
char result[4096];
//查找操作
void select_info(){
//发送操作标志位
char buf[128] = "4";
//客户端发送拼接好的sql字符串给服务端
send(socket_fd,buf,strlen(buf),0);
//接收消息
memset(result,0,sizeof(result));
recv(socket_fd,result,sizeof(result),0);//阻塞等待
if(result[0] != '\0'){
printf("%s\n",result);
}else{
printf("查询失败\n");
}
}
//增加操作
void add(){
//发送操作标志位给服务器
char buf[12] = "1";
send(socket_fd,buf,strlen(buf),0);
char id[12];
printf("请输入学生学号:");
scanf("%s",id);
char name[22];
printf("请输入学生姓名:");
scanf("%s",name);
char sex[12];
printf("请输入学生性别:");
scanf("%s",sex);
char score[12];
printf("请输入学生成绩:");
scanf("%s",score);
//定义sql语句
char sql[256];
//拼接sql语句
snprintf(sql,sizeof(sql),"insert into student(id,name,sex,score)values('%s','%s','%s','%s');",id,name,sex,score);
//发送sql数据给服务器
send(socket_fd,sql,strlen(sql),0);
//接收消息
memset(result,0,sizeof(result));
recv(socket_fd,result,sizeof(result),0);//阻塞等待
if(strcmp(result,"1")==0){
printf("添加成功\n");
}else{
printf("添加失败\n");
}
}
//删除操作
void delete_info(){
//发送操作标志位
char buf[12] = "2";
send(socket_fd,buf,sizeof(buf),0);
//发送要删除的名字
char name[12];
printf("请输入你要删除的学生姓名:");
scanf("%s",name);
send(socket_fd,name,strlen(name),0);
//接收结果
memset(result,0,sizeof(result));
recv(socket_fd,result,sizeof(result),0);
if(strcmp(result,"0")==0){
printf("删除成功\n");
}else if(strcmp(result,"-1")==0){
printf("删除失败\n");
}
}
//修改操作
void update(){
//发送操作标志位
char buf[12] = "3";
send(socket_fd,buf,sizeof(buf),0);
char name[12];
printf("请输入你要修改的学生姓名:");
scanf("%s",name);
//发送要修改人的姓名
send(socket_fd,name,strlen(name),0);
//接收结果
memset(result,0,sizeof(result));
recv(socket_fd,result,sizeof(result),0);
if(strcmp(result,"-1")==0){
printf("要修改的人不存在\n");
return;
}else if(result,"1"){
printf("名字合法\n");
}
//我的删除思路就是重新添加
char id[12];
printf("请 重新 输入学生学号:");
scanf("%s",id);
char name2[12];
printf("请 重新 输入学生姓名:");
scanf("%s",name2);
char sex[12];
printf("请 重新 输入学生性别:");
scanf("%s",sex);
char score[12];
printf("请 重新 输入学生成绩:");
scanf("%s",score);
//定义sql语句
char sql2[256];
//拼接sql语句
snprintf(sql2,sizeof(sql2),"update student set id='%s',name='%s',sex='%s',score='%s' where name = '%s';",id,name2,sex,score,name);
//向服务端发送sql数据
send(socket_fd,sql2,strlen(sql2),0);
//接收结果
memset(result,0,sizeof(result));
recv(socket_fd,result,sizeof(result),0);
if(strcmp(result,"0")==0){
printf("修改成功\n");
}
}
//计算平均分
void avg(){
//发送操作标志位
char buf[12] = "9";
send(socket_fd,buf,sizeof(buf),0);
//接收结果
memset(result,0,sizeof(result));
recv(socket_fd,result,sizeof(result),0);
printf("平均分为:%s\n",result);//保留两位小数
}
//查找一个学生信息
void select_one(){
//发送操作标志位
char buf[12] = "5";
send(socket_fd,buf,sizeof(buf),0);
char name[12];
printf("请输入你要查找的学生姓名:");
// memset(name,0,sizeof(name));
scanf("%s",name);
//向服务端发送数据
send(socket_fd,name,strlen(name),0);
//接收消息
memset(result,0,sizeof(result));
recv(socket_fd,result,sizeof(result),0);
if(result[0] != '\0'){
printf("%s\n",result);
}else{
printf("查询失败\n");
}
}
//查询学生老师信息
void sel_stu_tea(){
//发送操作标志位
char buf[12] = "6";
send(socket_fd,buf,sizeof(buf),0);
char name[12];
printf("请输入你要查询的学生姓名:");
scanf("%s",name);
send(socket_fd,name,strlen(name),0);
//接收消息
memset(result,0,sizeof(result));
recv(socket_fd,result,sizeof(result),0);//阻塞等待
if(result[0] != '\0'){
printf("%s\n",result);
}else{
printf("查询失败\n");
}
}
//给学生添加一个老师
void add_tea(){
//发送操作标志位
char buf[12] = "7";
send(socket_fd,buf,sizeof(buf),0);
char name[12];
printf("请输入老师姓名:");
scanf("%s",name);
char sex[12];
printf("请输入老师性别:");
scanf("%s",sex);
char teacher_stu[12];
printf("请输入学生姓名:");
scanf("%s",teacher_stu);
//定义sql语句
char sql[256];
//拼接sql语句
snprintf(sql,sizeof(sql),"insert into teacher(name,sex,teacher_stu)values('%s','%s','%s');",name,sex,teacher_stu);
//发送数据给服务器
send(socket_fd,sql,strlen(sql),0);
//接收消息
memset(result,0,sizeof(result));
recv(socket_fd,result,sizeof(result),0);//阻塞等待
if(strcmp(result,"1")==0){
printf("添加成功\n");
}else{
printf("添加失败\n");
}
}
//查找所有老师信息
void select_tea(){
//发送操作标志位
char buf[12] = "8";
send(socket_fd,buf,sizeof(buf),0);
//接收消息
memset(result,0,sizeof(result));
recv(socket_fd,result,sizeof(result),0);//阻塞等待
if(result[0] != '\0'){
printf("%s\n",result);
}else{
printf("查询失败\n");
}
}
//登录管理
int login(){
//发送操作标志位
char buf[12] = "10";
send(socket_fd,buf,sizeof(buf),0);
char id[12];
printf("请输入4位账号:");
scanf("%s",id);
//发送账号
send(socket_fd,id,strlen(id),0);
char password[12];
printf("请输入3位密码:");
scanf("%s",password);
//发送密码
send(socket_fd,password,strlen(password),0);
//接收消息
memset(result,0,sizeof(result));
recv(socket_fd,result,sizeof(result),0);//阻塞等待
if(result[0] != '\0'){//有账号且密码正确
return 1;
}else{//无账号或账号密码错误
return -1;
}
}
//注册管理
void user_register(){
//发送操作标志位
char buf[12] = "11";
send(socket_fd,buf,sizeof(buf),0);
char id[12];
printf("请输入4位账号:");
scanf("%s",id);
send(socket_fd,id,strlen(id),0);
char password[12];
printf("请输入3位密码:");
scanf("%s",password);
send(socket_fd,password,strlen(password),0);
//接收消息
memset(result,0,sizeof(result));
recv(socket_fd,result,sizeof(result),0);//阻塞等待
if(strcmp(result,"1")==0){//注册成功
printf("账号注册成功\n");
}else if(strcmp(result,"-1")==0){//账号非法
printf("账号重复,请重新输入\n");
}
}
//退出
void quit(){
//发送操作标志位
char buf[12] = "0";
send(socket_fd,buf,sizeof(buf),0);
}
//字典功能
void dict(){
//发送操作标志位
char buf[12] = "12";
send(socket_fd,buf,sizeof(buf),0);
char search[30];
printf("请输入你要查询的单词:");
scanf("%s",search);
//发送给服务端查询
send(socket_fd,search,strlen(search),0);
//接收查询结果
//接收消息
memset(result,0,sizeof(result));
recv(socket_fd,result,sizeof(result),0);
if(strcmp(result,"-1")==0){
printf("抱歉你的输入有误 或者 本词典没有收录此单词\n");
}else{
printf("%s\n",result);
}
}
//查看单词查询记录
void dict_history(){
//发送操作标志位
char buf[128] = "13";
//客户端发送拼接好的sql字符串给服务端
send(socket_fd,buf,strlen(buf),0);
//接收消息
memset(result,0,sizeof(result));
recv(socket_fd,result,sizeof(result),0);//阻塞等待
if(result[0] != '\0'){
printf("%s\n",result);
}else{
printf("查询失败\n");
}
}
void menu(){
printf("*********************************************************\n");
printf("**** 1. add 2. delete ****\n");
printf("**** 3. update 4. select ****\n");
printf("**** 5. select_one 6. sel_stu_tea ****\n");
printf("**** 7. add_tea 8. select_tea ****\n");
printf("**** 9. avg 10. dict ****\n");
printf("**** 11.dict_history 0. exit ****\n");
printf("*********************************************************\n");
}
void menu2(){
printf("*********************************************************\n");
printf("**** 1.login 2.register ****\n");
printf("*********************************************************\n");
}
void caidan(){
int input;
do{
printf("\n");
sleep(1);
menu();
printf("请输入你的操作:");
scanf("%d",&input);
switch (input)
{
case 1:
add();
break;
case 2:
delete_info();
break;
case 3:
update();
break;
case 4:
select_info();
break;
case 5:
select_one();
break;
case 6:
sel_stu_tea();
break;
case 7:
add_tea();
break;
case 8:
select_tea();
break;
case 9:
avg();
break;
case 10:
dict();
break;
case 11:
dict_history();
break;
case 0:
quit();
break;
default:
printf("输入错误,请重新输入\n");
break;
}
}while(input);
}
int main(int argc,char** argv)
{
//1. 创建套接字
socket_fd = socket(AF_INET,SOCK_STREAM,0);
if(socket_fd == -1){
printf("创建套接字失败\n");
return -1;
}
//2.初始化服务端网络地址
struct sockaddr_in s_addr;
s_addr.sin_family = AF_INET;
s_addr.sin_port = htons(atoi(argv[2]));
s_addr.sin_addr.s_addr = inet_addr(argv[1]);
//3. 请求连接
connect(socket_fd,(struct sockaddr*)&s_addr,sizeof(s_addr));
//先登录
int in;
do{
printf("\n");
sleep(1);
menu2();
printf("请输入你的操作:");
scanf("%d",&in);
int ret = -1;
switch (in)
{
case 1:
ret = login();
if(ret==1){
printf("登录成功\n");
caidan();
exit(0);
}else if(ret == -1){
printf("账号或者密码错误\n");
}
break;
case 2:
user_register();
break;
default:
printf("输入错误,请重新选择\n");
break;
}
}while(in);
close(socket_fd);
return 0;
}