當前位置:首頁 » 編程語言 » c語言職工管理系統代碼帶注釋
擴展閱讀
webinf下怎麼引入js 2023-08-31 21:54:13
堡壘機怎麼打開web 2023-08-31 21:54:11

c語言職工管理系統代碼帶注釋

發布時間: 2023-01-10 09:09:48

A. c語言商品管理系統源代碼,加註釋

#include <stdio.h>
#include <conio.h>
#include <string.h>
#define SIZE 300

typedef struct
{
char name[30];
int num;
char shang[10];
float price;
}record;

void DataInput(record *com, int *nptr);
int DataRead(record *com,int *nptr) ;
void DataStorage(record *com, int n); /*信息保存到文件*/
void DataFind( );
void DataDisPlay( );
void DataAdd( );
void DataDel( );
void DataStatistic( );

int main( )
{
record shangpin[SIZE];
int number=20; /*設商品數*/
char fn;
printf("\t~~~~~~商品管理系統~~~~~~");
while(1)
{
printf("\n\t\t1.商品信息錄入\n"); /*顯示主菜單*/
printf("\t\t2.商品信息顯示\n");
printf("\t\t3.商品信息查找\n");
printf("\t\t4.商品信息添加\n");
printf("\t\t5.商品信息刪除\n");
printf("\t\t6.商品信息統計\n");
printf("\t\t0.退出系統");

printf("\n\t~~~~~~~~~~~~~~~~\n");

printf("\t請輸入你的一個選項(數字0-6): ");
fflush(stdin);
scanf("%c",&fn);
puts("\n");

switch(fn) /*切換到不同功能*/
{
case '1':
DataInput(shangpin, &number );
break; /*錄入信息*/
case '2':DataDisPlay();
break; /*信息顯示*/
case '3':
DataFind();
break; /*信息查找*/
case '4':
DataAdd( );
break; /*增加*/
case '5':
DataDel( );
break; /*刪除*/
case '6':
DataStatistic();
break; /*信息統計*/
case '0':
return 0;

default:puts("\t\t沒有這個項!返回主菜單!");
break;
}

printf("\n\t\t完畢!按任意鍵繼續");
getch( );

puts("\n");
}
}

void DataInput(record *com, int *nptr) /*商品信息錄入*/
{
int i = 0;
int n ; /*錄入的總數*/
char YesOrNo; /*判斷是否保存*/
char shangming[30]; /*商名*/
int haoma; /*商品號*/
char shangjia[10]; /*單價*/
float danjia;
printf("\t\t請輸入商品個數:");
scanf("%d",&n);
*nptr = n; /*nptr返回商品個數*/
printf("\t\t現在開始錄入這%d個商品信息:\n\n",n);
while(i<n)
{
printf("請輸入商品的商品名:",i+1);
scanf("%s",&shangming);
printf("請輸入商品的商品號:",i+1);
scanf("%d",&haoma);
printf("請輸入商品的生產商:",i+1);
scanf("%s",&shangjia);
printf("請輸入商品的單價 :",i+1);
scanf("%f",&danjia);
if(danjia>=0&&danjia<=1000) /*有效的單價才錄入*/
{
strcpy(com[i].name,shangming);
com[i].num = haoma;
strcpy(com[i].shang,shangjia);
com[i].price = danjia;
i =i+1;
}
else
printf("輸入的單價是一個無效的值!!!\n\n");
} /*結束while*/

printf("要保存您剛才錄入的數據嗎(Y/N)?"); /*選擇保存*/
fflush(stdin);
scanf("%c",&YesOrNo);
if(YesOrNo=='y'||YesOrNo=='Y')
DataStorage(com,n);
else if(YesOrNo=='n'||YesOrNo=='N')
return;
else
printf("輸入了不正確的選項\n");
return;

} /*結束函數*/

void DataFind( ) /*查找*/
{

void OnNumber(record *com,int n ); /*按商品號排序*/
int key; /*key為要查找的關鍵值*/
int low = 0; /*下限*/
int high ; /*上限*/
int mid ; /*中間值*/
char ans; /*選項*/
record com[SIZE];
int n;

if(DataRead(com,&n)==1) /*從文件中讀取信息*/
{
OnNumber(com,n); /*先按商品號排序*/
high = n;
do
{
printf("\n\n\t\t請輸入你要查找的商品號:");
scanf("%d",&key);

low = 0;high = n;
while (low <=high)
{
mid = (high + low)/2; /*折半查找法*/

if (key == com[mid].num )
{
printf("\n\t\t你要找的是第%d個商品\n",mid + 1);
printf("\t\t結果如下:\n\n");

printf("序號\t\t商品名\t 商品號\t生產商\t單價\n");
printf("%3d%17s%12d%12s%8.1f\n",mid+1,com[mid].name,com[mid].num,com[mid].shang,
com[mid].price);

break; /*如果找到則退出循環*/
}

if (key > com[mid].num ) low = mid + 1;
else high = mid - 1;
}

if (low > high)
printf("\t\t,沒有找到這個價格!\n");
printf("\n\t\t還要繼續查詢嗎(Y/N)?");
ans = getch( );
}
while (ans =='Y'||ans == 'y'); /*結束do....while*/
}
}

void DataStorage(record *com, int n) /*錄入保存文件*/
{
int i;
FILE *comPtr;
char FileName[20];
printf("請輸入您要保存的文件名:");
scanf("%s",FileName);
printf("正在將商品信息保存到文件,請稍候……\n");
if((comPtr=fopen(FileName,"w"))==NULL)
printf("沒有該文件\n");
else
for(i=0 ; i<n ; i++)
fprintf(comPtr,"\n%17s%12d%12s%8.1f",com[i].name,com[i].num,com[i].shang,com[i].price);
fclose(comPtr);
}

int DataRead(record *com,int *nptr) /*讀取文件*/
{
int i=0;
char datafile[20];
FILE *comPtr;

*nptr = 0;
printf("請輸入文件名:");
scanf("%s",datafile);
if((comPtr = fopen(datafile,"r")) == NULL) /*打開文件*/
{
printf("沒有該文件,請重新輸入!\n");
return 0;
}
else
{
printf("正在讀取商品單價,請稍候……\n");
while (!feof(comPtr))
{
fscanf(comPtr,"%s%d%s%f",&com[i].name,&com[i].num,&com[i].shang,&com[i].price);
i++;
}
*nptr = i;
printf("\n");

fclose(comPtr);

return 1;
}

}

void DataDisPlay()
{
void OnPrice(record *com,int n ); /*按單價*/
void OnNumber(record *com,int n ); /*按商品號*/
int N;
int i;
record com[300];
char YesNo; /*是否按順序顯示*/
char tp;

if(DataRead(com,&N)==1) /*從文件讀取數據*/
{

printf("序號\t\t商品名\t 商品號\t生產商\t單價\n");
for(i=0;i<N;i++)
printf("%3d%17s%12d%12s%8.1f\n",i+1,com[i].name,com[i].num,com[i].shang,com[i].price);

printf("要按順序顯示嗎?(Y/N)?");
fflush(stdin);
scanf("%c",&YesNo);
if(YesNo=='y'||YesNo=='Y')
{
printf("\t請輸入排序方式:\n");
printf("\t(1.按價格排序從低到高;2.按商品號排序從低到高.)");
fflush(stdin);
scanf("%c",&tp);
if(tp=='1')
OnPrice(com,N);
else if(tp =='2')
OnNumber(com,N);
else
printf("\t輸入了不正確項!\n");
}
}
} /*結束顯示成績*/

void OnPrice(record *com,int n ) /*按單價順序*/
{ int i,j;
record temp;
printf("\t\t按單價排序---\n\n");

printf("商品總數為%d:\n",n);

for(j=0 ; j<n-1 ; j++) /*冒泡排序*/
for(i=0 ; i<n-j-1 ; i++)
if(com[i].price>com[i+1].price)
{
temp=com[i];
com[i]=com[i+1];
com[i+1]=temp;
}

printf("\n\t\t按成績排序的結果如下(按分數從低到高):\n\n");

printf("序號\t\t商品名\t 商品號\t生產商\t單價\n");
for(i=0 ; i<n ; i++)
printf("%3d%17s%12d%12s%8.1f\n",i+1,com[i].name,com[i].num,com[i].shang,
com[i].price);

}

void OnNumber(record *com,int n ) /*按序號順序*/
{
int i,j;
record temp;

printf("\t\t按商品號排序---\n\n");

printf("商品總數為%d:\n",n);

for(j=0 ; j<n-1 ; j++)
for(i=0 ; i<n-j-1 ; i++)
if(com[i].num>com[i+1].num)
{
temp=com[i];
com[i]=com[i+1];
com[i+1]=temp;
}

printf("\n\t按商品號排序的結果如下(按商品號從小到大):\n\n");

printf("序號\t\t商品名\t 商品號\t生產商\t單價\n");
for(i=0 ; i<n ; i++)
printf("%3d%17s%12d%12s%8.1f\n",i+1,com[i].name,com[i].num,com[i].shang,
com[i].price);

}

void DataAdd( ) /*增加*/
{
int i=0,n,m; /*商品名稱*/
char shangming[30];
int haoma; /*生產商*/
char shangjia[10];
float danjia;
char YesOrNo;
record com[SIZE];

printf("\t\t讀取原有數據信息---\n");
if(DataRead(com,&n)==1)
{
printf("\t\t信息讀取完畢!\n\n");

printf("\t\t請輸入要添加的商品總數:");
scanf("%d",&m);

printf("\t\t現在開始錄入這%d個商品信息:\n\n",m);

while(i<m)
{

printf("第%d個商品的商品名:",i+1);
scanf("%s",&shangming);
printf("第%d個商品的商品號:",i+1);
scanf("%d",&haoma);
printf("第%d個商品的生產商:",i+1);
scanf("%s",&shangjia);
printf("第%d個商品的單價:",i+1);
scanf("%f",&danjia);
if(danjia>=0&&danjia<=1000) /*有效的單價才錄入*/
{
strcpy(com[i+n].name,shangming);
com[i+n].num = haoma;
strcpy(com[i+n].shang,shangjia);
com[i+n].price = danjia;
i =i+1;
}
else
printf("輸入的單價是一個無效的值,請重新輸入!\n\n");

}

printf("要保存您剛才錄入的數據嗎(Y/N)?");
fflush(stdin);
scanf("%c",&YesOrNo);
if(YesOrNo=='y'||YesOrNo=='Y')
DataStorage(com,n+m);
else if(YesOrNo=='n'||YesOrNo=='N')
return;
else
printf("輸入了不正確項,返回上一級\n");
return;
}
}

void DataDel( )//刪除
{
void OnNumber(record *com,int n );
record com[SIZE];
int i; /*總記錄數*/
int n; /*要刪除的記錄號*/
int m;

printf("\t\t讀取原有數據信息---\n");
if(DataRead(com,&n)==1)
{
printf("\t\t原始數據如下:\n\n");
OnNumber(com,n );

printf("請輸入你要刪除的記錄的序號");
scanf("%d",&m);
if(m>=1 && m<=n)
{
for(i=m-1;i<n-1;i++)
com [i] = com[i+1];
DataStorage(com,n-1);
}
}
}

void DataStatistic( ) /*統計信息*/
{
int high=0,low=200,ave=0;
int n,i,sum=0;
int g,l;
record com[SIZE];
printf("讀取數據信息---\n");
if(DataRead(com,&n)==1)
{
printf("商品總數為%d\n\n",n);
for(i=0;i<n;i++)
{
if(com[i].price>high)
{
high = com[i].price;
g=i;
}
if(com[i].price<low)
{
low = com[i].price;
l=i;
}
sum += com[i].price;
}
ave=sum/n;
printf("\t\t最高\t最低\t平均\n"); /*計算值*/
printf("商品單價統計:\t%d\t%d\t%d\n\n",high,low,ave);
printf("序號\t\t商品名\t 商品號\t生產商\t單價\n");
for(i=0 ; i<n ; i++)
printf("%3d%17s%12d%12s%8.1f\n",i+1,com[i].name,com[i].num,com[i].shang,
com[i].price);

printf("\t\t 序號\t\t 商品名\t 商品號\t 生產商 單價\n");

printf("單價最高的商品是:%3d%17s%12d%12s%8.1f\n\n",g+1,com[g].name,com[g].num,com[g].shang,com[g].price);
printf("單價最低的商品是:%3d%17s%12d%12s%8.1f\n",l+1,com[l].name,com[l].num,com[l].shang,com[l].price);

} /*結束統計*/
}

B. C語言 職工信息管理系統

/*這是我開始做課程設計時寫的*/
#include "stdio.h" /*標准輸入輸出函數庫*/
#include "stdlib.h" /*標准函數庫*/
#include "string.h" /*字元串函數庫*/
#include "conio.h" /*屏幕操作函數庫*/
#define HEADER1 " -------------------------------ZGGZ---------------------------------------- \n"
#define HEADER2 "| number| name | jbgz | jj | kk | yfgz | sk | sfgz | \n"
#define HEADER3 "|--------|-----------|--------|--------|--------|--------|--------|--------| \n"
#define FORMAT "|%-8s|%-10s |%8.2f|%8.2f|%8.2f|%8.2f|%8.2f|%8.2f| \n"
#define DATA p->num,p->name,p->jbgz,p->jj,p->kk,p->yfgz,p->sk,p->sfgz
#define END "---------------------------------------------------------------------------- \n"
#define N 60
int saveflag=0; /*是否需要存檔的標志變數*/
/*定義與職工有關的數據結構*/
typedef struct employee /*標記為employee*/
{
char num[10]; /*職工編號*/
char name[15]; /*職工姓名*/
float jbgz; /*基本工資*/
float jj; /*獎金*/
float kk; /*扣款*/
float yfgz; /*應發工資*/
float sk; /*稅款*/
float sfgz; /*實發工資*/
}ZGGZ;

void menu() /*主菜單*/
{
system("cls"); /*調用DOS命令,清屏.與clrscr()功能相同*/
textcolor(10); /*在文本模式中選擇新的字元顏色*/
gotoxy(10,5); /*在文本窗口中設置游標*/
cprintf(" The Employee' Salary Management System \n");
gotoxy(10,8);
cprintf(" *************************Menu********************************\n");
gotoxy(10,9);
cprintf(" * 1 input record 2 delete record *\n");
gotoxy(10,10);
cprintf(" * 3 search record 4 modify record *\n");
gotoxy(10,11);
cprintf(" * 5 insert record 6 count record *\n");
gotoxy(10,12);
cprintf(" * 7 sort reord 8 save record *\n");
gotoxy(10,13);
cprintf(" * 9 display record 0 quit system *\n");
gotoxy(10,14);
cprintf(" *************************************************************\n");
/*cprintf()送格式化輸出至文本窗口屏幕中*/
}
void printheader() /*格式化輸出表頭*/
{
printf(HEADER1);
printf(HEADER2);
printf(HEADER3);
}
void printdata(ZGGZ pp) /*格式化輸出表中數據*/
{
ZGGZ* p;
p=&pp;
printf(FORMAT,DATA);

}

