1、同学录的设计与实现说明书*实践教学* 兰州理工大学计算机与通信学院2011年春季学期 面向对象 课程设计说明书 题 目:同学录的设计与实现 专业班级: 姓 名: 学 号: 指导教师: 成 绩: 面向对象课程设计说明书目录一、 序言 3二、 摘要 3三、 系统总体设计 41 设计思路 42 系统总体框图 43 系统流程图 5四、 详细设计 61 输出函数功能及流程图 62 创建函数及流程图 73 删除函数及流程图 74 增加函数及流程图 85 修改函数及流程图 86 排序函数及流程图 87 分类查找函数及流程图 88 释放内存函数及流程图 109 保存函数及流程图 1110 综合操作函数及流程图
2、 12五、 总结 13六、 参考文献 13七、 致谢 13八、 附录 13程序源代码 13一、 序言随着现代科技的发展,计算机技术已经越来越受到人们的青睐,计算机已经不是什么高科技产品,伴随的人们生活水平的提高,计算机已经走入了寻常百姓家。计算机的发展得益于C语言等计算机语言的发展,运用计算机语言,我们可以实现各种各样的功能。就我们现在所学的知识而言,我们也可以运用C语言(C+)实现一些简单的管理系统,如:学生成绩管理系统、图书管理系统、通讯录等。此次课程设计,我所设计的是运用C语言(C+)做一个同学录,主要实现显示、查找、修改、插入、追加、删除、排序、输出等功能。由于与顺序结构相比较,链表比
3、较方便插入和删除操作,所以本同学录的主要实现方式使用的是链表1和文件2,参考资料为谭浩强的C语言程序设计(清华大学出版社)。为了使得程序条理清晰,模块化显著, 同学录的基本功能的实现使用的是线性表和文件相结合的方式。二、 摘要 该同学录管理程序主要实现以下几个功能: (1). 增加联系人; (2). 查找联系人; (3). 对联系人按姓名排序; (4). 修改联系人信息; (5). 删除联系人; (6). 保存联系人; (7). 显示单个联系人; (8). 创建并保存同学录文件; (9). 打开同学录文件; (10).安全退出并释放内存空间。 关键字:同学录、链表、线性表、联系人、排序、三、
4、系统总体设计1 设计思路通过对塞班S60v5平台手机的了解,我们知道手机通讯录的基本功能即为:添加、查找、排序、删除、修改、保存、打开等,这些同样适用于同学录。又因为程序是用C语言(C+)编写,同时要在电脑上显示运行,所以必须创建一个联系人数据存储文件(同学录.dat)来保存写入的联系人信息,这就需要用程序能够对所录入的信息在系统外存中开辟一个空间进行保存,以便于在以后需要的时候直接打开调用。整个程序是利用链表和文件的形式进行编写的。 2 系统总体框图系统框图如图1所示3 系统流程图实现对一级菜单:创建同学录、按名字进行排序、综合操作、保存、打开、退出功能的控制,分别调用各个子函数。程序流程图
5、如图2所示。四、 详细设计1 输出函数功能及流程图输出函数实现同学录内容的输出,通过指针文件调用头函数来实现。其流程图如图3所示。2 创建函数及流程图通过定义两个指针数组,利用链表对函数进行调用,实现对同学录函数的创建。其流程图如图4所示。3 删除函数及流程图通过查找自己不需要的姓名,程序直接将其删除,在运行期间,程序会自动判断该内容是否在同学录中,若存在则将其直接删除,若不存在则输出“名字不存在本同学录中”。其流程图如图5所示。4 增加函数及流程图为完善同学录的功能,在不改变已存的同学录内容的前提下,程序从内存中另外开辟空间进行对同学录的补充,实现增加功能。函数流程图如图6所示。5 修改函数
6、及流程图对写入错误的信息进行修改,通过键盘输入的选项,程序自动进行查找并提示用户输入修改的内容。函数流程图如图7所示。6 排序函数及流程图该模块实现的是对无序的信息进行按名字排序,先对每个名字的首字母进行比较,相同则进行下一个字母的比较,直到排序完成。函数流程图如图8所示。7 分类查找函数及流程图流程图如图9所示。8 释放内存函数及流程图为节省系统内存,在进行完一次操作以后将会对其所开辟的空间进行释放。函数流程图如图10所示。9 保存函数及流程图将所有联系人信息写入函数后,程序会生成一个文件来保存联系人信息,从而可以在关闭VC环境的情况下,依然可以在系统中找到该文件,实现了文件保存功能。流程图
7、如图11所示。10 综合操作函数及流程图综合操作包括分类查找、单个显示、增加、删除、修改功能,是对整个同学录进行的比较全面系统的操作,其中分类查找和修改又包括下一级菜单。分类查找包括按姓名、职业、手机、email、地址查找;修改包括按姓名、职业、手机、email、地址、全部修改进行修改。流程图如图12所示。五、 总结本程序是运用链表、结构体、文件指针以及指针数组的综合应用来实现的,能够实现的功能为对联系人的添加、查找、排序、删除、修改、保存和生成联系人数据文件(同学录.dat)。我通过对程序的调整、修改,学习到了课堂上没有学到的知识,丰富了自己的知识面,加深了对C语言的了解和认识。在编写和修改
8、程序的过程中,学习到了链表、结构体、文件指针的应用。在这期间,遇到了很多困难,由于本程序很长(700余行代码),修改起来很困难,一处逻辑错误就要查找很长时间,这就给此次课程设计带来了一定的困难。但是我没有放弃,在老师和同学的帮助下,克服了一个个的困难,最终将程序调试完成,运行时也没有警告和错误了,但是该程序还是存在着一些不足的地方,功能方面并没有达到我预期的目的,例如没有实现我预想的图形化界面,没有再加入几个辅助功能模块的。由于时间有限,再加上我的才学疏浅,最终提交的同学录管理系统还是不尽完美,我会在本次课程设计结束后将其进一步完善,从而更深层次的学习C语言。六、 参考文献1. 谭浩强,张基温
9、C语言程序设计教程M.第3版.高等教育出版社,2006;2. 顾治华,陈天煌C语言程序设计M.北京:机械工业出版社,2007;3. 戴志诚,赵国峰.JSP信息化系统建设案例M.北京:人民邮电出版社,2006.12;4. 侯风巍,杨永田数据结构要点精析(C语言版).北京航空航天大学出版社,2008;5. 孙鑫C+视频教程.来自互联网;6. 其他视频教程。七、 致谢首先,我要感谢我的课程设计老师赵付青老师,谢谢赵老师对我的谆谆教导,为我做课程设计奠定了理论基础。另外,感谢赵老师在我做课程设计的过程中给我提出的宝贵意见和建议,我根据赵老师的建议对我的程序进行了改进,从而使程序更加完善。最后我还要感谢
10、,在课程设计的这两周给我帮助的同学们,谢谢他们给我鼓励和支持!八、 附录程序源代码#include #include #include #include #define NULL 0#define LEN sizeof(struct TXL_project)int n;struct TXL_project char Name30; char Work30; char HandSet30; char QQ30; char Address30; struct TXL_project *next;struct TXL_project *ShiFang(struct TXL_project *head
11、);/释放内存函数声明/创建函数/struct TXL_project *creat(void) system(color 5E); struct TXL_project *head,*p1,*p2; char Name20; n=0; p1=(struct TXL_project *)malloc(LEN); p2=p1; printf(请输入同学录的内容!n姓名输入为0时则表示创建完毕!nn); printf(n请输入姓名:t); gets(Name); if(strcmp(Name,0)!=0) strcpy(p1-Name,Name); printf(请输入职业:t); gets(p1
12、-Work); printf(请输入手机号码:t); gets(p1-HandSet); printf(请输入QQ号码:t); gets(p1-QQ); printf(请输入地址:t); gets(p1-Address); head=NULL; while(1) n=n+1; if(n=1) head=p1; else p2-next=p1; p2=p1; printf(n请输入姓名:t); gets(Name); if(strcmp(Name,0)=0) break; else p1=(struct TXL_project *)malloc(LEN); strcpy(p1-Name,Name
13、); printf(请输入职业:t); gets(p1-Work); printf(请输入手机号码:t); gets(p1-HandSet); printf(请输入QQ号码:t); gets(p1-QQ); printf(请输入地址:t); gets(p1-Address); p2-next=NULL; return(head); else return 0; /输出函数/void print(struct TXL_project *head) struct TXL_project *p; system(cls); if(head!=NULL) p=head; printf(本同学录现在共有%
14、d人:n,n); printf(姓名-职业-手机号码-QQ号码-地址-n); printf(=n); do printf(%-10s ,p-Name); printf(%-18s ,p-Work); printf(%-14s ,p-HandSet); printf(%-10s ,p-QQ); printf(%-30s ,p-Address); printf(n); p=p-next; while(p!=NULL); printf(=n); else printf(同学录为空,无法输出信息!n);/删除函数/struct TXL_project *delet(struct TXL_project
15、 *head) struct TXL_project *p1,*p2; char Name30; if(head=NULL) printf(同学录为空,无法删除!n); return(head); printf(请输入要删除的名字:t); gets(Name); p1=head; while(strcmp(p1-Name,Name)!=0&p1-next!=NULL) p2=p1; p1=p1-next; if(strcmp(p1-Name,Name)=0) if(p1=head) head=p1-next; else p2-next=p1-next; printf(已成功删除:%sn,Nam
16、e); system(pause); free(p1); n=n-1; else printf(%s不在本同学录中,无需删除!n,Name); system(pause); return(head);/增加函数/struct TXL_project *insert(struct TXL_project *head) struct TXL_project *p0,*p1,*p2; char Name20; p1=head; printf(请输入增加的内容:n); printf(n请输入姓名:t); gets(Name); if(strcmp(Name,0)=0) printf(姓名不能为0,添加
17、失败!n); system(pause); return(head); else p0=(struct TXL_project *)malloc(LEN); strcpy(p0-Name,Name); printf(请输入职业:t); gets(p0-Work); printf(请输入手机号码:t); gets(p0-HandSet); printf(请输入QQ号码:t); gets(p0-QQ); printf(请输入地址:t); gets(p0-Address); n=n+1; if(head=NULL) head=p0; p0-next=NULL; return(head); else
18、while(strcmp(p0-Name,p1-Name)0&(p1-next!=NULL) p2=p1; p1=p1-next; if(strcmp(p0-Name,p1-Name)Name,p1-Name)=0) if(head=p1) head=p0; else p2-next=p0; p0-next=p1; else p1-next=p0; p0-next=NULL; return(head); /显示函数/struct TXL_project *xianshi(struct TXL_project *head) struct TXL_project *p1,*p2; char Nam
19、e30; int m; if(head=NULL) printf(同学录为空,无法显示!n); return(head); p1=head; m=0; printf(请输入需要显示人的姓名:); gets(Name); while(p1!=NULL) while(strcmp(p1-Name,Name)!=0&p1-next!=NULL) p2=p1; p1=p1-next; if(strcmp(p1-Name,Name)=0) m+; printf(%s的通讯信息如下:n,Name); printf(姓名-职业-手机号码-QQ号码-地址-n); printf(=n); printf(%-10
20、s ,p1-Name); printf(%-18s ,p1-Work); printf(%-14s ,p1-HandSet); printf(%-10s ,p1-QQ); printf(%-30s ,p1-Address); printf(n); printf(=n); p1=p1-next; if(m=0) printf(nt此人不在本同学录中!n); return(head);/修改函数/struct TXL_project *xiugai(struct TXL_project *head) struct TXL_project *p1,*p2; char num10; char Name
21、30; char Name130; char Work30; char HandSet30; char QQ30; char Address30; if(head=NULL) printf(同学录为空,无法修改!n); return(head); printf(请输入需要修改的姓名:); gets(Name); p1=head; while(strcmp(p1-Name,Name)!=0&p1-next!=NULL) p2=p1; p1=p1-next; if(strcmp(p1-Name,Name)=0) printf(请选择修改的内容:n); printf(*n); printf(* 1
22、姓名 *n); printf(* 2 职业 *n); printf(* 3 手机 *n); printf(* 4 QQ号码 *n); printf(* 5 Address *n); printf(* 6 全部修改 *n); printf(*n); printf(请输入您的选择:t); gets(num); system(cls); switch(*num) case 1: printf(请重新输入姓名:); gets(Name); strcpy(p1-Name,Name); break; case 2: printf(请重新输入职业:); gets(Work); strcpy(p1-Work,
23、Work); break; case 3: printf(请重新输入手机号码:); gets(HandSet); strcpy(p1-HandSet,HandSet); break; case 4: printf(请重新输入QQ号码:); gets(QQ); strcpy(p1-QQ,QQ); break; case 5: printf(请重新输入地址:); gets(Address); strcpy(p1-Address,Address); break; case 6: printf(请重新输入姓名:); gets(Name1); strcpy(p1-Name,Name1); printf(
24、请重新输入职业:); gets(Work); strcpy(p1-Work,Work); printf(请重新输入手机号码:); gets(HandSet); strcpy(p1-HandSet,HandSet); printf(请重新输入QQ号码:); gets(QQ); strcpy(p1-QQ,QQ); printf(请重新输入地址:); gets(Address); strcpy(p1-Address,Address); break; default: printf(操作错误,此项不存在!n); system(pause); break; else printf(此人未在本同学录中n无
25、法为其修改信息n请先添加后再做修改!n); system(pause); return(head);/排序函数/struct TXL_project *PaiXu(struct TXL_project *head) struct TXL_project *p1,*p2; int i,j; struct TXL_project1 char Name30; char Work30; char HandSet30; char QQ30; char Address30; ; struct TXL_project1 px200; struct TXL_project1 temp; if(head=NULL)
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1