物业管理系统C语言程序实习报告

             

     本科生课程论文封面

课程名称 C语言程序课程设计

教师姓名             

本科生姓名               

本科生学号       

本科生专业材料科学与工程     

所在院系材化学院           

类别:  工科                     

日期:  201272-9        

课程设计评语

注:1、无评阅人签名成绩无效;

2、必须用钢笔或圆珠笔批阅,用铅笔阅卷无效;

3、如有平时成绩,必须在上面评分表中标出,并计算入总成绩。

摘要:

本文完成了综合练习中第20题物业管理系统的编程,程序用于小区的管理,管理的项目包括小区住户管理、物业收费项目管理、物业收费管理,并用文件存储相关信息。文中给出了需求分析、功能模块图、数据结构、详细设计、程序运行结果、总结和致谢,

      

目录

课程设计评语...................................................................................................................................1

个人简介...........................................................................................................................................2

摘要...................................................................................................................................................2

目录...................................................................................................................................................3

题目及要求.......................................................................................................................................4

需求分析...........................................................................................................................................4

功能模块图.......................................................................................................................................4

数据结构...........................................................................................................................................5

源代码...............................................................................................................................................5

程序运行结果..................................................................................................................................21

总结..................................................................................................................................................25

致谢..................................................................................................................................................25

参考文献..........................................................................................................................................25

1、题目要求

用于小区的物业管理,管理的项目包括小区住户管理、物业收费项目管理、物业收费管理。要求用文件存储相关信息。

⑴可随时浏览、录入和更改小区住户、收费项目等数据。

⑵可随时增、删、改、查收费项目及其标准。

⑶生成小区住户收费报表(包括全部、已交、欠交)。

2、需求分析

住户信息、物业收费信息要用文件存储(可用一个文件,也可分成两个文件)因而提供文件的输入/输出操作;另外,还要提供键盘式选择菜单以实现功能选择。

3、功能模块图

整个管理系统可以设计为住户信息、物业收费信息的浏览、修改、增加等模块。

依据程序的数据结构和功能,遵照“自顶向下”原则,采用基于函数的逐步求精法,描述该程序的层次结构:

 


4、数据结构

可以把住户信息、物业收费信息分别放在两个结构体内。

住户信息结构体:

struct yezhu {  //业主结构体//

   char id[100];

   char name[20];

   int age;

   int family_num;

   int floor_num;

   char room_num[100];

   float lost;

   int area;

   char rz_time[20];

   struct yezhu *next;

};

物业收费信息结构体:

struct wuye {   //物业信息结构体//

   char ID[100]; 

   int last_year;

   int last_month;

   float money;

   int to_time;

   struct wuye *link;

};

5、源代码

程序:

   

   

#include<stdio.h>

#include<stdlib.h>

#include<string.h>

#include<malloc.h>

#include<conio.h> //函数声明//

int mainmenu(); //主菜单

void xinximenu(); //物业信息菜单

void tongjimenu();//统计查询菜单

void mychaozhao(); //欠费名单

void yezhumenu();//业主菜单

void wuyemenu();//物业菜单

void myAdd1();//录入业主信息

void myAdd2(); //录入物业信息

void myDelete1();//删除业主信息

void myDelete2();//删除物业信息

void myReplace1();//修改业主信息

void myReplace2();//修改物业信息

void Display1();//浏览业主信息

void Display2();//浏览物业信息

void myfind();//查询缴费

void Display(struct wuye *p);

void Read1();

void Read2();

void save1(struct yezhu *p);//保存业主信息至文件

void save2(struct wuye *p);//保存物业信息至文件

struct yezhu *find1(char *id); //查找业主信息

struct wuye *find2(char *id);//查找物业信息`

struct yezhu *myAdd3(struct yezhu *p);//添加业主信息

struct wuye *myAdd4(struct wuye *p);

struct yezhu {  //业主结构体//

   char id[100];

   char name[20];

   int age;

   int family_num;

   int floor_num;

   char room_num[100];

   float lost;

   int area;

   char rz_time[20];

   struct yezhu *next;

};

struct wuye {   //物业信息结构体//

   char ID[100]; 

   int last_year;

   int last_month;

   float money;

   int to_time;

   struct wuye *link;

};

struct yezhu *phead; //业主头结点

struct wuye *pHead; //物业头结点

int mainmenu()//主菜单//

