真实的国产乱ⅩXXX66竹夫人,五月香六月婷婷激情综合,亚洲日本VA一区二区三区,亚洲精品一区二区三区麻豆

成都創(chuàng)新互聯(lián)網(wǎng)站制作重慶分公司

C語言的指針和鏈表舉例分析-創(chuàng)新互聯(lián)

本篇內(nèi)容主要講解“C語言的指針和鏈表舉例分析”,感興趣的朋友不妨來看看。本文介紹的方法操作簡(jiǎn)單快捷,實(shí)用性強(qiáng)。下面就讓小編來帶大家學(xué)習(xí)“C語言的指針和鏈表舉例分析”吧!

在松江等地區(qū),都構(gòu)建了全面的區(qū)域性戰(zhàn)略布局,加強(qiáng)發(fā)展的系統(tǒng)性、市場(chǎng)前瞻性、產(chǎn)品創(chuàng)新能力,以專注、極致的服務(wù)理念,為客戶提供成都做網(wǎng)站、成都網(wǎng)站設(shè)計(jì)、成都外貿(mào)網(wǎng)站建設(shè) 網(wǎng)站設(shè)計(jì)制作按需制作,公司網(wǎng)站建設(shè),企業(yè)網(wǎng)站建設(shè),成都品牌網(wǎng)站建設(shè),網(wǎng)絡(luò)營(yíng)銷推廣,成都外貿(mào)網(wǎng)站制作,松江網(wǎng)站建設(shè)費(fèi)用合理。

 關(guān)于指針和鏈表這兩個(gè)的應(yīng)用和上次的管理系統(tǒng)有著直接的關(guān)系,沒有添加鏈表和指針的管理系統(tǒng)無法做到精確的查找。數(shù)據(jù)存儲(chǔ)方面也顯得不方便。所以指針和鏈表的作用能夠直接指向你所需要的數(shù)據(jù)地址,使程序更加完善。這次我就利用指針的應(yīng)用制作了一個(gè)管理員工工資等信息的程序。

 首先還是最重要的定義和基本函數(shù):

#include

#include

#include

#include

typedef struct Node Node;

//定義工資信息節(jié)點(diǎn)

//分別為基本工資、任務(wù)工資、支出和實(shí)得工資;

struct Score

{

  int ji,ren,zhi,sum;

};

//定義員工信息節(jié)點(diǎn)

//分別為姓名、工作號(hào)、年齡、工資和指向下一個(gè)節(jié)點(diǎn)的指針

//定義了4個(gè)全局變量,頭節(jié)點(diǎn),和臨時(shí)節(jié)點(diǎn)變量;

struct Node

{

  char name[20],num[20],age[20];

  struct Score score;

  struct Node* next;

}*head,*u,*p,*q;

 //定義多個(gè)員工的員工個(gè)數(shù)及各項(xiàng)工資高水平和平均水平;

int n,C,M,E,Cj,Cy,Mj,My,Ej,Ey;

char num[20];

 記住,一定要先定義出所需要的節(jié)點(diǎn),并做出指向下一節(jié)點(diǎn)的指針這樣指針的作用才能夠發(fā)揮出來。

這次我先做了程序的開始菜單防止后來忘記:

void Welcome()

{

  printf("\t\t    # # # # # # # # # # # # # # # # #\n");

  printf("\t\t    #  歡迎您使用員工工資管理系統(tǒng) #\n");

  printf("\t\t    #                #\n");

  printf("\t\t    #     1.讀取文件      #\n");

  printf("\t\t    #                #\n");

  printf("\t\t    #     2.保存文件      #\n");

  printf("\t\t    #                #\n");

  printf("\t\t    #     3.添加員工工資    #\n");

  printf("\t\t    #                #\n");

  printf("\t\t    #     4.修改員工工資    #\n");

  printf("\t\t    #                #\n");

  printf("\t\t    #     5.刪除員工工資    #\n");

  printf("\t\t    #                #\n");

  printf("\t\t    #     6.查詢個(gè)人工資    #\n");

  printf("\t\t    #                #\n");

  printf("\t\t    #     7.查詢本科工資    #\n");

  printf("\t\t    #                #\n");

  printf("\t\t    #     8.查詢公司工資    #\n");

  printf("\t\t    #                #\n");

  printf("\t\t    #     9.退出管理系統(tǒng)    #\n");

  printf("\t\t    #                #\n");

  printf("\t\t    # # # # # # # # # # # # # # # # #\n\n");

  printf("\t\t    請(qǐng)輸入指令:(1-9) ");

}

