《小区物业管理系统(共53页).doc》由会员分享,可在线阅读,更多相关《小区物业管理系统(共53页).doc(53页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、精选优质文档-倾情为你奉上一、 设计目的 学会用C语言编程实现小区管理系统; 能熟练的掌握各个功能函数的熟练编写和理解;二、 设计内容小区管理系统设计:小区管理系统包括小区成员的所住单元、住户号、工作单位 姓名、电话号码等信息;小区管理系统主要提供以下功能: 1.系统的登录界面(主要包括用户名、密码的设置、新用户的创建、密码的修改等);2.系统以菜单方式工作3.住户信息录入功能输入4.住户信息浏览功能显示5.住户信息查询、修改、增加功能(1) 按姓名 (2)按电话号码6.住户信息删除功能7.住户信息以文件方式保存、读取8.住户信息的统计三、 概要设计1. 功能模块图依据程序的数据结构和功能,遵
2、照“自顶向下”原则,采用基于函数的逐步求精法,描述该程序的层次结构: main()主函数菜单(登录界面、主菜单)输入显示查询修改添加删除退出按姓名按号码信息保存信息读取排序2.各个模块功能的详细描述l 主函数: main();l 登录菜单: . 进入主菜单:menu();.修改密码函数: repassword();.登录界面函数: print1();创建用户函数: usercreat();l 主菜单:输入函数:head=create();输出函数:print(head);住户信息文件的保存函数:save_inf(head);住户信息文件的读取函数:head=read_inf();住户信息的查找
3、函数:find(head);住户信息的修改函数:re(head);住户信息的删除函数:delete(head);住户信息的添加函数:add(head);信息的排序:sort(head);住户信息的统计:count(head);四、 详细设计1功能函数的调用关系图Main()Print1()Menu()Repassword()Login()Usercreat()head=creat()print(head)find(head)re(head)delete(head)add(head)sort(head)save_inf()read_inf()count(head)2.各功能函数的数据流程图开始
4、输出函数print()的流程图 执行while循环语句执行printf()语句结束输入函数create()的流程图开始 Printf()提示语句;Scanf()语句输入数据执行While()语句依次查找链表再执行scanf()语句结束 执行查找函数find()流程图开始 执行while循环语句执行if判断语句结束执行修改函数re()的流程图开始 执行while语句进行查找执行if语句进行判断执行while语句进行选择要修改的内容结束执行删除函数delete的流程图开始 If语句判断节点是否为空执行while进行查找要删除的节点结束添加函数add的流程图 开始执行scanf语句输入要添加的信息执
5、行while语句查找添加的位置结束执行排序sort函数的流程图开始 执行for循环统计节点的数目执行for循环节点一到尾部执行for循环找最大节点执行for循环给最后尾节点排序结束3.重点设计及编码1) 密码输入函数(实现密码能够再输错的情况下修改);编码:printf(nn*-请输入密码(6位)login in: );for(i=0;inum,&p1-num1,p1-name,p1-sex,p1-com,p1-tel);while(p1-num1!=0)p2-next=p1;/* 将新结点连接到表尾*/p2=p1; /* p2指向新的表尾*/p1=(struct person *)mallo
6、c(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;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); /
7、*格式化字符串写函数*/ 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);/*格式化字符读函数*/r-next=stu;r=stu;r-next=NULL; /*尾指针置空*/fclose(fp);6) 排序函数关键在找最大节点的位置时能记录前一节点的位置:编码:struct person *p,*pre
8、1,*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)/不等于尾节点if(p-num1r-num1) pre1=pre2; /*指针r始终指向数据较大的节点*/r=p;pre2=pre2-next;/依次往下查找p=p-next;pre1-next=r-next; /释放
9、最大的节点 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) 修改函数中要实现能对修改选项的选择:编码:while(p-next!=NULL) p=p-next; /* 继续查找*/ if(strcmp(p-name,name)=0) while(choice!=0)/* 进行选择修改信息*/ pri
10、ntf(请输入要修改的选项: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); return 1;
11、 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) 添加函数关键在找到要添加的位置:编码:while(p0-next!=NULL& p0-next-name=p-name) p0=p0-next; /* 继续查找添加的位置*/ if(p0-next!=NULL& p0-next-name=p-name)
12、 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; for(p=h-next,di=p-num,dcount=1;p!=NULL;p=p-next)count+; /统计总人数if(di!=p-num)/楼号不相等则继续查找i+;di=p-num;dcoun
13、t+;j+;drcountj=1;/该栋楼人数加为1elsedrcountj+; /统计每栋住户楼的人数五、 测试数据及结果1.正常数据及运行结果登录界面主菜单从文件中读取信息从键盘中输入信息住户信息的查找住户信息的删除住户信息的修改住户信息的添加2异常测试数据及运行结果六调试情况,设计技巧及体会1改进方案2体会:这是我学习C语言依赖第一次做课程设计,开始时,既激动又紧张,并且还不知道该如何下手操作,但通过查找资料和自己多摸索,经过一个星期时间研究,我设计的主题通讯录管理系统终于完成了!通过这次课程设计,我收获了很多很多,尤其是对C语言这门课的看法,以前总以为这门课很单调很枯燥无用,所以一直不
14、认真学习,但经过这次自己动手完成设计后,我感觉C语言这门课真的很有意思,很神奇。经过一堆源代码的编译后,一个小型的程序便显现出来了,当看到自己所做的程序完整无误的运行起来时,自己心里很是欣慰,这一个礼拜的汗水没有白流,不但收获了很多,而且更是增大了学习好这门课的信心!在以后的学习中,我一定会努力的钻研,把课本上的知识都弄通,然后尽可能的自己找一些设计题目来做作,增大自己的知识面与动手能力,我相信在老师的教诲与我自己的努力下,我一定能将这门课学好,学精,学以致用!相信自己!我能行!七.参考文献 书籍: 1谭浩强 C程序设计(第三版) 清华大学出版社 2谭浩强 C程序设计题解与上机指导(第三版)清
15、华大学出版社八、附录源代码:#include#include#include#include#define N sizeof(struct person)login();usercreat();lead();struct personchar num10; /* 住户单元号 */long num1; /* 住户户号 */char name20; /* 住户姓名*/char sex10; /* 性别*/char com20; /* 工作单位*/char tel20; /* 电话号码*/struct person *next;print1() /登录界面char choice;printf(-*-
16、n);printf(-*-n);printf(*-你是否要以管理员的身份登录y/n:);flushall();scanf(%c,&choice);/进行选择操作if(choice=y)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(f
17、lag=1) printf(n请输入你要创建的用户名str:);scanf(%s,str);if(strcmp(str,cuiming)=0)flag=0;printf(抱歉该用户名已存在请重新输入!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
18、); while(!feof(fp) fscanf(fp,%s %s,str,mini); fclose(fp);login()/登录函数 FILE *fp; int i=0;char mima7,a7; char root20,n10; fp=fopen(mima.txt,rt);/从文件中读取信息fscanf(fp,%s %s,n,a);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)p
19、rintf(b b);i=i-2;else if(mimai!=r)printf(*);mimai=0;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;fclose(fp);if(fp=NULL)printf(nn*-抱歉登录指令错误,请选择(3)重新登录!-*n);repassword()/修改密码函数FILE *fp;int i;char mimi7,root120;c
20、har 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(mimii!=r)printf(*);mimii=0;printf(n请输入你的新密码:);for(i=0;i7;i+)nni=getch(
21、);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;struct person *creat() /* 输入函数*/struct person *head,*p1,*p2; head=p2=(str
22、uct 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;/* 将新结点连接到表尾*/p2=p1; /* p2指向新的表尾*/p1=(struct person *)malloc(N);/* p1指向新申请的结点*/ scanf(
23、%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; /* 定义所要存储的文件名*/printf(n请输入要保存的文件名: );scanf(%s,filename);if(fp=fopen(filename,wt)=NULL) /
24、* 判断打开文件是否成功*/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(); /* 从键盘上输入一个字符但不会现在屏幕上*/ fclose(fp); /* 将文件所指的指针FP关闭*/struct person *read_in
25、f() /* 用文件实现数据的读写函数*/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 person *)malloc(sizeof(struct person); /*开辟空间存储所读写的数据*/head-next=NULL; /*头指
26、针置空*/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; /*尾指针置空*/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); /*循环体语句为空,找