通讯录的制作课程设计报告Word下载.docx
《通讯录的制作课程设计报告Word下载.docx》由会员分享,可在线阅读,更多相关《通讯录的制作课程设计报告Word下载.docx(15页珍藏版)》请在冰豆网上搜索。
![通讯录的制作课程设计报告Word下载.docx](https://file1.bdocx.com/fileroot1/2022-11/20/87e70bab-c45a-48c7-b5a3-071e68ecc164/87e70bab-c45a-48c7-b5a3-071e68ecc1641.gif)
2.设计内容和要求:
2.1设计内容:
软件(每条信息至包含:
姓名(name),街道(street),城市(city),邮编(eip),国家(state))最少要执行以下操作:
(1)
输入信息——enter();
(2)
显示信息———display();
(3)
查找以姓名作为关键字———search();
(4)
删除信息———delete();
(5)存盘———save();
(6)装入———load();
2.2设计要求:
(1)符合课题要求,实现相应功能;
(2)要求界面友好美观,操作方便易行;
(3)注意程序的实用性、安全性。
通讯录管理系统功能说明图:
通讯录管理系统
3.本设计所采用的数据结构:
3.1设计结构体及基本数据类型:
●创建一个record的结构体数组,它有五个数据成员:
charname[20];
姓名
charstreet[20];
街道
charcity[20];
城市
chareip[20];
邮编
charstate[20];
国家
●包含函数:
功能如下:
voidmainmenu();
主菜单
voidsearchmenu();
查找菜单
voidenter();
新添纪录函数
voidsearch();
按姓名查询函数
voiddisplay();
显示所有
voidload();
读取文件
voidsave();
写入文件
voiddelete();
按姓名删除函数
●结构体数组:
structrecord
{
charstreet[20];
charname[20];
charcity[20];
charstate[20];
chareip[20];
}student[500];
●线性表的双向链表存储结构:
structslnode
recorddate;
structslnode*next;
structslnode*prior;
};
4.功能模块详细设计:
4.1详细设计思想:
4.11Initllist()//构造一个空的线性链表l
voidinitlist()
{
l=newslnode;
l->
next=l;
l->
prior=l;
}
4.12voidload()//从文件导入
其中用到了fopen函数,它的作用是打开一个文件。
同时用到了exit(0)来返回异常。
(fp=fopen("
student.bin"
"
rb"
)==NULL)//打开文件进行读的操作。
((fp=fopen("
student"
wb"
))==NULL)//打开文件进行读的操作。
另外用到了fseek()函数,它的作用是使文件位置指针指向文件的指定位置。
ftell()函数返回文件位置指针当前指向的位置,用相对于文件开头的偏移量的字节数表示,返回值为long。
还调用了数据块读写函数fread。
voidload()
{
if((fp=fopen("
))==NULL)//打开文件进行读的操作
{
printf("
\n\t\t***************通讯录文件不存在***************"
);
if((fp=fopen("
{
printf("
\n\t\t**********************************建立失败"
exit(0);
}
else
\n\t\t***************通讯录文件已建立***************"
\n\t\t****************************按任意键进入主菜单"
getch();
////从键盘接收一个字符
return;
//返回主函数的主菜单
exit(0);
}
。
if(ftell(fp)>
0)/*文件不为空*/
{
rewind(fp);
/*文件位置指针移动到文件开始位置*/
for(num=0;
!
feof(fp)&
&
fread(&
student[num],sizeof(structrecord),1,fp);
num++);
printf("
\n\t\t**********文件导入成功**********"
\n\t\t*******按任意键返回主菜单*******"
getch();
return;
printf("
\n\t\t*****通讯录文件中无任何纪录*****"
getch();
return;
4.13voidlistinsert()//增加一个结点
在双向链表中增加一个结点用来保存输入的学生信息,同时运用了strcpy这一函数,另外结构体数组指针变量访问结构变量的各个成员的一般形式:
结构体指针变量->
成员名,同时运用了结构体数组的方法student[i].成员名。
Voidllistinsert()
linklists,p=l;
for(inti=0;
i<
num;
i++)
{
s=newslnode;
strcpy(s->
date.name,student[i].name);
strcpy(s->
date.city,student[i].city);
date.street,student[i].street);
date.eip,student[i].eip);
date.state,student[i].state);
s->
prior=p->
prior;
next=p;
p->
prior->
next=s;
prior=s;
p=p->
next;
}
4.14voidmainmenu()//主菜单
在主菜单中首先通过printf(“”):
语句输出一个友好的通讯录主界面,在其中使用者可以清晰的看到应该进行操作所使用的按键,接着通过switch语句对使用者输入的数据进行与case中情况的比较,进而进入下一步操作。
voidmainmenu()
charchoic;
system("
cls"
\n\t\t********************主菜单********************"
\n\t\t***********1-新添纪录2-查询菜单************"
\n\t\t****************3-删除联系人*****************"
\n\t\t***********4-保存退出5-不保存退出***********"
\n\t\t************************************************"
\n\t\t请选择:
"
choic=getch();
switch(choic)
case'
1'
:
enter();
break;
2'
searchmenu();
3'
delet();
4'
save();
5'
exit(0);
default:
mainmenu();
}
4.15voidenter()//添加记录
在添加记录函数中使用者可以通过友好的环境界面依次按提示信息输入所要保存的学生信息,同时在通过scanf()语句输入一个完整的学生信息后可以选择是否继续添加。
(注意:
此处输入的一个学生信息必须连续,中间不可以存在空格。
否则将影响程序的正确性,这是由于scanf()函数的输入要求所造成的。
)
voidenter()
\n\t\t****************请输入学生信息****************\n"
\n\t\t姓名:
scanf("
%s"
&
student[num].name);
\n\t\t街道:
student[num].street);
\n\t\t城市:
student[num].city);
\n\t\t输入邮编:
scanf("
student[num].eip);
\n\t\t国家:
student[num].state);
num++;
\n\t\t是否继续添加?
(Y/N):
if(getch()=='
y'
)
enter();
4.16voidsearchmenu()//查询菜单
在查询菜单中使用者可以通过友好的界面选择所要查询的方式,同样在使用searchmenu()中编写了switch()语句对使用者的输入进行了比较操作,使程序可以按使用者的要求向不同的方向运行。
voidsearchmenu()
charchoic;
\n\t\t*******************查询菜单**