c集中上机报告学生通信录.docx
《c集中上机报告学生通信录.docx》由会员分享,可在线阅读,更多相关《c集中上机报告学生通信录.docx(38页珍藏版)》请在冰豆网上搜索。
c集中上机报告学生通信录
c集中上机报告学生通信录
指导教师:
甘玲
姓名:
何波
学号:
2018211995
班级:
0421002
时间:
2018-11-18
第1章需求分析3
1.1咨询题描述3
1.2功能要求3
1.3咨询题的解决方案3
第2章系统设计4
2.1数据设计4
2.1.1类设计4
2.1.2类之间的关系5
2.1.3函数设计5
2.2结构设计6
2.2.1模块设计6
2.2.2模块功能星系描述6
2.2.3系统流程图8
第3章系统实现9
3.1类实现9
3.2函数实现11
3.3主函数实现27
第4章系统测试28
4.1模块测试28
4.2课程设计过程中遇到的咨询题33
总结34
第1章需求分析
1.1咨询题描述
用C++开发一个学生通信录系统。
要求:
分析学生通信录的类及层次图;
实现简单的通信录治理,能够输入通信录卡片(实现增、删、改等功能),能够分组,并能够实现按名字(或其他方式)查询功能;
实现界面:
能够是DOS界面,功能按提示方式输入实现;能够是Windows界面,功能用菜单形式,输入界面用对话框形式。
1.2功能要求
本程序的功能是为用户提供简单的通讯录进行治理,通过该程序储备联系人信息,提供按类不查找功能,能够对数据进行修改、删除、添加等操作。
综合考虑,作为一个学生通讯录系统,系统应该具备以下功能:
1.新增联系人信息;
2.修改联系人信息;
3.删除联系人信息;
4.按不同的项进行查找某个联系人的信息;
5.从文件读入通讯录。
6.将通讯录写入文件;
7.清除文件中的所有信息。
1.3咨询题的解决方案
依照系统功能要求,能够将咨询题解决分为以下步骤:
(1)应用系统分析,建立该系统的功能模块框图以及界面的组织和设计;
(2)依照咨询题描述,设计系统的类层次;
(3)完成类层次中各个类的描述;
(4)完成类中各个成员函数的定义;
(5)完成系统的应用模块;
(6)功能调试;
(7)完成系统总结报告。
第2章系统设计
2.1数据设计
2.1.1类设计
一共设计了2个类,分不是差不多信息类basiciInfo,学生类Student。
basiciInfo
#Name:
char
#No:
string
#classNum:
string
#Age:
string
#Sex:
char
#Tel:
string;
#address:
char
#next:
basiciInfo*
+basiciInfo(char*,string,string,string,char*,string,char*)
+friendclassStudent
Student
-ptb:
basiciInfo*
+Student()
+~Student()
+Search(char):
void
+Search(string):
void
+Insert():
void
+Delete():
void
+Modify():
void
+Query():
void
+Count():
void
+Save():
void
+ReadFile():
void
+ShowAll():
void
+DesTory():
void
+Output(basiciInfo*):
void
2.1.2类之间的关系
本程序中定义了差不多信息类basiciInfo,包含了表示学生差不多信息的数据成员,包括姓名、学号、班级年龄、性不、电话和地址;学生类Student中则定义了各种操作,包括添加、删除、修改联系人的信息等等。
程序中学生类Student定义为差不多信息类basiciInfo的友元类,如此学生类中的各个函数便能够访咨询差不多信息类中的各个差不多信息了。
2.1.3函数设计
定义了如下函数,其功能分不如下:
voidSearch(charName[20]);//按姓名查找联系人
voidSearch(stringNo);//按学号查找联系人
voidInsert();//添加联系人信息
voidDelete();//删除联系人信息
voidModify();//修改联系人信息
voidQuery();//查询联系人信息
voidCount();//统计联系人信息
voidSave();//储存数据
voidReadFile();//读入数据
voidShowAll();//查看所有联系人信息
voidDesTory();//清除文件信息
voidOutput(basiciInfo*p);//输出某一结点的信息
2.2结构设计
2.2.1模块设计
系统功能模块图
本次程序设计要紧设计了八个模块。
分不是:
1.新增联系人模块:
用函数voidInsert()实现
2.删除联系人模块:
用函数voidDelete()实现
3.修改联系人模块:
用函数voidModify()实现
4.查询模块:
用函数voidQuery()实现
5.储存数据模块:
用函数voidSave()实现
6.查看全部信息模块:
用函数voidShowAll()实现
7.清除通讯录模块:
用函数voidDesTory()实现
8.统计模块:
用函数voidCount()实现
2.2.2各模块功能详细描述
1.进入主函数
进入主函数的主菜单,这是一个无限循环的菜单。
当进入主菜单后,用户能够选择以下选项:
1.新增联系人2.删除联系人3.修改联系人
4.查询详细信息5.储存数据6.查看全部信息
7.清除通讯录8.统计0.退出系统
2.新增联系人
(1)按照提示依次输入学生信息:
学号,姓名,班级,年龄,性不,电话和地址。
假如输入的学号差不多存在的话就提示是否修改该学生的信息。
这是能够选择Y修改,执行“修改联系人”那个函数;或者选择N回到主菜单。
3.删除联系人
依照提示输入要删除的联系人的学号,假如找到了该学生,则询咨询是否删除,否则返回主菜单。
4.修改联系人
(1)依照提示输入要修改的联系人的学号,假如没有找到该学生,则返回主菜单;否则显示所要修改的联系人的所有信息,并提示用户选择要修改的信息,并输入新的信息,完成修改。
(2)用户完成修改后能够输入Y连续修改,也能够输入N回到主菜单。
5.查询详细信息
用户能够选择按学号、名字、电话号码查找联系人的详细信息。
用户选择按某一项功能查找后,系统提示用户输入相应的学号、名字或者电话号码,假如查找成功,则显示该联系人的详细信息,并提示用户是否连续查询;否则返回主菜单。
6.储存数据
当用户选择储存数据时,系统将会向文件写入学生通讯录信息,把链表中的结点都储存到文件中。
7.查看全部信息
从头结点开始输出链表的每一个结点的信息,并按照一定格式进行显示。
8.清除通讯录
将外部文件中的所有联系人的信息全部删除。
建立一个输出流文件用来连接储备信息的文本,将数据储备到文本。
9.统计
用户能够通过两种方式系统通讯录中联系人的数目。
一是按性不统计,而是按班级统计。
假如用户选择按性不统计,系统统计后则输出男生、女生的人数;假如用户选择按班级统计,则会提示用户输入班级号,系统统计后则输出人数。
10.退出系统
退出系统前提示用户是否储存所有操作,用户输入Y后系统储存用户的所有操作并退出,用户输入N后直截了当退出系统。
2.2.3系统流程图
第3章系统实现
3.1类实现
差不多信息类basiciInfo
classbasiciInfo//差不多信息类
{
public:
basiciInfo(char*Name,stringNo,stringclassNum,stringAge,char*Sex,stringTel,char*address);//差不多信息类的构造函数
friendclassStudent;//友元类
protected:
charName[20];//姓名
stringNo;//学号
stringclassNum;//班级
stringAge;//年龄
charSex[10];//性不
stringTel;//电话
charaddress[50];//地址
basiciInfo*next;//指向下一结点
};
学生类Student
classStudent//学生类
{
public:
Student();//学生类的构造函数
~Student();//学生类的析构函数
voidSearch(charName[20]);//按姓名查找联系人
voidSearch(stringNo);//按学号查找联系人
voidInsert();//添加联系人信息
voidDelete();//删除联系人信息
voidModify();//修改联系人信息
voidQuery();//查询联系人信息
voidCount();//统计联系人信息
voidSave();//储存数据
voidReadFile();//读入数据
voidShowAll();//查看所有联系人信息
voidDesTory();//清除文件信息
voidOutput(basiciInfo*p);//输出某一结点的信息
private:
basiciInfo*ptb;//指向差不多信息类的指针
};
3.2函数实现
以下是本程序中所有函数的实现:
basiciInfo:
:
basiciInfo(char*Name,stringNo,stringclassNum,stringAge,char*Sex,stringTel,char*address)//差不多信息类的构造函数的实现
{
strcpy(this->Name,Name);
strcpy(this->Sex,Sex);
strcpy(this->address,address);
this->No=No;
this->classNum=classNum;
this->Age=Age;
this->Tel=Tel;
}
Student:
:
Student()//学生类的构造函数的实现
{
ptb=0;
ReadFile();
}
Student:
:
~Student()//学生类的析构函数的实现
{
basiciInfo*p;
p=ptb;
while(p)
{
p=p->next;
deleteptb;
ptb=p;
}
ptb=0;
}
voidStudent:
:
Output(basiciInfo*p)//输出某一结点的信息
{
cout<<"\t姓名:
"<Name<cout<<"\t学号:
"<No<cout<<"\t班级:
"<classNum<cout<<"\t年龄:
"<Age<cout<<"\t性不:
"<Sex<cout<<"\t电话:
"<Tel<cout<<"\t地址:
"<address<}
voidStudent:
:
Insert()
{
basiciInfo*p,*p2;//新结点指针
stringNo,Age,Tel,classNum;
charName[20],Sex[10],address[50];
charc;
cout<<"\n\t===新增学生通讯录===\n";
//输入学生信息
cout<<"\t输入学号:
";
cin>>No;
{
basiciInfo*p1;
p1=ptb;
while(p1)
{
if(p1->No==No)
{
break;
}
else
{
p1=p1->next;
}
}
if(p1!
=NULL)
{
cout<<"\t该学号已存在,是否修改该学生信息(Y/N)";
cin>>c;
if(toupper(c)=='Y')
{
cout<<"\t该学生信息为:
"<Search(No);
cout<Modify();
return;
}
else
return;
}
}
cout<<"\t输入姓名:
";
cin>>Name;
cout<<"\t输入班级:
";
cin>>classNum;
cout<<"\t输入年龄:
";
cin>>Age;
cout<<"\t输入性不(f/m):
";
cin>>Sex;
cout<<"\t输入电话:
";
cin>>Tel;
cout<<"\t输入地址:
";
cin>>address;
p=newbasiciInfo(Name,No,classNum,Age,Sex,Tel,address);
p->next=0;
//学生结点加入链表,插入到尾部
if(ptb)//若差不多存在结点
{
p2=ptb;
while(p2->next)//查找尾结点
{
p2=p2->next;
}
p2->next=p;
}
else//若不存在结点,即为表空
{
ptb=p;
}
cout<<"\n\t===添加成功===\n"<cout<<"\t是否连续添加(Y/N):
";
cin>>c;
if(toupper(c)=='Y')
{
Insert();
return;
}
else
return;
}
voidStudent:
:
Delete()//删除联系人信息
{
charc;
stringNo;
cout<<"\n\t===删除信息===\n";
cout<<"\t输入要删除的学生学号:
\t";
cin>>No;
cout<basiciInfo*p1,*p2;//查找要删除的结点
p1=ptb;
while(p1)
{
if(p1->No==No)
break;
else
{
p2=p1;
p1=p1->next;
}
}
if(p1!
=NULL)//若找到结点,则删除
{
cout<<"\t所要删除的学生的信息如下:
\n"<Output(p1);
cout<<"\t确定是否删除(Y/N):
";
cin>>c;
if(toupper(c)!
='Y')
return;
{
ptb=p1->next;
deletep1;
}
else//若要删除的结点是后续结点
{
p2->next=p1->next;
deletep1;
}
cout<<"\t===删除成功===\n";
cout<<"\t是否连续删除(Y/N)"<cin>>c;
if(toupper(c)=='Y')
{
Delete();
return;
}
else
return;
}
else//未找到结点
cout<<"\t未找到该学生!
\n";
getch();
}
voidStudent:
:
Modify()//修改联系人信息
{
basiciInfo*p1;
charc;
stringn;//临时学号
p1=ptb;
cout<<"\n\t请输入要修改的学生的学号:
";
cin>>n;
while(p1)
{
if(p1->No==n)
break;
else
{
p1=p1->next;
}
}
if(p1!
=NULL)//若找到结点
{
cout<<"\n\t所要修改的学生的信息如下:
\n"<Output(p1);
do
{
cout<<"\n================修改信息=================="<cout<<"\n1.修改姓名2.修改学号3.修改班级4.修改年龄\n5.修改性不6.修改联系方式7.修改地址8.退出修改\n"<cout<<"请选择(1-8)要修改的信息:
\n";
cin>>c;
if(c!
='8')
cout<<"\t请输入新的信息:
";
switch(c)
{
case'1':
cin>>p1->Name;break;
case'2':
cin>>p1->No;break;
case'3':
cin>>p1->classNum;break;
case'4':
cin>>p1->Age;break;
case'5':
cin>>p1->Sex;break;
case'6':
cin>>p1->Tel;break;
case'7':
cin>>p1->address;break;
default:
break;
}
if(c!
='8')
{
cout<<"\n\t修改成功,是否连续修改(Y/N):
";
cin>>c;
if(toupper(c)=='Y')
{
Modify();
return;
}
else
break;
}
}while(c!
='8');
}
else
cout<<"\t未找到该学生!
\n";
system("pause");
}
voidStudent:
:
Save()//储存联系人信息,写入到文件
{
ofstreamfbasiciInfo("Person.txt",ios:
:
out);
charc;
cout<<"\n\t是否要储存数据?
[Y/N]:
";
cin>>c;
if(toupper(c)!
='Y')
return;
basiciInfo*p=ptb;
while(p)
{
fbasiciInfo<Name<<""<No<<""<classNum<<""<Age<<""<Sex<<""<Tel<<""<address<p=p->next;
}
fbasiciInfo.close();
cout<<"\n\t储存成功...\n";
system("pause");
}
voidStudent:
:
ReadFile()//将文件中的数据读入
{
ifstreamfbasiciInfo;
basiciInfo*p=ptb;
stringNo,Age,Tel,classNum;
charName[20],Sex[10],address[50];
fbasiciInfo.open("Person.txt",ios:
:
in);
fbasiciInfo>>Name>>No>>classNum>>Age>>Sex>>Tel>>address;
while(fbasiciInfo.good())
{
p=newbasiciInfo(Name,No,classNum,Age,Sex,Tel,address);
p->next=0;
if(ptb)//若差不多存在结点//插入到尾部
{
basiciInfo*p2;
p2=ptb;
while(p2->next)//查找尾结点
{
p2=p2->next;
}
p2->next=p;
}
else//若不存在结点
{
ptb=p;
}
fbasiciInfo>>Name>>No>>classNum>>Age>>Sex>>Tel>>address;
}
fbasiciInfo.close();
}
voidStudent:
:
Search(stringNo)//按string类型查找
{
basiciInfo*p1;
p1=ptb;
while(p1)
{
if(p1->No==No)
break;
else
{
p1=p1->next;
}
}
if(p1!
=NULL)
{
Output(p1);
}
else
cout<<"\t未找到该学生"<}
voidStudent:
:
Search(charName[20])//按姓名查找
{
basiciInfo*p1;
intcount=0;
p1=ptb;
while(p1)
{
if(strcmp(p1->Name,Name)==0)
{
count++;
Output(p1);
}
p1=p1->next;
}
if(count)
{
cout<<"\t查询成功!
!
!
"<cout<<"\n\t共找到"<}
else
cout<<"\n\t未找到该学生!
!
!
\n"<system("pause");
}
voidStudent:
:
Query()//查