C語言程序設計大作業——員工管理系統(代碼超詳細內含實驗報告)

寫在前面:歡迎來到「發奮的小張」的博客。我是小張,一名普通的在校大學生。在學習之餘,用博客來記錄我學習過程中的點點滴滴,也希望我的博客能夠更給同樣熱愛學習熱愛技術的你們帶來收穫!希望大家多多關照,我們一起成長一起進步。也希望大家多多支持我鴨,喜歡我就給我一個關注吧!

員工管理系統

一、 課程設計目的

通過本課程設計,強化上機動手能力,使學生在理論和實踐的基礎上進一步鞏固
《C 語言程序設計》課程學習的內容,掌握工程軟件設計的基本方法。
學會將知識應用於實際的方法,提高分析和解決問題的能力,增加綜合能力。
爲後續各門計算機課程的學習打下堅實基礎。
爲畢業設計和以後工作打下必要基礎。

二、課程設計內容

針對某企業的員工,對其信息進行系統的管理。

三、需求分析

對所開發系統功能、性能的描述,想要實現的目標。
此係統可對該廠員工進行信息的錄入,修改,刪除,添加,查詢,排序,統計,
打印等功能。用戶可通過提示選擇進入某一功能界面,然後進行對員工的信息管
理。每一功能模塊都充分爲用戶考慮,編排詳細。使用戶可以方便快捷的瞭解員
工信息,及時有效的對員工進行信息的管理。

四、概要設計

1.系統結構圖(功能模塊圖)
在這裏插入圖片描述
對系統進行分析,給出系統結構圖;
分析:此係統,爲方便客戶輸入,以及使程序清晰化,因而本人採用模塊法,
將每一功能模塊化,使程序中各函數間調用更加明瞭。
2.功能模塊說明
對各個模塊進行功能的描述。
錄入模塊:輸入該廠現有員工信息並保存與文件中,方便日後進行排序,更
新,統計,打印等操作。
輸出模塊:將所有員工信息,或所需員工信息輸出於屏幕上,用於打印或查
詢員工信息。
刪除模塊:對已退休或離開該廠的員工進行刪除操作。
添加模塊:添加新入廠的員工信息並保存起來。
修改模塊:找到該員工並,選擇所要修改的選項。
排序模塊:本程序只對員工年齡進行從小到大排序。(此模塊代碼還沒寫)
查詢模塊:此模塊分爲按姓名,年齡,工作查詢。(此模塊代碼還沒寫)

五、職工管理系統代碼

#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#include<conio.h>
struct employee
{
	char no[40];   //職工號
	char name[40]; //職工姓名
	char sex[10];  //職工性別
	int age;	   //職工年齡
	struct employee *next;//下一結點指針
};
typedef struct employee EMP;
EMP *h;

void load();       //讀文件數據,並創建鏈表
void save();       //將鏈表中數據寫到文件中
void add(EMP *p);  //鏈表中增加職工結點
void del(char *s); //鏈表中刪除指定姓名的職工結點
void update();    //鏈表中更新職工結點中的數據
void browse();    //在屏幕上顯示鏈表中所有結點數據
void menu();      //顯示系統主菜單
void delEmp();    //刪除職工
void addEmp();    //增加職工
void main(void)
{
   
	int op;//operation
	h =(EMP *)malloc(sizeof(EMP));   //創建鏈表的頭結點
	h->next = NULL;              //初始化鏈表頭節點中下一節點指針爲NULL
	menu();
    scanf("%d",&op);     
	while(op!=0)
	{
		switch(op)
		{		  
		  case 1:
				load();
				break;
		  case 2:
				save();
				break;
		  case 3:
				addEmp();
				break;
		  case 4:
				delEmp();
				break;
		  case 5:
				update();
				break;
		  case 6:
				browse();
				break;
		}
       	menu();
       scanf("%d",&op);
	}
}

//顯示系統主菜單函數
void menu()  
{
     printf("         Main   Menu\n");
	 printf("   **********************   \n");
	 printf("   *  0:quit   1 :load   *  \n");
	 printf("   *  2:save   3 :add    *  \n");
	 printf("   *  4:delete 5 :update *  \n");
	 printf("   *  6:browse 7 :default*  \n");
	 printf("   **********************   \n");
}

