资源描述
实验报告
实验名称:学生通信录管理系统
实验项目性质:综合性、设计性
所涉及课程:C语言课程设计
筹划学时:实验学时4
一、实验目
综合考察学生本学期对C语言掌握限度。
二、实验内容
1.编写一种可以把学生信息写入文献函数creact(),采用动态链表。
2.编写一种可以增长新成员函数add1()。
3编写一种可以查询拟定学生函数search1()。
4编写一种可以删除拟定学生函数del1()。
5编写一种可以修改拟定学生函数modify1()。
6编写一种可以打开通信录函数open1( )。
附录:search1函数调用searchnum和searchname函数,分别为按学号和按名字查询。
del函数调用delname和deltel函数,分别为按名字和按电话删除。
modify1函数调用modifynum和modifyname函数,分别为按学号和按名字找到修改。
open1函数调用sorttel和sortname函数,分别为按电话和按名字从小到大顺序打开。
三、实验(设计)仪器设备和材料清单
1.硬件:PC机
2.软件:Turbo C 2.0/Turbo C++ 3.0
四、实验规定
设计一种《学生通讯录管理系统》,在动态链表程序基本上,设计规定如下
(必要使用构造体和动态链表等数据构造)
1建立文献
存储文献使用指定文献名或默认文献名;
可以不保存输入记录,但需要确认与否保存输入记录
如果已有文献,只能在其后追加;
新增记录可以不存入原文献中,以可以用本来文献覆盖内存内容;
可以将各种个文献记录合并到一种文献中;
2文献存取和显示
可以单独存取文献;
可以随时显示内存中记录所有内容;
可以直接存取默认文献或指定文献;
3删除记录
可以按“姓名”或“电话”方式删除记录并更新内存链表内容;
能给出被删除信息,输出没有找到信息;
如果已经是空表,上出时应给出信息并返回主菜单;
如果没有要删除信息,输出没有找到信息;
删除操作仅限于内存,只有执行记录时,才干覆盖原记录;
4查询记录
可以按“姓名”或“电话”或“宿舍”方式查询记录
能给出查询记录信息;
如果查询信息不存在,输出没有找到信息;
5 整体功能
a可以随时检索、删除、或增长新记录,保存或取消新记录
b使姓名可由16位字符和数字混合编码构成
c使电话号码可由18位字符和数字构成
d将输出信息加上输出信息信息栏,例如
姓名 电话 性别 年龄 生日 宿舍
李四 1234 男 21 7月1日 东二333
e使用菜单实现功能对的选取
f 所有节点信息都是动态生成。
6测试程序
应列出测试大纲对程序进行测试;
应保证测试用例测试到程序各种边沿状况
五、实验环节及成果测试
A、主函数
主函数
提供可选取功能
1
2
3
4
5
6
0
创立
增长
查找
删除
修改
打开
退出
按名字、按学号
按电话、按名字
按名字、按学号
按电话、按名字
程序清单:
void main()
{
int i;
end:
printf(" |----------------------------------------|\n");
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)
{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");
scanf("%d",&p1->num);
while(p1->num!=0)
{
printf("enter name:\n");
scanf("%s",p1->name);
printf("enter tel:\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",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");
getchar();
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;
}
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->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:\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'&&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);
}
}
D、查找 void search()
开始
选取按名字或按学号查找
按名字择调用
Searchname()
按学号择调用
Searchnum()
结束
开始
查找符合节点
找到则输出该节点内容
找不到输出“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)
{
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 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);
}
}
展开阅读全文