c语言设计实验报告.doc
《c语言设计实验报告.doc》由会员分享,可在线阅读,更多相关《c语言设计实验报告.doc(36页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、学 号: C语言综合实验题 目电子通讯录学 院专 业班 级姓 名2011年6月30日目录1.需求分析- 2 -1.1系统概要- 2 -1.2系统要求分析- 2 -1.3系统功能需求- 2 -2.总体设计- 3 -3.详细设计- 10 -3.1涉及到的重要语句的说明:- 10 -3.2重要的函数说明:- 11 -3.3相关的重要的参数说明:- 11 -4.结论与心得体会- 11 -5.调试与测试- 12 -5.1调试报告- 12 -5.2测试结果- 13 -6.附录- 19 -6.1源程序:- 19 -6.2测试数据:- 33 -6.3运行结果- 34 -电子通讯录管理系统1. 需求分析1.1
2、系统概要通讯录是大家十分熟悉的系统,主要是为方便查询联系方式、通信地址而建立的。要求建立一个包含多个同学信息的同学通讯录,通讯录中的每个记录包含:姓名(name)、性别(sex)、生日(birthday)、家庭住址(address)、家庭联系电话(home_phone)、移动电话(move_phone)、电子邮箱(email)等数据内容,要求以文件的方式保存录入的同学通讯录数据,供用户查询和使用同学通讯录信息。本系统以C语言为工具,提供简单、易操作的人机界面,实现对通讯录的管理。1.2 系统要求分析建立通讯录,要求信息要包含姓名、性别、出生日期、住址、家庭电话、办公电话、移动电话、QQ、电子邮
3、箱等。能够提供添加、删除、查找、修改、保存等功能。查找方式多样化,要有按姓名、电话、地址等查找。输出要有一定的格式。1.3 系统功能需求主要包含以下功能:添加记录:完成对电子通讯录内容信息的录入,并将其存放到指定文件(如:stud-list.txt)中;删除记录:输入要删除信息的编号,在数据文件中查找该信息,找到后删除;若查不到,则输出提示信息(如:not found!)。修改记录:改变记录项的一个或多个属性,并用新的记录项覆盖已经存在的记录项;要确定在数据文件中有其信息资料,若查找不到,则输出提示信息(如:not found!)。查找记录:根据用户输入的属性值查找并输出符合条件的记录项,要求
4、可以“按姓名”、“ 按电话号码”等多种关键字进行记录查询;若找到,则输出该同学的相关信息;否则,输出提示信息(如:not found!)。 打印输出通讯录:以一定的格式打印出当前同学通讯录的所有内容列表。以上功能的功能选择需要在屏幕上列出各个选择项,然后接受键盘的输入作选择。2. 总体设计程序设计框架图:电子通讯录主菜单输出界面查找删除修改显示添加创建1.紫色背景,白色前景2.黑色背景,蓝色前景界面颜色更换3.绿色背景,黄色前景4.黄色背景,淡紫色前景0. 返回 1 编号2 姓名查找3 电话4 地址5 返回1. 办公电话电话查找2. 家庭电话3. 移动电话4. 返回 工作流程图:开始 创建文件
5、:打开文件输入字样关闭文件结束 添加记录:开始i=0;char si;si!=n&si!=N y y输入return(n+i)结束 显示记录: 删除记录: 查询记录: 修改记录: 开始输出记录:i=0;in 0 非0输出到文件i+结束 从文件读出记录:开始 int i=1,m;m=nim+1 非0输出记录i+结束3. 详细设计3.1 涉及到的重要语句的说明: #include:更换输出界面颜色的头文件#define size sizeof(PERSON):宏定义,PERSON的长度用size代替system(“color 5f”):更换显示界面颜色的函数,其中第一、二个数,分别改变输出界面的背
6、景、前景system(“cls”):清屏,保障清爽的界面system(“pause”):持续性输出fread(&peri-1,size,1,fp):将文件中的信息读取,并存去到per所指向的存储空间,长度为size字节fwrite(&peri,size,1,fp):将数据写入fp所指向的文件中,长度为size字节strcmp:字符串比较函数strcpy:字符串赋值函数fprinf:将信息写入所指定的文件中fputs:将信息写入文件fopen(filename,a):打开名字为filename的文本文件结构体:typedef struct int month, day, year; /*出生年月
7、*/BT;int n=0;typedef struct person /*通讯录结构中结点的定义*/ int score; /*编号*/ char name10; /* 姓名 */char sex4; /*性别:男或女*/BT birth; /*出生年月*/char addr30; /* 地址 */char offphnum15; /* 办公电话 */char hmphnum15; /* 家庭电话 */char mbnub15; /* 移动电话 */char QQ11; /*qq*/char mail30; /*电子邮箱*/PERSON; 3.2 重要的函数说明:create() /*建立通讯
8、录,并将信息存入文件*/void Show() /*输出显示所有的信息*/void Delete() /*删除一条记录的信息*/void Find() /*查找记录的函数*/void Input() /*向通讯录中追加一条记录*/void Alter() /*修改一条记录的信息*/void Save() /*保存信息到文件*/void show_color /*跟换输出界面颜色*/void record /*记录文件中的信息个数*/menu_select() /*菜单选择函数*/3.3 相关的重要的参数说明: size:PERSON的字节长度 n:全局变量,记录所输入的信息个数 4. 结论与心
9、得体会课程设计对于我来说还是我入大学以来第一次接触,当看到老师说给出的题目时真的感觉那题目好像是高级程序开发师才能完成的课题,用自己的水平很可能完成不了,我感到了入大学以来的最大的压力。于是,我便通过上网,看书等途径先了解了一些模式,看过人家的作品之后感觉自己的能力似乎可以完成老师所布置的任务,这才放宽了心。这时我也感到,这次课程设计是对我们这学期所学的c语言知识的一次综合性检验。它从对标识符的认识、类型的字节长度、输入输出等这些基本的要求入手,然后结合数组、指针、函数、文件这些重难点知识对我们进行了一次较为全面的c语言知识考察。正是这样一次考察让我更加加深了对指针、数组、函数、文件的认识,发
10、现了许多平时不会注意的地方,较好的弥补了自己的不足!在写程序时我体会到,要想把它写好,必须要明白功能与选择的连接关系,选取适当的函数,然后还要考虑到从程序如何调用文件、保存文件,如何记录总的信息,这是我考虑到了全局变量,还有如何调用这麽多同学的信息,这时我考虑到了循环,这个程序中用了很多的循环就是为了调用足够的信息。然而在用循环时一定要注意各个循环之间的区别,这也是很重要的。还有就是我通过这次实验知道书上的知识也有不详尽的地方,如:如何清除掉以前的信息,维持一个比较清爽的界面,如何用比较简洁的方式横向移动输出信息,我通过上网,问同学知道了它们分别可以用system(“cls”)、t来解决。这次
11、的综合设计实验我不敢说我做的很成功,但是我进了我最大的能力来力求完美,我分析后也了解到了自己文件的一个突出的不足:如何把上次的记录的信息在下次打开时,能够调用,我试了很多的方法但是都没有结果,我唯有暂时放弃。在今后我在空余时间一定会继续学习,以弥补自己的不足!5. 调试与测试5.1 调试报告出现的问题及修正:在编写电子通讯录的结构体时我定义性别的sex的字节长度为2,等到调试时才发现在输出的性别后面有一个不明字符,我便检查了程序,这时才发现是定义的性别的长度太短,没有找到结束符,程序便读到了下一位。因而我将sex的长度定义为4个字节。我在使用strcmp函数来比较两个字符串大小时,我认为在两个
12、字符串相等时的返回值是1,在调试时才发现显示结果和我想要的结果刚好相反,我便查看了教材,发现当两个字符串相等时其返回值是0,所以便把那个语句改为了:while(strcmp(peri.mbnub,s)!=0&in) i+;在使用是scanf语句时,我定义了一个基类型为int的变量,当用scanf输入语句时却忘了加取地址符-“&”,等到运行时弹出了一个很奇怪的窗口,这时我才发现我把字符串数组的输入和它弄混了!在使用双层结构体时,我把出生年月这一成员的调用直接用per.birth来实现,在运行时发现输入的年月日只能放在一块,没有合理的间隔,我便查看了老师发给我们的ppt,这才发现对于双层的结构体要
13、逐级调用到最低级才能赋值。在编写程序中,对于在输出界面上的对齐问题,尝试了很多用空格的方法都不能做到我满意的地步,便请教了班里同学,用了“t”。我想编写一个函数,能够改变输出界面的颜色,通过上网了解到:可以用#include这个头文件里有这个函数 system(Color f0);f0为白色背景黑色字体,可以按照一下规则修改:颜色属性由两个十六进制数字指定:第一个为背景色,第二个为前景。每一个数字可以为以下任何值之一。 0=黑色 8=灰色 1=蓝色 9=淡蓝色 2=绿色 A=淡绿色 3=湖蓝色 B=淡浅绿色 4=红色 C=淡红色 5=紫色 D=淡紫色 6=黄色 E=淡黄色 7=白色 F=亮白色
14、调试报告总结: 在编写程序过程中我遇到了不少的问题,除了以上的比较典型的问题之外,还有好多,比如:中英文的符号的转换;子函数该有返回值的没有加return语句;在文件打开时,是以什么方式打开,是只读,还是读写,还是追加;如何将记录写入到文件;for无限循环的如何实现等等。但是经过一遍又一遍地运行、调试终于把问题解决了。5.2 测试结果图 1 登录电子通讯录系统界面图图 2创建电话薄文件图图 3 更换显示界面图图 4 添加信息图图 5显示通讯录列表图图 6删除信息图图 7查询信息图图 7修改信息图图 8修改后通讯录列表图图 9保存到文件后通讯录列表图6. 附录6.1 源程序:/* 通讯录是大家十
15、分熟悉的系统,主要是为方便查询联系方式、通信地址而建立的。 通讯录中的每个记录包含:姓名(name)、性别(sex)、生日(birthday)、家庭住址(address)、 家庭联系电话(home_phone)、移动电话(move_phone)、电子邮箱(email)等多个数据内容, 本程序运用指针、数组、文件方面的知识得以完成!*/#include #include#include #include#define size sizeof(PERSON) /宏定义 sizetypedef struct int month, day, year; /*出生年月*/BT;int n=0;typed
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 语言 设计 实验 报告
限制150内