小编找到了一个特别好的职工管理系统,分享给大家一份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◎请输入想进行操作的序号【 】/b/b"); *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◎请输入想进行操作的序号【 】/b/b"); *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◎请输入想进行操作的序号【 】/b/b"); *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◎请输入想进行操作的序号【 】/b/b"); *num=getchar(); return SUCCESS;}//标题头int Print_Tittle(){ printf("-------------------------------------------/n"); printf(" 工号 | 姓名 |性别|年龄| 电话 /n"); printf("-------------------------------------------/n"); return SUCCESS;}//选择将要打开的文件int File_name(){ printf("/n/t◎请输入您想要打开的文件:"); //memset(filename,0,sizeof(filename)); if(scanf("%s", filename)!=1){ printf("/a 选择文件错误!"); return FAILED; } return SUCCESS;}//生成链表,参数n是add记录数量struct Employee *Creat() { printf("/n/t◎请输入要添加的数据个数:"); 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):【 】/b/b"); 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):【 】/b/b"); 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%3s/n", pt->num,pt->name,pt->sex,pt->age,pt->tel); pt = pt->next; }while(pt!=NULL); printf("/n/n"); 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%3s/n", pt->num,pt->name,pt->sex,pt->age,pt->tel); printf("/n/n"); return 0; } pt = pt->next; }while(pt!=NULL); printf("/t数据库中没有存储您要查询的数据!/n"); printf("/n/n"); 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%3s/n", pt->num,pt->name,pt->sex,pt->age,pt->tel); m = 1; } pt = pt->next; }while(pt!=NULL); if(!m) printf("数据库中没有存储您要查询的数据!/n"); printf("/n/n"); 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):【 】/b/b"); 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("/n/t◎谢谢使用!"); system("pause"); exit(0);}//menu函数int Emp_Menu(){ //int* Menu=NULL; int menu=0; //Print_Head(&Menu); //menu=*Menu; //delete Menu; //printf("%d/n",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):【 】/b/b"); 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("/n/t◎程序将要退出,操作已保存!"); 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__
更多学习资料请关注专题《管理系统开发》。
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持武林网。
新闻热点
疑难解答
图片精选