接下來便是制造出一個(gè)節(jié)點(diǎn)信息,并制作輸入員工信息的程序,最主要的不要忘記再次做出指向下一節(jié)點(diǎn)的函數(shù):

Node* new_node(Node* uu)

{

  uu = (Node*)malloc(sizeof(Node));

  uu->next = NULL;

  return uu;

}

//添加員工信息

void Add()

{

//新建一個(gè)節(jié)點(diǎn);

  u = new_node(u);

  printf("\n請(qǐng)輸入您要加入的員工的信息:\n");

  printf("\n姓名: ");

  scanf("%s",u->name);

  printf("\n工作號(hào): ");

  scanf("%s",u->num);

  printf("\n年齡: ");

  scanf("%s",u->age);

  printf("\n基本工資、任務(wù)工資、支出: ");

  scanf("%d%d%d",&u->score.ji,&u->score.ren,&u->score.zhi);

//計(jì)算實(shí)得工資;

  u->score.sum = u->score.ji + u->score.ren - u->score.zhi;

//采用頭插法將新節(jié)點(diǎn)的尾指針指向第二個(gè)節(jié)點(diǎn)

  u->next = head->next;

//將新節(jié)點(diǎn)放在頭節(jié)點(diǎn)后面;

  head->next = u;

  printf("\n--->添加成功!\n");

}

這一步做完我們整個(gè)的程序的地基就算是打好了,接下來就是慢慢的制作出我們所需要的一些實(shí)用指令程序比如:修改和刪除。

void Mod()

{

  n = 0;

  printf("\n請(qǐng)輸入您要修改的工作號(hào): ");

  scanf("%s",num);

  for(u = head; u != NULL;u = u->next)

  {

    if(strcmp(u->num,num) == 0)

    {

      n = 1;

      printf("\n請(qǐng)輸入新的基本工資、任務(wù)工資、支出: ");

      scanf("%d%d%d",&u->score.ji,&u->score.ren,&u->score.zhi);

      u->score.sum = u->score.ji + u->score.ren - u->score.zhi;

      printf("\n--->修改成功!\n");

      break;

    }

  }

  if(!n)

    printf("\n--->沒有這個(gè)員工的信息!\n");

}

做這個(gè)的理論想法是:讓程序一個(gè)一個(gè)節(jié)點(diǎn)的尋找,如果找到自己所需的節(jié)點(diǎn)就在這產(chǎn)生可以更新的函數(shù)程序。

void Del()

{

  n = 0;

  printf("\n請(qǐng)輸入您要?jiǎng)h除的員工的學(xué)號(hào): ");

  scanf("%s",num);

  for(u = head; u != NULL;u = u->next)

  {

    if(strcmp(u->num,num) == 0)

    {

      n = 1;

      p->next = u->next;

      free(u);

      printf("\n--->刪除成功!\n");

      break;

    }

    p = u;

  }

  if(!n)

    printf("\n--->沒有這個(gè)員工的信息!\n");

}

刪除的原理與更改相似,就是當(dāng)找到所需節(jié)點(diǎn)時(shí)將其刪除即可。并沒有什么新的操作。

 添加、刪除、修改做完以后我們由于是工資管理所以就需要信息的整合,并按照我們所需以工作號(hào)排序,所以接下來的程序就是為了解決這個(gè)問題:

 n = 0;

  for(u = head->next; u != NULL;u = u->next)

    n++;

  for(i=1;i<=n;i++)

  {

    u = head;

    for(j=0;j

    {

      p = u->next;

      q = p->next;

      if(strcmp(p->num,q->num) > 0 || strcmp(p->num,q->num) == 0 && p->score.sum < q->score.sum)

      {

        u->next = q;

        p->next = q->next;

        q->next = p;

      }

      u = u->next;

    }

  }

}