//讀文件數據,並創建鏈表函數
void load()
{
  FILE *fp;
  char ch;
 
  fp = fopen("data.txt","r");
  if(fp==NULL)
  {
	  printf("打開文件錯誤,按任意返回主菜單\n");
	  getch();//程序停下來,等待輸入
	  return;
  }  
  while(!feof(fp))
  {
	  EMP *node =(EMP *)malloc(sizeof(EMP));
	  node->next = NULL;
	  fscanf(fp,"%s%s%s%d",node->no,node->name,node->sex,&node->age);//從文件中讀一行職工信息
	  add(node); //	調用函數增加鏈表結點   
  } 
  fclose(fp);  
}

//鏈表中增加職工結點的函數
void add(EMP *p)
{
   EMP *q;
   q = h->next;  //將q指針指向鏈表中第一個職工結點
   if(q==NULL)  //如果q指針爲NULL,則表示當前鏈表爲空
   {
	   h->next = p; //p指針指向的結點爲鏈表中第一個結點
	   p->next = NULL;      
   }
   else
   {
	   while(q->next!=NULL) //通過while循環找到鏈表中最後一個結點
	   {
		  q = q ->next;
	   }
	   q->next = p;    //將q指針指向的最後一個結點的next指針指向新增結點
	   p->next =NULL;  //現在p指針指向的是最後一個結點,因此將該節點的next指針設爲NULL
   }

}

//增加職工函數
void addEmp()
{
  EMP *node;
  node = (EMP *)malloc(sizeof(EMP));
  node->next = NULL;
  printf("input the employee's no name sex age:\n");
  scanf("%s%s%s%d",node->no,node->name,node->sex,&node->age);
  add(node);

}

//刪除職工函數
void delEmp()
{
   char name[40];
   printf("input del name:\n");
   scanf("%s",name);
   del(name);
}

//在屏幕上顯示鏈表中所有職工結點數據函數
void browse()
{
	EMP *node;
    node = h->next;  //node指針指向鏈表第一個結點
	printf("Employee no    name  age  sex\n");
	while(node)   //遍歷鏈表
	{
		printf("%12s%6s%5d%4s\n",node->no,node->name,node->age,node->sex);
        node = node->next;  //node指針指向下一個職工結點
	}
	printf("\n");
}


//將鏈表中數據寫到文件中的函數
void save()
{
	FILE *fp;
	EMP *node;
	fp = fopen("data.txt","w"); //以寫的方式打開文件
	node = h->next;     //node指針指向鏈表第一個結點
	while(node!=NULL)
	{   //"%s %s %s %d\n" 格式符之間有空格
		fprintf(fp,"%s %s %s %d\n",node->no,node->name,node->sex,node->age);
		node  = node ->next;
	}
	fclose(fp);
}

//刪除職工結點的函數
void del(char *s)
{
    EMP *p,*q;
	p = h->next;//鏈表中第一個節點  p->next=p->next->next;
	q = p->next;//鏈表中第二個節點
	if(strcmp(s,p->name)==0)
	{h->next=p->next;
	 free(p);
	 return;
	}
	while(q!=NULL)
	{
      if(strcmp(s,q->name)==0)
	  {
        p->next = q->next;
		free(q);
		break;
	  }
	  p = q;
	  q = q->next;
	}
}

//更新職工結點的函數
void update()
{
    char name[40];
	int flag = 0;
	EMP *p;
	printf("input the name:\n");
	scanf("%s",name);
    p = h->next;
	while(p!=NULL)
	{
		if(strcmp(name,p->name)==0)
		{
         	printf("input the age:\n");
			scanf("%d",&p->age);
            printf("input the sex:\n");
		    getchar();
			scanf("%c",&p->sex);
			flag = 1;
			break;
		}
		p=p->next;

	}
    if(flag==0)
	{
       printf("error username\n");
	}
}

6、系統描述

本系統採用可以自行擴容的c語言傳統數據結構:鏈表實現。相比用數組做存儲,它具有可擴展性!
系統實現了對員工的增刪改查,打印輸出,寫入磁盤,讀取磁盤信息等基本功能。
系統具有良好的擴展性,可以擴展其他功能。比如:控制檯加密,組合查詢等·多種功能·!

7、系統運行部分功能截圖

  1. 添加員工以及顯示所有員工
    在這裏插入圖片描述
  2. 修改員工信息
    在這裏插入圖片描述
    在這裏插入圖片描述
  3. 刪除員工
    在這裏插入圖片描述
博主後記:

希望看到此篇博文的小夥伴,能夠按照此模板寫出自己需要的課程設計!如果程序運行有問題,歡迎在下方留言!博主會改正!大家一起共同進步。如果對你有所幫助,可以給博主一個贊👍 ,順便關注一下博主哦,博主後續還會發一些常見的c語言課程設計。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章