C言語職工管理零碎設計。本站提示廣大學習愛好者:(C言語職工管理零碎設計)文章只能為提供參考,不一定能成為您想要的結果。以下是C言語職工管理零碎設計正文
本文實例為大家分享了C言語職工管理零碎設計代碼,供大家參考,詳細內容如下
代碼如下:
#include<stdio.h> #include<stdlib.h> #include <string.h> struct Worker { int id;//工號 char name[16];//姓名 char sex[8];//性別 int age;//年齡 char edu_exp[32];//學歷 int wage;//工資 char adress[32];//地址 char phong[16];//電話 Worker* next; }; //創立表頭 Worker m_head = { 0 }; //用戶輸出信息 int user_input(Worker* w) { printf("ID:"); scanf("%d", &w->id); getchar();//吸發出車字符 printf("name:"); gets_s(w->name); printf("sex:"); gets_s(w->sex); printf("age:"); scanf("%d", &w->age); getchar();//吸發出車字符 printf("edu_exp:"); gets_s(w->edu_exp); printf("wage:"); scanf("%d", &w->wage); getchar();//吸發出車字符 printf("adress:"); gets_s(w->adress); printf("phone:"); gets_s(w->phong); return 0; } //添加對象 void add(Worker* w) { w->next = m_head.next; m_head.next = w; } //按拔出對象 int insert(Worker* w) { Worker* cur = m_head.next; // 以後節點current Worker* pre = &m_head; // 上一個節點previous while (cur) { if (w->id < cur->id) // 找到這個地位 break; pre = cur; cur = cur->next; // 找到最後一個對象 } // 拔出到pre節點的前面 w->next = pre->next; pre->next = w; return 0; } //刪除對象 int remove(int id) { Worker* cur = m_head.next;//以後節點為第一個對象 Worker* pre = &m_head;//以後節點的前一個節點,為頭節點,指向第一個對象 while (cur) { if (id == cur->id)//找到要刪除的節點 { pre->next = cur->next; free(cur);//刪除該節點 return 1;//成功刪除前往1 } pre = cur; cur = cur->next; } return 0; } //查找對象 int find(int id) { Worker* p = m_head.next; while (p) { if (id == p->id) { printf("ID:%d\nName:%s\nSex:%s\nAge:%d\nEdu-exp:%s\nWage:%d\nAdress:%s\nPhone:%s\n", p->id, p->name, p->sex, p->age, p->edu_exp, p->wage, p->adress, p->phong); return 1;//找到目的前往1 } p = p->next; } return 0; } //遍歷 void show_all() { Worker* p = m_head.next; if (!p) { printf("暫無員工信息!\n"); return; } printf("工 號 姓 名 性 別 年 齡 學 歷 工 資 住 址 電 話\n"); printf("----------------------------------------------------------------\n"); while (p) { printf("%d %s %s %d %s %d %s %s\n", p->id, p->name, p->sex, p->age, p->edu_exp, p->wage, p->adress, p->phong); p = p->next; } } //向文件存入數據 int save() { const char* filename = "F:\\data.txt"; FILE* fp = fopen(filename, "a"); if (fp == NULL) { printf("can not open the file...."); exit(0); } Worker* p = m_head.next; while (p) { fprintf(fp, "\r"); fprintf(fp, "%d ", p->id); fprintf(fp, "%s ", p->name); fprintf(fp, "%s ", p->sex); fprintf(fp, "%d ", p->age); fprintf(fp, "%s ", p->edu_exp); fprintf(fp, "%d ", p->wage); fprintf(fp, "%s ", p->adress); fprintf(fp, "%s ", p->phong); fprintf(fp, "\t\r\n"); p = p->next; } fclose(fp); return 0; } //修正對象 void rewrite(int id) { Worker* p = m_head.next; while (p) { if (id == p->id) { user_input(p); } p = p->next; } } //主菜單 void List() { Worker* w = NULL; char key; while (1) { do { 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("* *\n"); printf("*******************************************************\n"); key = getchar(); } while (key != '1'&&key != '2'&&key != '3'&&key != '4' &&key != '5'&&key != '6'&&key != '7'); switch (key) { case '1':system("cls"); while (1) { Worker* w = (Worker*)malloc(sizeof(Worker)); user_input(w); insert(w); if (getchar() == 'N') { break; } } save(); free(w); break; case '2':system("cls"); show_all(); system("pause"); break; case '3':system("cls"); if (!m_head.next) { printf("暫無員工信息!\n"); system("pause"); break; } while (1) { int n; printf("---------------------------------\n"); printf("請輸出要查找的ID號:"); scanf("%d", &n); if (!find(n)) { printf("找不到ID號為%d 的職工信息...\n", n); } char ch = getchar(); if (ch == 'N') { break; } } break; case '4':system("cls"); if (!m_head.next) { printf("暫無員工信息!\n"); system("pause"); break; } while (1) { int n; printf("---------------------------------\n"); printf("請輸出要刪除的ID號:"); scanf("%d", &n); if (remove(n)) { printf("成功刪除ID號為%d的職工信息.\n", n); } else printf("無法刪除ID號為%d的職工信息.\n", n); char ch = getchar(); if (ch == 'N')//摁N加入 { break; } } break; case '5':system("cls");// if (!m_head.next) { printf("暫無員工信息!\n"); system("pause"); break; } while (1) { int n; printf("請輸出要修正的ID號:\n"); scanf("%d", &n); printf("請修正:\n"); rewrite(n); if (getchar() == 'N') { break; } } break; case '6':system("cls"); printf("職工零碎運用闡明:摁相應數字進入相應的子菜單,若想加入則摁N\n開端有數據,需求先停止錄入.\n"); system("pause"); break; case '7':system("cls");// return; break; } } } int main() { List(); return 0; }
這是一個復雜的小例子,次要是給大家一些思緒,我這裡只是復雜的寫了保管輸出的數據到文件中,你也可用寫一個從文件中讀取數據到控制台,並且可以經過鏈表停止修正.這就費事一點,但是思緒很復雜.有興味的同窗可以do better.
引薦幾篇文章:
C++完成復雜的圖書管理零碎
C++完成復雜的職工信息管理零碎
C++根底先生管理零碎