C语言实现的人员管理系统(顺序表版)

该系统具有以下主要功能:

  1. 添加人员信息:在有空间的前提下,用户输入人员的工号、姓名、性别、联系电话和 QQ 号等信息,系统会自动检查编号的唯一性,确保不重复。
  2. 查找人员信息:提供按工号和姓名两种查找方式,找到后会显示相应人员的详细信息。
  3. 修改人员信息:可以按工号或姓名进行修改,修改时编号不能更改。
  4. 删除人员信息:同样支持按工号和姓名删除,删除前会进行确认。
  5. 统计人员数量:能给出当前公司人员的总数。
  6. 显示人员信息:可以展示全体人员的信息或指定单个人员的信息。
  7. 保存和读取文件:能将人员信息保存到指定文件,也能从文件中读取人员信息。
  8. 排序人员信息:提供插入排序和冒泡排序两种方式,可对人员按工号进行排序。
    #include<stdio.h>
    #include<stdlib.h>   //内存管理
    #include<string.h>   //字符串操作#define MaxSize 20
    //数据元素结构
    typedef struct
    {	int  no;        //工号char name[20];  //姓名int sex;        //性别char tel[14];  //联系电话char qq[12];   //QQ号
    }ElemType;  //顺序表结构
    typedef struct
    {ElemType list[MaxSize];int length;
    }SeqList;void Edit(SeqList *L);          //修改子菜单
    void Delete(SeqList *L) ;       //删除子菜单
    void Search(SeqList *L);        //查找子菜单
    void Sort(SeqList *L);             //排序子菜单/功能函数
    void Add(SeqList *L);              //添加人员信息
    void PrintList(SeqList *L);         //显示全体人员信息
    void PrintList(SeqList *L,int i);   //显示单个人员信息
    void Total(SeqList *L);             //统计人员数量void Edit_num(SeqList *L);    //按编号修改
    void Edit_name(SeqList *L);    //按姓名修改
    void Delete_num(SeqList *L);      //按编号删除
    void Delete_name(SeqList *L);     //按姓名删除
    void Save(SeqList *L);            //存文件
    void Read(SeqList *L);            //读文件
    void Search_name(SeqList *L);     //按姓名查找
    void Search_num(SeqList *L);      //按编号查找
    void InsertSort(SeqList *L);      //折半插入排序
    void BubbleSort(SeqList *L);      //冒泡排序int main()
    {printf("                    ###     欢迎进入人员管理系统      ###\n");//顺序表初始化//SeqList   *L;    ///L=(SeqList *)malloc(sizeof( SeqList));   //分配内存L->length=0;int choice=1;while(choice!=0){printf("ooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooo\n");printf("|                                                                             |\n");printf("|1.添加  2.查找  3.修改  4.统计  5.删除  6.显示  7.保存 8.读取  9.排序  0.返回|\n");printf("|                                                                             |\n");printf("ooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooo\n");printf("输入您操作的选项:");scanf("%d",&choice);switch(choice){case 1:Add(L);  //添加人员信息break;case 2:Search(L);break;	case 3:Edit(L);//修改break;case 4:Total(L);   //人员数量统计break;case 5:Delete(L);break;case 6:PrintList(L);  //显示所有人员信息break;case 7:Save(L);//保存break;case 8:Read(L);            //读文件break;case 9:Sort(L);//排序break;case 0:free(L);   //释放内存printf("退出成功!\n");break;default:printf("无此选项,请重试!\n");break;}}printf("                     ooooo欢迎您使用本系统!ooooo\n");return 0;
    }void Add(SeqList *L)          //添加人员
    {   if(L->length>=MaxSize) {printf("空间已满,不能添加!!!\n");return;}printf("正在添加人员......\n");printf("请输入数据(工号  姓名  性别(0或1) 联系电话  QQ号):\n");scanf("%d%s%d%s%s",&L->list[L->length].no,L->list[L->length].name , &L->list[L->length].sex , L->list[L->length].tel  ,L->list[L->length].qq);//下面代码保证编号唯一性//for(int i=0;i<L->length;i++)	{if(L->list[L->length].no==L->list[i].no){	printf("该编号已存在,添加失败!\n");return ;}}printf("添加成功!!!\n\n");L->length++;     // 调整人员个数
    }/***显示顺序表中数据***/
    void  PrintList(SeqList *L)
    {	if (L->length==0) {printf("没有人员信息!\n");return;}int i;printf("学号    姓名    性别    电话    QQ号\n");for( i=0 ;  i<L->length ; i++){	printf("%d\t%s\t",L->list[i].no,L->list[i].name );                                                               if(L->list[i].sex)printf("男");else printf("女");printf("\t%s\t%6s\n",  L->list[i].tel  ,L->list[i].qq);   }
    }void  PrintList(SeqList *L,int i)   //显示第i个人员信息
    {	if(i<0||i>L->length-1){printf("输出错误!\n");return;}printf("学号    姓名    性别    电话    QQ号\n");printf("%d\t%s\t",L->list[i].no,L->list[i].name );                                                               if(L->list[i].sex)printf("男");else printf("女");printf("\t%s\t%6s\n",  L->list[i].tel  ,L->list[i].qq);   }void Total(SeqList *L)         //统计人员数目
    {printf("公司人员总人数为:%d人\n",L->length);
    }修改功能/
    /
    void Edit(SeqList *L)          //修改子菜单
    {if (L->length==0) {printf("没有人员信息!\n");return;}int choice=1;	do{printf("                    ooooo编辑ooooo\n");printf("||                                                        ||\n");printf("||        1 : 按工号       2 : 按姓名       0 :退出       ||\n");printf("||                                                        ||\n");printf("oooooooooooooooooooooooooooooooooooooooooooooooooooooooooooo\n");printf("请输入您的选择:");scanf("%d",&choice);switch(choice){case 1:Edit_num(L);//printf("按工号修改!\n");break;case 2:Edit_name(L);//printf("按姓名修改!\n");break;case 0:printf("您已安全退出子菜单!\n");break;default:printf("没有此选项,请重选!\n");break;}}while(choice!=0);
    }//按人员编号修改记录信息
    void Edit_num(SeqList *L)        
    {int x;printf("请输入要修改的人员的编号:");scanf("%d",&x);for(int i=0;i<L->length;i++){if(L->list[i].no==x){PrintList(L,i);printf("\n");printf("请输入数据(工号  姓名  性别(0或1) 联系电话  QQ号):\n");scanf("%d%s%d%s%s",&L->list[i].no,L->list[i].name , &L->list[i].sex , L->list[i].tel,L->list[i].qq);while(L->list[i].no!=x){printf("编号不能修改!");printf("请输入数据(工号  姓名  性别(0或1) 联系电话  QQ号):\n");scanf("%d%s%d%s%s",&L->list[i].no,L->list[i].name , &L->list[i].sex , L->list[i].tel,L->list[i].qq);}printf("修改成功!\n");PrintList(L,i);return;}}printf("该人员不存在!\n");
    }//按姓名修改记录信息————需要处理重名情况
    void Edit_name(SeqList *L)     
    {char nam[20],c1;printf("请输入要编辑的人员的姓名:");scanf("%s",nam);for(int i=0;i<L->length;i++){if(strcmp(L->list[i].name,nam)==0){   int n=L->list[i].no;PrintList(L,i);printf("\n");printf("要修改这条记录吗?(是:y/Y,否:n/N):");fflush(stdin); scanf("%c",&c1);if(c1=='y'||c1=='Y') {printf("请输入数据(工号  姓名  性别(0或1) 联系电话  QQ号):\n");scanf("%d%s%d%s%s",&L->list[i].no,L->list[i].name , &L->list[i].sex , L->list[i].tel,L->list[i].qq);while(L->list[i].no!=n){printf("编号不能修改!");printf("请输入数据(工号  姓名  性别(0或1) 联系电话  QQ号):\n");scanf("%d%s%d%s%s",&L->list[i].no,L->list[i].name , &L->list[i].sex , L->list[i].tel,L->list[i].qq);}printf("修改成功!\n");PrintList(L,i);return ;}} } printf("该人员不存在!\n");
    }删除功能/
    /
    void Delete(SeqList *L)             //删除子菜单
    {if (L->length==0) {printf("没有人员信息!\n");return;}int choice;	do{printf("                    ooooo删除ooooo\n");printf("||                                                        ||\n");printf("||        1 : 按工号       2 : 按姓名       0 :退出       ||\n");printf("||                                                        ||\n");printf("oooooooooooooooooooooooooooooooooooooooooooooooooooooooooooo\n");printf("请输入您的选择:");scanf("%d",&choice);switch(choice){case 1:Delete_num(L);break;case 2:Delete_name(L);break;case 0:printf("您已安全退出删除功能!\n");break;default:printf("没有此选项,请重选!\n");break;}}while(choice!=0);
    }void Delete_num(SeqList *L)          /按编号进行删除
    { char c1;int x;printf("请输入要删除的技术人员的编号:");scanf("%d",&x);for(int i=0;i<L->length;i++){if(L->list[i].no==x){PrintList(L,i);                    break;}}	 if(i>=L->length){printf("无此技术人员!");return ;} printf("是否删除此项(是:y/Y,否:n/N):");fflush(stdin); scanf("%c",&c1);if(c1=='y'||c1=='Y'){for(int k=i;k<L->length-1;k++){L->list[k]=L->list[k+1];               //从i开始,后往前覆盖}printf("删除成功!\n");L->length--;                         //人数减一return ;}elseprintf("没有删除该技术人员!\n");
    }
    void Delete_name(SeqList *L)                  /按姓名进行删除---有重名情况
    { char c1;char nam[20];printf("请输入要删除的技术人员的姓名:");scanf("%s",nam);for(int i=0;i<L->length;i++){if(strcmp(L->list[i].name,nam)==0){ PrintList(L,i);printf("要删除这条记录吗?(是:y/Y,否:n/N):");fflush(stdin); scanf("%c",&c1);if(c1=='y'||c1=='Y') break;}}	 if(i>=L->length){printf("无此技术人员!");return ;} printf("再次确认删除该记录?(是:y/Y,否:n/N):");fflush(stdin); scanf("%c",&c1);if(c1=='y'||c1=='Y'){	for(int k=i;k<L->length-1;k++)                     //删除{L->list[k]=L->list[k+1];}printf("删除成功!\n");L->length--;                         //人数减一            return ;}elseprintf("没有删除该技术人员!\n");
    }
    /void Save(SeqList *L)                  /存文件
    {FILE *fp = NULL;fp = fopen("D:\\人员管理.txt", "w");if(!fp){    printf("文件打开出错\n");return;}for (int i=0;i<L->length;i++){fprintf(fp,"\n%d\t",L->list[i].no);		//写进磁盘保存,以下同理fprintf(fp,"%s\t",L->list[i].name);fprintf(fp,"%d\t",L->list[i].sex);fprintf(fp,"%s\t",L->list[i].tel);fprintf(fp,"%s",L->list[i].qq);}printf("保存成功!\n");fclose(fp);}void Read(SeqList *L)                  /读文件
    {FILE *fp = NULL;fp = fopen("D:\\人员管理.txt", "r");if(!fp){    printf("文件打开出错\n");return;}int i=0;while(!feof(fp)){fscanf(fp, "%d%s%d%s%s", &L->list[i].no,L->list[i].name,&L->list[i].sex,L->list[i].tel,L->list[i].qq);i++;}L->length=i;printf("读取成功!\n");fclose(fp);
    }/
    void Search(SeqList *L)              //查找子菜单
    {if (L->length==0) {printf("没有人员信息!\n");return;}int choice;do{printf("                    ooooo查找ooooo\n");printf("||                                                        ||\n");printf("||        1 : 按工号       2 : 按姓名       0 :退出       ||\n");printf("||                                                        ||\n");printf("oooooooooooooooooooooooooooooooooooooooooooooooooooooooooooo\n");printf("请输入您的选择:");scanf("%d",&choice);switch(choice){case 1:Search_num(L);break;case 2:Search_name(L);break;case 0:printf("您已安全退出查找功能!\n");break;default:printf("没有此选项,请重选!");break;}}while(choice!=0);
    }void Search_num(SeqList *L)                        //按编号进行查找
    {int x;printf("请输入要查找的人员的编号:");scanf("%d",&x);for(int i=0;i<L->length;i++){if(L->list[i].no==x){printf("oooooooooooo找到这个人员了,其信息为:oooooooooooo\n");	PrintList(L,i);      return;}	} printf("该技术人员不存在!\n");
    }
    void Search_name(SeqList *L)                      //按姓名进行查找
    {   int flag=0;char nam[20];printf("请输入要查找的人员的姓名:");scanf("%s",nam);for(int i=0;i<L->length;i++){if(strcmp(L->list[i].name,nam)==0){ if(flag) printf("oooooooooooo又找到了一个,其信息为:oooooooooooo\n");else printf("oooooooooooo   找到了,其信息为:   oooooooooooo\n");PrintList(L,i); flag=1;}	}if(!flag) printf("该人员不存在!\n");
    }///
    void Sort(SeqList *L)              //排序子菜单
    {if (L->length==0) {printf("没有人员信息!\n");return;}int choice;do{printf("                    ooooo排序ooooo\n");printf("||                                                        ||\n");printf("||     1 : 插入排序       2 : 冒泡排序      0 :退出       ||\n");printf("||                                                        ||\n");printf("oooooooooooooooooooooooooooooooooooooooooooooooooooooooooooo\n");printf("请输入您的选择:");scanf("%d",&choice);switch(choice){case 1:InsertSort(L);break;case 2:BubbleSort(L);break;case 0:printf("您已安全退出排序功能!\n");break;default:printf("没有此选项,请重选!");break;}}while(choice!=0);
    }///折半插入排序算法///
    void InsertSort(SeqList *L)
    {  int i, j, low, high, mid ;  ElemType temp;for (i=1; i<L->length; i++){  temp= L->list[i];      low=0 ; high=i-1 ; while (low<=high){    mid=(low+high)/2;if ( temp.no< L->list[mid].no)  high=mid-1 ;else low=mid+1 ; }       /*   查找插入位置   */for (j=i-1; j>=high+1; j--)  L->list[j+1]=L->list[j]; L->list[high+1]=temp;  /*   插入到相应位置   */}printf("排序完毕!\n");PrintList(L); }
    //冒泡排序///
    void BubbleSort(SeqList *L)
    {  int i,j,over;ElemType p;for(i=0;i<L->length-1;i++){over=1;for(j=1;j<L->length-i;j++){if(L->list[j].no<L->list[j-1].no){	p=L->list[j];L->list[j]=L->list[j-1];L->list[j-1]=p;over=0;}}if(over) break;}printf("排序完毕!\n");PrintList(L); 
    } 
    

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/web/40007.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

av_read_frame 代码研究

------------------------------------------------------------ author: hjjdebug date: 2024年 07月 05日 星期五 11:02:51 CST av_read_frame 代码研究 ------------------------------------------------------------ 有人只标注一层,标注一层太肤浅了.不能了解底层之精妙…

Lianwei 安全周报|2024.07.01

新的一周又开始了&#xff0c;以下是本周「Lianwei周报」&#xff0c;我们总结推荐了本周的政策/标准/指南最新动态、热点资讯和安全事件&#xff0c;保证大家不错过本周的每一个重点&#xff01; 政策/标准/指南最新动态 01 出于安全考虑&#xff0c;拜登下令禁用卡巴斯基杀毒…

【康复学习--LeetCode每日一题】3115. 质数的最大距离

题目&#xff1a; 给你一个整数数组 nums。 返回两个&#xff08;不一定不同的&#xff09;质数在 nums 中 下标 的 最大距离。 示例 1&#xff1a; 输入&#xff1a; nums [4,2,9,5,3] 输出&#xff1a; 3 解释&#xff1a; nums[1]、nums[3] 和 nums[4] 是质数。因此答案是…

SpringBoot各类数量限制及超出后抛出的异常

前言 在使用SpringBoot开发接口时&#xff0c;动不动的就发生各种超过默认值的限制&#xff0c;这里总结了下SpringBoot默认限制的设置以及可能会发生的异常&#xff0c;便于问题的排查和快速修改默认值。 配置项配置项说明默认值超过大小后抛出的异常spring.servlet.multipa…

系统管理(System Keeping):全新迭代,优化您的开发体验

随着科技的不断进步和用户需求的日益增长&#xff0c;系统管理&#xff08;System Keeping&#xff09;不断进行迭代更新&#xff0c;致力于为用户带来更加高效、便捷的开发体验。本次全新迭代&#xff0c;不仅在界面与交互上进行了革新&#xff0c;更在功能整合、个性化与安全…

ECOLOGY9重置系统管理员密码

ECOLOGY9系统管理员密码忘记需要重置&#xff1a; 1、KB2110之后版本加了防篡改逻辑&#xff0c;数据库中初始话密码需要将hashdata、signdata更新为空&#xff0c;执行如下语句初始化 update HrmResourceManager set password ‘C4CA4238A0B923820DCC509A6F75849B’,salt‘’…

Android --- Service

出自于此&#xff0c;写得很清楚。关于Android Service真正的完全详解&#xff0c;你需要知道的一切_android service-CSDN博客 出自【zejian的博客】 什么是Service? Service(服务)是一个一种可以在后台执行长时间运行操作而没有用户界面的应用组件。 服务可由其他应用组件…

万字长文|关于 OpenAI 接口开发你应该知道的一切

这篇文章中个人结合自己的实践经验把 OpenAI 官方文档解读一遍。但是原文档涉及内容众多&#xff0c;包括微调&#xff0c;嵌入&#xff08;Embeddings&#xff09;等众多主题&#xff0c;我这里重点挑选自己开发高频使用到的&#xff0c;需要详细了解的可以自行前往官网阅读。…

Java中的文本搜索与全文检索引擎

Java中的文本搜索与全文检索引擎 大家好&#xff0c;我是免费搭建查券返利机器人省钱赚佣金就用微赚淘客系统3.0的小编&#xff0c;也是冬天不穿秋裤&#xff0c;天冷也要风度的程序猿&#xff01; 在现代应用程序中&#xff0c;处理和搜索大量文本数据是一项关键任务。传统的…

2024科技文化节程序设计竞赛

补题链接 https://www.luogu.com.cn/contest/178895#problems A. 签到题 忽略掉大小为1的环&#xff0c;答案是剩下环的大小和减环的数量 #include<bits/stdc.h> #include<iostream> #include<cstdio> #include<vector> #include<map> #incl…

c进阶篇(四):内存函数

内存函数以字节为单位更改 1.memcpy memcpy 是 C/C 中的一个标准库函数&#xff0c;用于内存拷贝操作。它的原型通常定义在 <cstring> 头文件中&#xff0c;其作用是将一块内存中的数据复制到另一块内存中。 函数原型&#xff1a;void *memcpy(void *dest, const void…

多模态融合算法应用:CT + 临床文本数据 + pyradiomics提取到的图像特征

多模态融合算法应用 CT 临床文本数据 pyradiomics提取图像特征 单模态建模临床数据建模pyradiomics提取图像特征建模CT建模 多模态建模前融合为什么能直接合并在一起&#xff1f; 后融合Med-CLIP&#xff1a;深度学习 可解释性 单模态建模 临床数据建模 临床文本数据&…

WPF Menu实现快捷键操作

很多小伙伴说&#xff0c;在Menu中&#xff0c;实现单个快捷键操作很简单&#xff0c;怎么实现多个快捷键操作和&#xff0c;组合快捷键呢&#xff0c;今天他来了。 上代码和效果图 一、Ctrl Shift 任意子母键实现快捷键组合 <Window x:Class"XH.TemplateLesson.M…

【测试开发】【postman】按顺序循环执行接口

postman按顺序循环执行接口 新建接口接口排序执行请求集合 新建接口 Request 001 Request 002 Request 003 接口排序 在Request 001的Tests中添加代码 postman.setNextRequest("Request 002");在Request 002的Tests中添加代码 postman.setNextRequest("Requ…

Redis 7.x 系列【17】四种持久化策略

有道无术&#xff0c;术尚可求&#xff0c;有术无道&#xff0c;止于术。 本系列Redis 版本 7.2.5 源码地址&#xff1a;https://gitee.com/pearl-organization/study-redis-demo 文章目录 1. 概述2. 案例演示2.1 无持久化2.2 RDB2.3 AOF2.4 混合模式2.4.1 方式一&#xff1a;…

线性代数|机器学习-P21概率定义和Markov不等式

文章目录 1. 样本期望和方差1.1 样本期望 E ( X ) \mathrm{E}(X) E(X)1.2 样本期望 D ( X ) \mathrm{D}(X) D(X) 2. Markov 不等式&Chebyshev不等式2.1 Markov不等式公式 概述2.2 Markov不等式公式 证明&#xff1a;2.3 Markov不等式公式 举例&#xff1a;2.4 Chebyshev不…

AI绘画 Stable Diffusion图像的脸部细节控制——采样器全解析

大家好&#xff0c;我是画画的小强 我们在运用AI绘画 Stable Diffusion 这一功能强大的AI绘图工具时&#xff0c;我们往往会发现自己对提示词的使用还不够充分。在这种情形下&#xff0c;我们应当如何调整自己的策略&#xff0c;以便更加精确、全面地塑造出理想的人物形象呢&a…

域环境提权

域内提权漏洞(1) Netlogon域权限提升 1.查看域控主机名称 net group "domain controllers" /domain 2.检测漏洞是否存在 https://github.com/SecuraBV/CVE-2020-1472.git python zerologon_tester.py OWA 192.168.52.138 3.漏洞利用&#xff0c;对域账号重置 ht…

《简历宝典》01 - 一文带你学会如何写一份糟糕透顶的简历

我们每个人几乎都会面对找工作这件事&#xff0c;而找工作或者说求职首先就是要写一份简历。今天狗哥将以一个不同的视角带你写一份无与伦比&#xff0c;糟糕透顶的求职简历&#xff0c;说实话&#xff0c;其实几年前&#xff0c;我就是这么写的。 目录 1. 文件名 2. 基本信…

【项目管理】项目风险管理(Word原件)

风险和机会管理就是在一个项目开发过程中对风险进行识别、跟踪、控制的手段。风险和机会管理提供了对可能出现的风险进行持续评估&#xff0c;确定重要的风险机会以及实施处理的策略的一种规范化的环境。包括识别、分析、制定处理和减缓行动、跟踪 。合理的风险和机会管理应尽力…