{

   int n;

   printf("**************************欢迎进入小区物业管理系统***************************\n");

   printf("-----------------------------------------------------------------------------\n");

   printf("* * * * * * * * * * * * * * * 〓请选择〓(1~3)* * * * * * * * * * * * * * *\n");

   printf("* *\n"); printf("* *\n");

   printf("* ⒈物业信息系统; *\n");

   printf("* *\n");

   printf("* ⒉统计查询系统; *\n");

   printf("* *\n");

   printf("* ⒊退出程序。 *\n");

   printf("* *\n");

   printf("* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *\n");

   printf("请您输入选项★№:");

   scanf("%d",&n);

   return n;

}

void xinximenu()//物业信息菜单显示//

{

   int choose;

   do {

       printf("*****************************物业信息系统************************************\n");

       printf("-----------------------------------------------------------------------------\n");

       printf("* * * * * * * * * * * * * * * 〓请选择〓(1~3)* * * * * * * * * * * * * * *\n");

       printf("* *\n");

       printf("* *\n");

       printf("* ⒈小区业主信息管理; *\n");

       printf("* *\n");

       printf("* ⒉物业费用信息管理; *\n");

       printf("* *\n");

       printf("* ⒊返回主菜单。 *\n");

       printf("* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *\n"); printf("请您输入选项★№:");

       scanf("%d",&choose);

       switch(choose)

           {

               case 1:yezhumenu();

                   break;

               case 2:wuyemenu();

                   break;

               case 3:return;

               default:printf("输入错误,请重新输入:\n");

           }

       } while(1);

}

void tongjimenu()    //统计查询菜单显示//

{

   int choose;

   do {

       printf("******************************统计查询系统***********************************\n");

       printf("-----------------------------------------------------------------------------\n");

       printf("* * * * * * * * * * * * * * * 〓请选择〓(1~3)* * * * * * * * * * * * * * *\n");

       printf("* *\n");

       printf("* *\n");

       printf("* ⒈查询缴费信息; *\n");

       printf("* *\n");

       printf("* ⒉欠费名单一览表; *\n");

       printf("* *\n");

       printf("* ⒊返回主菜单。 *\n");

       printf("* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *\n");

       printf("请您输入选项★№:");

       scanf("%d",&choose);

       switch(choose)

           {

               case 1 : myfind();

                   break;

               case 2 : mychaozhao();

                   break;

               case 3 : return;

               default: printf("输入错误,请重新输入!\n\n");

           }

       } while(1);

}

void yezhumenu()//业主菜单函数

{

   int choose;

   do {

       printf("********************************业主信息编辑系统******************************-\n");

       printf("-------------------------------------------------------------------------------\n");

       printf("* * * * * * * * * * * * * * * *〓请选择〓(1~5)* * * * * * * * * * * * * * *\n");

       printf("* *\n");

       printf("* *\n");

       printf("* ⒈业主信息录入; *\n");

       printf("* *\n");

       printf("* ⒉业主信息修改; *\n");

       printf("* *\n");

       printf("* ⒊业主信息删除; *\n");

       printf("* *\n");

       printf("* ⒋业主信息浏览; *\n");

       printf("* *\n");

       printf("* ⒌返回上级菜单。 *\n");

       printf("* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *\n");

       printf("请输入选项★№:");

       scanf("%d",&choose);

       //getchar();

       switch(choose)

           {

               case 1 :myAdd1();

                   break;

               case 2 :myReplace1();

                   break;

               case 3 :myDelete1();

                   break;

               case 4 :Display1();

                   break;

               case 5 : return;

               default: printf("输入错误,请重新输入:\n");

           }

       } while(1);

 }

void myAdd1()//录入业主信息//

 {

   struct yezhu *p;

   p=(struct yezhu *)malloc(sizeof(struct yezhu));

   printf("请录入业主信息:\n");

   printf("ID:");

   scanf("%s",p->id);

   printf("姓名:");

   scanf("%s",p->name);

   printf("年龄:");

   scanf("%d",&p->age);

   printf("家庭成员数:");

   scanf("%d",&p->family_num);

   printf("所在楼号:");

   scanf("%d",&p->floor_num);

   printf("单元房间号:");

   scanf("%s",p->room_num);

   printf("住宅面积:");

   scanf("%d",&p->area);

   printf("入住时间:");

   scanf("%s",p->rz_time);

   myAdd3(p);

   save1(p);

   printf("录入成功!\n");

 }

