資料結構 課程設計 員工管理系統(C語言)
1、新增員工模組:輸入員工的姓名、年齡、職位、工齡以,通過自己定義的void add()函式來實現。將錄入的資訊寫入到“data.dat”中。
2、刪除員工模組:刪除需要刪除的員工的所有資訊,通過自己定義的void del( )函式來實現。先通過查詢找到需要刪除的資訊,將檔案中除要刪除的資訊之外全部讀入記憶體,刪除原檔案,將建立一個同名檔案。
3、修改模組:可以修改該員工的部分資訊,通過自己定義的void change()。根據選擇修改具體部分。
4、查詢員工資訊模組:可以按員工職務來查詢員工的相關資訊,通過自己定義的void search( )函式來實現。根據名字查詢。
5、員工資訊排序模組:可以按照規定要求對員工資訊排序,通過自己定義的void sort()函式來實現。分為按工齡和按專業降序排列,排序後將寫入檔案。
6、員工資訊輸出模組:可以輸出所有員工的資訊,通過自己定義的void display()函式實現。
#include<stdio.h>
#include<stdlib.h>
#include<windows.h>
#include<string.h>
#define len sizeof(worker)
typedef struct
{
char name[20];//姓名
char sex;
int age;//年齡
int work_age;//工齡
char duty[20];
char education[20];
char address[40];
char phone[20];
} worker;
static int total;
void add() //新增
{
FILE *fp;
worker b,b1;
fp=fopen("data.dat","ab+");
printf(" \n請輸入職工姓名: ");
scanf("%s",&b.name);
fflush(stdin);
printf(" \n請輸入職工性別(f或m): ");
scanf("%c",&b.sex);
while((b.sex!='f'&&b.sex!='m')||(b.sex!='m'&&b.sex!='f'))
{
fflush(stdin);
printf(" \n輸入有誤,請重新輸入員工性別(f或m)注意f 或 m : ");
scanf("%c",&b.sex);
}
printf(" \n請輸入職工的年齡: ");
scanf("%ld",&b.age);
printf(" \n請輸入職工的工齡: ");
scanf("%ld",&b.work_age);
printf(" \n請輸入職工的職務 : ");
scanf("%s",b.duty);
printf(" \n 請輸入職工的學歷(博士、碩士、本科、大專、高中、初中及以下) : ");
scanf("%s",b.education);
printf(" \n請輸入職工的居住地址 : ");
scanf("%s",b.address);
printf(" \n請輸入職工的電話: ");
scanf("%s",b.phone);
fseek(fp,0,SEEK_SET);
while (fread(&b1,len,1,fp))
{
if((strcmp(b.name,b1.name)==0)&&(strcmp(b.address,b1.address)==0))
{
fclose(fp);
printf("\n資訊庫中已有同的資訊,無法加入");
Sleep(2000);
system("cls");
return;
}
}
fseek(fp,0,SEEK_END);
fwrite(&b,len,1,fp);
fclose(fp);
printf("\t\t\t 新增成功!\n");
system("pause");
}
int record()
{
worker b;
FILE *fp;
int i = -1;
if((fp=fopen("data.dat","rb+"))==NULL)
{
printf("檔案開啟錯誤");
exit(0);
}
fseek(fp,0,SEEK_SET);
while(!feof(fp))
{
i++;
fread(&b,len,1,fp);
}
return i;
}
void display()
{
if(record()==0)
{
printf("檔案沒有資訊,去新增吧");
system("pause");
}
else
{
worker sta;
FILE *fp;
fp=fopen("data.dat","rb");
fseek(fp,0,SEEK_SET);
fread(&sta,len,1,fp);
printf("姓名 性別 年齡 工齡 學歷 職務 地址 電話\n");
printf("-----------------------------------------------------------------------------\n");
while(!feof(fp))
{
printf("%-10s %-4c %-4ld %-4ld %-6s %-6s %-20s%-s\n",
sta.name,sta.sex,sta.age, sta.work_age,sta.education,sta.duty,
sta.address,sta.phone);
fread(&sta,len,1,fp);
}
system("pause");
fclose(fp);
}
}
void del()
{
worker b,b1;
int flag=0,i=0; //flag用於判斷職工是否存在
total= record();
worker temp[total];
FILE *fp,*fp1;
char a[20];
if ((fp=fopen("data.dat","rb+"))==NULL)
{
printf("開啟檔案錯誤!!!\n");
Sleep(1000);
exit(1);
}
printf("\n請輸入職工名字:");
scanf("%s",a);
system("cls");
fseek(fp,0,SEEK_SET);
while (fread(&b,len,1,fp)) //遍歷檔案所有結構體
{
if(!strcmp(a,b.name))
flag=1; //判斷有無此職工
}
if(flag==0) //沒有此職工退出函式
{
printf("\n\t\t\t沒這人");
Sleep(2000);
system("cls");
return;
}
fseek(fp,0,SEEK_SET);
while((!feof(fp))&&(i<total))
{
fread(&b,len,1,fp); //將除了要刪除的資訊之外的所有資訊儲存進結構體 book temp[total],寫進記憶體
if (strcmp(a,b.name))
{
temp[i]=b;
i=i+1;
}
}
fclose(fp);
fp1=fopen("data.dat","wb");
fclose(fp1);
fp1=fopen("data.dat","ab"); //以覆蓋原有的檔案資訊 的方式建立同名檔案
for(i=0; i<total-1; i++) //將 除了要刪除的資訊之外的所有資訊儲存進的結構體 book temp[total]賦值給b1,寫入檔案
{
b1=temp[i];
fseek(fp1,0,SEEK_END);
fwrite(&b1,len,1,fp1);
}
fclose(fp1);
}
void change() //修改職工資訊
{
int flag = 0;
worker b,b1;
FILE *fp;
char a[20];
if ((fp=fopen("data.dat","rb+"))==NULL)
{
printf("開啟檔案錯誤!!!\n");
Sleep(1000);
exit(1);
}
printf("請輸入要修改資訊的職工的姓名 :");
scanf("%s",a);
system("cls");
fseek(fp,0,SEEK_SET);
while (fread(&b,len,1,fp)) //遍歷檔案所有結構體
{
if (!strcmp(b.name,a))
{
printf(" 【1】 修改姓名 【2】修改學性別\n");
printf(" 【3】 修改年齡 【4】修改職務\n");
printf(" 【5】 修改學歷 【6】修改居住地址\n");
printf(" 【7】 修改電話 \n");
printf("請輸入以上數字,選擇相應的功能: ");
int choice;
scanf("%d",&choice);
fflush(stdin);
switch(choice)
{
case 1 :
{
printf(" \n請輸入職工姓名: ");
scanf("%s",&b.name);
break;
}
case 2 :
{
printf(" \n請輸入職工性別(f或m): ");
scanf("%c",&b.sex);
break;
}
case 3 :
{
printf(" \n請輸入職工的年齡: ");
scanf("%ld",&b.age);
break;
}
case 4 :
{
printf(" \n請輸入職工的職務 : ");
scanf("%s",b.duty);
break;
}
case 5 :
{
printf(" \n 請輸入職工的學歷(博士、碩士、本科、大專、高中、初中及以下) : ");
scanf("%s",b.education);
break;
}
case 6 :
{
printf(" \n請輸入職工的居住地址 : ");
scanf("%s",b.address);
break;
}
case 7 :
{
printf(" \n請輸入職工的電話: ");
scanf("%s",b.phone);
break;
}
default :
printf("\n輸入錯誤");
system("pause");
break;
}
if(flag!=1)
{
fseek(fp,-len,SEEK_CUR); /*位置指標移動到該資料塊首位*/
fwrite(&b,len,1,fp);
printf("\n 修改成功!!!");
system("pause");
fclose(fp);
if (feof(fp))
{
printf("沒有這個職工資訊\n");
system("pause");
}
}
}
}
}
void search() //查詢
{
worker b;
int flag = 0;
char ch,a[20];
char name[20];
FILE *fp;
fp=fopen("data.dat","rb");
fseek(fp,0,SEEK_SET);
ch=fgetc(fp);
if((fp=fopen("data.dat","r"))==NULL)
{
printf("\t\t\t錯誤,請先新增!\n");
return ;
}
else if(ch==EOF)
{
printf("\t\t\t沒資訊!");
return;
}
else
{
printf("請輸入查詢資訊的職工的姓名 :");
scanf("%s",a);
fseek(fp,0,SEEK_SET);
while (fread(&b,len,1,fp)) //遍歷檔案所有結構體
{
if (!strcmp(b.name,a))
{
printf("姓名 性別 年齡 工齡 學歷 職務 地址 電話\n");
printf("-----------------------------------------------------------------------------\n");
printf("%-10s %-4c %-4ld %-4ld %-6s %-6s %-20s%-s\n",
b.name,b.sex,b.age, b.work_age,b.education,b.duty,
b.address,b.phone);
flag = 1;
system("pause");
}
}
if (flag = 0)
{
printf("沒有這個職工資訊\n");
system("pause");
}
}
}
void work_age(int n)
{
total = n;
int i=0,j;
char ch;
worker b,temp;
worker a[total];
FILE *fp;
fp=fopen("data.dat","rb+");
fseek(fp,0,SEEK_SET);
ch=fgetc(fp);
if(fp==NULL)
{
printf("\t\t\t錯誤,請先新增!\n");
return ;
}
else if(ch==EOF)
{
printf("\t\t\t檔案沒有資訊!");
return;
}
else
{
fseek(fp,0,SEEK_SET);
while (fread(&b,len,1,fp))
{
a[i] = b;
i++;
}
for(i=1; i<total; i++)
{
temp= a[i];
j=i-1;
while(j>=0&&temp.work_age>a[j].work_age)
{
a[j+1] = a[j];
j--;
}
a[j+1]=temp;
}
fseek(fp,0,SEEK_SET);
for(i=0; i<total; i++)
fwrite(&a[i],len,1,fp);
fclose(fp);
display();
}
}
void education(int n)
{
int i=0;
total = n;
char ch;
worker b,temp;
worker a[total];
FILE *fp;
fp=fopen("data.dat","rb+");
fseek(fp,0,SEEK_SET);
ch=fgetc(fp);
if(fp==NULL)
{
printf("\t\t\t錯誤,\n");
return ;
}
else if(ch==EOF)
{
printf("\t\t\t檔案沒有資訊!");
return;
}
else
{
fseek(fp,0,SEEK_SET);
while (fread(&b,len,1,fp))
{
if(strcmp(b.education,"博士")==0)
{
a[i]=b;
i++;
}
}
fseek(fp,0,SEEK_SET);
while (fread(&b,len,1,fp))
{
if(strcmp(b.education,"碩士")==0)
{
a[i]=b;
i++;
}
}
fseek(fp,0,SEEK_SET);
while (fread(&b,len,1,fp))
{
if(strcmp(b.education,"碩士")==0)
{
a[i]=b;
i++;
}
}
fseek(fp,0,SEEK_SET);
while (fread(&b,len,1,fp))
{
if(strcmp(b.education,"本科")==0)
{
a[i]=b;
i++;
}
}
fseek(fp,0,SEEK_SET);
while (fread(&b,len,1,fp))
{
if(strcmp(b.education,"大專")==0)
{
a[i]=b;
i++;
}
}
fseek(fp,0,SEEK_SET);
while (fread(&b,len,1,fp))
{
if(strcmp(b.education,"初中及以下")==0)
{
a[i]=b;
i++;
}
}
for(i=0; i<total; i++)
{
printf("%10s",a[i].name);
}
printf(" \n");
fseek(fp,0,SEEK_SET);
for(i=0; i<total; i++)
fwrite(&a[i],len,1,fp);
fclose(fp);
display();
}
}
void sort()
{
int j;
getchar(); /*接收回車*/
j=record();
printf(" 【1】 按工齡降排序 【2】按學歷降排序\n");
printf("請輸入以上數字,選擇相應的功能: ");
switch (getchar())
{
case '1':
work_age(j);
break;
case '2':
education(j);
break;
}
getchar(); /*接收回車*/
system("cls");
printf(" 【1】 回到主介面 【2】退出系統\n");
printf("請輸入以上數字,選擇相應的功能: ");
switch(getchar())
{
case '1':
getchar();
system("cls");
break;
default:
exit(1);
}
}
int main()
{
int flag=1;
while(flag)
{
fflush(stdin);
system("cls"); /*清屏*/
printf(" 歡迎登陸職工資訊管理系統!\n");
printf(" 【1】 輸入職工資訊 【2】 輸出職工資訊\n");
printf(" 【3】 資訊查詢排序 【4】 刪除職工資訊\n");
printf(" 【5】 修改職工資訊 【6】 查詢職工資訊\n");
printf("請輸入以上數字,選擇相應的功能: ");
switch (getchar())
{
case '1':
add();
break; /*呼叫輸入資訊的函式*/
case '2':
display();
break; /*呼叫輸出資訊的函式*/
case '3':
sort();
break; /*呼叫排序的函式*/
case '4':
del();
break; /*呼叫刪除職工資訊函式*/
case '5':
change();
break; /*呼叫修改職工資訊的函式*/
case '6':
search();
break; //查詢員工資訊
default:
flag=0;
break; /*跳出迴圈體,結束程式*/
}
}
return 0;
}
相關文章
- C語言教師工資管理課設 求助C語言
- C語言課程訓練系統題-字串cquptC語言字串
- 算數表示式求值--c語言課程設計C語言
- 浙大翁愷《C語言程式設計》課程筆記C語言程式設計筆記
- javaweb課程設計之XXX管理系統JavaWeb
- 資料結構課程設計報告——暢通工程資料結構
- c語言圖書館管理系統----學會使用結構體C語言結構體
- 鵬哥C語言初識課程總結C語言
- 如何構建設計語言系統
- 資料結構 順序棧(c語言)資料結構C語言
- 資料結構雜湊表(c語言)資料結構C語言
- 《Python語言程式設計》課程筆記Python程式設計筆記
- 資料庫課程設計—超市零售資訊管理系統(Python實現)資料庫Python
- C語言課程設計與學習指導 張冬梅pdfC語言
- C語言-超市倉庫管理系統的設計與實現C語言
- 資料結構C語言|佇列相關資料結構C語言佇列
- C語言程式設計讀書筆記:結構C語言程式設計筆記
- 學生成績管理系統——課程設計報告
- “c語言+結構體+連結串列”實現名片系統C語言結構體
- 員工管理系統
- 課程管理系統
- 結對程式設計(c語言)程式設計C語言
- C語言_資料結構圖(留個筆記)C語言資料結構筆記
- 重學C語言_資料結構與基礎語法C語言資料結構
- 用c語言實現資料結構——單連結串列C語言資料結構
- 資料結構——單連結串列介面實現(C語言)資料結構C語言
- 課程-計算機語言學計算機
- C語言:發工資C語言
- 職工資訊管理系統的設計
- 用C++編寫一個簡單的員工工資管理系統~C++
- C語言程式設計之《資料輸出》C語言程式設計
- 如何系統學習C 語言(中)之 結構體篇結構體
- 【管理系統課程設計】美少女手把手教你後臺管理
- 【資料結構】迴圈佇列 C語言實現資料結構佇列C語言
- C語言資料結構:鏈式棧及其出入棧C語言資料結構
- 競拍系統設計和核心資料結構資料結構
- C語言學生管理系統原始碼C語言原始碼
- C語言教程——03 C語言結構C語言