主頁 > 軟體設計 > 職工管理系統

職工管理系統

2020-12-27 10:15:27 軟體設計

文章目錄

  • 職工管理系統
  • 一、職工管理系統詳解
  • 二、職工管理系統功能詳解
    • 1.頭檔案與結構體定義
    • 2.使用的函式宣告
    • 3.主函式與選單函式的宣告
    • 4.添加函式
    • 5.洗掉函式
    • 6.查詢所有,查找某一員工資訊
    • 7.修改函式
    • 8.排序函式
    • 9.插入函式
    • 10.檔案保存
    • 11.檔案讀取
  • 總結


職工管理系統


因為這是在學習了一段時間后才寫的程式,一些知識都是前面學過的,所以我有關前面所學只是沒有寫的特別詳細,只是把我在寫的程序中被提醒或者被檢查出來的錯誤寫了上去,

一、職工管理系統詳解

該系統基于結構體與鏈表創建,有鏈表基本的增刪查改,排序,查找,插入,檔案的創建,保存,讀取和一些小功能,

也同樣優缺點:插入指定位置,能夠插入到指定位置,但退不出回圈,創建的臨時指標并未釋放,可能指向該電腦未知記憶體,萌新慎重copy,不建議copy全部代碼,

有些代碼粘貼過來原有層次分類沒有粘貼上,

二、職工管理系統功能詳解

1.頭檔案與結構體定義

代碼如下(示例):

#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#include<windows.h>
 
typedef struct Worker{
 int number;
 char name[20];
 char sex[2];
 int year;
 int month;
 int day;
 char degree[20];
 struct Worker *next; 
}WOR;

在結構體中定義數值域與指標域,數值域儲存員工資訊,指標域儲存要連接的結構體地址,

2.使用的函式宣告

代碼如下(示例):

void menu();//選單
void showall(WOR *head);//顯示所有員工資訊
void attend(WOR *head); //添加員工資訊
void print(WOR *head);//查找某一員工資訊
void save(WOR *head);//保存職工資訊(只有值,用于檔案讀取)
void save1(WOR *head);//保存職工資訊(有值對應的具體資訊,用于用戶查閱)
void delte(WOR *head);//洗掉職工資訊
void change(WOR *head);//改變職工資訊
void order(WOR *head);//對職工資訊排序
void read(WOR *head);//讀取職工資訊
void insert(WOR *head);//插入職工資訊
void save2(WOR *head);//保存職工資訊(排序后的檔案)

在呼叫函式中需要加個小程式:進入函式需要有直接退出功能,以便不進行任何修改便可以直接退出,

3.主函式與選單函式的宣告

代碼如下(示例):
在主函式中對頭指標申請空間,后面所有函式定義void型別傳入引數頭指標,參考頭指標時最好不要直接使用,定義一個指標為頭指標再進行使用,
如果鏈表為慷訓者檔案為空都要有一一對應錯誤提示

int main()
{
 WOR *head;
 head=(WOR*)malloc(sizeof(WOR));
 head->next=NULL;
 
 while(1){
  menu();
  char n[1000];
  printf("請選擇");
  scanf("%s",n);
  int a=strlen(n);
  if(a>=2)
  {
   printf("你輸入的什么東西,拉出去,糟蹋了\n");
   system("pause");
   continue;
  }
     switch(n[0])
  {
  case '1':
    read(head);
    system("pause");
    showall(head);
    system("pause");
       break;
  case '2':
    attend(head);
    save(head);
    save1(head);
    system("pause");
    break;
  case '3':
    delte(head);
    save(head);
    save1(head);
    system("pause");
     break;
  case '4':
    change(head);
    save(head); 
    save1(head);
    system("pause"); 
    break;
  case '5':
    read(head); 
    print(head);
    system("pause"); 
    break;
  case '6':
   system("cls");
    order(head);
    save2(head);
    system("pause");
    break;
  case '7':
    insert(head);
    save(head);
    save1(head);
    system("pause");
    break;
  case '8':
    printf("歡迎下次使用\n");
    system("pause");
     exit(1);  
     break;
  default:printf("別瞎輸,只能輸1-8\n");system("pause");break;  
     } 
 }
 return 0;
}

void menu()//制作選單 
{
 system("cls");//清屏 
 printf("     請規范輸入操作,不要輸入亂七八糟的的東西     \n");
 printf("**************************************************\n"); 
 printf("-------------歡迎來到喵喵嗷的管理系統-------------\n");
 printf("             1-查看當前所有的職工資訊             \n");
 printf("             2-添加職工資訊                       \n");
 printf("             3-洗掉職工資訊                       \n");
 printf("             4-修改職工資訊                       \n");
 printf("             5-查看某一員工資訊                   \n");
 printf("             6-按職工號對職工排序                 \n"); 
 printf("             7-插入職工資訊                       \n"); 
 printf("             8-退出                               \n"); 
 return; 
}

