C语言程序设计大作业——员工管理系统(代码超详细内含实验报告)

2023-11-03

写在前面:欢迎来到「发奋的小张」的博客。我是小张,一名普通的在校大学生。在学习之余,用博客来记录我学习过程中的点点滴滴,也希望我的博客能够更给同样热爱学习热爱技术的你们带来收获!希望大家多多关照,我们一起成长一起进步。也希望大家多多支持我鸭,喜欢我就给我一个关注吧!

员工管理系统

一、 课程设计目的

通过本课程设计,强化上机动手能力,使学生在理论和实践的基础上进一步巩固
《C 语言程序设计》课程学习的内容,掌握工程软件设计的基本方法。
学会将知识应用于实际的方法,提高分析和解决问题的能力,增加综合能力。
为后续各门计算机课程的学习打下坚实基础。
为毕业设计和以后工作打下必要基础。

二、课程设计内容

针对某企业的员工,对其信息进行系统的管理。

三、需求分析

对所开发系统功能、性能的描述,想要实现的目标。
此系统可对该厂员工进行信息的录入,修改,删除,添加,查询,排序,统计,
打印等功能。用户可通过提示选择进入某一功能界面,然后进行对员工的信息管
理。每一功能模块都充分为用户考虑,编排详细。使用户可以方便快捷的了解员
工信息,及时有效的对员工进行信息的管理。

四、概要设计

1.系统结构图(功能模块图)
在这里插入图片描述
对系统进行分析,给出系统结构图;
分析:此系统,为方便客户输入,以及使程序清晰化,因而本人采用模块法,
将每一功能模块化,使程序中各函数间调用更加明了。
2.功能模块说明
对各个模块进行功能的描述。
录入模块:输入该厂现有员工信息并保存与文件中,方便日后进行排序,更
新,统计,打印等操作。
输出模块:将所有员工信息,或所需员工信息输出于屏幕上,用于打印或查
询员工信息。
删除模块:对已退休或离开该厂的员工进行删除操作。
添加模块:添加新入厂的员工信息并保存起来。
修改模块:找到该员工并,选择所要修改的选项。
排序模块:本程序只对员工年龄进行从小到大排序。(此模块代码还没写)
查询模块:此模块分为按姓名,年龄,工作查询。(此模块代码还没写)

五、职工管理系统代码

#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#include<conio.h>
struct employee
{
	char no[40];   //职工号
	char name[40]; //职工姓名
	char sex[10];  //职工性别
	int age;	   //职工年龄
	struct employee *next;//下一结点指针
};
typedef struct employee EMP;
EMP *h;

void load();       //读文件数据,并创建链表
void save();       //将链表中数据写到文件中
void add(EMP *p);  //链表中增加职工结点
void del(char *s); //链表中删除指定姓名的职工结点
void update();    //链表中更新职工结点中的数据
void browse();    //在屏幕上显示链表中所有结点数据
void menu();      //显示系统主菜单
void delEmp();    //删除职工
void addEmp();    //增加职工
void main(void)
{
   
	int op;//operation
	h =(EMP *)malloc(sizeof(EMP));   //创建链表的头结点
	h->next = NULL;              //初始化链表头节点中下一节点指针为NULL
	menu();
    scanf("%d",&op);     
	while(op!=0)
	{
		switch(op)
		{		  
		  case 1:
				load();
				break;
		  case 2:
				save();
				break;
		  case 3:
				addEmp();
				break;
		  case 4:
				delEmp();
				break;
		  case 5:
				update();
				break;
		  case 6:
				browse();
				break;
		}
       	menu();
       scanf("%d",&op);
	}
}

//显示系统主菜单函数
void menu()  
{
     printf("         Main   Menu\n");
	 printf("   **********************   \n");
	 printf("   *  0:quit   1 :load   *  \n");
	 printf("   *  2:save   3 :add    *  \n");
	 printf("   *  4:delete 5 :update *  \n");
	 printf("   *  6:browse 7 :default*  \n");
	 printf("   **********************   \n");
}