這樣程序進(jìn)行循環(huán)比較就可以按照工作號(hào)進(jìn)行升序排列并且能將工資信息列舉出來。

 全部列舉之后就是為了能讓員工們自己利用程序快速的查找到自己的信息而做出的個(gè)人信息的查找程序:

//按工作號(hào)查找某一員工成績(jī);

void Que_One()

{

//標(biāo)志變量,記錄是否查找成功;

  n = 0;

  printf("\n請(qǐng)輸入您要查詢的員工的工作號(hào): ");

  scanf("%s",num);

//從第二個(gè)節(jié)點(diǎn)開始遍歷,直到最后一個(gè)節(jié)點(diǎn)為止;

  for(u = head->next; u != NULL;u = u->next)

  {

//如果當(dāng)前節(jié)點(diǎn)工作號(hào)與要查找工作號(hào)一致這輸出此員工信息;

    if(strcmp(u->num,num) == 0)

    {

      n = 1;

      printf("\n");

      puts("年齡    姓名      基本工資  任務(wù)工資  支出 實(shí)得工資");

      printf("%-11s%-15s",u->age,u->name);

      printf("%-6d%-6d%-6d%-6d\n",u->score.ji,u->score.ren,u->score.zhi,u->score.sum);

      break;

    }

  }

  if(!n)

    printf("\n--->沒有這個(gè)員工的信息!\n");

}

再次利用循環(huán)讓程序挑出想要查找的程序并顯現(xiàn)出來有關(guān)員工的所有信息,十分的方便。

 在這之后就是整個(gè)公司的總結(jié),員工們不同的工作會(huì)使工資有所不同,從中計(jì)算出較高工資和較低工資的員工占比例為多少?gòu)亩鴽Q定公司未來的發(fā)展。

void Analyze_Sco(Node *uu)

{

//對(duì)查找到的節(jié)點(diǎn)進(jìn)行求各項(xiàng)平均工資

//求高工資率和較低工資率;

  C += uu->score.ji;

  M += uu->score.ren;

  E += uu->score.zhi;

  if(uu->score.ji >= 1000)

    Cj++;

  if(uu->score.ji >= 5000)

    Cy++;

  if(uu->score.ren >= 500)

    Mj++;

  if(uu->score.ren >= 1000)

    My++;

}

//打印各項(xiàng)平均工資高工資率和低工資率

void Print_Sco()

{

  printf("基本平均工資: %-6.2f, 較低工資率: %%%-6.2f , 高工資率: %%%-6.2f.\n\n",(float)C/n,(float)100*Cj/n,(float)100*Cy/n);

  printf("任務(wù)平均工資: %-6.2f, 較低工資率: %%%-6.2f , 高工資率: %%%-6.2f.\n\n",(float)M/n,(float)100*Mj/n,(float)100*My/n);

}

 為了確認(rèn)公司中新員工和老員工數(shù)量來判斷接下來公司可能的發(fā)展進(jìn)行年齡階段信息的排列也是必要的:

void Que_Cla()

{

//對(duì)鏈表節(jié)點(diǎn)排序;

  Sort();

  n = C = M = E = Cj = Cy = Mj = My = 0;

  printf("\n請(qǐng)輸入您要查詢的年齡: ");

  scanf("%s",num);

  printf("\n");

  for(u = head->next; u != NULL;u = u->next)

  {

//不是該年齡的員工則跳過;

    if(strcmp(u->age,num))

      continue;

//如果是第一個(gè)員工則打印頭信息

    if(!n)

      puts("年齡    姓名      基本工資  任務(wù)工資  支出 實(shí)得工資");

    n++;

    printf("%-11s%-15s",u->age,u->name);

    printf("%-6d%-6d%-6d%-d\n",u->score.ji,u->score.ren,u->score.zhi,u->score.sum);

    Analyze_Sco(u);

  }

  if(!n)

  {

    printf("沒有這個(gè)年齡的員工信息!\n");

    return ;

  }

//打印該年齡員工的各項(xiàng)工資的特征值;

  printf("\n該年齡段共有員工 %d 人.\n\n",n);

  Print_Sco();

}