注:只能輸入具有該指令的數字,輸入其他具有相對應的報錯提示

亂打:在這里插入圖片描述
輸入不是1-8
在這里插入圖片描述
輸入超過個位數
在這里插入圖片描述

注:因為我定義的是指字符陣列輸入,并且輸入超過陣列第一位就自動報出亂打錯誤

4.添加函式

代碼如下(示例):
添加決議:在主函式中定義的頭指標進行呼叫,定義新的臨時指標用頭指標依次鏈接,這是頭插法

在添加函式中根據結構體中的定義,對職工號要有查重操作,性別不能有除男女外其他,出生年月天都應該有他的限定,不能不符合常理,學位也要有對應的真是學位限制,
我沒有對月份是30天還是31天的判斷,以及是否是閏年對應2月天數限制,有精力和能力的人可以加以限制,完善代碼,

void attend(WOR *head)//添加員工資訊
{
 int flag,i,a;
 char n[20];
 WOR *p=head;
 WOR *s;//臨時儲存職工資料 
 printf("輸入0退出,其他繼續\n");
 scanf("%s",n);
 if(n[0]=='0')
 return;
 else
 {
  printf("請選擇要添加職工資訊的個數");
  scanf("%d",&i);
  if(i<=0)
  return;
  else
  while(i)
  {
   s=(WOR*)malloc(sizeof(WOR));
   tp:printf("請輸入職工號");
   scanf("%d",&s->number);
   WOR *q=head->next;
   while(q)
   {
    a=q->number;
    if(s->number==a)
    {
     printf("該職工號已被使用,其選擇其他喜歡的職工號");
     goto tp;
    }
    q=q->next;
   }
   printf("請輸入姓名:"); 
   scanf("%s",s->name);
   getchar();
   printf("請輸入性別: w/m    ");
   while(1)
   {
    scanf("%s",s->sex); 
    if(strcmp("w",s->sex)==0)
    break;
    if(strcmp("m",s->sex)==0)
    break;
    if(strcmp("W",s->sex)==0)
    break;
    if(strcmp("M",s->sex)==0)
    break;
    printf("不要創造新物種,請按要求輸入");
   }
   printf("請輸入出生年份:");
   while(1)
   {
    scanf("%d",&s->year);
    if(s->year<0)
    {
     printf("年份不能為負,請重新輸入");
     continue;
    }
    else if(s->year>=0&&s->year<1000)
    {
     printf("年份太小,請重新輸入");
    }
    else
    break;
   }
   printf("請輸入出生月份:");
   while(1)
   {
    scanf("%d",&s->month);
    if(s->month<=0||s->month>12)
    {
     printf("不要創造新月份,請重新輸入");
     continue;
    }
    else
    break;
   }
   printf("請輸入出生天:");
   while(1)
   {
    scanf("%d",&s->day); 
    if(s->day<=0||s->day>31)
    {
     printf("不要創造新天數,請重新輸入");
     continue; 
    }
    else 
    break;
   }
   printf("請輸入職工學位:\n");
   printf("注意:學歷有專科,本科,研究生,博士\n");
   while(1)
   {
    scanf("%s",s->degree);
    if(strcmp(s->degree,"專科")!=0&&strcmp(s->degree,"本科")!=0&&strcmp(s->degree,"研究生")!=0&&strcmp(s->degree,"博士")!=0)
    {
     printf("請按要求重新輸入");
    }
    else
    break;
   }
   printf("\n");
   while(p->next)
   p=p->next;
   p->next=s;
   p=s;
   p->next=NULL;
   i--; 
  } 
  printf("創建成功\n");
  return ; 
 } 
}

注:添加一次員工資訊還需要能夠完成下一次添加,

5.洗掉函式

洗掉一個職工資訊,讓它的前一個指標直接連接到它的下一個指標,該指標脫離鏈表,再釋放掉,
洗掉一個職工資訊需要加個小程式:確定是否真的洗掉不想洗掉可以直接退出,
在這里插入圖片描述
代碼如下(示例):

