设计实现简单的通讯录C++课程设计报告书

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

《计算机科学与应用系程序类课程设计》
设计报告书
题目:设计并实现简单的通讯录
指导教师:
姓名:
学号:
日期: 2013/5/16 计算机科学与应用系 2012-2013学年第二学期
一、需求分析
●功能需求分析:
通讯录主要有一下模块:录入纪录、查询纪录、修改纪录、显示纪录、删除纪录、清空纪录、退出操作,其中可以由字符和数字混合编码,可由字符和数字组成。

○通讯录界面设计
主要功能是设计通讯录的界面,能够提示用户的实际操作等。

我采用的是按照序号来实现相应的操作的,其中:录入纪录(I/i),查询纪录(S/s),修改纪录(M/m),显示纪录(D/d),删除纪录(X/x),清空纪录(Q/q),退出操作(E/e)。

○通讯录添加联系人模块
主要功能是添加联系人模块,添加操作是根据用户的要现的。

按实际情况,将通讯录的录入选项加多,包括添加联系人的,性别,出生年月,学校,班级,,邮政编码, QQ号,家庭住址,最后输入完成后,将提示是否继续输入!
○通讯录查询联系人模块
主要功能是查询已添加的联系人。

其中包括按名字查找和按班级查找。

如果没有这条记录,将提示对不起,你要查找的数据不存在!反之,将分条显示该成员的数据。

○通讯录修改联系人模块
主要是修改联系人的信息,界面提示要输入密码(1)和学生,如果不正确,显示要修改的学生不存在。

如果正确,则显示出改联系人的所有信息,并提示根据下面提示修改信息,,性别,出生年月,学校,班级,,邮政编码, QQ号,家庭住址。

○通讯录删除联系人模块
主要功能是删除不再需要的联系人。

其中包括输入你要删除输入或如果没有的话,将提示:要删除的学生不存在!如果找到,则提示删除联系人的所有信息和这个人的信息已经从你的通讯录中删除的信息!
○通讯录显示所有联系人模块
显示所有的联系人的信息,包括、、QQ、邮编、地址并提示所有联系人已经全部显示出来!!
○通讯录关闭通讯录模块
提示您的使用!
●环境需求分析:
操作系统: Windows 7
开发软件: 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";
char pName[20];
cin>>pName;
for(i=0;i<num;i++)
分别对、地址、邮编、等进行储存
在子函数中运用了结构体数组
还运用了头文件:student.h
其中还使用大量的子函数,例如:
void input(); //增加一条通讯录信息
void search(); //查询指定同学的信息
void modify(); //修改某一个同学的信息
void display(); //输出全部信息
void deletes(); //删除指定记录
void qingkong(); //清空所有记录
void menu(); //菜单选择
void biaotou(); //表头
五、类设计
本程序有八个公有成员函数,九个私有成员。

公有:void input();用于增加通讯录的成员。

void search();用于查询通讯录中已经存入的成员。

void modify();用于对已存入通讯录的成员进行修改。

void display();用于将保存的通讯录进行输出。

void deletes();用于删除通讯录中已有的成员。

void qingkong();用于将通讯录中的所有成员清空。

void menu();主菜单,用于用户对功能的选择。

void biaotou();链表的标头。

私有:char name[20]; 存放。

char sex[4];存放性别
char birth[10];存放生日
char school[20];存放学校
int Class;存放班级
char tel[15];存放
char box[10];存放邮政编码
char qq[15];存放QQ号
char address[20];存放家庭地址
下面贴上类的代码:
class student
{
public:
void input(); //增加
void search(); //查询
void modify(); //修改
void display(); //输出
void deletes(); //删除
void qingkong(); //清空
void menu(); //菜单选择
void biaotou(); //表头
private:
char name[20]; //
char sex[4]; //性别
char birth[10]; //出生年月
char school[20]; //学校
int Class; //班级
char tel[15]; //
char box[10]; //邮政编码
char qq[15]; //QQ号
char address[20]; //家庭住址
};
六、主要算法设计
采用模块化设计思想,定义了一个学生类,然后分别在类中定义实现各个功能的函数。

在个人类中定义了九个私有变量,分别是,性别,出生年月,学校,班级,,邮政编码, QQ 号,家庭住址。

由主菜单选择进入通讯录,进行功能的实现。

尽量使用简单明了的文字提示,让界面更加友好。