在制作這些程序是為了方便也可以做出打印的輔助程序,有助于去實(shí)施。

最后便是對(duì)自己輸入或修改的資料進(jìn)行保存和再讀?。?/p>

void Save()

{

  char c;

  printf("\n確認(rèn)保存?(Y/N): ");

  scanf("%*c%c",&c);

  if(c == 'N')

    return ;

  FILE *fp;

  if((fp=fopen("C:\\data.txt","w"))==NULL)

  {

    printf("\n--->無法打開文件\n");

    return ;

  }

//寫入數(shù)據(jù)表頭信息;

  fputs("年齡    工作號(hào)    姓名      基本工資  任務(wù)工資  支出 實(shí)得工資",fp);

  if(head->next != NULL)

    fputs("\n",fp);

//從頭節(jié)點(diǎn)開始依次寫入文件;

  for(u = head->next; u != NULL;u = u->next)

  {

    fprintf(fp,"%-11s%-11s%-15s",u->age,u->num,u->name);

    fprintf(fp,"%-6d%-6d%-6d%-d",u->score.ji,u->score.ren,u->score.zhi,u->score.sum);

    if(u->next != NULL)

      fprintf(fp,"\n");

  }

  fclose(fp);

  printf("\n--->成績(jī)成功存入C:\\\\data.txt中\(zhòng)n");

}

//讀取文件;

void Open()

{

  printf("\n請(qǐng)把數(shù)據(jù)放到目錄C:\\\\data.txt中,按任意鍵確認(rèn).\n");

  getch();

  FILE *fp;

//從c盤根目錄下讀取文件;

  if((fp=fopen("C:\\data.txt","r"))==NULL)

  {

    printf("\n--->沒有找到文件!\n");

    return ;

  }

  char tmp[100];

//讀取65個(gè)菜單頭字符存入tem字符數(shù)組中;

  fgets(tmp,66,fp);

//讀到文件結(jié)尾處跳出循環(huán);

  while(!feof(fp))

  {

    u = new_node(u);

    fscanf(fp,"%s%s%s",u->age,u->num,u->name);

    fscanf(fp,"%d%d%d%d",&u->score.ji,&u->score.ren,&u->score.zhi,&u->score.sum);

//頭插法建立鏈表;

    u->next = head->next;

    head->next = u;

  }

  printf("\n--->成績(jī)讀入成功!\n");

  fclose(fp);

}

//退出程序

void Exi()

{

  char c;

  printf("\n確定退出?(Y/N): ");

  scanf("%*c%c",&c);

  if(c == 'N')

    return ;

//打印結(jié)束語;

  system("cls");

  printf("\n\n");

  printf("\t\t\t   %c %c %c %c %c %c %c %c %c\n",4,4,4,4,4,4,4,4,4);

  printf("\t\t\t   %c 謝謝使用 %c\n",4,4);

  printf("\t\t\t   %c %c %c %c %c %c %c %c %c\n",4,4,4,4,4,4,4,4,4);

  printf("\t\t\t              Thank you!\n\n\n");

  exit(0);

}

int main()

{

//存儲(chǔ)指令的變量

  int orz;

//設(shè)置系統(tǒng)文本顏色

  system("color 0B");

//新建一個(gè)員工信息頭節(jié)點(diǎn);

  head = new_node(head);

  while(1)

  {

//顯示菜單、

    Welcome();

//接收用戶命令、

    scanf("%d",&orz);

//調(diào)用系統(tǒng)函數(shù)清屏;

    system("cls");

    switch(orz)

    {

//根據(jù)指令進(jìn)入相應(yīng)菜單選項(xiàng)

      case 1:Open();break;

      case 2:Save();break;

      case 3:Add();break;

      case 4:Mod();break;

      case 5:Del();break;

      case 6:Que_One();break;

      case 7:Que_Cla();break;

      case 8:Que_All();break;

      case 9:Exi();break;

      default :printf("\n--->無效的指令!\n");

    }

    printf("\n");

//執(zhí)行系統(tǒng)函數(shù)

    system("pause");

    system("cls");

  }

  return 0;

}

