C语言职工信息管理系统

这篇文章提供了一个用C语言实现的职工信息管理系统,可以进行职工信息的录入、显示、查询、修改、删除以及排序等操作。

代码实现

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <conio.h>

struct employee{
    char number[10];		//编号
    char name[10];			//姓名 
    char sex[10];			//性别
	char birthday[10];		//出生年月
	char date[10];			//入职年月
    char degree[10];		//学历
	char position[10];		//职位
	char add[10];			//地址
	char tel[20];			//电话
	struct employee *next;
}em[100], *head;

int n;    //全局变量

void read()
{
    FILE *fp;
    int i;
    if ((fp = fopen('职工信息.txt', 'r')) == NULL)
    {
        printf('打开文件失败!请创建一个文本文件,文件名叫职工信息\n\n\n');
        system('pause');  // 冻结屏幕
        system('cls');    // 清屏
        exit(0);
    }
    fscanf(fp, '%d\n', &n);
    for (i = 0; i < n; i++)
    {
		fscanf(fp, '%s\n%s\n%s\n%s\n%s\n%s\n%s\n%s\n%s\n', em[i].number, em[i].name, em[i].sex,
				em[i].birthday, em[i].date, em[i].degree, em[i].position, em[i].add, em[i].tel);
    }
    head = &em[0];
    fclose(fp);
}

void write()
{
    FILE *fp;
    int i = 0;
    if ((fp = fopen('职工信息录入.txt', 'w+')) == NULL)
    {
        printf('!!!打开文件失败!!!\n');
        return;
    }
    fprintf(fp,'%d\n',n); 
    while(i < n) 
    { 
        fprintf(fp,'%s\n%s\n%s\n%s\n%s\n%s\n%s\n%s\n%s\n',em[i].number, em[i].name, em[i].sex,
				em[i].birthday, em[i].date, em[i].degree, em[i].position, em[i].add, em[i].tel);
        i++; 
    } 
    fclose(fp);
}

// 增加

void add()
{
	int i, flag;
    char c;
    read();
    do
    {
        flag = 0;
        printf('\n\n');
        printf('请输入职工的编号:');
        scanf('%s', &em[n].number);
        for (i = 0; i < n; i++)
        {
            if(strcmp(em[i].number, em[n].number) == 0)
            {
                flag = 1;
                break;
            }
        }
        if(flag)
        {
                printf('!!!该职工已存在!!!\n\n');
                printf('\t\t是否继续输入?(Y/N): ');
                scanf('%c', &c);
                if(c == 'N' || c == 'n')
					break;
				continue;
        }
        printf('请输入职工姓名:');
        scanf('%s', &em[n].name);
        printf('请输入职工性别:');
        scanf('%s', &em[n].sex);
        printf('请输入职工出生年月:');
        scanf('%s', &em[n].birthday);
        printf('请输入职工入职年月:');
        scanf('%s', &em[n].date);
        printf('请输入职工学历:');
        scanf('%s', &em[n].degree);
        printf('请输入职工职务:');
        scanf('%s', &em[n].position); 
        printf('请输入职工住址:');
        scanf('%s', &em[n].add);
        printf('请输入职工电话:');
        scanf('%s', &em[n].tel);
        printf('是否继续输入?(Y/N): ');
        scanf('%*c%c', &c);
        n++;
    }while (c != 'N' && c != 'n'); 
    write();
    printf('\n\n数据已保存!\n\n');
}
       
//输出函数
  
void output(int t)
{
    printf('+--------+----+----+--------+--------+----+--------+----+------------+\n');
	printf('|职工编号|姓名|性别|出生年月|入职年月|学历|  职务  |地址|    电话    |\n');
	printf('+--------+----+----+--------+--------+----+--------+----+------------+\n');
    {
	printf('|%4s    |%3s|%3s |%7s |%7s |%4s|%6s  |%4s|%11s |\n', em[t].number, em[t].name,
			em[t].sex, em[t].birthday, em[t].date, em[t].degree, em[t].position, em[t].add, em[t].tel);
	}
}

//显示

void show()
{
	int i;
    read();
    if (n == 0)
	    printf('无记录!\n\n');
    else
        for (i = 0; i < n; i++)
        {
            output(i);
        }
}

// 查询

void search()
{
    int num, flag, i;
    char a[10], name[10], degree[10], position[10], sex[10], birthday[10], date[10], add[10], tel[20];     
    char c;
    read();
    while (1)
    {
        printf('\n');
        printf('+---------------------------------+\n');
        printf('|    职 工 信 息 查 询 系 统      |\n'); 
        printf('|          1.按编号查询           |\n');  
        printf('|          2.按姓名查询           |\n'); 
        printf('|          3.按学历查询           |\n'); 
        printf('|          4.按职务查询           |\n'); 
		printf('|          5.按性别查询           |\n');
        printf('|          6.按出生年月查询       |\n');
        printf('|          7.按入职年月查询       |\n');
        printf('|          8.按地址查询           |\n');
        printf('|          9.按电话查询           |\n');
        printf('|      输入其他任意键退出本模块   |\n'); 
        printf('+---------------------------------+\n'); 
        printf('请选择操作:');
        scanf('%d', &num);
        if (num < 1 || num > 9)
        {
            printf('!!!输入错误!!!\n\n');
        	system('cls');    // 清屏
        }          
        if (num == 1)
        {
            printf('\n请输入您要查询的职工的编号:');
            scanf('%s', &a);
            for (i = 0; i < n; i++)
            {
                if (strcmp(em[i].number, a) == 0)
                {
                    output(i);
                    flag = 1;
                }
            }
        }
        else if (num == 2)       
        {
            printf('\n请输入您要查询的职工的姓名:'); 
            scanf('%s', &name); 
            for (i = 0; i < n; i++) 
            {
                if (strcmp(em[i].name, name) == 0) 
                {
                    output(i);
                    flag = 1;   
                } 
            }
        }
        // ... (其他查询条件)
        if(!flag)       
        {
            printf('\n\n!!!无该职工信息!!!\n\n');
        }
        
        printf('\n\n是否继续查询?(Y/N):');
        scanf('%*c%c', &c);
        if(c == 'N' || c == 'n')
			break;
    }
}
         
//   修改

void modify()      
{
    // ... (修改逻辑)
    write();
}

//  删除函数

void Delete()    
{
    // ... (删除逻辑)
    write();
}

//输出函数 
  
void show(employee *head)
{
	// ... (输出逻辑)
}

//交换

void exchange(char *p,char *q) 
{
	// ... (交换逻辑)
}

//排序

void sort() 
{
	// ... (排序逻辑)
}

//菜单

void menu()
{
	// ... (菜单逻辑)
}

int main()
{
    // ... (主函数逻辑)
}

最难处理的问题

最难处理的问题可能是字符串的输入输出和比较,需要特别注意数组越界和字符串结束符的问题。

改进方向

  • 可以使用链表来存储职工信息,方便数据的插入和删除。
  • 可以使用图形界面来提高用户体验。
  • 可以添加更多的功能,例如数据统计、报表生成等。

希望这篇文章能帮助你理解如何用C语言实现一个职工信息管理系统。

注意

以上代码仅供参考,实际应用中需要根据具体需求进行修改。


原文地址: https://www.cveoy.top/t/topic/fwVT 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录