C++课程设计报告.docx
- 文档编号:17474721
- 上传时间:2023-07-26
- 格式:DOCX
- 页数:29
- 大小:363.16KB
C++课程设计报告.docx
《C++课程设计报告.docx》由会员分享,可在线阅读,更多相关《C++课程设计报告.docx(29页珍藏版)》请在冰点文库上搜索。
C++课程设计报告
中南大学
二○一二~二○一三学年第二学期
信息科学与工程学院
面向对象C++语言课程设计报告
课程名称:
面向对象C++语言课程设计
班级:
电气工程2012级1232班
学号:
09091232320909123214
姓名:
岳艳涛姜植元
指导教师:
杨旺
二○一三年七月
1.系统需求与功能分析---------------------------------------------------------3
2.总体结构设计
---------------------------------------------------------4-
2.系统详细设计和系统实现
----------------------------------------------------------5
3.系统的调试测试
---------------------------------------------------------9
4.测试结果
----------------------------------------------------------13
5.课程设计心得体会
-----------------------------------------------------------14
7.程序源代码与运行结果
-----------------------------------------------------------15
系统需求与功能分析
系统需求分析
(1)能完成学生信息的插入、查询、修改、删除、输出等功能;
(2)采用单链表与顺序表存储结构实现;
(3)所有数据以外部文件方式保存。
2.2系统功能分析
(1)要设计一个学生成绩管理系统,其功能包括:
1.插入函数Add():
将学生成绩信息插入到链表中;
2.查询函数Search():
分别可以按学号和按姓名进行学生成绩查询;
3.删除函数Delect():
当需要删除的学号和姓名一致时则删除对应的学生记录;
4.修改函数Alter():
修改指定的学生成绩信息;
5.输出函数Show():
输出全部学生成绩信息;
6.插入函数Insert();将学生信息通过链表插入到指定学生的后边。
7.菜单函数Menu():
为程序的菜单函数为实现各种功能提供便捷;
8.读取数据函数Preserve():
从外部文件读取学生成绩信息;
9.保存数据函数Save():
将数据保存到外部文件中。
系统详细设计和系统实现
通过对学生信息管理系统的功能分析,可以定义出系统的总体结构模块图,如图3.1所示。
图3.1学生管理系统总体结构设计
前面的分析中已经定义了系统各个模块,属于静态建模的范围。
在系统运行时刻的动态模型应该由系统的流程决定。
当用户运行该系统后可以来进行学生信息插入管理、学生信息查询管理、学生信息删除管理、学生信息修改管理及学生信息输出等操作,具体的流程如图3.2所示。
图3.2系统流程图
主模块应负责应用程序的主界面,由它调用其他模块.因此主模块应具有操作性好、界面清晰的特点,使用户能够很方便地找到所需功能。
根据功能需求的结果分析,主界面应该由学生信息插入管理,学生信息查询管理、学生信息修改管理、学生信息删除管理和学生信息输出管理组成,可以通过输入相应的数字进入相应的功能模块。
4链表学生信息管理系统详细设计和系统实现
系统总体设计完成后,就可以根据需求对各个模块来进行实现了。
在本系统中需要编码实现的主要有学生信息插入、学生信息查询、学生信息修改、学生信息删除和学生信息输出等5个模块。
(1)学生信息插入模块
添加的信息包括学号(不允许重复)、姓名(不允许重复)、分数。
流程图如下图4.1所示。
图4.1插入模块流程图
本程序采用的是尾插法,就是每次将新申请的结点插在终端结点的后面,其执行过程如图4.2所示。
图4.2尾插法建立单链表操作示意图
(2)学生信息查询模块
按姓名和学号查找学生信息的流程图分别如下图4.3所示。
图4.3按姓名查找学生信息流程图
在单链表中,即使知道被访问结点的位置i,也不能像顺序表那样直接按序号访问,而只能从头指针出发,设置一个工作指针p,顺next域逐个结点往下搜索。
当p指向某个结点时判断是否为第i个结点,若是则查找成功;否则,将工作指针p后移,即将p指向原来所指结点的后继结点。
直到p为NULL时查找失败。
单链表查找过程如图4.4所示。
图4.4单链表查找过程的示意图
按学号查询学生信息同按姓名查找学生信息,此处不再详细列出。
(3)学生信息修改模块
首先要查找与要修改数据相匹配的信息,若没有则返回失败。
否则把相应的信息输出,然后再重新输入新的数据并保存到单链表。
(4)学生信息删除模块
当选择删除功能时,首先输入要删除的同学的姓名,然后输入要删除的同学的学号,如果该同学存在并且姓名与学号匹配的上,则进行删除操作,否则返回失败。
其流程图4.5如下:
图4.5删除学生信息模块流程图
删除操作定义为将单链表的第i个结点删去。
因为在单链表中结点ai存储地址在其前驱结点ai-1的指针域,所以必须首先找到ai-1的存储地址p,然后令p的next域指向ai的后继结点,即把结点ai从链上摘下来,最后释放结点ai的存储空间,如图4.6所示。
图4.6在单链表中删除结点指针的变化情况
(5)学生信息输出模块
从单链表表头遍历整个单链表,将所有数据输出。
其部分代码如下:
voidOperate:
:
Show()
{charch;
Student*p3;
system("cls");
P3=Student_First->Next;
if(!
temp)
{cout<<"文件无数据\n\n"< cout<<"1.返回主菜单"< cin>>ch; while(ch! ='1') {cout<<"1.返回主菜单"< cin>>ch; } Menu(); } else {cout<<"姓名\t学号\t语文成绩\t数学成绩\t英语成绩\n"; while(temp! =NULL) {p3->Out(); P3=p3->Next; } } cout<<"1.返回主菜单"< cin>>ch; while(ch! ='1') {cout<<"1.返回主菜单"< cin>>ch; } Menu(); } 系统的调试测试 这是链表的主界面 首先是要验证身份进入系统 选择1学生信息录入后如图所示录入两位学生的信息 选择3修改学生信息之后 选择信息显示函数5 学生信息的到修改 选择信息删除函数后操作前 操作函数信息删除函数 查找的方法有两种1.姓名2.学号按照两种方法均可以 选择操作代码7程序结束。 课程设计心得体会 通过这次数据结构课程设计的实验,在解决问题的过程中,充分体会到了数据结构这门课程对于软件设计的重要性,也体会到了数据结构+算法=程序这句话的真正含义,一个实际问题的解决第一步就是要依赖于良好的抽象思维的,将实际问题转化为相应的数据结构,只有这一步做好了,才能采取相应的算法和优化方法解决问题和解决好问题。 次c++面向对象课程设计,我们学会了如何用C++编写一个简单的应用程序。 首先要对程序的设计要求有一个比较明确的认识,然后系统分析与系统设计,最后是代码设计与调试。 程序实现上,设计了简单的菜单界面,将各个功能集中出现在主菜单中,便于调用。 根据C++课程所学的概念、理论和方法,按照C++程序设计的基本步骤,设计出一个适当规模的程序;进一步加深对C++语言的理解和掌握。 理论联系实际,加深和巩固所学的理论知识,提高实践能力和计算机的综合运用能力。 我们编写程序的过程是辛苦与快乐的,程序的编写原则很重要,只要我们在编程,就必须不断改进,才能更好提高编程能力。 程序源代码 #include #include #include usingnamespacestd; classEnter//为了验证身份 { public: charname_1[12]; charnum_1[12]; }; classStudent { public: Student(); voidOfile(ofstream&of); voidInfile(ifstream&f); voidShow_1(); voidSet(intnum,char*name,intage,charsex,char*adress,intcomputer,intmath,intenglish); intHNum(); char*HName(); intHAge(); charHSex(); char*HAdress(); intHComputer(); intHMath(); intHEnglish(); Student*Next; protected: intNum; charName[20]; intAge; charSex; charAdress[20]; intComputer; intMath; intEnglish; }; voidStudent: : Infile(ifstream&f) {f>>Num>>Name>>Age>>Sex>>Adress>>Math>>Computer>>English;//将数据输入到文件 } voidStudent: : Ofile(ofstream&of) {of<<""< } voidStudent: : Show_1() {cout<<"学号姓名年龄性别地址计算机成绩数学成绩英语成绩\n"; cout< } classOperate//功能类 {public: Operate();//构造函数 ~Operate();//析构函数 voidMenu(); voidAdd(); voidSearch(); voidDelect(); voidInsert(); voidAlter(); voidShow();//显示学生成绩函数 private: Student*Student_First; voidRead();//读取学生成绩函数 voidPreserve();//保存学生成绩信息函数 }; Operate: : Operate() { Student_First=newStudent; Read(); } Operate: : ~Operate() {deleteStudent_First; } voidOperate: : Add()//录入学生成绩信息函数 {charname[20]; intnum; intage; charsex; charadress[20]; intcomputer; intmath; intenglish; charch; Student*f1,*p,*f2; f1=Student_First; f2=Student_First->Next; while(f1->Next) f1=f1->Next; do {p=newStudent; cout<<"**************请输入您要添加的学生成绩信息**************"< cout<<"请输入学生学号: "< cin>>num; while(f2) { if(f2->HNum()==num) { cout<<"该学号已存在,请核对信息后输入! \n\n"; cout<<"请输入学生学号: "; cin>>num; break; } f2=f2->Next; } cout<<"请输入学生姓名: "; cin>>name; cout<<"请输入学生年龄: "; cin>>age; cout<<"请输入学生性别: "; cin>>sex; cout<<"请输入学生宿舍地址: "; cin>>adress; cout<<"请输入学生计算机成绩: "; cin>>computer; cout<<"请输入学生数学成绩: "; cin>>math; cout<<"请输入学生英语成绩: "; cin>>english; p->Set(num,name,age,sex,adress,computer,math,english); f1->Next=p; p->Next=NULL; f1=f1->Next; cout<<"是否继续输入信息? (Y\\N)"< cin>>ch; }while(ch=='y'||ch=='Y'); Preserve(); cout<<"1.返回主菜单"< cin>>ch; while(ch! ='1') {cout<<"1.返回主菜单"< cin>>ch; } Menu(); } voidOperate: : Delect()//删除信息函数 { intnum; charname[20]; charch; Student*p3,*p; p=p3=Student_First->Next; cout<<"请输入学生学号: "; cin>>num; cout<<"输入学生姓名: "; cin>>name; while(p3) {if(strcmp(p3->HName(),name)==0&&p3->HNum()==num)//判断该学生信息是否存在 {cout<<"学号姓名年龄性别地址计算机成绩数学成绩英语成绩\n"; p3->Show_1(); cout<<"\n是否删除(Y/N)"; cin>>ch; if(ch=='y'||ch=='Y') {p->Next=p3->Next; deletep3; cout<<"删除成功: \n"; } else { cout<<"选择有误,重新选择! "; cin>>ch; if(ch=='y'||ch=='Y') {p->Next=p3->Next; deletep3; cout<<"删除成功: \n"; } } break; } p=p3; p3=p3->Next; } Preserve(); cout<<"1.返回主菜单\n2.继续删除"< cin>>ch; while(ch! ='1'&&ch! ='2') {cout<<"1.返回主菜单\n2.继续删除"< cin>>ch; } if(ch=='1') Menu(); elseif(ch=='2') Delect(); } voidOperate: : Alter()//修改学生信息函数 {charch,name[20]; intnum; intage; charsex; charadress[20]; intcomputer; intmath; intenglish; Student*p3,*p; p3=p=Student_First; cout<<"请输入您要修改的学生学号: "; cin>>num; while(p3) {if(num==p3->HNum()) { cout<<"学号\t姓名\t年龄\t性别\t宿舍地址\t计算机成绩\t数学成绩\t英语成绩\n"; p3->Show_1(); cout<<"请输入姓名: "; cin>>name; cout<<"请输入年龄: "; cin>>age; cout<<"请输入性别: "; cin>>sex; cout<<"请输入宿舍地址: "; cin>>adress; cout<<"请输入计算机成绩: "; cin>>computer; cout<<"请输入数学成绩: "; cin>>math; cout<<"请输入英语成绩: "; cin>>english; p3->Set(num,name,age,sex,adress,computer,math,english); break; } p3=p3->Next; } Preserve(); cout<<"修改成功! "< cout<<"1.返回主菜单\n2.继续修改"< cin>>ch; while(ch! ='1'&&ch! ='2') {cout<<"1.返回主菜单\n2.继续修改"< cin>>ch; } if(ch=='1') Menu(); elseif(ch=='2') Alter(); } voidOperate: : Read()//读取信息函数 {Student*p,*p2; p=Student_First; ifstreamis("学生信息.txt",ios: : in); if(! is) {ofstreamos("学生信息.txt",ios: : out); os.close(); return; } while(! is.eof()) {p2=newStudent; p2->Infile(is); p->Next=p2; p2->Next=NULL; p=p->Next; } } voidOperate: : Preserve()//保存学生成绩信息函数 {ofstreamof("学生信息.txt",ios: : out); Student*p=Student_First->Next; while(p) {p->Ofile(of); p=p->Next; } of.close(); } voidOperate: : Search() {intflag(0); charch; chart1[20]; intt2; Student*p3=Student_First->Next; do {cout<<"输入查询方式: \n1.按姓名查询\n2.按学号查询\n"; cin>>ch; if(ch=='2') {cout<<"请输入您要查询的学号: "; cin>>t2; while(p3) {if(p3->HNum()==t2) {flag=1; break; } p3=p3->Next; } if(flag==0) cout<<"\n无该学生的信息\n"< else { p3->Show_1(); } break; } elseif(ch=='1') {cout<<"请输入您要查询的姓名"; cin>>t1; while(p3) { if(strcmp(t1,p3->HName())==0) {flag=1; break; } p3=p3->Next; } if(flag==0) cout<<"\n无该学生的信息\n"< else { cout<<"学号\t姓名\t年龄\t性别\t地址\t数学成绩\t计算机成绩\t英语成绩\n"; p3->Show_1(); } break; } }while(ch! ='1'||ch! ='2'); cout<<"\n1.返回主菜单\n2.继续查询"< cin>>ch; while(ch! ='1'&&ch! ='2') {cout<<"1.返回主菜单\n2.继续查询"< cin>>ch; } if(ch=='1') Menu(); elseif(ch=='2') Search(); } voidOperate: : Show() {charch; Student*p3; p3=Student_First->Next; if(! p3) {cout<<"文件无数据\n\n"< cout<<"1.返回主菜单"< cin>>ch; while(ch! ='1') {cout<<"1.返回主菜单"< cin>>ch; } Menu(); } else {cout<<"学号\t姓名\t年龄\t性别\t地址\t数学成绩\t计算机成绩\t英语成绩\n"; while(p3! =NULL) {p3->Show_1(); p3=p3->Next; } } cout<<"1.返回主菜单"< cin>>ch; while(ch! ='1') {cout<<"1.返回主菜单"< cin>>ch; } Menu(); } voidStudent: : Set(intnum,char*name,intage,charsex,char*adress,intcomputer,intmath,intenglish) { Num=num; strcpy(Name,name); Age=age; Sex=s
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- C+ 课程设计 报告
![提示](https://static.bingdoc.com/images/bang_tan.gif)