void Disp(ZGGZ tp[],int n) /*顯示數組tp[]中存儲的記錄,內容為employee結構中定義的內容*/
{
int i;
if(n==0) /*表示沒有職工工資記錄*/
{
printf("\n=====>Not employee record!\n");
getchar();
return;
}

printf("\n\n");
printheader(); /*輸出表格頭部*/
i=0;
while(i<n) /*逐條輸出數組中存儲的職工信息*/
{
printdata(tp[i]);
i++;
printf(HEADER3);
}
getchar();
}

void Wrong() /*輸出按鍵錯誤信息*/
{
printf("\n\n\n\n\n***********Error:input has wrong! press any key to continue**********\n");
getchar();
}

void Nofind() /*輸出未查找此職工的信息*/
{
printf("\n=====>Not find this employee record!\n");
}

/*************************************************************
作用:用於定位數組中符合要求的記錄,並返回保存該記錄的數組元素下標值
參數:findmess[]保存要查找的具體內容; nameornum[]保存按什麼在數組中查找;
**************************************************************/
int Locate(ZGGZ tp[],int n,char findmess[],char nameornum[])
{
int i=0;
if(strcmp(nameornum,"num")==0) /*按職工編號查詢*/
{
while(i<n)
{
if(strcmp(tp[i].num,findmess)==0) /*若找到findmess值的職工編號*/
return i;
i++;
}
}
else if(strcmp(nameornum,"name")==0) /*按職工姓名查詢*/
{
while(i<n)
{
if(strcmp(tp[i].name,findmess)==0) /*若找到findmess值的姓名*/
return i;
i++;
}
}
return -1; /*若未找到,返回一個整數-1*/
}

/*輸入字元串,並進行長度驗證(長度<lens)*/
void stringinput(char *t,int lens,char *notice)
{
char n[255];
do{
printf(notice); /*顯示提示信息*/
scanf("%s",n); /*輸入字元串*/
if(strlen(n)>lens) printf("\n exceed the required length! \n"); /*進行長度校驗,超過lens值重新輸入*/
}while(strlen(n)>lens);
strcpy(t,n); /*將輸入的字元串拷貝到字元串t中*/

}

/*輸入數值,0<=數值)*/
float numberinput(char *notice)
{
float t=0.00;
do{
printf(notice); /*顯示提示信息*/
scanf("%f",&t); /*輸入如工資等數值型的值*/
if(t<0) printf("\n score must >=0! \n"); /*進行數值校驗*/
}while(t<0);
return t;
}

/*增加職工工資記錄*/
int Add(ZGGZ tp[],int n)
{
char ch,num[10];
int i,flag=0;
system("cls");
Disp(tp,n); /*先列印出已有的職工工資信息*/

while(1) /*一次可輸入多條記錄,直至輸入職工編號為0的記錄才結束添加操作*/
{
while(1) /*輸入職工編號,保證該編號沒有被使用,若輸入編號為0,則退出添加記錄操作*/
{
stringinput(num,10,"input number(press '0'return menu):"); /*格式化輸入編號並檢驗*/
flag=0;
if(strcmp(num,"0")==0) /*輸入為0,則退出添加操作,返回主界面*/
{return n;}
i=0;
while(i<n) /*查詢該編號是否已經存在,若存在則要求重新輸入一個未被佔用的編號*/
{
if(strcmp(tp[i].num,num)==0)
{
flag=1;
break;
}
i++;
}

if(flag==1) /*提示用戶是否重新輸入*/
{ getchar();
printf("==>The number %s is existing,try again?(y/n):",num);
scanf("%c",&ch);
if(ch=='y'||ch=='Y')
continue;
else
return n;
}
else
{break;}
}
strcpy(tp[n].num,num); /*將字元串num拷貝到tp[n].num中*/
stringinput(tp[n].name,15,"Name:");
tp[n].jbgz=numberinput("jbgz:"); /*輸入並檢驗基本工資*/
tp[n].jj=numberinput("jiangjin:"); /*輸入並檢驗獎金*/
tp[n].kk=numberinput("koukuan:"); /*輸入並檢驗扣款*/
tp[n].yfgz=tp[n].jbgz+tp[n].jj-tp[n].kk; /*計算應發工資*/
tp[n].sk=tp[n].yfgz*0.12; /*計算稅金,這里取應發工資的百分之一十二*/
tp[n].sfgz=tp[n].yfgz-tp[n].sk; /*計算實發工資*/
saveflag=1;
n++;
}
return n;
}

/*按職工編號或姓名,查詢記錄*/
void Qur(ZGGZ tp[],int n)
{
int select; /*1:按編號查,2:按姓名查,其他:返回主界面(菜單)*/
char searchinput[20]; /*保存用戶輸入的查詢內容*/
int p=0;
if(n<=0) /*若數組為空*/
{
system("cls");
printf("\n=====>No employee record!\n");
getchar();
return;
}
system("cls");
printf("\n =====>1 Search by number =====>2 Search by name\n");
printf(" please choice[1,2]:");
scanf("%d",&select);
if(select==1) /*按編號查詢*/
{

stringinput(searchinput,10,"input the existing employee number:");
p=Locate(tp,n,searchinput,"num");/*在數組tp中查找編號為searchinput值的元素,並返回該數組元素的下標值*/
if(p!=-1) /*若找到該記錄*/
{
printheader();
printdata(tp[p]);
printf(END);
printf("press any key to return");
getchar();
}
else
Nofind();
getchar();
}
else if(select==2) /*按姓名查詢*/
{
stringinput(searchinput,15,"input the existing employee name:");
p=Locate(tp,n,searchinput,"name");
if(p!=-1)
{
printheader();
printdata(tp[p]);
printf(END);
printf("press any key to return");
getchar();
}
else
Nofind();
getchar();
}
else
Wrong();
getchar();

}

/*刪除記錄:先找到保存該記錄的數組元素的下標值,然後在數組中刪除該數組元素*/
int Del(ZGGZ tp[],int n)
{
int sel;
char findmess[20];
int p=0,i=0;
if(n<=0)
{ system("cls");
printf("\n=====>No employee record!\n");
getchar();
return n;
}
system("cls");
Disp(tp,n);
printf("\n =====>1 Delete by number =====>2 Delete by name\n");
printf(" please choice[1,2]:");
scanf("%d",&sel);
if(sel==1)
{
stringinput(findmess,10,"input the existing employee number:");
p=Locate(tp,n,findmess,"num");
getchar();
if(p!=-1)
{
for(i=p+1;i<n;i++) /*刪除此記錄,後面記錄向前移*/
{
strcpy(tp[i-1].num,tp[i].num);
strcpy(tp[i-1].name,tp[i].name);
tp[i-1].jbgz=tp[i].jbgz;
tp[i-1].jj=tp[i].jj;
tp[i-1].kk=tp[i].kk;
tp[i-1].yfgz=tp[i].yfgz;
tp[i-1].jbgz=tp[i].sk;
tp[i-1].sfgz=tp[i].sfgz;
}
printf("\n==>delete success!\n");
n--;
getchar();
saveflag=1;
}
else
Nofind();
getchar();
}
else if(sel==2) /*先按姓名查詢到該記錄所在的數組元素的下標值*/
{
stringinput(findmess,15,"input the existing employee name:");
p=Locate(tp,n,findmess,"name");
getchar();
if(p!=-1)
{
for(i=p+1;i<n;i++) /*刪除此記錄,後面記錄向前移*/
{
strcpy(tp[i-1].num,tp[i].num);
strcpy(tp[i-1].name,tp[i].name);
tp[i-1].jbgz=tp[i].jbgz;
tp[i-1].jj=tp[i].jj;
tp[i-1].kk=tp[i].kk;
tp[i-1].yfgz=tp[i].yfgz;
tp[i-1].jbgz=tp[i].sk;
tp[i-1].sfgz=tp[i].sfgz;
}
printf("\n=====>delete success!\n");
n--;
getchar();
saveflag=1;
}
else
Nofind();
getchar();
}
return n;
}

/*修改記錄。先按輸入的職工編號查詢到該記錄,然後提示用戶修改編號之外的值,編號不能修改*/
void Modify(ZGGZ tp[],int n)
{
char findmess[20];
int p=0;
if(n<=0)
{ system("cls");
printf("\n=====>No employee record!\n");
getchar();
return ;
}
system("cls");
printf("modify employee recorder");
Disp(tp,n);
stringinput(findmess,10,"input the existing employee number:"); /*輸入並檢驗該編號*/
p=Locate(tp,n,findmess,"num"); /*查詢到該數組元素,並返回下標值*/
if(p!=-1) /*若p!=-1,表明已經找到該數組元素*/
{
printf("Number:%s,\n",tp[p].num);
printf("Name:%s,",tp[p].name);
stringinput(tp[p].name,15,"input new name:");

printf("jbgz:%8.2f,",tp[p].jbgz);
tp[p].jbgz=numberinput("jbgz:");

printf("jiangjin:%8.2f,",tp[p].jj);
tp[p].jj=numberinput("jiangjin:");

printf("koukuan:%8.2f,",tp[p].kk);
tp[p].kk=numberinput("koukuan:");

tp[n].yfgz=tp[n].jbgz+tp[n].jj-tp[n].kk;
tp[n].sk=tp[n].yfgz*0.12;
tp[n].sfgz=tp[n].yfgz-tp[n].sk;
printf("\n=====>modify success!\n");
getchar();
Disp(tp,n);
getchar();
saveflag=1;
}
else
{Nofind();
getchar();
}
return ;
}

/*插入記錄:按職工編號查詢到要插入的數組元素的位置,然後在該編號之後插入一個新數組元素。*/
int Insert(ZGGZ tp[],int n)
{
char ch,num[10],s[10]; /*s[]保存插入點位置之前的編號,num[]保存輸入的新記錄的編號*/
ZGGZ newinfo;
int flag=0,i=0,kkk=0;
system("cls");
Disp(tp,n);
while(1)
{ stringinput(s,10,"please input insert location after the Number:");
flag=0;i=0;
while(i<n) /*查詢該編號是否存在,flag=1表示該編號存在*/
{
if(strcmp(tp[i].num,s)==0) {kkk=i;flag=1;break;}
i++;
}
if(flag==1)
break; /*若編號存在,則進行插入之前的新記錄輸入操作*/
else
{ getchar();
printf("\n=====>The number %s is not existing,try again?(y/n):",s);
scanf("%c",&ch);
if(ch=='y'||ch=='Y')
{continue;}
else
{return n;}
}
}
/*以下新記錄的輸入操作與Add()相同*/

while(1)
{ stringinput(num,10,"input new employee Number:");
i=0;flag=0;
while(i<n) /*查詢該編號是否存在,flag=1表示該編號存在*/
{
if(strcmp(tp[i].num,num)==0) {flag=1;break;}
i++;
}
if(flag==1)
{
getchar();
printf("\n=====>Sorry,The number %s is existing,try again?(y/n):",num);
scanf("%c",&ch);
if(ch=='y'||ch=='Y')
{continue;}
else
{return n;}
}
else
break;
}

strcpy(newinfo.num,num); /*將字元串num拷貝到newinfo.num中*/
stringinput(newinfo.name,15,"Name:");
newinfo.jbgz=numberinput("jbgz:"); /*輸入並檢驗jbgz*/
newinfo.jj=numberinput("jiangjin:"); /*輸入並檢驗jiangjin*/
newinfo.kk=numberinput("koukuan:"); /*輸入並檢驗koukuan*/
newinfo.yfgz=newinfo.jbgz+newinfo.jj-newinfo.kk; /*計算yfgz*/
newinfo.sk=newinfo.yfgz*0.12; /*計算sk*/
newinfo.sfgz=newinfo.yfgz-newinfo.sk;
saveflag=1; /*在main()有對該全局變數的判斷,若為1,則進行存檔操作*/

for(i=n-1;i>kkk;i--) /*從最後一個組織元素開始往向移一個元素位置*/
{ strcpy(tp[i+1].num,tp[i].num);
strcpy(tp[i+1].name,tp[i].name);
tp[i+1].jbgz=tp[i].jbgz;
tp[i+1].jj=tp[i].jj;
tp[i+1].kk=tp[i].kk;
tp[i+1].yfgz=tp[i].yfgz;
tp[i+1].sk=tp[i].sk;
tp[i+1].sfgz=tp[i].sfgz;
}
strcpy(tp[kkk+1].num,newinfo.num); /*在kkk的元素位置後插入新記錄*/
strcpy(tp[kkk+1].name,newinfo.name);
tp[kkk+1].jbgz=newinfo.jbgz;
tp[kkk+1].jj=newinfo.jj;
tp[kkk+1].kk=newinfo.kk;
tp[kkk+1].yfgz=newinfo.yfgz;
tp[kkk+1].sk=newinfo.sk;
tp[kkk+1].sfgz=newinfo.sfgz;
n++;
Disp(tp,n);
printf("\n\n");
getchar();
return n;
}

/*統計公司的員工的工資在各等級的人數*/
void Tongji(ZGGZ tp[],int n)
{
int count10000=0,count5000=0,count2000=0,count0=0;
int i=0;
if(n<=0)
{ system("cls");
printf("\n=====>Not employee record!\n");
getchar();
return ;
}
system("cls");
Disp(tp,n);
i=0;
while(i<n)
{
if(tp[i].sfgz>=10000) {count10000++;i=i+1;continue;} /*實發工資>10000*/
if(tp[i].sfgz>=5000) {count5000++;i=i+1;continue;} /*5000<=實發工資<10000*/
if(tp[i].sfgz>=2000) {count2000++;i=i+1;continue;} /*2000<=實發工資<5000*/
if(tp[i].sfgz<2000) {count0++;i=i+1;continue;} /*實發工資<2000*/

}
printf("\n------------------------------the TongJi result--------------------------------\n");
printf("sfgz>= 10000:%d (ren)\n",count10000);
printf("5000<=sfgz<10000:%d (ren)\n",count5000);
printf("2000<=sfgz< 5000:%d (ren)\n",count2000);
printf("sfgz< 2000:%d (ren)\n",count0);
printf("-------------------------------------------------------------------------------\n");
printf("\n\npress any key to return");
getchar();
}

