数据结构通讯录管理系统课程设计报告报告.docx
《数据结构通讯录管理系统课程设计报告报告.docx》由会员分享,可在线阅读,更多相关《数据结构通讯录管理系统课程设计报告报告.docx(27页珍藏版)》请在冰点文库上搜索。
数据结构通讯录管理系统课程设计报告报告
课程设计(大作业)报告
课程名称:
数据结构
设计题目:
通讯录信息管理系统
院系:
信息技术学院
班级:
12级计算机2班
设计者:
*******
学号:
************
指导教师:
SSSSSS
设计时间:
2013.12.28—2013.12.31
昆明学院课程设计(大作业)任务书
姓名:
*******院(系):
信息技术学院
专业:
计算机科学与技术学号:
************
任务起止日期:
2013/12/28
课程设计题目:
通讯录信息管理系统
课程设计要求:
(1)通讯录的建立
(2)通讯者的插入
(3)通讯者的删除
(4)通讯者的查询
(5)通讯录表的输出
工作计划及安排:
4小时复习相关的课程设计所需的内容,提出要求、提供选题并检索资料、确定设计项目
8小时数据类型定义、确定存储结构、算法设计
10小时算法实现
4小时编写课程设计报告
指导教师签字
年月日
课程设计(大作业)成绩
学号:
************姓名:
******指导教师:
SSSSS
课程设计题目:
通讯录信息管理系统
总结:
这个课题是设计一个通讯录系统,该通讯系统能够较好的管理好我们的通讯录记录,也拥有比较完善的功能,但是该系统依旧有漏洞,此程序必须按照系统提示的操作来执行,不然的话就会使程序进入死循环,比如,如果我输入字符串的长度过长的话,程序就会终止运行了,并且还没有提示;后面的删除模块所用的方法是用空格替代,虽然可以删除,但达不到理想的效果。
在编写过程中,我逐步的了解了程序模块化设计的思想含义。
在整个程序设计的过程中语法的错误还是比较容易检查的,但是对于那些逻辑思维的问题方面的缺陷不易查出,因此常常出现系统提示没有错误但是仍然不能够正常运行的境况,尽管有很多不足之处,但我在整个系统程序设计的过程中,我可以感受到自己对C语言有了一定的掌握,对整体的把握度也提高了很多。
此外编程是一项高精度的工作,所以我们要有规范化,标准化的代码编写习惯,良好的编写习惯,不但有助于代码的纠错,也有助于不同人员之间的协作。
我们还要有模块化思维能力,模块化思维就是编程任何一个功能模块或函数的时候,要多想一些,不要局限在完成当前任务的简单思路上,想想看该模块是否可以脱离这个系统存在,是否可以通过简单的修改参数的方式在其他系统和应用环境下直接引用,这样就能极大的避免重复性的工作。
另外我们要重视程序的算法,在程序中,算法是灵魂,我们要努力学习各种先进的算法,提高自己的编程能力。
指导教师评语:
成绩:
填表时间:
指导教师签名:
课程设计(大作业)报告
一、数据结构及算法描述
1.数据类型定义
2.说明主要变量含义
3.说明数据输入的要求和格式----即输入数据的类型、值的范围及输入的形式
4.输出数据的类型、值的范围及输出的形式
5.确定存储结构
6.编写算法并实现
二、程序测试并运行通过
1.测试与分析、记录调试过程及结果
1添加通讯录记录
⑵显示通讯录记录
2按姓名方式查找
⑷按电话方式查找
⑸插入通讯录记录
⑹按姓名方式排序
⑺删除通讯录记录
⑻按记录保存文件
2.出现的问题、解决的方法、最终运行结果
三、源程序
\#include"stdio.h"
#include"stdlib.h"
#include"string.h"
#include"conio.h"
#include"stdlib.h"
#definenull0
structrecord
{
charname[20];
charphone[20];
charadress[40];
charpostcode[10];
chare_mail[30];
}student[500];
structLinkList
{
structrecordUS;
structLinkList*next;
}a;
structLinkList*head=null;
intnum=0;
FILE*fp;
intmenu_select();
intadduser();
intlist();
intsearch();
intdisplay();
intadd();
intlistbyname();
intdele();
intsave();
intexit();
voidmain()
{
system("cls");
for(;;)
{
switch(menu_select())
{
case0:
adduser();break;
case1:
list();break;
case2:
search();break;
case3:
display();break;
case4:
add();break;
case5:
listbyname();break;
case6:
dele();break;
case7:
save();break;
case8:
exit(0);
}
}
}
menu_select()
{
chars[80];
inta;
system("color2f");
printf("*_*pressanykeyentermenu!
*_*\n");
getch();
system("cls");
printf("\t********************MENU***********************\n");
printf("\t*||0.添加通讯录记录||*\n");
printf("\t*||1.显示通讯录记录||*\n");
printf("\t*||2.按姓名方式查找||*\n");
printf("\t*||3.按电话方式查找||*\n");
printf("\t*||4.插入通讯录记录||*\n");
printf("\t*||5.按姓名方式排序||*\n");
printf("\t*||6.删除通讯录记录||*\n");
printf("\t*||7.按记录保存文件||*\n");
printf("\t*||8.Quit||*\n");
printf("\t***********************************************\n");
do{
printf("\nEnteryouchoice(0~8):
");
scanf("%s",s);
a=atoi(s);
}
while(a<0||a>8);
returna;
}
adduser()
{
printf("\n\t\t****************请输入用户信息****************\n");
printf("\n\t\t输入姓名:
");
scanf("%s",&student[num].name);
printf("\n\t\t输入电话号码:
");
scanf("%s",&student[num].phone);
printf("\n\t\t输入地址:
");
scanf("%s",&student[num].adress);
printf("\n\t\t输入邮编:
");
scanf("%s",&student[num].postcode);
printf("\n\t\t输入e-mail:
");
scanf("%s",&student[num].e_mail);
num++;
printf("\n\t\t是否继续添加?
(Y/N):
");
if(getch()=='y')
adduser();
return(0);
}
list()
{
inti;
system("cls");
if(num!
=0)
{
printf("\n\t\t***************以下为通讯录所有信息************");
for(i=0;i{
printf("\n\t\t姓名:
%s",student[i].name);
printf("\n\t\t电话:
%s",student[i].phone);
printf("\n\t\t地址:
%s",student[i].adress);
printf("\n\t\t邮编:
%s",student[i].postcode);
printf("\n\t\te-mail:
%s",student[i].e_mail);
printf("\t\t");
if(i+1{
printf("\n\t\t__________________________");
system("pause");
}
}
printf("\n\t\t************************************************");
}
else
printf("\n\t\t通讯录中无任何纪录");
printf("\n\t\t按任意键返回主菜单:
");
getch();
return(0);
}
search()
{
intmark=0;
inti;
inta=0;
printf("\n\t\t*****************按姓名查找*******************");
charname[20];
printf("\n\t\t请输入姓名:
");
scanf("%s",name);
for(i=a;i{
if(strcmp(student[i].name,name)==0)
{
printf("\n\t\t*************以下是您查找的用户信息***********");
printf("\n\t\t姓名:
%s",student[i].name);
printf("\n\t\t电话:
%s",student[i].phone);
printf("\n\t\t地址:
%s",student[i].adress);
printf("\n\t\te-mail:
%s",student[i].e_mail);
printf("\n\t\t************************************************");
mark++;
if((i+1){
printf("\n\t\t是否继续查找相同名字的用户信息:
(y/n)");
if(getch()=='y')
{
a=i;
continue;
}
else
return(0);
}
else
{
printf("\n\t\t按任意键返回主菜单");
getch();
return(0);
}
}
}
if(mark!
=0)
{
printf("\n\t\t没有相同姓名的用户纪录");
printf("\n\t\t按任意键返回主菜单");
getch();
return(0);
}
else
{
printf("\n\t\t没有相同姓名的用户纪录");
printf("\n\t\t按任意键返回主菜单");
getch();
return(0);
}
}
display()
{
intmark=0;
inti;
inta=0;
printf("\n\t\t******************按电话查找******************");
charphone[10];
printf("\n\t\t请输入电话号码:
");
scanf("%s",phone);
for(i=0;i{
if(strcmp(student[i].phone,phone)==0)
{
printf("\n\t\t**************以下是您查找的用户信息**********");
printf("\n\t\t姓名:
%s",student[i].name);
printf("\n\t\t电话:
%s",student[i].phone);
printf("\n\t\t地址:
%s",student[i].adress);
printf("\n\t\te-mail:
%s",student[i].e_mail);
printf("\n\t\t************************************************");
printf("\n\t\t按任意键返回主菜单:
");
mark++;
getch();
return(0);
}
}
if(mark==0)
{
printf("\n\t\t没有改用户的信息");
printf("\n\t\t按任意键返回主菜单");
getch();
return(0);
}
return(0);
}
add()
{
inti;
if((fp=fopen("student.bin","wb"))==NULL)
{
printf("\n\t\t文件打开失败");
}
for(i=0;i{
if(fwrite(&student[i],sizeof(structrecord),1,fp)!
=1)
{
printf("\n\t\t写入文件错误!
\n");
}
printf("\n\t\t****************请输入用户信息****************\n");
printf("\n\t\t输入姓名:
");
scanf("%s",&student[num].name);
printf("\n\t\t输入电话号码:
");
scanf("%s",&student[num].phone);
printf("\n\t\t输入地址:
");
scanf("%s",&student[num].adress);
printf("\n\t\t输入邮编:
");
scanf("%s",&student[num].postcode);
printf("\n\t\t输入e-mail:
");
scanf("%s",&student[num].e_mail);
num++;
printf("\n\t\t是否继续添加?
(Y/N):
");
if(getch()=='y')
adduser();
return(0);
}
fclose(fp);
printf("\n\t\t通讯录文件已保存");
printf("\n\t\t按任意键退出程序\n\t\t");
exit(0);
return(0);
}
voiddeletebyphone()
{
inti,j;
intdeletemark=0;
charphone[20];
printf("\n\t\t请输入要删除用户电话号码:
");
scanf("%s",phone);
if(num==0)
{
printf("\n\t\t对不起,文件中无任何纪录");
printf("\n\t\t按任意键返回主菜单");
getch();
return;
}
for(i=0;i{
if(strcmp(student[i].phone,phone)==NULL)
{
printf("\n\t\t以下是您要删除的用户纪录:
");
printf("\n\t\t姓名:
%s",student[i].name);
printf("\n\t\t电话:
%s",student[i].phone);
printf("\n\t\t地址:
%s",student[i].adress);
printf("\n\t\te-mail:
%s",student[i].e_mail);
printf("\n\t\t是否删除?
(y/n)");
if(getch()=='y')
{
for(j=i;jstudent[j]=student[j+1];
num--;
deletemark++;
printf("\n\t\t删除成功");
printf("\n\t\t是否继续删除?
(y/n)");
if(getch()=='y')
deletebyphone();
return;
}
else
return;
}
continue;
}
if(deletemark==0)
{
printf("\n\t\t没有该用户的纪录");
printf("\n\t\t是否继续删除?
(y/n)");
if(getch()=='y')
deletebyphone();
return;
}
}
voiddeletebyname()
{
inta=0;
intfindmark=0;
intj;
intdeletemark=0;
inti;
charname[20];
printf("\n\t\t请输入要删除用户姓名:
");
scanf("%s",name);
for(i=a;i{
if(strcmp(student[i].name,name)==NULL)
{
printf("\n\t\t以下是您要删除的用户纪录:
");
findmark++;
printf("\n\t\t________________________________");
printf("\n\t\t姓名:
%s",student[i].name);
printf("\n\t\t电话:
%s",student[i].phone);
printf("\n\t\t地址:
%s",student[i].adress);
printf("\n\t\te-mail:
%s",student[i].e_mail);
printf("\n\t\t________________________________");
printf("\n\t\t是否删除?
(y/n)");
if(getch()=='y')
{
for(j=i;jstudent[j]=student[j+1];
num--;
deletemark++;
printf("\n\t\t删除成功");
if((i+1){
printf("\n\t\t是否继续删除相同姓名的用户信息?
(y/n)");
if(getch()=='y')
{
a=i;
continue;
}
}
printf("\n\t\t是否继续删除?
(y/n)");
if(getch()=='y')
deletebyname();
return;
}
if((i+1){
printf("\n\t\t是否继续删除相同姓名的用户信息?
(y/n)");
if(getch()=='y')
{
a=i;
continue;
}
}
}
else
continue;
}
if((deletemark==0)&&(findmark==0))
{
printf("\n\t\t没有该用户的纪录");
printf("\n\t\t是否继续删除?
(y/n)");
if(getch()=='y')
deletebyphone();
return;
return;
}
elseif(findmark!
=0)
{
printf("\n\t\t没有重名信息");
printf("\n\t\t没有该用户的纪录");
printf("\n\t\t是否继续删除?
(y/n)");
if(getch()=='y')
deletebyphone();
return;
return;
}
}
dele()
{
charchoic;
printf("\n\t\t1-按电话号码删除2-按姓名删除");
printf("\n\t\t请选择:
");
choic=getch();
switch(choic)
{
case'1':
deletebyphone();break;
case'2':
deletebyname();break;
}
return(0);
}
listbyname()
{
inti,j;
structrecordtmp;
for(i=1;i{
if(strcmp(student[i].name,student[i-1].name)<0)
{
tmp=student[i];
j=i-1;
do
{
student[j+1]=student[j];
j--;
}while((strcmp(tmp.name,student[j].name)<0&&j>=0));
student[j+1]=tmp;
}
}
printf("\n\t\t排序成功,是否显示?
(y/n)");
if(getch()=='y')
list();
return(0);
}
save()
{
intj;
FILE*fp;
fp=fopen("student.txt","w");
if(fp==NULL)
printf("can'topenthefile.");
if(num!
=0)
{
for(j=0;j{
fwrite(student,sizeof(student),1,fp);
}
}
printf("保存成功!
");
fclose(fp);
return(0);
}
四、参考文献