#include<stdlib.h>
#include<string.h>
#define MAXSIZE 100 /*定義最大參會人數*/
typedef struct /*參會人員的數據結構*/
{
char name[20]; /*姓名*/
char sex[7]; /*性別*/
int age; /*年齡*/
char department[30];/*單位*/
char room_num[10]; /*房間號*/
}STAFF;
void menu()
{
printf("\n");
printf("-----Meeting attendant Managing System Demo----\n");
printf("1.Staff login\n");
printf("2.Show Info\n");
printf("3.Search\n");
printf("4.Statistics\n");
printf("5.Modify\n");
printf("6.Delete\n");
printf("0.Quit\n");
printf("---\n");
}
/*函數原型*/
int login(STAFF staff[],int length);
void print(STAFF staff[],int length);
void seachByName(STAFF staff[],int length);
void statistics(STAFF staff[],int length);
void edit(STAFF staff[],int length);
int Delete(STAFF staff[],int length);
/*函數的定義*/
int login(STAFF staff[],int length)
{
int i;
if(length==100) /*房間已滿,拒絕登陸*/
{
printf("There is no any empty room left!\n login prohibited!");
exit(-1);
} /*end if*/
else
{
char room_num[10];
printf("Type in the room-num:");
scanf("%s",&room_num);
for(i=0;i<length;i++)
{
if(strcmp(room_num,staff[i].room_num)==0)
{ /*申請的房間已經有人*/
printf("The room you chose is full,please choose anther...\n");
printf("Type in another different room-num:");/*讓參會人選擇
別的空房間*/
scanf("%s",&room_num);
i=-1; /*為檢驗新的房間是否為空作準備*/
}
}/*end for*/
/* 錄入登陸信息*/
strcpy(staff[length].room_num,room_num);
printf("Type in your name:");
scanf("%s",&staff[length].name);
printf("Type in your gender:");
scanf("%s",&staff[length].sex);
printf("Type in your age:");
scanf("%d",&staff[length].age);
printf("Type in your dapartment:");
scanf("%s",&staff[length].department);
length++;/*參會人數加壹*/
}/*end else*/
return length;
}/*end login()*/
void print(STAFF staff[],int length)
{
STAFF temp;
int i,j;
if(length!=0)
{
for(i=0;i<length;i++) /*冒泡排序*/
for(j=i;j<length-i-1;j++)
if(strcmp(staff[j].room_num,staff[j+1].room_num)>0)
{
temp=staff[j];
staff[j]=staff[j+1];
staff[j+1]=temp;
}
printf("Staff logined info:\n");
printf("Name Sex Age Department room-num\n");
for(i=0;i<length;i++)
{ /*輸出報到人員的信息*/
printf("%s\t",staff[i].name);
printf("%s\t",staff[i].sex);
printf("%d\t",staff[i].age);
printf("%s\t",staff[i].department);
printf("%9s",staff[i].room_num);
printf("\n");
}
}
else
printf("No one logined yet...\n");
}/*end print()*/
void seachByName(STAFF staff[],int length)
{
char name[20];
int i;
int counter=0;
if(length!=0)
{
printf("Tpye in the staff's name you search:");
scanf("%s",&name);
printf("Name Sex Age Department room-num\n");
for(i=0;i<length;i++)
{
if(strcmp(staff[i].name,name)==0)
{
/*判斷名字是否相同,相同則輸出人員信息*/
printf("%s\t",staff[i].name);
printf("%s\t",staff[i].sex);
printf("%d\t",staff[i].age);
printf("%s\t",staff[i].department);
printf("%13s",staff[i].room_num);
printf("\n");
counter++;
}
}
if(counter==0) /*查找的人還沒登錄*/
printf("\n%s hasn't logined yet...\n",name);
}
else
printf("No one logined yet...\n");
}/*end seachByName*/
void edit(STAFF staff[],int length)
{
char room_num[10];
int i,k;
if(length!=0)
{
printf("Tpye in the staff's room-num you edit:");
scanf("%s",&room_num);
for(i=0;i<length;i++)
{
if(strcmp(staff[i].room_num,room_num)==0)
{
printf("Type in your room-num:");
scanf("%s",&room_num);
for(k=0;k<length;k++)
{
if(k==i) continue; /*可以選擇原來的房間*/
if(strcmp(room_num,staff[k].room_num)==0)
{ /*申請的房間已經有人*/
printf("The room you chose is full,please
choose anther...\n");
printf("Type in another different room-
num:");
scanf("%s",&room_num); /*提示選擇別的空房間
*/
k=-1; /*為檢驗新的房間是否為空作準備*/
}
}
/*修改人員信息*/
strcpy(staff[i].room_num,room_num);
printf("Type in your name:");
scanf("%s",&staff[i].name);
printf("Type in your gender:");
scanf("%s",&staff[i].sex);
printf("Type in your age:");
scanf("%d",&staff[i].age);
printf("Type in your dapartment:");
scanf("%s",&staff[i].department);
printf("Edit successfully...");
}
}
}
else
printf("No one logined yet...\n");
}/*end edit*/
int Delete(STAFF staff[],int length)
{
int i,k;
int counter=length;
char room_num[10];
if(length!=0)
{
printf("Tpye in the staff's room-num you delete:");
scanf("%s",&room_num);
for(i=0;i<length;i++)
{
if(strcmp(staff[i].room_num,room_num)==0)
{ /*刪除人員*/
for(k=i;k<length-1;k++)
staff[k]=staff[k+1]; /*把該人員的信息覆蓋掉*/
printf("Delete successfully...");
length--; /*參會人數減壹*/
}
}
if(counter==length) /*要刪除的人員還沒登陸*/
printf("The staff you want to delete hasn't logined yet...\n");
}
else
printf("No any staff logined yet...\n");
return length;
}/*end Delete()*/
void statistics(STAFF staff[],int length)
{
int i;
int k,j;
int index;
int flag=0; /*輔助標記*/
char department[100][30]; /*用於記錄不同單位的名字*/
int counter[100]; /*分別記錄相應不同單位的參會人數*/
if(length!=0)
{
k=0; /*單獨處理數組第壹個元素*/
strcpy(department[k],staff[0].department); /*記錄單位*/
counter[k]=0;/*計數器清零*/
for(j=0;j<length;j++)/*計算次單位參會的總人數*/
if(strcmp(department[k],staff[j].department)==0)
counter[k]++;
for(i=1;i<length;i++)
{
for(index=0;index<=k;index++)
{
if(strcmp(department[index],staff[i].department)==0)
flag++; /*當前此單位在前面已經統計過*/
}
if(flag==0)
{
/*出現壹個未統計過的單位*/
k++; /*用兩數組的下壹個元素分別存放單位和該單位參會人數*/
strcpy(department[k],staff[i].department);/*記錄單位*/
counter[k]=0;/*計數器清零*/
for(j=0;j<length;j++)/*計算次單位參會的總人數*/
if(strcmp(department[k],staff[j].department)==0)
counter[k]++;
}
flag=0; /*輔助標誌清零*/
}
printf("Statistics result:\n");
printf("Department number\n");
for(i=0;i<=k;i++)
{
printf("%s%20d\n",department[i],counter[i]);
}
}
else
printf("No one logined yet...\n");
}/*end statistics()*/
int main()
{
int length=0; /*記錄登陸人數*/
STAFF staff[MAXSIZE]; /*申請結構體數組*/
int choice=-1;
menu();
printf("Enter your choice(0-6):");
scanf("%d",&choice); /*由用戶選擇操作*/
while(choice>=0&&choice<=6)
{
switch(choice)
{
case 1:length=login(staff,length);break;
case 2:print(staff,length);break;
case 3:seachByName(staff,length);break;
case 4:statistics(staff,length);break;
case 5:edit(staff,length);break;
case 6:length=Delete(staff,length);break;
case 0:printf("Quit successully...\n");
exit(-1); /*退出*/
}
menu();
printf("Enter your choice(0-6):");
scanf("%d",&choice);
}
printf("Sorry,there is no such function provided...\n");
return 0;
}