/*利用冒泡排序法實現數組的按實發工資欄位的降序排序,從高到低*/
void Sort(ZGGZ tp[],int n)
{
int i=0,j=0,flag=0;
ZGGZ newinfo;
if(n<=0)
{ system("cls");
printf("\n=====>Not employee record!\n");
getchar();
return ;
}
system("cls");
Disp(tp,n); /*顯示排序前的所有記錄*/
for(i=0;i<n;i++)
{
flag=0;
for(j=0;j<n-1;j++)
if((tp[j].sfgz<tp[j+1].sfgz))
{ flag=1;
strcpy(newinfo.num,tp[j].num); /*利用結構變數newinfo實現數組元素的交換*/
strcpy(newinfo.name,tp[j].name);
newinfo.jbgz=tp[j].jbgz;
newinfo.jj=tp[j].jj;
newinfo.kk=tp[j].kk;
newinfo.yfgz=tp[j].yfgz;
newinfo.sk=tp[j].sk;
newinfo.sfgz=tp[j].sfgz;

strcpy(tp[j].num,tp[j+1].num);
strcpy(tp[j].name,tp[j+1].name);
tp[j].jbgz=tp[j+1].jbgz;
tp[j].jj=tp[j+1].jj;
tp[j].kk=tp[j+1].kk;
tp[j].yfgz=tp[j+1].yfgz;
tp[j].sk=tp[j+1].sk;
tp[j].sfgz=tp[j+1].sfgz;

strcpy(tp[j+1].num,newinfo.num);
strcpy(tp[j+1].name,newinfo.name);
tp[j+1].jbgz=newinfo.jbgz;
tp[j+1].jj=newinfo.jj;
tp[j+1].kk=newinfo.kk;
tp[j+1].yfgz=newinfo.yfgz;
tp[j+1].sk=newinfo.sk;
tp[j+1].sfgz=newinfo.sfgz;
}
if(flag==0) break;/*若標記flag=0,意味著沒有交換了,排序已經完成*/
}
Disp(tp,n); /*顯示排序後的所有記錄*/
saveflag=1;
printf("\n =====>sort complete!\n");

}

/*數據存檔,若用戶沒有專門進行此操作且對數據有修改,在退出系統時, 會提示用戶存檔*/
void Save(ZGGZ tp[],int n)
{
FILE* fp;
int i=0;
fp=fopen("c:\\zggz","wb");/*以只寫方式打開二進制文件*/
if(fp==NULL) /*打開文件失敗*/
{
printf("\n=====>open file error!\n");
getchar();
return ;
}
for(i=0;i<n;i++)
{
if(fwrite(&tp[i],sizeof(ZGGZ),1,fp)==1)/*每次寫一條記錄或一個結構數組元素至文件*/
{
continue;
}
else
{
break;
}
}
if(i>0)
{
getchar();
printf("\n\n=====>save file complete,total saved's record number is:%d\n",i);
getchar();
saveflag=0;
}
else
{system("cls");
printf("the current link is empty,no employee record is saved!\n");
getchar();
}
fclose(fp); /*關閉此文件*/
}

void main()
{
ZGGZ gz[N]; /*定義ZGGZ結構體*/
FILE *fp; /*文件指針*/
int select; /*保存選擇結果變數*/
char ch; /*保存(y,Y,n,N)*/
int count=0; /*保存文件中的記錄條數(或元素個數)*/

fp=fopen("C:\\zggz","ab+");
/*以追加方式打開二進制文件c:\zggz,可讀可寫,若此文件不存在,會創建此文件*/
if(fp==NULL)
{
printf("\n=====>can not open file!\n");
exit(0);
}

while(!feof(fp))
{
if(fread(&gz[count],sizeof(ZGGZ),1,fp)==1) /*一次從文件中讀取一條職工工資記錄*/
count++;
}
fclose(fp); /*關閉文件*/
printf("\n==>open file sucess,the total records number is : %d.\n",count);
getchar();
menu();
while(1)
{
system("cls");
menu();
printf("\n Please Enter your choice(0~9):"); /*顯示提示信息*/
scanf("%d",&select);

if(select==0)
{
if(saveflag==1) /*若對數組的數據有修改且未進行存檔操作,則此標志為1*/
{ getchar();
printf("\n==>Whether save the modified record to file?(y/n):");
scanf("%c",&ch);
if(ch=='y'||ch=='Y')
Save(gz,count);
}
printf("\n===>thank you for useness!");
getchar();
break;
}

switch(select)
{
case 1:count=Add(gz,count);break; /*增加職工工資記錄*/
case 2:count=Del(gz,count);break; /*刪除職工工資記錄*/
case 3:Qur(gz,count);break; /*查詢職工工資記錄*/
case 4:Modify(gz,count);break; /*修改職工工資記錄*/
case 5:count=Insert(gz,count);break; /*插入職工工資記錄*/
case 6:Tongji(gz,count);break; /*統計職工工資記錄*/
case 7:Sort(gz,count);break; /*排序職工工資記錄*/
case 8:Save(gz,count);break; /*保存職工工資記錄*/
case 9:system("cls");Disp(gz,count);break; /*顯示職工工資記錄*/
default: Wrong();getchar();break; /*按鍵有誤,必須為數值0-9*/
}
}
}

C. C語言程序――職工信息管理系統

貌似這么大的系統很難有人幫你做,這兒有個學生管理系統,稍加修改就成了~

/*學生成績管理系統*/
/*系統版本號:2006build 400.0201b*/
/*內核:adobo*/

#include <iostream.h>
#include <string.h>
#include <stdlib.h>
#include <conio.h>
#define N 32
int total=N; //定義全局變數,學生的總個數total
struct student
{
int xh;
char xm[6];
int yw;
int sx;
int yy;
int jsj;
int zf;
};
struct student stu[N],temp;

char get_key() //得到用戶按鍵值
{
char key;
while (1)
{
if (kbhit())
{
key=getch();
break;
}
}
return key;
}

void wait() //按鍵等待,相當於PAUSE的功能
{
char key;
while (1)
{
if (kbhit())
{
key=getche();
break;
}
}
}

int id_search(int num) //查詢該學號學生的數組編號
{
int i;
for (i=0;i<total;i++)
if (stu[i].xh==num) break;
return i;
}
void show_one(int id) //顯示某學號學生的信息
{
cout<<endl;
cout<<"--------------------------------------------------------------"<<endl;
cout<<"⑴學號:"<<stu[id].xh<<endl;
cout<<"⑵姓名:"<<stu[id].xm<<endl;
cout<<"⑶語文:"<<stu[id].yw<<endl;
cout<<"⑷數學:"<<stu[id].sx<<endl;
cout<<"⑸英語:"<<stu[id].yy<<endl;
cout<<"⑹計算機:"<<stu[id].jsj<<endl;
cout<<"⑺總分:"<<stu[id].zf<<endl;
cout<<"--------------------------------------------------------------"<<endl;
}
void show_all() //顯示所有學生的信息
{
int i;
cout<<"--------------------------------------------------------------"<<endl;
cout<<"學號\t"<<"姓名\t"<<"語文\t"<<"數學\t"<<"英語\t"<<"計算機\t"<<"總分"<<endl;
for (i=0;i<total;i++)
cout<<stu[i].xh<<'\t'<<stu[i].xm<<'\t'<<stu[i].yw<<'\t'<<stu[i].sx<<'\t'<<stu[i].yy<<'\t'<<stu[i].jsj<<'\t'<<stu[i].zf<<endl;

cout<<"--------------------------------------------------------------"<<endl;
}
void cj_input() //輸入學生的成績
{
int i;
cout<<endl;
cout<<"--------------------------------------------------------------"<<endl;
cout<<"※學生成績信息錄入菜單※"<<endl;
cout<<"◎請完整輸入學生個人信息"<<endl;
cout<<"◎學號項鍵入0可結束編輯"<<endl;
cout<<"--------------------------------------------------------------"<<endl;
for (i=0;i<N;i++)
{
cout<<"請輸入第"<<i+1<<"個學生的學號:";
cin>>stu[i].xh;
if (stu[i].xh==0) return; //用戶輸入0時,結束編輯
cout<<"請輸入第"<<i+1<<"個學生的姓名:";
cin>>stu[i].xm;
cout<<"請輸入第"<<i+1<<"個學生的語文成績:";
cin>>stu[i].yw;
cout<<"請輸入第"<<i+1<<"個學生的數學成績:";
cin>>stu[i].sx;
cout<<"請輸入第"<<i+1<<"個學生的英語成績:";
cin>>stu[i].yy;
cout<<"請輸入第"<<i+1<<"個學生的計算機成績:";
cin>>stu[i].jsj;
stu[i].zf=stu[i].yw+stu[i].sx+stu[i].yy+stu[i].jsj;
cout<<"---------------提示:學號項鍵入 0可結束編輯----------------"<<endl;
}
}
void auto_input() //自動輸入學生的成績,為測試方便而設
{
int i;
for (i=0;i<N;i++)
{
stu[i].xh=(i+1);
strcpy(stu[i].xm,"ayc");
stu[i].yw=rand()%100;
stu[i].sx=rand()%100;
stu[i].yy=rand()%100;
stu[i].jsj=rand()%100;
stu[i].zf=stu[i].yw+stu[i].sx+stu[i].yy+stu[i].jsj;
}
}
void cj_modify() //學生成績的修改
{
int num,id;
char choice;
cout<<endl;
cout<<"--------------------------------------------------------------"<<endl;
cout<<"※學生成績信息修改菜單※"<<endl;
cout<<"◎請確認已經錄入學生信息"<<endl;
cout<<"◎學號不存在即會返回菜單"<<endl;
cout<<"--------------------------------------------------------------"<<endl;
cout<<"請輸入待修改的學生的學號:";
cin>>num;
id=id_search(num);
if (id==total)
{
cout<<endl;
cout<<"-〖系統提示〗------------------------"<<endl;
cout<<" 錯誤!無該學號學生信息!"<<endl;
cout<<"-------------------------------------"<<endl;
wait();
return;
}
cout<<"選擇要修改的項目的編號,其它值返回:";
show_one(id);
choice=get_key();
if (choice=='1')
{cout<<"輸入新的學號:";
cin>>stu[id].xh;
}
else if (choice=='2')
{cout<<"輸入新的姓名:";
cin>>stu[id].xm;
}
else if (choice=='3')
{cout<<"輸入新的語文成績:";
cin>>stu[id].yw;
}
else if (choice=='4')
{cout<<"輸入新的數學成績:";
cin>>stu[id].sx;
}
else if (choice=='5')
{cout<<"輸入新的英語成績:";
cin>>stu[id].yy;
}
else if (choice=='6')
{
cout<<"輸入新的計算機成績:";
cin>>stu[id].jsj;
}
stu[id].zf=stu[id].yw+stu[id].sx+stu[id].yy+stu[id].jsj;
if (choice=='1'||choice=='2'||choice=='3'||choice=='4'||choice=='5'||choice=='6')
{
cout<<"-〖系統提示〗------------------------"<<endl;
cout<<" 已成功修改該學生信息!";
cout<<"-------------------------------------"<<endl;
show_one(id);
wait();
}

}

void cj_delete() //學生信息的刪除
{
int num,id,i;
cout<<endl;
cout<<"--------------------------------------------------------------"<<endl;
cout<<"※學生成績信息刪除菜單※"<<endl;
cout<<"◎請確認已經錄入學生信息"<<endl;
cout<<"◎學號不存在即會返回菜單"<<endl;
cout<<"--------------------------------------------------------------"<<endl;
cout<<"請輸入要刪除的學生學號:";
cin>>num;
id=id_search(num);
if (id==total)
{
cout<<endl;
cout<<"-〖系統提示〗------------------------"<<endl;
cout<<" 錯誤!無該學號學生信息!"<<endl;
cout<<"-------------------------------------"<<endl;
wait();
return;
}
show_one(id);
for (i=id;i<total;i++)
stu[i]=stu[i+1];
total=total-1;
cout<<endl;
cout<<" 學 生 成 績 顯 示 菜 單 "<<endl;
show_all();
cout<<endl;
cout<<"-〖系統提示〗------------------------"<<endl;
cout<<" 已成功刪除該學生的信息!"<<endl;
cout<<"-------------------------------------"<<endl;

wait();

}
void func_1() //錄入編輯菜單
{
char choice;
while(1)
{
system("cls");
cout<<" 學 生 成 績 管 理 系 統 "<<endl;
cout<<"=============================================================="<<endl;
cout<<" ⑴錄入成績 "<<endl;
cout<<" ⑵修改成績 "<<endl;
cout<<" ⑶刪除成績 "<<endl;
cout<<" ⑷返回上級 "<<endl;
cout<<"--------------------------------------------------------------"<<endl;
cout<<" 鍵入相應數字項進行功能選擇(1-4) "<<endl;
choice=get_key();
if (choice=='1') cj_input(); //這里為測試方便,自動輸入了成績,注意改回
else if (choice=='2') cj_modify();
else if (choice=='3') cj_delete();
else if (choice=='4') break;
}
}
void show_person() //個人成績查詢
{
int num,id;
cout<<endl;
cout<<"--------------------------------------------------------------"<<endl;
cout<<"※學生成績信息修改菜單※"<<endl;
cout<<"◎請確認已經錄入學生信息"<<endl;
cout<<"◎學號不存在即會返回菜單"<<endl;
cout<<"--------------------------------------------------------------"<<endl;
cout<<"請輸入要查詢的學生學號:";
cin>>num;
id=id_search(num);
if (id==total)
{
cout<<endl;
cout<<"-〖系統提示〗------------------------"<<endl;
cout<<" 錯誤!無該學號學生信息!"<<endl;
cout<<"-------------------------------------"<<endl;
wait();
return;
}

show_one(id);
wait();
}
void cj_pm() //生成名次,即按照總分輸出
{
int i,j;
for (j=0;j<total;j++)
{
for (i=0;i<total-j;i++)
{
if (stu[i].zf<stu[i+1].zf)
{
temp=stu[i];
stu[i]=stu[i+1];
stu[i+1]=temp;
}
}
}
cout<<endl;
cout<<" 學 生 成 績 顯 示 (按 總 分) "<<endl;
show_all();
wait();
}
void cj_xh() //按照學號輸出
{
int i,j;
for (j=0;j<total;j++)
{
for (i=0;i<total-j;i++)
{
if (stu[i].xh>stu[i+1].xh)
{
temp=stu[i];
stu[i]=stu[i+1];
stu[i+1]=temp;
}
}
}
cout<<endl;
cout<<" 學 生 成 績 顯 示 (按 學 號) "<<endl;
show_all();
wait();
}

void cj_bk() //生成補考名單
{

int i;
cout<<" 補 考 名 單 "<<endl;
cout<<"=============================================================="<<endl;
cout<<"學號\t"<<"姓名\t"<<"語文\t"<<"數學\t"<<"英語\t"<<"計算機\t"<<endl;
for (i=0;i<total;i++)
{
if ((stu[i].yw<60)||(stu[i].sx<60)||(stu[i].yy<60)||(stu[i].jsj<60))
{
cout<<stu[i].xh<<'\t'<<stu[i].xm<<'\t';
if(stu[i].yw<60) cout<<"補考\t";
else cout<<'\t';
if(stu[i].sx<60) cout<<"補考\t";
else cout<<'\t';
if(stu[i].yy<60) cout<<"補考\t";
else cout<<'\t';
if(stu[i].jsj<60) cout<<"補考\t"<<endl;
else cout<<endl;
}
}

cout<<"--------------------------------------------------------------"<<endl;
wait();

}

