我是靠谱客的博主 酷炫月饼,最近开发中收集的这篇文章主要介绍C语言实现职工管理系统,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

小编找到了一个特别好的职工管理系统,分享给大家一份C语言职工管理系统的具体实现代码,供大家参考,也谢谢这位网友的分享,具体内容如下

person.cpp

#include "person.h"

//首页
int Print_Head(int * num)
{
 printf("t***********************************************n");
 printf("t|     职工管理系统    |n");
 printf("t*---------------------------------------------*n");
 printf("t|   【1】新增  【2】删改   |n");
 printf("t*   【3】查询  【4】退出   *n");
 printf("t***********************************************n");
 printf("t◎请输入想进行操作的序号【 】bb");
 *num=getchar();
 return SUCCESS;
}

//删改画面
int Print_DelRev(int* num)
{
 printf("t******************************************n");
 printf("t*          *n");
 printf("t* 【1】删除 【2】修改 【3】返回 *n");
 printf("t*          *n");
 printf("t******************************************n");
 printf("t◎请输入想进行操作的序号【 】bb");
 *num=getchar();
 return SUCCESS;
}

//查询画面
int Print_Que(int* num)
{
 printf("t******* ************************************n");
 printf("t*          *n");
 printf("t*  【1】全部查询 【2】工号查询  *n");
 printf("t*          *n");
 printf("t*  【3】模糊查询 【4】返回菜单  *n");
 printf("t*          *n");
 printf("t******************************************n");
 printf("t◎请输入想进行操作的序号【 】bb");
 *num=getchar();
 return SUCCESS;
}

//增加画面
int Print_Add(int* num)
{
 int n=0;
 printf("t******************************************n");
 printf("t*          *n");
 printf("t* 【1】新增 【2】添加 【3】返回 *n");
 printf("t*          *n");
 printf("t******************************************n");
 printf("t◎请输入想进行操作的序号【 】bb");
 *num=getchar();
 return SUCCESS;
}

//标题头
int Print_Tittle()
{
 printf("-------------------------------------------n");
 printf(" 工号 | 姓名 |性别|年龄| 电话  n");
 printf("-------------------------------------------n");
 return SUCCESS;
}

//选择将要打开的文件
int File_name()
{
 printf("nt◎请输入您想要打开的文件:");
 //memset(filename,0,sizeof(filename));
 if(scanf("%s", filename)!=1){
 printf("a 选择文件错误!");
 return FAILED;
 }
 return SUCCESS;
}


//生成链表,参数n是add记录数量
struct Employee *Creat() {
 printf("nt◎请输入要添加的数据个数:");
 int n;
 if(scanf("%d", &n)!=1) {
 printf("a error!");
 }
 struct Employee *head;
 struct Employee *p1, *p2;

 system("cls");
 for(int i=1;i<n+1;i++) {
 p1 = (struct Employee*)malloc(SIZE);
 Print_Tittle();
 scanf("%s%s%s%d%s",p1->num,p1->name,p1->sex,
 p1->age,p1->tel);
 p1->next = NULL;
 if(i==1) {
 head = p2 = p1;
 }
 else {
 p2->next = p1;
 p2 = p1;
 }
 }
 return(head);
}

//建立新文件
int WriteData_wb(struct Employee *head) {
 FILE *fp;
 struct Employee *p;
 if((fp = fopen(filename, "wb"))==NULL)
 printf("a 打开文件错误!"); 
 p = head;
 while(p!=NULL) {
 if(fwrite(p,SIZE,1,fp)!=1) {
 printf("b 写入数据出错n");
 fclose(fp);
 return FAILED;
 }
 p=p->next;
 }
 fclose(fp);
 return SUCCESS;
}

//在已有文件添加
int WriteData_ab(struct Employee *head) {
 FILE *fp;
 struct Employee *p;
 if((fp = fopen(filename, "ab"))==NULL)
 printf("a 打开文件错误!");
 p = head;
 while(p!=NULL) {
 if(fwrite(p,SIZE,1,fp)!=1) {
 printf("b 写入数据出错n");
 fclose(fp);
 return FAILED;
 }
 p=p->next;
 }
 fclose(fp);
 return SUCCESS;
}


//增加
int Emp_Add()
{
 system("cls");
 getchar();
 int add;
 while(1){
 system("cls");
 Print_Add(&add);
 while(add!='1' && add!='2' && add!='3') {
 putchar('a');
 printf("◎请重新输入有效序号(1~3):【 】bb");
 add=getchar();
 }
 switch(add){
 case '1':
 WriteData_wb(Creat());
 printf("n◎新建文件成功数据已保存√n");
 system("pause");
 system("cls");
 Emp_Add();
 break;
 case '2':
 WriteData_ab(Creat());
 printf("n◎数据已成功添加√n");
 system("pause");
 system("cls");
 Emp_Add();
 break;
 case '3':
 system("cls");
 getchar();
 Emp_Return();
 break;
 }
 }
 return SUCCESS;
}

