通讯录的制作课程设计报告.docx
- 文档编号:3245951
- 上传时间:2022-11-21
- 格式:DOCX
- 页数:15
- 大小:94.31KB
通讯录的制作课程设计报告.docx
《通讯录的制作课程设计报告.docx》由会员分享,可在线阅读,更多相关《通讯录的制作课程设计报告.docx(15页珍藏版)》请在冰豆网上搜索。
通讯录的制作课程设计报告
中北大学
数据结构
课程设计说明书
学生姓名:
王清雷
学号:
0921010418
学院:
软件学院
专业:
软件工程
题目:
通讯录的制作
成绩
指导教师
尹四清、薛海丽
2010年1月6日
1设计目的:
通讯录的制作
《数据结构》课程主要介绍最常用的数据结构,阐明各种数据结构内在的逻辑关系,讨论其在计算机中的存储表示,以及在其上进行各种运算时的实现算法,并对算法的效率进行简单的分析和讨论。
进行数据结构课程设计要达到以下目的:
⏹了解并掌握数据结构与算法的设计方法,具备初步的独立分析和设计能力;
⏹初步掌握软件开发过程的问题分析、系统设计、程序编码、测试等基本方法和技能;
⏹提高综合运用所学的理论知识和方法独立分析和解决问题的能力;
训练用系统的观点和软件开发一般规范进行软件开发,培养软件工作者所应具备的科学的工作方法和作风。
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("student.bin","rb"))==NULL)//打开文件进行读的操作
{
printf("\n\t\t***************通讯录文件不存在***************");
if((fp=fopen("student","wb"))==NULL)//打开文件进行读的操作
{
printf("\n\t\t**********************************建立失败");
exit(0);
}
else
{
printf("\n\t\t***************通讯录文件已建立***************");
printf("\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**********文件导入成功**********");
printf("\n\t\t*******按任意键返回主菜单*******");
getch();
return;
}
printf("\n\t\t**********文件导入成功**********");
printf("\n\t\t*****通讯录文件中无任何纪录*****");
printf("\n\t\t*******按任意键返回主菜单*******");
getch();
return;
}
4.13voidlistinsert()//增加一个结点
在双向链表中增加一个结点用来保存输入的学生信息,同时运用了strcpy这一函数,另外结构体数组指针变量访问结构变量的各个成员的一般形式:
结构体指针变量->成员名,同时运用了结构体数组的方法student[i].成员名。
Voidllistinsert()
{
linklists,p=l;
for(inti=0;i { s=newslnode; strcpy(s->date.name,student[i].name); strcpy(s->date.city,student[i].city); strcpy(s->date.street,student[i].street); strcpy(s->date.eip,student[i].eip); strcpy(s->date.state,student[i].state); s->prior=p->prior; s->next=p; p->prior->next=s; p->prior=s; p=p->next; } } 4.14voidmainmenu()//主菜单 在主菜单中首先通过printf(“”): 语句输出一个友好的通讯录主界面,在其中使用者可以清晰的看到应该进行操作所使用的按键,接着通过switch语句对使用者输入的数据进行与case中情况的比较,进而进入下一步操作。 voidmainmenu() { charchoic; system("cls"); printf("\n\t\t********************主菜单********************"); printf("\n\t\t***********1-新添纪录2-查询菜单************"); printf("\n\t\t****************3-删除联系人*****************"); printf("\n\t\t***********4-保存退出5-不保存退出***********"); printf("\n\t\t************************************************"); printf("\n\t\t请选择: "); choic=getch(); switch(choic) { case'1': enter();break; case'2': searchmenu();break; case'3': delet();break; case'4': save();break; case'5': exit(0); default: mainmenu(); } } 4.15voidenter()//添加记录 在添加记录函数中使用者可以通过友好的环境界面依次按提示信息输入所要保存的学生信息,同时在通过scanf()语句输入一个完整的学生信息后可以选择是否继续添加。 (注意: 此处输入的一个学生信息必须连续,中间不可以存在空格。 否则将影响程序的正确性,这是由于scanf()函数的输入要求所造成的。 ) voidenter() { printf("\n\t\t****************请输入学生信息****************\n"); printf("\n\t\t姓名: "); scanf("%s",&student[num].name); printf("\n\t\t街道: "); scanf("%s",&student[num].street); printf("\n\t\t城市: "); scanf("%s",&student[num].city); printf("\n\t\t输入邮编: "); scanf("%s",&student[num].eip); printf("\n\t\t国家: "); scanf("%s",&student[num].state); num++; printf("\n\t\t是否继续添加? (Y/N): "); if(getch()=='y') enter(); return; } 4.16voidsearchmenu()//查询菜单 在查询菜单中使用者可以通过友好的界面选择所要查询的方式,同样在使用searchmenu()中编写了switch()语句对使用者的输入进行了比较操作,使程序可以按使用者的要求向不同的方向运行。 voidsearchmenu() { charchoic; system("cls"); printf("\n\t\t*******************查询菜单**
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 通讯录 制作 课程设计 报告