//读文件数据,并创建链表函数
void load()
{
  FILE *fp;
  char ch;
 
  fp = fopen("data.txt","r");
  if(fp==NULL)
  {
	  printf("打开文件错误,按任意返回主菜单\n");
	  getch();//程序停下来,等待输入
	  return;
  }  
  while(!feof(fp))
  {
	  EMP *node =(EMP *)malloc(sizeof(EMP));
	  node->next = NULL;
	  fscanf(fp,"%s%s%s%d",node->no,node->name,node->sex,&node->age);//从文件中读一行职工信息
	  add(node); //	调用函数增加链表结点   
  } 
  fclose(fp);  
}

//链表中增加职工结点的函数
void add(EMP *p)
{
   EMP *q;
   q = h->next;  //将q指针指向链表中第一个职工结点
   if(q==NULL)  //如果q指针为NULL,则表示当前链表为空
   {
	   h->next = p; //p指针指向的结点为链表中第一个结点
	   p->next = NULL;      
   }
   else
   {
	   while(q->next!=NULL) //通过while循环找到链表中最后一个结点
	   {
		  q = q ->next;
	   }
	   q->next = p;    //将q指针指向的最后一个结点的next指针指向新增结点
	   p->next =NULL;  //现在p指针指向的是最后一个结点,因此将该节点的next指针设为NULL
   }

}

//增加职工函数
void addEmp()
{
  EMP *node;
  node = (EMP *)malloc(sizeof(EMP));
  node->next = NULL;
  printf("input the employee's no name sex age:\n");
  scanf("%s%s%s%d",node->no,node->name,node->sex,&node->age);
  add(node);

}

//删除职工函数
void delEmp()
{
   char name[40];
   printf("input del name:\n");
   scanf("%s",name);
   del(name);
}

//在屏幕上显示链表中所有职工结点数据函数
void browse()
{
	EMP *node;
    node = h->next;  //node指针指向链表第一个结点
	printf("Employee no    name  age  sex\n");
	while(node)   //遍历链表
	{
		printf("%12s%6s%5d%4s\n",node->no,node->name,node->age,node->sex);
        node = node->next;  //node指针指向下一个职工结点
	}
	printf("\n");
}


//将链表中数据写到文件中的函数
void save()
{
	FILE *fp;
	EMP *node;
	fp = fopen("data.txt","w"); //以写的方式打开文件
	node = h->next;     //node指针指向链表第一个结点
	while(node!=NULL)
	{   //"%s %s %s %d\n" 格式符之间有空格
		fprintf(fp,"%s %s %s %d\n",node->no,node->name,node->sex,node->age);
		node  = node ->next;
	}
	fclose(fp);
}

//删除职工结点的函数
void del(char *s)
{
    EMP *p,*q;
	p = h->next;//链表中第一个节点  p->next=p->next->next;
	q = p->next;//链表中第二个节点
	if(strcmp(s,p->name)==0)
	{h->next=p->next;
	 free(p);
	 return;
	}
	while(q!=NULL)
	{
      if(strcmp(s,q->name)==0)
	  {
        p->next = q->next;
		free(q);
		break;
	  }
	  p = q;
	  q = q->next;
	}
}

//更新职工结点的函数
void update()
{
    char name[40];
	int flag = 0;
	EMP *p;
	printf("input the name:\n");
	scanf("%s",name);
    p = h->next;
	while(p!=NULL)
	{
		if(strcmp(name,p->name)==0)
		{
         	printf("input the age:\n");
			scanf("%d",&p->age);
            printf("input the sex:\n");
		    getchar();
			scanf("%c",&p->sex);
			flag = 1;
			break;
		}
		p=p->next;

	}
    if(flag==0)
	{
       printf("error username\n");
	}
}

6、系统描述

本系统采用可以自行扩容的c语言传统数据结构:链表实现。相比用数组做存储,它具有可扩展性!
系统实现了对员工的增删改查,打印输出,写入磁盘,读取磁盘信息等基本功能。
系统具有良好的扩展性,可以扩展其他功能。比如:控制台加密,组合查询等·多种功能·!

7、系统运行部分功能截图

  1. 添加员工以及显示所有员工
    在这里插入图片描述
  2. 修改员工信息
    在这里插入图片描述
    在这里插入图片描述
  3. 删除员工
    在这里插入图片描述
博主后记:

希望看到此篇博文的小伙伴,能够按照此模板写出自己需要的课程设计!如果程序运行有问题,欢迎在下方留言!博主会改正!大家一起共同进步。如果对你有所帮助,可以给博主一个赞

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