//读取文件的数据到链表中返回链表head指针
struct Employee *Read() {
 struct Employee *head = NULL;
 struct Employee *p1, *p2;//s = p1;p = p2;

 FILE *fp;
 if((fp=fopen(filename,"rb+"))==NULL)
 {
 printf("打开文件出错n");
 exit(0);
 }
 while(!feof(fp)) {
 if((p1=(struct Employee*)malloc(SIZE))==NULL){
 printf("内存申请出错n");
 fclose(fp);
 exit(0);
 }
 if(fread(p1,SIZE,1,fp)!=1){
 free(p1);
 break;
 }
 if(head==NULL)
 head=p2=p1;
 else{
 p2->next=p1;
 p2=p1;
 }
 }
 fclose(fp);
 return (head);
}

//删除
int Emp_Del()
{
 struct Employee* head;
 struct Employee* pt1,*pt2;
 char str_num[10];
 memset(str_num,0,sizeof(str_num));
 printf("n◎请输入你要删除的学号信息:");
 scanf("%s",str_num);
 pt1=Read();
 pt2=pt1->next;
 head=pt1;
 while(pt2!=NULL){
 if(!strcmp(pt1->num,str_num)){
 WriteData_wb(pt2);
 }else if(!strcmp(pt2->num,str_num)){
 pt1->next=pt2->next;
 WriteData_wb(head);
 }
 pt2=pt2->next;
 pt1=pt1->next;
 }
 if(pt2!=NULL){
 printf("t◎没有你要删除的数据");
 }
 return SUCCESS;
}

//修改
int Emp_Rev()
{
 struct Employee* pt1,*pt2,*head;
 char str_num[10];
 printf("t◎请输入要修改的学号信息:");
 scanf("%s",str_num);
 pt1=Read();
 pt2=pt1->next;
 head=pt1;
 while(pt2!=NULL){
 if(strcmp(pt1->num,str_num)==0) {
 Print_Tittle();
 scanf("%s%s%s%d%s",pt1->num,pt1->name,pt1->sex,
 pt1->age,pt1->tel);
 WriteData_wb(head);
 }
 else if(strcmp(pt2->num,str_num)==0) {
 Print_Tittle();
 scanf("%s%s%s%d%s",pt1->num,pt1->name,pt1->sex,
 pt1->age,pt1->tel);
 WriteData_wb(head);
 }
 pt2 = pt2->next;
 pt1 = pt1->next;
 }
 if(pt2!=NULL)
 printf("数据库中没有存储您要删除的数据!n");
 return 0;
}

//删改
int Emp_DelRev()
{
 
 getchar();
 int delrev=0;
 while(1){
 system("cls");
 Print_DelRev(&delrev);
 while(delrev!='1' && delrev!='2' && delrev!='3'){
 putchar('a');
 //getchar();
 printf("○请重新输入有效序号(1~3):【 】bb");
 delrev=getchar();
 }
 switch(delrev){
 case '1':
 Emp_Del();
 printf("n◎已成功删除指定数据!");
 system("pause");
 getchar();
 break;
 case '2':
 Emp_Rev();
 printf("n◎已成功修改指定数据!");
 system("pause");
 getchar();
 break;
 case '3':
 system("cls");
 getchar();
 Emp_Return();
 break;
 }
 }
 return SUCCESS;
}

//总体查询
int Emp_QueAll()
{
 struct Employee *pt;
 pt = Read();
 Print_Tittle();
 do {
 printf("%2s%5s%4s%2d%3sn",
 pt->num,pt->name,pt->sex,pt->age,pt->tel);
 pt = pt->next;
 }while(pt!=NULL);
 printf("nn");
 return SUCCESS;
}

//工号查询
int Emp_QueNum() 
{
 struct Employee *pt;
 char str_num[10];
 printf("t◎请输入您要查询的学号:");
 scanf("%s", str_num);
 pt = Read();
 Print_Tittle();
 do {
 if(!strcmp(pt->num,str_num)) {
 printf("%2s%5s%4s%2d%3sn",
 pt->num,pt->name,pt->sex,pt->age,pt->tel);
 printf("nn");
 return 0;
 }
 pt = pt->next;
 }while(pt!=NULL);
 printf("t数据库中没有存储您要查询的数据!n");
 printf("nn");
 return SUCCESS;
}