void delte(WOR *head)//洗掉函式
{
  WOR *q=head;
  if(q->next==NULL)
  {
   printf("無員工資訊,可選擇添加員工資訊以便吃掉\n");
  }
  else
  {
  WOR *p=q->next;
  char a[20];
  showall(head); 
  printf("請輸入要吃掉職工的職工號");
  int n;
  scanf("%d",&n);
  while(p){
   if(n==p->number)
   {

    printf("職工號:%d\n",p->number);
    printf("姓名:%s\n",p->name);
    printf("性別:%s\n",p->sex);
    printf("出生年份:%d\n",p->year);
    printf("月份:%d\n",p->month);
    printf("天:%d\n",p->day);
    printf("學位:%s\n\n\n",p->degree);
    printf("請選擇是否繼續修改,0吃掉,其他都不吃掉");
    scanf("%s",a);
    if(strcmp(a,"0")==0)
    {
     q->next=p->next;
     free(p);
     p=NULL;
     printf("該員工資訊已被吃掉");
     return;
    }
    else
    return; 
   }
   printf("該員工資訊已被吃掉");
     q=p;
     p=p->next;
   }
  }
} 

6.查詢所有,查找某一員工資訊

查詢所有職工資訊:這是一個遍歷鏈表并列印的程序,定義一個臨時指標儲存資訊一一將資訊輸出出來,
查詢某一員工資訊:首先需要遍歷鏈表找到員工資訊,定義臨時指標儲存該員工資訊再輸出,

代碼如下(示例):

void showall(WOR *head)//查詢所有員工資訊 
{
 char n[20];
 printf("輸入0退出,其他繼續\n");
 scanf("%s",n);
 if(n[0]=='0')
    return;
    else
    {
      WOR *p;
      p=head->next;
      if(p==NULL)
      {
   	printf("無員工資訊,可選擇添加員工資訊以增大公司規模\n");
      } 
      else
      {
           printf("員工資訊\n");
           while(p)
   	   {
    		printf("職工號:%d\n",p->number);
    		printf("姓名:%s\n",p->name);
    		printf("性別:%s\n",p->sex);
    		printf("出生年份:%d\n",p->year);
    		printf("月份:%d\n",p->month);
    		printf("天:%d\n",p->day);
    		printf("學位:%s\n\n\n",p->degree);
    		p=p->next;
   	   }
      }
   }
 return;
}

void printf(WOR *head)//查詢某一員工
{
   char n[20];
   printf("輸入0退出,其他繼續\n");
   scanf("%s",n);
   if(n[0]=='0')
   return ;
   else 
   {
       WOR *q,*p;
       q=head;
       if(q->next==Null)
       {
          printf("無員工資訊,可選擇添加員工資訊以增大公司規模\n");
       }
       else
       {
          int n;
          printf("請選擇 1.職工號查詢 2.姓名查詢");
          scanf("%d",&n);
   	  if(n==1)
   	  {
   	     printf("請輸入職工號"); 
     	     int a;
    	     scanf("%d",&a);
    	     p=head->next; 
    	     while(p)
    	     {
    	        if(a==p->number)
    	        {
    	           printf("職工姓名:%s\n",p->name);
    	           printf("職工性別:%s\n",p->sex);
    	           printf("職工出生年:%d\n",p->year);
    	           printf("職工出生月:%d\n",p->month);
    	           printf("職工出生日:%d\n",p->day);
    	           printf("職工學位:%s\n",p->degree);
    	        }
    	        else if(a!=p->number)
    	        {
    	           printf("無職工資訊,可選擇添加增大公司規模\n");
    	           return;
    	        }
    	        p=p->next;
    	     }
    	  }
    	  else if(n==2)
    	  {
    	     printf("請輸入姓名");
    	     char b[20];
    	     scanf("%s",b);
    	     while(p)
    	     {
    	        if(strcmp(p->name,"b")==0)
    	        {
    	          printf("職工號:%d\n",p->number);
    	          printf("職工性別:%s\n",p->sex);
    	          printf("職工出生年:%d\n",p->year);
    	          printf("職工出生月:%d\n",p->month);
    	          printf("職工出生日:%d\n",p->day);
    	          printf("職工學位:%s\n",p->degree);
    	          return ;
    	        }
    	        else if(strcmp(b,p->name)!=0)
    	        {
    	           printf("無職工資訊,可選擇添加增大公司規模\n");
    	           return;
    	        }
    	        p=p->next;
    	     }
    	  }
        }  
     }
}
   

 	           

注:查詢某一員工資訊:建議多多添加幾個方式查詢,

7.修改函式

修改員工資訊只需要遍歷鏈表找到職工資訊,直接修改就行,
修改時要和添加相似有對各個資訊的限制建議將那些小個程式直接寫成函式,本代碼就過于麻煩一個一個打,代碼冗長,

代碼如下(示例):