struct yezhu *myAdd3(struct yezhu *p)//添加业主信息结点//

{

   struct yezhu *t;

   if(phead==NULL)

       {

           phead=p;

           p->next=NULL;

       }

   else

       {

           t=phead;

           while(t->next!=NULL)

                   t=t->next;

           t->next=p;

           p->next=NULL;

           return phead;

       }

}

void myReplace1()//修改业主信息

{

   struct yezhu *k;

   char id[100];

   printf("请输入要修改的业主ID:");

   scanf("%s",id);

   k=find1(id);

   if(k!=NULL)

       {

           printf("请输入要修改的业主信息:\n");

           printf("ID:");

           scanf("%s",k->id);

           printf("姓名:");

           scanf("%s",k->name);

           printf("年龄:");

           scanf("%d",&k->age);

           printf("家庭成员数:");

           scanf("%d",&k->family_num);

           printf("所在楼号:");

           scanf("%d",&k->floor_num);

           printf("单元房间号:");

           scanf("%s",k->room_num);

           printf("住宅面积:");

           scanf("%d",&k->area);

           printf("入住时间:");

           scanf("%s",k->rz_time);

           save1(k);

           printf("修改成功!\n");

       }

   else

       {

           printf("无此业主ID!\n");

           return;

       }

}

struct yezhu *find1(char *id)//通过ID查找业主信息//

{

   struct yezhu *p;

   p=phead;

   while(p!=NULL)

       {

           if(strcmp(p->id,id)==0)

               return p;

           p=p->next;

       }

   return NULL;

}

void Display1()

{

   struct yezhu *p;

   p=phead;

   while(p!=NULL)

       {

           printf("\n\n");

           printf("ID:%s\n",p->id);

           printf("姓名:%s\n",p->name);

           printf("年龄:%d\n",p->age);

           printf("家庭成员数:%d\n",p->family_num);

           printf("所在楼号:%d\n",p->floor_num);

           printf("单元房间号:%s\n",p->room_num);

           printf("住宅面积:%d\n",p->area);

           printf("入住时间:%s\n",p->rz_time);

           printf("\n\n");

           p=p->next;

       }

}

void myDelete1()

{

   struct yezhu *p,*pp;

   struct wuye *k,*kk;

   char id[100];

   pp=phead;

   kk=pHead;

   printf("请输入要删除人的ID:");

   scanf("%s",id);

   p=find1(id);

   k=find2(id);

   if(p!=NULL)

       {

           if(p==phead)

               {

                   phead=p->next;

                   free(p);

               }

           else

               {

                   while(pp->next!=p)

                       pp=pp->next;

                   pp->next=p->next;

                   free(p);

               }

       }

   else

       {

           printf("无此业主ID!\n");

           return;

       }

   printf("删除业主信息成功!\n");

   save1(p);

   if(k!=NULL)

       {

           if(k==pHead)

               {

                   pHead=k->link;

                   free(k);

               }

           else

               {

                   while(kk->link!=k)

                       kk=kk->link;

                   kk->link=k->link;

                   free(k);

               }

   }

   else

       {

           printf("无此业主ID!\n");

           return;

       }

   printf("删除物业信息成功!\n");

   save2(k);

}

void save1(struct yezhu *p)

{

   FILE *fp;

   fp=fopen("yezhu.dat","wb");

   p=phead;

   while(p!=NULL)

       {

           fwrite(p,sizeof(struct yezhu),1,fp);

           p=p->next;

       }

   fclose(fp);

}

void Read1()

{

   FILE *fp;

   struct yezhu *p;

   fp=fopen("yezhu.dat","rb");

   while(1)

       {

       p=(struct yezhu *)malloc(sizeof(struct yezhu));

       if(feof(fp))

           {

               break;

           }

       if(fread(p,sizeof(struct yezhu),1,fp))

           {

               myAdd3(p);

           }

       }

fclose(fp);

}

void wuyemenu()

