C综合实验报告原创.docx
《C综合实验报告原创.docx》由会员分享,可在线阅读,更多相关《C综合实验报告原创.docx(19页珍藏版)》请在冰豆网上搜索。
C综合实验报告原创
C语言综合实验
——通讯录管理系统
姓名:
学号:
班级:
日期:
一.方案
1.设计目的
设计“通讯录管理系统”使其具有数据的创建、修改、删除、显示和查找等功能。
(1)通讯录内容:
姓名、电话号码、E-mail和地址。
(2)可对记录中的姓名和电话号码进行修改。
(3)可增加或删除记录。
(4)可显示所有保存的记录。
(5)可按类别进行查询。
2.设计思路
根据要求,通讯录数据以文本文件存放在文件中,故需要提供文件的输入、输出等操作;还需要保存记录以进行修改,删除,查找等操作;另外还应提供键盘式选择菜单实现功能选择,其中应用到函数、数组、指针、结构、文件等内容。
二.模块说明
1主函数main
主函数使用户进入通讯录管理系统主界面,用户可以选择并进入相应的选项功能。
使用printf函数和switchcase结构来编写主函数。
2creat函数
用来建立新的电话号码簿,用户可以向系统输入数据。
3menu函数
Menu函数用于查询信息,分为按类查询和按姓名查询,分别由show函数和name函数实现。
4delete函数
用来删除不需要的数据,可以用单链表来实现。
5input函数
用于输入一个人的信息,即添加通讯录内容。
6alter函数
用于更改通讯录信息,编辑内容。
7save函数
保存已输入的数据。
三.源程序
#include
#include
#include
#include
#definemaxlen15
structfriends_list
{
intnum;
charname[15];
chartelephone[15];
charemial[15];
charaddress[15];
charchoice;
}friends_list[maxlen];
typedefstructlnode
{
intnum;
charname[15];
chartelephone[15];
charemial[15];
charaddress[15];
charchoice;
structlnode*next;
}listnode,*linklist;
linklisthead=NULL,r=NULL;
listnode*s,*p0,*p1,*p2,*p3,*p4,*p5,*p6,*p7,*p8,*p9;
inti;
charname1[15],ch;
chartelephone1[15];
charemial1[15];
charaddress1[15];
charchoice1;
chars1[15];
FILE*fp;
voidcreat()
{
intj;
longk;
fp=fopen("数据文件.txt","rt");
if(fp!
=NULL)
{
for(i=0;i<=maxlen;i++)
{
j=fgetc(fp);
if(j==EOF)
return;
k=i;
fseek(fp,k*sizeof(structfriends_list),0);
fread(&friends_list[i],sizeof(structfriends_list),1,fp);
s=(linklist)malloc(sizeof(listnode));
s->num=friends_list[i].num;
strcpy(s->name,friends_list[i].name);
strcpy(s->telephone,friends_list[i].telephone);
strcpy(s->emial,friends_list[i].emial);
strcpy(s->address,friends_list[i].address);
s->choice=friends_list[i].choice;
if(head==NULL)
{
head=s;r=head;head->next=NULL;}
else
{
r->next=s;
r=s;r->next=NULL;
}
}fclose(fp);}
else
{
fp=fopen("数据文件.txt","w");
i=1;
}
}
voidname()
{
intmark=0;
inti;
inta=0;
printf("\n\t\t*****************按姓名查找*******************");
charname[15];
printf("\n\t\t请输入姓名:
");
scanf("%s",name);
for(i=0;i<15;i++)
{
if(strcmp(friends_list[i].name,name)==0)
{
printf("\n\t\t*************查找人信息***********");
cout<cout<name<cout<telephone<cout<emial<cout<address<printf("\n\t\t************************************************");
mark++;
}
}
}
voidShow1()
{
p1=head;
while(p1!
=NULL)
{
if(p1->choice=='1')
{
cout<cout<name<cout<telephone<cout<address<p1=p1->next;continue;}
}
voidShow2()
{
p1=head;
while(p1!
=NULL)
{
if(p1->choice=='2')
{
cout<cout<name<cout<telephone<cout<address<p1=p1->next;continue;}
}
voidShow3()
{
p1=head;
while(p1!
=NULL)
{
if(p1->choice=='3')
{
cout<cout<name<cout<telephone<cout<address<p1=p1->next;continue;}
}
voidShow()
{
charch1;
printf("请选择类别:
\n");
cout<<"1:
家人"<<"2:
朋友"<<"3:
同事"<cin>>ch1;
switch(ch1)
{
case'1':
Show1();break;
case'2':
Show2();break;
case'3':
Show3();break;
default:
cout<<"请重新选择!
"<}
}
voidmenu()
{
charchoic;
system("cls");
printf("\n\t\t*******************菜单查询*******************");
printf("\n\t\t**********1-按类查询************");
printf("\n\t\t**********2-按姓名查询************");
printf("\n\t\t************************************************");
printf("\n\t\t请选择:
");
cin>>choic;
switch(choic)
{
case'1':
Show();break;
case'2':
name();break;
}
}
voidDelete()
{
printf("\n\n\t请输入要删除的用户姓名:
");
cin>>name1;
p4=head;
if(strcmp(p4->name,name1)==0)
{
p4=p4->next;
head=p4;
}
elseif(strcmp(p4->name,name1)!
=0)
{
while(strcmp(p4->next->name,name1)!
=0)
p4=p4->next;
p5=p4->next;
p4->next=p5->next;
free(p5);
}
}
voidInput()
{
s=(linklist)malloc(sizeof(listnode));
printf("\n\n\t请输入信息:
");
cout<<"name:
";
cin>>s->name;
cout<<"telephone:
";
cin>>s->telephone;
cout<<"emial:
";
cin>>s->emial;
cout<<"address:
";
cin>>s->address;
cout<<"choice:
";
cin>>s->choice;
if(head==NULL)printf("\n\n");
else
{
p8=head;while(p8!
=NULL&&strcmp(s->name,p8->name)!
=0&&strcmp(s->telephone,p8->telephone)!
=0)
p8=p8->next;
if(p8!
=NULL)
{printf("该用户已存在!
");
free(s);
}
}
if(head==NULL)
{
head=s;head->next=NULL;
}
else
{
r->next=s;
r=s;r->next=NULL;}
}
voidAlter()
{
printf("\n\n\t请输入姓名:
");
cin>>name1;
p3=head;
while(p3!
=NULL&&strcmp(name1,p3->name)!
=0)
p3=p3->next;
if(p3==NULL)
printf("\n\n\t该用户不存在!
");
else
{
printf("\n\n\t请输入该用户的新信息:
");
cout<<"name:
";
cin>>name1;
cout<<"telephone:
";
cin>>telephone1;
cout<<"emial:
";
cin>>emial1;
cout<<"address:
";
cin>>address1;
cout<<"choice:
";
cin>>choice1;
while(p9!
=NULL&&strcmp(name1,p9->name)!
=0&&strcmp(telephone1,p9->telephone)!
=0)
p9=p9->next;
if(p9==NULL)
{
strcpy(p3->name,name1);
strcpy(p3->telephone,telephone1);
strcpy(p3->emial,emial1);
strcpy(p3->address,address1);
p3->choice=choice1;
}
else
printf("该用户已存在!
");
}
}
voidSave()
{
intj;
fp=fopen("数据文件.txt","w");
for(p2=head,j=0;p2!
=NULL;j++,p2=p2->next)
{
strcpy(friends_list[j].name,p2->name);
strcpy(friends_list[j].telephone,p2->telephone);
strcpy(friends_list[j].emial,p2->emial);
strcpy(friends_list[j].address,p2->address);
friends_list[j].choice=p2->choice;
fwrite(&friends_list[j],sizeof(structfriends_list),1,fp);
}
}
voidmain()
{
creat();
do
{
printf("\n\n\n\n\t欢迎使用通讯录!
");
printf("\n\n\t\t请选择:
");
printf("\n\t\t1.显示通讯录");
printf("\n\t\t2.添加通讯录");
printf("\n\t\t3.编辑通讯录");
printf("\n\t\t4.删除通讯录");
printf("\n\t\t5.保存操作并退出");
printf("\n\n\n");
printf("\t请选择:
");
cin>>ch;
switch(ch)
{
case'1':
menu();
break;
case'2':
Input();
break;
case'3':
Alter();
break;
case'4':
Delete();
break;
case'5':
Save();
fclose(fp);
exit(0);
break;
default:
printf("\n\t请重新选择!
\n");
printf("\n\t**********************************");
break;
}
}
while
(1);
}
四.系统测试
1主界面
显示各个功能选项。
2显示内容
系统查询主页面。
按类查询页面。
需先存入通讯录信息才可显示查找内容,否则没有内容显示。
输入要查找人的类别,显示内容。
按姓名查找。
输入姓名,显示已存入的信息。
3添加内容
添加通讯录后保存。
保存之后便可以进行其他操作,如可查看、编辑、删除已存入的信息。
4编辑内容
若输入未存入的用户名称,则显示“该用户不存在”。
无法编辑。
已存入用户信息,则可进行编辑。
最后需保存。
编辑并保存成功后,可查看更改后的信息。
5删除内容
若输入为存入的用户名称,则无法运行,显示如上图。
已存入用户信息,可进行相应用户的删除。
6保存内容
保存后自动退出。
五.总结
1.编译运行过程中遇到的问题:
从文本中写入数据时可能指针指错位置,导致不能正常进行。
解决的办法是对指针进行必要跟踪,把该函数写入独立的cpp文件中,单个进行检查。
有时程序语言写错,运行时显示很多错误,需要逐个查看修改。
2.本程序的不足及改进方法:
本程序中包含的信息不够全面,比如年龄,性别,邮编等,都没有包含。
改进方法就是在设计程序时把这些内容都加进去。
同时,电子邮箱还可以建立链接,直接从通讯录中连接访问。
3.心得体会与收获:
通过这次系统地编写C程序,我对C语言的知识有了更深的认识,增强了程序的编写能力,巩固了课程知识。
在调试程序的过程中,也遇到不少问题,最后都能一一解决了。
从中也让我知道了要学好这门课程,要有较强的实践能力,这需要我们以后多加练习。