void change(WOR *head)//改變函式 
{
  WOR *q;
  q=head;
  if(q->next==NULL)
  {
   printf("無員工資訊,可選擇添加員工資訊以增大公司規模\n");
  }
  showall(head);
  int flag,a;
  int j;
  printf("請輸入要修改的職工號");
  scanf("%d",&j);
  a=0;
  while(q!=NULL)
  {
   if(q->number==j)
   {
    printf("職工號:%d\n",q->number);
    printf("姓名:%s\n",q->name);
    printf("性別:%s\n",q->sex);
    printf("出生年份:%d\n",q->year);
    printf("月份:%d\n",q->month);
    printf("天:%d\n",q->day);
    printf("學位:%s\n\n\n",q->degree);
    printf("請選擇修改職工資訊:1.名字\n2.性別\n3.出生年\n4.出生月\n5.出生日\n6.學位\n7.修改全部");
    scanf("%d",&flag);
    system("cls");
    if(flag==1)
    {
     printf("請重新輸入職工姓名");
        scanf("%s",q->name);
     system("pause");
     break;
    }
    else if(flag==2)
    {
     printf("請重新輸入員工性別");
     while(1)
     {
         scanf("%s",q->sex); 
         if(strcmp("w",q->sex)==0)
         break;
         if(strcmp("m",q->sex)==0)
         break;
         if(strcmp("W",q->sex)==0)
         break;
         if(strcmp("M",q->sex)==0)
         break;
         printf("不要創造新物種,請按要求輸入");
      	 system("pause");break;
     }
    }
    else if(flag==3)
    {
     printf("請重新輸入員工出生年份");
     while(1)
     {
      scanf("%d",&q->year);
      if(q->year<0)
      {
       printf("年份不能為負,請重新輸入");
      continue;
      }
      else if(q->year>=0&&q->year<1000)
      {
       printf("年份太小,請重新輸入");
      }
      else
      {
       system("pause");
          break;
      } 
     }
    }
    else if(flag==4)
    {
     printf("請重新輸入員工出生月份");
     while(1)
     {
      scanf("%d",&q->month);
      if(q->month<=0||q->month>12)
      {
       printf("不要創造新月份,請重新輸入");
       continue;
      }
      else
      {
       system("pause");
       break;
      }
     }
    }
    else if(flag==5)
    {
     printf("請重新輸入員工出生天數");
     while(1)
     {
      scanf("%d",&q->day); 
      if(q->day<=0||q->day>31)
      {
       printf("不要創造新天數,請重新輸入");
       continue; 
      }
      else
      {
       system("pause");
       break;
      }    
     } 
    }
    else if(flag==6)
    {
     printf("請重新輸入員工學位");
     while(1)
     {
      scanf("%s",q->degree);
      if(strcmp(q->degree,"專科")!=0&&strcmp(q->degree,"本科")!=0&&strcmp(q->degree,"研究生")!=0&&strcmp(q->degree,"博士")!=0)
      {
       printf("請按要求重新輸入");
      }
      else
      system("pause");
      break;
     }
    }
    else if(flag==7)
    {
     printf("請輸入姓名:"); 
     scanf("%s",q->name);
     getchar();
     printf("請輸入性別: w/m    ");
     while(1)
     {
      scanf("%s",q->sex); 
      if(strcmp("w",q->sex)==0)
      break;
      if(strcmp("m",q->sex)==0)
      break;
      if(strcmp("W",q->sex)==0)
      break;
      if(strcmp("M",q->sex)==0)
      break;
      printf("不要創造新物種,請按要求輸入");
     }
     printf("請輸入出生年份:");
     while(1)
     {
      scanf("%d",&q->year);
      if(q->year<0)
      {
       printf("年份不能為負,請重新輸入");
       continue;
      }
      else if(q->year>=0&&q->year<1000)
      {
       printf("年份太小,請重新輸入");
      }
      else
      break;
     }
     printf("請輸入出生月份:");
     while(1)
     {
      scanf("%d",&q->month);
      if(q->month<=0||q->month>12)
      {
       printf("不要創造新月份,請重新輸入");
       continue;
      }
      else
      break;
     }
     printf("請輸入出生天:");
     while(1)
     {
      scanf("%d",&q->day); 
      if(q->day<=0||q->day>31)
      {
       printf("不要創造新天數,請重新輸入");
       continue; 
      }
      else 
      break;
     }
     printf("請輸入職工學位:\n");
     printf("注意:學歷有專科,本科,研究生,博士\n");
     while(1)
     {
      scanf("%s",q->degree);
      if(strcmp(q->degree,"專科")!=0&&strcmp(q->degree,"本科")!=0&&strcmp(q->degree,"研究生")!=0&&strcmp(q->degree,"博士")!=0)
      {
       printf("請按要求重新輸入");
      }
      else
      break;
     }
    }  
   else
   {
    printf("選擇錯誤,請重新選擇");
    system("pause");continue; 
   }
   a=1;
  }
  q=q->next;
 }
 if(a==0)
 printf("該員工不存在\n");
 return;
} 