{

   int choose=0;

   do {

       printf("*********************************物业费用管理系统************************\n");

   printf("-------------------------------------------------------------------------\n");

   printf("* * * * * * * * * * * * * * * 〓请选择〓(1~5)* * * * * * * * * * * * *\n");

   printf("* * \n");

   printf("* *\n");

   printf("* ⒈物业信息录入; *\n");

   printf("* *\n");

   printf("* ⒉物业信息修改; *\n");

   printf("* *\n");

   printf("* ⒊物业信息删除; *\n");

   printf("* *\n");

   printf("* ⒋物业信息浏览; *\n");

   printf("* *\n");

   printf("* ⒌返回上级菜单。 *\n");

   printf("* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *\n");

   printf("请输入选项:");

   scanf("%d",&choose);

   switch(choose)

       {

           case 1: myAdd2();

               break;

           case 2: myReplace2();

               break;

           case 3: myDelete2();

               break;

           case 4: Display2();

               break;

           case 5: return;

           default:printf("输入错误,请重新输入:\n");

       }

   } while(1);

}

void myAdd2()//录入物业信息//

{

   struct wuye *p;

   struct yezhu *t;

   int x;

   p=(struct wuye *)malloc(sizeof(struct wuye));

   printf("请录入物业信息:\n");

   printf("ID:");

   scanf("%s",p->ID);

   t=find1(p->ID);

   if(t!=NULL)

       {

           printf("上一次缴费年份:");

           scanf("%d",&p->last_year);

           printf("月份:");

           scanf("%d",&p->last_month);

           printf("缴费金额:");

           scanf("%f",&p->money);

           x=p->money/(0.4*t->area);

           p->to_time=(int)x;

           myAdd4(p);

           save2(p);

           printf("录入成功!\n");

       }

   else

       {

           printf("无此业主ID!\n");

           return;

       }

 }

struct wuye *myAdd4(struct wuye *p)//添加物业信息结点//

{

    struct wuye *t;

   if(pHead==NULL)

       {

           pHead=p;

           p->link=NULL;

       }

   else

       {

           t=pHead;

           while(t->link!=NULL)

               t=t->link;

           t->link=p;

           p->link=NULL;

       }

   return pHead;

}

struct wuye *find2(char *id)//通过姓名查找缴费信息//

{

   struct wuye *p;

   p=pHead;

   while(p!=NULL)

       {

           if(strcmp(p->ID,id)==0)

               return p;

           p=p->link;

       }

   return NULL;

}

void myfind()

{

   struct wuye *p;

   char a[100];

   printf("请输入要查找的业主id:");

   scanf("%s",a);

   p=find2(a);

   if(p!=NULL)

       {

           printf("业主已经存缴!\n");

       }

   else

       {

           printf("业主尚没存缴信息!\n");

           return;

       }

   Display(p);

}

void myReplace2()//

{

   char id[20];

   int x;

   struct wuye *k;

   struct yezhu *t;

   printf("请输入要修改的业主ID:");

   scanf("%s",id);

   if(k!=NULL)

       {

           printf("您要修改的信息为:\n");

           printf("请输入新的信息:\n");

           printf("ID:");

           scanf("%s",k->ID);

           printf("上一次缴费年份:");

           scanf("%d",&k->last_year);

           printf("月份:");

           scanf("%d",&k->last_month);

           printf("缴费金额:");

           scanf("%f",&k->money);

           t=find1(k->ID);

           x=(int)k->money/(0.4*t->area);

           k->to_time=(int)x;

           myAdd4(k);

           save2(k);

           printf("修改成功!\n");

       }

   else

       {

           printf("无此业主ID!\n");

           return;

       }

}

void myDelete2()//

{

   struct wuye *p,*pp;

   char id[100];

   pp=pHead;

   printf("请输入要删除人的ID:");

   scanf("%s",id);

   p=find2(id);

   if(p!=NULL)

       {

           if(p==pHead)

               {

                   pHead=p->link;

                   free(p);

               }

           else

               {

                   while(pp->link!=p)

                       pp=pp->link;

                   pp->link=p->link;

                   free(p);

               }

       }

   else

   {

       printf("无此业主ID!\n");

       return;

   }

   save2(p);

   printf("删除成功!\n");

}

void Display2()

{

   struct wuye *p;

   p=pHead;

   while(p!=NULL)

       {

           printf("ID:%s\n",p->ID);

           printf("最后一次缴费日期:%d年%d月\n",p->last_year,p->last_month);

           printf("缴费金额:%f元\n",p->money);

           printf("费用有效期:%d个月\n",p->to_time);

           printf("\n\n\n");

           p=p->link;

       }

}

void Display(struct wuye *p)

