版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
PAGEPAGE18XXXX大学计算机与信息工程学院课程设计报告课程名称:数据结构 专业:信息管理与信息系统班级:XXXX学号:1234567890姓名:张三题目:通讯录管理系统指导教师:李四2009年1月《数据结构》2008级课程设计任务书班级XXXX姓名张三学号1234567890题目通讯录管理系统编写一个通讯录管理系统,完成输入、显示、查找、删除等功能。时间2009年1月10~200目的《数据结构(英)》是一门实践性很强的软件基础课程,为了学好这门课,每个学生必须完成在学习结束时完成一个较综合的实验。通过本课程的课程设计,要求在数据结构的选择和应用、算法的设计及实现等方面加深对课程基础内容的理解,同时,在程序设计方法以及上机操作等基本技能和科学作风方面受到比较系统和严格的训练。内容和要求在VC++开发环境下完成一个小型软件系统的开发(具体内容详见附件上的题目)。所设计的系统应包含输入输出等基本功能,针对要求解决的问题,考虑各种可能的数据结构,并且力求从中出最佳方案(必须连同算法一起考虑),确定主要的数据结构及全程变量。对引入的每种数据结构和全程变量要详细说明其功能、初值和操作特点。算法设计分概要设计和详细设计,概要设计着重解决程序的模块设计问题,这包括考虑如何把被开发的问题程序自顶向下分解成若干顺序模块,并决定模块的接口,即模块间的相互关系以及模块之间的信息交换问题.详细设计则要决定每个模块内部的具体算法,包括输入、处理和输出,相当于C语言的过程或函数设计。能够顺利调试通过并运行所编制的程序,并且能够读懂所选题目的源程序,讲解程序中的主要功能部分,以证明该程序不是其他人给编写的或从其他的书籍中原封不动照抄照搬。根据题目的基本需求,画出流程图,编写出相应程序,并写出详细的设计说明书,最后上机调试通过,并进行验收,交设计文档和程序的源代码。成绩指导教师(签名):《数据结构》课程设计报告一、问题描述编写一个通讯录管理系统。本系统应完成一下几方面的功能:1)
输入信息——enter();2)
显示信息———display();3)
查找以姓名作为关键字———search();4)
删除信息———delete();5)
存盘———save();6)
装入———load();基本要求:1)
每条信息至少包含:姓名(NAME)街道(STREET)城市(CITY)邮编(EIP)国家(STATE)几项。2)
作为一个完整的系统,应具有友好的界面和较强的容错能力。二、系统设计说明1、数据结构设计(1)系统用到哪些数据类型。系统用到的数据类型有:1、基本数据类型:整型、字符型;2、构造数据类型:数组、结构。(2)系统包括哪些功能模块,模块功能描述,各模块间的层次结构(即相互调用关系)以及模块之间的信息交换问题。系统由一个main函数、多个标准库函数和七个自定义函数组成。函数creat、display、search、append、modify、cancel由主函数main调用,goon函数被output、search、append、modify、cancel调用。首先读取一个通讯录名称,如果文件打开成功,则继续对文件进行各种操作。如果文件打开失败,则选择建立新的通讯录或者退出程序。选择建立新的通讯录,调用creat函数建立一个文件即新的通讯录,输入学生的信息,包括姓名、街道、城市、邮编和国家,保存在新建的通讯录中。然后选择1-5,分别调用display、search、append、modify、cancel函数完成相应的输出、查找、增添、修改和删除功能。每次调用函数如果改变了数据,结果都会保存在文件中。完成通讯录后选择0调用exit函数退出程序。2、算法设计各个模块内部的具体算法,包括输入、处理和输出,相当于C语言的过程或函数设计。整体算法描述:建立一个结构来存放学生信息,再将该结构存入文件中,按要求通过调用各个函数对文件内的数据进行操作及处理(程序图另附页)。各个分函数算法描述:由主函数调用creat函数建立一个新的文件用于存储通讯录。主函数voidmain调用voiddisplay输出信息;主函数voidmain调用voidsearch查找学生记录;主函数voidmain调用voidappend添加记录;主函数voidmain调用voidmodify修改已有记录;主函数voidmain调用voidcancel进行删除操作。调用函数通过switch语句实现,先读取文件,将文件里的数据与所输入的数据对比,如果相等就进行相关操作,如果不相等回到主菜单。goon函数由各个分函数调用,用于判断上一步是否继续,若是则继续,若否则返回主菜单。主函数:voidmain(){ charm; charjian; FILE*fp;/*文件指针*/ printf("\n尊敬的用户,您好!欢迎使用2009winter版简易通讯录!\n"); printf("\n请输入需要读取的文件名称:"); scanf("%s",&filename); fp=fopen(filename,"r+"); if(fp==NULL){ printf("\n*提示:文件还不存在,是否建立新的通讯录?\n"); printf("\n是请按1,退出本通讯录请按除1以外任意键!\n"); printf("\n请输入您的选择:"); scanf("%s",&jian);调用函数建立新通讯录 if(jian==49)调用函数建立新通讯录 creat(); else { printf("\n\nPolly感谢您的使用!!再见!!\n"); exit(0); }}if(fp)printf("\n提示:文件已经打开,正在导入记录\n");love:while(1){printf("\n===========================");printf("\n*添加新的记录,请按1");主菜单显示printf("\n*查找已有记录,请按2");主菜单显示printf("\n*修改已有记录,请按3");printf("\n*删除已有记录,请按4");printf("\n*输出已有记录,请按5");printf("\n*退出本通讯录,请按0");printf("\n==========================="); printf("\n请输入您的选择:");scanf("%s",&m);if(m>=48&&m<=53){ switch(m) { case49: goon();调用函数添加新记录 if(z!=57)append();调用函数添加新记录 elsegotolove;break;case50: goon();调用函数查找记录 if(z!=57)search();调用函数查找记录 elsegotolove;break;case51:goon();调用函数修改记录 if(z!=57)modify();调用函数修改记录 elsegotolove;break;case52:调用函数删除记录goon();调用函数删除记录 if(z!=57)cancel(); elsegotolove;break;case53:调用函数输出记录goon();调用函数输出记录 if(z!=57)display(); elsegotolove;break;case48:printf("\n*警告:您确定要退出吗?\n\n退出,按0;\n不退出按任意非零键返回主菜单。\n"); printf("请输入您的选择:"); scanf("%s",&m); if(m==48)退出程序 {退出程序 printf("\nPolly感谢您的使用!!再见!!\n");exit(0);} elsegotolove; } printf("\n\n操作完毕,请再次选择!"); } else错误提示 printf("\n\n*选择错误,请选择0-5之间的整数!");错误提示}}三、测试用例四、数据流程图1、系统整体的流程图开始开始打开或者建立新文件1添加新的记录2查找已有记录3修改已有记录4删除已有记录5输出已有记录0退出本通讯录返回主菜单或对数据操作后返回主菜单同上返回主菜单或退出程序同上同上同上2、具体算法的流程图开始开始打开文件失败调用create建立新通讯录成功表达式6表达式的值为1表达式的值为16表达式的值为4表达式的值为5表达式的值为3表达式的值为2表达式的值为0调用cancel函数调用modify函数调用display函数调用search函数退出程序1结束表达式调用append函数0524130011继续6添加新记录并保存到文件6表达式为1表达式为1表达式为2012继续6表达式6按姓名查询并输出按号码查询并输出0013继续6修改已有记录并保存到文件60014继续6删除已有记录并重新保存文件60015继续6输出已有通讯录6五、使用说明和作业小结1、使用说明:进入程序后,输入需要打开的通讯录名称(有扩展名的要包括扩展名),如果打开失败,按照提示信息选择新建通讯录或者退出程序。如果选择新建,则按照提示信息依次输入通讯录名称,以及各数据项,完成以后按“0”结束。建立新通讯录或者打开已有通讯录成功以后,可以看到主菜单,按提示输入数字进行选择,按回车键执行该选择。注意:主菜单下选择后,会有提示信息是否继续,按“9”取消上一步操作,按除9以外任意数字或字母键继续操作。退出程序时也会有提示信息是否确定退出,按“0”确定退出,取消退出按除0以外任意数字或字母键返回主菜单。2、作业小结许多程序的实现过程中,依赖于把数据保存到变量中,而变量是通过内存单元存储数据的,数据的处理完全由程序控制。当一个程序运行完成或运行终止时,所有变量的数据不再保存。而文件通过把数据存储在磁盘文件中,得以长久保存。当有大量数据输入时,通过编辑工具可以事先建立输入数据的文件,程序运行时从指定的文件读入数据,从而实现数据的一次输入,多次使用,对程序调试十分方便。同样,有大量数据输出时,可以将其输出到指定文件,结果数据还可以作为另外程序的输入,进一步加工。所以在设计这个通讯录管理系统时,我首先想到了利用文件来实现。结果证明了这个选择是明智的。但是在细节方面我遇到了一些问题。在主菜单进行选择时,一开始我采用整型变量存储选择信息,但是发现,当选择0~5以外的数字时可以给出错误提示,但是当选择字母时,就会出现死循环。经过反复修改和尝试,我改选字符型变量存储选择信息,并在下面switch语句的各个case中用各个数字的ASCII码代替原来的整数,解决了这个问题。还有一个奇怪的现象,就是这一段:fp=fopen(filename,"r+"); if(fp==NULL){ printf("\n提示:文件还不存在,是否建立新的通讯录?(Y/N)\n"); scanf("%c",&jian); if(jian=='Y'||jian=='y') creat(); else { printf("\nPolly感谢您的使用!!再见!!\n"); exit(0); }}如果文件打开失败,选择是否建立新文件时,上述语句中scanf根本不执行,if选择以及creat()也跳过,屏幕显示else后的提示信息然后程序退出。老师帮我调试了程序,也没有找出原因。我们尝试了给字符型变量jian赋初值等方法都不能有效地解决问题。最后我又采用ASCII码代替字符,结果程序正常运行了。但是具体的原因还有待进一步研究。在算法设计和程序实现的具体过程中,各种问题还有很多。有的是机器能够检查出来的,有的则需要我们自己观察。这个时候,就需要我们保持冷静的头脑和清醒的意识,一方面要保证算法思想的正确可行,一方面要避免一些低级错误。总之,数据结构的学习和本次课程设计的实践,使我们在数据结构的选择和应用、算法的设计及实现等方面有了进一步提高,同时在程序设计方法以及上机操作等基本技能和科学作风方面受到比较系统和严格的训练。有利于我们设计出更好的程序,更好地解决今后遇到的各种问题。附录:程序源代码#include<stdio.h>#include<stdlib.h>#include<string.h>intx;charz;/*全局变量*/typedefstructperson/*定义一个结构,储存学生信息,包括姓名(NAME)街道(STREET)城市(CITY)邮编(EIP)国家(STATE)几项*/{charname[15];charstreet[30];charcity[15];chareip[7];charstate[20];};charfilename[20];/*全局变量*/FILE*fp;voidcreat();voiddisplay();voidsearch();voidappend();voidmodify();voidcancel();voidgoon();voidmain(){ charm; charjian; FILE*fp;/*文件指针*/ printf("\n尊敬的用户,您好!欢迎使用2009winter版简易通讯录!\n"); printf("\n请输入需要读取的文件名称:"); scanf("%s",&filename); fp=fopen(filename,"r+"); if(fp==NULL){ printf("\n*提示:文件还不存在,是否建立新的通讯录?\n"); printf("\n是请按1,退出本通讯录请按除1以外任意键!\n"); printf("\n请输入您的选择:"); scanf("%s",&jian); if(jian==49) creat(); else { printf("\n\nPolly感谢您的使用!!再见!!\n"); exit(0); }}if(fp)printf("\n提示:文件已经打开,正在导入记录\n");love:while(1){printf("\n===========================");printf("\n*添加新的记录,请按1");printf("\n*查找已有记录,请按2");printf("\n*修改已有记录,请按3");printf("\n*删除已有记录,请按4");printf("\n*输出已有记录,请按5");printf("\n*退出本通讯录,请按0");printf("\n==========================="); printf("\n请输入您的选择:");scanf("%s",&m);if(m>=48&&m<=53){ switch(m) { case49: goon(); if(z!=57)append(); elsegotolove; break;case50: goon(); if(z!=57)search(); elsegotolove; break;case51:goon(); if(z!=57)modify(); elsegotolove; break;case52:goon(); if(z!=57)cancel(); elsegotolove; break;case53:goon(); if(z!=57)display(); elsegotolove; break;case48:printf("\n*警告:您确定要退出吗?\n\n退出,按0;\n不退出按任意非零键返回主菜单。\n"); printf("请输入您的选择:"); scanf("%s",&m); if(m==48) { printf("\nPolly感谢您的使用!!再见!!\n");exit(0);} elsegotolove; } printf("\n\n操作完毕,请再次选择!"); } else printf("\n\n*选择错误,请选择0-5之间的整数!");}}voidcreat()/*建立通讯录*/{structpersonone;printf("\n请输入您想建立的通讯录名:");scanf("%s",filename);if((fp=fopen(filename,"w"))==NULL){ printf("\n*不能建立通讯录!"); exit(0);}fprintf(fp,"%-15s%-15s%-20s%-10s%-20s\n","姓名","街道","城市","邮编","国家");printf("\n请输入信息,输入完成后请以0结束!\n");printf("\n请输入姓名:");scanf("%s",);while(strcmp(,"0")){ printf("\n请输入街道:"); scanf("%s",one.street); printf("\n请输入城市:"); scanf("%s",one.city); printf("\n请输入邮编:"); scanf("%s",one.eip); printf("\n请输入国家:"); scanf("%s",one.state);fprintf(fp,"%-15s%-15s%-20s%-10s%-20s\n",,one.street,one.city,one.eip,one.state); printf("\n请输入姓名:");scanf("%s",);}fclose(fp);}voidappend()/*添加记录*/{ structpersonone;if((fp=fopen(filename,"a"))==NULL) { printf("\n*警告!不能打开通讯录!"); exit(0);} printf("\n请输入添加的信息!\n"); printf("\n请输入姓名:"); scanf("%s",);printf("\n请输入街道:"); scanf("%s",one.street); printf("\n请输入城市:"); scanf("%s",one.city); printf("\n请输入邮编:"); scanf("%s",one.eip); printf("\n请输入国家:"); scanf("%s",one.state);fprintf(fp,"%-15s%-15s%-20s%-10s%-20s",,one.street,one.city,one.eip,one.state);printf("\n*恭喜,您已经成功添加一条新记录!");fclose(fp);}voidmodify()/*修改记录*/{ intk=0;longoffset;charnamekey[15];structpersonone;printf("\n请输入您要修改的学生姓名:");scanf("%s",namekey);if((fp=fopen(filename,"r+"))==NULL) { printf("\n*警告!不能打开通讯录!"); exit(0);} while(!feof(fp)) { offset=ftell(fp); fscanf(fp,"%s%s%s%s%s\n",,one.street,one.city,one.eip,one.state); if(!strcmp(namekey,)) { k=1;/*找到相应资料,k的值改变*/ break; } } if(k) { printf("\n已查到,您要修改的原记录为:\n"); printf("\n%-15s%-15s%-20s%-10s%-20s",,one.street,one.city,one.eip,one.state); printf("\n请输入新的信息!\n"); printf("\n请输入姓名:"); scanf("%s",);printf("\n请输入街道:"); scanf("%s",one.street); printf("\n请输入城市:"); scanf("%s",one.city); printf("\n请输入邮编:"); scanf("%s",one.eip); printf("\n请输入国家:"); scanf("%s",one.state); fseek(fp,offset,SEEK_SET); fprintf(fp,"\n%-15s%-15s%-20s%-10s%-20s",,one.street,one.city,one.eip,one.state); printf("\n*恭喜,您已经成功修改一条记录!"); } elseprintf("\n*对不起,通讯录中没有此人的记录。请您确定后再操作。"); fclose(fp);}voidsearch()/*查找记录*/{intk=0;charnamekey[15];structpersonone; loop:printf("\n按姓名查询,请按1。\n按邮编查询,请按2。\n请输入您的选择:"); scanf("%d",&x); switch(x) { case1: printf("\n请输入您要查找的姓名:");scanf("%s",namekey);break; case2: printf("\n请输入您要查找的邮编:"); scanf("%s",namekey);break;default:printf("\n错误!请选择1或2!");gotoloop; } if((fp=fopen(filename,"rb"))==NULL){ printf("\n*警告!不能打开通讯录!");exit(0);} while(!feof(fp)){ fscanf(fp,"%s%s%s%s%s\n",,one.street,one.city,one.eip,one.state); if(x==1&&!strcmp(namekey,))/*按姓名找到了相应资料*/ { printf("\n\n已查到,您要查找的记录为:\n"); printf("\n%-15s%-15s%-20s%-10s%-20s\n",,one.street,one.city,one.eip,one.state); k=1;/*如果找到相应资料,k的值改变*/} elseif(x==2&&!strcmp(namekey,one.eip))/*按号码找到了相应资料*/ { printf("\n\n已查到,您要查找的记录为:\n"); printf("\n%-15s%-15s%-20s%-10s%-20s\n",,one.street,one.city,one.eip,one.state); k=1;/*如果找到相应资料,k的值改变*/} } if(!k)/*如果没有找到相应资料,则k的值没有改变,仍为0,所以!k为1*/printf("\n\n*对不起,通讯录中没有此人的记录!请您确定后再查找!");fclose(fp);}voidcancel()/*删除记录*/{ intm,k=0;longoffset1;charnamekey[15];structpersonone;printf("\n请输入您要删除的学生姓名:");scanf("%s",namekey);i
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025 年大学勘查技术与工程(地球物理勘探)期末测试卷
- 骨科护理中的护理管理新理念
- 安徽省合肥市一六八中学2026届高三3月份规范训练 语文试卷(含答案详解)
- 2024-2025学年度保安员考试经典例题及完整答案详解(必刷)
- 2024-2025学年度河北政法职业学院单招《数学》每日一练试卷及完整答案详解
- 2024-2025学年度电工能力提升B卷题库(夺冠)附答案详解
- 2024-2025学年反射疗法师大赛理论模拟试题(轻巧夺冠)附答案详解
- 2024-2025学年度中医助理医师考前冲刺试卷及参考答案详解(考试直接用)
- 2024-2025学年度钦州幼儿师范高等专科学校单招《职业适应性测试》模考模拟试题及参考答案详解【基础题】
- 2024-2025学年度执业兽医模拟题库及完整答案详解(夺冠)
- 湖北中医药大学-医学-护理105400专业考研复习题库大全-上(500题)
- 种子类中药课件
- 土木工程专业认识教育课件
- 动脉血气分析六步法杜斌
- 软体家具、沙发质量检验及工艺
- 全套电子课件:数据结构(C语言版)(第三版)
- 测量管理体系标准宣贯ppt课件
- 2020年小学中高年级书法教程ppt课件
- 前期手续横道图
- 计算机各种进制转换练习题(附答案)参考模板
- MFB60T系列自动封边机
评论
0/150
提交评论