8.排序函式

排序的程序不建議改變鏈表,可以使用冒泡排序,只交換數值域,不換指標域,

排序函式要有他自己對應的檔案,

代碼如下(示例):

void order(WOR *head)//對職工進行排序 
{
    char n[20];
 printf("輸入0退出,其他繼續\n");
 scanf("%s",n);
 if(n[0]=='0')
    return;
    else
    {
     if(head->next==NULL)
  {
   printf("無員工資訊,可選擇添加員工資訊以排序\n"); 
   return;
  } 
  WOR *p=head->next;
  WOR *q;
  q=p->next;
  WOR *temp;
  while(p!=NULL)
  {
   q=p->next;
   while(q!=NULL)
      {
    if(p->number>q->number)
    {
       int number1;
       char name1[20];
       char sex1[2];
       int year1;
       int month1;
       int day1;
       char degree1[20];
       number1=p->number;
       p->number=q->number;
       q->number=number1;
      
     strcpy(name1,p->name);
     strcpy(p->name,q->name);
     strcpy(q->name,name1);
      
     strcpy(sex1,p->sex);
     strcpy(p->sex,q->sex);
     strcpy(q->sex,sex1);
     
     year1=p->year;
     p->year=q->year;
     q->year=year1;
     
     day1=p->day;
     p->day=q->day;
     q->day=day1;
      
     month1=p->month;
     p-> month=q->month;
     q->month=month1;
    
     strcpy(degree1,p->degree);
     strcpy(p->degree,q->degree);
     strcpy(q->degree,degree1);
    }
    q=q->next;
   }
   p=p->next;
  }
 }
}

9.插入函式

注:插入函式自己驗證時,雖然能夠插入到指定位置,但無法退出回圈,使用者慎重,
定義一個臨時指標儲存要插入的員工資訊,再將該指標插入指定的位置,
儲存資訊與添加一樣也需要有一系列的判斷,所以還是建議將限制寫成函式
插入圖解:

在這里插入圖片描述

代碼如下(示例):

void insert(WOR *head)
{
 char n[20];
 printf("輸入0退出,其他繼續\n");
 scanf("%s",n);
 if(n[0]=='0')
 return;
 else
 {
     int v;
     WOR *p=head;
     WOR *s=(WOR *)malloc(sizeof(WOR));
     printf("請輸入插入職工資訊"); 
     s=(WOR*)malloc(sizeof(WOR));
     tp:printf("請輸入職工號");
     scanf("%d",&s->number);
     WOR *q=head->next;
     while(q)
     {
       v=q->number;
       if(s->number==v)
       {
          printf("該職工號已被使用,其選擇其他喜歡的職工號");
    	  goto tp;
       }
   	q=q->next;
     }
     printf("請輸入姓名:"); 
     scanf("%s",s->name);
     getchar();
     printf("請輸入性別: w/m    ");
     while(1)
     {
   	scanf("%s",s->sex); 
   	if(strcmp("w",s->sex)==0)
   	break;
   	if(strcmp("m",s->sex)==0)
   	break;
   	if(strcmp("W",s->sex)==0)
   	break;
   	if(strcmp("M",s->sex)==0)
   	break;
   	printf("不要創造新物種,請按要求輸入");
     }
     printf("請輸入出生年份:");
     while(1)
     {
     	scanf("%d",&s->year);
   	if(s->year<0)
   	{
    	  printf("年份不能為負,請重新輸入");
    	  continue;
   	}
   	else if(s->year>=0&&s->year<1000)
   	{
    	  printf("年份太小,請重新輸入");
   	}
   	else
   	break;
     }
  	printf("請輸入出生月份:");
  	while(1)
  	{
   	   scanf("%d",&s->month);
   	   if(s->month<=0||s->month>12)
   	   {
    	       printf("不要創造新月份,請重新輸入");
    	       continue;
   	   }
   	 else
   	 break;
  	}
  	printf("請輸入出生天:");
  	while(1)
       {
   	  scanf("%d",&s->day); 
   	  if(s->day<=0||s->day>31)
   	  {
    	      printf("不要創造新天數,請重新輸入");
     	      continue; 
          }
   	  else 
   	  break;
  	}
  	printf("請輸入職工學位:\n");
  	printf("注意:學歷有專科,本科,研究生,博士\n");
 	 while(1)
  	{
   	  scanf("%s",s->degree);
  	  if(strcmp(s->degree,"專科")!=0&&strcmp(s->degree,"本科")!=0&&strcmp(s->degree,"研究生")!=0&&strcmp(s->degree,"博士")!=0)
   	  {
    	     printf("請按要求重新輸入");
  	  }
  	  else
  	  break;
  }
  printf("請輸入插入點位置");
  int a,b;
  int l=0;
  scanf("%d",&a);
  WOR *c;
  WOR *d=head;
  if(a<=0)
  return ;
  else
  {
    while(d)
   {
 	 b++;
   	 if(a==b)
    	{
          c==(WOR *)malloc(sizeof(WOR));
          c->number=s->number;
          strcpy(c->name,s->name);
          strcpy(c->sex,s->sex);
          c->year=s->year;
          c->month=s->month;
          c->day=s->day;
          strcpy(c->degree,s->degree);
          c->next=d->next;
          d->next=c;
          printf("添加成功");
          l=1;
          return;
        }
       d=d->next;
   } 
   if(l==0)
   printf("添加失敗");
  }
    } 
}

