数据结构课程设计通讯录管理系统.docx
《数据结构课程设计通讯录管理系统.docx》由会员分享,可在线阅读,更多相关《数据结构课程设计通讯录管理系统.docx(16页珍藏版)》请在冰豆网上搜索。
数据结构课程设计通讯录管理系统
一、设计题目(问题)描述和要求
某一中学,现在需要建立学生通讯录管理系统,以管理学生信息。
要求:
(1)可以录入新的通讯信息(包括姓名,通讯地址,邮编,联系电话等)
(2)可以按照姓名进行查询相关信息
(3)可以修改相关信息
二、系统分析与概要设计
根据问题描述和要求,系统要求能够按姓名查找、增加、删除和保存各学生的信息。
确定程序应该具备如下功能:
“查询学生信息”、“增加学生信息”、“修改学生信息”“删除学生信息”、“数据存盘”基本模块。
系统可以将学生信息数据保存到磁盘文件student.txt,从而可以通过磁盘文件读出学生数据信息,为了便于统计在生成学生信息时同时生成学生编号,这样每输入一个学生信息编号顺序加1,这样也方便了管理员查询学生信息。
三、详细设计和编码
1.数据类型定义
根据系统要求,可以将姓名和邮编和联系电话通讯地址定义为字符型。
2.各模块算法描述
查询学生信息:
Que_name()输入要查询的学生姓名,比较名字与保存的信息是否相同,若相同则查找到,否则,没查找到。
增加学生信息:
Add()输入要添加的学生信息并保存。
删除学生信息:
Del()输入要删除的学生姓名,若与数据相同则删除,否则输出查找不到该信息。
修改学生信息:
Mod()输入要修改的学生姓名,输入要修改的信息,并确认。
数据存盘:
Sav()创建文件,将信息写入文件。
3.程序关键算法流程图
(1)主函数流程
(2)某操作算法流程
Student:
:
Add()
(3)Student:
:
Del()
4)Student:
:
Mod()
(5)Student:
:
Que_name()
(6)Student:
:
Sav()
(7)Student:
:
Load()
四、调试分析
(内容包括:
调试过程中遇到的问题并且是如何解决的以及对设计实现的回顾讨论和分析;算法的时空分析和改进设想;经验和体会等)
五、测试结果
六、小结
通过本次设计,加强了对于编写管理系统程序的运用,能够更好的运用循环。
对于以后的编程运用起了很大的帮助。
七、附录
(附上带详细注释的源程序)
#include
#include
#include
usingnamespacestd;
structstudent
{
charnum[20];
charname[20];
charaddress[50];
charpostcode[20];
chartelphone[20];
}student[2000];//定义学生类结构体
voidMenu();//声明菜单函数
voidInput();//声明录入函数
voidSav(int);//声明保存函数
intLoad();//声明信息导入函数
voidQue_name();//声明按姓名查找函数
voidDel();//声明删除函数
voidMod();//声明修改函数
voidScan();//声明浏览函信息数
voidAdd();//声明添加函数
voidMenu()//菜单函数
{
cout<<"\t*********欢迎来到平顶山学院学生通讯录信息管理系统!
*********"<cout<<"\t**请按要求正确录入学生的通讯录信息**"<cout<<"\t**1.录入相关学生通讯录信息**"<cout<<"\t**2.保存相关学生通讯录信息**"<cout<<"\t**3.按姓名查找相关学生通讯录信息**"<cout<<"\t**4.修改相关学生通讯录信息**"<cout<<"\t**5.删除相关学生通讯录信息**"<cout<<"\t**6.添加相关学生通讯录信息**"<cout<<"\t**7.退出该学生通讯录信息系统**"<cout<<"\t*****************欢迎欢迎您的光临**************************"<}
voidmain()//主函数的实现
{
intn;
loop:
Menu();//调用菜单函数
cout<<"请输入您所要进行的操作过程的序号(1-7):
";
cin>>n;
system("cls");
switch(n)
{
case1:
cout<<"请输入相关学生通讯信息:
"<case2:
cout<<"请保存相关学生通讯信息:
"<case3:
cout<<"按姓名查找相关学生通讯信息:
"<case4:
cout<<"修改相关学生通讯信息:
"<case5:
cout<<"删除相关学生通讯信息:
"<case6:
cout<<"添加相关学生通讯信息:
"<default:
break;
}
cout<<"\t\t\t*********欢迎您的使用!
**********"<}
voidInput()//学生通讯信息录入函数
{
inti,m;
cout<<"请输入您所要输入的学生通讯信息的个数(1-2000):
";
cin>>m;
for(i=0;i{
cout<<"请输入学生的学号:
"<cin>>student[i].num;
cout<<"请输入通讯录中学生的姓名:
"<cin>>student[i].name;
cout<<"请输入通讯录中学生的电话号码:
"<cin>>student[i].telphone;
cout<<"请输入通讯录学生的地址(格式如***省**市**县**乡):
"<cin>>student[i].address;
cout<<"请输入通讯录中学生的邮编:
"<cin>>student[i].postcode;
cout<<"该学生的通讯信息已经输入完毕,请继续输入下一个学生通讯信息!
"<}
}
voidSav(intm)//如何写入信息?
保存通讯录文件函数
{
inti;
FILE*fp;
if((fp=fopen("E:
\\student.dat","wb"))==NULL)//创建文件并判断是否能打开
{
cout<<"该文件打开失败。
"<exit(0);
}
for(i=0;iif(fwrite(&student[i],sizeof(structstudent),1,fp)!
=1)//申请空间,写入学生信息,为何有个1?
?
?
{
cout<<"信息写入失败!
"<fclose(fp);
}
}
voidQue_name()//按姓名查找函数
{
charname1[10];
inti,m;
m=Load();
cout<<"请输入您要查询学生通讯信息的名字"<cin>>name1;
for(i=0;iif(strcmp(name1,student[i].name)==0)
{
cout<<"查找到该学生的通讯信息如下:
"<Scan();
break;
}
else
{
cout<<"抱歉,查无此人!
"<return;
}
}
voidScan()
{
inti,m;
m=Load();//不明白这个,把函数赋给m吗?
cout<<"输出学生通讯信息如下:
"<for(i=0;icout<<"学号:
"<"
<"<<<""<<"通讯地址:
"<"
<}
intLoad()//导入函数
{
FILE*fp;
inti=0;
if((fp=fopen("E:
\\student.dat","rb"))==NULL)
{
cout<<"文件打开失败!
"<exit(0);
}
else
{
do
{
fread(&student[i],sizeof(structstudent),1,fp);
i++;
}
while(feof(fp)==0);
}
return(i);
fclose(fp);
}
voidDel()//删除函数
{
intm;
inti,j,n,t,f;
charname1[10];
m=Load();
cout<<"查看学生的通讯信息如下:
"<Scan();//调用浏览函数
cout<<"请输入您想删除的通讯信息的名字:
"<cin>>name1;
for(f=1,i=0;f&&i{
if(strcmp(student[i].name,name1)==0)
{
cout<<"查找到该学生的通讯信息如下:
"<Scan();
cout<<"如果要删除该生信息,请按1,否则按0"<cin>>n;
if(n==1)//如果删除,则其他的信息都向前移一行
{
for(j=i;j{
student[j]=student[j+1];
}
f=0;
}
}
}
if(!
f)m=m-1;//?
?
?
elsecout<<"抱歉!
未找到该生信息。
"<cout<<"输出其他学生通讯信息如下:
"<Scan();//调用浏览函数
Sav(m);//调用保存函数
cout<<"如果您想继续删除通讯信息,请按1,否则按0。
"<cin>>t;
switch(t)
{
case1:
Del();break;
case0:
break;
default:
break;
};
}
voidMod()//修改函数
{
charnum[20],tel[20],post[20];
charname[20];
charaddress[50];
intb,c,i,n,t,f;
intm=Load();//导入文件内的信息
cout<<"该学生先前的通讯信息为:
"<Scan();//调用浏览函数
cout<<"请输入您想要修改通讯信息的名字:
"<cin>>name;
for(f=1,i=0;f&&i{
if(strcmp(student[i].name,name)==0)
{
cout<<"查找到该学生的通讯信息如下:
"<Scan();
cout<<"确实要修改该生通讯信息请按1,否则按0"<cin>>n;
if(n==1)
{
cout<<"请输入您要修改的项目(1-学号2-姓名3-联系电话4-通讯地址5-邮编):
"<cin>>c;
if(c>6||c<1)
cout<<"抱歉,您的输入有误,请从新输入。
"<}
f=0;
}
}
if(f==1)cout<<"抱歉,未找到此人!
"<do
{
switch(c)//因为当找到第i个学生时,for语句后i自加了1,所以下面的应该把改后的信息赋值给第i-1个人
{
case1:
cout<<"将该生的学号改为:
";
cin>>num;
strcpy(student[i].num,num);
break;
case2:
cout<<"将该生的姓名改为:
";
cin>>name;
strcpy(student[i].name,name);
break;
case3:
cout<<"将该生的联系电话改为:
";
cin>>tel;
strcpy(student[i].telphone,tel);
break;
case4:
cout<<"将该生的通讯地址改为:
";
cin>>address;
strcpy(student[i].address,address);
break;
case5:
cout<<"将该生的邮编改为:
";
cin>>post;
strcpy(student[i].postcode,post);
break;
}
cout<cout<<"确认您所修改的信息请按1,从新修改请按0:
"<cin>>b;
}while(b==0);
Sav(m);
cout<<"修改后所有信息如下;"<Scan();
cout<<"如果您想继续修改请按1,否则按0:
"<cin>>t;
switch(t)
{
case1:
Mod();break;
case0:
break;
default:
break;
}
}
voidAdd()//添加函数
{
intn=Load();
inti,m;
cout<<"请输入您要添加的学生通讯信息的个数:
"<cin>>m;
for(i=n;i{
cout<<"请输入该生的学号:
";
cin>>student[i].num;
cout<cout<<"请输入该生的姓名:
";
cin>>student[i].name;
cout<cout<<"请输入该生的联系电话:
";
cin>>student[i].telphone;
cout<cout<<"请输入该生的通讯地址:
";
cin>>student[i].address;
cout<<"请输入该生的邮编:
";
cin>>student[i].postcode;
cout<system("cls");
cout<<"该生的通讯信息添加完毕,请输入您要添加的下一位学生的通讯信息!
"<}
Sav(m+n);
cout<<"学生通讯信息添加完毕,查看信息如下:
"<Scan();
}