七、主要代码
student.h
#if !defined _STUDENT_H_
#define _STUDENT_H_
#include <iostream>
#include <iomanip>
#include <fstream>
#include <string>
using namespace std;
class student
{
public:
void input(); //增加
void search(); //查询
void modify(); //修改
void display(); //输出
void deletes(); //删除
void qingkong(); //清空
void menu(); //菜单选择
void biaotou(); //表头
private:
char name[20]; //
char sex[4]; //性别
char birth[10]; //出生年月
char school[20]; //学校
int Class; //班级
char tel[15]; //
char box[10]; //邮政编码
char qq[15]; //QQ号
char address[20]; //家庭住址
};
#endif
/*******************************************************************/ student.cpp
#include"student.h"
int num=0;
int i=0;
student st[100]; //学生个数
/*****************************
* 学生通讯录信息的输入 *
*****************************/
void student::input()
{
fstream file;
char ch='y';
//以输出方式打开文件,如果已经有此名字的文件,则其原有容全部删除。

file.open("d://student.txt",ios::out);
while(ch=='y'||ch=='Y')
{
cout<<"please input student's message!"<<endl;
cout<<"\t请输入:\t";
cin>>st[i].name;
cout<<"\t请输入性别:\t";
cin>>st[i].sex;
cout<<"\t请输入出生年月(如199109):";
cin>>st[i].birth;
cout<<"\t请输入学校:\t";
cin>>st[i].school;
cout<<"\t请输入班级(数字):\t";
cin>>st[i].Class;
cout<<"\t请输入:\t";
cin>>st[i].tel;
cout<<"\t请输入邮政编码:\t";
cin>>st[i].box;
cout<<"\t请输入QQ号:\t";
cin>>st[i].qq;
cout<<"\t请输入家庭住址:\t";
cin>>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<<endl;
cout<<"\t☆继续输入?(Y/N):";
cin>>ch;
num+=1;
i++;
}
cout<<"\t您一共输入了"<<num<<"个人学生的记录。

\n";
file.close();
menu();
}
/*****************************
* 学生通讯录的修改 *
*****************************/
void student::modify()
{
fstream file;
cout<<"修改需密码,请输入(1):";
int p;
cin>>p;
if(p!=1)
{
cout<<"\t***密码错误!***"<<endl;
return;
}
else
{
cout<<"请输入要修改的学生的:\t";
char pName[20];
cin>>pName;
for(i=0;i<num;i++)
{
if(strcmp(st[i].name,pName)==0)
break;
else
{
cout<<"\t要修改的学生不存在!\n";return;
}
}
cout<<"请输入修改后的:\t";cin>>name;
cout<<"请输入修改后的性别:\t";cin>>sex;
cout<<"请输入修改后的出生年月:";cin>>birth;
cout<<"请输入修改后的学校:\t";cin>>school;
cout<<"请输入修改后的班级(数字):\t";cin>>Class;
cout<<"请输入修改后的:";cin>>tel;
cout<<"请输入修改后的邮政编码:";cin>>box;
cout<<"请输入修改后的QQ号:\t";cin>>qq;
cout<<"请输入修改后的家庭住址:";cin>>address;
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);
}
file.open("d://student.txt",ios::out);
for(i=0;i<num;i++)
{
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<<endl;
}
cout<<"\t***修改成功***\n";
menu();
file.close();
}
/*****************************
* 学生通讯录的查询 *
*****************************/
void student::search()
{
char *inputname=new char[20];
fstream file;
file.open("d:\\student.txt",ios::in|ios::out);//以读的方式打开文件 cout<<"\t1.按查询 "<<"☆2.按班级查询"<<endl;
int a;
cin>>a;
if(a==1)
{
cout<<"\t请输入您要查询的学生的:";
cin>>inputname;
int flag=0;
for(i=0;i<=num;i++)
{
if(strcmp(st[i].name,inputname)==0)
{
cout<<"\t为"<<inputname<<"的学生的信息如下:"<<endl;
biaotou();
cout<<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<<endl;
flag=1;
}
}
if(flag!=1)
cout<<"\t对不起,您要查找的数据不存在!";
return;
}
else if(a==2)
{
int flag2=0;
cout<<"\t请输入您要查询的学生的班级:";
int inputClass;
cin>>inputClass;
for(i=0;i<num;i++)
{
if(st[i].Class==inputClass)
{
cout<<"\t班级为"<<inputClass<<"的学生的信息如下:"<<endl;
biaotou();
cout<<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<<endl;
flag2=1;
}
}
if(flag2!=1)
cout<<"\t对不起,您要查找的数据不存在!"<<endl;
}
file.close();
menu();
}
/*****************************
* 学生通讯录的输出 *
*****************************/
void student::display()
{
fstream file;
cout<<"\t学生通讯录信息统计如下:"<<endl;
biaotou();
//以输入输出方式打开文件,文件可读可写
file.open("d:\\student.txt",ios::in|ios::out);
for(i=0;i<num;i++)
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;
file.close();
for(i=0;i<num;i++)
{
cout<<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<<endl;
}
menu();
}
/*****************************
* 学生通讯录的删除 *
*****************************/
void student::deletes()
{
fstream file;
cout<<"\t需删除的学生的是:";
char pName[20];
cin>>pName;
for(int i=0;i<num;i++)
{
if(strcmp(st[i].name,pName)==0)
break;
}
for(int j=i;j<num;j++)//将要删除的学生调至数组最后一位
{
student temp =st[j];
if(j<num-1)
{
st[j]=st[j+1];
st[j+1]=temp;
}
}
file.open("d:\\student.txt",ios::out);
if(i<num)
{
num-=1;
cout<<"\t\t为"<<pName<<"的学生已删除!\n";
}
else
{
cout<<"\t要删除的学生不存在!\n";
}
for(i=0;i<num;i++)
{
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<<endl;
}
}
void student::qingkong()
{
fstream file;
file.open("d://student.txt",ios::out);
num=0;
cout<<"\t**通讯录已清空!**\n";
}
//********表头**********
void student::biaotou()
{
cout<<" "<<"性别 "<<"出生年月 " <<"学校 "<<"班级 "
<<" "<<"邮政编码 "<<"QQ号 "<<"家庭住址"<<endl;
}
/*****************************
* 菜单选择函数 *
*****************************/
void student::menu()
{
while(1)
{
cout<<endl;
cout<<"\t=zzia=zzia=zzia=zzia=zzia=zzia=\n";
cout<<"\t|| 制作者:黄逸雪 ||\n";
cout<<"\t|| ◇录入纪录(I/i) ||\n";
cout<<"\t|| ◇查询纪录(S/s) ||\n";
cout<<"\t|| ◇修改纪录(M/m) ||\n";
cout<<"\t|| ◇显示纪录(D/d) ||\n";
cout<<"\t|| ◇删除纪录(X/x) ||\n";
cout<<"\t|| ◇清空纪录(Q/q) ||\n";
cout<<"\t|| ◇退出操作(E/e) ||\n";
cout<<"\t|| 制作者:瑞晗 ||\n";
cout<<"\t|| 欢迎您的使用 ||\n";
cout<<"\t=zzia=zzia=zzia=zzia=zzia=zzia=\n";
cout<<"☆请输入您的选择(I/i,S/s,M/m,D/d,X/x,Q/q,E/e,不区分大小写):";
char ch;
cin>>ch;
switch(ch)
{
case'i':
case'I':
input();break;
case's':
case'S':
search();break;
case'm':
case'M':
modify();break;
case'd':
case'D':
display();break;
case'x':
case'X':
deletes();break;
case'q':
case'Q':
qingkong();break;
case'e':
case'E':
cout<<"\t您的使用!"<<endl;
exit(0);break;
default:
cout<<"\t您的选择有误!\n";break; }
}
}
/***********************************************************************/ main.cpp
#include”student.h”
main()
{
student a;
cout<<"********欢迎使用学生通讯录管理系统********"<<endl;
a.menu();
return 0;
八、系统运行结果样例
系统主界面:
选择录入(I):
输入Y,继续录入:
查询(S):
修改,输入没有保存的名字:
修改,输入正确的名字:
显示(D):
删除(X):
删除没有录入的学生:
清空(Q):
退出(E):
九、结束语
1.体会
10周的时间,学完了C++程序设计,接下来就是要学以致用,做课程设计。

在进行课程设计之前几天,不知从何入手,一脸茫然。

因为觉得自己学会的知识很少而且不会运用,只根据题目来编程序对我来说有点难,这样的迷茫了三四天只想出了一丁点大至结构。

最后决定上网找资料,不查不知道,一查大吃一惊,有好多想法很清晰很明了,觉得豁然开朗了,于是也有了动力继续写。

完成设计后,我觉得收获不少,也很开心,觉得自己终于做出点什么来了。

自己首次应用所学知识做出了这个通讯录系统,以前从未做过这样大(这是对我而言,在专业人仕看来是小菜一碟)的程序,多少心里有点甜美的感觉,虽然它还不是很完美有一点小问题。

设计是在一定时间完成的,在完成这个设计时,我做得显然有一些紧迫,我想是没合理安排好时间和开始态度不正确所致,做完后我觉得合理安排时间是非常重要的,否则可能时间已到而还无法完成或完成得仓促,应合理安排时间给各个环节。

后来我们在程序原来的基础上又增加了一些容,经过反复的运行修改,查询资料,网络求助,使得这个通讯录充实了一些,有了性别,地址,邮编,qq号,班级,学校等新的信息。

虽然还不够全面,但是我们已经尽我们所能写这个程序
2.遇到的问题与解决方法
在本次课程设计中,遇到的最大问题就是文件操作,不会将文件在关闭后再打开的时候可以查询数据不知道如何将界面操作与文件结合起来。

每次在界面上操作成功,但是在文件中并没有发生变化,做了很久都没实现文件与操作的结合。

后来经过老师和同学的指点,发现其实很简单,只是自己把它想得太复杂了。

还有一些比较细微的问题,大部分是由于粗心所致,粗心的毛病还是很难改变,这是程序设计的大忌。

此外,本程序有一个缺点,有很多重复的代码,但是不知道怎样解决。

这只是我们在大一的时候做出来的程序还有很多不足,敬请指正,悉心受教。

指导教师评语:
成绩:签名:。

相关文档
最新文档