void func_2() //成績查詢統計
{
char choice;
while(1)
{
system("cls");
cout<<" 學 生 成 績 管 理 系 統 "<<endl;
cout<<"=============================================================="<<endl;
cout<<" ⑴個人成績查詢 "<<endl;
cout<<" ⑵班級排名查詢 "<<endl;
cout<<" ⑶生成補考名單 "<<endl;
cout<<" ⑷返回上級 "<<endl;
cout<<"--------------------------------------------------------------"<<endl;
cout<<" 鍵入相應數字項進行功能選擇(1-4) "<<endl;
choice=get_key();
if (choice=='1') show_person();
else if (choice=='2') cj_pm();
else if (choice=='3') cj_bk();
else if (choice=='4') break;
}
}
void func_3() //成績列印與輸出
{
char choice;
while(1)
{
system("cls");
cout<<" 學 生 成 績 管 理 系 統 "<<endl;
cout<<"=============================================================="<<endl;
cout<<" ⑴按學號輸出 "<<endl;
cout<<" ⑵按總分輸出 "<<endl;
cout<<" ⑶返回上級 "<<endl;
cout<<endl;
cout<<"--------------------------------------------------------------"<<endl;
cout<<" 鍵入相應數字項進行功能選擇(1-3) "<<endl;
choice=get_key();
if (choice=='1') cj_xh();
else if (choice=='2') cj_pm();
else if (choice=='3') break;
}
}

