zoukankan      html  css  js  c++  java
  • C语言职工信息管理系统

    */
     * Copyright (c) 2016,烟台大学计算机与控制工程学院
     * All rights reserved.
     * 文件名:text.cpp
     * 作者:常轩
     * 微信公众号:Worldhello
     * 完成日期:2016年6月30日
     * 版本号:V1.0
     * 问题描述:模块化设计,分别有录入信息,删除信息,浏览信息,查询信息,修改信息,采用链表存储数据,用文件保存职工信息等
     * 程序输入:无
     * 程序输出:见运行结果
     */


    在此博文中的程序可能会有一些BUG,如想获取此程序的工程压缩包,请关注微信公众号:Worldhello,在后台回复:职工信息管理系统,即可获得压缩包与完整的程序设计报告。另外回复:银行储蓄,可获得通过使用XML文件存取用户信息的C++程序。后台获得的程序BUG相对来说会比较少,因为一直在优化。

    #include "stdio.h"
    #include "stdlib.h"
    #include "string.h"
    #include "malloc.h"
    struct WORK{
    	int     Number;                           //工号
    	char    Name[32];                         //姓名
        char    Sex[2];                           //性别
    	int     Old;                              //年龄
    	char    Edu[20];                          //学历
    	float  Salary;                            //工资
    	char    Address[64];                      //住址
    	long     Tel;                              //电话
    	struct  WORK *next;
    };
    WORK* worker=NULL;                           
    void Help();                                   //帮助
    void saveWorToFile();                          //保存职工信息到文件
    void addworker(WORK *wor);                     //添加职工信息(链表操作)
    void delWork(char* name);                      //删除职工信息(链表操作) 
    void delworker();                              //删除职工信息
    void add();                                    //录入职工信息
    void lookthrough();                            //浏览职工信息
    void query();                                  //查询职工信息
    void Reviseworker();                           //修改职工信息
    int menu_select();                             //菜单界面
    void readWorkerput ();                         //从文件中读取职工信息
    int main()
    {   
        readWorkerput ();
    	char choose;
        for(;;)
    	{
           choose=menu_select();
    	   if(choose==1)
    		    add();
    	   else if(choose==2)
                  lookthrough();
    	   else if(choose==3)
                  query();
    	   else if(choose==4)
                   delworker();
    	   else if(choose==5)
    		       Reviseworker()  ;                            
           else if(choose==6)
    		       Help();
    	   else
    	      break;
    	}
    	return 0;
    }
    int menu_select()                             //菜单函数定义
    {
       char c;
       printf("===============================================================
    ");
       printf("|----------------------职工信息管理系统 v1.0------------------|
    ");
       printf("|                                                             |
    ");
       printf("|                         1.录入信息                          |
    ");
       printf("|                         2.浏览信息                          |
    ");
       printf("|                         3.查询信息                          |
    ");
       printf("|                         4.删除信息                          |
    ");
       printf("|                         5.修改信息                          |
    ");
       printf("|                         6.使用帮助                          |
    ");
       printf("|                         7.退出系统                          |
    ");
       printf("***************************************************************
    ");
       printf("                    请输入(1-7)进行操作:
    ");
       do{
    	    scanf("%c",&c);
       }while(c<'1'||c>'7');
       return c-48;
    
    }
    /****************************************************************************************************************************/
    void add()                                    //1、录入职工信息函数定义
    {
    	WORK *p;
    	p=worker;
    	int     tmp=1;
    	int     number;
    	char    name[32];
        char    sex[2];
    	int     old;
    	char    edu[20];
    	float  salary;
    	char    address[64];
    	long     tel;
        printf("输入工号:");
    	scanf("%d",&number);
        while(p!=NULL)
    	{
    		if(p->Number ==number)
    		{
    			printf("该工号已存在!
    ");
    			tmp =2;
    		}
            p=p->next;
    	}	
    	if(tmp==2)
    		return ;
    	printf("输入姓名:");  //姓名
    	scanf("%s",name);
        printf("输入性别:");  //性别
    	scanf("%s",sex);
    	printf("输入年龄:");  //年龄
    	scanf("%d",&old);
    	printf("输入学历:");  //学历
    	scanf("%s",edu);
    	printf("输入工资:");  //工资
    	scanf("%f",&salary);
    	printf("输入地址:");  //地址
        scanf("%s",address);
    	printf("输入电话:");  //电话
    	scanf("%ld",&tel);
    	WORK *n=(WORK *)malloc(sizeof(WORK));
        n->Number=number;
        strcpy(n->Name,name);
    	strcpy(n->Sex,sex);
    	n->Old=old;
    	strcpy(n->Edu,edu);
    	n->Salary=salary;
    	strcpy(n->Address,address);
    	n->Tel=tel;
        addworker(n);
    	saveWorToFile();
    	printf("录入成功!
    ");
    }
    void addworker(WORK *wor)
    {
    	WORK *p;
    	if(worker==NULL)
    	{
    		worker =wor;
    		wor->next=NULL;
    	}
    	else
    	{
    		p = worker;
    		while(p)
    		{
    			if(p->next==NULL)
    			{
    				p->next =wor;
    				wor->next =NULL;
                    
    			}
    			p= p->next;
    		}
    	}
    }
    /***************************************************************************************************************************/
    void lookthrough()                              //2、浏览信息
    {
    	WORK * p;
    	p=worker;
    	if(p!=NULL)
    	{   
    		printf("工号 姓名 性别 年龄 学历 工资 地址 电话
    ");
        	while(p!=NULL)
    		{
              printf("%d %s %s %d %s %f %s %ld
    ",p->Number,p->Name,p->Sex,p->Old,p->Edu,p->Salary,p->Address,p->Tel);
              p=p->next;
    		}
    	}
    	else
    	   printf("暂无职工信息!
    ");
    }
    	
    /***************************************************************************************************************************/
    void query()                             //3、查询职工信息
    {
    	int num;
    	int tmp=1;
    	WORK * p;
    	p=worker;
    	int ju;
    	int nianling;
    	char xueli[20];
    	int judge;
    	printf("                   精确查找请按--1
                       批量查找请按--2
    ");
    	scanf("%d",&judge);
    	switch(judge)
    	{
    	case 1:
    		printf("请输入您要查询的工号:
    ");
    		scanf("%d",&num);
    		while(p!=NULL)
    		{
    			if(p->Number==num)
    			{
    				tmp =3;
    				break;
    			}
    			 p=p->next;
    		}
    		if(tmp==3)
    		{
    			printf("工号 姓名 性别 年龄 学历 工资 地址 电话
    ");
    			printf("%d %s %s %d %s %f %s %ld
    ",p->Number,p->Name,p->Sex,p->Old,p->Edu,p->Salary,p->Address,p->Tel);
    		}
    		else
    		  printf("工号不存在!
    ");
    		break;
        case 2:
    		
    		printf("                   查询同一年龄职工信息请按------1
                       查询同一学历职工信息请按------2
    ");
    		scanf("%d",&ju);
    		if(ju==1)
    		{   
    			printf("请输入年龄:
    ");
    			scanf("%d",&nianling);
    			if(p!=NULL)
    			{   printf("工号 姓名 性别 年龄 学历 工资 地址 电话
    ");
             		while(p!=NULL)
    				{
    					if(p->Old==nianling)
    					{
    					  printf("%d %s %s %d %s %f %s %ld
    ",p->Number,p->Name,p->Sex,p->Old,p->Edu,p->Salary,p->Address,p->Tel);
    					}
    					 p=p->next;
    				}
    			}
    			else
                    printf("暂无职工信息!");
    		} 
    		else if(ju==2)
    		{
               printf("请输入学历:");
    		   scanf("%s",xueli);
               	if(p!=NULL)
    			{
             		while(p!=NULL)
    				{
    					if(!strcmp(p->Edu,xueli))
    					{
    					  printf("%d %s %s %d %s %f %s %ld
    ",p->Number,p->Name,p->Sex,p->Old,p->Edu,p->Salary,p->Address,p->Tel);
    					}
    					 p=p->next;
    				}
    			}
    			else
                    printf("暂无职工信息!");
    		}
    	}
    }
    /***************************************************************************************************************************/
    void delworker()                                //4、删除职工信息
    {
    	WORK * p;
    	p=worker;
    	int n;
    	int tem=1;
    	char panduan[4];
    	printf("请输入要删除的工号:
    ");
        scanf("%d",&n);
    	printf("确定删除%d?(yes/no)
    ",n);
        scanf("%s",panduan);
    	if(strcmp("no",panduan)==0)
    	          return;
    	else
    	{
    	   while(p!=NULL)
    	   {
    	     if(p->Number==n)
    		 {
    			tem =2;
    			break;
    		 }
             p=p->next;
    	   }
        }
    	if(tem==2)
    		delWork(p->Name);
    	saveWorToFile();
    }
    void delWork(char *name)
    {
    	WORK *p,*pre;
    	if (worker==NULL)
    	{
    		return;
    	}
    	p =pre=worker;
    	while(p)
    	{
    		if (!strcmp(p->Name,name))
    		{
    			if(p==worker)
    			{
    					worker = worker->next;
    					free(p);
    					printf("删除成功!
    ");
    					p=NULL;
    			}
    			else
    			{
    				pre->next =p->next;
    				free(p);
    				printf("删除成功!
    ");
    				p=NULL;
    
    			}
    		}
    		else
    		{
    			pre =p;
    			p= p->next;
    		}
    	}
    }
    /***************************************************************************************************************************/
    void Reviseworker()                               //修改职工信息
    {
    	char    name[32];
        char    sex[2];
    	int     old;
    	char    edu[20];
    	float   salary;
    	char    address[64];
    	long    tel;
       WORK * p;
       p=worker;
       int num;
       int a=1;
       char xueli[20];
       float money;
       int judge;
       printf("选择精确修改请按1
    选择批量修改请按2
    ");
       scanf("%d",&judge);
       switch(judge)
       {
       case 1:
    		   printf("请输入被修改职工工号:
    ");
    		   scanf("%d",&num);
    		   if(p==NULL)
    		   {
    			   printf("暂无职工信息录入!
    ");
    			   return ;
    		   }
    		   while(p)
    		   {
    			   if(p->Number==num)
    			   {   
    				    printf("此职工原来信息如下:
    ");
    				    printf("工号 姓名 性别 年龄 学历 工资 地址 电话
    ");
    				    printf("%d %s %s %d %s %f %s %ld
    ",p->Number,p->Name,p->Sex,p->Old,p->Edu,p->Salary,p->Address,p->Tel);
    				 	printf("输入姓名:");  //姓名
    					scanf("%s",name);
    					printf("输入性别:");  //性别
    					scanf("%s",sex);
    					printf("输入年龄:");  //年龄
    					scanf("%d",&old);
    					printf("输入学历:");  //学历
    					scanf("%s",edu);
    					printf("输入工资:");  //工资
    					scanf("%f",&salary);
    					printf("输入地址:");  //地址
    					scanf("%s",address);
    					printf("输入电话:");  //电话
    					scanf("%ld",&tel);
       					strcpy(p->Name,name);
    					strcpy(p->Sex,sex);
    					p->Old=old;
    					strcpy(p->Edu,edu);
    					p->Salary=salary;
    					strcpy(p->Address,address);
    					p->Tel=tel;
                        saveWorToFile();                              //保存修改后信息
    					printf("修改成功!
    ");
    					a=0;
    					break;
    			   }
    			   p=p->next;
    		   }
    		   if(a==1)
    		   printf("没有此职工信息!
    ");
    		   break;
       case 2:
    	 printf("根据学历批量修改职工工资
    ");
         printf("请输入所要批量修改的职工学历和所加工资:
    ");
    	 printf("学历:");
    	 scanf("%s",xueli);
    	 printf("所加工资:");
    	 scanf("%f",&money);
         if(p==NULL)
    	 {
    		 printf("暂无职工信息录入!
    ");
    		 return ;
    	 }
    	 while(p)
    	 {
    	   if(!strcmp(p->Edu,xueli))
    	   {
               p->Salary=p->Salary+money;
    	   }
    	   p=p->next;
    	 }
    	 printf(" 修改成功!");
        saveWorToFile();
    	break;
       }
    }
    /**************************************************************************************************************************/
    void Help()                                        //使用帮助
    { 
    	system("cls");
    	printf("该系统用来存储职工成员信息!
    
    ");
    	printf("使用说明:
    查询信息有两种方式,分为精确查找(凭借学号),批量查找(凭借年龄和学历)
    ");
    	printf("修改信息有两种方式,分为精确修改(个人信息的修改)和批量修改(同一学历的工资修改)
    ");
    	printf("学历格式:小学、初中、高中、中专、大专、大学
    
    
    
    ");
    	printf("项目开发:常轩            技术支持:Worldhello        微信公众号:Worldhello
    
    
    
      ");
    	char a[10];
    	printf("按任意键,回车后继续........
    ");
    	scanf("%s",a);
    	system("cls");
    }
    /***************************************************************************************************************************/
    void saveWorToFile()                //保存职工信息到文件
    {
    	FILE *fp;
        WORK*p;
    	p = worker;
    	if((fp=fopen("worker.txt","w"))==NULL)
    	{
    		printf("Can not open the file,press any key exit!");
    		exit(1);
    	}
    	//	fprintf(fp,"工号   姓名   性别   年龄   学历    工资   地址    电话
    ");
    	while(p)
    	{
    		fprintf(fp,"%d %s %s %d %s %f %s %ld
    ",p->Number,p->Name,p->Sex,p->Old,p->Edu,p->Salary,p->Address,p->Tel);
    		p=p->next;
        }
    	fclose(fp);
    }	
    /***************************************************************************************************************************/
    void readWorkerput ()           //运行前把文件内容读取到电脑内存
    { 
     
    
    	FILE *fp;
        fp=fopen("worker.txt","rb"); //以只读方式打开当前目录下的.txt
        if(fp==NULL)
        {
            printf("无法打开文件
    ");
            exit(0);                   //-------- 终止程序 ---------
        }
    
        int i=0;
      	while(!feof(fp))
    	{
    		WORK *p=(WORK *)malloc(sizeof(WORK));
            fscanf(fp,"%d %s %s %d %s %f %s %ld",&p->Number,p->Name,&p->Sex,&p->Old,p->Edu,&p->Salary,p->Address,&p->Tel);
    		i++;
    	}
    	fclose(fp); 
    	FILE *FP;
        FP=fopen("worker.txt","rb"); //以只读方式打开当前目录下的.txt
        if(FP==NULL)
        {
            printf("无法打开文件
    ");
            exit(0);                   //-------- 终止程序 ---------
        }
        int b=i-1;
    	int j=1;
    	if(i==1)
    	{
    	fclose(FP);
    	}
    	else
    	{
    		while(!feof(FP))
    		{
            WORK *n=(WORK *)malloc(sizeof(WORK));
            fscanf(FP,"%d %s %s %d %s %f %s %ld",&n->Number,n->Name,&n->Sex,&n->Old,n->Edu,&n->Salary,n->Address,&n->Tel);
    		//printf("%d %s %s %d %s %f %s %ld
    ",n->Number,n->Name,n->Sex,n->Old,n->Edu,n->Salary,n->Address,n->Tel);
       		addworker(n);
    		n=n->next;
    	    if(j==b)
    		break;
    	    j++;
    		}
        fclose(FP);    //----关闭文件-----
    	}
    }	
    



  • 相关阅读:
    重构改善既有代码设计--重构手法 之重新组织你的函数总结
    重构改善既有代码设计--重构手法09:Substitute Algorithm (替换算法)
    重构改善既有代码设计--重构手法08:Replace Method with Method Object (以函数对象取代函数)
    重构改善既有代码设计--重构手法07:Remove Assignments to Parameters (移除对参数的赋值)
    重构改善既有代码设计--重构手法06:Split Temporary Variable (分解临时变量)
    重构改善既有代码设计--重构手法05:Introduce Explaining Variable (引入解释性变量)
    重构改善既有代码设计--重构手法04:Replace Temp with Query (以查询取代临时变量)
    leetcode-441-Arranging Coins
    leetcode-438-Find All Anagrams in a String
    leetcode-434-Number of Segments in a String
  • 原文地址:https://www.cnblogs.com/chxuan/p/8232172.html
Copyright © 2011-2022 走看看