C语言实现员工管理系统
这俩天写了一个小玩具程序,算一个长期以来的热门题目就是《xxx管理系统》。大致的意思整个程序分为客户端和服务器段,客户端通过登录验证后,对信息进行处理,并且客户端分为了普通用户和管理员。至于员工信息这些数据,舍弃了数据库的做法,改用读写普通文件的方式存放数据。
使用流程大致如下图所示
而服务器端和客户端都有不同的设计流程
客户端主要为,用户登录,录入或者查询信息,发送到服务器端,接收服务器端返回的消息
服务器端主要为,监听客户端连接,接收客户端消息,根据消息类型做出不同的操作,并更新存储信息的文件,发送反馈信息到客户端。
为此我们需要封装一些数据结构。大致有三个:
(1)消息结构体,主要负责携带网络传输的数据,其中包含消息的类型,消息的发送方,用户信息等等。
(2)用户信息结构体,主要为用户的详细信息,用于查看修改。
(3)用户结构体,包含用户名和密码,用于登录。
/**********************************************************/
以下为代码大致框架
1.服务器端
int main(int argc, const char *argv[])
{pthread_t client_th; //定义线程号socket_set //tcp网络设置open the file //打开文件 init the file //初始化文件,写入必要的信息read the file //重新读取文件,将数据放入内存中/**socket 编程,循环监听,开启新的线程*/while(1){if((acceptfd = accept(sockfd,(struct sockaddr *)&clientaddr,&addrlen))<0){errlog("fail to accept");}printf("Ip:%s,bind:%d.\n",inet_ntoa(clientaddr.sin_addr),ntohs(clientaddr.sin_port));if(acceptfd>0){pthread_create(&client_th,NULL,(void *)client_fun,(void *)acceptfd);printf("new thread = %lu join.\n",client_th);pthread_detach(client_th);}}close(sockfd); close(fp_info);close(fp_user);return 0;
#endif}#if 1
/***@arg socket描述符*@brief 开线程与客户端连接*/
void *client_fun(void *arg)
{MSG msg; //消息结构体int acceptfd=(int)arg; while(1){if(recv(acceptfd,&msg,sizeof(MSG),0)<0){errlog("fail to recv");}/**根据消息类型做出不同的操作**/switch(msg.type){case READ: //查询用户信息do_selectuser(acceptfd,&msg);break;case CHANGE: //修改用户信息do_modifyuser(acceptfd,&msg);break;case DELETE: //删除用户do_deluser(acceptfd,&msg);break;case ADD: //添加用户do_adduser(acceptfd,&msg);break;case LOAD: //用户申请登录do_loaduser(acceptfd,&msg);break;case QUIT: //用户退出时发给服务器的通知消息do_quituser(acceptfd,&msg);break;default:break;}} close(acceptfd);return NULL;
}
#endif/**用户登录申请处理*/
int do_loaduser(int sockfd, MSG *msg)
{
}
/**申请新增用户处理*/
int do_adduser(int sockfd, MSG *msg)
{
}
/**申请修改用户信息处理*/
int do_modifyuser(int sockfd, MSG *msg)
{
}
/**申请查看用户信息处理*/
int do_selectuser(int sockfd, MSG *msg)
{
}
/**用户申请退出处理*/
int do_quituser(int sockfd, MSG *msg)
{
}
2.客户端
static int status=0; //运行状态
static char user[N_SIZE]={0}; //当前用户名
static int current_no = 0; //当前用户IDint main(int argc,const char *argv[])
{socket_set //tcp网络设置/**发送连接请求*/if(connect(sockfd, (struct sockaddr *)&serveraddr, addrlen) < 0){errlog("fail to connect");}/**连接成功后进入登录页面*/while(1){while((status==RUN_1)) //初始登录界面{my_printf("1.login 2.quit ");printf("input your choice: ");scanf("%d",&cho_num);REMLINE;switch(cho_num){case 1:do_login(sockfd,msg);break; //选择登录case 2:do_quit(sockfd,msg);break; //选择退出default:puts("input error,please try again"); break;}}while((status==RUN_2)) //管理员登录后的操作界面{my_printf("1.add 2.delete 3.modify 4.select 5.quit");printf("input your choice:");scanf("%d",&cho_num);REMLINE;switch(cho_num){case 1:do_add(sockfd,msg);break; //申请添加用户case 2:do_delect(sockfd,msg);break; //申请删除用户case 3:do_modify(sockfd,msg);break; //申请修改用户case 4:do_select(sockfd,msg);break; //申请查询用户case 5:do_quit(sockfd,msg);break; //申请退出default:puts("input error,please try again:"); break;}}while((status==RUN_3)) 普通员员登录后的操作界面{my_printf("1.modify 2.select 3.quit");printf("input your choice:");scanf("%d",&cho_num);switch(cho_num){case 1:do_modify(sockfd,msg);break; //申请修改用户case 2:do_select(sockfd,msg);break; //申请查询用户case 3:do_quit(sockfd,msg);break; //申请退出default:puts("input error,please try again:"); break;}}} close(sockfd);return 0;
}
/**申请登录*/
int do_login(int sockfd,MSG *msg)
{
}
/**申请增加新的用户*/
int do_add(int sockfd,MSG *msg)
{
}
/**申请查看用户信息,非管理员模式下只能查看自己的信息*用户名和用户ID(name,和no)全部输入正确才能查看*/
int do_select(int sockfd,MSG *msg)
{
}
/**申请修改用户信息,非管理员模式下只能修改自己的信息*用户名和用户ID(name,和no)全部输入正确才能修改*/
int do_modify(int sockfd,MSG *msg)
{
}
/**申请退出*/
int do_quit(int sockfd,MSG *msg)
{
}
这样我们俩个框架就写好了,剩下的就是补全数据类型,填充各个函数了。
对于读文件的操作,我们使用二进制文件,然后用open,read,write,read。就可以按照先定义好的数据结构,去读写这些文件。
例如操作一个二进制文件,user.dat,我们可以直接按定义好的结构体USER去读写该文件。省去了我们处理文本文件的各种复杂操作。
int main(int argc, const char *argv[])
{int fp = open("user.dat",O_RDWR);USER usr[MAX_USR];int usrlen =sizeof(USER);int i=0;while(read(fp,&usr[i],usrlen)!=0);{i++;}printf("i = %d.\n",i);while(i--){printf("id = %d.\nname = %s.\npassword = %s.\n",usr[i].type,usr[i].name,usr[i].passwd);}close(fp);return 0;
}
好了,有了这些代码,大家基本就可以写一个xx管理系统了。
最后会有我自己写的程序的下载链接。
http://download.csdn.net/download/u010916862/9896853
C语言实现员工管理系统相关推荐
- c语言系统分工 ppt,C语言案例员工管理系统.ppt
<C语言案例员工管理系统.ppt>由会员分享,可在线阅读,更多相关<C语言案例员工管理系统.ppt(11页珍藏版)>请在人人文库网上搜索. 1.案例:员工管理系统,武汉纺织大学 ...
- 狂神Spring Boot 员工管理系统 超详细完整实现教程(小白轻松上手~)
[SpringBoot-web系列]前文: SpringBoot-web开发(一): 静态资源的导入(源码分析) SpringBoot-web开发(二): 页面和图标定制(源码分析) SpringBo ...
- c语言代码大全500行,C语言职工档案管理系统 500多行代码1
<C语言职工档案管理系统 500多行代码1>由会员分享,可在线阅读,更多相关<C语言职工档案管理系统 500多行代码1(17页珍藏版)>请在人人文库网上搜索. 1.1程序的总体 ...
- C语言编写工资管理系统类似学生管理系统
C语言编写工资管理系统类似学生管理系统 开始界面和菜单界面B void start() //开始界面 {system("cls");//清屏 system("color ...
- python 工资管理软件_基于[Python]的员工管理系统
基于[Python]的员工管理系统 -------------------------------- 简介 使用python语言来完成一个员工管理系统,员工信息包含:员工工号,姓名, 年龄,性别,职位 ...
- JAVA毕业设计HTML5企业员工管理系统计算机源码+lw文档+系统+调试部署+数据库
JAVA毕业设计HTML5企业员工管理系统计算机源码+lw文档+系统+调试部署+数据库 JAVA毕业设计HTML5企业员工管理系统计算机源码+lw文档+系统+调试部署+数据库 本源码技术栈: 项目架构 ...
- 基于Java毕业设计智创员工管理系统源码+系统+mysql+lw文档+部署软件
基于Java毕业设计智创员工管理系统源码+系统+mysql+lw文档+部署软件 基于Java毕业设计智创员工管理系统源码+系统+mysql+lw文档+部署软件 本源码技术栈: 项目架构:B/S架构 开 ...
- 如何做一个员工管理系统
员工管理系统 1. 准备工作 先导入html和前端页面 建立两个实体类:Department和Employee Department: package com.dary.sweb.pojo; im ...
- 基于javaweb的简单员工管理系统
一.系统简介 本项目采用eclipse工具开发,jsp+servlet+jquery技术编写,数据库采用的是mysql,navicat开发工具. 系统一共分为1个角色分别是:员工 二.模块简介 员工 ...
最新文章
- Spring boot定时任务(Scheduling Tasks)
- [社会趣闻]储户召集7名亲友占满银行窗口 每次存一元
- jsp页面中出现“String cannot be resolved to a type”
- Visio的下载和安装
- 51单片机和52单片机区别是什么?51仿真器有必要买吗?
- mybatis 逆向工程 思维导图
- 批量生成奖状的简单程序
- 个人邮箱如何进行群发邮件?
- 实例:下载所有XKCD漫画
- logback prudent, SiftingAppender, layout, encoder的使用
- java虚拟机系列:java虚拟机内存模型
- 什么时候可以找回民族的自尊,不再崇洋媚外?--从华晨老总骏捷发布会的一番话说起...
- 南华大学计算机学院王玉锋,喜报!南华大学和王玉锋同学双双获奖!
- 2017-2018-1 20162316刘诚昊 实验二 树
- 微信好友性别分布与签名分析词云图
- 你知道的版心和你不知道的版心
- 小学生学数学c语言编程,用C语言做出小学生数学应用题的感觉
- 帝国CMS7.5正式版(后台模板深度美化)
- BetaFlight模块设计之九:气压计任务分析
- 一个啼笑皆非的发现-关于COREDRAW2018打印尺寸不准