int main() //主函數開始
{
char choice;
while(1)
{
system("cls");
cout<<" 學 生 成 績 管 理 系 統 "<<endl;
cout<<"=============================================================="<<endl;
cout<<" ⑴成績錄入與編輯 "<<endl;
cout<<" ⑵成績查詢與統計 "<<endl;
cout<<" ⑶成績列印與輸出 "<<endl;
cout<<" ⑷退出本管理系統 "<<endl;
cout<<"--------------------------------------------------------------"<<endl;
cout<<" 鍵入相應數字項進行功能選擇(1-4) "<<endl;
choice=get_key();
if (choice=='1') func_1();
else if (choice=='2') func_2();
else if (choice=='3') func_3();
else if (choice=='4') break;
}
system("cls"); //版權信息
cout<<"***************[關於本系統]***************"<<endl;

D. C語言程序設計題:職工工資管理系統

你要的是命令行還是圖形界面?
如果是命令行可以考慮下
如果是圖形界面的話200分少了點,看看吧.
--------------------------------------------
既然不是圖形界面,代碼就簡單.不過也有近300行.可能有些地方不怎麼簡潔..
你用的時候,把注釋"delete this line"那行所在的代碼刪除或修改就OK了.
如果看不懂請給我留言,我發一份帶詳細注釋的代碼給你.
--------------------------------------------

/*
Microsoft Visual C++ .NET編譯通過
by 做他@07.12.29
*/

#include "stdafx.h"
#include "iostream"
#include "string"
#include "list"
#include "cassert"
using namespace std;

/*
編號、姓名、部門、應付工資、保險、稅金、實付工資。
其中實付工資由公式計算得到:實付工資=應付工資 - 保險- 稅金
*/
struct employee{
string m_num;//編號
string m_name;//姓名
string m_dep;//部門
double m_salary;//應付工資
double m_insurance;//保險
double m_tax;//稅金
};

/*
(1)錄入:輸入職工數據,其中「實付工資」通過計算得到;
(2)刪除:刪除指定的職工信息(輸入姓名,若找到則刪除該信息)
(3) 修改:允許對已經錄入的數據重新進行編輯、修改;
(4) 顯示:顯示全體職工數據;
(5)查詢:
a. 輸入職工姓名,顯示該職工的全部數據;
b. 輸入某部門值,顯示該部門職工的數據、工資總額、平均工資。
(6) 退出程序。
*/

list<employee> emps;

int _tmain(int argc, _TCHAR* argv[])
{
void print(const employee &e);
void input();
void del();
void mod();
void show_all();
void show_name();
void show_dep();

cout<<"簡易職工薪水管理程序 by 做他\n";// delete this line
cout<<"版權沒有 請隨意復制或修改任何代碼\n";//delete this line

cout<<"請選擇操作:1.錄入 2.刪除 3.修改 4.查詢 5.顯示所有員工 6.退出 :";
int choose=0;
cin>>choose;
assert(!cin.fail());
while (choose!=6)
{
if (choose==1) input();
if (choose==2) del();
if (choose==3) mod();
if (choose==4)
{
int choice=0;
cout<<"請選擇操作 1.按姓名查詢 2.按部門查詢 3.退出:";
cin>>choice;
if (choice==1) show_name();
if (choice==2) show_dep();
if (choice==3)
{
cout<<"請選擇操作:1.錄入 2.刪除 3.修改 4.查詢 5.顯示所有員工 6.退出 :";
cin>>choose;
assert(!cin.fail());
continue;
}
}
if (choose==5) show_all();
cout<<"請選擇操作:1.錄入 2.刪除 3.修改 4.查詢 5.顯示所有員工 6.退出 :";
cin>>choose;
assert(!cin.fail());
}
return 0;
}

void print(const employee &e)
{
cout<<"編號:"<<e.m_num<<endl;
cout<<"姓名:"<<e.m_name<<endl;
cout<<"部門:"<<e.m_dep<<endl;
cout<<"保險:"<<e.m_insurance<<endl;
cout<<"稅金:"<<e.m_tax<<endl;
cout<<"應付工資:"<<e.m_salary<<endl;
cout<<"實付工資:"<<e.m_salary-e.m_insurance-e.m_tax<<endl;
}

void input()
{
string num,name,dep;
double salary,ins,tax;
cout<<"請輸入員工編號:";
cin>>num;
cout<<"請輸入員工姓名:";
cin>>name;
cout<<"請輸入員工部門:";
cin>>dep;
cout<<"請輸入員工保險:";
cin>>ins;
assert(!cin.fail());
cout<<"請輸入員工稅金:";
cin>>tax;
assert(!cin.fail());
cout<<"請輸入員工應付工資:";
cin>>salary;
assert(!cin.fail());
employee temp;
temp.m_dep=dep;
temp.m_insurance=ins;
temp.m_name=name;
temp.m_num=num;
temp.m_salary=salary;
temp.m_tax=tax;
emps.push_back(temp);
cout<<"員工錄入操作完畢.\n";
}

void del()
{
if (emps.size()==0)
{
cout<<"沒有員工記錄.\n";
return;
}
string name;
bool isfind=false;
cout<<"請輸入要刪除的員工姓名:";
cin>>name;
list<employee>::iterator iter;
for (iter=emps.begin();iter!=emps.end();iter++)
{
if (iter->m_name==name)
{
isfind=true;
emps.erase(iter);
cout<<"姓名為\""<<name<<"\"的員工記錄已刪除.\n";
return;
}
}
if (!isfind)
{
cout<<"沒有找到姓名為\""<<name<<"\"的員工.\n";
return;
}
}

void mod()
{
if (emps.size()==0)
{
cout<<"員工記錄為空.\n";
return;
}
bool isfind=false;
string name;
cout<<"請輸入要修改的員工姓名:";
cin>>name;
list<employee>::iterator iter;
for (iter=emps.begin();iter!=emps.end();iter++)
{
if (iter->m_name==name)
{
isfind=true;
cout<<"姓名為\""<<name<<"\"的員工記錄已找到.\n";
break;
}
}
if (isfind)
{
string num,name,dep;
double tax,ins,salary;
print(*iter);
cout<<endl;
cout<<"請輸入新的員工編號:";
cin>>num;
cout<<"請輸入新的員工姓名:";
cin>>name;
cout<<"請輸入新的員工部門:";
cin>>dep;
cout<<"請輸入新的員工保險:";
cin>>ins;
assert(!cin.fail());
cout<<"請輸入新的員工稅金:";
cin>>tax;
assert(!cin.fail());
cout<<"請輸入新的員工工資:";
cin>>salary;
assert(!cin.fail());
iter->m_dep=dep;
iter->m_insurance=ins;
iter->m_name=name;
iter->m_num=num;
iter->m_salary=salary;
iter->m_tax=tax;
cout<<"1 員工記錄被成功修改.\n";
}
else
{
cout<<"沒有找到姓名為\""<<name<<"\"的員工記錄.\n";
}
}

void show_all()
{
if (emps.size()==0)
{
cout<<"員工記錄為空.\n";
return;
}
cout<<"顯示全體員工數據:\n";
cout<<"--------------------\n";
list<employee>::iterator iter;
for(iter=emps.begin();iter!=emps.end();iter++)
{
cout<<endl;
print(*iter);
cout<<endl;
}
cout<<"--------------------\n";
}

void show_name()
{
if (emps.size()==0)
{
cout<<"員工記錄為空.\n";
return;
}
bool isfind=false;
string name;
cout<<"請輸入要查詢的員工姓名:";
cin>>name;
list<employee>::iterator iter;
for(iter=emps.begin();iter!=emps.end();iter++)
{
if (iter->m_name==name)
{
isfind=true;
cout<<"姓名為\""<<name<<"\"的員工記錄已找到.\n";
print(*iter);
break;
}
}
if (!isfind)
{
cout<<"沒有找到姓名為\""<<name<<"\"的員工.\n";
return;
}
}

void show_dep()
{
if (emps.size()==0)
{
cout<<"員工記錄為空.\n";
return;
}
double isfind=0.00;
double total_salary=0.00;
string dep;
cout<<"請輸入要查詢的部門名稱:";
cin>>dep;
cout<<"部門["<<dep<<"]的員工信息:\n";
cout<<"--------------------\n\n";
list<employee>::iterator iter;
for(iter=emps.begin();iter!=emps.end();iter++)
{
if (iter->m_dep==dep)
{
isfind++;
total_salary+=iter->m_salary;
print(*iter);
cout<<endl;
continue;
}
}
cout<<"--------------------\n";
if (isfind==0)
{
cout<<"沒有找到名稱為["<<dep<<"]的部門.\n";
}
else
{
cout<<"部門["<<dep<<"]工資統計:\n";
cout<<"工資總額:"<<total_salary<<endl;
cout<<"平均工資:"<<total_salary/isfind<<endl;
}
}

E. 用C語言設計職工工資管理系統

#include<iostream.h>
#include<stdlib.h>
#include<string.h>
#include<iomanip.h>
using namespace std;
#define OK 1
#define ERROR 0
typedef struct LNode{
char num[20];
char name[20];
double basic;
double reward;
double total;
struct LNode *next;
}LNode,*LinkList; int initlist(LinkList &L)
{ L=(LinkList)malloc(sizeof(LNode));
L->next=NULL;
return OK;
} int DisplayInfo(LinkList L)
{
LinkList p=L->next;
if(!p)
{
cout<<"當前無記錄!"<<endl;
return ERROR;
}
cout<<"編號"<<setw(12)<<"姓名"<<setw(12)<<"基本工資"<<setw(9)<<"獎金"<<setw(12)<<"工資總額"<<endl; while(p!=NULL)
{
cout<<p->num<<setw(9)<<p->name<<setw(8)<<p->basic<<setw(12)<<p->reward<<setw(12)<<p->total<<endl;
p=p->next;
}
cout<<'\n'<<'\n';
return OK;
} int InputInfo(LinkList &L)
{
LinkList p; p=(LinkList)malloc(sizeof(LNode));
cout<<"請輸入職工工資信息:(格式如:2001001 james 1980 600 )"<<endl;
cin>>p->num;
cin>>p->name;
cin>>p->basic;
cin>>p->reward;
p->total=p->basic+p->reward;
p->next=L->next;
L->next=p; return OK;
}int DeleteByCode(LinkList &L,char key[])
{
LinkList p=L,q;
while(p->next!=NULL)
{
if(strcmp(p->next->num,key)==0)
{
q=p->next;
p->next=q->next;
free(q);
return OK;
}
p=p->next;
}
return ERROR;} int Search(LinkList L,int tag)
{
LinkList p=L->next;
if(tag==1)
{
char num[20];
cout<<"請輸入要查找職工編號號:"<<endl;
cin>>num;
while(p)
{
if(strcmp(p->num,num)==0)
{
cout<<"編號"<<setw(12)<<"姓名"<<setw(12)<<"基本工資"<<setw(9)<<"獎金"<<setw(12)<<"工資總額"<<endl;
cout<<p->num<<setw(9)<<p->name<<setw(8)<<p->basic<<setw(12)<<p->reward<<setw(12)<<p->total<<endl;
cout<<'\n';
return OK;
}
p=p->next;
}
}
else if(tag==2)
{
char name[20];
cout<<"請輸入要查找的姓名:"<<endl;
cin>>name;
while(p)
{
if(strcmp(p->name,name)==0)
{
cout<<"編號"<<setw(12)<<"姓名"<<setw(12)<<"基本工資"<<setw(9)<<"獎金"<<setw(12)<<"工資總額"<<endl;
cout<<p->num<<setw(9)<<p->name<<setw(8)<<p->basic<<setw(12)<<p->reward<<setw(12)<<p->total<<endl;
cout<<'\n';
return OK;
}
p=p->next;
}
}
else
cout<<"輸入錯誤!"<<endl;
return ERROR;}
int Sort(LinkList &L)
{
LinkList p;

LinkList q,min,w=L;
for(p=L->next;p->next;p=p->next)
{
min=p;
for(q=p->next;q;q=q->next) if(min->total>q->total)
min=q; if(min!=p)
{ strcpy(w->num,p->num);
strcpy(w->name,p->name);
w->basic=p->basic;
w->reward=p->reward;
w->total=p->total;
strcpy(p->num,min->num);
strcpy(p->name,min->name);
p->basic=min->basic;
p->reward=min->reward;
p->total=min->total;
strcpy(min->num,w->num);
strcpy(min->name,w->name);
min->basic=w->basic;
min->reward=w->reward;
min->total=w->total; }
}
return OK;
}
int change(LinkList &L)
{
LinkList p=L->next;

char q[20];
cout<<"請輸入要修改的職工編號號:"<<endl;
cin>>q;
while(p)
{
if(strcmp(p->num,q)==0)
{
cout<<"編號"<<setw(12)<<"姓名"<<setw(12)<<"基本工資"<<setw(9)<<"獎金"<<setw(12)<<"工資總額"<<endl;
cout<<p->num<<setw(9)<<p->name<<setw(8)<<p->basic<<setw(12)<<p->reward<<setw(12)<<p->total<<endl;
cout<<"請重新輸入該職工的工資信息:"<<endl;
cin>>p->basic;
cin>>p->reward;
cout<<'\n';
return OK;
}
p=p->next;
}
}
int Menu(LinkList &S)
{
int sign=1;
while(sign)
{
int i;
cout<<"請選擇要進行的操作:1:插入 2:刪除 3:輸出 4:查找 5:排序 6:修改 0:退出"<<endl;
cin>>i;
if(i==1)
{ if(InputInfo(S))
cout<<"操作成功!"<<endl;
cout<<'\n';
}
else if(i==2)
{
char num[20];
cout<<"請輸入要刪除的職工編號:"<<endl;
cin>>num; if(DeleteByCode(S,num))
cout<<"操作成功!"<<endl; else
{
cout<<"此編號不存在!"<<endl;
cout<<'\n';
}
}
else if(i==3)
DisplayInfo(S);
else if(i==4)
{
int tag;
cout<<"1:按編號查找 2:按姓名查找 "<<endl;
cin>>tag;
if(!Search(S,tag))
cout<<"未找到!"<<endl;
cout<<'\n'; }
else if(i==5)
{

if(Sort(S));
cout<<"操作成功!"<<endl;
cout<<'\n';
}
else if(i==6)
{
if(change(S))
cout<<"修改成功!"<<endl;
} else if(i==0)
sign=0;
else
cout<<"輸入有誤,請重新輸入!"<<endl;
cout<<'\n';
}
return OK;
}
int main()
{
LinkList S;
initlist(S);
Menu(S);
return OK;} 已經調試無bug 有問題的話聯系我。

F. c語言課程設計——職工信息管理系統

#include<stdio.h>
#include<string.h>
int main()
{
void TestOnLineTeacherManage(); //聲明教師信息管理函數
void TestOnLineSelfManage();//聲明個人管理函數
int n;
printf(「0教師管理,1個人管理」);
scanf(「%d」,&n);
If (n==0)
TestOnLineTeacherManage();
else
TestOnLineSelfManage();//選擇教師管理或者個人信息管理
Return 0;
}

Void TestOnLineTeacherManage() //教師信息管理函數
{
Struct TestOnLineTeacher
{
Int Tnum;
Char Tname[20];
Char Tsex;
Char Ttel[20];
}Teacher[100]; //定義一個結構體
void add(); //定義教師信息添加
void del(); //定義教師信息刪除
Void modify(); //定義教師信息修改
int a;
Printf(「1添加2刪除3修改」);
Scanf (「%d」,&a);
Switch(a)
{
Case1:add();break;
Case2:del();break;
Case3:modify();break;
Default:break;
}//選擇功能
}

Void add() //教師信息添加函數,若添加Teacher[i]
{
printf(「輸入工號」);
Scanf(「%d」,&Teacher[i].Tnum);
printf(「輸入姓名」);
Scanf(「%s」,&Teacher[i].Tname);
printf(「輸入性別f女m男」);
Scanf(「%c」,&Teacher[i].Tsex);
printf(「輸入電話」);
Scanf(「%s」,&Teacher[i].Ttel);
}

Void del() //教師信息刪除函數,若刪除Teacher[i]
{
Teacher[i-1]=Teacher[i+1];
Free(Teacher[i]);
}

Void modify() //教師信息修改函數,若修改Teacher[i]
{
Int t;
Int num;
Char name[20];
Char sex;
Char tel[20];
Printf(「修改選項1工號2姓名3性別4電話」);
Scanf(「%d」,&t);
Switch(t)
{
Case1:scanf(「%d」,&num);Teacher[i].Tnum=num;break;
Case2:scanf(「%s」,&name);strcpy(Teacher[i].Tname,name);break;
Case3:scanf(「%c」,&sex);Teacher[i].Tsex=sex;break;
Case4:scanf(「%s」,&tel);strcpy(Teacher[i].Ttel,tel);break;
Default:break;
}//選擇修改項並修改
}

Void TestOnLineSelfManage() //個人信息管理
{
Struct TestOnLineManage
{
Int Mnum;
Char Mname[20];
Char Msex;
Char Mtel[20];
}Manage[1]; //定義一個結構體
Int b;
Int num;
Char name[20];
Char sex;
Char tel[20];
Printf(「修改選項1工號2姓名3性別4電話」);
Scanf(「%d」,&b);
Switch(t)
{
Case1:scanf(「%d」,&num);Manage[1].Mnum=num;break;
Case2:scanf(「%s」,&name);strcpy(Manage[1].Mname,name);break;
Case3:scanf(「%c」,&sex);Manage[1].Msex=sex;break;
Case4:scanf(「%s」,&tel);strcpy(Manage[1].Mtel,tel);break;
Default:break;
}//選擇修改項並修改
}

G. 員工信息管理系統,C語言做

以下是我的程序,剛編好的,剛好符合你的要求,看看吧,對你應該有幫助:
呵呵
#include
#include
#include
#include
#define N 100
struct employee
{
int num;
char name[10];
char sex;
int age;
char xueli[30];
int wage;
char addr[30];
long int tel;
}em[100]; /*定義一個結構體*/

void menu();
void input();
void save(int);
void display();
void del();
void add();
void search();
void search_num();
void search_xueli();
void search_tel();
void modify(); /*定義各函數*/

void menu() /*菜單函數*/
{
printf(" ☆☆☆計算機科學與技術學系☆☆☆\n");
printf("\n");
printf(" ∮08802班 關麗霞∮\n");
printf("\n");
printf(" ******************職工信息管理****************\n");
printf(" 1.錄入職工信息");
printf(" 2.瀏覽職工信息\n");
printf(" 3.查詢職工信息");
printf(" 4.刪除職工信息\n");
printf(" 5.添加職工信息");
printf(" 6.修改職工信息\n");
printf(" 7.退出\n");
printf(" ********************謝謝使用******************\n");
printf("\n");
printf("\n");

}

void main()
{
menu(); /*調用菜單函數*/
int n,flag;
char a;
do
{
printf("請選擇你需要操作的步驟(1--7):\n");
scanf("%d",&n);
if(n>=1&&n<=7)
{
flag=1;
break;
}
else
{
flag=0;
printf("您輸入有誤,請重新選擇!");
}
}
while(flag==0);
while(flag==1)
{
switch(n)
{
case 1:printf(" ◆◆◆輸入職工信息◆◆◆\n");printf("\n");input();break;
case 2:printf(" ◆◆◆瀏覽職工信息◆◆◆\n");printf("\n");display();break;
case 3:printf(" ◆◆◆按職工號查詢職工信息◆◆◆\n");printf("\n");search();break;
case 4:printf(" ◆◆◆刪除職工信息◆◆◆\n");printf("\n");del();break;
case 5:printf(" ◆◆◆添加職工信息◆◆◆\n");printf("\n");add();break;
case 6:printf(" ◆◆◆修改職工信息◆◆◆\n");printf("\n");modify();break;
case 7:exit(0);break;
default :break;
}
getchar();
printf("\n");
printf("是否繼續進行(y or n):\n");
scanf("%c",&a);
if(a=='y')
{
flag=1;
system("cls"); /*清屏*/
menu(); /*調用菜單函數*/
printf("請再次選擇你需要操作的步驟(1--6):\n");
scanf("%d",&n);
printf("\n");
}

else
exit(0);
}

}

void input() /*錄入函數*/
{
int i,m;
printf("請輸入需要創建信息的職工人數(1--100):\n");
scanf("%d",&m);
for (i=0;i<m;i++)
{
printf("職工號: ");
srand((int)time(0));
em[i].num=rand()%10000+20000000;
if(em[i].num!=em[i-1].num)
printf("%8d ",em[i].num);
printf("\n");
printf("請輸入姓名: ");
scanf("%s",em[i].name);
getchar();
printf("請輸入性別(f--女 m--男): ");
scanf("%c",&em[i].sex);
printf("請輸入年齡: ");
scanf("%d",&em[i].age);
printf("請輸入學歷: ");
scanf("%s",em[i].xueli);
printf("請輸入工資: ");
scanf("%d",&em[i].wage);
printf("請輸入住址: ");
scanf("%s",em[i].addr);
printf("請輸入電話: ");
scanf("%d",&em[i].tel);
printf("\n");

}
printf("\n創建完畢!\n");
save(m);
}

void save(int m) /*保存文件函數*/
{
int i;
FILE*fp;
if ((fp=fopen("employee_list","wb"))==NULL) /*創建文件並判斷是否能打開*/
{
printf ("cannot open file\n");
exit(0);
}
for (i=0;i<m;i++) /*將內存中職工的信息輸出到磁碟文件中去*/
if (fwrite(&em[i],sizeof(struct employee),1,fp)!=1)
printf("file write error\n");
fclose(fp);
}

int load() /*導入函數*/
{
FILE*fp;
int i=0;
if((fp=fopen("employee_list","rb"))==NULL)
{
printf ("cannot open file\n");
exit(0);
}
else
{
do
{
fread(&em[i],sizeof(struct employee),1,fp);
i++;
}
while(feof(fp)==0);
}
fclose(fp);
return(i-1);
}

void display() /*瀏覽函數*/
{
int i;
int m=load();
printf("\n 職工號\t姓名\t性別\t年齡\t學歷\t工資\t住址\t電話 \n");
for(i=0;i<m;i++) /*m為輸入部分的職工人數*/
printf("\n %d\t%s\t%c\t%d\t%s\t%d\t%s\t%ld\n",em[i].num,em[i].name,em[i].sex,em[i].age,em[i].xueli,em[i].wage,em[i].addr,em[i].tel);
}

void del() /*刪除函數*/
{

int m=load();
int i,j,n,t,flag;
char name[20];
printf("\n 原來的職工信息:\n");
display(); /* 調用瀏覽函數*/
printf("\n");
printf("請輸入要刪除的職工的姓名:\n");
scanf("%s",name);
for(flag=1,i=0;flag&&i<m;i++)
{
if(strcmp(em[i].name,name)==0)
{
printf("\n已找到此人,原始記錄為:\n");
printf("\n職工號\t姓名\t性別\t年齡\t學歷\t工資\t住址\t電話 \n");
printf("\n%d\t%s\t%c\t%d\t%s\t%d\t%s\t%ld\n",em[i].num,em[i].name,em[i].sex,em[i].age,em[i].xueli,em[i].wage,em[i].addr,em[i].tel);
printf("\n確實要刪除此人信息請按1,不刪除請按0\n");
scanf("%d",&n);
if(n==1) /*如果刪除,則其他的信息都往上移一行*/
{
for(j=i;j<m-1;j++)
{
strcpy(em[j].name,em[j+1].name);
em[j].num=em[j+1].num;
em[j].sex=em[j+1].sex;
em[j].age=em[j+1].age;
strcpy(em[j].xueli,em[j+1].xueli);
em[j].wage=em[j+1].wage;
strcpy(em[j].addr,em[j+1].addr);
em[j].tel=em[j+1].tel;
}
flag=0;
}
}
}
if(!flag)
m=m-1;
else
printf("\n對不起,查無此人!\n");
printf("\n 瀏覽刪除後的所有職工信息:\n");
save(m); /*調用保存函數*/
display(); /*調用瀏覽函數*/
printf("\n繼續刪除請按1,不再刪除請按0\n");
scanf("%d",&t);
switch(t)
{
case 1:del();break;
case 0:break;
default :break;
}
}

void add()/*添加函數*/
{
FILE*fp;
int n;
int count=0;
int i;
int m=load();
printf("\n 原來的職工信息:\n");
display(); /* 調用瀏覽函數*/
printf("\n");
fp=fopen("emploee_list","a");
printf("請輸入想增加的職工數:\n");
scanf("%d",&n);
for (i=m;i<(m+n);i++)
{
printf("\n 請輸入新增加職工的信息:\n");
printf("請輸入職工號: ");
srand((int)time(0));
em[i].num=rand()%10000+20000000;
if(em[i].num!=em[i-1].num)
printf("%8d ",em[i].num);
printf("\n");
printf("請輸入姓名: ");
scanf("%s",em[i].name);
getchar();
printf("請輸入性別(f--女 m--男): ");
scanf("%c",&em[i].sex);
printf("請輸入年齡: ");
scanf("%d",&em[i].age);
printf("請輸入學歷: ");
scanf("%s",em[i].xueli);
printf("請輸入工資: ");
scanf("%d",&em[i].wage);
printf("請輸入住址: ");
scanf("%s",em[i].addr);
printf("請輸入電話: ");
scanf("%d",&em[i].tel);
printf("\n");
count=count+1;
printf("已增加的人數:\n");
printf("%d\n",count);
}
printf("\n添加完畢!\n");
m=m+count;
printf("\n瀏覽增加後的所有職工信息:\n");
printf("\n");
save(m);
display();
fclose(fp);
}

void search()/*查詢函數*/
{
int t,flag;
do
{
printf("\n按職工號查詢請按1 ; 按學歷查詢請按2 ; 按電話號碼查詢請按3,進入主函數按4\n");
scanf("%d",&t);
if(t>=1&&t<=4)
{
flag=1;
break;
}
else
{
flag=0;
printf("您輸入有誤,請重新選擇!");
}
}
while(flag==0);
while(flag==1)
{
switch(t)
{
case 1:printf("按職工號查詢\n");search_num();break;
case 2:printf("按學歷查詢\n");search_xueli();break;
case 3:printf("按電話號碼查詢\n");search_tel();break;
case 4:main();break;
default:break;
}

}

}

void search_num()
{
int num;
int i,t;
int m=load();
printf("請輸入要查找的職工號(20001111---20009999):\n");
scanf("%d",&num);
for(i=0;i<m;i++)
if(num==em[i].num)
{
printf("\n已找到此人,其記錄為:\n");
printf("\n職工號\t姓名\t性別\t年齡\t學歷\t工資\t住址\t電話 \n");
printf("\n%d\t%s\t%c\t%d\t%s\t%d\t%s\t%ld\n",em[i].num,em[i].name,em[i].sex,em[i].age,em[i].xueli,em[i].wage,em[i].addr,em[i].tel);
break;
}
if(i==m)
printf("\n對不起,查無此人\n");
printf("\n");
printf("返回查詢函數請按1,繼續查詢職工號請按2\n");
scanf("%d",&t);
switch(t)
{
case 1:search();break;
case 2: break;
default:break;
}
}

void search_xueli()
{
char xueli[30];
int i,t;
int m=load();
printf("請輸入要查找的學歷:\n");
scanf("%s",xueli);
for(i=0;i<m;i++)
if(strcmp(em[i].xueli,xueli)==0)
{
printf("\n已找到,其記錄為:\n");
printf("\n職工號\t姓名\t性別\t年齡\t學歷\t工資\t住址\t電話 \n");
printf("\n%d\t%s\t%c\t%d\t%s\t%d\t%s\t%ld\n",em[i].num,em[i].name,em[i].sex,em[i].age,em[i].xueli,em[i].wage,em[i].addr,em[i].tel);

}
if(i==m)
printf("\n對不起,查無此人\n");
printf("\n");
printf("返回查詢函數請按1,繼續查詢學歷請按2\n");
scanf("%d",&t);
switch(t)
{
case 1:search();break;
case 2:break;
default :break;
}

}

void search_tel()
{
long int tel;
int i, t;
int m=load();
printf("請輸入要查找的電話號碼:\n");
scanf("%ld",&tel);
for(i=0;i<m;i++)
if(tel==em[i].tel)
{
printf("\n已找到此人,其記錄為:\n");
printf("\n職工號\t姓名\t性別\t年齡\t學歷\t工資\t住址\t電話 \n");
printf("\n%d\t%s\t%c\t%d\t%s\t%d\t%s\t%ld\n",em[i].num,em[i].name,em[i].sex,em[i].age,em[i].xueli,em[i].wage,em[i].addr,em[i].tel);
break;
}
if(i==m)
printf("\n對不起,查無此人\n");
printf("\n");
printf("返回查詢函數請按1,繼續查詢電話號碼請按2\n");
scanf("%d",&t);
switch(t)
{
case 1:search();break;
case 2:break;
default :break;
}

}

void modify() /*修改函數*/
{
int num;
char name[10];
char sex;
int age;
char xueli[30];
int wage;
char addr[30];
long int tel;
int b,c,i,n,t,flag;
int m=load(); /*導入文件內的信息*/
printf("\n 原來的職工信息:\n");
display(); /* 調用瀏覽函數*/
printf("\n");
printf("請輸入要修改的職工的姓名:\n");
scanf("%s",name);
for(flag=1,i=0;flag&&i<m;i++)
{
if(strcmp(em[i].name,name)==0)
{
printf("\n已找到此人,原始記錄為:\n");
printf("\n職工號\t姓名\t性別\t年齡\t學歷\t工資\t住址\t電話 \n");
printf("\n%d\t%s\t%c\t%d\t%s\t%d\t%s\t%ld\n",em[i].num,em[i].name,em[i].sex,em[i].age,em[i].xueli,em[i].wage,em[i].addr,em[i].tel);
printf("\n確實要修改此人信息請按1 ; 不修改請按0\n");
scanf("%d",&n);
if(n==1)
{
printf("\n需要進行修改的選項\n 1.職工號 2.姓名 3.性別 4.年齡 5.學歷 6.工資 7.住址 8.電話\n");
printf("請輸入你想修改的那一項序號:\n");
scanf("%d",&c);
if(c>8||c<1)
printf("\n選擇錯誤,請重新選擇!\n");
}
flag=0;
}

}
if(flag==1)
printf("\n對不起,查無此人!\n");
do
{
switch(c) /*因為當找到第i個職工時,for語句後i自加了1,所以下面的應該把改後的信息賦值給第i-1個人*/
{
case 1:printf("職工號改為: ");
scanf("%d",&num);
em[i-1].num=num;
break;
case 2:printf("姓名改為: ");
scanf("%s",name);
strcpy(em[i-1].name,name);
break;
case 3:printf("性別改為: ");
getchar();
scanf("%c",&sex);
em[i-1].sex=sex;
break;
case 4:printf("年齡改為: ");
scanf("%d",&age);
em[i-1].age=age;
break;
case 5:printf("學歷改為: ");
scanf("%s",xueli);
strcpy(em[i-1].xueli,xueli);
break;
case 6:printf("工資改為: ");
scanf("%d",wage);
break;
case 7:printf("住址改為: ");
scanf("%s",addr);
strcpy(em[i-1].addr,addr);
break;
case 8:printf("電話改為: ");
scanf("%ld",&tel);
em[i-1].tel=tel;
break;
}
printf("\n");
printf("\n是否確定所修改的信息?\n 是 請按1 ; 不,重新修改 請按2: \n");
scanf("%d",&b);

}
while(b==2);
printf("\n瀏覽修改後的所有職工信息:\n");
printf("\n");
save(m);
display();
printf("\n繼續修改請按1,不再修改請按0\n");
scanf("%d",&t);
switch(t)
{
case 1:modify();break;
case 0:break;
default :break;
}

}

H. 用C語言課程設計—職工工資管理系統(分別用結構體數組和鏈表編寫程序)

#include<stdio.h>
#define NUM 100
void input()
;void search()
;void search_num();
void dele()
;void dele_name();
void dele_num()
;void modi()
;void modi_num();
void output()
;void stat()
;void fun()
;void run();
struct emploee /*職工數據結構*/
{
char no[5];
char name[8];
char sex[3];
int age;
int salar;
}emp[NUM],newemp;
main()
{int x;
printf(" 1. 輸入職工記錄\n");
printf(" 2. 查詢職工記錄\n");
printf(" 3. 修改職工記錄\n");
printf(" 4. 刪除職工記錄\n");
printf(" 5. 列印職工記錄\n");
printf(" 6. 調查工資情況\n");
printf(" 7. 追加職工記錄\n");
printf(" 8. 結束使用\n");
printf(" 0. 退出系統\n");
printf("\n");
printf("*** 歡迎使用職工工資管理系統 ***\n");
printf("請選擇(0-8):\n");
scanf("%d",&x);
switch(x)
{
case 1: input();break;
case 2: search();break;
case 3: modi();break;
case 4: dele();break;
case 5: output();break;
case 6: stat();break;
case 7: run();break;
case 8: fun();break;
default:printf("\n Wrong!");
}
if(x==0)break;
}
}
void input()
{
FILE *fp;
int n,i;
if ((fp=fopen("emp","wb"))==NULL)
{

printf("不能建立emp文件\n");
exit(1);
}
printf("輸入職工人數:");
scanf("%d",&n);
printf("輸入格式:職工號 姓名 性別 年齡 工資<Enter>\n");
for(i=0;i<n;i++) /* 循環獲取n個職工記錄 */
{
printf("第%d個職工:",i+1);
scanf("%s%s%s%d%d",emp[i].no,emp[i].name,emp[i].sex,
&emp[i].age,&emp[i].salar);
}
for(i=0;i<n;i++) /*將n個職工記錄寫入文件*/
fwrite(&emp[i],sizeof(struct emploee),1,fp);
fclose(fp);
}
/*************************統計模塊**********************/
void stat( )
{
FILE *fp;
int n,num;
if((fp=fopen("emp","rb"))==NULL)
{
printf("不能打開emp文件\n");
exit(1);
}
printf("工資數:");
scanf("%d",&num);
printf("記錄號 職工號 姓名 性別 年齡 工資\n");
for(n=0;fread(&emp,sizeof(struct emploee),1,fp);n++)
if(emp[n].salar>=num)
printf("%6d%6s%9s%4s%5d%6d\n",n+1,emp[n].no,emp[n].name,emp[n].sex,
emp[n].age,emp[n].salar);
fclose(fp);
}
/********************刪除模塊*******************/

