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