10.檔案保存

檔案的保存需要定義檔案指標,以及檔案輸入,
保存時建議保存兩個檔案,一個用來儲存,以及檔案內容呼叫,一個用來瀏覽觀看,
排序函式的檔案保存與之相似,
代碼如下(示例):

void save(WOR* head)//保存檔案函式 
{
  WOR* p;
  FILE* fp;
  if((fp=fopen("yyzhk.txt","w"))==NULL)
  {
   printf("檔案打開失敗\n");
  }
 else
 {
   p=head->next;
   while(p!=NULL)
   {
      fprintf(fp,"%d %s %s %d %d %d %s\n",p->number,p->name,p->sex,p->year,p->month,p->day,p->degree);
       p=p->next;
     }
    }
 fclose(fp);
}
void save1(WOR *head)//保存顯示函式
{
 WOR* p;
 FILE* fp;
 if((fp=fopen("yyzhk1.txt","w"))==NULL)
  {
   printf("檔案打開失敗\n");
  }
 else
 {
   p=head->next;
   while(p!=NULL)
   {
      fprintf(fp,"職工號:%d 姓名:%s 性別:%s 出生年:%d 出生月:%d 出生日:%d 學位:%s\n",p->number,p->name,p->sex,p->year,p->month,p->day,p->degree);
       p=p->next;
     }
    }
 fclose(fp);
 } 

11.檔案讀取

在保存檔案后,再次讀取的時候需要將內容讀到鏈表中,這時候需要寫一個讀取函式,
代碼如下(示例):

void read(WOR *head)//讀取函式
{
 WOR* p ,*s;
 FILE* fp;
  if((fp=fopen("yyzhk.txt","r"))==NULL)
  {
   printf("檔案打開失敗\n");
      return;
  }
 else{
  printf("打開成功\n"); 
  p=head;
  while(!feof(fp))
  { 
   s=(WOR*)malloc(sizeof(WOR));
   fscanf(fp,"%d %s %s %d %d %d %s\n",&s->number,s->name,s->sex,&s->year,&s->month,&s->day,s->degree);
   p->next=s;
   p=s;
   p->next=NULL;
  }
 }
 printf("讀取成功"); 
 fclose(fp);
} 

總結

本系統以鏈表知識為主,把鏈表的增刪查改理解之后,會發現其他功能與之其實都差不多,
如何遍歷鏈表很重要,萌新把這些理解之后基本大作業就能夠敲出來,
第一次寫博客,自我感覺良好, 希望這篇文章能幫助需要的人,

轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/240854.html

標籤:其他

上一篇:使用GitHub進行版本管理的程序

下一篇:C語言 動態鏈表

標籤雲
其他(157675) Python(38076) JavaScript(25376) Java(17977) C(15215) 區塊鏈(8255) C#(7972) AI(7469) 爪哇(7425) MySQL(7132) html(6777) 基礎類(6313) sql(6102) 熊猫(6058) PHP(5869) 数组(5741) R(5409) Linux(5327) 反应(5209) 腳本語言(PerlPython)(5129) 非技術區(4971) Android(4554) 数据框(4311) css(4259) 节点.js(4032) C語言(3288) json(3245) 列表(3129) 扑(3119) C++語言(3117) 安卓(2998) 打字稿(2995) VBA(2789) Java相關(2746) 疑難問題(2699) 细绳(2522) 單片機工控(2479) iOS(2429) ASP.NET(2402) MongoDB(2323) 麻木的(2285) 正则表达式(2254) 字典(2211) 循环(2198) 迅速(2185) 擅长(2169) 镖(2155) 功能(1967) .NET技术(1958) Web開發(1951) python-3.x(1918) HtmlCss(1915) 弹簧靴(1913) C++(1909) xml(1889) PostgreSQL(1872) .NETCore(1853) 谷歌表格(1846) Unity3D(1843) for循环(1842)