void dele()
{
int x;
while(1)
{
printf("\n\n\t\t刪除子菜單\n");
printf("\t\t*********\n");
printf("\t\t 1.按職工號刪除記錄\n");
printf("\t\t 0.返回主菜單\n");
printf("\t\t*********\n");
printf("\t 請選擇(0-1):");
scanf("%d",&x);
switch(x)
{case 1:dele_num();break;
default:printf("\nWrong!");
}
if(x==0)break;
}
}
void dele_num()
{
FILE *fp;
int i,j,n;
char num[5];
if((fp=fopen("emp","rb"))==NULL)
{
printf("不能打開emp文件\n");
exit(1);
}
printf("刪除前:\n");
printf("記錄號 職工號 姓名 性別 年齡 工資\n");
for(n=0;fread(&emp[n],sizeof(struct emploee),1,fp);n++)
printf("%6s%6s%9s%4s%5d%6d\n",n+1,emp[n].no,emp[n].name,emp[n].sex,
emp[n].age,emp[n].salar); /*n為emp文件中記錄數*/
printf("要刪除的職工號:");
scanf("%s",num);

for(i=0;(strcmp(emp[i].no,num)!=0&&i<n);i++)
if(i>=n)
{
printf("\t沒有%s職工號的職工\n",num);
exit(2);
}
fclose(fp);
fp=fopen("emp","w+");
if(n==1) /*一個記錄已經刪除了*/
{
fclose(fp);
exit(3);
}
for(j=0;j<i;j++)
fwrite(&emp[j],sizeof(struct emploee),1,fp);
for(j=i+1;j<n;j++)
fwrite(&emp[j],sizeof(struct emploee),1,fp);
printf("刪除後:\n");
fseek(fp,0,SEEK_SET);
printf("記錄號 職工號 姓名 性別 年齡 工資\n");
for(i=0;fread(&emp[i],sizeof(struct emploee),1,fp);i++)
printf("%6s%6s%9s%4s%5d%6d\n",i+1,emp[i].no,emp[i].name,emp[i].sex,
emp[i].age,emp[i].salar);
fclose(fp);
}
/********************修改模塊*******************/
void modi()
{
int x;
while(1)
{
printf("\n\n\t\t修改子菜單\n");
printf("\t\t*********************\n");
printf("\t\t1. 按職工號修改\n");
printf("\t\t0. 返回主菜單\n");
printf("\t\t*********************\n");

printf("\t請選擇(0-1):");
scanf("%d",&x);
switch(x)
{
case 1:modi_num();break;
default:printf("\n輸錯誤!");
}
if(x==0)break;
}
}
void modi_num()
{
FILE *fp;
int i,j;
char num[5];
if((fp=fopen("emp","rb+"))==NULL)
{
printf("不能 打開emp文件\n");
exit(1);
}
printf("要修改的職工號:");
scanf("%s",num);
for(i=0;fread(&emp[i],sizeof(struct emploee),1,fp);i++)
if(!strcmp(emp[i].no,num))break;
if(feof(fp))
{
printf("\t沒有%s職工號的職工\n",num);
exit(2);
}
printf("記錄號 職工號 姓名 性別 年齡 工資\n");
printf("%6d%6s%9s%4s%5d%6d\n",i+1,emp[i].no,emp[i].name,emp[i].sex,
emp[i].age,emp[i].salar);
printf("輸入格式:職工號 姓名 性別 年齡 工資<Enter>\n");
printf("第%d個記錄:",i+1);
scanf("%s%s%s%d%d",newemp.no,newemp.name,newemp.sex,&newemp.age,
&newemp.salar);/*獲取新的職工記錄*/

fseek(fp,-(long)sizeof(struct emploee),SEEK_CUR);
/*文件指針指向該修改的記錄開頭*/
fwrite(&newemp,sizeof(struct emploee),1,fp);/*用newemp覆蓋當前記錄*/
printf(" 修改後:\n");
fseek(fp,0,SEEK_SET);/*顯示修改後的文件數據*/
printf("記錄號 職工號 姓名 性別 年齡 工資\n");
for(i=0;fread(&emp[i],sizeof(struct emploee),1,fp)!=0;i++)
printf("%6d%6s%9s%4s%5d%6d\n",i+1,emp[i].no,emp[i].name,emp[i].sex,
emp[i].age,emp[i].salar);
fclose(fp);
}
/*************************查詢模塊***********************/
void search( )
{
int x;
while(1)
{
printf("\n\n\t\t查子菜單\n");
printf("\t\t********************\n");
printf("\t\t 1.按職工號查詢\n");
printf("\t\t 0.返回主菜單\n");
printf("\t\t********************\n");
printf("\t請選擇(0-1):");
scanf("%d",&x);
switch(x)
{
case 1:search_num();break;
default :printf("\n Wrong!");
}
if(x==0) break;
}
}
void search_num()
{
FILE *fp;
int i;

char num;
if((fp=fopen("emp","rb"))==NULL)
{
printf("不能打開emp文件\n");
exit(1);
}
printf("要查詢的職工號:");
scanf("%s",num);
for(i=0;fread(&emp[i],sizeof(struct emploee),1,fp);i++)
if(!strcmp(emp[i].no,num)) break;
if(feof(fp))
{
printf("\t查無此人\n");
exit(2);
}
printf("記錄號 職工號 姓名 性別 年齡 工資\n");
printf("%6d%6s%9s%4s%5d%6d\n",i+1,emp[i].no,emp[i].name,emp[i].sex,
emp[i].age,emp[i].salar);
fclose(fp);
}
/*******************輸出模塊********************/
void output()
{int i;
FILE *fp;
if((fp=fopen("emp","r"))==NULL)
{printf("不能打開emp文件\n");
exit(0);
}
printf("記錄號 職工號 姓名 性別 年齡 工資\n");
for(i=0;fread(&emp[i],sizeof(struct emploee),1,fp)!=0;i++)
{
printf("%6d%6s%9s%4s%5d%6d\n",i+1,emp[i].no,emp[i].name,emp[i].sex,
emp[i].age,emp[i].salar);
}
fclose(fp);
}
/******************追加模塊*******************/
void run()
{
FILE *fp;
int n,i,j;
if((fp=fopen("emp","ab+"))==NULL)
{printf("不能打開emp文件\n");
exit(0);
}
printf("要追加的職工人數:");
scanf("%d",&n);
for(i=0;i<n;i++)
{ printf("輸入格式:職工號 姓名 性別 年齡 工資<enter>\n");
printf("職工記錄:");
scanf("%s%s%s%d%d",newemp.no,newemp.name,newemp.sex,&newemp.age,
&newemp.salar);
/*獲取一個職工記錄*/
fwrite(&newemp,sizeof(struct emploee),1,fp);
/*將該職工記錄寫入文件*/
}
fclose(fp);
}
/*******************顯示模塊****************/
void fun()
{printf("\t\t******************************************\n");
printf("\t\t* *\n");
printf("\t\t* *\n");
printf("\t\t* 謝 謝 使 用 ! *\n");
printf("\t\t* *\n");
printf("\t\t* *\n");
printf("\t\t******************************************\n");
}

I. c語言編寫職工工資信息管理系統

這個是我自己做的管理系統,裡面的漢字什麼的你改下就OK了,比如把單價改成工資```總價改成總工資````數量改成月底百分比提成什麼的```其他的不用改的。看著行你就給分,好的話追加,感覺垃圾就罵我。
#include<stdio.h>
struct material
{int num;
char name[20];
char leibie[20];
char shijian[20];
int shuliang;
int price;
int total;
int delet ; }
work[50];
static n=1;int f,g=1,e;
FILE *fp1;
char fname[20];

jianli() /*創建新文件*/
{
int i,x=0;FILE *fp;
system("cls");
menu1();
menu2();
printf("\t\t\t 請輸入文件名!");
scanf("%s",fname);
fp=fopen(fname,"rb");
for(i=0;i<50;i++)
{fread(&work[i],sizeof(struct material),1,fp);
if(work[i].total!=0)x++;
}
fclose(fp);n=x;
}

r()
{
int i;FILE *fp;
if((fp=fopen(fname,"rb"))==NULL)
{
printf("\n\n\t\tcannot open file!\n");}
printf("編號 名稱 類別 登記時間 數量 單價 總價\n");
for(i=0;i<n;i++)
{
fread(&work[i],sizeof(struct material),1,fp);
if(work[i].delet==0)
printf("%-5d %-10s %-10s %-10s %-6d %-6d %-6d \n",
work[i].num,work[i].name,work[i].leibie,work[i].shijian,work[i].shuliang,work[i].price,work[i].total);
}
fclose(fp);
}

r1()
{
int i;FILE *fp;
if((fp=fopen(fname,"rb"))==NULL)
{
printf("\n\n\t\tcannot open file!\n");}
printf("編號 名稱 類別 登記時間 數量 單價 總價\n");
for(i=0;i<n;i++)
{
fread(&work[i],sizeof(struct material),1,fp);
if(work[i].delet==1)
printf("%-5d %-10s %-10s %-10s %-6d %-6d %-6d \n",work[i].num,work[i].name,work[i].leibie,
work[i].shijian,work[i].shuliang,work[i].price,work[i].total);
}
fclose(fp);
}

