职工信息管理系统
/************************************************************ 版權所有(C)2017. zangyunpeng
*
* 文件名稱:職工信息管理系統
* 文件標識:無
* 內容摘要:該代碼用于函數聲明及結構體構建
* 其它說明:無
* 當前版本: V1.0
* 作 者:臧云鵬
* 完成日期: 2017 12 22
*
*修改記錄1:
*修改日期: 2017 12 22
*版本號 V1.0
*修改人: zangyunpeng
*
**********************************************************/
6 塊 。 ? 職 工 信 息 管 理 系 統 職 工 信 息 包 括 職 工 號 、 姓 名 、 性 別 、 年 齡 、 學 歷 、 工 資 、 住 址 、 電 話 等 ( 職 工 號 不 重 復 ) 。 設 計 一 個 職 工 信 息 管 理 系 統 , 使 之 能 提 供 以 下 功 能 : ( 1 ) 系 統 以 菜 單 方 式 工 作 ( 2 ) 職 工 信 息 錄 入 功 能 ( 職 工 信 息 用 文 件 保 存 ) - - 輸 入 ( 3 ) 職 工 信 息 瀏 覽 功 能 - - 輸 出 , 包 括 在 退 出 系 統 時 , 將 數 據 保 存 到 文 件 ( 4 ) 查 詢 和 排 序 功 能 : 按 工 資 查 詢 按 學 歷 查 詢 等
課程設計要求:
6 塊 。 ? 職 工 信 息 管 理 系 統 職 工 信 息 包 括 職 工 號 、 姓 名 、 性 別 、 年 齡 、 學 歷 、 工 資 、 住 址 、 電 話 等 ( 職 工 號 不 重 復 ) 。 設 計 一 個 職 工 信 息 管 理 系 統 , 使 之 能 提 供 以 下 功 能 : ( 1 ) 系 統 以 菜 單 方 式 工 作 ( 2 ) 職 工 信 息 錄 入 功 能 ( 職 工 信 息 用 文 件 保 存 ) - - 輸 入 ( 3 ) 職 工 信 息 瀏 覽 功 能 - - 輸 出 , 包 括 在 退 出 系 統 時 , 將 數 據 保 存 到 文 件 ( 4 ) 查 詢 和 排 序 功 能 : 按 工 資 查 詢 按 學 歷 查 詢 等 6 塊 。 ? 職 工 信 息 管 理 系 統 職 工 信 息 包 括 職 工 號 、 姓 名 、 性 別 、 年 齡 、 學 歷 、 工 資 、 住 址 、 電 話 等 ( 職 工 號 不 重 復 ) 。 設 計 一 個 職 工 信 息 管 理 系 統 , 使 之 能 提 供 以 下 功 能 : ( 1 ) 系 統 以 菜 單 方 式 工 作 ( 2 ) 職 工 信 息 錄 入 功 能 ( 職 工 信 息 用 文 件 保 存 ) - - 輸 入 ( 3 ) 職 工 信 息 瀏 覽 功 能 - - 輸 出 , 包 括 在 退 出 系 統 時 , 將 數 據 保 存 到 文 件 ( 4 ) 查 詢 和 排 序 功 能 : 按 工 資 查 詢 按 學 歷 查 詢 等 6 塊 。 ? 職 工 信 息 管 理 系 統 職 工 信 息 包 括 職 工 號 、 姓 名 、 性 別 、 年 齡 、 學 歷 、 工 資 、 住 址 、 電 話 等 ( 職 工 號 不 重 復 ) 。 設 計 一 個 職 工 信 息 管 理 系 統 , 使 之 能 提 供 以 下 功 能 : ( 1 ) 系 統 以 菜 單 方 式 工 作 ( 2 ) 職 工 信 息 錄 入 功 能 ( 職 工 信 息 用 文 件 保 存 ) - - 輸 入 ( 3 ) 職 工 信 息 瀏 覽 功 能 - - 輸 出 , 包 括 在 退 出 系 統 時 , 將 數 據 保 存 到 文 件 ( 4 ) 查 詢 和 排 序 功 能 : 按 工 資 查 詢 按 學 歷 查 詢 等 職工信息管理系統職工信息包括職工號、姓名、性別、年齡、學歷、工資、住址、電話等(職工號不重復)。設計一個職工信息管理系統,使之能提供以下功能:(1)系統以菜單方式工作(2)職工信息錄入功能(職工信息用文件保存)--輸入(3)職工信息瀏覽功能--輸出,包括在退出系統時,將數據保存到文件(4)查詢和排序功能:按工資查詢按學歷查詢等6 塊 。 ? 職 工 信 息 管 理 系 統 職 工 信 息 包 括 職 工 號 、 姓 名 、 性 別 、 年 齡 、 學 歷 、 工 資 、 住 址 、 電 話 等 ( 職 工 號 不 重 復 ) 。 設 計 一 個 職 工 信 息 管 理 系 統 , 使 之 能 提 供 以 下 功 能 : ( 1 ) 系 統 以 菜 單 方 式 工 作 ( 2 ) 職 工 信 息 錄 入 功 能 ( 職 工 信 息 用 文 件 保 存 ) - - 輸 入 ( 3 ) 職 工 信 息 瀏 覽 功 能 - - 輸 出 , 包 括 在 退 出 系 統 時 , 將 數 據 保 存 到 文 件 ( 4 ) 查 詢 和 排 序 功 能 : 按 工 資 查 詢 按 學 歷 查 詢 等
實現源代碼如下:
1.source.cpp
#include<stdio.h> #include<stdlib.h> #include<string.h> #include"head.h"/*************************************************************************************** *功能描述:菜單函數 *輸入參數:無 *輸出參數:無 *返回值:1***************************************************************************************/ void menu() {system("color 6E");printf("\t◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆\n");printf("\t◆ 歡迎使用職工信息管理系統 ◆\n");printf("\t◆ ◆\n");printf("\t◆ 【菜單】 ◆\n");printf("\t◆ 1.錄入職工信息 ◆\n");printf("\t◆ 2.查詢職工信息 ◆\n");printf("\t◆ 3.職工信息排序 ◆\n");printf("\t◆ 4.插入職工信息 ◆\n");printf("\t◆ 5.瀏覽職工信息 ◆\n");printf("\t◆ 6.修改職工信息 ◆\n");printf("\t◆ 7.刪除職工信息 ◆\n");printf("\t◆ 8.保存職工信息 ◆\n");printf("\t◆ 【9】退出系統 ◆\n");printf("\t◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆\n"); } /*************************************************************************************** *功能描述:初始化單鏈表 *輸入參數:無 *輸出參數:無 *返回值:1***************************************************************************************/ int Initlist(Linklist *L) //初始化單鏈表 {*L=(Linklist )malloc(sizeof(LNode));if((*L)==NULL)return (0);(*L)->next=NULL;return OK; }/*************************************************************************************** *功能描述:頭插法生成單鏈表 *輸入參數:職工各項信息工號、姓名、性別、年齡、學歷、工資、住址 *輸出參數:無 *返回值:1或0***************************************************************************************/ int CreatList(Linklist L)//頭插法生成單鏈表 {LNode *p,*r,*s;char id[30];int k=0;r=L;s=L->next;//鏈表沒有節點時,s=null;/鏈表有節點時,指向第一個職工節點while(r->next!=NULL)//如果存在后繼結點時,r指針后移一個{r=r->next;}while(L){printf("\t職工號:");scanf("%s",id);s=L->next;//每次從第一個節點開始找,看id是否重復while(s){if(strcmp(s->data.id,id)==0){printf("\t提示:職工號為'%s'的職工已經存在!\n",id);k=1;return OK;}s=s->next;}p=(Linklist)malloc(sizeof(LNode));memset(p,0,sizeof(LNode));//清空內存strcpy(p->data.id,id);printf("\t姓名:");scanf("%s",p->data.name);printf("\t性別:");scanf("%s",p->data.sex);printf("\t年齡:");scanf("%d",&p->data.age);printf("\t學歷:");scanf("%s",p->data.edu);printf("\t工資:");scanf("%lf",&p->data.salary);printf("\t電話:");scanf("%s",p->data.phone);printf("\t地址:");scanf("%s",p->data.address);break;}p->next=NULL;//表明這是鏈表的尾部結點r->next=p;//將新建的結點加入鏈表尾部中r=p;return OK; }/*************************************************************************************** *功能描述:顯示職工信息 *輸入參數:p指針 *輸出參數:職工各項信息 *返回值:無***************************************************************************************/ void Display(Linklist L)//顯示職工信息 {LNode *p;p=L->next;if(p==NULL){printf("\t現在沒有職工信息,請先輸入職工信息\n\n");return;}printf("\t職工號\t姓名\t\t性別\t年齡\t學歷\t工資\t電話\t地址\n\n");while(p){printf("\t%s\t",p->data.id);printf("%s\t\t",p->data.name);printf("%s\t",p->data.sex);printf("%d\t",p->data.age);printf("%s\t",p->data.edu);printf("%0.2lf\t",p->data.salary);printf("%s\t",p->data.phone);printf("%s\t",p->data.address);printf("\n");p=p->next;}} /*************************************************************************************** *功能描述:職工信息查詢 *輸入參數:a k *輸出參數:查找到的職工信息 *返回值:1***************************************************************************************/ void Search(Linklist L)//職工信息查詢{int a,k=0;char name[10];char id[20];char phone[30];printf("\t請輸入查詢方式(1按職工號查詢,2按姓名查找):");scanf("%d",&a);if(a==1){k=1;printf("\t請輸入查詢職工號:");scanf("%s",&id);SearchID(L,id);//ID查詢}if(a==2){k=1;printf("\t請輸入查詢職工姓名:");scanf("%s",&name);SearchName(L,name);//姓名查詢}if(k==0){printf("\t請輸入正確的序號!\n");}}/*************************************************************************************** *功能描述:職工號查詢 *輸入參數:職工工號 p指針 L *輸出參數:該職工各項信息 *返回值:1***************************************************************************************/ int SearchID(Linklist L,char id[20])//職工號查詢 {LNode *p; p=L;int k=0;while(p){if(strcmp(p->data.id,id)==0){printf("\t職工號 %s\n",p->data.id);printf("\t姓名 %s\n",p->data.name);printf("\t性別 %s\n",p->data.sex);printf("\t年齡 %d\n",p->data.age);printf("\t學歷 %s\n",p->data.edu);printf("\t工資 %0.2lf\n",p->data.salary);printf("\t電話 %s\n",p->data.phone);printf("\t地址 %s\n",p->data.address);k=1;}p=p->next;}if(k==0){printf("\t對不起,沒有您想要查找的人!\n");}return OK; }/*************************************************************************************** *功能描述:姓名查詢 *輸入參數:職工姓名 p指針 *輸出參數:該職工各項信息 *返回值:1***************************************************************************************/ int SearchName(Linklist L,char name[10])//姓名查詢 {LNode *p; p=L;int k=0;while(p){if(strcmp(p->data.name,name)==0){printf("\t職工號 %s\n",p->data.id);printf("\t姓名 %s\n",p->data.name);printf("\t性別 %s\n",p->data.sex);printf("\t年齡 %d\n",p->data.age);printf("\t學歷 %s\n",p->data.edu);printf("\t工資 %0.2lf\n",p->data.salary);printf("\t電話 %s\n",p->data.phone);printf("\t地址 %s\n",p->data.address);k=1;}p=p->next;}if(k==0){printf("\t對不起,沒有您想要查找的人!\n");}return OK; }/*************************************************************************************** *功能描述:職工信息排序 *輸入參數:b k *輸出參數:ID排序 ;姓名排序; 工資排序后的職工信息 *返回值:無***************************************************************************************/ void Sort(Linklist L)//職工信息排序 {int b,k=0;printf("\t請輸入排序方式(1按職工號排序,2按姓名排序,3按工資排序):");scanf("%d",&b);if(b==1){k=1;printf("\t按職工號排序為:\n");SortID(L);//職工號排序Display(L);}if(b==2){k=1;printf("\t按姓名排序為:\n");SortName(L);//姓名排序Display(L);//顯示職工信息}if(b==3){k=1;printf("\t按工資排序為:\n");SortSalary(L);//工資排序Display(L);//顯示職工信息}if(k==0){printf("\t請輸入正確的序號!\n");} } /*************************************************************************************** *功能描述:職工號排序 *輸入參數:p指針 q指針 *輸出參數:按照職工號排序后各職工各項信息 *返回值:無***************************************************************************************/ void SortID(Linklist L)//職工號排序 {Linklist p,q;struct employee temp;for(p=L->next;p!=NULL;p=p->next){for(q=p->next;q!=NULL;q=q->next){if((strcmp(p->data.id,q->data.id)>0)){temp=q->data;q->data=p->data;p->data=temp;}}} }/*************************************************************************************** *功能描述:姓名排序 *輸入參數:p,q指針 *輸出參數:按照姓名排序后各職工各項信息 *返回值:無 *其他說明: ***************************************************************************************/ void SortName(Linklist L)//姓名排序 {Linklist p,q;struct employee temp;for(p=L->next;p!=NULL;p=p->next){for(q=p->next;q!=NULL;q=q->next){if((strcmp(p->data.name,q->data.name)>0)){temp=q->data;q->data=p->data;p->data=temp;}}}} /*************************************************************************************** *功能描述:職工工資排序 *輸入參數:p,q指針 *輸出參數:按照職工工資排序后各職工各項信息 *返回值:無***************************************************************************************/ void SortSalary(Linklist L)//職工工資排序 {Linklist p,q;struct employee temp;for(p=L->next;p!=NULL;p=p->next){for(q=p->next;q!=NULL;q=q->next){if(p->data.salary>q->data.salary){temp=q->data;q->data=p->data;p->data=temp;}}} }/*************************************************************************************** *功能描述:插入信息 *輸入參數:pre s 指針 *輸出參數:職工信息 *返回值:1 *其他說明: ***************************************************************************************/ int Ins(Linklist L, char id[20])//插入信息 {LNode *pre,*s;int k=0;pre=L;while(pre->next!=NULL){pre=pre->next;if((strcmp( pre->data.id,id))==0){k=1;printf("\t對不起,要查找職工號已存在!\n");}}if(k==0){s=(LNode*)malloc(sizeof(LNode));printf("\t請輸入要插入員工信息\n");printf("\t職工號:");scanf("%s",&s->data.id);printf("\t姓名:");scanf("%s",&s->data.name);printf("\t性別:");scanf("%s",&s->data.sex);printf("\t年齡:");scanf("%d",&s->data.age);printf("\t學歷:");scanf("%s",&s->data.edu);printf("\t工資:");scanf("%0.2lf",&s->data.salary);printf("\t電話:");scanf("%s",&s->data.phone);printf("\t地址:");scanf("%s",&s->data.address);s->next=pre->next;pre->next=s;printf("\t插入員工信息成功!\n");}return OK; }/*************************************************************************************** *功能描述:更改信息 *輸入參數: c k p指針 *輸出參數:修改后的職工信息 *返回值:1 *其他說明: ***************************************************************************************/ int Alter(Linklist L,char id[20])//更改信息 {int c;int k=0;LNode *p;p=L;while(p){if(strcmp(p->data.id,id)==0){k=1;printf("\t原來的職工信息:\n");printf("\t職工號 %s\n",p->data.id);printf("\t姓名 %s\n",p->data.name);printf("\t性別 %s\n",p->data.sex);printf("\t年齡 %d\n",p->data.age);printf("\t學歷 %s\n",p->data.edu);printf("\t工資 %0.2lf\n",p->data.salary);printf("\t電話 %s\n",p->data.phone);printf("\t地址 %s\n",p->data.address);printf("\t請輸入要修改的選項(1職工號,2姓名,3性別,4年齡\n");printf(" \t 5學歷,6工資,7電話,8地址):");scanf("%d",&c);switch(c){case 1:{printf("\t請輸入修改員工編號:",p->data.id);scanf("%s",p->data.id);printf("\t修改員工信息成功!\n");break;}case 2:{printf("\t請輸入員工修改姓名:",p->data.name);scanf("%s",p->data.name);printf("\t修改員工信息成功!\n");break;}case 3:{printf("\t請輸入員工修改性別:",p->data.sex);scanf("%s",p->data.sex);printf("\t修改員工信息成功!\n");break;}case 4:{printf("\t請輸入員工修改年齡:",p->data.age);scanf("%d",&p->data.age);printf("\t修改員工信息成功!\n");break;}case 5:{printf("\t請輸入員工修改學歷:",p->data.edu);scanf("%s",p->data.edu);printf("\t修改員工信息成功!\n");break;}case 6:{printf("\t請輸入員工修改工資:",p->data.salary);scanf("%lf",&p->data.salary);printf("\t修改員工信息成功!\n");break;}case 7:{printf("\t請輸入員工修改電話:",p->data.phone);scanf("%s",p->data.phone);printf("\t修改員工信息成功!\n");break;}case 8:{printf("\t請輸入員工修改地址:",p->data.address);scanf("%s",p->data.address);printf("\t修改員工信息成功!\n");break;}default:printf("\t請輸入正確序號!\n");break;}}p=p->next;}if(k==0){printf("\t該職工號不存在!\n");}return OK;}/*************************************************************************************** *功能描述:按職工號刪除 *輸入參數:p r 指針 *輸出參數:無 *返回值:1 *其他說明: ***************************************************************************************/ int Del(Linklist L,char id[20])//按ID刪除 {LNode *p; LNode *r;p=L->next; r=L; while(!(strcmp(p->data.id,id)==0)&&p){r=p;p=p->next;}if(!p)printf("\n刪除位置不合理\n");else{r->next=p->next;free(p);printf("刪除成功!\n");}return 1; }/*************************************************************************************** *功能描述:將操作完成后的信息存儲到文件 *輸入參數:無 *輸出參數:無 *返回值:無***************************************************************************************/ void Save(Linklist L) {FILE *fpb2; //文件指針LNode *p2;fpb2=fopen("worker.txt","wb"); //把職工信息寫入到文件中for(p2=L->next; p2!=NULL; p2=p2->next)fwrite(p2,sizeof(LNode),1,fpb2);fclose(fpb2);} /*************************************************************************************** *功能描述:把文件中的職工信息讀出來 *輸入參數:無 *輸出參數:無 *返回值:無***************************************************************************************/ void Read(Linklist L) {FILE *fpb1; //文件指針LNode *p1,*s1;fpb1=fopen("worker.txt","rb"); //讀方式打開職工文件if(fpb1!=NULL){p1=(Linklist)malloc(sizeof(LNode));if(!p1)exit(1);p1->next=NULL;while(fread(p1,sizeof(LNode),1,fpb1)==1){if(L->next==NULL){L->next=p1;s1=p1;}else{s1->next=p1;s1=p1;}p1=(Linklist)malloc(sizeof(LNode));if(!p1)exit(1);p1->next=NULL;}} }2.main.cpp
#include<stdio.h> #include<stdlib.h> #include<string.H> #include"D://head.h"#define OK 1 #define ERROR 0/*************************************************************************************** *功能描述:測試函數 *輸入參數:你的選擇 *輸出參數:無 *返回值:0 *其他說明:完成各個函數測試,消息字段之間用分號(;)隔離 ***************************************************************************************/ int main()//主函數 {Linklist L;int x=1;int y;char m;char id[20];Initlist(&L);//初始化單鏈表Read(L);while(x){menu();printf("\t請選擇操作序號并按回車:");scanf("%d",&y);switch(y){case 1:{system ("cls");//清空主界面printf("\t*********************歡迎進入錄入模塊********************\n");CreatList(L);//頭插法生成單鏈表do{printf("\t是否繼續輸入?(y/n):");getchar();scanf("%c",&m);if(m=='y'){CreatList(L);//顯示職工信息}}while(m!='n');printf("\t*******************歡迎下次進入錄入模塊******************\n");break;}case 2:{system ("cls");//清空主界面printf("\t*********************歡迎進入查詢模塊********************\n");Search(L);//職工信息查詢do{printf("\t是否繼續查詢?(y/n):");getchar();scanf("%c",&m);if(m=='y'){Search(L);//職工信息查詢}}while(m!='n');printf("\t*******************歡迎下次進入查找模塊******************\n");break;}case 3:{system ("cls");//清空主界面printf("\t*******************歡迎進入排序模塊**********************\n");Sort(L);do{printf("\t是否繼續查詢?(y/n):");getchar();scanf("%c",&m);if(m=='y'){Sort(L);}}while(m!='n');printf("\t*******************歡迎下次進入排序模塊******************\n");break;}case 4:system ("cls");//清空主界面printf("\t*********************歡迎進入插入模塊********************\n");printf("\t請輸入要插入查找的職工號:");getchar();scanf("%s",&id);Ins(L,id);//插入信息do{printf("\t是否繼續插入?(y/n):");getchar();scanf("%c",&m);if(m=='y'){printf("\t請輸入要插入查找的職工號:");getchar();scanf("%s",&id);Ins(L,id);//插入信息}}while(m!='n');printf("\t*******************歡迎下次進入插入模塊******************\n");break;case 5:system ("cls");//清空主界面printf("\t*********************歡迎進入顯示模塊********************\n");printf("\t所有職工信息如下所示\n");Display(L);//顯示職工信息printf("\t*******************歡迎下次進入顯示模塊******************\n");break;case 6:system ("cls");//清空主界面printf("\t*********************歡迎進入修改模塊********************\n");printf("\t請輸入要修改員工職工號:");getchar();scanf("%s",&id);Alter(L,id);//更改信息do{printf("\t是否繼續修改?(y/n):");getchar();scanf("%c",&m);if(m=='y'){printf("\t請輸入要修改員工職工號:");getchar();scanf("%s",&id);Alter(L,id);//更改信息}}while(m!='n');printf("\t******************歡迎下次進入修改模塊*******************\n");break;case 7:system ("cls");//清空主界面printf("\t*********************歡迎進入刪除模塊********************\n");printf("\t請輸入刪除員工職工號:");getchar();scanf("%s",&id);Del(L,id);//按職工號刪除do{printf("\t是否繼續刪除?(y/n):");getchar();scanf("%c",&m);if(m=='y'){printf("\t請輸入要刪除員工職工號:");getchar();scanf("%s",&id);Del(L,id);//按職工號刪除}}while(m!='n');printf("\t******************歡迎下次進入刪除模塊*******************\n");break;case 8:system("cls");printf("\t*********************歡迎進入保存模塊********************\n");Save(L);//保存數據printf("\t職工信息保存成功!\n");printf("\t******************歡迎下次進入保存模塊*******************\n");break;case 9:system ("cls");//清空主界面x=0;printf("\t****************感謝您使用本系統,再見!*****************\n");exit(0);default:printf("\t請輸入正確序號!\n");break;}}return 0; }3。head
運行結果截圖:
總結
- 上一篇: 【数据结构】量子危机
- 下一篇: 处理SPS错误:只有在配置文件或 Pag