這樣這個(gè)程序就完整的完成了。在這次的程序設(shè)計(jì)中我們要注意,不要忘記讓指針指向下一節(jié)點(diǎn),并且注意。指針的指向是否與你設(shè)置的方向一致。要細(xì)心盡量不要出現(xiàn)錯(cuò)誤,否則更改起來會(huì)異常的麻煩。隨著C語言程序設(shè)計(jì)這門課的結(jié)束,我對(duì)于C語言的了解變得更加的深入,并且也對(duì)他產(chǎn)生了濃厚的興趣。在最后附上這次所做的完整程序代碼:


#include

#include

#include

#include

typedef struct Node Node;

//定義工資信息節(jié)點(diǎn)

//分別為基本工資、任務(wù)工資、支出和實(shí)得工資;

struct Score

{

  int ji,ren,zhi,sum;

};

//定義員工信息節(jié)點(diǎn)

//分別為姓名、工作號(hào)、年齡、工資和指向下一個(gè)節(jié)點(diǎn)的指針

//定義了4個(gè)全局變量,頭節(jié)點(diǎn),和臨時(shí)節(jié)點(diǎn)變量;

struct Node

{

  char name[20],num[20],age[20];

  struct Score score;

  struct Node* next;

}*head,*u,*p,*q;

 //定義多個(gè)員工的員工個(gè)數(shù)及各項(xiàng)工資高水平和平均水平;

int n,C,M,E,Cj,Cy,Mj,My,Ej,Ey;

char num[20];

//進(jìn)入菜單函數(shù)

void Welcome()

{

  printf("\t\t    # # # # # # # # # # # # # # # # #\n");

  printf("\t\t    #  歡迎您使用員工工資管理系統(tǒng) #\n");

  printf("\t\t    #                #\n");

  printf("\t\t    #     1.讀取文件      #\n");

  printf("\t\t    #                #\n");

  printf("\t\t    #     2.保存文件      #\n");

  printf("\t\t    #                #\n");

  printf("\t\t    #     3.添加員工工資    #\n");

  printf("\t\t    #                #\n");

  printf("\t\t    #     4.修改員工工資    #\n");

  printf("\t\t    #                #\n");

  printf("\t\t    #     5.刪除員工工資    #\n");

  printf("\t\t    #                #\n");

  printf("\t\t    #     6.查詢個(gè)人工資    #\n");

  printf("\t\t    #                #\n");

  printf("\t\t    #     7.查詢本科工資    #\n");

  printf("\t\t    #                #\n");

  printf("\t\t    #     8.查詢公司工資    #\n");

  printf("\t\t    #                #\n");

  printf("\t\t    #     9.退出管理系統(tǒng)    #\n");

  printf("\t\t    #                #\n");

  printf("\t\t    # # # # # # # # # # # # # # # # #\n\n");

  printf("\t\t    請(qǐng)輸入指令:(1-9) ");

}

//構(gòu)造節(jié)點(diǎn)函數(shù)

Node* new_node(Node* uu)

{

  uu = (Node*)malloc(sizeof(Node));

  uu->next = NULL;

  return uu;

}

//添加員工信息

void Add()

{

//新建一個(gè)節(jié)點(diǎn);

  u = new_node(u);

  printf("\n請(qǐng)輸入您要加入的員工的信息:\n");

  printf("\n姓名: ");

  scanf("%s",u->name);

  printf("\n工作號(hào): ");

  scanf("%s",u->num);

  printf("\n年齡: ");

  scanf("%s",u->age);

  printf("\n基本工資、任務(wù)工資、支出: ");

  scanf("%d%d%d",&u->score.ji,&u->score.ren,&u->score.zhi);

//計(jì)算實(shí)得工資;

  u->score.sum = u->score.ji + u->score.ren - u->score.zhi;

//采用頭插法將新節(jié)點(diǎn)的尾指針指向第二個(gè)節(jié)點(diǎn)(掰開)

  u->next = head->next;

//將新節(jié)點(diǎn)放在頭節(jié)點(diǎn)后面;

  head->next = u;

  printf("\n--->添加成功!\n");

}

