⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 wage.c

📁 自编工资管理系统
💻 C
📖 第 1 页 / 共 3 页
字号:
        switch(ch)
        {
	    case '1':
		clrscr();
		printf("\n\n\n\n\n\n");
		printf("\t\t Please input new UserNo:");
		scanf("%s",&p->UserNo);
		printf("\n\n\n");
		printf("\t\t Select the Option to update:");
		break;
	    case '2':
		clrscr();
		printf("\n\n\n\n\n\n");
		printf("\t\t Please input new UserName:");
		scanf("%s",p->UserName);
		printf("\n\n\n");
                printf("\t\t Select the Option to update:");
                break;
	    case '3':
		clrscr();
		printf("\n\n\n\n\n\n");
                printf("\t\t Please input new Wage:");
		scanf("%f",&p->Wage);
		printf("\n\n\n");
                printf("\t\t Select the Option to update:");
                break;
	    case '4':
		clrscr();
		printf("\n\n\n\n\n\n");
                printf("\t\t Please input new OtherWage:");
		scanf("%d",&p->OtherWage);
		printf("\n\n\n");
                printf("\t\t Select the Option to update:");
                break;
            default:
                printf("\t\t Invalid input information!");
                break;
        }
    }
}

void UpdateInfo()
{

	user *p;  /*移动指针*/
    char s[10];  /*保存姓名*/
    clrscr(); /*清屏*/
	printf("\n\n\n\n\n");
	printf("\t\t Please enter UserNo for search:"); /*提示输入*/
    scanf("%s",s);  /*输入要查找人的姓名*/
    p=First;  /*移动指针从头指针开始*/
    while(strcmp(p->UserNo,s)&&p!=NULL) /*做比较判断*/
    p=p->next;   /*没找到,指针后移继续查找*/
    if(p==NULL)  /*指针为空,说明没有找到*/
    {
		clrscr();
		printf("\n\n\n\n\n\n");
        printf("\t\t The UserNo %s is not exist\n",s); /*显示没找到信息*/
		printf("\n\n\n\n\n\n");
    }
    else
    {

	    printf("\n\n"); /*换行*/
        Print(p);  /*查找成功,调用输出函数输出指针p所指记录*/
	    Update(p);
        return;
    }
	printf("\t\t Press any key to return......");
	getch();
}


/*插入结点*/
void InsertToList()
{
    user *p,*info; /* info为新结点,p为新结点的后继*/
    char s[20];  /*保存查找的姓名*/
    float temp; /*临时变量*/
    clrscr(); /*清屏*/
    printf("\n\n\n\n\n");
    printf("\t\t please input UserNo to insert:"); /*提示输入在哪个结点之前插入*/
    scanf("%s",s);  /*输入指定结点的编号*/
    clrscr();/*清屏*/
   
    gotoxy(15,7); /*定位光标,按表格形式输入新结点信息*/
    printf("**************WageManage System***********");
    gotoxy(15,9);
    printf("|----------------------------------------|");
    gotoxy(15,10);
    printf("|  UserNo  |      UserName      |  Wage  |");
    gotoxy(15,11);
    printf("|----------|--------------------|--------|");
    info=(user *)malloc(sizeof(user)); /*申请空间*/
    if(!info)
    {
        printf("\nout of memory"); /*如没有得到空间,内存溢出*/
        exit(0);  /*退出程序*/
    }
    info->next=NULL;  /*新结点的后继为空*/
    info->prior=NULL; /*新结点的前驱为空*/
    gotoxy(15,12);printf("|");
    gotoxy(26,12);printf("|");
    gotoxy(47,12);printf("|");
    gotoxy(56,12);printf("|");
    gotoxy(16,12);
    inputs(info->UserNo,10);  /*输入新结点的编号,并校验*/
    if(info->UserNo[0] == '#')
	{
		return;
	} /*编号首字符为#结束输入*/
    gotoxy(27,12);
    inputs(info->UserName,20); /*输入新结点的姓名,并校验*/
    gotoxy(48,12);
    scanf("%f",&temp);   /*输入基本工资*/
    info->Wage=temp;  /*给基本工资字段赋值*/
    info->OtherWage=0; /*扣款初始为0*/
  
    printf("|----------|--------------------|--------|");
    p=First;  /*移动指针从头指针开始*/
    while(strcmp(p->UserNo,s)&&p!=NULL) /*查找结点确定插入位置*/
    p=p->next;  /*指针后移,继续查找*/
    if(p==NULL)  /*如p为空*/
      if(p==First) /*如p为头指针,说明链表为空*/
      {
         First=info;  /*新结点为头指针*/
         First->prior=NULL; /*头结点的前驱为空*/
         Last=First;  /*唯一结点,尾指针等于头指针*/
      }
      else  /*新结点插在尾部*/
      {
         Last->next=info;
         info->prior=Last;
         Last=info;  /*尾指针指向新结点*/
      }
    else
      if(p==First)  /*p不为空,但p为头指针,新结点插在第一个结点位置*/
      {
         info->prior=NULL; /*新结点的前驱为空*/
         info->next=p; /*新结点的后继为p*/
         p->prior=info; /*p的前驱是新结点*/
         First=info; /*修改头指针指向新结点*/
      }
      else /*新结点插入在中间某一个位置p之前*/
      {
         info->next=p; /*新结点的后继是p*/
         info->prior= p->prior; /*新结点的前驱是p的前驱*/
         p->prior->next=info; /*p的前驱的后继是新结点*/
         p->prior=info; /*p的前驱是新结点*/
      }
    clrscr();
	printf("\n\n\n\n\n\n\n\n\n\n\n");
    printf("\t\t ----Insert %s's wage success----\n",info->UserName);
    printf("\n\n\n");
	printf("\t\t Press any key to return......");
    getch();
}

