职工信息管理系统—C语言工程实践
生活随笔
收集整理的這篇文章主要介紹了
职工信息管理系统—C语言工程实践
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
要求使用文件、鏈表,系統以菜單方式工作。
職工信息包括職工號,姓名,性別,年齡,學歷,工資,住址,電話等(職工號不相等)。試設計一職工信息管理系統,使之能夠提供下列功能:?
系統以菜單方式工作?
職工信息錄入功能(職工信息用文件保存)?
職工信息瀏覽功能?
職工信息查詢功能,查詢方式:?
??????1)按學歷查詢?
??????2)按職工號查詢?
職工信息刪除,插入、修改功能。
基于各種基本數據的統計計算。如:統計職工總人數、本科以上學歷人數等。
要求:
1、盡量不用全局變量
2、函數需要有參數和返回值,個別函數允許無參或者無返回值;
3、文件操作不要頻繁的打開和關閉(參考word操作,打開以后將數據調入內存,完成各種功能后選擇存盤,所有操作結束后才關閉文件)
#include<stdio.h> #include<stdlib.h> #include<string.h> #include<math.h>#define MAX 100//根據職工信息改變 #define A 2021082039 #define B 123456789 #define TRUE 1 #define FALSE 0 #define RED "\033[0;32;31m" //背景顏色 #define NONE "\033[m"typedef struct staff//結構體定義,職工號,姓名,性別,年齡,學歷,工資,地址,電話號碼 {char number[MAX];char name[MAX];char sex[MAX];char year[MAX];char edu[MAX];char money[MAX];char addr[MAX];char phonenum[MAX];struct staff *next; }node;int loge();//用戶登錄 (賬號密碼正確才可以登錄) void menu(node *head2);//菜單 node *Filesave(node *head);//將職工信息保存到文件 int listread(node *head2);//從鏈表進行職工信息瀏覽 void input(node *head2);//函數1職工信息錄入 int Eduserch(node *head2);//職工信息查詢(按照學歷) int Numberserch(node *head2);//職工信息查詢(按照職工號查詢信息) void Modify(node *head2);//修改職工信息(按照工號) int Delete(node *head2);//刪除職工信息(按照職工號) node *Fileread();//讀取文件中職工信息到鏈表中 void View(node *head2);//瀏覽全部員工基本信息 /*1.一共可能打開文件四次,可能打開三次, 一次在inputh函數(可選擇是否保存), 一次在結束系統操作(可選擇是否保存) 一次在修改函數 Modify(可選擇是否保存) 必須打開一次在Fileread函數(為了讀取文件中職工信息) 2.head2是沒有數據的從文件讀取數據到鏈表的鏈表的頭指針 3.設置了登錄系統,其他不知道賬號密碼的人無法登陸操作 4.用了清屏函數system("cls") 5.用了改變顏色函數system("color 30");//控制臺背景淺藍色和printf(RED"密碼錯誤,請重新輸入:\n"NONE);//打印紅色的字體 6.合理運用程序模塊化設計,主函數簡潔 */int main() {node *head=Fileread();//讀取文件中職工信息到鏈表中 ,頭結點無數據 int R=loge();if(R==TRUE){system("cls");//清屏函數<stdlib.h> printf("登陸成功!\n");} menu(head);return 0; }int loge()//用戶登錄 {system("color 30");//控制臺背景淺藍色 int n,m;printf("\t\t\t\t歡迎使用職工信息管理系統!\n");printf("請輸入賬號(10位數字):\n");scanf("%d",&n);printf("請輸入賬號密碼:\n");scanf("%d",&m);while(1) {if(n==A) {if(m==B) return TRUE;else{printf(RED"密碼錯誤,請重新輸入:\n"NONE);//打印紅色的字體 scanf("%d",&m);}} else{printf("賬號不存在!請重新輸入:\n");printf("請輸入賬號(10位數字):\n");scanf("%d",&n);printf("請輸入賬號密碼:\n");scanf("%d",&m);}}return FALSE;} int select()//功能選擇 {system("color 30");//控制臺背景淺藍色 int n;printf("---------------------------------------\n");printf("|選項: | 對應選項功能 |\n");printf("---------------------------------------\n");printf("|選擇1:| 職工信息錄入 |\n");printf("---------------------------------------\n");printf("|選擇2:| 職工信息瀏覽 |\n"); printf("---------------------------------------\n");printf("|選擇3:|職工信息查詢(按照學歷查詢) |\n");printf("---------------------------------------\n"); printf("|選擇4:|職工信息查詢(按照職工號查詢) |\n");printf("---------------------------------------\n");printf("|選擇5:| 職工信息刪除 |\n");printf("---------------------------------------\n");printf("|選擇6:| 職工信息修改 |\n");printf("---------------------------------------\n");printf("|選擇0:| 退出職工系統 |\n");printf("---------------------------------------\n");printf("請您輸入選擇:");scanf("%d",&n);while(n<0||n>7){printf("無此選項,請重新輸入:\n");scanf("%d",&n);}return n;}node *Fileread()//讀取文件中職工信息到鏈表中 {FILE *fp;node *p,*pre,*tail,*head;head=(node *)malloc(sizeof(node));tail = pre=head;fp=fopen("work.txt","r");if(fp==NULL){printf("文件打開失敗!!!");exit(0);}p=(node *)malloc(sizeof(node));p->next=NULL;head->next=NULL;while(fscanf(fp,"%s %s %s %s %s %s %s %s\n",p->number,p->name,p->sex,p->year,p->edu,p->money,p->addr,p->phonenum)!=EOF){pre = tail;tail->next=p;tail=p;p=(node *)malloc(sizeof(node));p->next=NULL;}fclose(fp);return head; }void menu(node *head2)//菜單 {system("cls");//清屏操作printf("\t\t\t\t歡迎使用職工信息管理系統!\n"); int m=select();switch(m){case 1:printf("選擇1:職工信息錄入\n");system("cls");//清屏操作input(head2);//輸入職工信息并保存到文件 break;case 2:printf("選擇2:職工信息瀏覽\n");system("cls");//清屏操作 listread(head2);//瀏覽全部職工信息 break;case 3:printf("選擇3:職工信息查詢(按照學歷查詢)\n");system("cls");//清屏操作Eduserch(head2);//職工信息查詢(按照學歷)break;case 4: printf("選擇4:職工信息查詢(按照職工號查詢)\n");system("cls");//清屏操作Numberserch(head2);break;case 5:printf("選擇5:職工信息刪除\n");system("cls");//清屏操作Delete(head2);//刪除職工信息(按照職工號)break;case 6:printf("選擇6:職工信息修改\n");system("cls");//清屏操作Modify(head2);//修改職工信息 break;case 0:printf("選擇0:退出職工系統\n");system("cls");//清屏操作 Filesave(head2);printf("\n\n\n\t\t\t\t感謝您的使用,歡迎再次光臨!\n\n\n");printf("\n\n\n\t\t\t\t感謝您的使用,歡迎再次光臨!\n\n\n");getchar();//清除\n getchar();exit(0); }}void input(node *head2)//輸入職工信息 {system("cls");//清屏操作int i=1;node *p, *q;char n[10],s[10]; q = head2; while (q->next != NULL){q = q->next; }while (1){printf("提示:輸入0返回主菜單!輸入1繼續添加!\n");printf("請輸入選擇:");scanf("%s", n);if (strcmp(n, "0") == 0){Filesave(head2);printf("返回主菜單\n");menu(head2); }if(strcmp(n, "1") == 0){p = (node *)malloc(sizeof(node));printf("請輸入職工號:");scanf("%s", p->number);printf("請輸入姓名:");scanf("%s", p->name);printf("請輸入性別(男(M)女(W)):");scanf("%s", s);while(strcmp(s,"M")!=0&&strcmp(s,"W")!=0){printf("輸入錯誤,請重新輸入職工性別!\n");scanf("%s",s);}if(strcmp(s,"M")==0||strcmp(s,"W")==0){strcpy(p->sex,s);}printf("請輸入出生年月:");scanf("%s", p->year);printf("請輸入學歷:");scanf("%s", p->edu);printf("請輸入工資:");scanf("%s", p->money);printf("請輸入住址:");scanf("%s", p->addr);printf("請輸入電話:");scanf("%s", p->phonenum);printf("提示:已經完成第%d個職工信息的添加!",i++);p->next = NULL;q->next = p; q = p; }} }int Eduserch(node *head2)//查找職工信息(按照學歷) {system("cls");//清屏操作printf("尊敬的用戶,歡迎查找職工的信息(按照學歷查找)!\n");char edu[MAX];printf("請輸入你想查找的職工的學歷:");scanf("%s",edu);node *head;head=head2;node *p;if(head->next==NULL){printf("此系統中無記錄!\n");exit(0);}printf("職工號\t姓名\t性別\t出生時間\t學歷\t工資\t\t地址\t\t電話號碼\n");for(p=head->next;p!=NULL;p=p->next)if(strcmp(p->edu,edu)==0)printf("%s\t%s\t%s\t%s\t%s\t%s\t\t%s\t\t%s\n",p->number,p->name,p->sex,p->year,p->edu,p->money,p->addr,p->phonenum);int m;printf("返回上一級菜單輸入1,結束請輸入0!\n");scanf("%d",&m);if(m==1){printf("返回主菜單!\n");menu(head); } if(m==0){printf("結束操作!\n");exit(0);}return 0; }int Numberserch(node *head2)//查找職工信息(按照職工職工號查找) {system("cls");//清屏操作printf("尊敬的用戶,歡迎查找職工的信息(按照職工號查找)!\n");char number[MAX];printf("請輸入你想查找的職工的職工號:");scanf("%s",number);node *head;head=head2;node *p;if(head->next==NULL){printf("此系統中無記錄!\n");exit(0);}printf("職工號\t姓名\t性別\t出生時間\t學歷\t工資\t\t地址\t\t電話號碼\n");for(p=head->next;p!=NULL;p=p->next)if(strcmp(p->number,number)==0)printf("%s\t%s\t%s\t%s\t%s\t%s\t\t%s\t\t%s\n",p->number,p->name,p->sex,p->year,p->edu,p->money,p->addr,p->phonenum);int m;printf("返回上一級菜單輸入1,結束請輸入0!\n");scanf("%d",&m);if(m==1){printf("返回主菜單!\n");menu(head); } if(m==0){printf("結束操作!\n");exit(0);}return 0; }void Modify(node *head2)//修改職工信息(按照工號) {char s[100];node *head=head2;node *p = head->next;char number[MAX]; if (head == NULL){printf("此系統為空!\n");menu(head);exit(0);}printf("請輸入要修改職工的職工號:\n");scanf("%s",number);while ((strcmp(p->number,number)!=0 )&& p!= NULL){p =p->next;}if (strcmp(p->number,number)==0){printf("\t\t\t請輸入需要修改的信息\n");printf("職工職工號:");scanf("%s",p->number);printf("職工姓名:");scanf("%s",p->name);printf("請輸入性別(男(M)女(W)):");scanf("%s", s);while(strcmp(s,"M")!=0&&strcmp(s,"W")!=0){printf("輸入錯誤,請重新輸入職工性別!\n");scanf("%s",s);}if(strcmp(s,"M")==0||strcmp(s,"W")==0){strcpy(p->sex,s);}printf("職工出生時間:");scanf("%s",p->year);printf("職工學歷:");scanf("%s",p->edu);printf("職工工資:");scanf("%s",p->money);printf("職工地址:");scanf("%s",p->addr);printf("職工電話:");scanf("%s",p->phonenum);}printf("修改成功");head=Filesave(head);int m;printf("返回上一級菜單輸入1,結束請輸入0!\n");scanf("%d",&m);if(m==1){printf("返回主菜單!\n");menu(head); } if(m==0){printf("結束操作!\n");exit(0);} }int Delete(node *head2)//刪除職工信息(按照職工號) {node *head;head=head2;char number[MAX]; //先查找 后刪除node *p = head->next, *p1 =head->next,*p2;if (head == NULL){printf("此通訊錄為空!\n");printf("返回主菜單!\n");menu(head);return 0;}printf("請輸入要刪除職工的職工號:\n");scanf("%s",number);while ((strcmp(p->number,number)!=0 )&& p!= NULL){p1=p;p =p->next;}if (strcmp(number, p->number)==0) //輸出刪除信息{if (p == head->next&&p!=NULL)head->next = p->next;else if(p==head->next&&p->next==NULL){head->next=p->next;printf("信息已刪除,先此通訊錄為空!!\n");return 0;}elsep1->next = p->next;}else{printf("此信息不存在!!!\n");return 0;}printf("此信息已刪除!\n");for(p2=head;p2!=NULL;p2=p2->next)//打印刪除職工的基本信息 printf("%s\t%s\t%s\t%s\t%s\t%s\t\t%s\t\t%s\n",p->number,p->name,p->sex,p->year,p->edu,p->money,p->addr,p->phonenum); printf("返回上一級菜單輸入1,結束請輸入0!\n");int m;scanf("%d",&m);if(m==1) {printf("返回主菜單!\n");menu(head2); } if(m==0){printf("結束操作!\n");exit(0);}return 0; }node *Filesave(node *head2)// 將職工信息保存到文件 {node *p=head2->next;FILE *fp;int n;printf("是否想要保存到文件?是請輸入1,否則輸入0.\n");scanf("%d",&n);if(n==1){fp=fopen("work.txt","w");if(fp==NULL){printf("File can not be opened\n");exit(0);}while(p!=NULL){fprintf(fp,"%s %s %s %s %s %s %s %s\n",p->number,p->name,p->sex,p->year,p->edu,p->money,p->addr,p->phonenum);p=p->next;}fclose(fp);return head2;}elsereturn 0; }int listread(node *head2)//讀取鏈表中職工信息 {node *head;head=head2;node *p;if(head->next==NULL){printf("此系統中無記錄!自動返回主菜單\n");menu(head); exit(0);}printf("尊敬的用戶,歡迎瀏覽職工的基本信息!\n");printf("職工號\t姓名\t性別\t出生時間\t學歷\t工資\t\t地址\t\t電話號碼\n");for(p=head->next;p!=NULL;p=p->next)printf("%s\t%s\t%s\t%s\t%s\t%s\t\t%s\t\t%s\n",p->number,p->name,p->sex,p->year,p->edu,p->money,p->addr,p->phonenum);int m;printf("返回上一級菜單輸入1,結束請輸入0!\n");scanf("%d",&m);if(m==1){printf("返回主菜單!\n");menu(head); } if(m==0){printf("結束操作!\n");exit(0);}return 0; }總結
以上是生活随笔為你收集整理的职工信息管理系统—C语言工程实践的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 看了交大自产的电影《我的太阳》
- 下一篇: SimpleAdapter类使用方法