这俩天写了一个小玩具程序,算一个长期以来的热门题目就是《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语言实现员工管理系统相关推荐

  1. c语言系统分工 ppt,C语言案例员工管理系统.ppt

    <C语言案例员工管理系统.ppt>由会员分享,可在线阅读,更多相关<C语言案例员工管理系统.ppt(11页珍藏版)>请在人人文库网上搜索. 1.案例:员工管理系统,武汉纺织大学 ...

  2. 狂神Spring Boot 员工管理系统 超详细完整实现教程(小白轻松上手~)

    [SpringBoot-web系列]前文: SpringBoot-web开发(一): 静态资源的导入(源码分析) SpringBoot-web开发(二): 页面和图标定制(源码分析) SpringBo ...

  3. c语言代码大全500行,C语言职工档案管理系统 500多行代码1

    <C语言职工档案管理系统 500多行代码1>由会员分享,可在线阅读,更多相关<C语言职工档案管理系统 500多行代码1(17页珍藏版)>请在人人文库网上搜索. 1.1程序的总体 ...

  4. C语言编写工资管理系统类似学生管理系统

    C语言编写工资管理系统类似学生管理系统 开始界面和菜单界面B void start() //开始界面 {system("cls");//清屏 system("color ...

  5. python 工资管理软件_基于[Python]的员工管理系统

    基于[Python]的员工管理系统 -------------------------------- 简介 使用python语言来完成一个员工管理系统,员工信息包含:员工工号,姓名, 年龄,性别,职位 ...

  6. JAVA毕业设计HTML5企业员工管理系统计算机源码+lw文档+系统+调试部署+数据库

    JAVA毕业设计HTML5企业员工管理系统计算机源码+lw文档+系统+调试部署+数据库 JAVA毕业设计HTML5企业员工管理系统计算机源码+lw文档+系统+调试部署+数据库 本源码技术栈: 项目架构 ...

  7. 基于Java毕业设计智创员工管理系统源码+系统+mysql+lw文档+部署软件

    基于Java毕业设计智创员工管理系统源码+系统+mysql+lw文档+部署软件 基于Java毕业设计智创员工管理系统源码+系统+mysql+lw文档+部署软件 本源码技术栈: 项目架构:B/S架构 开 ...

  8. 如何做一个员工管理系统

    员工管理系统 1. 准备工作 先导入html和前端页面 建立两个实体类:Department和Employee Department: package com.dary.sweb.pojo; ​ im ...

  9. 基于javaweb的简单员工管理系统

    一.系统简介 本项目采用eclipse工具开发,jsp+servlet+jquery技术编写,数据库采用的是mysql,navicat开发工具. 系统一共分为1个角色分别是:员工 二.模块简介 员工 ...

最新文章

  1. Spring boot定时任务(Scheduling Tasks)
  2. [社会趣闻]储户召集7名亲友占满银行窗口 每次存一元
  3. jsp页面中出现“String cannot be resolved to a type”
  4. Visio的下载和安装
  5. 51单片机和52单片机区别是什么?51仿真器有必要买吗?
  6. mybatis 逆向工程 思维导图
  7. 批量生成奖状的简单程序
  8. 个人邮箱如何进行群发邮件?
  9. 实例:下载所有XKCD漫画
  10. logback prudent, SiftingAppender, layout, encoder的使用
  11. java虚拟机系列:java虚拟机内存模型
  12. 什么时候可以找回民族的自尊,不再崇洋媚外?--从华晨老总骏捷发布会的一番话说起...
  13. 南华大学计算机学院王玉锋,喜报!南华大学和王玉锋同学双双获奖!
  14. 2017-2018-1 20162316刘诚昊 实验二 树
  15. 微信好友性别分布与签名分析词云图
  16. 你知道的版心和你不知道的版心
  17. 小学生学数学c语言编程,用C语言做出小学生数学应用题的感觉
  18. 帝国CMS7.5正式版(后台模板深度美化)
  19. BetaFlight模块设计之九:气压计任务分析
  20. 一个啼笑皆非的发现-关于COREDRAW2018打印尺寸不准

热门文章

  1. 吴恩达机器学习课程-作业5-Bias vs Variance(python实现)
  2. 计算机无法加载怎么办,电脑无法加载桌面背景该怎么解决?
  3. html里副标题subtitle,Highcharts教程(15) title标题、subtitle副标题
  4. 腾讯云短信接口报错1014
  5. Delphi 通过窗口句柄 加粗窗口边框、描边
  6. Vsftpd完全攻略
  7. 公司新来一个以前在腾讯拿37K的测试,真是麻雀啄牛腚——雀食牛逼
  8. crackme例子2
  9. 阻焊层和助焊层的区别
  10. 桌面运维中持续服务改进需要怎么进行?