通信录管理系统实验报告_第1页
通信录管理系统实验报告_第2页
通信录管理系统实验报告_第3页
通信录管理系统实验报告_第4页
通信录管理系统实验报告_第5页
已阅读5页,还剩8页未读 继续免费阅读

付费下载

下载本文档

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

文档简介

PAGE1南京工程学院课程设计报告设计名称通信录管理系统课程名称高级语言程序设计(C)院(系、部)通信工程学院班级算通111姓名余丹红学号208110410设计地点信息楼实验室C-216指导老师实验时间2012年3月5日至3月8日成绩目录一、设计任务…………2二、系统设计方案……………………2三、程序主要代码分析………………6四、程序调试中出现的问题及其解决方法…………12五、改进意见与收获体会……………12六、主要参考资料……………………13

一、设计任务1.课程设计应达到的目的课程设计时巩固所学理论知识、使理论与实际相结合的重要实践环节。本课程设计的目的是以C语言为基础,通过完成一个完整的程序的设计、编码、调试、运行工作,掌握面向过程程序设计的基本方法,从而提高学生分析问题、解决问题的能力。2.课程设计题目及要求(必须以文件的形式保存信息)题目:通信录管理系统要求:1.整个系统均用C语言实现;2.可以利用数组、指针、链表来实现数据结构设计;3.管理系统具有输入、显示、查询、删除、排序、插入、保存、读取等基本功能;4.系统的各个功能模块都用函数的形式来实现;5.可以将信息保存在文件中;6.可以将信息从文件中读取出来。3.程序设计使用工具软件:MicrosoftVisualC++6.0二、系统设计方案(系统主要模块功能介绍)(一)总体框架图:通信录管理系统1.添加通信录信息2.保存通信录信息3.删除通信录信息4.修改通信录信息5.查询通信录信息6.显示全部通信录信息7.排序全部通信录信息8退出通信录系统(二)模块设计模块一:头文件,变量定义,函数的声明,定义结构体定义结构体typedefstructstud为结构体命名Elemsn对系统所使用的变量进行定义,对函数进行声明模块二:通信录系统主界面设计声明函数voidmain(),对整个系统进行选择使用说明模块三:创建通信录信息声明函数creatlink(),用Elemsn*creatlink(void)创建链表信息模块四:通信录信息的添加声明voidinsert()插入学生信息,先通过判断学生是否存在,若否则继续输入,若是跳出,重新循环模块五:保存信息voidsavelink()用于保存链表信息模块六:通信录信息的删除声明voiddelet()实现学生信息删除,通过学号对比确定要删除的信息,然后用后一个替换掉。模块七:通信录信息的修改声明voidmodify()为学生信息修改函数,通过switch(n)设定所要修改的项目模块八:通信录信息的查找声明voidfind()为查找函数,通过switch(item)设定用学号查找,用姓名查找两个分支模块九:显示全部通信录信息通过voidprint()函数输出学生信息模块十:通信录信息的排序声明voidsort()将录入学生系按升序排列,用的是“冒泡排序法”实现排序*具体定义如下图Elemsn*creatlink(void)创建链表信息voidsavelink(Elemsn*h)保存链表信息Elemsn*readlink(void)读出已存文件信息Elemsn*insert(Elemsn*head)添加信息Elemsn*delet(Elemsn*p0)删除信息Elemsn*modify(Elemsn*h)修改信息voidfind(Elemsn*h)查询信息voidprint(Elemsn*p)显示全部信息Elemsn*sort(Elemsn*head)排序信息通讯录管理系统(三)模块划分通讯录管理系统排序排序通讯录退出通讯录显示所有通讯录查询通讯录修改通讯录删除通讯录添加通讯录保存通讯录创建通讯录开始输入选项开始输入选项判断选项输入操作选项结束输出数据退出系统排序信息显示全部信息查询信息修改信息删除信息添加信息对已有文件进行操作输入各项信息结束输入操作选项结束输出数据退出系统排序信息显示全部信息查询信息修改信息删除信息添加信息对已有文件进行操作输入各项信息结束创建新创建新的通信录保存保存结束三、程序主要代码分析1.创建链表信息:Elemsn*creatlink(void)//创建链表信息//{Elemsn*p1,*p2,*head;//p1为前驱,p2为后继//inti=1;charchoice;head=p2=(Elemsn*)malloc(N);//申请变量空间//head->next=NULL;choice='y';//选择yes//for(i=1;choice=='y'||choice=='Y';i++){p1=(Elemsn*)malloc(N); printf("*****************您现在所处的位置是通讯录管理系统信息建立界面*******************");printf("请输入第%d个学生的信息:\n",i);//创建学生信息//printf("学号:");scanf("%s",p1->number);printf("\n姓名:");scanf("%s",p1->name);printf("\n性别:");scanf("%s",p1->sex);printf("\n电话:");scanf("%s",p1->call);printf("\nQQ:");scanf("%s",p1->QQ);printf("\n宿舍号:");scanf("%s",p1->add);p2->next=p1;//将P1指针往下移动//p2=p1;printf("\n是否继续?(Y/N):"); choice=getche();//不以回车为结束 printf("\n");}p2->next=NULL;return(head);//返回初始//}2.保存链表信息:voidsavelink(Elemsn*h)//保存链表信息//{Elemsn*p;FILE*fp;charfliename[20];printf("\n请输入您要保存的文件名(已有文件:算通111班通信录):");scanf("%s",fliename);if((fp=fopen(fliename,"wt"))==NULL)//以写的方式打开文本文件,为空的情况//{printf("写文件出错,按任意键退出!"); getche();//输入后立即从控制台取出字符,不以回车为结束// exit(1);//跳回起始//}for(p=h->next;p!=NULL;p=p->next)//文件保存成功// fprintf(fp,"%s%s%s%s%s%s\n",p->number,p->name,p->sex,p->call,p->QQ,p->add);//向文件中写入数据//printf("文件已成功保存,按任意键返回!");getche();fclose(fp);}3.读出已存文件信息:Elemsn*readlink(void)//读出已保存文件的信息//{Elemsn*head,*p,*q;FILE*fp;charfilename[20];printf("\n请输入要打开的文件名:");scanf("%s",filename);if((fp=fopen(filename,"rt"))==NULL)//文件为空即出错跳出//{printf("读文件出错,按任意键退出!"); getche(); exit(1);}head=q=(Elemsn*)malloc(N);head->next=NULL;while(!feof(fp))//文件未结束时feof(fp)为0,结束时为非0//{p=(Elemsn*)malloc(N);//建立新链表,并从文件中读出数据// fscanf(fp,"%s%s%s%s%s%s\n",p->number,p->name,p->sex,p->call,p->QQ,p->add);q->next=p; q=p;//信息读出后,指针指向下一个//}q->next=NULL;fclose(fp);printf("文件信息已正确读出,按任意键返回!");getch();returnhead;}4.插入信息:Elemsn*insert(Elemsn*head)//插入信息//{Elemsn*p;p=(Elemsn*)malloc(N);printf("\n请输入要插入学生的信息:\n");printf("\n学号:");scanf("%s",p->number);printf("\n姓名:");scanf("%s",p->name);printf("\n性别:");scanf("%s",p->sex);printf("\n电话:");scanf("%s",p->call);printf("\nQQ:");scanf("%s",p->QQ);printf("\n宿舍号:");scanf("%s",p->add);if(head->next!=NULL){p->next=head->next;//插入数据操作代码// head->next=p;}printf("\n学生信息插入成功!按任意键继续!");getche();returnhead;}5.删除信息:Elemsn*delet(Elemsn*p0)//删除信息//{charnum[20];Elemsn*p;charchoice;if(p0->next==NULL){printf("信息出错!按任意键退出!"); getch(); exit(1);}printf("\n请输入要删除学生的学号:");scanf("%s",num);for(p=p0->next;strcmp(p->number,num)!=0;p0=p,p=p->next);//找到要删除的学生的信息//printf("你要删除的信息如下,请确认是否删除:\n");printf("\n学号:%s姓名:%s性别:%s电话:%sQQ:%s宿舍号:%s\n\n",p->number,p->name,p->sex,p->call,p->QQ,p->add);printf("\n是Y,否N:");//显示要删除的学生的信息//choice=getche();if(choice=='Y'||choice=='y'){p0->next=p->next; free(p);//释放链表// printf("\n文件删除成功!");}printf("\n按任意键结束!");getche();returnp0;}6.修改信息(可修改部分):Elemsn*modify(Elemsn*h)//修改信息//{intn;charnum[20];Elemsn*p;charchoice;printf("\n请输入要修改学生信息的学号:");scanf("%s",num);for(p=h;strcmp(p->number,num)!=0;p=p->next);//找到要修改的学生的信息//printf("\n输入要修改的学生信息的具体选项1.学号2.姓名3.性别4.电话5.QQ6.宿舍号7.全部重新输入:");scanf("%d",&n);switch(n)//分选项修改信息{case1:printf("输入新学号:"); scanf("%s",p->number);break;case2:printf("输入新姓名:"); scanf("%s",p->name);break;case3:printf("输入新性别:"); scanf("%s",p->sex);break;case4:printf("输入新电话:"); scanf("%s",p->call);break;case5:printf("输入新QQ:"); scanf("%s",p->QQ);break;case6:printf("输入新宿舍号:"); scanf("%s",p->add);break;case7://对于一条信息的重新输入,即全部修改 { printf("请输入修改后学生的信息:\n");printf("学号:");scanf("%s",p->number);printf("\n姓名:");scanf("%s",p->name);printf("\n性别:");scanf("%s",p->sex);printf("\n电话:");scanf("%s",p->call);printf("\nQQ:");scanf("%s",p->QQ);printf("\n宿舍号:");scanf("%s",p->add);}break;} printf("修改后学生信息如下:\n");printf("\n学号:%s姓名:%s性别:%s电话:%sQQ:%s宿舍号:%s\n\n",p->number,p->name,p->sex,p->call,p->QQ,p->add);printf("\n确认?是Y否N:");choice=getche();if(choice=='y'||choice=='Y')printf("\n修改成功,按任意键继续!");getche();returnh;}7.查询信息:voidfind(Elemsn*h)//查询信息//{charnum[20];Elemsn*p;printf("\n请输入你要查找的学生的学号:");scanf("%s",num);for(p=h;strcmp(p->number,num)!=0;p=p->next);printf("你查找的学生信息如下:\n");printf("\n学号:%s姓名:%s性别:%s电话:%sQQ:%s宿舍号:%s\n\n",p->number,p->name,p->sex,p->call,p->QQ,p->add);printf("按任意键继续!");getche();}voidprint(Elemsn*p)//显示全部信息//{p=p->next;while(p!=NULL){printf("\n学号:%s姓名:%s性别:%s电话:%sQQ:%s宿舍号:%s\n",p->number,p->name,p->sex,p->call,p->QQ,p->add); p=p->next;}printf("\n按任意键继续!");getche();}8.对信息排序:Elemsn*sort(Elemsn*head)//排序信息//{ Elemsn*q,*t,*p;p=head;t=NULL;while(t!=head->next) { p=head;q=p->next;while(q->next!=t) { if(strcmp(p->next->number,q->next->number)>0)/*前结点和后结点比较大小*/ { p->next=q->next;q->next=q->next->next;p->next->next=q; }p=p->next;q=p->next; }t=q;} printf("学生信息排序完毕,按任意键继续!"); getche(); print(head);return(head);/*返回头指针*/}9.对已有文件的操作(主函数调用)head=readlink();//进入文件,对已知数据进行操作//for(i=1;choice!=0;i++){system("cls");printf("请输入你要执行的操作代码(0-6):");scanf("%d",&choice);switch(choice)//执行增,删,改完毕后对新信息进行保存//{case1:h=insert(head);savelink(h);break;//增加并保存//case2:h=delet(head);savelink(h);break;//删除并保存//case3:h=modify(head);savelink(h);break;//修改并保存//case4:find(head);break;//查询//case5:print(head);break;//显示所有//case6:h=sort(head);savelink(h);break;//排序并保存//case0:break;//退出//}}四、程序调试中出现的问题及其解决方法·按照预先设计的模块,编写出每一个模块的函数,然后整合,最后调用。·出现很多语法错误,也有很多逻辑错误:如缺少“;”,“{}”“‘’”等少了一半;在最后函数调用时,少了调用函数;错语提示,有些变量定义了但是没有使用;错语提示,有些变量使用了但是没有定义;定义和使用的变量形式错误,如定义了int,使用时用了char

温馨提示

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

评论

0/150

提交评论