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