{

   printf("业主ID:%s\n",p->ID);

   printf("最后一次缴费日期:%d年%d月\n",p->last_year,p->last_month);

   printf("最后一次缴费金额:%f\n",p->money);

   printf("费用有效期:%d个月\n",p->to_time);

 }

void Read2()//

{

   FILE *fp;

   struct wuye *p;

   fp=fopen("wuye.dat","rb");

   while(1)

       {

           p=(struct wuye *)malloc(sizeof(struct wuye));

           if(feof(fp))

               break;

           if(fread(p,sizeof(struct wuye),1,fp))

               myAdd4(p);

       }

   fclose(fp);

}

void save2(struct wuye *p)//

{

   FILE *fp; fp=fopen("wuye.dat","wb");

   p=pHead;

   while(p!=NULL)

       {

           fwrite(p,sizeof(struct wuye),1,fp);

           p=p->link;

       }

   fclose(fp);

}

void mychaozhao()//

{

   int year,month;

   struct wuye *k;

   struct yezhu *l;

   k=pHead;

   l=phead;

   printf("请输入当前年份:");

   scanf("%d",&year);

   printf("请输入当前月份:");

   scanf("%d",&month);

   while(k!=NULL)

       {

           if(year>k->last_year)

               {

                   l=find1(k->ID);

                   l->lost=(float)(month+12-k->to_time-k->last_month)*(0.4*l->area);

                   if(l->lost>0)

                       {

                           printf("业主ID*:%s\n",l->id);

                           printf("业主姓名*:%s\n",l->name);

                           printf("最后一次缴费日期:%d年%d月\n",k->last_year,k->last_month);

                           printf("欠费金额*:%f\n",l->lost);

                           printf("\n\n");

                       }

               }

           if(year==k->last_year)

               {

                   l=find1(k->ID);

                   l->lost=(float)(month-k->to_time-k->last_month)*(0.4*l->area);

                   if(l->lost>0)

                       {

                           printf("业主ID:%s\n",l->id);

                           printf("业主姓名:%s\n",l->name);

                           printf("最后一次缴费日期:%d年%d月\n",k->last_year,k->last_month);

                           printf("欠费金额:%f\n",l->lost); printf("\n\n");

                       }

               }

           k=k->link;

       }

}

void main()//

{

   int m;

   //Read1();//第一次没有信息,不可用!!!

   //Read2();//第一次没有信息,不可用!!!

   do {

       m=mainmenu();

       switch(m)

           {

               case 1: xinximenu();

                   break;

               case 2: tongjimenu();

                   break;

               case 3:printf("*****************************谢谢使用,再见!***********************************\n"); exit(0);

           }

       } while(1);

}

6、程序运行结果

⒈输入信息模块

   

⒉信息浏览模块

⒊信息修改模块

⒋查询模块

⒌信息删除模块

7、总结

这次课程设计为期八天,时间不长,却感受很深。无论是在学习知识还是在解决问题的能力上,都有深刻的认识。

首先就是对理论知识的进一步巩固,再一次接触C语言的数据类型、语句、、数组、指针结构等等一系列与c语言有关的东西,通过“庖丁解牛”,我开始懂得不管一个程序多么复杂,其实它都是由最基本的函数组成,只要我们弄清结构、一切都会迎刃而解。与之前不同的是:这次是体会理论结合实际的过程。编程是一项考验综合能力的事情,仅仅有课本知识还不够,必须要有自己的知识框架才能通过所学理论解决实际问题。尽管只有八天,但我却碰到许多问题,诸如无法抽象出问题模型,不知道用哪一个或哪几个知识点来解决问题等等,并且一开始设计的程序冗长复杂,效率低,通过与同学的交流和在老师的帮助下,让程序成

功地运行,虽然不是自己全部编写的。(说实话,我还没达到完全靠自己编写的能力。通过在网上找答案并进行修改调试,还是坚持了下来并取得了成功。)

此次实习很有意义,它将教会我不断的提高自己的时间能力,挖掘自己解决问题的能力。

8、致谢

   在课程设计过程中经常遇到这样、那样的问题,多亏有陈老师指导和小组内的同学的热情帮助,才能坚持做下去,在实习期间还得到了计算机学院的研究生的帮助,在此一并表示感谢。

9、参考文献

[1]张冬梅,刘远兴,陈晶等.基于PBL的C语言课程设计及学习指导.北京:清华大学出版社,2011

[2]谭浩强.C语言课程设计(第四版).北京:清华大学出版社,2010

  

相关推荐