//将输入数据保存到文件
void SaveToFile()
{
    FILE *fp;  /*定义指向文件的指针*/
    user *p; /*定义移动指针*/
    char filename[10]; /*保存输出文件名*/
    clrscr();/*清屏*/
	printf("\n\n\n\n\n\n");
    printf("\t\t Enter file name as follows e:\\data.txt:\n");/*提示输入文件名格式信息*/
	gotoxy(20,12);
    scanf("%s",filename);
    if((fp=fopen(filename,"wb"))==NULL) /*为输出打开一个二进制文件*/
    {
		printf("\n\n\n");
        printf("\t\t file name error,save failed\n");
		printf("\n\n\n");
		printf("\t\t Press any key to return......");
        getch();
    }
    p=First; /*移动指针从头指针开始*/
    while(p!=NULL) /*如p不为空*/
    {
        fwrite(p,sizeof(user),1,fp); /*写入一条记录*/
        p=p->next;  /*指针后移,处理下一条记录*/
    }
    fclose(fp); /*关闭文件*/
	printf("\n\n\n");
    printf("\t\t Save file success!\n");/*显示保存成功*/
	printf("\n\n\n");
	printf("\t\t Press any key to return......");
    getch();
}

//从文件中读取数据
void LoadfromFile()
{
    user *p,*q=NULL; /*定义记录指针变量*/
    FILE *fp; /* 定义指向文件的指针*/
    char filename[10]; /*保存文件名*/
    clrscr();/*清屏*/
    printf("\n\n\n\n\n\n");
    printf("\t\t Enter file name as follows e:\\data.txt:\n");/*输入文件名格式*/
    printf("\n\n\n");
    printf("\t\t ");
    scanf("%s",filename); /*输入文件名*/
    if((fp=fopen(filename,"rb"))==NULL) /*打开一个二进制文件,为读方式*/
    {
	    clrscr();
		printf("\n\n\n\n\n\n");
        printf("\t\t Can't open the file %s\n",filename); /*如不能打开,则结束程序*/
	    printf("\n\n\n");
	    printf("\t\t Press any key to return......");
	    getch();
        return; /*返回*/
    }
    while(First) /*当表不为空时,清空链表*/
    {
        p=First; /*从头指针开始*/
        First=First->next; /*删除头结点*/
        free(p); /*释放空间*/
    }
    First=(user *)malloc(sizeof(user)); /*为头指针申请空间*/
    if(!First) /*如果没有得到空间 显示内存溢出*/
    {
        printf("out of memory!\n");
        return;  /*返回*/
    }
    p=First; /*将头指针赋值给p*/
    while(!feof(fp)) /*当文件不空时*/
    {
        if(1!=fread(p,sizeof(user),1,fp))break; /*将记录读到p所指的结点*/
        p->next=(user *)malloc(sizeof(user));/*为p的后继申请空间*/
        if(!p->next)  /*如果没有得到空间显示内存溢出*/
        {
            printf("out of memory!\n");
            return; /*返回*/
        }
        p->prior=q; /*得到空间,则链接指针关系p的前驱为q*/
        q=p;  /*保存p做为新的p结点的前驱*/
        p=p->next;  /*p指针后移*/
    }
    q->next=NULL; /*q的后继为空*/
    Last=q;  /*尾指针为q*/
    First->prior=NULL; /*头指针的前驱为空*/
    fclose(fp); /*关闭文件*/
	printf("\n\n\n");
    printf("\t\t Reading file Success!!!\n"); /*显示成功读入记录*/
	printf("\n\n\n");
	printf("\t\t Press any key to return......");
	getch();
}

