實驗二 編寫員工人事管理的應用程式
實驗目的
在C語言環境下(Turbo C或VC)編寫一個簡單的員工人事管理的應用程式。
通過本實驗,使學生能夠在C語言環境下熟練地編寫基本的應用程式。
實驗意義
通過本實驗,使學生能夠進一步理解C語言中動態儲存裝置分配的使用,熟悉指標和數組的使用方法。
實驗背景
某軟體公司大約有30名員工,每名員工有姓名、工號、職務等屬性,每年都有員工離職和入職。把所有員工按照順序儲存結構建立一個線性表,建立離職和入職函數,當有員工離職或入職時,修改線性表,並且列印最新的員工名單。
實驗步驟及要求
1、設計員工人事資訊的儲存結構
2、建立10名員工的初始資料
3、增加2名新員工,儲存在順序表的頭部
4、刪除2名員工的所有資訊,保持順序表的結構
5、顯示現有員工的所有資訊
6、提交來源程式清單及程式注釋
7、提交程式使用方法和程式使用介面
8、上機示範實驗結果
實驗學時
3學時
#include<stdio.h>#include<stdlib.h>#include<string.h>typedef struct Worker{ char name[20]; //員工姓名 char num[10]; //員工工號 char job[20]; //員工職位 struct Worker *next; //指向下一個員工}Worker,*linklist;int initlist(linklist &W) //初始化{ if(!W) return 0; W->next=NULL; //初始 指標為空白 return 1;}int input(linklist &W) //建立員工資訊{ linklist p; p=(linklist)malloc(sizeof(Worker)); //為新節點申請空間 if(!p) //申請未成功 {return 0;} else // 輸入每一位員工資訊 { printf("請輸入姓名:\n"); scanf("%s",p->name);getchar(); printf("請輸入工號:\n"); scanf("%s",p->num);getchar(); printf("請輸入職位:\n"); scanf("%s",p->job);getchar(); } p->next=W->next; //頭結點插入 p節點指向並替代第一個節點 W->next=p; //W指向第一個節點 return 0;}int del(linklist &W,char num[10]) //按員工號刪除員工資訊{ Worker *p,*q; p=W->next; q=W; while(!(strcmp(p->num,num)==0)&&p) //匹配員工號 { q=p; p=p->next; } if(p) //刪除p結點 q->next=p { q->next=p->next; free(p); printf("刪除資訊成功!\n"); } else //p位置不存在 {printf("刪除資訊不成功!\n");} return 1;}int show(linklist &W) //顯示員工資訊{ linklist p; for(p=W->next;p;p=p->next) //輸出每一位員工資訊 { printf("姓名:%s ",p->name); printf("工號:%s ",p->num); printf("職位:%s \n",p->job); } return 0;}int main(){ linklist W; int a; char str[100],str2[100]; initlist(W); printf("請輸入要執行的操作:input,del,show\n"); while(scanf("%s",str)!=EOF) //選擇進行那一項操作 { if(!strcmp(str,"input")) { printf("請輸入要輸入的人數:\n"); scanf("%d",&a); while(a--) //判斷迴圈次數 {input(W);} } else if(!strcmp(str,"del")) { printf("請輸入要刪除員工的工號:\n"); scanf("%s",str2); del(W,str2); } else if(!strcmp(str,"show")) {show(W);} printf("請輸入要執行的操作:input,del,show\n"); } return 0;}