display2() /*顯示所有信息*/
{
int i,d=0;FILE *fp;
fp=fopen(fname,"rb");
system("cls");menu1();
printf("以下是所有材料信息!\n");
for(i=0;i<n;i++)
fread(&work[i],sizeof(struct material),1,fp);
printf("編號 名稱 類別 登記時間 數量 單價 總價\n");
for(i=0;i<n;i++)
if(work[i].delet==0)
{d++;
printf("%-5d %-10s %-10s %-10s %-6d %-6d %-6d \n",work[i].num,work[i].name,work[i].leibie,
work[i].shijian,work[i].shuliang,work[i].price,work[i].total);
}
if(d==0)printf("沒找著,想好了再找!\n");
printf("退出請按任意數字鍵!\n");
scanf("%d",&i);
}

display1() /*顯示信息*/
{int i;int d=0;
printf("以下是排序後的信息 :\n");
printf("編號 名稱 類別 登記時間 數量 單價 總價\n");
for(i=0;i<n;i++)
if(work[i].delet==0)
{d++;
printf("%-5d %-10s %-10s %-10s %-6d %-6d %-6d \n",work[i].num,work[i].name,work[i].leibie,
work[i].shijian,work[i].shuliang,work[i].price,work[i].total);
}
if(d==0){printf("沒找著,想好了再找!\n");system("pause");}
}

save() /*保存函數*/
{FILE *fp;int i;
system("cls");menu1();
printf("保存在原文件請按 1 另存為請按 2\n");
scanf("%d",&e);
while(1)
{
if(e==1)
{
if((fp=fopen(fname,"w"))==0)
{printf("cannot open\n");return;}
for(i=0;i<n;i++)
if(fwrite(&work[i],sizeof(struct material), 1,fp)!=1)
printf("error!\n");break;
}
else if(e==2)
{
printf("input jianli file name!\n");
scanf("%s",fname);
if((fp=fopen(fname,"w"))==0)
{printf("cannot open\n");return;}
for(i=0;i<n;i++)
if(fwrite(&work[i],sizeof(struct material), 1,fp)!=1)
printf("error!error!\n");break;
}
else printf("error!\n");
}
fclose(fp);
system("cls");menu1();
printf("OK了!\n\n");system("pause");
}

slect()
{
int d,i;system("cls");menu1();menu2();scanf("%d",&d);
if(d==1){add();slect();}
else if(d==2){display2();slect();}
else if(d==3){cha();slect();}
else if(d==4){delet();slect();}
else if(d==5){modify();slect();}
else if(d==6){order();slect();}
else if(d==7){recy();slect();}
else if(d==8){tongji();slect();}
else if(d==9){jianli();slect();}
else if(d==0){printf("exit!\n\n");exit();}
else {printf("error!\n");slect();}
}

cha() /*查詢*/
{
int i,num,c,suc=0,suc1;char name[20];FILE *fp;
fp=fopen(fname,"rb");
for(i=0;i<n;i++)
fread(&work[i],sizeof(struct material),1,fp);
while(1)
{
system("cls");menu1();
printf("您有兩種方式查詢:\n");
printf("輸入名稱請按 1 輸入材料號請按 2\n");
scanf("%d",&c);
system("cls");menu1();
if(c==1)
{printf("輸入名稱\n");
scanf("%s",name);break;}
else if(c==2)
{printf("輸入材料號\n");
scanf("%d",&num);break;}
else while(1)
{ system("cls");menu1();printf("輸入出錯啦!!!!\n");
printf("重輸請按 0 退出請按 1\n ");
scanf("%d",&suc);
if(suc==0||suc==1)
break;
else continue;
}
if(suc==1)break;
}

if(suc!=1)
{
for(i=0;i<n;i++)
if((strcmp(name,work[i].name)==0||num==work[i].num)&&work[i].delet==0)break;
if(i<n)
{ system("cls");menu1();
printf("編號 名稱 類別 登記時間 數量 單價 總價\n");
printf("%-5d %-10s %-10s %-10s %-6d %-6d %-6d \n",work[i].num,work[i].name,work[i].leibie,
work[i].shijian,work[i].shuliang,work[i].price,work[i].total);
printf("請按任意數字鍵繼續!\n");
scanf("%d",&i);
}
else {system("cls");menu1();
printf(" I』m sorry!我都快死機了也沒找到....!\n\n",i);
printf("繼續請按任意數字鍵!\n");
scanf("%d",&i);}

while(1)
{ system("cls");menu1();
printf("繼續請按 0 退出請按 1\n ");
scanf("%d",&suc1);
if(suc1==0||suc1==1)
break;
else printf(" error!\n\n",i);
printf("繼續請按任意數字鍵!\n");
scanf("%d",&i);
}
if(suc1==0) cha();
if(suc1==1) {printf("bye!\n");
system("pause");
}

}
else printf("bye!\n");
}

add() /*添加*/
{
int e,i,num,c,h,suc=0,suc1;char name[20];int a;
while(suc==0)
{if(n<50){a=n;n++;work[a].delet=0;}
else
{for(i=0;i<n;i++)
if(work[i].delet==2)break;
{a=i;work[a].delet=0;}
}
while(1)
{printf("文件已經存有以下信息:\n\n");
system("cls");menu1();r();
printf("請輸入編號:\n");
scanf("%d",&work[a].num);
for(h=0;h<n;h++)
{if(h==a)h++;
if((work[a].num==work[h].num)&&work[h].delet==0)break;
}
if(h<n)
{system("cls");menu1();
printf("編號重復!想好了再寫!\n"); printf("請按任意數字鍵繼續!\n");
scanf("%d",&i);
}
else break;
}
system("cls");menu1();r();
while(1)
{
printf("請輸入名稱:name\n");
scanf("%s",&work[a].name);
for(h=0;h<n;h++)
{if(h==a)h++;
if(strcmp(work[a].name,work[h].name)==0&&work[h].delet==0)break;
}
if(h<n)
{system("cls");menu1();printf("名稱重復!想好了寫!\n");
printf("請按任意數字鍵繼續!\n");
scanf("%d",&i);}
else break;
}
system("cls");menu1();r();
printf("請輸入類別:\n");
scanf("%s",&work[a].leibie);system("cls");menu1();r();
printf("請輸入登記時間:\n");
scanf("%s",&work[a].shijian);system("cls");menu1();r();
printf("請輸入數量:\n");
scanf("%d",&work[a].shuliang);system("cls");menu1();r();
printf("請輸入單價:\n");
scanf("%d",&work[a].price);system("cls");menu1();r();
work[a].total=work[a].shuliang*work[a].price;
work[a].delet=0;system("cls");menu1();r();
while(1)
{
printf("\n");
printf(" 保存請按 1 重輸請按 2\n");
scanf("%d",&e);
if(e==1){save();suc=1;break;}
else if(e==2){n--;break;}
else {system("cls");menu1();printf("寫錯啦!想好了寫!!\n");}
}
while(e==1)
{system("cls");menu1();
printf("繼續請按 0 退出請按 1\n");
scanf("%d",&suc);
if(suc==0||suc==1)break;
else {system("cls");menu1();printf("輸入有誤!想好了寫!\n\n");}
}
if(suc==1)break;
}
}

delet() /*刪除*/
{
char j;int e,i,num,c,suc=0;
char name[20];
system("cls");menu1();r();
while(1)
{
printf("請輸入您要刪除的材料的信息:名稱 或 材料號\n");
printf("\n");
printf("輸入名稱請按 1 輸入材料號請按2\n");
scanf("%d",&c);
system("cls");menu1();r();
if(c==1)
{printf("輸入名稱\n");
scanf("%s",name);break;}
else if(c==2)
{printf("輸入材料號\n");
scanf("%d",&num);break;}
else while(1)
{printf("輸入出錯啦!!!!\n");
printf("重輸請按 0 確認請按 1\n ");
scanf("%d",&suc);
if(suc==0||suc==1)
break;
else continue;
}
if(suc==1)break;
}
if(suc!=1)
{
for(i=0;i<n;i++)
if((strcmp(name,work[i].name)==0||num==work[i].num)&&work[i].delet==0)break;
if(i<n)
while(1)
{ system("cls");menu1();r();
printf("您要刪除 %s 的信息!\n ",work[i].name);
printf("\n");
printf("暫時刪除請按 1 永久刪除請按 2\n");
scanf("%d",&e);
if(e==1)
{work[i].delet=1;system("cls");menu1();printf("deleted sucessfully!\n\n");save();break; }
if(e==2)
{work[i].delet=2;system("cls");menu1();printf("deleted sucessfully!\n\n");save();break;}
else {system("cls");menu1(); printf(" 輸入出錯啦!!!!\n\n",i);
printf("繼續請按任意數字鍵!\n"); scanf("%d",&i);}
}
if(i>=n){system("cls");menu1(); printf(" I』m sorry!我都快死機了也沒找到....!\n\n",i);
printf("繼續請按任意數字鍵!\n"); scanf("%d",&i);}
while(1)
{system("cls");menu1();
printf("繼續請按 0 退出請按 1\n");scanf("%d",&e);
if(e==0||e==1)break;
else {system("cls");menu1();printf(" 輸入出錯啦!!!!\n\n",i);
printf("繼續請按任意數字鍵!\n");scanf("%d",&i);}
}
if(e==0)delet();
else printf("bye!\n");
}
}

modify() /*修改*/
{ char name[20];int i,e=1,a,h;
system("cls");menu1();
r();
printf("請輸入您要修改的材料的名稱!\n");
scanf("%s",name);
for(i=0;i<n;i++)

if(strcmp(work[i].name,name)==0&&work[i].delet==0)break;
if(i<n)
{system("cls");menu1();
printf("您要修改的材料的編號為num: %d, 修改 0 放棄修改 1\n",work[i].num);
scanf("%d",&e);
if(e==0)
while(1)
{ printf("請輸入編號:\n");

scanf("%d",&work[i].num);
for(h=0;h<n;h++)
{if(h==i)h++;
if((work[i].num==work[h].num)&&work[h].delet==0)break;
}
if(h<n) printf("編號重復!想好了寫!\n");
else break;
}
system("cls");menu1();
printf("您要修改的材料的名稱為:%s, 修改 0 放棄修改 1\n",work[i].name);
scanf("%d",&e);
if(e==0)
while(1)
{ printf("請輸入名稱:\n");
scanf("%s",&work[i].name);
for(h=0;h<n;h++)
{if(h==i)h++;
if(strcmp(work[i].name,work[h].name)==0&&work[h].delet==0)break;
}
if(h<n) printf("名稱重復!想好了寫!s\n");
else break;
}
system("cls");menu1();
printf("您要修改的材料的類別為 %s, 修改 0 放棄修改 1\n",work[i].leibie);
scanf("%d",&e);
if(e==0)
{printf("請輸入類別:\n");
scanf("%s",&work[i].leibie);}
system("cls");menu1();
printf("您要修改的材料的登記時間為:%s, 修改 0 放棄修改 1\n",work[i].shijian);
scanf("%d",&e);
if(e==0)
{printf("請輸入登記時間:\n");
scanf("%s",&work[i].shijian);}
system("cls");menu1();
printf("您要修改的材料的數量為%d, 修改 0 放棄修改 1\n", work[i].shuliang);
scanf("%d",&e);
if(e==0)
{printf("請輸入數量:\n");
scanf("%d",&work[i].shuliang);}
system("cls");menu1();
printf("您要修改的材料的單價為%d, 修改 0 放棄修改 1\n",work[i].price);
scanf("%d",&e);
if(e==0)
{printf("請輸入單價:\n");
scanf("%d",&work[i].price);}
work[i].total=work[i].shuliang*work[i].price;
system("cls");menu1();
printf("搞定! \n");
printf("新信息為:\n");
printf("編號 名稱 類別 登記時間 數量 單價 總價\n");
printf("%-5d %-10s %-10s %-10s %-6d %-6d %-6d \n",work[i].num,work[i].name,work[i].leibie,
work[i].shijian,work[i].shuliang,work[i].price,work[i].total);

while(1)
{
printf(" 保存請按 1 取消請按 2\n");
scanf("%d",&e);
if(e==1){save();break;}
else if(e==2)break;
else {system("cls");menu1();printf("寫錯啦!想好了寫!!\n");}
}
}
if(i==n) {system("cls");menu1();printf("no such a material!\n"); printf("繼續請按任意數字鍵!\n");
scanf("%d",&i);}
while(e==1)
{system("cls");menu1();
printf("繼續請按 0 退出請按 1\n");
scanf("%d",&e);
if(e==0||e==1)break;
else {system("cls");menu1();printf("輸入有誤!想好了寫!\n\n");
printf("繼續請按任意數字鍵!\n"); scanf("%d",&i);}
}
if(e==0)modify();
if(e==1)printf("exit!\n");
}

er() /*冒泡排序*/
{int t;char dai[20];
t=work[f].price;work[f].price=work[f+1].price;work[f+1].price=t;
t=work[f].num;work[f].num=work[f+1].num;work[f+1].num=t;
t=work[f].shuliang;work[f].shuliang=work[f+1].shuliang;work[f+1].shuliang=t;
t=work[f].total;work[f].total=work[f+1].total;work[f+1].total=t;
strcpy(dai,work[f].name);
strcpy(work[f].name,work[f+1].name);
strcpy(work[f+1].name,dai);
strcpy(dai,work[f].leibie);
strcpy(work[f].leibie,work[f+1].leibie);
strcpy(work[f+1].leibie,dai);
strcpy(dai,work[f].shijian);
strcpy(work[f].shijian,work[f+1].shijian);
strcpy(work[f+1].shijian,dai);
}

order1() /*按數量排序*/
{ int i,j,e;
system("cls");menu1();
for(j=0;j<n-1;j++)
for(i=0;i<n-1-j;i++)
if((work[i].shuliang>work[i+1].shuliang)&&work[i].delet==0)
{f=i;er();}
while(1)
{ system("cls");menu1();display1();
printf(" 保存請按 1 取消請按 2\n");
scanf("%d",&e);
if(e==1){save();break;}
else if(e==2)break;
else {system("cls");menu1();printf("寫錯啦!想好了寫!!\n");
printf("繼續請按任意數字鍵!\n");scanf("%d",&i);}
}
}

order2() /*按單價排序*/
{ int i,j;
system("cls");menu1();
for(j=0;j<n-1;j++)
for(i=0;i<n-1-j;i++)
if((work[i].price>work[i+1].price)&&work[i].delet==0)
{f=i;er();}
while(1)
{ system("cls");menu1();display1();
printf(" 保存請按 1 取消請按 2\n");
scanf("%d",&e);
if(e==1){save();break;}
else if(e==2)break;
else {system("cls");menu1();printf("寫錯啦!想好了寫!!\n");
printf("繼續請按任意數字鍵!\n");scanf("%d",&i);}
}

}

order3() /*按總價排序*/
{ int i,j;
system("cls");menu1();
for(j=0;j<n-1;j++)
for(i=0;i<n-1-j;i++)
if((work[i].total>work[i+1].total)&&work[i].delet==0)
{f=i;er();}
while(1)
{ system("cls");menu1();display1();
printf(" 保存請按 1 取消請按 2\n");
scanf("%d",&e);
if(e==1){save();break;}
else if(e==2)break;
else {system("cls");menu1();printf("寫錯啦!想好了寫!!\n");
printf("繼續請按任意數字鍵!\n");scanf("%d",&i);}
}
}

