小区物业管理系统软件设计报告.doc

上传人:精*** 文档编号:828509 上传时间:2023-09-06 格式:DOC 页数:27 大小:391.67KB
下载 相关 举报
小区物业管理系统软件设计报告.doc_第1页
第1页 / 共27页
小区物业管理系统软件设计报告.doc_第2页
第2页 / 共27页
小区物业管理系统软件设计报告.doc_第3页
第3页 / 共27页
小区物业管理系统软件设计报告.doc_第4页
第4页 / 共27页
小区物业管理系统软件设计报告.doc_第5页
第5页 / 共27页
点击查看更多>>
资源描述

1、 小区物业管理系统1、 实验目的 学会用C语言编程实现小区管理系统; 能熟练的掌握各个功能函数的熟练编写和理解;2、 实验内容小区管理系统设计:小区管理系统包括小区成员的所住单元、住户号、工作单位 姓名、电话号码等信息;小区管理系统主要提供以下功能: 1.系统的登录界面(主要包括用户名、密码的设置、新用户的创建、密码的修改等);2.系统以菜单方式工作3.住户信息录入功能输入4.住户信息浏览功能显示5.住户信息查询、修改、增加功能(1) 按姓名 (2)按电话号码6.住户信息删除功能7.住户信息以文件方式保存、读取8.住户信息的统计3、 数据结构及算法思想本程序将住户信息用结构体存放,然后通过链表

2、将所有信息连接起来,这就是主要的数据结构。struct personchar num10; /* 住户单元号 */long num1; /* 住户户号 */char name20; /* 住户姓名*/char sex10; /* 性别*/char com20; /* 工作单位*/char tel20; /* 电话号码*/struct person *next;以下为函数调用关系图:Main()Print1()Menu()Repassword()Login()Usercreat()head=creat()print(head)find(head)re(head)delete(head)add(h

3、ead)sort(head)save_inf()read_inf()count(head)4、 模块化分1. 功能模块图依据程序的数据结构和功能,遵照“自顶向下”原则,采用基于函数的逐步求精法,描述该程序的层次结构: main()主函数菜单(登录界面、主菜单)输入显示查询修改添加删除退出按姓名按号码信息保存信息读取排序 2各个模块功能的详细描述l 主函数: main();l 登录菜单: . 进入主菜单:menu();.修改密码函数: repassword();.登录界面函数: print1();创建用户函数: usercreat();l 主菜单:输入函数:head=create();输出函数:

4、print(head);住户信息文件的保存函数:save_inf(head);住户信息文件的读取函数:head=read_inf();住户信息的查找函数:find(head);住户信息的修改函数:re(head);住户信息的删除函数:delete(head);住户信息的添加函数:add(head);信息的排序:sort(head);住户信息的统计:count(head);5、 详细设计及运行结果1、重点设计及编码1) 密码输入函数(实现密码能够再输错的情况下修改);编码:printf(nn*-请输入密码(6位)login in: );for(i=0;inum,&p1-num1,p1-name,

5、p1-sex,p1-com,p1-tel);while(p1-num1!=0)p2-next=p1;/* 将新结点连接到表尾*/p2=p1; /* p2指向新的表尾*/p1=(struct person *)malloc(N);/* p1指向新申请的结点*/scanf(%s%ld%s%s%s%s,p1-num,&p1-num1,p1-name,p1-sex,p1-com,p1-tel); p2-next=NULL;/* 表尾结点next域置空*/ free(p1); /* 释放无效空间*/ return head; 5) 文件的保存函数与读取函数要保持一致:编码:for(stu=h-next;

6、stu!=NULL;stu=stu-next) fprintf(fp,%s %ld %s %s %s %sn,stu-num,stu-num1,stu-name,stu-sex,stu-com,stu-tel); /*格式化字符串写函数*/ printf(n文件已成功保存,按任意键返回!n); getch(); /* 从键盘上输入一个字符但不会现在屏幕上*/ fclose(fp); /* 将文件所指的指针FP关闭*/fscanf(fp,%s %ld %s %s %s %sn,stu-num,&stu-num1,stu-name,stu-sex,stu-com,stu-tel);/*格式化字符读

7、函数*/r-next=stu;r=stu;r-next=NULL; /*尾指针置空*/fclose(fp);6) 排序函数关键在找最大节点的位置时能记录前一节点的位置:编码:struct person *p,*pre1,*pre2,*r,*s;int count=0,i; for(s=h;s-next!=NULL;s=s-next) /*统计节点数*/count+;for(s=h;s-next!=NULL;s=s-next); /*循环体语句为空,找尾节点*/for(i=1;inext; /*pre2指向p前的一个节点*/r=pre1-next;p=pre2-next;while(p!=s)/

8、不等于尾节点if(p-num1r-num1) pre1=pre2; /*指针r始终指向数据较大的节点*/r=p;pre2=pre2-next;/依次往下查找p=p-next;pre1-next=r-next; /释放最大的节点 r-next=s-next;/给s节点附上新的节点s-next=r;for(p=s-next,pre1=s;s-num1p-num1;pre1=pre1-next,p=p-next);/给s节点后的进行排序h-next=s-next;/找到插入的位置s-next=p; pre1-next=s;printf(按任意键继续n);getch();7)修改函数中要实现能对修改选