//根據(jù)工作號(hào)修改信息

//和查找函數(shù)一樣,依次從第二個(gè)節(jié)點(diǎn)開始遍歷,如果找到這更新

void Mod()

{

  n = 0;

  printf("\n請(qǐng)輸入您要修改的工作號(hào): ");

  scanf("%s",num);

  for(u = head; u != NULL;u = u->next)

  {

    if(strcmp(u->num,num) == 0)

    {

      n = 1;

      printf("\n請(qǐng)輸入新的基本工資、任務(wù)工資、支出: ");

      scanf("%d%d%d",&u->score.ji,&u->score.ren,&u->score.zhi);

      u->score.sum = u->score.ji + u->score.ren - u->score.zhi;

      printf("\n--->修改成功!\n");

      break;

    }

  }

  if(!n)

    printf("\n--->沒有這個(gè)員工的信息!\n");

}

//根據(jù)工作號(hào)刪除員工信息,

//從頭節(jié)點(diǎn)開始遍歷,如果找到這刪除此節(jié)點(diǎn);

void Del()

{

  n = 0;

  printf("\n請(qǐng)輸入您要?jiǎng)h除的員工的學(xué)號(hào): ");

  scanf("%s",num);

  for(u = head; u != NULL;u = u->next)

  {

    if(strcmp(u->num,num) == 0)

    {

      n = 1;

      p->next = u->next;

      free(u);

      printf("\n--->刪除成功!\n");

      break;

    }

    p = u;

  }

  if(!n)

    printf("\n--->沒有這個(gè)員工的信息!\n");

}

void Sort()