//模糊查询
int Emp_QueVague()
{
 struct Employee *pt;
 char str_vague[20];
 int m=0;
 printf("t◎请输入您要查询的关键词:");
 scanf("%s", str_vague);
 pt = Read();
 Print_Tittle();
 do {
 if(strstr(pt->num,str_vague)!=0||strstr(pt->name,str_vague)!=0
 ||strstr(pt->sex,str_vague)!=0||strstr(pt->age,str_vague)!=0
 ||strstr(pt->tel,str_vague)!=0) {
 printf("%2s%5s%4s%2d%3sn",
 pt->num,pt->name,pt->sex,pt->age,pt->tel);
 m = 1;
 }
 pt = pt->next;
 }while(pt!=NULL);
 if(!m)
 printf("数据库中没有存储您要查询的数据!n");
 printf("nn");
 return SUCCESS;
}

//查询
int Emp_Que()
{
 system("cls");
 int que;
 while(1){
 system("cls");
 Print_Que(&que);
 while(que!='1' && que!='2' && que!='3'){
 putchar('a');
 printf("t○请重新输入有效序号(1~3):【 】bb");
 que=getchar();
 }
 switch(que){
 case '1':
 Emp_QueAll();
 system("pause");
 getchar();
 break;
 case '2':
 Emp_QueNum();
 system("pause");
 getchar();
 break;
 case '3':
 Emp_QueVague();
 system("pause");
 getchar();
 break;
 case '4':
 Emp_Return();
 system("pause");
 getchar();
 break;
 }
 }
 return SUCCESS;
}

//返回
int Emp_Return()
{
 Emp_Menu();
 return SUCCESS;
}

//退出
void Emp_Quit()
{
 printf("nt◎谢谢使用!");
 system("pause");
 exit(0);
}

//menu函数
int Emp_Menu()
{
 //int* Menu=NULL;
 int menu=0;
 //Print_Head(&Menu);
 //menu=*Menu;
 //delete Menu;
 //printf("%dn",menu);
 Print_Head(&menu);
 
 while(menu!='1' && menu!='2' && menu!='3'&& menu!='4') {
 printf("error! please input the right number!n");
 putchar('a');
 //getchar();
 printf("◎请重新输入有效序号(1~4):【 】bb");
 menu=getchar();
 }
 switch(menu){
 case '1': 
 File_name();
 Emp_Add();
 break;
 case '2': 
 File_name();
 Emp_DelRev();
 break;
 case '3': 
 File_name();
 Emp_Que();
 break;
 case '4': 
 Emp_Quit();
 break;
 }
 return SUCCESS;
}
/*void Sig(int n)
{
 printf("nt◎程序将要退出,操作已保存!");
 system("pause");
 exit(0);
}*/
int main()
{
 //printf("t◎使用Ctrl+C终止现在程序的运行!n");
 //signal(SIGINT,Sig);
 Emp_Menu();
 return SUCCESS;
}

person.h

#ifndef __PERSON_H__
#define __PERSON_H_
#define _CRT_SECURE_NO_DEPRECATE
#define _CRT_SECURE_CPP_OVERLOAD_STANDARD_NAMES 1
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <conio.h>
#include <signal.h>
#define SUCCESS  0
#define FAILED (!SUCCESS)
#define SIZE sizeof(struct Employee)
//全局变量
int flag=0;//返回标志
char filename[30];//要打开的文件名
//员工信息结构体
struct Employee{
 char name[20];
 char tel[15];
 char sex[5]; 
 char num[10];
 char age[3];
 struct Employee* next;
};

//建立一个链表
struct Employee* creat(int n);

//主函数
int Emp_Menu();
//首页打印
int Print_Head();
//删改打印
int Print_DelRev();
//增加打印
int Print_Add();
//表头打印
int Print_Tittle();
//新建文件写入
int WriteData_wb(struct Employee *head);
//在已有的文件写入
int WriteData_ab(struct Employee *head);
//添加
int Emp_Add();
//删除
int Emp_Del();
//修改
int Emp_Rev();
//查询
int Emp_Que();
//返回
int Emp_Return();
//退出
void Emp_Quit();

#endif //__PERSON_H__

更多学习资料请关注专题《管理系统开发》。

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持靠谱客。

最后

以上就是酷炫月饼为你收集整理的C语言实现职工管理系统的全部内容,希望文章能够帮你解决C语言实现职工管理系统所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(92)

评论列表共有 0 条评论

立即
投稿
返回
顶部