9、项的选择:编码:while(p-next!=NULL) p=p-next; /* 继续查找*/ if(strcmp(p-name,name)=0) while(choice!=0)/* 进行选择修改信息*/ printf(请输入要修改的选项:1.单位号 2.房户号 3.工作单位 4.电话号码 0:退出 n); printf(请选择(0-4):);scanf(%d,&choice); if(choice=1) printf(请输入新的单位号: ); scanf(%s,p-num); if(choice=2) printf(请输入新的房户号: ); scanf(%ld,&p-num1); if(c

10、hoice=3) printf(请输入新的工作单位: ); scanf(%s,p-com); if(choice=4) printf(请输入新的电话号码: ); scanf(%s,p-tel); return 1; return 0;8) 删除函数关键在找要删除节点的位置:编码: while(p!=NULL) if(strcmp(p-name,name)=0) /* 找到要删除的节点*/ p0-next=p-next; /*后续结点链接到前驱结点之后*/ free(p); return 1; p0=p; /* 移向指针继续查找*/ p=p-next;9)添加函数关键在找到要添加的位置:编码:w

11、hile(p0-next!=NULL& p0-next-name=p-name) p0=p0-next; /* 继续查找添加的位置*/ if(p0-next!=NULL& p0-next-name=p-name) free(p);/* 释放新结点的存储空间*/ return 0; /* 不添加就返回0*/ p-next=p0-next;/*后续结点连接到新结点之后*/ p0-next=p; /* 新节点连接到前驱接点之后*/10)统计函数在于实现住户单元号相同与不同的情况下的记录:编码:struct person *p; sort(h); i=0,j=0,dcount=0;drcountj=0

12、; for(p=h-next,di=p-num,dcount=1;p!=NULL;p=p-next)count+; /统计总人数if(di!=p-num)/楼号不相等则继续查找i+;di=p-num;dcount+;j+;drcountj=1;/该栋楼人数加为1elsedrcountj+; /统计每栋住户楼的人数2、(1).正常数据及运行结果1登录界面2主菜单3从文件中读取信息4从键盘中输入信息5住户信息的查找6住户信息的删除7住户信息的修改8住户信息的添加(2)异常测试数据及运行结果6、 调试情况,设计技巧及体会本程序能顺利完成各个功能模块,实现数据的输入,存储,读取,删除,修改等。调试情况

13、良好,基本实现预期规定的功能。但是也有一些小的瑕疵,例如以非管理员身份进入,密码的修改比较繁琐,界面不是很人性化。设计技巧主要是正确熟练使用结构体和链表,从而对数据各种操作,当然指针的使用使得程序更方便运行。本次软件设计的体会总要是学C语言关键在操作,即使知识学习再好没有实际动手编写也用处不大,在编写过程中才能体会到算法设计,程序编写,函数调用等各种问题和解决办法。总之,以后的C语言学习,还要多动手编写,努力提高动手编程能力!7、源程序清单(电子版)源代码:#include#include#include#include#define N sizeof(struct person)login(