C语言程序设计大作业——员工管理系统(代码超详细内含实验报告) 的相关文章

  • d3dcompiler_43.dll缺失怎么修复

    有网友在玩游戏时出现 无法启动程序 因为计算机中丢失d3dcompiler 43 dll 尝试重新安装该程序以解决问题 的提示 那么是什么原因造成丢失d3dcompiler 43 dll呢 缺少d3dcompiler 43 dll文件怎么办
  • GLUE数据集介绍:RTE、MRPC、SST-2、QNLI、MNLI、QQP

    自然语言处理 NLP 主要包括自然语言理解 NLU 和自然语言生成 NLG 为了让NLU任务发挥最大的作用 来自纽约大学 华盛顿大学等机构创建了一个多任务的自然语言理解基准和分析平台 也就是GLUE General Language Und
  • SpringBoot注解

    使用注解的优势 1 采用纯java代码 不在需要配置繁杂的xml文件 2 在配置中也可享受面向对象带来的好处 3 类型安全对重构可以提供良好的支持 4 减少复杂配置文件的同时亦能享受到springIoC容器提供的功能 一 注解详解 配备了完
  • HIve中的查询语句

    文章目录 Hive中的查询语句 1 基础语法 2 基本查询 Select From 2 1 数据准备 0 原始数据 1 创建部门表 2 创建员工表 3 导入数据 2 2 全表和特定列查询 1 全表查询 2 选择特定列查询 2 3 列别名 1
  • kafka相关操作命令

    kafka相关操作命令 原文链接 https blog csdn net wf3612581 article details 81842574 1 开启zookeeper集群 startzk sh 2 开启kafka集群 start kaf
  • 【修电脑】VMware 从GHO文件备份恢复Win10/Win7系统

    修电脑 VMware 从GHO文件备份恢复Win10 Win7系统 注意 参考 硬盘知识 一 硬盘接口的分类 二 硬盘的分类 按照硬盘材质分为两大类 按照接口类型区分 boot启动知识 Legacy BIOS引导 uefi引导启动流程 查看