{

  int i,j;

//記錄員工總數(shù);

  n = 0;

  for(u = head->next; u != NULL;u = u->next)

    n++;

//采用冒泡法對(duì)各個(gè)節(jié)點(diǎn)按工作號(hào)升序和實(shí)得工資降序排列

  for(i=1;i<=n;i++)

  {

    u = head;

    for(j=0;j

    {

      p = u->next;

      q = p->next;

      if(strcmp(p->num,q->num) > 0 || strcmp(p->num,q->num) == 0 && p->score.sum < q->score.sum)

      {

        u->next = q;

        p->next = q->next;

        q->next = p;

      }

      u = u->next;

    }

  }

}

//按工作號(hào)查找某一員工成績(jī);

void Que_One()

{

//標(biāo)志變量,記錄是否查找成功;

  n = 0;

  printf("\n請(qǐng)輸入您要查詢的員工的工作號(hào): ");

  scanf("%s",num);

//從第二個(gè)節(jié)點(diǎn)開始遍歷,直到最后一個(gè)節(jié)點(diǎn)為止;

  for(u = head->next; u != NULL;u = u->next)

  {

//如果當(dāng)前節(jié)點(diǎn)工作號(hào)與要查找工作號(hào)一致這輸出此員工信息;

    if(strcmp(u->num,num) == 0)

    {

      n = 1;

      printf("\n");

      puts("年齡    姓名      基本工資  任務(wù)工資  支出 實(shí)得工資");

      printf("%-11s%-15s",u->age,u->name);

      printf("%-6d%-6d%-6d%-6d\n",u->score.ji,u->score.ren,u->score.zhi,u->score.sum);

      break;

    }

  }

  if(!n)

    printf("\n--->沒有這個(gè)員工的信息!\n");

}

void Analyze_Sco(Node *uu)

{

//對(duì)查找到的節(jié)點(diǎn)進(jìn)行求各項(xiàng)平均工資

//求高工資率和較低工資率;

  C += uu->score.ji;

  M += uu->score.ren;

  E += uu->score.zhi;

  if(uu->score.ji >= 1000)

    Cj++;

  if(uu->score.ji >= 5000)

    Cy++;

  if(uu->score.ren >= 500)

    Mj++;

  if(uu->score.ren >= 1000)

    My++;

}

//打印各項(xiàng)平均工資高工資率和低工資率

void Print_Sco()

{

  printf("基本平均工資: %-6.2f, 較低工資率: %%%-6.2f , 高工資率: %%%-6.2f.\n\n",(float)C/n,(float)100*Cj/n,(float)100*Cy/n);

  printf("任務(wù)平均工資: %-6.2f, 較低工資率: %%%-6.2f , 高工資率: %%%-6.2f.\n\n",(float)M/n,(float)100*Mj/n,(float)100*My/n);

}

//查找某一年齡所有員工的信息;

void Que_Cla()

{

//對(duì)鏈表節(jié)點(diǎn)排序;

  Sort();

  n = C = M = E = Cj = Cy = Mj = My = 0;

  printf("\n請(qǐng)輸入您要查詢的年齡: ");

  scanf("%s",num);

  printf("\n");

  for(u = head->next; u != NULL;u = u->next)

  {

//不是該年齡的員工則跳過;

    if(strcmp(u->age,num))

      continue;

//如果是第一個(gè)員工則打印頭信息

    if(!n)

      puts("年齡    姓名      基本工資  任務(wù)工資  支出 實(shí)得工資");

    n++;

    printf("%-11s%-15s",u->age,u->name);

    printf("%-6d%-6d%-6d%-d\n",u->score.ji,u->score.ren,u->score.zhi,u->score.sum);

    Analyze_Sco(u);

  }

  if(!n)

  {

    printf("沒有這個(gè)年齡的員工信息!\n");

    return ;

  }

//打印該年齡員工的各項(xiàng)工資的特征值;

  printf("\n該年齡段共有員工 %d 人.\n\n",n);

  Print_Sco();

}

//打印公司所有員工的信息

//具體情況同打印年齡段員工信息;

void Que_All()

{

  Sort();

  n = C = M = E = Cj = Cy = Mj = My = Ej = Ey = 0;

  printf("\n");

  if(head->next == NULL)

  {

    printf("--->沒有員工信息!\n");

    return ;

  }

  puts("年齡     工作號(hào)     姓名      基本工資  任務(wù)工資  支出 實(shí)得工資");

  for(u = head->next; u != NULL;u = u->next)

  {

    n++;

    printf("%-12s%-12s%-15s",u->age,u->num,u->name);

    printf("%-6d%-6d%-6d%-d\n",u->score.ji,u->score.ren,u->score.zhi,u->score.sum);

    Analyze_Sco(u);

  }

  printf("\n全公司共有員工 %d 人.\n\n",n);

  Print_Sco();

}

//保存文件;

void Save()

{

  char c;

  printf("\n確認(rèn)保存?(Y/N): ");

  scanf("%*c%c",&c);

  if(c == 'N')

    return ;

  FILE *fp;

  if((fp=fopen("C:\\data.txt","w"))==NULL)

  {

    printf("\n--->無法打開文件\n");

    return ;

  }

//寫入數(shù)據(jù)表頭信息;

  fputs("年齡    工作號(hào)    姓名      基本工資  任務(wù)工資  支出 實(shí)得工資",fp);

  if(head->next != NULL)

    fputs("\n",fp);

//從頭節(jié)點(diǎn)開始依次寫入文件;

  for(u = head->next; u != NULL;u = u->next)

  {

    fprintf(fp,"%-11s%-11s%-15s",u->age,u->num,u->name);

    fprintf(fp,"%-6d%-6d%-6d%-d",u->score.ji,u->score.ren,u->score.zhi,u->score.sum);

    if(u->next != NULL)

      fprintf(fp,"\n");

  }

  fclose(fp);

  printf("\n--->成績(jī)成功存入C:\\\\data.txt中\(zhòng)n");

}

//讀取文件;

void Open()

{

  printf("\n請(qǐng)把數(shù)據(jù)放到目錄C:\\\\data.txt中,按任意鍵確認(rèn).\n");

  getch();

  FILE *fp;

//從c盤根目錄下讀取文件;

  if((fp=fopen("C:\\data.txt","r"))==NULL)

  {

    printf("\n--->沒有找到文件!\n");

    return ;

  }

  char tmp[100];

//讀取65個(gè)菜單頭字符存入tem字符數(shù)組中;

  fgets(tmp,66,fp);

//讀到文件結(jié)尾處跳出循環(huán);

  while(!feof(fp))

  {

    u = new_node(u);

    fscanf(fp,"%s%s%s",u->age,u->num,u->name);

    fscanf(fp,"%d%d%d%d",&u->score.ji,&u->score.ren,&u->score.zhi,&u->score.sum);

//頭插法建立鏈表;

    u->next = head->next;

    head->next = u;

  }

  printf("\n--->成績(jī)讀入成功!\n");

  fclose(fp);

}

//退出程序

void Exi()

{

  char c;

  printf("\n確定退出?(Y/N): ");

  scanf("%*c%c",&c);

  if(c == 'N')

    return ;

//打印結(jié)束語;

  system("cls");

  printf("\n\n");

  printf("\t\t\t   %c %c %c %c %c %c %c %c %c\n",4,4,4,4,4,4,4,4,4);

  printf("\t\t\t   %c 謝謝使用 %c\n",4,4);

  printf("\t\t\t   %c %c %c %c %c %c %c %c %c\n",4,4,4,4,4,4,4,4,4);

  printf("\t\t\t              Thank you!\n\n\n");

  exit(0);

}

int main()

{

//存儲(chǔ)指令的變量

  int orz;

//設(shè)置系統(tǒng)文本顏色

  system("color 0B");

//新建一個(gè)員工信息頭節(jié)點(diǎn);

  head = new_node(head);

  while(1)

  {

//顯示菜單、

    Welcome();

//接收用戶命令、

    scanf("%d",&orz);

//調(diào)用系統(tǒng)函數(shù)清屏;

    system("cls");

    switch(orz)

    {

//根據(jù)指令進(jìn)入相應(yīng)菜單選項(xiàng)

      case 1:Open();break;

      case 2:Save();break;

      case 3:Add();break;

      case 4:Mod();break;

      case 5:Del();break;

      case 6:Que_One();break;

      case 7:Que_Cla();break;

      case 8:Que_All();break;

      case 9:Exi();break;

      default :printf("\n--->無效的指令!\n");

    }

    printf("\n");

//執(zhí)行系統(tǒng)函數(shù)

    system("pause");

    system("cls");

  }

  return 0;

}

到此,相信大家對(duì)“C語言的指針和鏈表舉例分析”有了更深的了解,不妨來實(shí)際操作一番吧!這里是創(chuàng)新互聯(lián)網(wǎng)站,更多相關(guān)內(nèi)容可以進(jìn)入相關(guān)頻道進(jìn)行查詢,關(guān)注我們,繼續(xù)學(xué)習(xí)!

另外有需要云服務(wù)器可以了解下創(chuàng)新互聯(lián)scvps.cn,海內(nèi)外云服務(wù)器15元起步,三天無理由+7*72小時(shí)售后在線,公司持有idc許可證,提供“云服務(wù)器、裸金屬服務(wù)器、高防服務(wù)器、香港服務(wù)器、美國(guó)服務(wù)器、虛擬主機(jī)、免備案服務(wù)器”等云主機(jī)租用服務(wù)以及企業(yè)上云的綜合解決方案,具有“安全穩(wěn)定、簡(jiǎn)單易用、服務(wù)可用性高、性價(jià)比高”等特點(diǎn)與優(yōu)勢(shì),專為企業(yè)上云打造定制,能夠滿足用戶豐富、多元化的應(yīng)用場(chǎng)景需求。


分享文章:C語言的指針和鏈表舉例分析-創(chuàng)新互聯(lián)
標(biāo)題鏈接:http://weahome.cn/article/dhcjds.html

其他資訊

在線咨詢

微信咨詢

電話咨詢

028-86922220(工作日)

18980820575(7×24)

提交需求

返回頂部