C語(yǔ)言實(shí)現(xiàn)員工工資管理系統(tǒng)
本文實(shí)例為大家分享了C語(yǔ)言實(shí)現(xiàn)員工工資管理系統(tǒng)的具體代碼,供大家參考,具體內(nèi)容如下
看點(diǎn):
1. 枚舉類(lèi)型的使用(錄入與輸出)
2. 文件的使用:用文件來(lái)存儲(chǔ)員工信息,開(kāi)始運(yùn)行程序時(shí)從文件中讀取員工信息到鏈表退出程序時(shí)將員工信息保存到文件中。
2_1. 存儲(chǔ)結(jié)構(gòu)體這樣的數(shù)據(jù)塊所使用的文件操作函數(shù);
2_2. feof()函數(shù)作為循環(huán)條件的正確使用方法;
3. 鏈表的相關(guān)操作
3_1. 結(jié)構(gòu)體中char類(lèi)型的數(shù)據(jù)寫(xiě)入方式
4. while循環(huán)下實(shí)現(xiàn)的菜單與子菜單
注:部分功能還沒(méi)有實(shí)現(xiàn),涉及到單鏈表的遍歷,比較簡(jiǎn)單。
頭文件:標(biāo)頭.h
#include<malloc.h> #include<stdio.h> #include<stdlib.h> #include<string.h> //枚舉型崗位:銷(xiāo)售員、技術(shù)員、銷(xiāo)售經(jīng)理、經(jīng)理 enum workpost { SALESMAN = 0, TECHNICIAN, SALESMANAGER, MANAGER }; //員工類(lèi)型:鏈表結(jié)點(diǎn) struct Employee { ?? ?int ?id;?? ??? ??? ??? ?//員工號(hào):主鍵,唯一 ?? ?char name[10];?? ??? ??? ?//姓名 ?? ?char sex[3];?? ??? ??? ?//性別:男或女 ?? ?int ?age;?? ??? ??? ??? ?//年齡 ?? ?char department[20];?? ?//部門(mén) ?? ?enum workpost post;?? ??? ?//枚舉型崗位 ?? ?int ?workHour;?? ??? ??? ?//當(dāng)月工作小時(shí)數(shù) ?? ?double sales;?? ??? ??? ?//當(dāng)月月銷(xiāo)售額 ?? ?double salary;?? ??? ??? ?//月工資 ?? ?struct Employee * next;//鏈表的指針域 }; #define LENGTH 50 //全局變量 Employee Employees[LENGTH]; typedef int DataType; Employee *head; int select = 1;//功能選擇變量 int subselect = 1;//子功能選擇變量 FILE *fp; int i = 0;//循環(huán)變量 //函數(shù)聲明 void ListInitiate(Employee **head); void Load(); void Check(); void AddData(); void UpdataData(); void QueryData(); void DeleteData(); void Sorting(); void Statistics(); void Save(); //菜單函數(shù) ? //要求:至少有兩層菜單。 void Menu() { ?? ?while (select) ?? ?{ ?? ??? ?printf("————————員工工資管理系統(tǒng)————————\n"); ?? ??? ?printf("————1. 增添數(shù)據(jù) ? ? ? ? ? 2. 修改數(shù)據(jù)————\n"); ?? ??? ?printf("————3. 查找數(shù)據(jù) ? ? ? ? ? 4. 刪除數(shù)據(jù)————\n"); ?? ??? ?printf("————5. 排序函數(shù) ? ? ? ? ? 6. 統(tǒng)計(jì)數(shù)據(jù)————\n"); ?? ??? ?printf("————0. 退出程序 ? ? ? ? ? 7. 查看鏈表————\n"); ?? ??? ?printf("請(qǐng)輸入你的選擇:\n"); ?? ??? ?scanf("%d", &select); ?? ??? ?switch (select) ?? ??? ?{ ?? ??? ?case 1: ?? ??? ??? ?AddData(); ?? ??? ??? ?break; ?? ??? ?case 2: ?? ??? ??? ?UpdataData(); ?? ??? ??? ?break; ?? ??? ?case 3: ?? ??? ??? ?QueryData(); ?? ??? ??? ?break; ?? ??? ?case 4: ?? ??? ??? ?DeleteData(); ?? ??? ??? ?break; ?? ??? ?case 5: ?? ??? ??? ?Sorting(); ?? ??? ??? ?break; ?? ??? ?case 6: ?? ??? ??? ?Statistics(); ?? ??? ??? ?break; ?? ??? ?case 7: ?? ??? ??? ?Check(); ?? ??? ??? ?break; ?? ??? ?case 0: break; ?? ??? ?default: printf("輸入錯(cuò)誤!請(qǐng)重新選擇。\n"); ?? ??? ?} ?? ?} } //功能函數(shù) ? //初始化鏈表函數(shù) void ListInitiate(Employee **head)//head是一個(gè)指針,*head也是一個(gè)指針 { ?? ?*head = (Employee *)malloc(sizeof(Employee));//申請(qǐng)頭結(jié)點(diǎn) ?? ?(*head)->next = NULL; } //必須用文件來(lái)存儲(chǔ)員工信息: ?? ?//開(kāi)始運(yùn)行程序時(shí)從文件中讀取員工信息到鏈表,退出程序時(shí)將員工信息保存到文件中。 void Load() { ?? ?if ((fp = fopen("Employee.txt", "ab+")) == NULL) ?? ?{ ?? ??? ?printf("打開(kāi)文件出錯(cuò)!\n"); ?? ??? ?exit(1); ?? ?} ?? ?//未知文件長(zhǎng)度,使用feof(FILE *Stream)判斷文件結(jié)尾 ?? ?while (!feof(fp)) ?? ?{ ?? ??? ?//feof(fp)通過(guò)fread/fscanf是否讀寫(xiě)出錯(cuò)判斷,應(yīng)該在讀寫(xiě)操作之后進(jìn)行判斷,否則多進(jìn)行一輪循環(huán) ?? ??? ?if (fread(&Employees[i], sizeof(struct Employee), 1, fp) == 0) ?? ??? ?{ ?? ??? ??? ?continue; ?? ??? ?} ?? ??? ?Employee *p, *q;//分別用于指向第i個(gè)結(jié)點(diǎn)和待插入的新結(jié)點(diǎn) ?? ??? ?p = head; ?? ??? ?while (p->next != NULL)//把指針P定位到鏈表尾位置 ?? ??? ?{ ?? ??? ??? ?p = p->next; ?? ??? ?} ?? ??? ?q = (Employee *)malloc(sizeof(Employee));//用指針Q申請(qǐng)新結(jié)點(diǎn) ?? ??? ?//存入數(shù)據(jù)到鏈表結(jié)點(diǎn) ?? ??? ?q->id = i; ?? ??? ?q->id++; ?? ??? ?strcpy(q->name, Employees[i].name); ?? ??? ?strcpy(q->sex, Employees[i].sex); ?? ??? ?q->age = Employees[i].age; ?? ??? ?strcpy(q->department, Employees[i].department); ?? ??? ?q->post = Employees[i].post; ?? ??? ?q->workHour = Employees[i].workHour; ?? ??? ?q->sales = Employees[i].sales;//當(dāng)月月銷(xiāo)售額 ?? ??? ?q->salary = Employees[i].salary;//月工資 ?? ??? ?q->next = p->next;//Q指針的next域指向P指針的next域,即第i個(gè)結(jié)點(diǎn) ?? ??? ?p->next = q; ?? ??? ?i++; ?? ?} ?? ?fclose(fp); } //檢查鏈表數(shù)據(jù)輸入是否準(zhǔn)確 void Check() { ?? ?Employee *p; ?? ?p = head; ?? ?if (p->next == NULL) ?? ?{ ?? ??? ?printf("鏈表為空!\n"); ?? ?} ?? ?else ?? ?{ ?? ??? ?printf("鏈表數(shù)據(jù)內(nèi)容為:\n"); ?? ??? ?while (p->next != NULL) ?? ??? ?{ ?? ??? ??? ?p = p->next; ?? ??? ??? ?printf("%d %s %s %d %s ", p->id, p->name, p->sex, p->age, p->department); ?? ??? ??? ?switch (p->post) ?? ??? ??? ?{ ?? ??? ??? ?case 0: ?? ??? ??? ??? ?printf("SALESMAN ? ?"); ?? ??? ??? ??? ?break; ?? ??? ??? ?case 1: ?? ??? ??? ??? ?printf("TECHNICIAN ?"); ?? ??? ??? ??? ?break; ?? ??? ??? ?case 2: ?? ??? ??? ??? ?printf("SALESMANAGER"); ?? ??? ??? ??? ?break; ?? ??? ??? ?case 3: ?? ??? ??? ??? ?printf("MANAGER ? ? "); ?? ??? ??? ??? ?break; ?? ??? ??? ?default: ?? ??? ??? ??? ?printf("數(shù)據(jù)有誤!\n"); ?? ??? ??? ??? ?break; ?? ??? ??? ?} ?? ??? ??? ?printf(" %d ?%.2lf ?%.2lf\n", p->workHour, p->sales, p->salary); ?? ??? ?} ?? ??? ?printf("輸出完畢!\n"); ?? ?} } //增添數(shù)據(jù) ? //添加一個(gè)員工,只輸入該員工的基本信息(姓名、年齡、性別、部門(mén)、崗位)。 void AddData() { ?? ?Employee *p, *q;//分別用于指向第i個(gè)結(jié)點(diǎn)和待插入的新結(jié)點(diǎn) ?? ?p = head; ?? ?while (p->next != NULL)//把指針P定位到鏈表尾位置 ?? ?{ ?? ??? ?p = p->next; ?? ?} ?? ?q = (Employee *)malloc(sizeof(Employee));//用指針Q申請(qǐng)新結(jié)點(diǎn) ?? ?i++; ?? ?q->id = i; ?? ?printf("請(qǐng)輸入員工姓名:\n"); ?? ?scanf("%s", q->name); ?? ?printf("請(qǐng)輸入員工年齡:\n"); ?? ?scanf("%d", &q->age); ?? ?printf("請(qǐng)輸入員工性別:\n"); ?? ?scanf("%s", q->sex); ?? ?printf("請(qǐng)輸入員工部門(mén):\n"); ?? ?scanf("%s", q->department); ?? ?printf("請(qǐng)輸入員工崗位:\n"); ?? ?scanf("%d", &q->post); ?? ?q->workHour = 0; ?? ?if (q->post == 3) ?? ?{ ?? ??? ?q->salary = 8000.0; ?? ?} ?? ?else ?? ?{ ?? ??? ?q->salary = 0.0; ?? ?} ?? ?q->sales = 0.0; ?? ?q->next = p->next;//Q指針的next域指向P指針的next域,即第i個(gè)結(jié)點(diǎn) ?? ?p->next = q; ?? ?printf("添加成功!\n"); } //修改數(shù)據(jù) /* 1)根據(jù)員工號(hào)來(lái)修改任意員工的基本信息(姓名、年齡、性別、部門(mén)、崗位)。 2)批量計(jì)算所有技術(shù)員的當(dāng)月工資額(需填寫(xiě)技術(shù)員當(dāng)月工作時(shí)間)。 3)批量計(jì)算所有銷(xiāo)售員的當(dāng)月工資額(需填寫(xiě)銷(xiāo)售員當(dāng)月銷(xiāo)售額);然后批量計(jì)算所有銷(xiāo)售經(jīng)理的當(dāng)月工資額。 */ void UpdataData() { ?? ?subselect = 1; ?? ?Employee *p, *p1; ?? ?p = head; ?? ?while (subselect) ?? ?{ ?? ??? ?printf("—————— ?修改數(shù)據(jù)的二級(jí)菜單 ?——————\n"); ?? ??? ?printf("——1. 根據(jù)員工號(hào)來(lái)修改任意員工的基本信息\n"); ?? ??? ?printf("——2. 批量計(jì)算所有技術(shù)員的當(dāng)月工資額\n"); ?? ??? ?printf("——3. 批量計(jì)算所有銷(xiāo)售員的當(dāng)月工資額,然后批量計(jì)算所有銷(xiāo)售經(jīng)理的當(dāng)月工資額\n"); ?? ??? ?printf("——0. 退出此子菜單\n"); ?? ??? ?printf("請(qǐng)輸入你的選擇:\n"); ?? ??? ?scanf("%d", &subselect); ?? ??? ?switch (subselect) ?? ??? ?{ ?? ??? ?case 1: ?? ??? ??? ?p = head; ?? ??? ??? ?int ID; ?? ??? ??? ?printf("請(qǐng)輸入待修改的員工信息的員工號(hào):\n"); ?? ??? ??? ?scanf("%d", &ID); ?? ??? ??? ?while (p->next != NULL) ?? ??? ??? ?{ ?? ??? ??? ??? ?p = p->next; ?? ??? ??? ??? ?if (p->id == ID) ?? ??? ??? ??? ?{ ?? ??? ??? ??? ??? ?printf("請(qǐng)輸入新的員工姓名:\n"); ?? ??? ??? ??? ??? ?scanf("%s", p->name); ?? ??? ??? ??? ??? ?printf("請(qǐng)輸入新的員工年齡:\n"); ?? ??? ??? ??? ??? ?scanf("%d", &p->age); ?? ??? ??? ??? ??? ?printf("請(qǐng)輸入新的員工性別:\n"); ?? ??? ??? ??? ??? ?scanf("%s", p->sex); ?? ??? ??? ??? ??? ?printf("請(qǐng)輸入新的員工部門(mén):\n"); ?? ??? ??? ??? ??? ?scanf("%s", p->department); ?? ??? ??? ??? ??? ?printf("請(qǐng)輸入新的員工崗位:\n"); ?? ??? ??? ??? ??? ?scanf("%d", &p->post); ?? ??? ??? ??? ??? ?printf("信息錄入成功!\n"); ?? ??? ??? ??? ??? ?break; ?? ??? ??? ??? ?} ?? ??? ??? ?} ?? ??? ??? ?break; ?? ??? ?case 2: ?? ??? ??? ?//批量計(jì)算所有技術(shù)員的當(dāng)月工資額,技術(shù)員工資:工作時(shí)間*小時(shí)工資(100元每小時(shí)) ?? ??? ??? ?p = head; ?? ??? ??? ?while (p->next != NULL) ?? ??? ??? ?{ ?? ??? ??? ??? ?p = p->next; ?? ??? ??? ??? ?if (p->post == 1) ?? ??? ??? ??? ?{ ?? ??? ??? ??? ??? ?printf("請(qǐng)?zhí)顚?xiě)員工號(hào)為%d的技術(shù)員當(dāng)月工作時(shí)間:\n", p->id); ?? ??? ??? ??? ??? ?scanf("%d", &p->workHour); ?? ??? ??? ??? ??? ?p->salary = p->workHour * 100; ?? ??? ??? ??? ?} ?? ??? ??? ?} ?? ??? ??? ?break; ?? ??? ?case 3: ?? ??? ??? ?//銷(xiāo)售員工資:銷(xiāo)售額*4%提成; ?? ??? ??? ?p = head; ?? ??? ??? ?while (p->next != NULL) ?? ??? ??? ?{ ?? ??? ??? ??? ?p = p->next; ?? ??? ??? ??? ?if (p->post == 0) ?? ??? ??? ??? ?{ ?? ??? ??? ??? ??? ?printf("請(qǐng)?zhí)顚?xiě)員工號(hào)為%d的銷(xiāo)售員當(dāng)月銷(xiāo)售額:\n", p->id); ?? ??? ??? ??? ??? ?scanf("%lf", &p->sales); ?? ??? ??? ??? ??? ?p->salary = p->sales*0.04; ?? ??? ??? ??? ?} ?? ??? ??? ?}? ?? ??? ??? ?//銷(xiāo)售經(jīng)理:底薪(5000)+所轄部門(mén)銷(xiāo)售額總額*0.5%。 ?? ??? ??? ?p = head; ?? ??? ??? ?while (p->next != NULL) ?? ??? ??? ?{ ?? ??? ??? ??? ?p = p->next; ?? ??? ??? ??? ?p1 = head; ?? ??? ??? ??? ?double sum_of_sales = 0.0; ?? ??? ??? ??? ?if (p->post == 2) ?? ??? ??? ??? ?{ ?? ??? ??? ??? ?while(p1->next != NULL) ?? ??? ??? ??? ?{ ?? ??? ??? ??? ??? ?p1 = p1->next; ?? ??? ??? ??? ? ? ?if (strcmp(p->department, p1->department)==0) ?? ??? ??? ??? ? ? ?{ ?? ??? ??? ??? ??? ? ? sum_of_sales += p1->sales ; ?? ??? ??? ??? ? ? ?} ?? ??? ??? ??? ?} ?? ??? ??? ??? ?p->salary = sum_of_sales * 0.005 + 5000; ?? ??? ??? ??? ?} ?? ??? ??? ?} ?? ??? ??? ?break; ?? ??? ?case 0: ?? ??? ??? ?break; ?? ??? ?default: ?? ??? ??? ?printf("輸入錯(cuò)誤!請(qǐng)重新選擇。\n"); ?? ??? ?} ?? ?} } //查詢(xún)數(shù)據(jù) void QueryData() { ?? ?subselect = 1; ?? ?Employee *p; ?? ?p = head; ?? ?while (subselect) ?? ?{ ?? ??? ?printf("—————— ?查詢(xún)數(shù)據(jù)的二級(jí)菜單 ? ——————\n"); ?? ??? ?printf("——1. 根據(jù)工號(hào)或者姓名查詢(xún)員工信息\n"); ?? ??? ?printf("——2. 按部門(mén)顯示本部門(mén)全部員工信息\n"); ?? ??? ?printf("——3. 分別顯示4種崗位的員工信息\n"); ?? ??? ?printf("——4. 分頁(yè)顯示全部員工的信息\n"); ?? ??? ?printf("——0. 退出此子菜單\n"); ?? ??? ?printf("請(qǐng)輸入你的選擇:\n"); ?? ??? ?scanf("%d", &subselect); ?? ??? ?switch (subselect) ?? ??? ?{ ?? ??? ?case 1: ?? ??? ??? ?p = head; ?? ??? ??? ?int ID; ?? ??? ??? ?printf("請(qǐng)輸入工號(hào):\n"); ?? ??? ??? ?scanf("%d", &ID); ?? ??? ??? ?while (p->next != NULL) ?? ??? ??? ?{ ?? ??? ??? ??? ?p = p->next; ?? ??? ??? ??? ?if (p->id == ID) ?? ??? ??? ?{ ?? ??? ??? ?printf("%d %s %s %d %s ", p->id, p->name, p->sex, p->age, p->department); ?? ??? ??? ?switch (p->post) ?? ??? ??? ?{ ?? ??? ??? ?case 0: ?? ??? ??? ??? ?printf("SALESMAN ? ?"); ?? ??? ??? ??? ?break; ?? ??? ??? ?case 1: ?? ??? ??? ??? ?printf("TECHNICIAN ?"); ?? ??? ??? ??? ?break; ?? ??? ??? ?case 2: ?? ??? ??? ??? ?printf("SALESMANAGER"); ?? ??? ??? ??? ?break; ?? ??? ??? ?case 3: ?? ??? ??? ??? ?printf("MANAGER ? ? "); ?? ??? ??? ??? ?break; ?? ??? ??? ?default: ?? ??? ??? ??? ?printf("數(shù)據(jù)有誤!\n"); ?? ??? ??? ??? ?break; ?? ??? ??? ?} ?? ??? ??? ?printf(" %d ?%.2lf ?%.2lf\n", p->workHour, p->sales, p->salary); ?? ??? ? ? ?printf("輸出完畢!\n"); ?? ? ? ? ? ?} ?? ? ? ? ? ?} ?? ??? ?break; ?? ??? ?case 2: ?? ??? ??? ?char Department[20]; ?? ??? ??? ?printf("請(qǐng)輸入部門(mén)名稱(chēng):\n"); ?? ??? ??? ??? ??? ?scanf("%s", &Department); ?? ??? ??? ?p = head; ?? ??? ??? ?while(p->next != NULL) ?? ??? ??? ??? ?{ ?? ??? ??? ??? ??? ?p = p->next; ?? ??? ??? ??? ? ? ?if (strcmp(p->department, Department)==0) ?? ??? ??? ??? ? ? ?{ ?? ??? ??? ??? ??? ? ? printf("%d %s %s %d %s ", p->id, p->name, p->sex, p->age, p->department); ?? ??? ??? ?switch (p->post) ?? ??? ??? ?{ ?? ??? ??? ?case 0: ?? ??? ??? ??? ?printf("SALESMAN ? ?"); ?? ??? ??? ??? ?break; ?? ??? ??? ?case 1: ?? ??? ??? ??? ?printf("TECHNICIAN ?"); ?? ??? ??? ??? ?break; ?? ??? ??? ?case 2: ?? ??? ??? ??? ?printf("SALESMANAGER"); ?? ??? ??? ??? ?break; ?? ??? ??? ?case 3: ?? ??? ??? ??? ?printf("MANAGER ? ? "); ?? ??? ??? ??? ?break; ?? ??? ??? ?default: ?? ??? ??? ??? ?printf("數(shù)據(jù)有誤!\n"); ?? ??? ??? ??? ?break; ?? ??? ??? ?} ?? ??? ??? ?printf(" %d ?%.2lf ?%.2lf\n", p->workHour, p->sales, p->salary); ?? ??? ??? ??? ? ? ?} ?? ??? ??? ??? ?} ?? ??? ??? ??? ?printf("輸出完畢!\n"); ?? ??? ??? ? ?? ??? ?break; ?? ??? ?case 3: ?? ??? ??? ?printf("SALESMAN:\n"); ?? ??? ??? ?p = head; ?? ??? ??? ?while (p->next != NULL) ?? ??? ??? ?{ ?? ??? ??? ??? ?p = p->next; ?? ??? ??? ??? ?if (p->post==0) ?? ??? ??? ??? ? ? ?{ ?? ??? ??? ??? ??? ? ? printf("%d %s %s %d %s ", p->id, p->name, p->sex, p->age, p->department); ?? ??? ??? ?switch (p->post) ?? ??? ??? ?{ ?? ??? ??? ?case 0: ?? ??? ??? ??? ?printf("SALESMAN ? ?"); ?? ??? ??? ??? ?break; ?? ??? ??? ?case 1: ?? ??? ??? ??? ?printf("TECHNICIAN ?"); ?? ??? ??? ??? ?break; ?? ??? ??? ?case 2: ?? ??? ??? ??? ?printf("SALESMANAGER"); ?? ??? ??? ??? ?break; ?? ??? ??? ?case 3: ?? ??? ??? ??? ?printf("MANAGER ? ? "); ?? ??? ??? ??? ?break; ?? ??? ??? ?default: ?? ??? ??? ??? ?printf("數(shù)據(jù)有誤!\n"); ?? ??? ??? ??? ?break; ?? ??? ??? ?} ?? ??? ??? ?printf(" %d ?%.2lf ?%.2lf\n", p->workHour, p->sales, p->salary); ?? ??? ??? ??? ? ? ?} ?? ??? ??? ?}? ?? ??? ??? ?printf("TECHNICIAN:\n"); ?? ??? ??? ?p = head; ?? ??? ??? ?while (p->next != NULL) ?? ??? ??? ?{ ?? ??? ??? ??? ?p = p->next; ?? ??? ??? ??? ?if (p->post==1) ?? ??? ??? ??? ? ? ?{ ?? ??? ??? ??? ??? ? ? printf("%d %s %s %d %s ", p->id, p->name, p->sex, p->age, p->department); ?? ??? ??? ?switch (p->post) ?? ??? ??? ?{ ?? ??? ??? ?case 0: ?? ??? ??? ??? ?printf("SALESMAN ? ?"); ?? ??? ??? ??? ?break; ?? ??? ??? ?case 1: ?? ??? ??? ??? ?printf("TECHNICIAN ?"); ?? ??? ??? ??? ?break; ?? ??? ??? ?case 2: ?? ??? ??? ??? ?printf("SALESMANAGER"); ?? ??? ??? ??? ?break; ?? ??? ??? ?case 3: ?? ??? ??? ??? ?printf("MANAGER ? ? "); ?? ??? ??? ??? ?break; ?? ??? ??? ?default: ?? ??? ??? ??? ?printf("數(shù)據(jù)有誤!\n"); ?? ??? ??? ??? ?break; ?? ??? ??? ?} ?? ??? ??? ?printf(" %d ?%.2lf ?%.2lf\n", p->workHour, p->sales, p->salary); ?? ??? ??? ??? ? ? ?} ?? ??? ??? ?}? ?? ??? ??? ?printf("SALESMANAGER:\n"); ?? ??? ??? ?p = head; ?? ??? ??? ?while (p->next != NULL) ?? ??? ??? ?{ ?? ??? ??? ??? ?p = p->next; ?? ??? ??? ??? ?if (p->post==2) ?? ??? ??? ??? ? ? ?{ ?? ??? ??? ??? ??? ? ? printf("%d %s %s %d %s ", p->id, p->name, p->sex, p->age, p->department); ?? ??? ??? ?switch (p->post) ?? ??? ??? ?{ ?? ??? ??? ?case 0: ?? ??? ??? ??? ?printf("SALESMAN ? ?"); ?? ??? ??? ??? ?break; ?? ??? ??? ?case 1: ?? ??? ??? ??? ?printf("TECHNICIAN ?"); ?? ??? ??? ??? ?break; ?? ??? ??? ?case 2: ?? ??? ??? ??? ?printf("SALESMANAGER"); ?? ??? ??? ??? ?break; ?? ??? ??? ?case 3: ?? ??? ??? ??? ?printf("MANAGER ? ? "); ?? ??? ??? ??? ?break; ?? ??? ??? ?default: ?? ??? ??? ??? ?printf("數(shù)據(jù)有誤!\n"); ?? ??? ??? ??? ?break; ?? ??? ??? ?} ?? ??? ??? ?printf(" %d ?%.2lf ?%.2lf\n", p->workHour, p->sales, p->salary); ?? ??? ??? ??? ? ? ?} ?? ??? ??? ?}? ?? ??? ??? ?printf("MANAGER:\n"); ?? ??? ??? ?p = head; ?? ??? ??? ?while (p->next != NULL) ?? ??? ??? ?{ ?? ??? ??? ??? ?p = p->next; ?? ??? ??? ??? ?if (p->post==3) ?? ??? ??? ??? ? ? ?{ ?? ??? ??? ??? ??? ? ? printf("%d %s %s %d %s ", p->id, p->name, p->sex, p->age, p->department); ?? ??? ??? ?switch (p->post) ?? ??? ??? ?{ ?? ??? ??? ?case 0: ?? ??? ??? ??? ?printf("SALESMAN ? ?"); ?? ??? ??? ??? ?break; ?? ??? ??? ?case 1: ?? ??? ??? ??? ?printf("TECHNICIAN ?"); ?? ??? ??? ??? ?break; ?? ??? ??? ?case 2: ?? ??? ??? ??? ?printf("SALESMANAGER"); ?? ??? ??? ??? ?break; ?? ??? ??? ?case 3: ?? ??? ??? ??? ?printf("MANAGER ? ? "); ?? ??? ??? ??? ?break; ?? ??? ??? ?default: ?? ??? ??? ??? ?printf("數(shù)據(jù)有誤!\n"); ?? ??? ??? ??? ?break; ?? ??? ??? ?} ?? ??? ??? ?printf(" %d ?%.2lf ?%.2lf\n", p->workHour, p->sales, p->salary); ?? ??? ??? ??? ? ? ?} ?? ??? ??? ?}? ?? ??? ??? ?printf("輸出完畢!\n"); ?? ??? ?break; ?? ??? ?case 4: ?? ??? ??? ?printf("分頁(yè)功能略難(沒(méi)學(xué)過(guò)),暫時(shí)留空吧\n"); ?? ??? ?break; ?? ??? ?case 0: ?? ??? ?break; ?? ??? ?default: ?? ??? ?printf("輸入錯(cuò)誤!請(qǐng)重新選擇。\n"); ?? ??? ?} ? ? } ?? ? } //刪除數(shù)據(jù) void DeleteData(){ ?? ?Employee *p, *s; ?? ?p = head; ?? ?printf("請(qǐng)輸入要?jiǎng)h除員工信息的員工號(hào):\n"); ?? ?scanf("%d", &i); ?? ?while (p->next != NULL) ?? ?{ ?? ??? ?s = p; ?? ??? ?p = p->next; ?? ??? ?if(p->id==i) break;?? ? ?? ?} ?? ?s->next = s->next->next; ?? ?free(p); } ? //按要求排序 void Sorting() { ?? ?subselect = 1; ?? ?Employee *p, *p1; ?? ?int z = 0; ?? ?int f=0; ?? ?int count = 0; ?? ?double s[20]; ?? ?double storeNum; ?? ?p = head; ?? ?while (subselect) ?? ?{ ?? ??? ?printf("—————— ?排序數(shù)據(jù)的二級(jí)菜單 ? ——————\n"); ?? ??? ?printf("——1. 所有員工信息按當(dāng)月工資從高到低并顯示\n"); ?? ??? ?printf("——2. 某個(gè)崗位的員工信息按當(dāng)月工資從高到低顯示\n"); ?? ??? ?printf("——0. 退出此子菜單\n"); ?? ??? ?printf("請(qǐng)輸入你的選擇:\n"); ?? ??? ?scanf("%d", &subselect); ?? ??? ?switch (subselect) ?? ??? ?{ ?? ??? ?case 1: ?? ??? ??? ?p = head; ?? ??? ??? ?z = 0;? ?? ??? ??? ?while (p->next != NULL) ?? ??? ??? ?{ ?? ??? ??? ??? ?p = p->next; ?? ??? ??? ??? ?s[z] = p->salary; ?? ??? ??? ??? ?z++; ?? ??? ??? ?} ?? ??? ??? ?//冒泡排序? ?? ??? ??? ?for (int i = 0; i < z-1; i++)//因?yàn)檫M(jìn)行兩兩比較,10個(gè)數(shù)最壞的情況就需要進(jìn)行9趟 ?? ? ? ? ? ?{ ?? ??? ? ? ?for (int j = 0; j < (z-1) - i; j++)//因?yàn)槊窟M(jìn)行一趟就可以排好一個(gè)數(shù),所以循環(huán)次數(shù)-i ?? ??? ? ? ?{ ?? ??? ??? ?if (s[j] > s[j+1])//兩兩比較 ?? ??? ??? ?{ ?? ??? ??? ??? ?double temp = s[j]; ?? ??? ??? ??? ?s[j] = s[j+1]; ?? ??? ??? ??? ?s[j+1] = temp; ?? ??? ??? ?} ?? ??? ? ? ?} ?? ? ? ? ? ?} ?? ? ? ? ? ?z--; ?? ??? ??? ?for (int i = z; i >= 0; i--) ?? ??? ??? ?{ ?? ??? ??? ??? ?if(storeNum == s[i]) ?? ??? ??? ??? ?{ ?? ??? ??? ??? ??? ?continue; ?? ??? ??? ??? ?} ?? ??? ??? ? ? ?p = head; ?? ??? ??? ? ? ?while (p->next != NULL) ?? ??? ??? ? ? ?{ ?? ??? ??? ??? ?p = p->next; ?? ??? ??? ? ? ?storeNum = s[i]; ?? ??? ??? ??? ?if(p->salary==s[i]) ?? ??? ??? ??? ?{ ?? ??? ??? ??? ??? ?printf("%d %s %s %d %s ", p->id, p->name, p->sex, p->age, p->department); ?? ??? ??? ?switch (p->post) ?? ??? ??? ?{ ?? ??? ??? ?case 0: ?? ??? ??? ??? ?printf("SALESMAN ? ?"); ?? ??? ??? ??? ?break; ?? ??? ??? ?case 1: ?? ??? ??? ??? ?printf("TECHNICIAN ?"); ?? ??? ??? ??? ?break; ?? ??? ??? ?case 2: ?? ??? ??? ??? ?printf("SALESMANAGER"); ?? ??? ??? ??? ?break; ?? ??? ??? ?case 3: ?? ??? ??? ??? ?printf("MANAGER ? ? "); ?? ??? ??? ??? ?break; ?? ??? ??? ?default: ?? ??? ??? ??? ?printf("數(shù)據(jù)有誤!\n"); ?? ??? ??? ??? ?break; ?? ??? ??? ?} ?? ??? ??? ?printf(" %d ?%.2lf ?%.2lf\n", p->workHour, p->sales, p->salary); ?? ??? ??? ??? ?} ?? ??? ??? ?} ?? ??? ?} ?? ??? ?break;?? ? ?? ??? ?case 2: ?? ??? ??? ?int Post; ?? ??? ??? ?z = 0; ?? ??? ??? ?storeNum = 0.0; ?? ??? ??? ?printf("請(qǐng)輸入崗位信息:(SALESMAN = 0, TECHNICIAN, SALESMANAGER, MANAGER)\n"); ?? ??? ??? ?scanf("%d", &Post); ?? ??? ??? ?p = head; ?? ??? ??? ?while(p->next != NULL) ?? ??? ??? ??? ?{ ?? ??? ??? ??? ??? ?p = p->next; ?? ??? ??? ??? ? ? ?if (p->post==Post) ?? ??? ??? ??? ? ? ?{ ?? ??? ??? ??? ? ? ??? ?s[z] = p->salary; ?? ??? ??? ??? ? ? ? ? ?z++; ?? ??? ??? ? ? ? ? } ?? ? ? ? ? ??? ?} ?? ??? ??? ?//冒泡排序? ?? ??? ??? ?for (int i = 0; i < z-1; i++) ?? ? ? ? ? ?{ ?? ??? ? ? ?for (int j = 0; j < (z-1) - i; j++)//因?yàn)槊窟M(jìn)行一趟就可以排好一個(gè)數(shù),所以循環(huán)次數(shù)-i ?? ??? ? ? ?{ ?? ??? ??? ?if (s[j] > s[j+1])//兩兩比較 ?? ??? ??? ?{ ?? ??? ??? ??? ?double temp = s[j]; ?? ??? ??? ??? ?s[j] = s[j+1]; ?? ??? ??? ??? ?s[j+1] = temp; ?? ??? ??? ?} ?? ??? ? ? ?} ?? ? ? ? ? ?} ?? ? ? ? ? ?z--; ?? ? ? ? ? ?for (int i = z; i >= 0; i--) ?? ??? ??? ?{ ?? ??? ??? ??? ?if(storeNum == s[i]) ?? ??? ??? ??? ?{ ?? ??? ??? ??? ??? ?continue; ?? ??? ??? ??? ?} ?? ??? ??? ? ? ?p = head; ?? ??? ??? ? ? ?while (p->next != NULL) ?? ??? ??? ? ? ?{ ?? ??? ??? ??? ?p = p->next; ?? ??? ??? ??? ?if(p->salary==s[i]&&p->post==Post) ?? ??? ??? ??? ?{ ?? ??? ??? ??? ??? ?storeNum = s[i]; ?? ??? ??? ??? ??? ?printf("%d %s %s %d %s ", p->id, p->name, p->sex, p->age, p->department); ?? ??? ??? ?switch (p->post) ?? ??? ??? ?{ ?? ??? ??? ?case 0: ?? ??? ??? ??? ?printf("SALESMAN ? ?"); ?? ??? ??? ??? ?break; ?? ??? ??? ?case 1: ?? ??? ??? ??? ?printf("TECHNICIAN ?"); ?? ??? ??? ??? ?break; ?? ??? ??? ?case 2: ?? ??? ??? ??? ?printf("SALESMANAGER"); ?? ??? ??? ??? ?break; ?? ??? ??? ?case 3: ?? ??? ??? ??? ?printf("MANAGER ? ? "); ?? ??? ??? ??? ?break; ?? ??? ??? ?default: ?? ??? ??? ??? ?printf("數(shù)據(jù)有誤!\n"); ?? ??? ??? ??? ?break; ?? ??? ??? ?} ?? ??? ??? ?printf(" %d ?%.2lf ?%.2lf\n", p->workHour, p->sales, p->salary); ?? ??? ??? ??? ?} ?? ??? ??? ?} ?? ? ? ? ?? ?}?? ??? ? ? ??? ? ?? ??? ?break; ?? ??? ?case 0: ?? ??? ?break; ?? ??? ?default: ?? ??? ?printf("輸入錯(cuò)誤!請(qǐng)重新選擇。\n"); ?? ?} ? ? }?? ? } //統(tǒng)計(jì)數(shù)據(jù) void Statistics() { ?? ?printf("hh\n"); } //保存鏈表數(shù)據(jù)到文件 void Save() { ?? ?Employee *p; ?? ?p = head; ?? ?i = 0; ?? ?//第一步將鏈表中的結(jié)點(diǎn)信息存入數(shù)組中 ?? ?while (p->next != NULL) ?? ?{ ?? ??? ?p = p->next; ?? ??? ?Employees[i].id = p->id; ?? ??? ?strcpy(Employees[i].name, p->name); ?? ??? ?strcpy(Employees[i].sex, p->sex); ?? ??? ?Employees[i].age = p->age; ?? ??? ?strcpy(Employees[i].department, p->department); ?? ??? ?Employees[i].post = p->post; ?? ??? ?Employees[i].workHour = p->workHour; ?? ??? ?Employees[i].sales = p->sales;//當(dāng)月月銷(xiāo)售額 ?? ??? ?Employees[i].salary = p->salary;//月工資 ?? ??? ?i++; ?? ?} ?? ?//第二步將數(shù)組數(shù)據(jù)錄入文本文件 ?? ?if ((fp = fopen("employee.txt", "wb+")) == NULL) ?? ?{ ?? ??? ?printf("打開(kāi)文件出錯(cuò)!\n"); ?? ??? ?exit(1); ?? ?} ?? ?p = head; ?? ?i = 0; ?? ?while (p->next != NULL) ?? ?{ ?? ??? ?p = p->next; ?? ??? ?if (fwrite(&Employees[i], sizeof(struct Employee), 1, fp) != 1) ?? ??? ?{ ?? ??? ??? ?printf("寫(xiě)入文件出錯(cuò)!\n"); ?? ??? ?} ?? ??? ?i++; ?? ?} ?? ?fclose(fp); ?? ?printf("成功保存數(shù)據(jù)到文本文件employee\n"); }
Main函數(shù):
#include"標(biāo)頭.h" int main() { ?? ?ListInitiate(&head); ?? ?Load();//加載已有的數(shù)據(jù)到鏈表 ?? ?Menu(); ?? ?Save();//保存數(shù)據(jù)到文件 ?? ?printf("歡迎下次使用!\n"); }
以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
相關(guān)文章
C++讀取NC數(shù)據(jù)的結(jié)果與真實(shí)數(shù)值不一致的解決方法
本文介紹基于C++ 語(yǔ)言的netCDF庫(kù)讀取.nc格式的柵格文件時(shí),代碼讀取到的數(shù)據(jù)與柵格文件的實(shí)際數(shù)據(jù)不一致的解決方法,文中通過(guò)代碼示例和圖文講解的非常詳細(xì),需要的朋友可以參考下2024-03-03c語(yǔ)言標(biāo)準(zhǔn)庫(kù)中字符轉(zhuǎn)換函數(shù)和數(shù)字轉(zhuǎn)換函數(shù)
這篇文章主要介紹了c標(biāo)準(zhǔn)庫(kù)中字符轉(zhuǎn)換函數(shù)和數(shù)字轉(zhuǎn)換函數(shù),需要的朋友可以參考下2014-04-04c語(yǔ)言文件讀寫(xiě)示例(c語(yǔ)言文件操作)
這篇文章主要介紹了c語(yǔ)言文件讀寫(xiě)示例(c語(yǔ)言文件操作),需要的朋友可以參考下2014-02-02C++獲取當(dāng)前系統(tǒng)時(shí)間的方法總結(jié)
這篇文章主要介紹了C++獲取當(dāng)前系統(tǒng)時(shí)間的方法,實(shí)例總結(jié)了四個(gè)獲取系統(tǒng)時(shí)間的方法,非常具有實(shí)用價(jià)值,需要的朋友可以參考下2015-04-04C++ LeetCode1796字符串中第二大數(shù)字
這篇文章主要為大家介紹了C++ LeetCode1796字符串中第二大數(shù)字示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2022-12-12c/c++ 利用sscanf進(jìn)行數(shù)據(jù)拆分操作
這篇文章主要介紹了c/c++ 利用sscanf進(jìn)行數(shù)據(jù)拆分操作,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2020-12-12C語(yǔ)言實(shí)現(xiàn)選擇題標(biāo)準(zhǔn)化考試系統(tǒng)
這篇文章主要為大家詳細(xì)介紹了C語(yǔ)言實(shí)現(xiàn)選擇題標(biāo)準(zhǔn)化考試系統(tǒng),文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2022-06-06