一个简单的宿舍管理系统

一个简单的宿舍管理系统


#include <stdio.h>
#include <stdlib.h>
#include <string.h>


struct sushe
{
char area[20];
char storey[20]; 
int number;
char name[20];
int electric;
int water;
int drink;
struct sushe *next; 
 } ;
 
struct sushe *create()    //先构造一个结构体 
{
struct sushe *head,*p1;

p1=(struct sushe*)malloc(sizeof(struct sushe));  //申请一个空间
head=p1;

printf("\n宿舍信息\n");    //输入宿舍的信息 
printf("区号:");
scanf("%s",p1->area);
printf("楼号:");
scanf("%s",p1->storey);
printf("宿舍号:");
scanf("%d",&p1->number);
printf("负责人姓名:");
scanf("%s",p1->name);
printf("电费:");
scanf("%d",&p1->electric);
printf("自来水水费:");
scanf("%d",&p1->water);
printf("用水水费:");
scanf("%d",&p1->drink);

return head;
}
 
struct sushe *input(int n)  //输入宿舍信息 
{
   int i;
   char y ;
   struct sushe *head,*pt,*p;
   head=pt;
   p=(struct sushe*)malloc(sizeof(struct sushe));  //申请一个空间
   
   if(i!=1)  //判断是不是第一空间 
   {
     for(i=1;i<n;i++)
     {    
    pt=pt->next;
     }
      pt->next=create();
    }
    else
    {
    pt=create();

   
   pt=pt->next;   
   pt->next=p;
   pt=pt->next;
   pt->next=NULL;  
   
   return head;
}


void amend1(struct sushe *head)   //修改宿舍信息 
{
int k,fale=0;
char z,a[20];
struct sushe *p; 

  do
   {
p=head;
p=p->next;

printf("请输入修改的宿舍负责人的姓名:");
scanf("%s",a);

printf("区号 楼号 宿舍号 负责人姓名 电费 自来水水费 用水水费\n");
printf("\n------------------------------------------------------------------------------------------------------------\n");

do
{
if(strcmp(p->name,a)==0)    
 {
  printf("%s %s %d %s %d %d %d\n",p->area,p->storey,p->number,p->name,p->electric,p->water,p->drink);
  printf("\n1.区号\n2.楼号\n3.班宿舍号\n4.负责人姓名\n5.电费\n6.自来水水费\n7.用水水费\n0.不修改");
  printf("\n请输入要修改:");
scanf("%d",&k);
   
switch(k)  
{
case 1:{
   printf("修改为:");
       scanf("%s",p->area);
break;
}
case 2:{
printf("修改为:");
scanf("%s",p->storey);
break;
}
case 3:{
printf("修改为:");
scanf("%d",&p->number);
break;

   case 4:{
    printf("修改为:");
    scanf("%s",p->name);
break;
}
   case 5:{
    printf("修改为:");
    scanf("%d",&p->electric);
break;
}
   case 6:{
    printf("修改为:");
    scanf("%d",&p->water);
break;
}
   case 7:{
    printf("修改为:");
    scanf("%d",&p->drink);
break;
}
   case 0:break;
 };
 
fale=1;
break;
 }

p=p->next;

}while(p->next!=NULL);

if(fale==0)   printf("没有查找到这宿舍。\n");    
 
printf("是否继续修改别的信息(Y/N):");  //是否还进行修改的判断 
getchar();
scanf ("%c",&z);
system("cls"); 
  }while(z!='n'&&z!='N');

}


void amend2(struct sushe *head)   //修改宿舍信息 
{
int m,k,fale=0;
char z,a[20],b[20];
struct sushe *p; 

  do
   {
p=head;
p=p->next;

printf("请输入修改的宿舍所在区号:");
scanf("%s",a);
printf("请输入修改的楼号:");
scanf("%s",b); 
printf("请输入要修改的宿舍号:");
scanf("%d",&m);

printf("区号 楼号 宿舍号 负责人姓名 电费 自来水水费 用水水费\n");
printf("\n------------------------------------------------------------------------------------------------------------\n");

do
{

if(strcmp(p->area,a)==0)
if(strcmp(p->storey,b)==0)
   if(p->number==m)  
 {
  printf("%s %s %d %s %d %d %d\n",p->area,p->storey,p->number,p->name,p->electric,p->water,p->drink);
  printf("\n1.区号\n2.楼号\n3.班宿舍号\n4.负责人姓名\n5.电费\n6.自来水水费\n7.用水水费\n0.不修改");
  printf("\n请输入要修改:");
scanf("%d",&k);
   
switch(k)  
{
case 1:{
   printf("修改为:");
       scanf("%s",p->area);
break;
}
case 2:{
printf("修改为:");
scanf("%s",p->storey);
break;
}
case 3:{
printf("修改为:");
scanf("%d",&p->number);
break;

   case 4:{
    printf("修改为:");
    scanf("%s",p->name);
break;
}
   case 5:{
    printf("修改为:");
    scanf("%d",&p->electric);
break;
}
   case 6:{
    printf("修改为:");
    scanf("%d",&p->water);
break;
}
   case 7:{
    printf("修改为:");
    scanf("%d",&p->drink);
break;
}
   case 0:break;
 };
 
fale=1;
break;
 }

p=p->next;

}while(p->next!=NULL);

if(fale==0)   printf("没有查找到这宿舍。\n");    
 
printf("是否继续修改别的信息(Y/N):");  //是否还进行修改的判断 
getchar();
scanf ("%c",&z);
system("cls"); 
  }while(z!='n'&&z!='N');

}


void camcel1(struct sushe *head)   // 删除宿舍信息
{
int i=1,k,fale=0;
char z,a[20];
struct sushe *p,*pt; 

  do
   {
p=head;
pt=head;
p=p->next; 

printf("请输入要删除的宿舍负责人的姓名:");
scanf("%s",a);


printf("区号 楼号 宿舍号 负责人姓名 电费 自来水水费 用水水费\n");
printf("\n------------------------------------------------------------------------------------------------------------\n");
do
{


if(strcmp(p->name,a)==0)  //寻找该学生 
 {
  printf("%s %s %d %s %d %d %d\n",p->area,p->storey,p->number,p->name,p->electric,p->water,p->drink);
  printf("\n是否要删除(Y/N):");   
  getchar();
scanf("%c",&k);
 
if(k=='y'||k=='Y')   //对学生删除的操作 
{
 if(i==1)    //先判断是否是第一个学生 
 {
  head->next=p->next;
 }
  else
  {
             do
             {
        pt=pt->next;          
    }while(pt->next!=p);
    
    pt->next=p->next;
    free(p);
           }
   }
fale=1;
break;
 }

i++;
p=p->next;

}while(p->next!=NULL);

if(fale==0)   printf("没有查找到这宿舍。\n"); 

printf("是否继续删除别的信息(Y/N):");
getchar();
scanf ("%c",&z);
system("cls");

  }while(z!='n'&&z!='N');
}


void camcel2(struct sushe *head)   // 删除宿舍信息
{
int i=1,m,k,fale=0;
char z,a[20],b[20];
struct sushe *p,*pt; 

  do
   {
p=head;
pt=head;
p=p->next; 

printf("请输入修改的宿舍所在区号:");
scanf("%s",a);
printf("请输入修改的楼号:");
scanf("%s",b); 
printf("请输入要修改的宿舍号:");
scanf("%d",&m);

printf("区号 楼号 宿舍号 负责人姓名 电费 自来水水费 用水水费\n");
printf("\n------------------------------------------------------------------------------------------------------------\n");

do
{
if(strcmp(p->area,a)==0)
if(strcmp(p->storey,b)==0)
 if(p->number==m)   //寻找该学生 
 {
  printf("%s %s %d %s %d %d %d\n",p->area,p->storey,p->number,p->name,p->electric,p->water,p->drink);


  printf("\n是否要删除(Y/N):");   
  getchar();
scanf("%c",&k);
 
if(k=='y'||k=='Y')   //对学生删除的操作 
{
 if(i==1)    //先判断是否是第一个学生 
 {
  head->next=p->next;
 }
  else
  {
             do
             {
        pt=pt->next;          
    }while(pt->next!=p);
    
    pt->next=p->next;
    free(p);
           }
   }
fale=1;
break;
 }

i++;
p=p->next;

}while(p->next!=NULL);

if(fale==0)   printf("没有查找到这宿舍。\n"); 

printf("是否继续删除别的信息Y/N):");
getchar();
scanf ("%c",&z);
system("cls");

  }while(z!='n'&&z!='N');
}


void xingmingchaxun(struct sushe *head) 
{
struct sushe *p;
char a[20],c;
int fale=0,m;

  do
   {
    p=head;
    printf("查找宿舍的负责人姓名");
scanf("%s",a); 

printf("区号 楼号 宿舍号 负责人姓名 电费 自来水水费 用水水费\n");
printf("\n------------------------------------------------------------------------------------------------------------\n");

do
{


  if(strcmp(p->name,a)==0)
{
  printf("%s %s %d %s %d %d %d\n",p->area,p->storey,p->number,p->name,p->electric,p->water,p->drink);
  fale=1;
  c=1;
}

p=p->next;

}while(p->next!=NULL);

if(fale==0) printf("\n没有查找到该负责人学生的姓名\n");

printf("\n\n是否继续查找(Y/N):");
getchar();
scanf ("%c",&c);

    }while(c!='n'&&c!='N');
}


void quansushe(struct sushe *head)//全部查询 
{
struct sushe *p;
char c;

p=head;
p=p->next;
do
{
printf("区号 楼号 宿舍号 负责人姓名 电费 自来水水费 用水水费\n");
printf("\n-----------------------------------------------------------------------------------------\n");

 do
 {
  printf("%s %s %d %s %d %d %d\n",p->area,p->storey,p->number,p->name,p->electric,p->water,p->drink);
p=p->next;
 }while(p->next!=NULL);

printf("\n\n是否继续查找(Y/N):");
getchar();
scanf ("%c",&c);

    }while(c!='n'&&c!='N');
 } 


void quhaochaxun(struct sushe *head)// 区号查询
{
struct sushe *p;
char a[20],c;
int fale=0;

  do
   {
    p=head;
    p=p->next;
    printf("\n输入要查找的区号:");
scanf("%s",a);


printf("区号 楼号 宿舍号 负责人姓名 电费 自来水水费 用水水费\n");
printf("\n------------------------------------------------------------------------------------------------------------\n");
   
do
{


  if(strcmp(p->area,a)==0)
{
  printf("%s %s %d %s %d %d %d\n",p->area,p->storey,p->number,p->name,p->electric,p->water,p->drink);
  fale=1;
  c=1;
}

p=p->next;

}while(p->next!=NULL);

if(fale==0) printf("\n没有查找到该宿舍\n");

printf("\n\n是否继续查找(Y/N):");
getchar();
scanf ("%c",&c);

    }while(c!='n'&&c!='N');
}


void loucengchaxun(struct sushe *head)// 楼层称查询
{
struct sushe *p;
char b[20],c;
int fale=0;

  do
   {
    p=head;
    p=p->next;


printf("\n输入要查找的楼号");
scanf("%s",b) ;
   
    printf("区号 楼号 宿舍号 负责人姓名 电费 自来水水费 用水水费\n");
printf("\n------------------------------------------------------------------------------------------------------------\n");
   
do
{

  if(strcmp(p->storey,b)==0)
{
  printf("%s %s %d %s %d %d %d\n",p->area,p->storey,p->number,p->name,p->electric,p->water,p->drink);
  fale=1;
  c=1;
}

p=p->next;

}while(p->next!=NULL);

if(fale==0) printf("\n没有查找到该楼号\n");

printf("\n\n是否继续查找(Y/N):");
getchar();
scanf ("%c",&c);
    }while(c!='n'&&c!='N');
}


void sushechaxun(struct sushe *head)// 宿舍号查询
{
struct sushe *p;
char a[20],b[20],c;
int fale=0,d;

  do
   {
    p=head;
    p=p->next;


    printf("\n输入要查找的区号");
    scanf("%s",a);
printf("\n输入要查找的楼号");
scanf("%s",b) ;
printf("\n输入宿舍号");
scanf("%d",&d); 
   
    printf("区号 楼号 宿舍号 负责人姓名 电费 自来水水费 用水水费\n");
printf("\n------------------------------------------------------------------------------------------------------------\n");
   
do
{
if(strcmp(p->area,a)==0)
 if(strcmp(p->storey,b)==0)
   if(d==p->number) 
{
 
  printf("%s %s %d %s %d %d %d\n",p->area,p->storey,p->number,p->name,p->electric,p->water,p->drink);
  fale=1;
  c=1;
}

p=p->next;

}while(p->next!=NULL);

if(fale==0) printf("\n没有查找到该楼号\n");

printf("\n\n是否继续查找(Y/N):");
getchar();
scanf ("%c",&c);

    }while(c!='n'&&c!='N');
}


void dianfeipaixun(struct sushe *head)  //按电费高低排序 
{
char c;
int k,i,j;
struct sushe *p,temp;
struct sushe a[1024];

p=head;
    p=p->next;

for(k=0;p->next!=NULL;k++)
{
a[k].number=p->number;
strcpy(a[k].name,p->name);
strcpy(a[k].area,p->area);
strcpy(a[k].storey,p->storey);
a[k].drink=p->drink;
a[k].electric=p->electric;
a[k].water=p->water; 
p=p->next;
}

for(i=0;i<=k;i++)    //冒泡法来排列顺序 
     {
    for(j=0;j<=k-1;j++)
   {
  if(a[j].electric<a[j+1].electric)
  {
  temp=a[j];
  a[j]=a[j+1];
  a[j+1]=temp;
 }
     
 }
    }
    
    printf("区号 楼号 宿舍号 负责人姓名 电费 自来水水费 用水水费\n");
printf("\n------------------------------------------------------------------------------------------------------------\n");
    
    printf("Nes:\n");
do

 
     for(i=0;i<k;i++)
     {
  printf("%s %s %d %s %d %d %d\n",a[i].area,a[i].storey,a[i].number,a[i].name,a[i].electric,a[i].water,a[i].drink);
 
}
 
printf("\n\n是否退出(Y/N):");
getchar();
scanf ("%c",&c);
 
   }while(c!='y'&&c!='Y');
}
   
   
void zilaishuifeipaixun(struct sushe *head)  //按自来水费高低排序 
{
char c;
int k,i,j;
struct sushe *p,temp;
struct sushe a[1024];

p=head;
    p=p->next;

for(k=0;p->next!=NULL;k++)
{
a[k].number=p->number;
strcpy(a[k].name,p->name);
strcpy(a[k].area,p->area);
strcpy(a[k].storey,p->storey);
a[k].drink=p->drink;
a[k].electric=p->electric;
a[k].water=p->water; 
p=p->next;
}

for(i=0;i<=k;i++)    //冒泡法来排列顺序 
     {
    for(j=0;j<=k-1;j++)
   {
  if(a[j].water<a[j+1].water)
  {
  temp=a[j];
  a[j]=a[j+1];
  a[j+1]=temp;
 }
     
 }
    }
    
    printf("区号 楼号 宿舍号 负责人姓名 电费 自来水水费 用水水费\n");
printf("\n------------------------------------------------------------------------------------------------------------\n");
    
    printf("Nes:\n");
do

 
     for(i=0;i<k;i++)
     {
  printf("%s %s %d %s %d %d %d\n",a[i].area,a[i].storey,a[i].number,a[i].name,a[i].electric,a[i].water,a[i].drink);
 
}
 
printf("\n\n是否退出(Y/N):");
getchar();
scanf ("%c",&c);
 
   }while(c!='y'&&c!='Y');
}


void yingyongshuifeipaixun(struct sushe *head)  //按饮用水高低排序 
{
char c;
int k,i,j;
struct sushe *p,temp;
struct sushe a[1024];

p=head;
    p=p->next;

for(k=0;p->next!=NULL;k++)
{
a[k].number=p->number;
strcpy(a[k].name,p->name);
strcpy(a[k].area,p->area);
strcpy(a[k].storey,p->storey);
a[k].drink=p->drink;
a[k].electric=p->electric;
a[k].water=p->water; 
p=p->next;
}

for(i=0;i<=k;i++)    //冒泡法来排列顺序 
     {
    for(j=0;j<=k-1;j++)
   {
  if(a[j].drink<a[j+1].drink)
  {
  temp=a[j];
  a[j]=a[j+1];
  a[j+1]=temp;
 }
     
 }
    }
    
    printf("区号 楼号 宿舍号 负责人姓名 电费 自来水水费 用水水费\n");
printf("\n------------------------------------------------------------------------------------------------------------\n");
    
    printf("Nes:\n");
do

 
     for(i=0;i<k;i++)
     {
  printf("%s %s %d %s %d %d %d\n",a[i].area,a[i].storey,a[i].number,a[i].name,a[i].electric,a[i].water,a[i].drink);
 
}
 
printf("\n\n是否退出(Y/N):");
getchar();
scanf ("%c",&c);
 
   }while(c!='y'&&c!='Y');
}


void dianfeijiaogao(struct sushe *head)  //电费较高的宿舍的比率
{
struct sushe *p;
char a[20],c;
float n=0,m=0;

  do
   {
    p=head;
    p=p->next;
   
    printf("区号 楼号 宿舍号 负责人姓名 电费 自来水水费 用水水费\n");
printf("\n------------------------------------------------------------------------------------------------------------\n");
   
do
{
          if(p->electric>=80)
  { 
n++;
  printf("%s %s %d %s %d %d %d\n",p->area,p->storey,p->number,p->name,p->electric,p->water,p->drink);
           } 

m++;

p=p->next;

}while(p->next!=NULL);

    printf("电费使用较高的宿舍比率为:%0.2f",n/m) ;

printf("\n\n是否退出查找(Y/N):");
getchar();
scanf ("%c",&c);

    }while(c!='y'&&c!='Y');
}


void zilaishuijiaogao(struct sushe *head)  //自来水较高的宿舍的比率
{
struct sushe *p;
char a[20],c;
float n=0,m=0;

  do
   {
    p=head;
    p=p->next;


printf("区号 楼号 宿舍号 负责人姓名 电费 自来水水费 用水水费\n");
printf("\n------------------------------------------------------------------------------------------------------------\n");
   
do
{


          if(p->water>=80)
  { 
n++;
  printf("%s %s %d %s %d %d %d\n",p->area,p->storey,p->number,p->name,p->electric,p->water,p->drink);
           } 

m++;

p=p->next;

}while(p->next!=NULL);

    printf("自来水使用较高的宿舍比率为:%0.2f",n/m) ;

printf("\n\n是否退出查找(Y/N)::");
getchar();
scanf ("%c",&c);

    }while(c!='y'&&c!='Y');
}


void yinyongshuijiaogao(struct sushe *head)  //饮用水较高的宿舍的比率
{
struct sushe *p;
char a[20],c;
float n=0,m=0;

  do
   {
    p=head;
    p=p->next;
   
printf("区号 楼号 宿舍号 负责人姓名 电费 自来水水费 用水水费\n");
printf("\n------------------------------------------------------------------------------------------------------------\n");  
   
do
{
          if(p->drink>=80)
  { 
n++;
  printf("%s %s %d %s %d %d %d\n",p->area,p->storey,p->number,p->name,p->electric,p->water,p->drink);
           } 
           
m++;
p=p->next;

}while(p->next!=NULL);

    printf("饮用水使用较高的宿舍比率为:%0.2f",n/m) ;

printf("\n\n是否退出查找(Y/N):");
getchar();
scanf ("%c",&c);

    }while(c!='y'&&c!='Y');
}


struct sushe *intput_shuji() //数据导入 
{
int jisuan(char a[]);

FILE *out;
char ch,outfile[256];
char line[1024];


struct sushe *head;   
struct sushe *p,*q;

head=p=(struct sushe*)malloc(sizeof(struct sushe));  //申请一个空间


printf("输入读入文件的名字:");
scanf("%s",outfile);

if((out=fopen(outfile,"r"))==NULL) 
{
printf("无法打开此文件\n");
exit(0);
}
while(!feof(out))
{
q=(struct sushe*)malloc(sizeof(struct sushe));
p->next=q;
p=q;
fgets(line,50,out);
sscanf(line,"%s %s %d %s %d %d %d",p->area,p->storey,&p->number,p->name,&p->electric,&p->water,&p->drink);
}

q=(struct sushe*)malloc(sizeof(struct sushe));
p->next=q; 
q->next=NULL;
 
fclose(out);
 
return head;
 } 
 
 int main()
{
int n=0,ch=0,th=0,ah=0;

    struct sushe *create();
    struct sushe *input(int n) ;
    void amend1(struct sushe *head);
    void amend2(struct sushe *head);
    void camcel1(struct sushe *head);
    void camcel2(struct sushe *head);
    void xingmingchaxun(struct sushe *head);
    void quhaochaxun(struct sushe *head);
    void quansushe(struct sushe *head);
    void loucengchaxun(struct sushe *head);
void sushechaxun(struct sushe *head);
void dianfeipaixun(struct sushe *head);
void zilaishuifeipaixun(struct sushe *head);
void yingyongshuifeipaixun(struct sushe *head);
int jisuan(char a[]); 
struct sushe *intput_shuji();
void dianfeijiaogao(struct sushe *head);
void zilaishuijiaogao(struct sushe *head);
void yinyongshuijiaogao(struct sushe *head); 

struct sushe *head;


do
{
printf(" 宿舍管理系统\n\n");
printf("-----------------------------------------\n") ; 
    printf(" 1.宿舍信息输入\n 2.宿舍信息修改\n 3.宿舍信息查找\n 4.宿舍数据排名\n 0.退出系统\n") ;
printf("\n----------------------------------------\n") ;
printf("\n 要进行的步骤");
scanf("%d",&ch) ;
system("cls");

switch(ch)
{
case 1:{
  do
  {
  printf("\n1.手动输入宿舍信息\n2.由文件导入宿舍信息\n0.返回上一层");
  printf("\n要进行的步骤:");
  scanf("%d",&th);
 
  switch(th)
  {
case 1:{
n++;
               head=input(n);
   break;
      }
case 2: head=intput_shuji();break;      
}
system("cls");
}while(th!=0);
break;
}
   
   case 2:{
      do
  {
  printf("\n1.删除宿舍信息\n2.修改宿舍信息\n0.返回上一层\n");
  printf("\n要进行的步骤:");
  scanf("%d",&th);
  system("cls");
 
  switch(th)
  {
  case 1: {
  printf("\n1.姓名查找删除\n2.房号信息查找删除\n"); 
printf("\n要进行的步骤:"); 
  scanf("%d",&ah);
 
  switch(ah)
  {
  case 1:camcel1(head);break;
  case 2:camcel2(head);break;
}
break;
}
case 2:{
           printf("\n1.姓名查找修改\n2.房号信息查找修改\n");
printf("\n要进行的步骤:"); 
  scanf("%d",&ah);
 
  switch(ah)
  {
  case 1:amend1(head);break;
  case 2:amend2(head);break;
}
break;
      }
        }
         system("cls");
    }while(th!=0);
    break;
      }

   case 3:{
      do
  {
  printf("\n1.全部宿舍查询\n2.负责人姓名查询\n3.区号查询\n4.楼号查询\n5.房间查询\n0.返回上一层\n");
  printf("\n要进行的步骤:");
  scanf("%d",&th);
 
  switch(th)
  {
  case 1:quansushe(head);break;
case 2:xingmingchaxun(head);break;
           case 3:quhaochaxun(head);break;
           case 4:loucengchaxun(head);break;
           case 5:sushechaxun(head);break;


}
system("cls");
    }while(th!=0);
    break;
      }

   case 4:{
      do
  {
  printf("\n1.电费排序\n2.自来水费排名\n3.饮用水排名\n4.电费较高的宿舍\n5.水费较高的宿舍\n6.饮用水较高的宿舍\n0.回上一层\n");
  printf("\n要进行的步骤:");
  scanf("%d",&th);
 
  switch(th)
  {
  case 1:dianfeipaixun(head);break;
case 2:zilaishuifeipaixun(head);break;
           case 3:yingyongshuifeipaixun(head);break;
           case 4:dianfeijiaogao(head);break;
           case 5:zilaishuijiaogao(head);break;
                    case 6:yinyongshuijiaogao(head);break; 
}
system("cls");
    }while(th!=0);
               } 
               
               break;
            } 
    system("cls");
     
    }while(ch!=0) ;
    
    printf(" 欢迎再次使用!"); 
    
return 0;
 }

阅读更多
想对作者说点什么? 我来说一句

宿舍管理系统(C++版)

2009年12月21日 4KB 下载

没有更多推荐了,返回首页

加入CSDN,享受更精准的内容推荐,与500万程序员共同成长!
关闭
关闭