面向对象程序课程设计通讯录管理系统.docx
《面向对象程序课程设计通讯录管理系统.docx》由会员分享,可在线阅读,更多相关《面向对象程序课程设计通讯录管理系统.docx(23页珍藏版)》请在冰豆网上搜索。
面向对象程序课程设计通讯录管理系统
1程序的目的和需求分析
1.1设计项目名称:
学生通讯录管理系统
1.2课程设计目的:
通过设计一个《学生通讯录管理系统》,进一步熟悉C++中类的概念、基本知识和技能,类的封装、继承的实现方式。
掌握面向对象程序设计的基本思路和方法,并利用所学的基本知识和技能解决简单的面向对象的程序设计问题。
了解系统开发的需求分析、类层次设计、模块分解、编码测试、模块组装与整体调试的全过程,加深对C++的理解与VisualC++环境的使用:
逐步熟悉程序设计的方法,并养成良好的编程习惯。
1.3任务与需求分析
本课题主要任务是编译学生通讯录管理系统,可以录入、显示、查找、插入、排序、删除和保存学生通讯信息。
(1)录入通讯信息——建立一个函数,可以添加学生通讯信息,添加完后返回主菜单;
(2)显示通讯信息——建立一个函数,可以显示全部学生的通讯信息,实现后可返回主菜单。
(3)查找通讯信息--建立二个函数,可以分别通过学号、姓名查询通讯信息,查询完后返回主菜单。
(4)插入通讯信息——建立一个函数,保留原通讯信息,添加新通讯信息,插入后可返回主菜单。
(5)排序通讯信息——建立一个函数,按姓名进行排序,排序后可返回主菜单。
(6)删除通讯信息——建立二个函数,可以通过学生姓名、学号删除学生通讯信息,实现后返回主菜单。
(7)退出通讯系统。
2程序的主要功能
2.1输入功能:
添加一个学生的基本通讯信息,包括姓名、电话号码、地址、邮编和e-mail。
2.2显示功能:
显示所有学生的信息包括姓名、电话号码、地址、邮编和e-mail。
2.3查找功能:
根据你键入的学生姓名或电话号码,显示其详细信息。
2.4排序功能:
能够对所有学生的信息按姓名进行排序。
2.5删除功能:
能够对一个学生的通讯信息进行删除,按姓名或电话号码进行删除。
2.6保存功能:
对输入的所有信息进行保存。
2.7退出系统
3程序运行平台
vC++6.0具体操作如下:
新建文件,编写代码,把程序分成若干模块。
分别编写各模块,编写好后编译,纠错,改正错误后,连接,然后运行程序。
4总体设计
主函数
保存信息
删除信息
插入信息
查找信息
显示信息
输入信息
5设计思路
1.通讯录的主要信息包括:
姓名,电话号码,地址,邮编和e-mail.
2.用结构体数组来存储信息,用intmenu_select()函数来实现主菜单信息,用intadduser()函数来实现信息的输入,用intlist()函数来显示打印信息,用intsearch()函数来按姓名查找信息,用intdisplay()函数来按电话号码查找信息,用intadd()函数来插入信息,用intlistbyname()函数来按姓名排序,用
intdele()函数来删除信息,用intsave()函数来保存信息,用intexit()函数来退出通讯录系统.
3.把整个系统分成几个函数,对单个函数进行编程,对函数进行调用来实现整个系统任务.
6详细设计与模块分析
6.1添加模块
系统将提示用户输入新添加的学生的信息,根据提示输入学生姓名、电话号码、地址和e-mail。
输入完后,系统将提示是否继续添加,按n停止按y继续。
6.2显示模块
显示模块将输出所有学生的通讯信息。
按系统的提示按相应按键,系统将调用已录入的学生通讯信息,并全部输出。
6.3查找模块
首先由用户输入要查找的学生的姓名或电话号码,然后系统用查找函数查找,然后系统就调用输出函数,输出所查找的学生资料。
具体流程图如下:
6.4删除模块
首先由用户输入要删除的单个学生姓名或学号或电话,然后调用删除函数,删除该名学生的资料。
具体流程图如下:
7程序代码
#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;
printf("*_*pressanykeyentermenu!
*_*\n");
getch();
system("cls");
printf("\t\t********************MENU*********************\n\n");
printf("\t\t0.输入记录\n");
printf("\t\t1.显示记录\n");
printf("\t\t2.按姓名查找\n");
printf("\t\t3.按电话号码查找\n");
printf("\t\t4.插入记录\n");
printf("\t\t5.按姓名排序\n");
printf("\t\t6.删除记录\n");
printf("\t\t7.记录保存文件\n");
printf("\t\t8.Quit\n");
printf("\t\t***********************************************\n");
do{
printf("\nEnteryouchoice(0~11):
");
scanf("%s",s);
a=atoi(s);
}
while(a<0||a>11);
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'top