熱門瀏覽
  • 面試突擊第一季,第二季,第三季

    第一季必考 https://www.bilibili.com/video/BV1FE411y79Y?from=search&seid=15921726601957489746 第二季分布式 https://www.bilibili.com/video/BV13f4y127ee/?spm_id_fro ......

    uj5u.com 2020-09-10 05:35:24 more
  • 第三單元作業總結

    1.前言 這應該是本學期最后一次寫作業總結了吧。總體來說,對作業的節奏也差不多掌握了,作業做起來的效率也更高了。雖然和之前的作業一樣,作業中都要用到新的知識,但是相比之前,更加懂得了如何利用工具以及資料。雖然之間卡過殼,但總體而言,這幾次作業還算完成的比較好。 2.作業程序總結 相比前兩個單元,此單 ......

    uj5u.com 2020-09-10 05:35:41 more
  • 北航OO(2020)第四單元博客作業暨課程總結博客

    北航OO(2020)第四單元博客作業暨課程總結博客 本單元作業的架構設計 在本單元中,由于UML圖具有比較清晰的樹形結構,因此我對其中需要進行查詢操作的元素進行了包裝,在樹的父節點中存盤所有孩子的參考。考慮到性能問題,我采用了快取機制,一次查詢后盡可能快取已經遍歷過的資訊,以減少遍歷次數。 本單元我 ......

    uj5u.com 2020-09-10 05:35:48 more
  • BUAA_OO_第四單元

    一、UML決議器設計 ? 先看下題目:第四單元實作一個基于JDK 8帶有效性檢查的UML(Unified Modeling Language)類圖,順序圖,狀態圖分析器 MyUmlInteraction,實際上我們要建立一個有向圖模型,UML中的物件(元素)可能與同級元素連接,也可與低級元素相連形成 ......

    uj5u.com 2020-09-10 05:35:54 more
  • 6.1邏輯運算子

    邏輯運算子 1. && 短路與 運算式1 && 運算式2 01.運算式1為true并且運算式2也為true 整體回傳為true 02.運算式1為false,將不會執行運算式2 整體回傳為false 03.只要有一個運算式為false 整體回傳為false 2. || 短路或 運算式1 || 運算式2 ......

    uj5u.com 2020-09-10 05:35:56 more
  • BUAAOO 第四單元 & 課程總結

    1. 第四單元:StarUml檔案決議 本單元采用了圖模型決議UML。 UML檔案可以抽象為圖、子圖、邊的邏輯結構。 在實作中,圖的節點包括類、介面、屬性,子圖包括狀態圖、順序圖等。 采用了三次遍歷UML元素的方法建圖,第一遍遍歷建點,第二、三次遍歷設定屬性、連邊,實作圖物件的初始化。這里借鑒了一些 ......

    uj5u.com 2020-09-10 05:36:06 more
  • 談談我對C# 多型的理解

    面向物件三要素:封裝、繼承、多型。 封裝和繼承,這兩個比較好理解,但要理解多型的話,可就稍微有點難度了。今天,我們就來講講多型的理解。 我們應該經常會看到面試題目:請談談對多型的理解。 其實呢,多型非常簡單,就一句話:呼叫同一種方法產生了不同的結果。 具體實作方式有三種。 一、多載 多載很簡單。 p ......

    uj5u.com 2020-09-10 05:36:09 more
  • Python 資料驅動工具:DDT

    背景 python 的unittest 沒有自帶資料驅動功能。 所以如果使用unittest,同時又想使用資料驅動,那么就可以使用DDT來完成。 DDT是 “Data-Driven Tests”的縮寫。 資料:http://ddt.readthedocs.io/en/latest/ 使用方法 dd. ......

    uj5u.com 2020-09-10 05:36:13 more
  • Python里面的xlrd模塊詳解

    那我就一下面積個問題對xlrd模塊進行學習一下: 1.什么是xlrd模塊? 2.為什么使用xlrd模塊? 3.怎樣使用xlrd模塊? 1.什么是xlrd模塊? ?python操作excel主要用到xlrd和xlwt這兩個庫,即xlrd是讀excel,xlwt是寫excel的庫。 今天就先來說一下xl ......

    uj5u.com 2020-09-10 05:36:28 more
  • 當我們創建HashMap時,底層到底做了什么?

    jdk1.7中的底層實作程序(底層基于陣列+鏈表) 在我們new HashMap()時,底層創建了默認長度為16的一維陣列Entry[ ] table。當我們呼叫map.put(key1,value1)方法向HashMap里添加資料的時候: 首先,呼叫key1所在類的hashCode()計算key1 ......

    uj5u.com 2020-09-10 05:36:38 more