随机推荐

  • 区块链关键机制分析

    区块链中三大关键机制 密码算法 1 Hash算法 2 非对称加密算法 3 数字签名 存储结构 共识机制 1 工作量证明 POW 2 权益证明 POS 3 股份授权证明 DPOS 4 实用拜占庭容错 PBFT 5 Raft算法 6 Rippl
  • ubuntu18.04升级cmake

    下载cmake cmake官网 https cmake org download sudo apt get install y build essential libssl dev wget https github com Kitware
  • C++ 的 decltype 详细介绍

    1 基本介绍 decltype 是 C 11 新增的一个用来推导表达式类型的关键字 和 auto 的功能一样 用来在 编译时期 进行自动类型推导 引入 decltype 是因为 auto 并不适用于所有的自动类型推导场景 在某些特殊情况下
  • 大数据学习连载03篇:分布式技术(集群、负载、弹性、故障等知识点)

    分布式技术 一 为什么需要分布式 1 计算问题 无论是我们在学校刚开始学编程 还是在刚参加工作开始处理实际问题 写出来的程序都是很简单的 因为面对的问题很简单 以处理数据为例 可能只是把一个几十K的文件解析下 然后生成一个词频分析的报告 很
  • 怎么debug_装完机电脑点不亮怎么办?不妨看看你主板上的Debug灯

    Hello大家好 我是兼容机之家的小牛 如果你加入了一个电脑硬件爱好者的群 那么你肯定会发现一件事 那就是每天都会有小白装机点不亮在群里求助 问群问了大半天也没弄好 小牛今天来教你一个窍门 能快速判断好自己的电脑到底出了什么故障 既然你自己
  • Python实战项目:flask人脸识别图书系统(上)

    flask人脸识别图书系统 上 涉及内容 爬虫 开发 数据分析 a 前端界面的技术 gt jquery bootstrap b 后面逻辑 gt flask 前后端半分离技术 使用模块 flask 蓝图 blue print c 收集的图书数
  • Qt 5.9.7的安装及配置环境变量

    1 安装 Qt 5 9的安装跟以前的版本略有不同 选择组件时分成Qt 5 9和Tools 注意此时要勾选Qt 5 9下的MinGW 安装空间会一下增大4G左右 果断差评 不然后面通过QtCreator编译时无法添加选项 Tools下面也有一
  • AndroidKiller安装-配置-更新apktool

    下载安装好AndroidKiller后 需要对其进行配置以及更新apktool 接下来我就为大家讲解详细操作流程 1 选择配置选项 2 选择java然后配置好jdk的工程路径 切记要给到bin目录下才可以 如果是第一次打开并没有配置jdk目
  • Kamil and Making a Stream【Codeforces Round #588 (Div. 2) E】【dfs + map】

    Codeforces 1230 E 也没怎么读题 就看了下样例的note就知道了是对树上的直系祖先对子结点的链上gcd求和 然后就可以直接这样去跑一遍 个人比较的喜欢踩坑 有正着走的不走 偏偏选择了从根节点返回回来的答案 这样的做法虽然上是
  • 二叉树:链式存储结构基础操作(C语言)

    操作包含 1 二叉树的构造 先序序列和中序序列 中序序列和后序序列 2 利用三种遍历方式输出 先序遍历 中序遍历 后序遍历 层次遍历 每种遍历包含递归和非递归两种算法 3 栈和队列的构造 C 模板 均为顺序存储结构 main cpp 1 构
  • python爬取多个网页内容——招聘网站

    python爬虫思路 此次爬虫获取leipin网站上的招聘信息 liepin ningde 首先右击网页 检查 获取网页代码 点击网络 刷新网页 得到网页URL以及请求方法 首先在python环境中安装各种库 import requests
  • python如何解决js逆向混淆?

    JavaScript混淆是一种保护网站安全的技术 混淆可将代码进行多种变形和加密 使得 JavaScript 代码变得难以阅读和理解 逆向混淆是混淆中的一种方式 通过逆向混淆 混淆的代码更难被攻击者分析和了解混淆的含义 Python 是一种
  • morph 原理实现

    PE教学 超超超初心者向PE入门Part1 基本原理 2013 08 16 17 31 18 标签 mmd 教学 杂谈 分类 教学 应群里要求自己也写了一点比较浅显的PE入门教学 因为本人研究的并不深入 只是根据自己自学时的经验总结的比较基
  • keil 如何打开eeprom_如何在Keil中使RAM在带电复位时保持数据?

    最近关注的人比较多 非常感谢大家的认可 如何写点对大家有点借鉴作用的文章 也是我一直思考的问题 如果大家有什么想法 请留言或私信 谢谢 在 被Keil坑了一天 实在太意外了 用Keil的来瞅瞅看 中 提到了在使用Keil设置栈空间时可能存在
  • equals方法该怎么重写呢

    关于equals方法的重写 在编写代码的时候 我们总是会需要重写equals代码 因为equals代码没有重写的时候比较的是两个对象的内存地址 而两个代码的内存地址不同 答案肯定返回false 这并不是我们希望看到的 因此要重写equals
  • Java回调函数详解

    什么是回调函数 CallBack 在编写程序时 有时候会调用许多API中实现实现的函数 但某些方法需要我们传入一个方法 以便在需要的时候调用我们传入进去的函数 这个被传入的函数称为回调函数 Callback function 打个比方 有一
  • Visual Studio Code 配置java开发环境

    最近在学习算法 有时需要在自己的机器上调试一下代码 有些算法题目的题解是用java编的 因为这类代码只是单个的java文件 所以不想动用MyEclipse那样的重型工具 正好机器上有一个轻量级的VS Code 我就试着在上面搭了一个java
  • windows上的linux子系统(WSL)

    目录 一 介绍 二 原理 2 1 wsl组件 2 2 wsl运行过程 2 3 文件系统 2 4 禁忌 三 使用 3 1 安装 3 2 用户账户和权限 3 3 wsl管理 3 3 互操作 参考 推荐阅读 一 介绍 Windows Subsys
  • 时间对象new Date 以及中国标准时间与时间戳,标准时间之间的转换

  • C语言程序设计大作业——员工管理系统(代码超详细内含实验报告)

    写在前面 欢迎来到 发奋的小张 的博客 我是小张 一名普通的在校大学生 在学习之余 用博客来记录我学习过程中的点点滴滴 也希望我的博客能够更给同样热爱学习热爱技术的你们带来收获 希望大家多多关照 我们一起成长一起进步 也希望大家多多支持我鸭
Powered by Hwhale