小区物业管理系统.docx
- 文档编号:27652109
- 上传时间:2023-07-03
- 格式:DOCX
- 页数:37
- 大小:318.07KB
小区物业管理系统.docx
《小区物业管理系统.docx》由会员分享,可在线阅读,更多相关《小区物业管理系统.docx(37页珍藏版)》请在冰豆网上搜索。
小区物业管理系统
一、设计目的
学会用C语言编程实现小区管理系统;
能熟练的掌握各个功能函数的熟练编写和理解;
二、设计内容
小区管理系统设计:
小区管理系统包括小区成员的所住单元、住户号、工作单位
姓名、电话号码等信息;
——小区管理系统主要提供以下功能:
1.系统的登录界面(主要包括用户名、密码的设置、新用户的创建、密码的修改等);
2.系统以菜单方式工作
3.住户信息录入功能——输入
4.住户信息浏览功能——显示
5.住户信息查询、修改、增加功能
(1)按姓名
(2)按电话号码
6.住户信息删除功能
7.住户信息以文件方式保存、读取
8.住户信息的统计
三、概要设计
1.功能模块图
依据程序的数据结构和功能,遵照“自顶向下”原则,采用基于函数的逐步求精法,描述该程序的层次结构:
2.各个模块功能的详细描述
●主函数:
main();
●登录菜单:
.进入主菜单:
menu();
.修改密码函数:
repassword();
.登录界面函数:
print1();
创建用户函数:
usercreat();
●主菜单:
输入函数:
head=create();
输出函数:
print(head);
住户信息文件的保存函数:
save_inf(head);
住户信息文件的读取函数:
head=read_inf();
住户信息的查找函数:
find(head);
住户信息的修改函数:
re(head);
住户信息的删除函数:
delete(head);
住户信息的添加函数:
add(head);
信息的排序:
sort(head);
住户信息的统计:
count(head);
四、详细设计
1.功能函数的调用关系图
2.各功能函数的数据流程图
输出函数print()的流程图
输入函数create()的流程图
执行查找函数find()流程图
执行修改函数re()的流程图
执行删除函数delete的流程图
添加函数add的流程图
执行排序sort函数的流程图
3.重点设计及编码
1)密码输入函数(实现密码能够再输错的情况下修改);
编码:
printf("\n\n**-----------请输入密码(6位)loginin:
");
for(i=0;i<7;i++)
{
mima[i]=getch();
if(mima[i]=='\r')
break;
if(mima[i]=='\b')
{
printf("\b\b");
i=i-2;
}
elseif(mima[i]!
='\r')
printf("*");
}
mima[i]='\0';
2)从文件中实现一次读取:
编码:
fp=fopen("mima.txt","rt");
while(fscanf(fp,"%s%s",n,a)!
=EOF)
{
if(strcmp(mima,a)==0&&strcmp(root,n)==0)//进行判断是否一致
{
printf("\n\n***********恭喜你登录成功!
***********\n");
lead();
break;
}
}
fclose(fp);
if(fp==NULL)
{
printf("\n\n*-----抱歉登录指令错误,请选择(3)重新登录!
-------*\n");
}
3)登录函数实现与主体函数的链接:
编码:
lead()
{
printf("***************-----欢迎进入登录界面-----*************************\n\n");
printf("*-------------------------1.进入主菜单--------------------------------*\n");
printf("*-------------------------2.修改密码----------------------------------*\n");
printf("*-------------------------3.重新登录----------------------------------*\n");
printf("*-------------------------4.创建用户----------------------------------*\n");
printf("*-------------------------0.退出系统----------------------------------*\n");
printf("***********************************************************************\n");
}
4)输入函数找准链表节点进行输入:
编码:
structperson*head,*p1,*p2;
head=p2=(structperson*)malloc(N);/*head*p2都指向头结点*/
printf("请输入:
单元号户号姓名性别工作单位电话号码(输入户号0结束)\n");
p1=(structperson*)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;/*将新结点连接到表尾*/
p2=p1;/*p2指向新的表尾*/
p1=(structperson*)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);/*释放无效空间*/
returnhead;}
5)文件的保存函数与读取函数要保持一致:
编码:
for(stu=h->next;stu!
=NULL;stu=stu->next)
fprintf(fp,"%s%ld%s%s%s%s\n",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%s\n",stu->num,&stu->num1,stu->name,stu->sex,stu->com,stu->tel);/*格式化字符读函数*/
r->next=stu;
r=stu;
}
r->next=NULL;/*尾指针置空*/
fclose(fp);
6)排序函数关键在找最大节点的位置时能记录前一节点的位置:
编码:
structperson*p,*pre1,*pre2,*r,*s;
intcount=0,i;
for(s=h;s->next!
=NULL;s=s->next)/*统计节点数*/
{
count++;
}
for(s=h;s->next!
=NULL;s=s->next);/*循环体语句为空,找尾节点*/
for(i=1;i { pre1=h;/*pre1指向r前的一个节点*/ pre2=h->next;/*pre2指向p前的一个节点*/ r=pre1->next; p=pre2->next; while(p! =s)//不等于尾节点 { if(p->num1>r->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->num1>p->num1;pre1=pre1->next,p=p->next);//给s节点后的进行排序 h->next=s->next;//找到插入的位置 s->next=p; pre1->next=s; printf("按任意键继续\n"); getch(); 7)修改函数中要实现能对修改选项的选择: 编码: 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(choice==3) { printf("请输入新的工作单位: "); scanf("%s",p->com); } if(choice==4) { printf("请输入新的电话号码: "); scanf("%s",p->tel); } } } return1; } return0; 8)删除函数关键在找要删除节点的位置: 编码: while(p! =NULL) { if(strcmp(p->name,name)==0)/*找到要删除的节点*/ { p0->next=p->next;/*后续结点链接到前驱结点之后*/ free(p); return1; } p0=p;/*移向指针继续查找*/ p=p->next; 9)添加函数关键在找到要添加的位置: 编码: while(p0->next! =NULL&&p0->next->name==p->name) p0=p0->next;/*继续查找添加的位置*/ if(p0->next! =NULL&&p0->next->name==p->name) { free(p);/*释放新结点的存储空间*/ return0;/*不添加就返回0*/ } p->next=p0->next;/*后续结点连接到新结点之后*/ p0->next=p;/*新节点连接到前驱接点之后*/ 10)统计函数在于实现住户单元号相同与不同的情况下的记录: 编码: structperson*p; sort(h); i=0,j=0,dcount=0; drcount[j]=0; for(p=h->next,d[i]=p->num,dcount=1;p! =NULL;p=p->next) { count++;//统计总人数 if(d[i]! =p->num)//楼号不相等则继续查找 { i++; d[i]=p->num; dcount++; j++; drcount[j]=1;//该栋楼人数加为1 } else drcount[j]++;//统计每栋住户楼的人数 } 五、测试数据及结果 1.正常数据及运行结果 登录界面 主菜单 从文件中读取信息 从键盘中输入信息 住户信息的查找 住户信息的删除 住户信息的修改 住户信息的添加 2.异常测试数据及运行结果 六.调试情况,设计技巧及体会 1.改进方案 2.体会: 这是我学习C语言依赖第一次做课程设计,开始时,既激动又紧张,并且还不知道该如何下手操作,但通过查找资料和自己多摸索,经过一个星期时间研究,我设计的主题——通讯录管理系统终于完成了! 通过这次课程设计,我收获了很多很多,尤其是对C语言这门课的看法,以前总以为这门课很单调很枯燥无用,所以一直不认真学习,但经过这次自己动手完成设计后,我感觉C语言这门课真的很有意思,很神奇。 经过一堆源代码的编译后,一个小型的程序便显现出来了,当看到自己所做的程序完整无误的运行起来时,自己心里很是欣慰,这一个礼拜的汗水没有白流,不但收获了很多,而且更是增大了学习好这门课的信心! 在以后的学习中,我一定会努力的钻研,把课本上的知识都弄通,然后尽可能的自己找一些设计题目来做作,增大自己的知识面与动手能力,我相信在老师的教诲与我自己的努力下,我一定能将这门课学好,学精,学以致用! 相信自己! 我能行! 七.参考文献 书籍: [1]谭浩强C程序设计(第三版)清华大学出版社 [2]谭浩强C程序设计题解与上机指导(第三版)清华大学出版社 八、附录 源代码: #include #include #include #include #defineNsizeof(structperson) login(); usercreat(); lead(); structperson { charnum[10];/*住户单元号*/ longnum1;/*住户户号*/ charname[20];/*住户姓名*/ charsex[10];/*性别*/ charcom[20];/*工作单位*/ chartel[20];/*电话号码*/ structperson*next; }; print1()//登录界面 { charchoice; printf("------******************************-----------\n"); printf("------******************************-----------\n"); printf("*------你是否要以管理员的身份登录y/n: "); flushall(); scanf("%c",&choice);//进行选择操作 if(choice=='y') login();//登录函数 elseif(choice=='n') usercreat();//创建函数 printf("\n"); } usercreat()//创建函数 { FILE*fp; inti,flag=1; charstr[20],mini[7]; 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("抱歉该用户名已存在请重新输入! \n"); } printf("\n请输入用户密码mini(6位): "); for(i=0;i<7;i++) { mini[i]=getch(); if(mini[i]=='\r') break; if(mini[i]=='\b') { printf("\b\b"); i=i-2; } elseif(mini[i]! ='\r') printf("*"); } mini[i]='\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; inti=0; charmima[7],a[7]; charroot[20],n[10]; fp=fopen("mima.txt","rt");//从文件中读取信息 fscanf(fp,"%s%s",n,a); printf("\n**-----------请输入用户名root: "); scanf("%s",root); printf("\n\n**-----------请输入密码(6位)loginin: "); for(i=0;i<7;i++) { mima[i]=getch(); if(mima[i]=='\r') break; if(mima[i]=='\b') { printf("\b\b"); i=i-2; } elseif(mima[i]! ='\r') printf("*"); } mima[i]='\0'; fp=fopen("mima.txt","rt"); while(fscanf(fp,"%s%s",n,a)! =EOF) { if(strcmp(mima,a)==0&&strcmp(root,n)==0)//进行判断是否一致 { printf("\n\n***********恭喜你登录成功! ***********\n"); lead(); break; } } fclose(fp); if(fp==NULL) { printf("\n\n*-----抱歉登录指令错误,请选择(3)重新登录! -------*\n"); } } repassword()//修改密码函数 { FILE*fp; inti; charmimi[7],root1[20]; charmm[7],nn[7]; fp=fopen("mima.txt","wt"); if(fp==NULL) { printf("**-----------对不起,无法打开文件,按任意键请退出! "); getch(); exit (1); } printf("请输入你的用户名: "); scanf("%s",root1); printf("请输入你原来的密码: "); for(i=0;i<7;i++) { mimi[i]=getch(); if(mimi[i]=='\r') break; if(mimi[i]=='\b') { printf("\b\b"); i=i-2; } elseif(mimi[i]! ='\r') printf("*"); } mimi[i]='\0'; printf("\n请输入你的新密码: "); for(i=0;i<7;i++) { nn[i]=getch(); if(nn[i]=='\r') break; if(nn[i]=='\b') { printf("\b\b"); i=i-2; } elseif(nn[i]! ='\r') printf("*"); } nn[i]='\0'; printf("\n请输入确认密码: "); for(i=0;i<7;i++) { mm[i]=getch(); if(mm[i]=='\r') break; if(mm[i]=='\b') { printf("\b\b"); i=i-2; } elseif(mm[i]! ='\r') printf("*"); } mm[i]='\0'; if(strcmp(mm,nn)! =0) printf("\n抱歉你两次所输密码一致! "); else printf("\n恭喜,你的密码修改成功! \n"); fprintf(fp,"%s%s",root1,mm); fclose(fp); fp=fopen("mima.txt","rt"); while(! feof(fp)) { fscanf(fp,"%s%s",root1,mm); } fclose(fp); } lead() { printf("***************-----欢迎进入登录界面-----*************************\n\n"); printf("*-------------------------1.进入主菜单--------------------------------*\n"); printf("*-------------------------2.修改密码----------------------------------*\n"); printf("*-------------------------3.重新登录----------------------------------*\n"); printf("*-------------------------4.创建用户----------------------------------*\n"); printf("*-------------------------0.退出系统----------------------------------*\n"); printf("***********************************************************************\n"); } menu() { printf("\t\t\t*****************************\n"); printf("\t\t\t╭╮\n"); printf("\t\t\t┣┫\n"); printf("\t\t\t┣⊙o⊙┫\n"); printf("\t\t\t┣┫\n"); printf("\t**----------------欢迎进入小区物业管理系统--------------**\n"); printf("\t\t
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 小区 物业管理 系统