最新发布
  • 【中介者設計模式詳解】C/Java/JS/Go/Python/TS不同語言實作

    * 中介者模式是一種行為型設計模式,它可以用來減少類之間的直接依賴關系,
    * 將物件之間的通信封裝到一個中介者物件中,從而使得各個物件之間的關系更加松散。
    * 在中介者模式中,物件之間不再直接相互互動,而是通過中介者來中轉訊息。 ......

    uj5u.com 2023-04-20 08:20:47 more
  • 露天煤礦現場調研和交流案例分享

    他們集團的資訊化公司及研究院在一個礦區正在做智能礦山的統一平臺的 試點,專案投資大概1億,包括了礦山的各方面的內容,顯示得我們這次交流有點多余。他們2年前開始做智能礦山的規劃,有很多煤礦行業專家的加持,他們的描述是非常完美,但是去年底應該上線的平臺,現在還沒有看到影子。他們確實有很多場景需求,但是被... ......

    uj5u.com 2023-04-20 08:20:25 more
  • 《社區人員管理》實戰案例設計&個人案例分享

    設計是一個讓人夢想成真程序,開始編碼、測驗、除錯之前進行需求分析和架構設計,才能保證關鍵方面都做正確 ......

    uj5u.com 2023-04-20 08:20:17 more
  • 軟體架構生態化-多角色交付的探索實踐

    作為一個技術架構師,不僅僅要緊跟行業技術趨勢,還要結合研發團隊現狀及痛點,探索新的交付方案。在日常中,你是否遇到如下問題 “ 業務需求排期長研發是瓶頸;非研發角色感受不到研發技改提效的變化;引入ISV 團隊又擔心質量和安全,培訓周期長“等等,基于此我們探索了一種新的技術體系及交付方案來解決如上問題。 ......

    uj5u.com 2023-04-20 08:20:10 more
  • 【中介者設計模式詳解】C/Java/JS/Go/Python/TS不同語言實作

    * 中介者模式是一種行為型設計模式,它可以用來減少類之間的直接依賴關系,
    * 將物件之間的通信封裝到一個中介者物件中,從而使得各個物件之間的關系更加松散。
    * 在中介者模式中,物件之間不再直接相互互動,而是通過中介者來中轉訊息。 ......

    uj5u.com 2023-04-20 08:19:44 more
  • 露天煤礦現場調研和交流案例分享

    他們集團的資訊化公司及研究院在一個礦區正在做智能礦山的統一平臺的 試點,專案投資大概1億,包括了礦山的各方面的內容,顯示得我們這次交流有點多余。他們2年前開始做智能礦山的規劃,有很多煤礦行業專家的加持,他們的描述是非常完美,但是去年底應該上線的平臺,現在還沒有看到影子。他們確實有很多場景需求,但是被... ......

    uj5u.com 2023-04-20 08:19:07 more
  • 《社區人員管理》實戰案例設計&個人案例分享

    設計是一個讓人夢想成真程序,開始編碼、測驗、除錯之前進行需求分析和架構設計,才能保證關鍵方面都做正確 ......

    uj5u.com 2023-04-20 08:18:57 more
  • 軟體架構生態化-多角色交付的探索實踐

    作為一個技術架構師,不僅僅要緊跟行業技術趨勢,還要結合研發團隊現狀及痛點,探索新的交付方案。在日常中,你是否遇到如下問題 “ 業務需求排期長研發是瓶頸;非研發角色感受不到研發技改提效的變化;引入ISV 團隊又擔心質量和安全,培訓周期長“等等,基于此我們探索了一種新的技術體系及交付方案來解決如上問題。 ......

    uj5u.com 2023-04-20 08:18:49 more
  • 05單件模式

    #經典的單件模式 public class Singleton { private static Singleton uniqueInstance; //一個靜態變數持有Singleton類的唯一實體。 // 其他有用的實體變數寫在這里 //構造器宣告為私有,只有Singleton可以實體化這個類! ......

    uj5u.com 2023-04-19 08:42:51 more
  • 【架構與設計】常見微服務分層架構的區別和落地實踐

    軟體工程的方方面面都遵循一個最基本的道理:沒有銀彈,架構分層模型更是如此,每一種都有各自優缺點,所以請根據不同的業務場景,并遵循簡單、可演進這兩個重要的架構原則選擇合適的架構分層模型即可。 ......

    uj5u.com 2023-04-19 08:42:41 more