嵌入式linux应用程序设计课程设计-多用户网络版学生学藉管理系统说明书内容摘要:

ad_handleclient(void *arg) 线程处理函数 int reg_check(struct message sock_msg) 核对注册请求 int log_check(struct message sock_msg) 核对登陆请求 计算参数所指定的文件中的记录的个数的函数 int count(char * a) 服务器信息存储 void handle_input(struct message sock_msg,Client_Inf client_inf) 读出学藉信息 void handle_display(Client_Inf client_inf) 删除信息查找 void handle_delete(struct message sock_msg,Client_Inf client_inf) 修改信息查找 void handle_update(struct message sock_msg,Client_Inf client_inf) 查询信息查找 void handle_select(struct message sock_msg,Client_Inf client_inf) 详细设计 主要函数功能详细说明: 客户端: void handle_regist() //提出注册请求 { 输 入用户名和两次密码; 发送给客户端; send_msg(sockfd,socket_msg)。 } void handle_login() //提出登陆请求 { 输入用户名和密码; send_msg(sockfd,socket_msg)。 } void handle_input() //学藉信息录入 { 12 输入学生学藉相关信息; send_msg(sockfd,socket_msg)。 } void handle_display() //发送显示信息请求 { 发送显示请求; send_msg(sockfd,socket_msg)。 } void handle_delet() //发送删除信息请求 { 发送删除请求; send_msg(sockfd,socket_msg)。 } void handle_update() //发送修改信息请求 { 发送修改请求; send_msg(sockfd,socket_msg)。 } void handle_select() //发送查询信息请求 { 发送查询请求; send_msg(sockfd,socket_msg)。 } void handle_exit() //退出 { exit(1)。 } 服务器 void user_manage() //用户管理函数 { 显示初始界面; } void *pthread_accept(void *arg) //等待接收 socket 连接线程处理 { int sockfd=*(int *)arg。 while(1) { =accept_sock(sockfd,amp。 )。 pthread_create(amp。 ,NULL,(void*)pthread_handleclient,(void*)amp。 client_inf)。 } } void *pthread_handleclient(void *arg) //线程处理函数 { 13 判断接收的标记信息 recv_msg(,amp。 sock_msg)。 转入到相应处理函数; } int reg_check(struct message sock_msg) //核对注册请求 { 依次从文件中读取信息 和接收到的信息相比; 都不相等则追加写入,注册成功; 否则注册失败; } int log_check(struct message sock_msg) //核对登陆请求 { 依次从文件中读取信息和接收到的 信息相比; 找到相等,登陆成功; 否则登陆失败; } int count(char * a) //计算参数所指定的文件中的记录的个数的函数 { if((fp=fopen(a,rb))==NULL)//只读方式打开指定文件 { printf(\nCannot open file\n)。 getchar()。 return 0。 } for(i=0。 !feof(fp)。 i++)//循环读取文件内记录直到文件尾 fread(amp。 socket_msg,sizeof(struct message ),1,fp)。 fclose(fp)。 } void handle_input(struct message sock_msg,Client_Inf client_inf) //服务器信息存储 { 将接收到的信息写入文件; fwrite(amp。 sock_msg, sizeof(sock_msg), 1, fp) } void handle_display(Client_Inf client_inf) //读出学藉信息 { 循环从文件中读出数据发送给客户端; fread(amp。 sock_msg, sizeof(struct message), 1, fp) send_msg(,sock_msg)。 } void handle_delete(struct message sock_msg,Client_Inf client_inf) //删除信息查找 { 创建包含学号信息的链表; 在链表中找到待删除的记录和文件中的记录比较; 14 找到后写入临时文件中,并跳过待删除的记录; for(con=0。 conamount。 con++) //amount 为文件中记录的个数 { if(con==offset) {fseek(fp,(long)sizeof(structmessage),1)。 continue。 } fread(amp。 sock_student, sizeof(struct message),1,fp)。 fwrite(amp。 sock_student, sizeof(struct message), 1, fp1)。 } 最后写回; } void handle_update(struct message sock_msg,Client_Inf client_inf) //修改信息查找 { 创建包含学号信息的链表; 在链表中找到待修改的记录并用接收到的记录履盖; } void handle_select(struct message sock_msg,Client_Inf client_inf) //查询信息查找 { 创建包含学号信息的链表; 在链表中找到待查找的记录并发送给客户端; } 程序清单 服务器主要功能函数 int main(int argc,char *argv[]) { struct sockaddr_in server_addr。 int server_fd。 pthread_t pid。 struct message sock_msg。 pHead=create_linklist()。 pHead=server_fd。 if (argc!=2) { perror(port:)。 exit(1)。 } server_fd=create_sock()。 init_host_addr(amp。 server_addr,NULL,argv[1])。 if (bind_sock(server_fd,server_addr)==1) 15 { perror(bind_sock:\n)。 exit(1)。 } if (listen_sock(server_fd,10)==1) { perror(listen_sock:\n)。 exit(1)。 } pthread_create(amp。 pid,NULL,(void *)pthread_accept,(void *)amp。 server_fd)。 user_manage()。 return。 } int reg_check(struct message sock_msg) { int fd。 int nread,nwrite。 struct message user_msg。 if((fd=open(,O_RDWR|O_CREAT|O_APPEND,0666))0) { perror(open)。 return 1。 } do { if((nread=read(fd,amp。 user_msg,sizeof(user_msg))) 0) { perror(reg:read )。 close(fd)。 return 1。 } if(strcmp(,)==0) { close(fd)。 return 1。 } }while(nread == sizeof(struct message))。 if((nwrite=write(fd,amp。 sock_msg,sizeof(struct message)))0) { perror(write)。 close(fd)。 return 1。 } 16 while(nwrite!=sizeof(struct message)) { lseek(fd,nwrite,SEEK_CUR)。 nwrite=write(fd,sock_msg,sizeof(struct message))。 } close(fd)。 return 0。 } int log_check(struct message sock_msg) { int fd,nread。 struct message user_msg。 if((fd=open(,O_RDONLY))0) { perror(log:open )。 return 1。 } do { if ((nread=read(fd,amp。 user_msg,sizeof(struct message)))0) { perror(log:read )。 close(fd)。 return 1。 } if (nread!=sizeof(struct message)amp。 amp。 nread==0) { close(fd)。 return 1。 } if ((strcmp(,)==0)amp。
阅读剩余 0%
本站所有文章资讯、展示的图片素材等内容均为注册用户上传(部分报媒/平媒内容转载自网络合作媒体),仅供学习参考。 用户通过本站上传、发布的任何内容的知识产权归属用户或原始著作权人所有。如有侵犯您的版权,请联系我们反馈本站将在三个工作日内改正。