C語言員工信息管理系統(tǒng)源代碼
更新時(shí)間:2020年12月27日 12:42:26 投稿:daisy
這篇文章主要為大家詳細(xì)介紹了C語言員工信息管理系統(tǒng)源代碼,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
今天分享: C語言員工信息管理系統(tǒng)源代碼,供大家參考,具體內(nèi)容如下
/******************************************************************************* * 文件名:UI.Cpp * * * * 文件功能: 該文件主要是定義(實(shí)現(xiàn))和用戶操作有關(guān)的一些函數(shù),之所以把和用戶 * * 操作有關(guān)的函數(shù)單獨(dú)放到ui.c中,是為了使程序結(jié)構(gòu)更加清晰,源代碼更 * * 容易管理,這也是遵循結(jié)構(gòu)化程序設(shè)計(jì)的要求(模塊化、層次化) * * * * 作者: * * * *******************************************************************************/ #include <stdio.h> #include <stdlib.h> #include <string.h> #include "ui.h" //選擇身份 void UserOperateChoose(ListType L) { int option = 0; do { //提示用戶操作選擇 PrintOptionChoose( ); scanf("%d", &option ); //根據(jù)用戶選擇調(diào)用相關(guān)函數(shù)完成指定的操作 switch(option ) { //添加一個(gè)員工 /* case 1: UserOperateOne(L); break;*/ //刪除員工 /* case 2: DelStu(L); break; //修改員工 case 3: ModifyStu(L); break; */ //查詢某個(gè)員工 case 1: UserOperatemanager(L); break; //排序 /* case 3: UserOperateThree(L); break;*/ //打印所有員工信息 case 2: UserOperateVisitor(L); break; default: break; } }while(option ); //程序退出時(shí),顯示BYEBYE PrintHello( ); } //該函數(shù)根據(jù)管理員的選擇,完成指定的操作 void UserOperateVisitor(ListType L) { int option = 0; //顯示歡迎信息 do { //提示用戶操作選擇 PrintOptionVisitor( ); scanf("%d", &option ); //根據(jù)用戶選擇調(diào)用相關(guān)函數(shù)完成指定的操作 switch(option ) { //添加一個(gè)員工 /* case 1: UserOperateOne(L); break;*/ //刪除員工 /* case 2: DelStu(L); break; //修改員工 case 3: ModifyStu(L); break; */ //查詢某個(gè)員工 case 1: UserOperateTwo(L); break; //排序 /* case 3: UserOperateThree(L); break;*/ //打印所有員工信息 case 2: PrntAll(L); break; default: break; } }while(option ); //程序退出時(shí),顯示BYEBYE } //該函數(shù)根據(jù)管理員的選擇,完成指定的操作 void UserOperatemanager(ListType L) { int option = 0; //用密碼進(jìn)入系統(tǒng) password(); do { //提示用戶操作選擇 PrintOption( ); scanf("%d", &option ); //根據(jù)用戶選擇調(diào)用相關(guān)函數(shù)完成指定的操作 switch(option ) { //添加一個(gè)員工 case 1: UserOperateOne(L); break; //刪除員工 /* case 2: DelStu(L); break; //修改員工 case 3: ModifyStu(L); break; */ //查詢某個(gè)員工 case 2: UserOperateTwo(L); break; //排序 case 3: UserOperateThree(L); break; //打印所有員工信息 case 4: PrntAll(L); break; default: break; } }while(option ); //程序退出時(shí),顯示BYEBYE } //該函數(shù)為基本操作的二級菜單,完成指定的操作 void UserOperateOne(ListType L) { int option = 0; do { //提示用戶操作選擇 PrintOptionOne( ); scanf("%d", &option ); //根據(jù)用戶選擇調(diào)用相關(guān)函數(shù)完成指定的操作 switch(option ) { //添加一個(gè)員工 case 1: AddStu(L); break; //刪除員工 case 2: DelStu(L); break; //修改員工 case 3: ModifyStu(L); break; //返回上級菜單 case 0: return; break; /* //查詢某個(gè)員工 case 5: chkStuname(L); break; //打印所有員工信息 case 6: PrntAll(L); break; //按ID號排序 case 7: sortbyID(L); break; case 8: //按姓名排序 sortbyname(L); break; case 9: //按部門分類顯示信息 sortbyoffice(L); break;*/ default: break; } }while(option ); //程序退出時(shí),顯示BYEBYE //PrintHello( ); } //該函數(shù)為基本操作的第二個(gè)二級菜單,完成指定的操作 void UserOperateTwo(ListType L) { int option = 0; do { //提示用戶操作選擇 PrintOptionTwo( ); scanf("%d", &option ); //根據(jù)用戶選擇調(diào)用相關(guān)函數(shù)完成指定的操作 switch(option ) { //查詢某個(gè)員工 case 1: chkStu(L); break; //查詢某個(gè)員工 case 2: chkStuname(L); break; //返回上級菜單 case 0: return; break; /* //查詢某個(gè)員工 case 5: chkStuname(L); break; //打印所有員工信息 case 6: PrntAll(L); break; //按ID號排序 case 7: sortbyID(L); break; case 8: //按姓名排序 sortbyname(L); break; case 9: //按部門分類顯示信息 sortbyoffice(L); break;*/ default: break; } }while(option ); //程序退出時(shí),顯示BYEBYE //PrintHello( ); } //該函數(shù)為基本操作的第三個(gè)二級菜單,完成指定的操作 void UserOperateThree(ListType L) { int option = 0; do { //提示用戶操作選擇 PrintOptionThree( ); scanf("%d", &option ); //根據(jù)用戶選擇調(diào)用相關(guān)函數(shù)完成指定的操作 switch(option ) { //按ID號排序 case 1: sortbyID(L); break; case 2: //按姓名排序 sortbyname(L); break; case 3: //按部門分類顯示信息 sortbyoffice(L); break; //按性別排序顯示信息 case 4: sortbysex(L); break; //按年齡排序顯示信息 case 5: sortbyage(L); break; //按電話排序顯示信息 case 6: sortbyphone( L); break; //按地址排序顯示信息 case 7: sortbyaddress( L); break; //按工資排序顯示信息 case 8: sortbypay( L); break; //按電子郵件排序顯示信息 case 9: sortbyemil( L); break; //返回上級菜單 case 0: return; break; /* //查詢某個(gè)員工 case 5: chkStuname(L); break; //打印所有員工信息 case 6: PrntAll(L); break; //按ID號排序 case 7: sortbyID(L); break; case 8: //按姓名排序 sortbyname(L); break; case 9: //按部門分類顯示信息 sortbyoffice(L); break;*/ default: break; } }while(option ); //程序退出時(shí),顯示BYEBYE //PrintHello( ); } /* 用戶操作界面啟動時(shí),在顯示器上顯示一些歡迎信息 */ void PrintWelcome( ) { puts(" "); puts("********************************************************************" ); puts(" 歡迎使用員工管理系統(tǒng)!" ); puts("********************************************************************" ); puts(" 若有有問題請?jiān)诹粞詤^(qū)交流"); puts("********************************************************************" ); } /* 在顯示器上顯示用戶可以進(jìn)行的操作,以及操作的方法 */ void PrintOption( ) { puts(" "); puts("請選擇操作:" ); puts("0:返回 " ); puts("1:進(jìn)入基本操作菜單"); puts("2:進(jìn)入員工查詢系統(tǒng)"); puts("3:進(jìn)入信息排序系統(tǒng)"); puts("4:打印員工信息"); } //選擇身份 void PrintOptionChoose( ) { puts(" "); puts("請選擇身份:" ); puts("0:退出系統(tǒng) " ); puts("1:以管理員身份進(jìn)入 " ); puts("2:以游客身份進(jìn)入 " ); } //顯示第一個(gè)二級的提示信息 void PrintOptionOne( ) { puts(" "); puts("請選擇操作:" ); puts("0:返回 " ); puts("1:添加員工 2:刪除員工 3:修改員工信息" ); } //顯示第二個(gè)二級的提示信息 void PrintOptionTwo( ) { puts(" "); puts("請選擇操作:" ); puts("0:返回 " ); puts("1:按員工ID號查詢 2:按員工姓名查詢" ); } //顯示第三個(gè)二級的提示信息 void PrintOptionThree( ) { puts(" "); puts("請選擇操作:" ); puts("0:返回 " ); puts("1:按ID號排序顯示信息 2:按姓名排序顯示信息 3:按部門分類顯示信息"); puts("4:按性別排序顯示信息 5:按年齡排序顯示信息 6:按電話排序顯示信息"); puts("7:按地址排序顯示信息 8:按工資排序顯示信息 9:按電子郵件排序顯示信息"); } //顯示游客查詢系統(tǒng) void PrintOptionVisitor( ) { puts(" "); puts("請選擇操作:" ); puts("0:返回 " ); puts("1:進(jìn)入員工查詢系統(tǒng)"); puts("2:打印員工信息"); } /* 程序退出時(shí),在顯示器上顯示一些感謝語言,以給使用者一個(gè)好印象 */ void PrintHello( ) { puts("********************************************************************" ); puts(" 謝謝使用員工管理系統(tǒng),再見!" ); puts("********************************************************************" ); puts(" "); } //比較兩個(gè)員工信息的學(xué)號是否相等 //若相等則返回TRUE,否則返回FALSE //當(dāng)調(diào)用線性表操作函數(shù)int LocateElem(ListType L, ElemType e, STATUS (*compare)(ElemType e1, ElemType e2) //的時(shí)候,將該函數(shù)名作為第三個(gè)參數(shù)傳遞給compare STATUS IsEqual(ElemType e1, ElemType e2 ) { if( strcmp(e1.ID, e2.ID)==0 ) return TRUE; return FALSE; } STATUS IsEqual2(ElemType e1, ElemType e2 ) { if( strcmp(e1.name, e2.name)==0 ) return TRUE; return FALSE; } //往線性表中添加一個(gè)員工 void AddStu(ListType L) { ElemType stu; printf("請輸入員工的ID號(不超過15位):" ); getchar(); //吃掉前面的回車鍵,否則后面的字符串輸入時(shí)會出錯 gets(stu.ID ); printf("請輸入員工的姓名(不超過15位):" ); gets(stu.name ); printf("請輸入員工的性別(輸入M/W):" ); stu.sex=getchar(); printf("請輸入員工的年齡:" ); scanf("%d",&stu.age); printf("請輸入員工的電話(不超過20位):" ); getchar(); //吃掉前面的回車鍵,否則后面的字符串輸入時(shí)會出錯 gets(stu.phone); printf("請輸入員工的地址(不超過100位):" ); gets(stu.address); printf("請輸入員工的電子郵件(不超過50位):" ); gets(stu.email); printf("請輸入員工的工資(不超過10位):" ); gets(stu.pay); printf("請輸入員工的工齡:" ); scanf("%d",&stu.workingyears); getchar(); //吃掉前面的回車鍵,否則后面的字符串輸入時(shí)會出錯 printf("請輸入員工的所在部門(不超過100位):" ); gets(stu.office); //判斷線性表中是否已經(jīng)存在該ID號的員工,如果已經(jīng)存在,則放棄插入操作 if( LocateElem(L, stu, IsEqual) ) { puts("操作失敗,該員工已經(jīng)存在" ); return ; } //將該學(xué)生放入線性表中 //為簡單起見,我們把新添加的結(jié)點(diǎn)放到線性表的前面 if( ListInsert(L, 1, stu ) ) puts("操作成功" ); else puts("操作失敗" ); } //從線性表中刪除一個(gè)員工,根據(jù)員工的ID號決定刪除哪個(gè)員工 void DelStu(ListType L) { ElemType stu; int pos; printf("請輸入員工的ID號(不超過15位):" ); getchar(); //吃掉前面的回車鍵,否則后面的字符串輸入時(shí)會出錯 gets(stu.ID ); pos = LocateElem(L, stu, IsEqual ); //如果存在該ID號的V,則返回其在線性表中的位序,如果不存在返回0 if(pos ) { if(ListDelete(L, pos, stu) ) { puts("操作成功"); return; } } puts("操作失敗" ); } //修改員工成績,根據(jù)ID號決定修改哪個(gè)員工的成績 void ModifyStu(ListType L) { int pos; ElemType stu; printf("請輸入員工的ID號(不超過15位):" ); getchar(); //吃掉前面的回車鍵,否則后面的字符串輸入時(shí)會出錯 gets(stu.ID ); printf("請輸入員工的姓名(不超過15位):" ); gets(stu.name ); printf("請輸入員工的性別(輸入M/W):" ); scanf("%c",&stu.sex); printf("請輸入員工的年齡:" ); scanf("%d",&stu.age); printf("請輸入員工的電話(不超過20位):" ); getchar(); //吃掉前面的回車鍵,否則后面的字符串輸入時(shí)會出錯 gets(stu.phone); printf("請輸入員工的地址(不超過100位):" ); gets(stu.address); printf("請輸入員工的電子郵件(不超過50位):" ); gets(stu.email); printf("請輸入員工的工資(不超過10位):" ); gets(stu.pay); printf("請輸入員工的工齡:" ); scanf("%d",&stu.workingyears); getchar(); //吃掉前面的回車鍵,否則后面的字符串輸入時(shí)會出錯 printf("請輸入員工的所在部門:" ); gets(stu.office); pos = LocateElem(L, stu, IsEqual ); if(pos > 0 ) { ListModify(L, pos, stu ); puts("操作成功" ); } else { puts("操作失敗" ); } } //根據(jù)學(xué)號查詢某個(gè)員工的成績 void chkStu(ListType L) { int pos; ElemType stu; printf("請輸入員工的ID號(不超過15位):" ); getchar(); //吃掉前面的回車鍵,否則后面的字符串輸入時(shí)會出錯 gets(stu.ID ); if(pos = LocateElem(L, stu, IsEqual) ) { GetElem(L, pos, stu ); PrntOneStu(stu ); } else { puts("操作失敗" ); } } //根據(jù)姓氏查詢某個(gè)員工的成績 void chkStuname(ListType L) { int pos; ElemType stu; printf("請輸入員工的姓氏(不超過15位):" ); getchar(); //吃掉前面的回車鍵,否則后面的字符串輸入時(shí)會出錯 gets(stu.name); if(pos = LocateElem(L, stu, IsEqual2) ) { GetElem(L, pos, stu ); PrntOneStu(stu ); } else { puts("操作失敗" ); } } //成績統(tǒng)計(jì),統(tǒng)計(jì)全體員工的平均成績 /*void StateScore(ListType L) { float total[2] = {0.0, 0.0}; int num = 0; ElemType e; while(GetElem(L, num+1, e ) ) //GetElem(...)返回值為FALSE時(shí)說明沒有位序?yàn)閚um+1的數(shù)據(jù) { num++; total[0] += e.score[0]; total[1] += e.score[1]; } if(num > 0 ) { printf("平均成績分別為:%.2f, %.2f\n", total[0]/num, total[1]/num ); } else { puts("沒有數(shù)據(jù)信息" ); } }*/ //打印一個(gè)員工的信息 //調(diào)用ListTraverse()函數(shù)的時(shí)候,將該函數(shù)的名字作為第二個(gè)參數(shù)傳遞給visit STATUS PrntOneStu(ElemType stu ) { printf("ID號:%s 姓名:%s 性別:%c 年齡:%d 電話:%s 地址:%s 電子郵件:%s 工資:%s 工齡:%d 所在部門:%s\n", stu.ID, stu.name, stu.sex,stu.age,stu.phone,stu.address, stu.email,stu.pay, stu.workingyears ,stu.office); return OK; } //打印所有學(xué)生信息 void PrntAll(ListType L) { ListTraverse(L, PrntOneStu ); } //用于做新的鏈表 //按ID排序 void sortbyID(struct lnode *head) { struct lnode *p1,*p2,*l; l=(struct lnode *)malloc(sizeof(struct lnode)); l->next=NULL; for (p1=head;p1->next!=NULL;p1=p1->next) { for (p2=p1->next;p2!=NULL;p2=p2->next) { if (strcmp(p1->data.ID,p2->data.ID)==-1) { l->data=p1->data; p1->data=p2->data; p2->data=l->data; } } } printf("降序排序成功\n"); PrntAll(head); } //按姓名排序 void sortbyname(struct lnode *head) { struct lnode *p1,*p2,*l; l=(struct lnode *)malloc(sizeof(struct lnode)); l->next=NULL; for (p1=head;p1->next!=NULL;p1=p1->next) { for (p2=p1->next;p2!=NULL;p2=p2->next) { if (strcmp(p1->data.name,p2->data.name)==-1) { l->data=p1->data; p1->data=p2->data; p2->data=l->data; } } } printf("降序排序成功\n"); PrntAll(head); } //按性別分類顯示信息 void sortbysex(struct lnode *head) { struct lnode *p1,*p2,*l; l=(struct lnode *)malloc(sizeof(struct lnode)); l->next=NULL; for (p1=head;p1->next!=NULL;p1=p1->next) { for (p2=p1->next;p2!=NULL;p2=p2->next) { if (p1->data.sex>p2->data.sex) { l->data=p1->data; p1->data=p2->data; p2->data=l->data; } } } PrntAll(head); } //按年齡分類顯示信息 void sortbyage(struct lnode *head) { struct lnode *p1,*p2,*l; l=(struct lnode *)malloc(sizeof(struct lnode)); l->next=NULL; for (p1=head;p1->next!=NULL;p1=p1->next) { for (p2=p1->next;p2!=NULL;p2=p2->next) { if (p1->data.age>p2->data.age) { l->data=p1->data; p1->data=p2->data; p2->data=l->data; } } } PrntAll(head); } //按電話分類顯示信息 void sortbyphone(struct lnode *head) { struct lnode *p1,*p2,*l; l=(struct lnode *)malloc(sizeof(struct lnode)); l->next=NULL; for (p1=head;p1->next!=NULL;p1=p1->next) { for (p2=p1->next;p2!=NULL;p2=p2->next) { if (strcmp(p1->data.phone,p2->data.phone)==-1) { l->data=p1->data; p1->data=p2->data; p2->data=l->data; } } } PrntAll(head); } //按地址分類顯示信息 void sortbyaddress(struct lnode *head) { struct lnode *p1,*p2,*l; l=(struct lnode *)malloc(sizeof(struct lnode)); l->next=NULL; for (p1=head;p1->next!=NULL;p1=p1->next) { for (p2=p1->next;p2!=NULL;p2=p2->next) { if (strcmp(p1->data.address,p2->data.address)==-1) { l->data=p1->data; p1->data=p2->data; p2->data=l->data; } } } PrntAll(head); } //按工資分類顯示信息 void sortbypay(struct lnode *head) { struct lnode *p1,*p2,*l; l=(struct lnode *)malloc(sizeof(struct lnode)); l->next=NULL; for (p1=head;p1->next!=NULL;p1=p1->next) { for (p2=p1->next;p2!=NULL;p2=p2->next) { if (strcmp(p1->data.pay,p2->data.pay)==-1) { l->data=p1->data; p1->data=p2->data; p2->data=l->data; } } } PrntAll(head); } //按郵件地址分類顯示信息 void sortbyemil(struct lnode *head) { struct lnode *p1,*p2,*l; l=(struct lnode *)malloc(sizeof(struct lnode)); l->next=NULL; for (p1=head;p1->next!=NULL;p1=p1->next) { for (p2=p1->next;p2!=NULL;p2=p2->next) { if (strcmp(p1->data.email,p2->data.email)==-1) { l->data=p1->data; p1->data=p2->data; p2->data=l->data; } } } PrntAll(head); } //按部門分類顯示信息 void sortbyoffice(struct lnode *head) { struct lnode *p1,*p2,*l; l=(struct lnode *)malloc(sizeof(struct lnode)); l->next=NULL; for (p1=head;p1->next!=NULL;p1=p1->next) { for (p2=p1->next;p2!=NULL;p2=p2->next) { if (strcmp(p1->data.office,p2->data.office)==-1) { l->data=p1->data; p1->data=p2->data; p2->data=l->data; } } } PrntAll(head); } //按密碼進(jìn)入系統(tǒng) void password() { char password[7]="123456"; int choice; char s[7]; int flag=0; int n=3; do { printf("請你輸入密碼:\n"); scanf("%s",s); if(strcmp(s,password)==0)//若密碼正確 { printf("恭喜你成功登陸了\n\n\n"); flag=1; break; } else { printf("輸入有錯誤請重新輸入:\n"); n--; } }while(n>0); if(!flag) { printf("哈哈,O(∩_∩)O哈!,想暴力破解是行不通的\n"); puts("若有有問題留言區(qū)交流"); exit(0); } }
以上就是本文的全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
您可能感興趣的文章:
相關(guān)文章
C語言實(shí)現(xiàn)飛機(jī)大戰(zhàn)小游戲完整代碼
大家好,本篇文章主要講的是C語言實(shí)現(xiàn)飛機(jī)大戰(zhàn)小游戲完整代碼,感興趣的同學(xué)趕快來看一看吧,對你有幫助的話記得收藏一下2022-01-01C++知識點(diǎn)之成員函數(shù)中const的用法
這篇文章主要介紹了C++知識點(diǎn)之成員函數(shù)中const的用法,具有很好的參考價(jià)值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2022-11-11