deci() /*退出繼續選擇*/
{ int e,i;
while(1)
{ system("cls");menu1();
printf(" 繼續按 1 退出按 2 \n");
scanf("%d",&e);
if(e==1){g=1;break;}
if(e==2){g=2;break;}
else {printf("error!\n"); printf("繼續請按任意數字鍵!\n");
scanf("%d",&i);}
}
}

order() /*排序函數*/
{ int e,i;
while(g==1)
{system("cls");menu1();
printf("按數量排序請按 1 \n");
printf("按單價排序請按 2 \n");
printf("按總價排序請按 3 \n");
scanf("%d",&e);
if(e==1){order1();deci();}
else if(e==2){order2();deci();}
else if(e==3){order3();deci();}
else {system("cls");menu1();printf("寫錯啦!想好了寫!!\n"); printf("繼續請按任意數字鍵!\n");
scanf("%d",&i);}
}
g=1;
}

recy() /*恢復函數*/
{
int i,e,num;FILE *fp;
system("cls");menu1();
fp=fopen(fname,"rb");
for(i=0;i<n;i++)
fread(&work[i],sizeof(struct material),1,fp);
printf("編號 名稱 類別 登記時間 數量 單價 總價\n");
for(i=0;i<n;i++)
if(work[i].delet==1)
{ printf("%-5d %-10s %-10s %-10s %-6d %-6d %-6d \n",work[i].num,work[i].name,work[i].leibie,
work[i].shijian,work[i].shuliang,work[i].price,work[i].total);
}
else if(i==n){printf("沒找著,想好了再找!\n");printf("繼續請按任意數字鍵!\n");
scanf("%d",&i);}
while(1)
{ system("cls");menu1();r1();
printf("全部死刑(清空)0 宣判無罪(恢復)1 大赦天下(全部恢復)2 打道回府(退出)3 \n");
scanf("%d",&e);
if(e==0)
{for(i=0;i<n;i++)
if(work[i].delet==1)work[i].delet=2;break;
}
else if(e==1)
{ system("cls");menu1();r1();
printf("請輸入要恢復的材料的編號:\n");
scanf("%d",&num);
for(i=0;i<n;i++)
if(num==work[i].num&&work[i].delet==1) break;
if(i<n) {work[i].delet=0;break;}
else if(i==n) {printf("沒找著,想好了再找!\n");printf("繼續請按任意數字鍵!\n");
scanf("%d",&i); break;}
}
else if(e==2)
{for(i=0;i<n;i++)
if(work[i].delet==1)work[i].delet=0;break;
}
else if(e==3)break;
else {printf("寫錯啦!想好了寫!!\n"); printf("繼續請按任意數字鍵!\n");
scanf("%d",&i);}
}
system("cls");menu1();printf("搞定!\n");
printf("按任意數字鍵退出!\n");scanf("%d",&i);save();
}

tongji() /*統計函數*/
{int i,e,n1=0,n2=0,n3=0,n4=0,n5=0,z=0,c=0;FILE *fp;
system("cls");menu1();
fp=fopen(fname,"rb");
for(i=0;i<n;i++)
fread(&work[i],sizeof(struct material),1,fp);
for(i=0;i<n;i++)
{if(work[i].delet==0){z=z+work[i].total;c++;}
if(work[i].total<3000&&work[i].delet==0)n1++;
if(work[i].total>=3000&&work[i].total<4000&&work[i].delet==0)n2++;
if(work[i].total>=4000&&work[i].total<5000&&work[i].delet==0)n3++;
if(work[i].total>=5000&&work[i].delet==0)n4++;
}
n5=z/c;
printf(" 總價 材料種類數 \n",n1);
printf(" 3000以下: %d\n",n1);
printf(" 3000 --- 4000: %d\n",n2);
printf(" 4000 --- 5000: %d\n",n3);
printf(" 5000以下: %d\n",n4);
printf("平均價格: %d\n",n5);
printf("\n\n");
system("pause");
while(1)
{ system("cls");menu1();
printf(" 保存請按 1 取消請按 2\n");
scanf("%d",&e);
if(e==1){save();break;}
else if(e==2)break;
else {printf("寫錯啦!想好了寫!!\n"); printf("繼續請按任意數字鍵!\n");
scanf("%d",&i);}
}
printf("按任意數字鍵退出!\n");
scanf("%d",&i);
}

menu1() /*歡迎界面*/
{
printf("\t \n");
printf("\t 課 程 設 計 \n");
printf("\t \n");
printf("\t 材料管理系統 \n");
printf("\t \n");
printf("\t 自動化 \n");
printf("\t 王璇 \n");
printf("\t \n");
printf("\t \n");
printf("\t \n");
printf("\t\n");
printf("\t \n");
printf("\t\n");
}

menu2() /*菜單函數*/
{
printf("\t1.添加材料信息\n");
printf("\t2.查看全部材料信息\n");
printf("\t3.查找材料資料\n");
printf("\t4.刪除材料資料\n");
printf("\t5.修改材料數據\n");
printf("\t6.材料信息排序\n");
printf("\t7.已經刪除的材料檔案\n");
printf("\t8.材料信息記錄統計\n");
printf("\t9.文件管理\n");
printf("\t0.退出\n");
}

main() /*主函數*/
{
system("cls");
menu1();
jianli();
slect();
}



J. 急求C語言、C++ 編寫的飯卡管理系統代碼,最好每個版塊附上一段分析,謝了

這個最好自己寫,但是我有一個員工信息的代碼,含注釋,與這個很相似,只要稍加修改即可。

#include <stdio.h>
#include <stdlib.h>
#include <windows.h> //清屏函數頭文件
#include <string.h>
struct Stuff
{
char number[10]; //員工編號
char name[10]; //員工姓名
char sex[8]; //員工性別
char borth[10]; //員工生日
char degree[20]; //員工學歷
char business[20]; //員工職務
char phone[15]; //員工電話
char place[50]; //員工住址
char con[50]; //判斷關鍵字專用
struct Stuff *next;
};

char Menu(void); //菜單顯示
struct Stuff *App(struct Stuff *head); //添加
void Sort(struct Stuff *head); //排序
struct Stuff *Ser(struct Stuff *head); //查找
void Chn(struct Stuff *head,char n[10]); //更改
void Scpy(char *p,char *q); //排序中用於交換員工信息
struct Stuff *Del(struct Stuff *head,char n[10]); //刪除
int Sel(char ch,struct Stuff *p,struct Stuff *q); //判斷排序及關鍵字專用函數
void Prf(struct Stuff *head); //輸出
void Fre(struct Stuff *head); //釋放
int i=1; //定義全局變數,實現實時員工人數統計

int main(void)
{
char n[10];
struct Stuff *head=NULL; //鏈表頭指針定義
while(1)
{
switch(Menu())
{
case '1':
printf("請輸入員工信息,直接輸入'#'結束\n");
head=App(head);
break;
case '2':
Sort(head);
break;
case '3':
head=Ser(head);
break;
case '4':
printf("員工信息如下:\n");
Prf(head);
break;
case '5':
printf("請輸入員工編號:");
scanf("%s",n);
Chn(head,n);
break;
case '6':
printf("請輸入員工編號:");
scanf("%s",n);
head=Del(head,n);
break;
case '0':
printf("歡迎下次光臨,88!\n");
exit(0);
default:
printf("輸入錯誤,請重新輸入!\n");
}
fflush(stdin); //清楚緩沖區
printf("按任意鍵繼續~");
getchar();
system("cls"); //清屏效果
}
Fre(head);

return 0;
}
//菜單函數
char Menu(void)
{
char ch;
printf("------------請選擇-----------\n");
printf("1.添加員工信息\n2.員工信息排序\n3.查找員工信息\n4.輸出員工信息\n5.更改員工信息\n6.刪除員工信息\n0.退出\n-----------------------------\n");
scanf(" %c",&ch);
return ch;
}
//添加成員函數
//輸入參數:鏈表頭指針
//返回參數:鏈表頭指針
struct Stuff *App(struct Stuff *head)
{
struct Stuff *p=NULL,*q=head;
while(i)
{
p=(struct Stuff *)malloc(sizeof(struct Stuff)); //申請結構體空間
if(p==NULL)
{
printf("內存不夠!\n");
exit(0);
}
p->next =NULL; //指針域為空
printf("請輸入第%d名員工:\n",i);
printf(" 編號 | 姓名 | 性別 | 出生年月 | 學歷 | 職務 | 電話 | 住址 :\n");
fflush(stdin);
scanf("%s",p->number );
if(!strcmp(p->number ,"#"))
{
free(p); //釋放不需要的結構體內存
break;
}
else
{
++i;
scanf("%s%s%s%s%s%s%s",p->name ,p->sex ,p->borth ,p->degree ,p->business ,p->phone ,p->place );
p->con[0]='\0'; //防止後面判斷出現隨機值
if(head==NULL)
head=p;
else
{
while(q->next !=NULL) //防止結束後再次輸入時出現問題
q=q->next ;
q->next =p;
}
q=p; //每次都加在鏈表尾
}
}
return head;
}

//排序函數
//輸入參數:頭指針
void Sort(struct Stuff *head)
{
char ch;
struct Stuff *p,*q,*r;
while(1)
{
printf("請選擇排序條件:1.編號2.姓名3.性別4.出生年月5.學歷6.職務7.電話8.地址0.退出\n");
scanf(" %c",&ch);
if(ch=='0')
break;
if(ch<'1'||ch>'8')
{
printf("輸入錯誤,請重新輸入!\n");
continue;
}
p=head;
while(p->next!=NULL) //選擇排序
{
q=p->next;
r=p;
while(q!=NULL)
{
if(Sel(ch,r,q)) //調用判斷函數
r=q;
q=q->next;
}
if(r!=p) //交換內容
{
Scpy(r->number,p->number);
Scpy(r->name,p->name);
Scpy(r->sex,p->sex);
Scpy(r->borth,p->borth);
Scpy(r->degree,p->degree);
Scpy(r->business,p->business);
Scpy(r->phone,p->phone);
Scpy(r->place,p->place);
}
p=p->next;
}
Prf(head); //輸出
}
}

//交換函數
void Scpy(char *p,char *q)
{
char c[50];
strcpy(c,p);
strcpy(p,q);
strcpy(q,c);
}

//判斷函數
//輸出參數:1為真,0為假
int Sel(char ch,struct Stuff *p,struct Stuff *q)
{
switch(ch) //實現各個關鍵字查找
{
case '1':
return strcmp(q->number ,p->number )<0||strcmp(q->con ,p->number )==0 ; //排序條件及查找條件
case '2':
return strcmp(q->name ,p->name )<0||strcmp(q->con ,p->name )==0 ;
case '3':
return strcmp(q->sex ,p->sex )<0||strcmp(q->con ,p->sex )==0 ;
case '4':
return strcmp(q->borth ,p->borth)<0 ||strcmp(q->con ,p->borth )==0 ;
case '5':
return strcmp(q->degree ,p->degree )<0||strcmp(q->con ,p->degree )==0 ;
case '6':
return strcmp(q->business ,p->business )<0||strcmp(q->con ,p->business)==0 ;
case '7':
return strcmp(q->phone ,p->phone )<0 ||strcmp(q->con ,p->phone)==0;
case '8':
return strcmp(q->place ,p->place )<0||strcmp(q->con ,p->place )==0;
default :
exit(0);
}
}

//查找函數
struct Stuff *Ser(struct Stuff *head)
{
struct Stuff *p=NULL,*q,a={"\0","\0","\0","\0","\0","\0","\0","\0"}; //防止判斷時錯誤
int flag; //查找判斷
char ch,sh;
q=&a;
while(1)
{
printf("請輸入要查找的條件:1.編號2.姓名3.性別4.出生年月5.學歷6.職務7.電話8.住址0.退出\n");
scanf(" %c",&ch);
if(ch=='0')
break;
if(ch<'1'||ch>'8')
{
printf("輸入錯誤,請重新輸入!\n");
continue;
}
fflush(stdin);
printf("請輸入:");
gets(q->con );
p=head; //指向表頭
flag=0;
while(p!=NULL)
{
if(Sel(ch,p,q))
{
printf("員工信息如下:\n");
printf(" 編號 | 姓名 | 性別 | 出生年月 | 學歷 | 職務 | 電話 | 住址 \n%s %s %s %s %s %s %s %s\n"
,p->number ,p->name ,p->sex ,p->borth ,p->degree ,p->business ,p->phone ,p->place );
printf("是否需要:1.更改 2.刪除 3.繼續\n");
scanf(" %c",&sh);
if(sh=='1')
Chn(head,p->number); //調用更改函數
else if(sh=='2')
head=Del(head,p->number); //調用刪除函數,得到的head必須return
flag=1;
break;
}
p=p->next ;
}
if(flag==0)
printf("沒有找到該員工信息!\n");
}
return head;
}

//更改函數
//輸入參數:n[10] 為員工編號
void Chn(struct Stuff *head,char n[10])
{
struct Stuff *p=head;
int flag=0;
if(head==NULL)
printf("未找到員工信息!\n");
else
{
while(p!=NULL)
{
if(!strcmp(p->number,n))
{
printf("請輸入新的信息:\n編號|姓名|性別|出生年月|學歷|職務|電話|住址\n");
scanf("%s%s%s%s%s%s%s%s",p->number ,p->name ,p->sex ,p->borth ,p->degree ,p->business ,p->phone ,p->place );
printf("員工信息如下:\n");
flag++;
break;
}
p=p->next;
}
if(flag==0)
printf("未找到該員工信息!\n");
}
Prf(head);
}

//刪除函數
//輸入參數:n為員工編號
//輸出參數:頭指針
struct Stuff *Del(struct Stuff *head,char n[10])
{

struct Stuff *p,*pr;
int flag;
flag=0;
p=head,pr=head;
if(head==NULL)
printf("未找到員工信息!\n");
else
{
while(strcmp(p->number ,n)&&p->next !=NULL)
{
pr=p;
p=p->next ;
}
if(!strcmp(p->number ,n))
{
if(p==head)
head=p->next ;
else
pr->next=p->next ;
free(p);
printf("刪除成功!\n");
i--;
}
else
printf("未找到員工信息!\n");
}
Prf(head);
return head;
}

//輸出函數
void Prf(struct Stuff *head)
{
struct Stuff *p=head;
int i=1;
while(p!=NULL)
{
printf("%d. %s %s %s %s %s %s %s %s\n"
,i++,p->number ,p->name ,p->sex ,p->borth ,p->degree ,p->business ,p->phone ,p->place);
p=p->next ;
}
}

//釋放函數
void Fre(struct Stuff *head)
{
struct Stuff *p;
while(head!=NULL)
{
p=head;
head=head->next ;
free(p);
}
}
只有400行不到,分的如果你真的看懂了,就應該自己寫,程序是死的人是活的,自己動手改改吧。