14、);usercreat();lead();struct personchar num10; /* 住户单元号 */long num1; /* 住户户号 */char name20; /* 住户姓名*/char sex10; /* 性别*/char com20; /* 工作单位*/char tel20; /* 电话号码*/struct person *next;print1() /登录界面/char choice;system(color 4f);printf(-*-n);printf(-*-n);flushall();/scanf(%c,&choice);/进行选择操作/if(choice=y

15、)login();/登录函数 /else if(choice=n)/usercreat();/创建函数printf(n);usercreat()/创建函数FILE *fp;int i,flag=1;char str20,mini7;fp=fopen(mima.txt,a+);/想文件中添加信息 if(fp=NULL) printf(*-对不起,无法打开文件,按任意键请退出!);getch();exit(1); if(flag=1) printf(n请输入你要创建的用户名str:);scanf(%s,str);if(strcmp(str,cuiming)=0)flag=0;printf(抱歉该用

16、户名已存在请重新输入!n);printf(n请输入用户密码mini(6位):); for(i=0;i7;i+)minii=getch();if(minii=r)break;if(minii=b)printf(b b);i=i-2;else if(minii!=r)printf(*);minii=0; fprintf(fp,%s %s,str,mini); fclose(fp); fp=fopen(mima.txt,rt); while(!feof(fp) fscanf(fp,%s %s,str,mini); fclose(fp);login()/登录函数 FILE *fp; int i=0;c

17、har mima7,a7; char root20,n20;int count = 0; fp=fopen(mima.txt,rt);/从文件中读取信息fscanf(fp,%s %s,n,a);while(count 3)printf(n*-请输入用户名root: );scanf(%s,root);printf(nn*-请输入密码(6位)login in: );for(i=0;i7;i+)mimai=getch();if(mimai=r)break;if(mimai=b)printf(b b);i=i-2;else if(mimai!=r)printf(*);mimai=0;fflush(st

18、din);fclose(fp);/fp=fopen(mima.txt,rt); / while(fscanf(fp,%s %s,n,a)!=EOF)/if(strcmp(mima,a)=0&strcmp(root,n)=0)/进行判断是否一致printf(nn*恭喜你登录成功!*n);lead();break;elseprintf(n密码或者用户名有误!);printf(n您还有%d次机会!n,2-count);count+;system(pause);system(cls);memset(mima,0,sizeof(mima);memset(root,0,sizeof(root);if(co

19、unt =3)exit(-1);/repassword()/修改密码函数FILE *fp;int i;char mimi7,root120;char mm7,nn7;fp=fopen(mima.txt,wt); if(fp=NULL) printf(*-对不起,无法打开文件,按任意键请退出!);getch();exit(1); printf(请输入你的用户名:); scanf(%s,root1);printf(请输入你原来的密码:);for(i=0;i7;i+)mimii=getch();if(mimii=r)break;if(mimii=b)printf(b b);i=i-2;else if

20、(mimii!=r)printf(*);mimii=0;printf(n请输入你的新密码:);for(i=0;i7;i+)nni=getch();if(nni=r)break;if(nni=b)printf(b b);i=i-2;else if(nni!=r)printf(*);nni=0;printf(n请输入确认密码:);for(i=0;inext;while(p!=NULL) printf(单元号: %s 户号: %ld 姓名: %s 性别: %s 工作单位: %s 电话号码: %sn,p-num,p-num1,p-name,p-sex,p-com,p-tel); p=p-next;st

21、ruct person *creat() /* 输入函数*/struct person *head,*p1,*p2; head=p2=(struct person *)malloc(N); /* head *p2都指向头结点*/ printf(请输入: 单元号 户号 姓名 性别 工作单位 电话号码(输入户号0结束)n);p1=(struct person *)malloc(N);scanf(%s%ld%s%s%s%s,p1-num,&p1-num1,p1-name,p1-sex,p1-com,p1-tel);while(p1-num1!=0)p2-next=p1;/* 将新结点连接到表尾*/p

22、2=p1; /* p2指向新的表尾*/p1=(struct person *)malloc(N);/* p1指向新申请的结点*/ scanf(%s%ld%s%s%s%s,p1-num,&p1-num1,p1-name,p1-sex,p1-com,p1-tel); p2-next=NULL;/* 表尾结点next域置空*/ free(p1); /* 释放无效空间*/ return head;save_inf(struct person *h) /* 用文件实现数据的保存*/struct person *stu;FILE *fp;char filename40; /* 定义所要存储的文件名*/pr

23、intf(n请输入要保存的文件名: );scanf(%s,filename);if(fp=fopen(filename,wt)=NULL) /* 判断打开文件是否成功*/printf(写文件错误,按任意键退出!n);getch();exit(1);for(stu=h-next;stu!=NULL;stu=stu-next) fprintf(fp,%s %ld %s %s %s %sn,stu-num,stu-num1,stu-name,stu-sex,stu-com,stu-tel); /*格式化字符串写函数*/ printf(n文件已成功保存,按任意键返回!n); getch(); /* 从

24、键盘上输入一个字符但不会现在屏幕上*/ fclose(fp); /* 将文件所指的指针FP关闭*/struct person *read_inf() /* 用文件实现数据的读写函数*/struct person *head,*r,*stu;FILE *fp;char filename40;printf(请输入要打开的文件名: );scanf(%s,filename); /* 输入要打开文件的文件名*/if(fp=fopen(filename,rt)=NULL)printf(读文件出错,按任意键退出!n);getch();exit(1); /*打开错误则退出*/head=(struct pers

25、on *)malloc(sizeof(struct person); /*开辟空间存储所读写的数据*/head-next=NULL; /*头指针置空*/r=head; /* 指向头结点*/while(!feof(fp) /*判断文件指针的出错检查函数*/stu=(struct person *)malloc(sizeof(struct person);fscanf(fp,%s %ld %s %s %s %sn,stu-num,&stu-num1,stu-name,stu-sex,stu-com,stu-tel);/*格式化字符读函数*/r-next=stu;r=stu;r-next=NULL;

26、 /*尾指针置空*/fclose(fp);printf(n文件中信息已正确输出,按任意键返回!n);getch();return head; /*读取正确则返回头结点*/sort(struct person *h) / 实现数据的排序函数struct person *p,*pre1,*pre2,*r,*s;int count=0,i; for(s=h;s-next!=NULL;s=s-next) /统计节点数count+;for(s=h;s-next!=NULL;s=s-next); /循环体语句为空,找尾节点for(i=1;inext; /pre2指向p前的一个节点r=pre1-next;p

27、=pre2-next;while(p!=s)/不等于尾节点if(p-num1r-num1) pre1=pre2; /指针r始终指向数据较大的节点r=p;pre2=pre2-next;/依次往下查找p=p-next;pre1-next=r-next; /释放最大的节点 r-next=s-next;/给s节点附上新的节点s-next=r;for(p=s-next,pre1=s;s-num1p-num1;pre1=pre1-next,p=p-next);/给s节点后的进行排序h-next=s-next;/找到插入的位置s-next=p; pre1-next=s;printf(按任意键继续n);getch();struct person *find(struct person *p) /* 实现数据的查找函数*/ char name10; printf(请输入要查找的姓名: ); scanf(%s,name); while(p-next!=N

展开阅读全文
相关资源
相关搜索
资源标签

当前位置:首页 > 技术资料 > 研究报告

版权声明:以上文章中所选用的图片及文字来源于网络以及用户投稿,由于未联系到知识产权人或未发现有关知识产权的登记,如有知识产权人并不愿意我们使用,如有侵权请立即联系:2622162128@qq.com ,我们立即下架或删除。

Copyright© 2022-2024 www.wodocx.com ,All Rights Reserved |陕ICP备19002583号-1 

陕公网安备 61072602000132号     违法和不良信息举报:0916-4228922