1、实验报告实验名称:学生通信录管理系统实验项目性质:综合性、设计性所涉及课程:C语言课程设计筹划学时:实验学时4一、实验目 综合考察学生本学期对C语言掌握限度。二、实验内容1.编写一种可以把学生信息写入文献函数creact(),采用动态链表。2.编写一种可以增长新成员函数add1()。3编写一种可以查询拟定学生函数search1()。4编写一种可以删除拟定学生函数del1()。5编写一种可以修改拟定学生函数modify1()。6编写一种可以打开通信录函数open1( )。附录:search1函数调用searchnum和searchname函数,分别为按学号和按名字查询。 del函数调用delna
2、me和deltel函数,分别为按名字和按电话删除。 modify1函数调用modifynum和modifyname函数,分别为按学号和按名字找到修改。open1函数调用sorttel和sortname函数,分别为按电话和按名字从小到大顺序打开。三、实验(设计)仪器设备和材料清单1.硬件:PC机 2.软件:Turbo C 2.0/Turbo C+ 3.0 四、实验规定设计一种学生通讯录管理系统,在动态链表程序基本上,设计规定如下(必要使用构造体和动态链表等数据构造)1建立文献 存储文献使用指定文献名或默认文献名; 可以不保存输入记录,但需要确认与否保存输入记录 如果已有文献,只能在其后追加; 新
3、增记录可以不存入原文献中,以可以用本来文献覆盖内存内容;可以将各种个文献记录合并到一种文献中;2文献存取和显示 可以单独存取文献; 可以随时显示内存中记录所有内容; 可以直接存取默认文献或指定文献;3删除记录 可以按“姓名”或“电话”方式删除记录并更新内存链表内容; 能给出被删除信息,输出没有找到信息; 如果已经是空表,上出时应给出信息并返回主菜单; 如果没有要删除信息,输出没有找到信息;删除操作仅限于内存,只有执行记录时,才干覆盖原记录;4查询记录 可以按“姓名”或“电话”或“宿舍”方式查询记录 能给出查询记录信息;如果查询信息不存在,输出没有找到信息;5 整体功能 a可以随时检索、删除、或
4、增长新记录,保存或取消新记录 b使姓名可由16位字符和数字混合编码构成 c使电话号码可由18位字符和数字构成d将输出信息加上输出信息信息栏,例如 姓名 电话 性别 年龄 生日 宿舍 李四 1234 男 21 7月1日 东二333 e使用菜单实现功能对的选取 f 所有节点信息都是动态生成。 6测试程序 应列出测试大纲对程序进行测试; 应保证测试用例测试到程序各种边沿状况五、实验环节及成果测试A、主函数主函数提供可选取功能1234560创立增长查找 删除修改打开退出按名字、按学号按电话、按名字按名字、按学号按电话、按名字程序清单:void main()int i;end:printf( |-|n)
5、;printf( | 1.ceate new file |n);printf( | 2.add information |n);printf( | 3.search |n);printf(“ | 4.telect |n);printf( | 5.modify |n);printf( | 6.open |n);printf( | 0.register |n);printf( |-|n);printf(input your choice(0-6):n); scanf(%d,&i); if(i=1)creat1(); goto end;if(i=2) add1(); goto end;if(i=3)
6、 search1(); goto end; if(i=4)del1(); goto end; if(i=5) modify1(); goto end; if(i=6) open1(); goto end; exit(0);B、创立:void create()开始动态申请内存输入学号学号不为0输入其她信息动态申请内存并输入学号结束链表建立存入文献结束程序清单:void creat1()FILE *fp;char i;struct student *p1,*p2,*head;n=0;p1=p2=(struct student *)malloc(LEN);printf(nenter NO.:n);s
7、canf(%d,&p1-num);while(p1-num!=0)printf(enter name:n);scanf(%s,p1-name);printf(enter tel:n);scanf(%s,p1-tel);doprintf(enter sex:n);getchar();scanf(%c,&p1-sex);while(p1-sex!=f&p1-sex!=F&p1-sex!=m&p1-sex!=M);do printf(enter age:n);scanf(%d,&p1-age);while(p1-ageage=150); printf(enter birthday:n);scanf(
8、%s,p1-bir); printf(enter address:n);scanf(%s,p1-add);n=n+1;if(n=1)head=p1; else p2-next=p1;p2=p1; p1=(struct student *)malloc(LEN);printf(enter NO.:n); scanf(%d,&p1-num);p2-next=NULL;printf(nsave them or no(y/n)n);doprintf(input choicen);getchar();scanf(%c,&i);while(i!=y&i!=Y&i!=n&i!=N);if(i=y|i=Y)p
9、1=head;if(fp=fopen(FILENAME,wb)=NULL)printf(cannot open filen);return;if(p1!=NULL)doif(fwrite(p1,sizeof(struct student),1,fp)!=1)printf(file write errorn);fclose(fp);break;p1=p1-next;while(p1!=NULL);fclose(fp); C、增长 void add1()设计思路和创立新通信录同样,只是文献打开方式是“a”,即以追加方式打开。程序清单:void add1()FILE *fp;char i;struc
10、t student *p1,*p2,*head;n=0;p1=p2=(struct student *)malloc(LEN);printf(nenter NO.:n);scanf(%d,&p1-num);while(p1-num!=0)printf(enter name:n);scanf(%s,p1-name);printf(enter tel:n);scanf(%s,p1-tel);printf(enter sex:n);getchar();scanf(%c,&p1-sex); printf(enter age:n);scanf(%d,&p1-age); printf(enter birt
11、hday:n);scanf(%s,p1-bir); printf(enter address:n);scanf(%s,p1-add);n=n+1;if(n=1)head=p1;else p2-next=p1;p2=p1;p1=(struct student *)malloc(LEN);printf(enter NO.:n);scanf(%d,&p1-num);p2-next=NULL;printf(nsave them or no(y/n)n);doprintf(input choicen);getchar();scanf(%c,&i);while(i!=y&i!=Y&i!=n&i!=N);i
12、f(i=y|i=Y)p1=head;if(fp=fopen(FILENAME,a)=NULL)printf(cannot open filen);return;if(p1!=NULL)doif(fwrite(p1,sizeof(struct student),1,fp)!=1)printf(file write errorn);fclose(fp);break;p1=p1-next;while(p1!=NULL);fclose(fp); D、查找 void search()开始选取按名字或按学号查找按名字择调用Searchname()按学号择调用Searchnum()结束开始查找符合节点找到则
13、输出该节点内容找不到输出“not find”结束重建链表输入名字(电话)程序清单:1、void search1()int i;printf(please input your choice(0-2);printf( |-|n);printf( | 1.search in NO. |n);printf( | 2.search in name |n);printf( | 0.register |n);printf( |-|n); do printf(input your choice); scanf(%d,&i); while(i!=1&i!=2&i!=0); switch(i)case1:sea
14、rchnum(); break;case2:searchname(); break;default:exit(0); 2、void searchname()struct student *p1,*p2,*head;char name16;head=recreat();printf(enter the students name:n);scanf(%d,name);for(p1=head;p1-next!=NULL;p1=p1-next)if(strcmp(p1-name,name)=0)printf(,%dt%st%st%ct%dt%st%sn,p1-num,p1-name,p1-tel,p1-sex,p1-age,p1-bir,p1-add);3、void searchnum()struct student *p1,*p2,*head;int num;head=recreat();printf(enter the students NO.:n);scanf(%d,&num);for(p1=head;p1-next!=NULL;p1=p1-next)if(p1-num=num)printf(,%dt%st%st%ct%dt%st%sn,p1-num,p1-name,p1-tel,p1-sex,p1-age,p1-bir,p1-add);