//将一条记录插入文件
void InsertToFile()
{
    FILE *fp;   /*定义指向文件的指针*/
    user *info; /*指向追加信息的指针*/
    char filename[10]; /*保存文件名*/
    float temp; /*临时变量*/
    clrscr(); /*清屏*/
    gotoxy(15,8);
    printf("*************WageManage System************");
    gotoxy(15,10);
    printf("|----------------------------------------|");
    gotoxy(15,11);
    printf("|  UserNo  |      UserName      |  Wage  |");
    gotoxy(15,12);
    printf("|----------|--------------------|--------|");
    info=(user *)malloc(sizeof(user)); /*申请追加信息的空间*/
    if(!info)
    {
        printf("\t\t Out of memory"); /*没有空间,内存溢出*/
        exit(0);  /*结束程序*/
    }
    info->next=NULL;  /*新信息的后继为空*/
    info->prior=NULL; /*新信息的前驱为空*/
    gotoxy(15,13);printf("|");
    gotoxy(26,13);printf("|");
    gotoxy(47,13);printf("|");
    gotoxy(56,13);printf("|");
    gotoxy(16,13);
    inputs(info->UserNo,10); /*输入编号并校验*/
    gotoxy(27,13);
    inputs(info->UserName,20); /*输入姓名并校验*/
    gotoxy(48,13);
    scanf("%f",&temp); /*输入基本工资*/
    info->Wage=temp;
    info->OtherWage=0; /*扣款为0*/

    printf("\t      |----------|--------------------|--------|");
    printf("\n\n\n\t      Enter file name to save as follows e:\\data.txt:\n"); /*提示输入文件名*/
    printf("\n\n\n");
    gotoxy(15,20);
    scanf("%s",filename);
    if((fp=fopen(filename,"ab")) == 0) /*打开文件*/
    {
        printf("\t\t Can't open the file\n");
	    printf("\n\n\n");
	    printf("\t\t Press any key to return......");
	    getch();
    }
    if(1!=fwrite(info,sizeof(user),1,fp)) /*向文件中追加记录*/
    {
        printf("\t\t file write error!!!\n"); /*写函数返回值不为1,说明写入错误*/
        return;  /*返回*/
    }
	gotoxy(15,25);
    printf("Insert to file  sucess!\n");/*显示追加成功*/
    fclose(fp);/*关闭文件*/
    printf("\n\n\n");
	gotoxy(15,30);
    printf("Press any key to return");
    getch();
}


/*索引*/
void IndexSort()
{
   user *p,*q,*temp,*head; /*定义临时指针*/
   clrscr();/*清屏*/
   head=First->next; /*将原表的头指针所指的下一个结点作头指针*/
   First->next=NULL; /*第一个结点为新表的头结点*/
   Last=First; /*尾指针等于头指针*/
   while(head!=NULL) /*当原表不为空时,进行排序*/
   {
      temp=head; /*取原表的头结点*/
      head=head->next; /*原表头结点指针后移*/
      p=First; /*设定移动指针p,从头指针开始*/
      q=First; /*设定移动指针q做为p的前驱,初值为头指针*/
      while(strcmp(temp->UserNo,p->UserNo)>0&&p!=NULL) /*作编号比较*/
      {
         q=p; /*待排序点值大,应往后插,所以新表指针后移*/
         p=p->next;
      }
      if(p==q)  /*p==q,说明待排序点值小,应排在首位*/
      {
         temp->next=p; /*待排序点的后继为p*/
         p->prior=temp; /*p的前驱结点指向待排序结点*/
         First=temp; /*新头结点为待排序点*/
         First->prior=NULL; /*头指针的前驱为空*/
      }
      else /*待排序点应插入在中间某个位置q和p之间,如p为空则是尾部*/
      {
         temp->next=p; /*t的后继是p*/
         temp->prior=q; /*t的前驱是q*/
         q->next=temp; /*q的后继是temp*/
         if(p==NULL) /*判p是否为空*/
            Last=temp;   /*将temp赋值为尾指针*/
         else
            p->prior=temp; /*否则将temp赋值给p的前驱*/
      }
   }
   printf("index sucess!!!\n");/*索引排序成功*/
   List();
}

//工资排序

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -