一个简单的宿舍管理系统
#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;
}