嵌入式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。嵌入式linux应用程序设计课程设计-多用户网络版学生学藉管理系统说明书
相关推荐
的数量视来客人数而定,外来人员在 6人以上的陪餐人员不得超过 3人;外来人员在 10 人以上的陪餐人员不超过 5 人;特别情况由主持宴会的领导确定陪餐人员。 (三)结算办法 实行餐后结算的办法,即每次就餐后持就餐申请单及签字后的发票,送财务审核,总经理审批后报销。 超过 5 日未办理报销手续的视为费用自理。 超出批准标准的费用自理。 特殊情况另行处理。 通信费 开支规定 第一条
...................................................................................................... 72 恢复缺省设置 ......................................................................................
加强财务支出管理 幼儿园领导审批制度明 确,从事幼儿园财务管理的记账人员和审批人员、 财务保管人员的职责权限明确,做到了相互分离、相互制约、相互监督。 四、加强有限资产的管理,保证幼儿园正常运行 根据幼儿园工作计划,通盘考虑,全面管理,合理使用有限资 2 金,集中力量,加大教育教学、教育科研的投入。 各项收入做到心中有数,坚持做到
1保 洁 工 聘 用 合 同 武汉峻峰物业管理有限公司(以下简称甲方),应各项工作需要同意聘用 (以下简称乙方),身份证号 到本公司工作,双方自愿签署本合同。 一、工作任务及条件 乙方同意按甲方的工作需要,在物业处部门,任保洁工职务,从事保洁工作,乙方应努力完成岗位所规定的数量指标和质量指标,履行《部门职责范围》,《岗位职责》及公司分配的各项工作。 二、工作时 间和报酬 工作时间:每周六天工作制
和废纸等。 中心机房内需配备不间断电源,用以保证重要设备的稳定供电,并 确保电源和插座为机房设备专用,非网络中心设备不得使用。 5 静电是计算机房发生最频繁、最难消除的危害之一,中心机房应采取必要措施消除静电对设备的影响,如铺设静电地板、安装等电位铜排等。 感应雷是电子设备的主要杀手,雷击防护的主要措施是根据电气、微电子设备的主要功能及不同受保护程序和所属保护层确定防护要点为分类保护