c集中上机报告学生通信录doc.docx
- 文档编号:28332078
- 上传时间:2023-07-10
- 格式:DOCX
- 页数:38
- 大小:243.41KB
c集中上机报告学生通信录doc.docx
《c集中上机报告学生通信录doc.docx》由会员分享,可在线阅读,更多相关《c集中上机报告学生通信录doc.docx(38页珍藏版)》请在冰豆网上搜索。
c集中上机报告学生通信录doc
集中上机实习报告
指导教师:
甘玲
姓名:
何波
学号:
2010211995
班级:
0421002
时间:
2010-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回到主菜单。
(2)输入完成第一个联系人的信息后会提示是否继续添加联系人信息。
这时可以输入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姓名:
"< cout<<"\t学号: "< cout<<"\t班级: "< cout<<"\t年龄: "< cout<<"\t性别: "< cout<<"\t电话: "< cout<<"\t地址: "< } 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; if(p1==ptb)//若要删除的结点是第一个结点 { 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< 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未
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 集中 上机 报告 学生 通信 doc