设计实现简单的通讯录C++课程设计Word格式文档下载.docx
《设计实现简单的通讯录C++课程设计Word格式文档下载.docx》由会员分享,可在线阅读,更多相关《设计实现简单的通讯录C++课程设计Word格式文档下载.docx(20页珍藏版)》请在冰豆网上搜索。
Windows7
开发软件:
VC6.0
●方法需求分析
该系统由于数据可能会很大,故采用文件操作,能够打开或修改指定文件及将多个文件组成一个文件。
而联系人的信息则通过类的对象来保存,它完全使用类来实现,充分体现面向对象的程序设计特点。
二、系统主要功能
●?
建立文件?
?
○?
存储文件可以使用默认文件名或指定文件名。
可以不保存输入记录,但需要确认是否保存输入记录。
如果已经有文件,只能在其后追加?
新增的记录可以不存入原文件中,也可以用原来的文件覆盖内存的内容。
可以将指定文件的内容追加到目前内存的链表后面。
文件的存取和显示?
可以单独存取文件。
可以随时显示内存中记录的全部内容。
可以直接存取默认文件或指定文件。
删除记录?
可以按“姓名”方式删除记录并更新。
能给出被删除记录的信息。
如果已经是空表,删除时应该给出提示信息并返回主菜单。
如果没有要删除的信息,输出“没有找到”的信息。
查询记录?
可以按“姓名”或“班级“方式查询记录。
能给出查询记录的信息。
如果查询的信息不存在,输出“没有找到“的信息。
整体性能?
应可以随时检索、删除或增加新记录,也可以保存或取消新的记录。
姓名可由字符和数字混合编码。
电话号码可由字符和数字组成。
三、流程图
四、数据结构设计
软件中使用的结构体和结构体数组,如:
strcpy(st[i].name,name);
strcpy(st[i].sex,sex);
strcpy(st[i].birth,birth);
strcpy(st[i].school,school);
st[i].Class=Class;
strcpy(st[i].tel,tel);
strcpy(st[i].box,box);
strcpy(st[i].qq,qq);
strcpy(st[i].address,address);
};
对用户的信息进行保存,他们都以二进制的形式读写。
其中:
cout<
<
"
请输入要修改的学生的姓名:
\t"
;
charpName[20];
cin>
>
pName;
for(i=0;
i<
num;
i++)
分别对姓名、地址、邮编、电话号码等进行储存
在子函数中运用了结构体数组
还运用了头文件:
student.h
其中还使用大量的子函数,例如:
voidinput();
//增加一条通讯录信息
voidsearch();
//查询指定同学的信息
voidmodify();
//修改某一个同学的信息
voiddisplay();
//输出全部信息
voiddeletes();
//删除指定记录
voidqingkong();
//清空所有记录
voidmenu();
//菜单选择
voidbiaotou();
//表头
五、类设计
本程序有八个公有成员函数,九个私有成员。
公有:
voidinput();
用于增加通讯录的成员。
voidsearch();
用于查询通讯录中已经存入的成员。
用于对已存入通讯录的成员进行修改。
用于将保存的通讯录进行输出。
用于删除通讯录中已有的成员。
用于将通讯录中的所有成员清空。
主菜单,用于用户对功能的选择。
链表的标头。
私有:
charname[20];
存放姓名。
charsex[4];
存放性别
charbirth[10];
存放生日
charschool[20];
存放学校
intClass;
存放班级
chartel[15];
存放电话号码
charbox[10];
存放邮政编码
charqq[15];
存放QQ号
charaddress[20];
存放家庭地址
下面贴上类的代码:
classstudent
{
public:
//增加
//查询
//修改
//输出
//删除
//清空
private:
charname[20];
//姓名
//性别
//出生年月
//学校
//班级
//电话号码
//邮政编码
//QQ号
//家庭住址
六、主要算法设计
采用模块化设计思想,定义了一个学生类,然后分别在类中定义实现各个功能的函数。
在个人类中定义了九个私有变量,分别是姓名,性别,出生年月,学校,班级,电话号码,邮政编码,QQ号,家庭住址。
由主菜单选择进入通讯录,进行功能的实现。
尽量使用简单明了的文字提示,让界面更加友好。
七、主要代码
#if!
defined_STUDENT_H_
#define_STUDENT_H_
#include<
iostream>
iomanip>
fstream>
string>
usingnamespacestd;
#endif
/*******************************************************************/
student.cpp
#include"
student.h"
intnum=0;
inti=0;
studentst[100];
//学生个数
/*****************************
*学生通讯录信息的输入*
*****************************/
voidstudent:
:
input()
{
fstreamfile;
charch='
y'
//以输出方式打开文件,如果已经有此名字的文件,则其原有内容全部删除。
while(ch=='
||ch=='
Y'
)
{
cout<
pleaseinputstudent'
smessage!
endl;
\t请输入姓名:
cin>
st[i].name;
\t请输入性别:
st[i].sex;
\t请输入出生年月(如199109):
st[i].birth;
\t请输入学校:
st[i].school;
\t请输入班级(数字):
st[i].Class;
\t请输入电话号码:
st[i].tel;
\t请输入邮政编码:
st[i].box;
\t请输入QQ号:
st[i].qq;
\t请输入家庭住址:
st[i].address;
file<
st[i].name<
"
st[i].sex<
st[i].birth<
<
st[i].school<
st[i].Class<
st[i].tel<
st[i].box<
st[i].qq<
st[i].address<
\t☆继续输入?
(Y/N):
ch;
num+=1;
i++;
}
cout<
\t您一共输入了"
num<
个人学生的记录。
\n"
file.close();
menu();
}
*学生通讯录的修改*
modify()
修改需密码,请输入
(1):
intp;
p;
if(p!
=1)
\t***密码错误!
***"
return;
else
{
if(strcmp(st[i].name,pName)==0)
break;
else
{
cout<
\t要修改的学生不存在!
return;
}
}
请输入修改后的姓名:
cin>
name;
请输入修改后的性别:
sex;
请输入修改后的出生年月:
birth;
请输入修改后的学校:
school;
请输入修改后的班级(数字):
Class;
请输入修改后的电话号码:
tel;
请输入修改后的邮政编码:
box;
请输入修改后的QQ号:
qq;
请输入修改后的家庭住址:
address;
strcpy(st[i].name,name);
for(i=0;
file<
\t***修改成功***\n"
*学生通讯录的查询*
search()
char*inputname=newchar[20];
file.open("
d:
\\student.txt"
ios:
in|ios:
out);
//以读的方式打开文件
\t1.按姓名查询"
☆2.按班级查询"
inta;
a;
if(a==1)
\t请输入您要查询的学生的姓名:
inputname;
intflag=0;
=num;
if(strcmp(st[i].name,inputname)==0)
\t姓名为"
inputname<
的学生的信息如下:
biaotou();
<
flag=1;
if(flag!
\t对不起,您要查找的数据不存在!
return;
elseif(a==2)
{
intflag2=0;
\t请输入您要查询的学生的班级:
intinputClass;
inputClass;
if(st[i].Class==inputClass)
\t班级为"
inputClass<
flag2=1;
if(flag2!
cout<
*学生通讯录的输出*
display()
\t学生通讯录信息统计如下:
//以输入输出方式打开文件,文件可读可写
file>
st[i].name>
st[i].sex>
st[i].birth>
st[i].school>
st[i].Class>
st[i].tel>
st[i].box>
st[i].qq>
*学生通讯录的删除*
deletes()
\t需删除的学生的姓名是:
charpName[20];
for(inti=0;
if(strcmp(st[i].name,pName)==0)
break;
}
for(intj=i;
j<
j++)//将要删除的学生调至数组最后一位
{
studenttemp=st[j];
if(j<
num-1)
st[j]=st[j+1];
st[j+1]=temp;
if(i<
num)
num-=1;
\t\t姓名为"
pName<
的学生已删除!
\t要删除的学生不存在!
qingkong()
num=0;
\t**通讯录已清空!
**\n"
//********表头**********
biaotou()
姓名"
性别"
出生年月"
<
学校"
班级"
<
电话号码"
邮政编码"
QQ号"
家庭住址"
*菜单选择函数*
menu()
while
(1)
\t=zzia=zzia=zzia=zzia=zzia=zzia=\n"
\t||制作者:
黄逸雪||\n"
\t||◇录入纪录(I/i)||\n"
\t||◇查询纪录(S/s)||\n"
\t||◇修改纪录(M/m)||\n"
\t||◇显示纪录(D/d)||\n"
\t||◇删除纪录(X/x)||\n"
\t||◇清空纪录(Q/q)||\n"
\t||◇退出操作(E/e)||\n"
李瑞晗||\n"
\t||欢迎您的使用||\n"
☆请输入您的选择(I/i,S/s,M/m,D/d,X/x,Q/q,E/e,不区分大小写):
charch;
switch(ch)
case'
i'
case'
I'
input();
break;
s'
S'
search();
m'
M'
modify();
d'
D'