职工信息管理系统(c语言实现)
功能實現:
- (1)系統以菜單方式工作
- (2)職工信息錄入功能(職工信息用文件保存)--輸入
- (3)職工信息瀏覽功能--輸出
- (4)職工信息查詢功能--算法
- 查詢方式:按姓名查詢/按職工號查詢
- (5)職工信息刪除、修改功能
代碼:
#include<stdio.h> #include<stdlib.h> #include<string.h> struct workers {char jobNo[15]; //職工號char name[15]; //姓名char sex[15]; //性別char birthday[15]; //出生年月char degree[15]; //學歷char position[15]; //職務 char salary[15]; //工資 char addr[15]; //住址 char tel[15]; //電話 };//類型定義語句 typedef struct node {struct workers data;struct node *next;}Node;//添加信息函數 "尾插法建表" void Add(Node *worker) {Node *p, *q;char n[10]; q = worker; while (q->next != NULL){q = q->next; }while (1){printf("提示:輸入0返回主菜單!\n");printf("請輸入職工號:");scanf("%s", n);if (strcmp(n, "0") == 0){break;}p = (Node *)malloc(sizeof(Node));strcpy(p->data.jobNo, n);printf("請輸入姓名:");scanf("%s", p->data.name);printf("請輸入性別:");scanf("%s", p->data.sex);printf("請輸入出生年月:");scanf("%s", p->data.birthday);printf("請輸入學歷:");scanf("%s", p->data.degree);printf("請輸入職務:");scanf("%s", p->data.position);printf("請輸入工資:");scanf("%s", p->data.salary);printf("請輸入住址:");scanf("%s", p->data.addr);printf("請輸入電話:");scanf("%s", p->data.tel);printf("提示:已經完成一條記錄的添加!");p->next = NULL;q->next = p; q = p; }}//修改職工信息函數 int change(Node *worker) {Node *p;char find[20]; p = worker->next; if (p == NULL){printf("\n提示:沒有資料可以修改!\n");return 0;}printf("請輸入要修改的職工號");scanf("%s", find);while (p != NULL) {if (strcmp(p->data.jobNo, find) == 0){break;}p = p->next;}if (p!=NULL){int x;while (1){printf("完成修改請輸入0,否則輸入非0數字進行修改!");scanf("%d", &x);if (x == 0){break;}printf(" 請輸入新職工號: ");scanf("%s", p->data.jobNo);printf(" 請輸入新職工姓名: ");scanf("%s", p->data.name);printf(" 請輸入新職工性別: ");scanf("%s", p->data.sex);printf(" 請輸入新職工出生年月: ");scanf("%s", p->data.birthday);printf(" 請輸入新職工學歷: ");scanf("%s", p->data.degree);printf(" 請輸入新職工職務: ");scanf("%s", p->data.position);printf(" 請輸入新職工工資: ");scanf("%s", p->data.salary);printf(" 請輸入新職工住址: ");scanf("%s", p->data.addr);printf(" 請輸入新職工電話: ");scanf("%s", p->data.tel);printf(" \n提示:該職工資料已經修改!\n ");}}else printf("\n提示:沒有你要修改的資料!\n "); }//輸出職工信息函數 int Disp(Node *worker) {Node *p;p = worker->next;if (p == NULL){printf(" \n提示:沒有信息可以顯示!\n ");return 0;}printf("\t\t\t\t顯示結果\n");printf(" \n職工號 姓名 性別 出生年月 學歷 職務 工資 住址 電話 \n ");while (p!=NULL) {printf("\n %s\t %s\t %s\t %s\t %s\t %s\t %s\t %s\t %s\t\n ", p->data.jobNo, p->data.name,p->data.sex, p->data.birthday, p->data.degree, p->data.position,p->data.salary, p->data.addr, p->data.tel);p = p->next;}}//查詢職工信息函數: 按職工號查詢 按職工姓名查詢 int Cha_xun(Node *worker) {Node *p;int sel;char find[20]; p = worker->next; if (p==NULL) {printf(" \n提示:沒有資料可以查詢!\n ");return 0;}printf("\n提示:\n 輸入 0---- 退出\t 輸入 1----按職工號查詢\t 輸入 2-----按職工姓名查詢\n");printf("請選擇:");scanf("%d", &sel);if (sel == 1){printf("\n請輸入你要查詢分類的職工號:");scanf("%s", find);while (p!=NULL) {if (strcmp(p->data.jobNo, find) == 0){printf(" 職工號 姓名 性別 出生年月 學歷 職務 工資 住址 電話 \n ");printf(" \n %s\t %s\t %s\t %s\t %s\t %s\t %s\t %s\t %s\t\n ", p->data.jobNo, p->data.name,p->data.sex, p->data.birthday, p->data.degree, p->data.position,p->data.salary, p->data.addr, p->data.tel);}p = p->next; }}else if (sel == 2){printf(" \n輸入你要查詢分類的職工姓名:");scanf("%s", find);while (p!=NULL){if (strcmp(p->data.name, find) == 0) {printf(" 職工號 姓名 性別 出生年月 學歷 職務 工資 住址 電話 \n ");printf(" \n %s\t %s\t %s\t %s\t %s\t %s\t %s\t %s\t %s\t \n ", p->data.jobNo, p->data.name,p->data.sex, p->data.birthday, p->data.degree, p->data.position,p->data.salary, p->data.addr, p->data.tel);}p = p->next;}}else if (sel == 0)return 0;}//刪除職工信息函數 int Delete(Node *worker) {Node *p, *r;char find[10];p = worker->next;if (p == NULL){printf("提示:沒有職工信息可以刪除!\n ");return 0;}printf(" \n提示:請輸入你要刪除的職工號!\n ");scanf("%s", find);while (p != NULL){if (strcmp(p->data.jobNo, find) == 0){break;}p = p->next;}if (p!=NULL){r = worker;while (r->next != p){r = r->next;}r->next = r->next->next; } }//將職工信息保存到文件中 void save(Node *worker) {int n;Node *p = NULL;FILE *fp; printf("是否保存到文件?( 1-----保存!,0-----不保存! )");scanf("%d", &n);if (n == 1){if (worker->next == NULL){printf(" 沒有記錄!");}else{p = worker->next;}if ((fp = fopen(" 職工信息管理系統.txt ", " wb ")) == NULL) {printf(" 文件不能打開!\n"); }while (p != NULL) {fprintf(fp, " %s\t %s\t %s\t %s\t %s\t %s\t %s\t %s\t %s\t ", p->data.jobNo, p->data.name, p->data.sex,p->data.birthday, p->data.degree, p->data.position, p->data.salary,p->data.addr, p->data.tel); p = p->next; }fclose(fp); }}//讀取職工信息 void Du_qu(Node *worker) {Node *p;FILE *fp; if ((fp = fopen("職工信息管理系統.txt", "rb")) == NULL) {printf("文件不能打開!\n ");}p = worker->next;while (p!=NULL){fscanf(fp, " %s\t %s\t %s\t %s\t %s\t %s\t %s\t %s\t %s\t ", p->data.jobNo, p->data.name, p->data.sex,p->data.birthday, p->data.degree, p->data.position, p->data.salary,p->data.addr, p->data.tel); p=p->next;}fclose(fp);}//主函數實現 int main() {Node *worker;int flag;worker = (Node*)malloc(sizeof(Node));worker->next = NULL; while(1){printf("\t職 工 信 息 管 理 系 統\n");printf("==================菜 單==================\n ");printf("1.輸入職工信息\n ");printf("2.修改職工信息\n ");printf("3.瀏覽職工信息\n ");printf("4.查詢職工信息\n ");printf("5.刪除職工信息\n ");printf("6.讀取職工信息\n ");printf("0.退出\n ");printf("輸入你選擇的序號:");scanf("%d", &flag);switch (flag){case 0: printf(" \n提示:退出系統!\n "); break;case 1: Add(worker); save(worker); break; //添加職工信息,保存到文件中 case 2: change(worker); break; //修改職工信息 case 3: Disp(worker); break; //顯示職工信息 case 4: Cha_xun(worker); break; //查詢職工信息 case 5: Delete(worker); break; //刪除職工信息 case 6: Du_qu(worker); break; //讀取職工信息 default: printf("提示:輸入錯誤!\n ");}}}代碼模塊解釋:
- 添加信息模塊: void Add( Node *worker )
采用尾插法,先建立鏈表和頭結點,新增加一個節點,輸入職工的所有信息,將新增的節點連接在鏈表的尾端。
修改信息模塊:void change( Node *worker )
找到要修改的職工信息,刪除這一個節點,然后新建一個節點,輸入要修改的信息,并儲存到新的節點中,將新增的節點放在原來刪除節點的位置。
- 顯示輸出模塊:void Disp( Node *worker )
先新建一個指針指向頭結點,判斷指針域是否為空,若為空,輸出“沒有信息可以顯示”;若不為空,則輸出他的指針域所指向的節點儲存的信息,并將指針向后移一個節點,直到P指向空,這樣就輸出了所有的職工信息。
- 查找信息模塊:void Cha_xun( Node *worker )
分為兩種查找方法,按職工號查找和按姓名查找。
按職工號查找: 輸入職工號,先新建一個指針指向頭結點,判斷指針域是否為空,若為空,輸出“沒有資料可以查詢”;若不為空,則判斷他的指針域所指向的節點儲存的職工號是否與輸入的職工號相同,若相同,則輸出該職工所有的信息,并將指針向后移一個節點,再次進行判斷,直到P指向空,這樣就查找輸出了所有匹配的職工信息。
按姓名查找:輸入姓名,先新建一個指針指向頭結點,判斷指針域是否為空,若為空,輸出“沒有資料可以查詢”;若不為空,則判斷他的指針域所指向的節點儲存的職工姓名是否與輸入的職工姓名相同,若相同,則輸出該職工所有的信息,并將指針向后移一個節點,再次進行判斷,直到P指向空,這樣就查找輸出了所有匹配的職工信息。
- 刪除信息模塊:void Delete( Node *worker )
查找到要刪除的職工信息節點,刪除這一個節點,并將它的前驅節點的指針域指向后繼節點。
- 保存職工信息模塊: void save(Node *worker)
新建一個指針指向頭結點,判斷指針域是否為空,若為空,輸出“沒有記錄!”,若不為空, fprintf()格式寫函數 ,將職工信息以%s的格式寫入指針指向的文件中。
- 讀取信息模塊:void Du_qu( Node *worker )
打開文件,fscanf()格式讀函數,以%s 的格式從文件中讀取數據存入節點中。
總結
以上是生活随笔為你收集整理的职工信息管理系统(c语言实现)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: MSMQ(MicroSoft Messa
- 下一篇: CMD命令查看IP地址