c语言设计实验报告.doc_第1页
c语言设计实验报告.doc_第2页
c语言设计实验报告.doc_第3页
c语言设计实验报告.doc_第4页
c语言设计实验报告.doc_第5页
已阅读5页,还剩31页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

学 号: 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 系统概要通讯录是大家十分熟悉的系统,主要是为方便查询联系方式、通信地址而建立的。要求建立一个包含多个同学信息的同学通讯录,通讯录中的每个记录包含:姓名(name)、性别(sex)、生日(birthday)、家庭住址(address)、家庭联系电话(home_phone)、移动电话(move_phone)、电子邮箱(email)等数据内容,要求以文件的方式保存录入的同学通讯录数据,供用户查询和使用同学通讯录信息。本系统以C语言为工具,提供简单、易操作的人机界面,实现对通讯录的管理。1.2 系统要求分析建立通讯录,要求信息要包含姓名、性别、出生日期、住址、家庭电话、办公电话、移动电话、QQ、电子邮箱等。能够提供添加、删除、查找、修改、保存等功能。查找方式多样化,要有按姓名、电话、地址等查找。输出要有一定的格式。1.3 系统功能需求主要包含以下功能:添加记录:完成对电子通讯录内容信息的录入,并将其存放到指定文件(如:stud-list.txt)中;删除记录:输入要删除信息的编号,在数据文件中查找该信息,找到后删除;若查不到,则输出提示信息(如:not found!)。修改记录:改变记录项的一个或多个属性,并用新的记录项覆盖已经存在的记录项;要确定在数据文件中有其信息资料,若查找不到,则输出提示信息(如:not found!)。查找记录:根据用户输入的属性值查找并输出符合条件的记录项,要求可以“按姓名”、“ 按电话号码”等多种关键字进行记录查询;若找到,则输出该同学的相关信息;否则,输出提示信息(如:not found!)。 打印输出通讯录:以一定的格式打印出当前同学通讯录的所有内容列表。以上功能的功能选择需要在屏幕上列出各个选择项,然后接受键盘的输入作选择。2. 总体设计程序设计框架图:电子通讯录主菜单输出界面查找删除修改显示添加创建1.紫色背景,白色前景2.黑色背景,蓝色前景界面颜色更换3.绿色背景,黄色前景4.黄色背景,淡紫色前景0. 返回 1 编号2 姓名查找3 电话4 地址5 返回1. 办公电话电话查找2. 家庭电话3. 移动电话4. 返回 工作流程图:开始 创建文件:打开文件输入字样关闭文件结束 添加记录:开始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”):更换显示界面颜色的函数,其中第一、二个数,分别改变输出界面的背景、前景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; /*出生年月*/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() /*建立通讯录,并将信息存入文件*/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. 结论与心得体会课程设计对于我来说还是我入大学以来第一次接触,当看到老师说给出的题目时真的感觉那题目好像是高级程序开发师才能完成的课题,用自己的水平很可能完成不了,我感到了入大学以来的最大的压力。于是,我便通过上网,看书等途径先了解了一些模式,看过人家的作品之后感觉自己的能力似乎可以完成老师所布置的任务,这才放宽了心。这时我也感到,这次课程设计是对我们这学期所学的c语言知识的一次综合性检验。它从对标识符的认识、类型的字节长度、输入输出等这些基本的要求入手,然后结合数组、指针、函数、文件这些重难点知识对我们进行了一次较为全面的c语言知识考察。正是这样一次考察让我更加加深了对指针、数组、函数、文件的认识,发现了许多平时不会注意的地方,较好的弥补了自己的不足!在写程序时我体会到,要想把它写好,必须要明白功能与选择的连接关系,选取适当的函数,然后还要考虑到从程序如何调用文件、保存文件,如何记录总的信息,这是我考虑到了全局变量,还有如何调用这麽多同学的信息,这时我考虑到了循环,这个程序中用了很多的循环就是为了调用足够的信息。然而在用循环时一定要注意各个循环之间的区别,这也是很重要的。还有就是我通过这次实验知道书上的知识也有不详尽的地方,如:如何清除掉以前的信息,维持一个比较清爽的界面,如何用比较简洁的方式横向移动输出信息,我通过上网,问同学知道了它们分别可以用system(“cls”)、t来解决。这次的综合设计实验我不敢说我做的很成功,但是我进了我最大的能力来力求完美,我分析后也了解到了自己文件的一个突出的不足:如何把上次的记录的信息在下次打开时,能够调用,我试了很多的方法但是都没有结果,我唯有暂时放弃。在今后我在空余时间一定会继续学习,以弥补自己的不足!5. 调试与测试5.1 调试报告出现的问题及修正:在编写电子通讯录的结构体时我定义性别的sex的字节长度为2,等到调试时才发现在输出的性别后面有一个不明字符,我便检查了程序,这时才发现是定义的性别的长度太短,没有找到结束符,程序便读到了下一位。因而我将sex的长度定义为4个字节。我在使用strcmp函数来比较两个字符串大小时,我认为在两个字符串相等时的返回值是1,在调试时才发现显示结果和我想要的结果刚好相反,我便查看了教材,发现当两个字符串相等时其返回值是0,所以便把那个语句改为了:while(strcmp(peri.mbnub,s)!=0&in) i+;在使用是scanf语句时,我定义了一个基类型为int的变量,当用scanf输入语句时却忘了加取地址符-“&”,等到运行时弹出了一个很奇怪的窗口,这时我才发现我把字符串数组的输入和它弄混了!在使用双层结构体时,我把出生年月这一成员的调用直接用per.birth来实现,在运行时发现输入的年月日只能放在一块,没有合理的间隔,我便查看了老师发给我们的ppt,这才发现对于双层的结构体要逐级调用到最低级才能赋值。在编写程序中,对于在输出界面上的对齐问题,尝试了很多用空格的方法都不能做到我满意的地步,便请教了班里同学,用了“t”。我想编写一个函数,能够改变输出界面的颜色,通过上网了解到:可以用#include这个头文件里有这个函数 system(Color f0);f0为白色背景黑色字体,可以按照一下规则修改:颜色属性由两个十六进制数字指定:第一个为背景色,第二个为前景。每一个数字可以为以下任何值之一。 0=黑色 8=灰色 1=蓝色 9=淡蓝色 2=绿色 A=淡绿色 3=湖蓝色 B=淡浅绿色 4=红色 C=淡红色 5=紫色 D=淡紫色 6=黄色 E=淡黄色 7=白色 F=亮白色调试报告总结: 在编写程序过程中我遇到了不少的问题,除了以上的比较典型的问题之外,还有好多,比如:中英文的符号的转换;子函数该有返回值的没有加return语句;在文件打开时,是以什么方式打开,是只读,还是读写,还是追加;如何将记录写入到文件;for无限循环的如何实现等等。但是经过一遍又一遍地运行、调试终于把问题解决了。5.2 测试结果图 1 登录电子通讯录系统界面图图 2创建电话薄文件图图 3 更换显示界面图图 4 添加信息图图 5显示通讯录列表图图 6删除信息图图 7查询信息图图 7修改信息图图 8修改后通讯录列表图图 9保存到文件后通讯录列表图6. 附录6.1 源程序:/* 通讯录是大家十分熟悉的系统,主要是为方便查询联系方式、通信地址而建立的。 通讯录中的每个记录包含:姓名(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;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; PERSON per200;int menu_select() /通讯录选择菜单 char c; do system(cls); printf(tt 欢迎进入电子通讯录管理系统界面 n);printf(ntt *通讯录菜单*n); printf(tt $-$n); printf(tt $ 1. 创建电话薄 5. 删除记录 $n);printf(tt $ 2. 显示色彩调试 6.修改记录 $n); printf(tt $ 3. 添加记录 7.查找记录 $n);printf(tt $ 4. 显示记录 8.打印输出记录 $n); printf(tt $ 0. 退出程序 $n); printf(tt $-$n); printf(tt 制作:电信科1002班 刘云龙 n);printf(ttn);printf(tt请您选择(0-8):ntt); c=getchar(); while(c8); return(c-0); creat() int w; char filename20;FILE *fp;printf(tt-创建电话薄系统-n); /创建文件函数printf(tt| 是否创建了电话薄文件 |n);printf(tt| 如果没创建请按:0,如果已创建请按:1|n);printf(tt-ntt);scanf(%d,&w);switch(w) case 0: printf(请输入要创建的电话薄文件名:ntt); scanf(%s,filename); fp=fopen(filename,w+); fputs(电话薄信息:n,fp); fclose(fp); printf(tt已创建成功,请继续!n); break; case 1: printf(tt不需要创建,请继续!n); break;void show_color()int y;printf(tt请选择你要更改的显示界面颜色n); printf(tt n);printf(tt 1.紫色背景,白色前景 n);printf(tt 2.黑色背景,蓝色前景 n);printf(tt 3.绿色背景,黄色前景 n);printf(tt 4.黄色背景,淡紫色前景n);printf(tt 0. 返回 n);printf(tt n);printf(tt请选择:);scanf(%d,&y);switch(y)case 1:system(color 5f);printf(tt修改完成!n);break; case 2:system(color 09);printf(tt修改完成!n);break;case 3:system(color 2e);printf(tt修改完成!n);break;case 4:system(color 6d);printf(tt修改完成!n);break;case 0:printf(tt没有改变,谢谢n);break;int Input(PERSON per,int n) /添加函数 int i=0; char si; while(si!=n&si!=N) printf(t编号:); scanf(t%d,&pern+i.score); printf(t姓名:); scanf(t%s,pern+); printf(t性别:); scanf(t%s,pern+i.sex);printf(t出生年月:); scanf(t%d%d%d,&pern+i.birth.year,&pern+i.birth.month,&pern+i.birth.day); printf(t住址:); scanf(t%s,pern+i.addr);printf(t办公电话:);scanf(t%s,pern+i.offphnum); printf(t家庭电话:); scanf(t%s,pern+i.hmphnum);printf(t移动电话:); scanf(t%s,pern+i.mbnub); printf(tQQ:); scanf(t%s,pern+i.QQ);printf(t电子邮箱:);scanf(t%s,pern+i.mail);printf(nt是否继续添加?(Y/N); scanf(t%c,&si); i+; return(n+i); void Show(PERSON per,int n) /显示函数 int i; printf(n 卐通讯录列表卍 n);printf(*n); /*格式*/ printf(编号t姓名t性别t出生年月t地址tt办公电话t家庭电话t移动电话tt QQ t电子邮箱n); printf(*n); for(i=1;i1&i%5=0) printf(-n);system(pause); printf(-n); printf(*n); system(pause); int Delete_a_record(PERSON per,int n) char s20; int i=0,j; printf(t请输入想删除记录中的名字:); scanf(%s,s); while(strcmp(,s)!=0&in) i+; if(i=n) printf(tnot found!n); return(n); for(j=i;jn-1;j+) perj.score=perj+1.score; strcpy(perj.sex,perj+1.sex); strcpy(,perj+1.name); perj.birth=perj+1.birth;strcpy(perj.addr,perj+1.addr); strcpy(perj.offphnum,perj+1.offphnum); strcpy(perj.hmphnum,perj+1.hmphnum); strcpy(perj.mbnub,perj+1.mbnub);strcpy(perj.QQ,perj+1.QQ);strcpy(perj.mail,perj+1.mail); printf(ttt已经成功删除!n);return(n-1); void Alter(PERSON per,int n) char s20; int i=0; printf(t请输入想修改的记录中的名字:); scanf(%s,s); while(strcmp(,s)!=0&in) i+; if(i=n) printf(tnot found!n); return; printf(t编号:); scanf(t%d,&peri.score); printf(t姓名:); scanf(t%s,); printf(t性别:); scanf(t%s,peri.sex);printf(t出生年月:); scanf(t%d%d%d,&peri.birth.year,&peri.birth.month,&peri.birth.day); printf(t住址:); scanf(t%s,peri.addr);printf(t办公电话:);scanf(t%s,peri.offphnum); printf(t家庭电话:); scanf(t%s,peri.hmphnum);printf(t移动电话:); scanf(t%s,peri.mbnub); printf(tQQ:); scanf(t%s,peri.QQ);printf(t电子邮箱:);scanf(t%s,peri.mail);printf(t修改成功!n);void Find_a_record(PERSON per,int n) int m;printf(欢迎进入电话簿查询系统n);printf(tn 请选择查询方式: n); printf(t n);printf(t1 编号 n); printf(t2 姓名 n); printf(t3 电话 n); printf(t4 地址 n); printf(t5 返回 n); printf(t n); printf(请选择数字:); scanf(%d,&m); while(m!=1&m!=2&m!=3&m!=4&m!=5) printf(输入不合要求,请重新选择:);scanf(%d,&m); if(m=1)int b; int i=0; printf(t请输入想查询的记录的编号:); scanf(t%d,&b); while(b!=peri.score)&in) i+; if(i=n) printf(tnot found!n); return; printf(t编号:%dn,&peri.score); printf(t姓名:%sn,); printf(t性别:%sn,peri.sex);printf(t出生时间:%d-%d-%dn,peri.birth.year,peri.birth.month,peri.birth.day); printf(t住址:%sn,peri.addr);printf(t办公电话:%sn,peri.offphnum); printf(t家庭电话:%sn,peri.hmphnum);printf(t移动电话:%sn,peri.mbnub); printf(tQQ:%sn,peri.QQ);printf(t电子邮箱%sn:,peri.mail); if(m=2)char s20; int i=0; printf(t请输入想查询的姓名:); scanf(t%s,s); while(strcmp(,s)!=0&in) i+; if(i=n) printf(tnot found!n); return; printf(t编号:%dn,&peri.score); printf(t姓名:%sn,); printf(t性别:%sn,peri.sex);printf(t出生时间:%d-%d-%dn,peri.birth.year,peri.birth.month,peri.birth.day); printf(t住址:%sn,peri.addr);printf(t办公电话:%sn,peri.offphnum); printf(t家庭电话:%sn,peri.hmphnum);printf(t移动电话:%sn,peri.mbnub); printf(tQQ:%sn,peri.QQ);printf(t电子邮箱%sn:,peri.mail); if(m=3)int r;printf(t请输入要查询的电话号码种类n);printf(t n);printf(t 1. 办公电话 n);printf(t 2. 家庭电话 n);printf(t 3. 移动电话 n);printf(t 4. 返回 n);printf(t n);printf(t请输入:nt);scanf(%d,&r);while(r!=1&r!=2&r!=3&r!=4)printf(t输入有误,请重新输入:nt); scanf(%d,&r);if(r=1)char s20; int i=0; printf(t请输入想查询的电话:); scanf(t%s,s); while(strcmp(peri.mbnub,s)!=0&in) i+; if(i=n) printf(tnot found!n); return; printf(t编号:%dn,&peri.score); printf(t姓名:%sn,); printf(t性别:%sn,peri.sex);printf(t出生时间:%d-%d-%dn,peri.birth.year,peri.birth.month,peri.birth.day); printf(t住址:%sn,peri.addr);printf(t办公电话:%sn,peri.offphnum); printf(t家庭电话:%sn,peri.hmphnum);printf(t移动电话:%sn,peri.mbnub); printf(tQQ:%sn,peri.QQ);printf(t电子邮箱%sn:,peri.mail); if(r=2)char s20; int i=0; printf(t请输入想查询的电话:); scanf(t%s,s); while(strcmp(peri.mbnub,s)!=0&in) i+; if(i=n) printf(tnot found!n); return; printf(t编号:%dn,&peri.score); printf(t姓名:%sn,); printf(t性别:%sn,peri.sex);printf(t出生时间:%d-%d-%dn,peri.birth.year,peri.birth.month,peri.birth.day); printf(t住址:%sn,peri.addr);printf(t办公电话:%sn,peri.offphnum); printf(t家庭电话:%sn,peri.hmphnum);printf(t移动电话:%sn,peri.mbnub); printf(tQQ:%sn,peri.QQ);printf(t电子邮箱%sn:,peri.mail); if(r=3)char s20; int i=0; printf(t请输入想查询的电话:); scanf(t%s,s); while(strcmp(peri.mbnub,s)!=0&in) i+; if(i=n) printf(tnot found!n); return; printf(t编号:%dn,&peri.score); printf(t姓名:%sn,); printf(t性别:%sn,peri.sex);printf(t出生时间:%d-%d-%dn,peri.birth.year,peri.birth.month,peri.birth.day); printf(t住址:%sn,peri.addr);printf(t办公电话:%sn,peri.offphnum); printf(t家庭电话:%sn,peri.hmphnum);printf(t移动电话:%sn,peri.mbnub); printf(tQQ:%sn,peri.QQ);printf(t电子邮箱%sn:,peri.mail); if(m=4)char s20; int i=0; printf(t请输入想查询的地址:); scanf(t%s,s); while(strcmp(peri.addr,s)!=0&in) i+; if(i=n) printf(tnot found!n); return; printf(t编号:%dn,&peri.score); printf(t姓名:%sn,); printf(t性别:%sn,peri.sex);printf(t出生时间:%d-%d-%dn,peri.birth.year,peri.birth.month,peri.birth.day); printf(t住址:%sn,peri.addr);pri

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论