zoukankan      html  css  js  c++  java
  • C语言实现的简单公司职员信息管理系统

    项目需求

    在这里插入图片描述在这里插入图片描述

    设计要求

    • 功能选择可以用菜单来实现,用户根据自己 的选择进入不同的菜单

    • 程序不要求将信息保存到文件中,程序开始时职员信息为空,用户需要先增加职员信息,之后才可以实现查找、删除、浏览等功能。

    • 职员信息的关键字为职员的职员号,加入时职员号重复的记录不能加入。查找删除按照职员号进行。

    • 选择删除功能时输出提示信息"是否确定删除",可取消操作。

    源代码

    #define _CRT_SECURE_NO_WARNINGS
    #include<iostream>
    #include<stdio.h>
    #include<cstring>
    #include<malloc.h> 
    
    using namespace std;
    
    // 函数结果状态代码 
    #define TRUE 1
    #define FALSE 0
    #define OK    1
    #define ERROR 0
    #define OVERFLOW -1
    
    typedef int Status;  //Status是函数的类型,其值是函数结果状态代码,如OK等
    
    //———————线性表的动态分配顺序存储结构————————//
    
    #define LIST_INIT_SIZE 20 //线性表存储空间的初始分配量
    #define LIST_ADD_SIZE  10  //线性表存储空间的分配增量
    
    typedef struct
    {
    	char id[10];    /* 职工号 */
    	char name[20];    /* 职工姓名 */
    	char department[20];    /* 所在部门 */
    	float salary;    /* 职工工资 */
    	char postion[20];    /* 职位 */
    }ElemType;
    
    typedef struct
    {
    	ElemType *elem;    //存储空间基址
    	int length;        //当前表长度(当前表中元素个数)
    	int listsize;      //当前分配的存储容量(以sizeof(ElemType)为单位)
    }SqList;
    
    Status SqList_Init(SqList &L)   //初始化,构造一个新的线性表L
    {
    	L.elem = (ElemType *)malloc(LIST_INIT_SIZE * sizeof(ElemType));
    	if (!L.elem)  exit(OVERFLOW);  //存储内存分配失败
    	L.length = 0;                  //空表长度为0
    	L.listsize = LIST_INIT_SIZE;   //初始化存储容量
    	return OK;
    }
    
    int ListLength(SqList L)  //返回L中数据元素个数
    {
    	return L.length;
    }
    
    //返回表中第i个元素的值
    ElemType GetElem(SqList L, int i)
    {
    	if (i<1 || i>L.length)   exit(ERROR);   //i值不合法
    	return L.elem[i - 1];
    }
    
    //在表尾插入新的元素 
    Status SqList_Insert(SqList &L, ElemType e)
    {
    	ElemType *p, *q, *newbase = NULL;
    	if (L.length >= L.listsize)  //当前内存已满,增加内存,重新分配
    	{
    		newbase = (ElemType *)realloc(L.elem, (L.listsize + LIST_ADD_SIZE) * sizeof(ElemType));
    		if (!newbase)  exit(OVERFLOW);  //存储内存分配失败
    		L.elem = newbase;               //新基址
    		L.listsize += LIST_ADD_SIZE;    //存储容量增加
    	}
    	int i = L.length + 1;
    	q = &(L.elem[i - 1]);     //q为插入位置
    	for (p = &(L.elem[L.length - 1]); p >= q; --p)    *(p + 1) = *p;
    	//插入位置及之后的元素右移
    	*q = e;      //插入e到第i个元素的位置
    	++L.length;  //表长加一
    	return OK;
    }
    
    //在顺序线性表中删除第i个元素
    Status SqList_Delete(SqList &L, int i)
    {
    	
    	//i的合法值为 1<= i <=L.length
    	ElemType *p, *q;
    	if (i < 1 || i > L.length)  return ERROR;  //i值不合法         
    	p = &L.elem[i - 1];                        //p为被删除元素的位置
    	q = L.elem + L.length - 1;                 //表尾元素的位置
    	for (; p <= q; ++p)  *(p - 1) = *p;        //被删除元素之后的元素左移
    	--L.length;
    	return OK;
    }
    
    // 比较是否是同一人(id号是否相等)
    Status Equal(ElemType a, ElemType b)
    {
    	if (!strcmp(a.id,b.id))  return TRUE;
    	else return FALSE;
    }
    
    //在L中查找第一个值与e满足compare关系的元素,返回它在表中的下标 
    int SqList_LocateElem(SqList L, ElemType e,
    	Status(*compare)(ElemType, ElemType))  //形参compare()是函数型指针
    	
    {
    	int i = 1;    //i的初值为第一个元素的位序
    	ElemType *p;  //p的初值为第一个元素的存储位置
    	p = L.elem;
    	while (i <= L.length && !(*compare)(*p++, e))  ++i;
    	if (i <= L.length)   return i;  //若找到,则返回其在L中的位序,否则返回0
    	else  return 0;
    }
    
    // 获取输入的员工信息 
    ElemType GetEmpInfomation()
    {
    	ElemType e; 
    	printf("请输入职工号:");
    	scanf("%s",&(e.id));
    	printf("请输入职工姓名:");
    	scanf("%s", &(e.name));
    	printf("请输入职位:");
    	scanf("%s", &(e.postion));
    	printf("请输入部门:");
    	scanf("%s", &(e.department));
    	printf("请输入薪资:");
    	scanf("%f", &(e.salary));
    	printf("
    "); 
    	return e;
    } 
    
    // 插入新的员工信息
    void AddEmpToList(SqList &L)
    {
    	ElemType e = GetEmpInfomation();
    	int res = SqList_LocateElem(L, e, Equal);
    	if(res == 0)//此员工信息未存在 
    	{
    		SqList_Insert(L, e);
    		printf("添加成功!是否继续添加?1:是;0:否
    ");
    		int c = -1;
    		scanf("%d",&c);
    		if(c == 1){
    			AddEmpToList(L);
    		}else if(c == 0){
    			printf("
    ");
    			return;
    		}else{
    			printf("非法输入,请重新操作!
    
    ");
    			return;
    		}
    	}else{//此员工信息已存在 
    		printf("此编号员工信息已存在,请勿重复操作!
    
    "); 
    		return;
    	} 
    	
    } 
    
    // 显示某员工信息
    void showEmpInfo(SqList L)
    {
    	printf("
    请输入要查看的员工编号:");
    	char id[10];
    	scanf("%s",id);
    	ElemType e;
    	strcpy(e.id,id);
    	int res = SqList_LocateElem(L, e, Equal);
    	if(res != 0){
    		e = GetElem(L, res);
    		printf("职工号	姓名	部门	职位	薪资
    ");
    		printf("%s	%s	%s	%s	%.2f
    
    ", e.id, e.name, e.department, e.postion, e.salary);
    	}else{
    		printf("此员工不存在!
    
    ");
    	}
    } 
    
    // 删除某员工信息
    void DeleteEmp(SqList &L)
    {
    	if(L.length == 0){
    		printf("当前无员工信息,请先选择添加员工信息操作!
    ");
    		return;
    	} 
    	printf("请输入要删除的员工编号:");
    	char id[10];
    	scanf("%s",id);
    	ElemType e;
    	strcpy(e.id,id);
    	int res = SqList_LocateElem(L, e, Equal);
    	if(res != 0){
    		printf("确定要删除吗?确定:1; 放弃:0
    ");
    		int c;
    		scanf("%d",&c); 
    		if(c == 1){
    			SqList_Delete(L, res + 1);//第i+1各=个元素的下表是i 
    			printf("删除成功!
    
    ");
    		}else{
    			printf("此操作已取消!
    
    ");
    		}		
    	}else{
    		printf("此员工不存在!
    
    ");
    	}
    } 
     
    //打印员工信息表 
    void Print(SqList L)
    {
    	printf("
    职工号	姓名	部门	职位	薪资
    ");
    	ElemType p;
    	for (int i = 0; i < L.length; i++)
    	{
    		p = L.elem[i];
    		printf("%s	%s	%s	%s	%.2f
    ", p.id, p.name, p.department, p.postion, p.salary);
    	}
    	printf("
    
    ");
    }
    
    // 主菜单 
    void menu(SqList &L)
    {
    	bool flag = true;
    	while(flag)
    	{
    	    flag = true;
    	 printf("======================================================
    "); 
    		printf("		欢迎进入公司职工信息管理系统
    "); 
    	 printf("======================================================
    "); 
    	    printf("		1.增加职工信息
    "); 
    	    printf("		2.查找职工信息
    "); 
    	    printf("		3.显示所有职工信息
    "); 
    	    printf("		4.删除职工信息
    "); 
    	    printf("		5.退出
    "); 
    	    printf("======================================================
    "); 
    	    printf("请选择1-5:"); 
    	    int c;
    	    scanf("%d",&c);
    	    switch(c)
    		{
    	    	case 1: AddEmpToList(L);break;
    	    	case 2: showEmpInfo(L);break;
    	    	case 3: Print(L);break;
    	    	case 4: DeleteEmp(L);break;
    	    	case 5: flag = false; printf("
    您已退出!
    ");break;
    	    	default: printf("输入不合法!
    
    ");break;
    		}
    	} 
    }
    
    int main()
    {
    	SqList L;  //定义SqList型结构L
    	SqList_Init(L);  //初始化L
    
    	menu(L);
    	
    	system("pause");
    }
    
    

    运行结果

    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述

    总结期望

    • java代码写多了,今天用起c语言一写全是bug,脑袋疼。
    • 有什么意见或者建议,欢迎在下方留言或提问。
    • 转载请注明出处!
  • 相关阅读:
    数据库访问优化之四:减少数据库服务器CPU运算
    数据库访问优化之三:减少交互次数
    数据库访问优化之二:返回更少的数据
    数据库访问优化之一:减少数据访问
    数据库性能优化
    磁盘映射
    strcmp
    程序设计基础
    Linux——【rpm、yun、源码包】安装
    Rsa2加密报错java.security.spec.InvalidKeySpecException的解决办法
  • 原文地址:https://www.cnblogs.com/codervivi/p/13086285.html
Copyright © 2011-2022 走看看