




已阅读5页,还剩48页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
.一、 设计目的 学会用C语言编程实现小区管理系统; 能熟练的掌握各个功能函数的熟练编写和理解;二、 设计内容小区管理系统设计:小区管理系统包括小区成员的所住单元、住户号、工作单位 姓名、电话号码等信息;小区管理系统主要提供以下功能: 1.系统的登录界面(主要包括用户名、密码的设置、新用户的创建、密码的修改等);2.系统以菜单方式工作3.住户信息录入功能输入4.住户信息浏览功能显示5.住户信息查询、修改、增加功能(1) 按姓名 (2)按电话号码6.住户信息删除功能7.住户信息以文件方式保存、读取8.住户信息的统计三、 概要设计1. 功能模块图依据程序的数据结构和功能,遵照“自顶向下”原则,采用基于函数的逐步求精法,描述该程序的层次结构: main()主函数菜单(登录界面、主菜单)输入显示查询修改添加删除退出按姓名按号码信息保存信息读取排序2.各个模块功能的详细描述l 主函数: main();l 登录菜单: . 进入主菜单:menu();.修改密码函数: repassword();.登录界面函数: print1();创建用户函数: usercreat();l 主菜单:输入函数:head=create();输出函数:print(head);住户信息文件的保存函数:save_inf(head);住户信息文件的读取函数:head=read_inf();住户信息的查找函数: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.各功能函数的数据流程图开始 输出函数print()的流程图 执行while循环语句执行printf()语句结束输入函数create()的流程图开始 Printf()提示语句;Scanf()语句输入数据执行While()语句依次查找链表再执行scanf()语句结束 执行查找函数find()流程图开始 执行while循环语句执行if判断语句结束执行修改函数re()的流程图开始 执行while语句进行查找执行if语句进行判断执行while语句进行选择要修改的内容结束执行删除函数delete的流程图开始 If语句判断节点是否为空执行while进行查找要删除的节点结束添加函数add的流程图 开始执行scanf语句输入要添加的信息执行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 *)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;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);/*格式化字符读函数*/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)/不等于尾节点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) 修改函数中要实现能对修改选项的选择:编码: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); 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) 添加函数关键在找到要添加的位置:编码:while(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; 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+; /统计每栋住户楼的人数五、 测试数据及结果1.正常数据及运行结果登录界面主菜单从文件中读取信息从键盘中输入信息住户信息的查找住户信息的删除住户信息的修改住户信息的添加2异常测试数据及运行结果六调试情况,设计技巧及体会1改进方案2体会:这是我学习C语言依赖第一次做课程设计,开始时,既激动又紧张,并且还不知道该如何下手操作,但通过查找资料和自己多摸索,经过一个星期时间研究,我设计的主题通讯录管理系统终于完成了!通过这次课程设计,我收获了很多很多,尤其是对C语言这门课的看法,以前总以为这门课很单调很枯燥无用,所以一直不认真学习,但经过这次自己动手完成设计后,我感觉C语言这门课真的很有意思,很神奇。经过一堆源代码的编译后,一个小型的程序便显现出来了,当看到自己所做的程序完整无误的运行起来时,自己心里很是欣慰,这一个礼拜的汗水没有白流,不但收获了很多,而且更是增大了学习好这门课的信心!在以后的学习中,我一定会努力的钻研,把课本上的知识都弄通,然后尽可能的自己找一些设计题目来做作,增大自己的知识面与动手能力,我相信在老师的教诲与我自己的努力下,我一定能将这门课学好,学精,学以致用!相信自己!我能行!七.参考文献 书籍: 1谭浩强 C程序设计(第三版) 清华大学出版社 2谭浩强 C程序设计题解与上机指导(第三版)清华大学出版社八、附录源代码:#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(-*-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(flag=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); 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)printf(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;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(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;struct 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;/* 将新结点连接到表尾*/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;save_inf(struct person *h) /* 用文件实现数据的保存*/struct person *stu;FILE *fp;char filename40; /* 定义所要存储的文件名*/printf(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(); /* 从键盘上输入一个字符但不会现在屏幕上*/ 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 person *)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; /*尾指针置空*/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=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!=NULL) p=p-next; if(strcmp(p-name,name)=0) return p; return NULL;int re(struct person *p) /* 实现数据上的修改函数*/ int choice; char name10; printf(请输入要修改的姓名:); scanf(%s,name); 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); return 1; return 0;int delete(struct person *p0) /*实现数据的删除函数*/ char name10; struct person *p; p=p0-next; if(p=NULL) /* 只要头结点为空表,则不能删除*/ return 0; printf(请输入要删除的住户姓名:n); scanf(%s,name); while(p!=NULL) if(strcmp(p-name,name)=0) /* 找到要删除的节点*/ p0-next=p-next; /*后续结点链接到前驱结点之后*/ free(p); return 1; p0=p; /* 移向指针继续查找*/ p=p-next; return 0; /* 未找到则返回0 */int add(struct person *p0) /* 实现住户的信息添加函数*/ struct person *p; p=(struct person *)malloc(N); /* p指向新申请的结点*/ printf(请输入要添加的信息: 单位号 房户号 姓名 性别 工作单位 电话号码n); scanf(%s%ld%s%s%s%s,p-num,&p-num1,p-name,p
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 山东济南辅警考试题库及答案
- 司法局协勤考试题及答案
- 2025上半年四川省第五地质大队招聘18人笔试备考题库带答案详解
- 2024-2025学年度广播电视编辑记者考前冲刺测试卷一套附答案详解
- 2025年药物治疗用药安全知识考察选择题练习卷答案及解析
- 交警大练兵考试题及答案
- 浦发银行泰州市姜堰区2025秋招笔试性格测试题专练及答案
- 菏泽学院病理与病理生理期末测试卷【必刷】附答案详解
- 光大银行盐城市盐都区2025秋招信息科技岗笔试题及答案
- 农发行保定市清苑区2025秋招半结构化面试15问及话术
- 2025年全球汽车供应链核心企业竞争力白皮书-罗兰贝格
- 2025年大学生英语六级必考词汇表全部汇编(带音标)
- GB/T 5993-2003电子设备用固定电容器第4部分:分规范固体和非固体电解质铝电容器
- FZ/T 52059-2021抗菌粘胶短纤维
- 医学课件-护理评估课件
- 幼儿园大班安全教育:《暴力玩具不能玩》 课件
- 26个英文字母大小写描红
- 养老院预算及成本管理制度
- 研学旅行基地评估认定评分表
- DL∕T 1867-2018 电力需求响应信息交换规范
- 版良性前列腺增生诊疗指南PPT
评论
0/150
提交评论