1.資料儲存
我使用的是結構體陣列來自建乙個資料庫,放在全域性環境下,將資料庫設為乙個全域性變數
//自建資料庫
struct staff data[
999]=,
,,};
另外還需要定義乙個全域性的資料庫長度
int lenth = 3;
之所以直接定義為乙個常量,而不是用sizeof這種方式來計算陣列長度,因為我發現結構體陣列用這種方式來計算陣列長度會是乙個大坑!所以還不如手動新增常量
2.函式功能結構
(1)函式宣告
//函式宣告
intcreate()
;//增
intdel()
;//刪
intedit()
;//改
intprocess()
;//處理
intreq()
;//查
intline()
;//排
intshowall()
;//查詢全部
(2)函式定義
//選單系統
intmain
(void
)switch
(order)
}return0;
}//增添資訊
intcreate()
//刪除資訊
intdel()
//修改資訊
intedit()
//處理資訊
intprocess()
//員工資訊排序輸出
intline()
//查詢員工資訊
intreq()
//查詢全部資料
intshowall()
函式結構如下
這些函式都會對全域性中的資料庫進行操作。
main函式這裡,就構建整體的函式呼叫框架,即本管理系統的選單系統
//選單系統
intmain
(void
)switch
(order)
}return0;
}
選單系統常用switch語句來呼叫各個函式,另外為了整個管理系統的輸出整潔一點,我還用了
「stdlib.h」庫中的清屏函式system(「cls」)
int
create()
用在全域性定義的lenth(突然發現自己記錯了長度的英語單詞2333)來確定新資料的填寫位址,建立成功後要注意用lenth++
,拓展資料的長度。
刪除員工資訊的基本設計思路是:通過遍歷所有的資料查詢到指定的員工工號,然後將後面的資料依次向上填補被「刪除」的空白
//刪除資訊
intdel()
lenth--
;printf
("\n刪除成功!\n");
break;}
if(j==i+1)
}getchar()
;getchar()
;system
("cls");
return0;
}
在遍歷中用到了兩個if語句,if(num==data[j].id)來尋找符合條件的員工號,而if(j==i+1)
則是遍歷所有的資料後未找到匹配條件。
說是刪除實踐上只是刪除的陣列元素的地位(下標)和財產(資料)被下乙個陣列元素給繼承了,而下乙個的資料元素的下標和資料又被下下個資料元素繼承,以此類推。這裡同樣要注意用lenth--
縮短資料長度。
修改員工資訊的思路和刪除員工資訊的思路相差無幾:都需要查詢定位對應的員工資訊,不同的是定位後,這個還要修改員工的資訊
//修改資訊
intedit()
if(j==i+1)
}getchar()
;getchar()
;system
("cls");
return0;
}
所謂修改,無非是重新賦值罷了。
處理資訊分成了排序資訊和查詢資訊兩部分,所有採用選單系統同樣的方式來設計
//處理資訊
intprocess()
return0;
}
1.資訊排序
說實話這個函式的設計是該專案唯一卡到我的地方,因為我一直把它理解成了「排序處理」,但我了解實際上的需求應該是「排序輸出」,那問題就簡單很多了,我的設計思路如下
將每個陣列元素的位址看作是它們的住址,而員工工號資訊就是它們的門牌號,把它們的門牌號記錄下來,然後排列大小順序,按順序去拜訪它們,期間它們的住處時是沒有發生改變的。
//員工資訊排序輸出
intline()
;for
(int j =
0; j
)qsort
(id_data, i,
sizeof
(id_data[0]
), cmp)
;printf
("\n排序成功!\n\n");
//資料表的字段輸出
for(
int n=
0; n<
8; n++
)printf
("\n\n");
//資料排序輸出
for(
int n1 =
0; n1
}getchar()
;getchar()
;system
("cls");
return0;
}
依據**,我的思路對應關係如下
另外注意,作為乙個大學生的作業,使用內建的qsort()排序函式應該是非法的(狗頭),應該使用氣泡排序或選擇排序!
好,我攤牌啦,我就是想偷一下懶……
2.查詢員工資訊
查詢的思路和刪除資訊,修改資訊相似,沒什麼特別的地方
//查詢員工資訊
intreq()
;printf
("\n請輸入需要查詢員工工號:");
scanf
("%d"
,&num)
;printf
("\n\n");
for(
int n=
0; n<
8; n++
)printf
("\n\n");
for(
int j=
0; j<=i+
1; j++)if
(j==i+1)
}getchar()
;getchar()
;system
("cls");
return0;
}
這裡輸出資料表的表頭,用了陣列來儲存字串,要注意加*號:char* str[8]
無腦遍歷輸出即可,就是輸出格式上要有調整,一般可以用printf("%-9d")
佔9個空格,左對齊的方式來調整輸出格式,輸出那裡我也是為了美觀才乙個個去加空格調整格式,就不要吐槽我**格式不整潔了。
//查詢全部資料
intshowall()
; i = lenth -1;
data[i]
.all_pay = data[i]
.basic_pay + data[i]
.add_pay + data[i]
.reward_pay;
printf
("\n");
printf
("查詢成功!\n\n");
for(
int n=
0; n<
8; n++
)printf
("\n\n");
for(
int j=
0; j<=i; j++
)getchar()
;getchar()
;system
("cls");
return0;
}
實現效果:
看這整整齊齊的亞子,愛了愛了!
整體來說,這個結課作業並不難,只用課堂上的知識完全是可以完成了
但事實上無論用哪門語言,增刪改查的實現永遠是入門重要的第一課,本專案和之前的python學生管理系統,都僅僅是在內部實現的資料增刪改查,一旦退出程式,快取就被清除了,無法保留。所以我們還應考慮——如何把這樣的操作在文字中實現,如何連線mysql資料庫實現同樣增刪改查的操作。
C語言專案 《工資管理系統》
工資管理系統 工資管理系統是公司管理對於每位員工實際工作所得到薪酬進行統計管理的系統,是每個公司不可或缺的管理系統。專案背景 深入體驗c 語言專案開發 第四章 工資管理系統 工資管理系統實際上和學生成績管理系統是一樣的,上次在思創的專案答辯做個就是學生成績管理系統,上次專案是以陣列為主,結構體為輔完...
C語言版本 工資管理系統
include include include include include include define m1 6d 4s 3s 2d.02d.02d define m2 em j num,em j name,em j xb,em j y,em j m,em j d define m3 2lf ...
企業工資管理系統
大學計算機 專業畢業設計 企業工資管理系統姓名 學科專業 指導教師 學號 日期 2004 年5 月 企業工資管理系統的開發 摘 要 本文首先分析了企業工資管理系統的應用現狀,闡述了本工資管理系統的開發目的。通過對資料庫技術的現狀與發展 資料庫系統的選擇原則 系統開發工具的選擇一系列問題的分析確定了系...