C++课程设计文档格式.docx

上传人:b****5 文档编号:18890494 上传时间:2023-01-02 格式:DOCX 页数:24 大小:324.28KB
下载 相关 举报
C++课程设计文档格式.docx_第1页
第1页 / 共24页
C++课程设计文档格式.docx_第2页
第2页 / 共24页
C++课程设计文档格式.docx_第3页
第3页 / 共24页
C++课程设计文档格式.docx_第4页
第4页 / 共24页
C++课程设计文档格式.docx_第5页
第5页 / 共24页
点击查看更多>>
下载资源
资源描述

C++课程设计文档格式.docx

《C++课程设计文档格式.docx》由会员分享,可在线阅读,更多相关《C++课程设计文档格式.docx(24页珍藏版)》请在冰豆网上搜索。

C++课程设计文档格式.docx

(f)学生的成绩总表结构约定为(学号,姓名,课程名,总评成绩).总评成绩等于各科成绩之与。

(g)学号就是一个9位整数构成的字符串,学号的编码规则:

入学年份+在读年级+在读班级+班内编号;

入学年份用4位整数构成字符串,如2014年入学则表示为:

”2014”;

在读年级用1位整数构成字符串,如正在1年级读书则表示为:

”1”;

在读班级用2位整数构成字符串,如正在1班读书则表示为:

”01”;

班内编号用2位整数构成字符串,如在班内编号为23号则表示为:

”23”。

(2)开发环境要求

软件环境:

windowsXP/windows7,VisualC++

硬件环境:

计算机(Pen4CPU,512MRAM,60G以上硬盘,输入输出设备)

(3)技术文档要求:

按软件工程技术文档要求。

要求流程图绘制规范,模块功能描述清晰

1、2个人完成部分

第一阶段:

学习链表相关知识来动态分配存储空间,并作出链表的程序及学习文件在C++中的应用;

第二阶段:

录入学生成绩、显示学生成绩、查询学生成绩并画出相关流程图,并与队友共同把所有的程序进行整理并调试成功;

第三阶段:

独立完成论文的书写。

2主要算法与原理

2、1链表

2、1、1链表的介绍

数组式计算机根据事先定义好的数组类型与长度自动为其分配一连续的存储单元,相同数组的位置与距离都就是固定的,也就就是说,任何一个数组元素的地址都可一个简单的公式计算出来,因此这种结构可以有效的对数组元素进行随机访问。

但若对数组元素进行插入与删除操作,则会引起大量数据的移动,从而使简单的数据处理变得非常复杂,低效。

链表就是一种动态数据结构,用一组任意的存储单元(可以就是连续的,也可以就是不连续的)存放数据元素。

链表中每一个元素成为“结点”,每一个结点都就是由数据域与指针域组成的,每个结点中的指针域指向下一个结点。

Head就是“头指针”,表示链表的开始,用来指向第一个结点,而最后一个指针的指针域为NULL(空地址),表示链表的结束。

可以瞧出链表结构必须利用指针才能实现,即一个结点中必须包含一个指针变量,用来存放下一个结点的地址。

实际上,链表中的每个结点可以用若干个数据与若干个指针。

结点中只有一个指针的链表称为单链表,这就是最简单的链表结构。

开辟一个新节点,并使p1,p2指向所建立的对象

读入一个学生的数据给p1所指的结点

head=NULL

当读入的p1_>

num

n=n+1

head=p1(把p1所指的结点

p2->

next=p1(把p1所指的结点连接到表尾

再开辟一个新结点,使p1指向它

读入一个学生数据给p1所指的结点

表尾结点的指针变量置NULL

P=head,使p指向第一个结点

p指向的不就是尾结点

输出p所指向的结点

P指向下一个结点

当p指向的不就是表尾

2、1、2链表的创建与输出 

图1动态链表创建图2链表输出

2、1、3链表结点的访问 

由于链表中的各个结点就是由指针链接在一起的,其存储单元文笔就是连续的,因此,对其中任意结点的地址无法向数组一样,用一个简单的公式计算出来,进行随机访问。

只能从链表的头指针(即head)开始,用一个指针p先指向第一个结点,然后根据结点p找到下一个结点。

以此类推,直至找到所要访问的结点或到最后一个结点(指针为空)为止。

2、1、4链表结点的插入 

如果要在链表中的结点a之前插入结点b,则需要考虑下面几点情况。

(1)插入前链表就是一个空表,这时插入新结点b后。

(2)若a就是链表的第一个结点,则插入后,结点b为第一个结点。

(3)若链表中存在a,且不就是第一个结点,则首先要找出a的上一个结点a_k,然后使a_k的指针域指向b,在令b的指针域指向a,即可完成插入。

(4)如链表中不存在a,则插在最后。

先找到链表的最后一个结点a_n,然后使a_n的指针域指向结点b,而b指针的指针为空。

2、1、5链表结点的删除 

如果要在链表中删除结点a并释放被删除的结点所占的存储空间,则需要考虑下列几种情况。

(1)若要删除的结点a就是第一个结点,则把head指向a的下一个结点。

(2)若要删除的结点a存在于链表中,但不就是第一个结点,则应使a得上一个结点a_k-1的指针域指向的下一个结点a_k+1。

(3)空表或要删除的结点a不存在,则不做任何改变。

2、2文件的使用 

2、2、1、打开文件

在ofstream类中,成员函数open()实现打开文件的操作,从而将数据流与文件进行关联,通过ofstream,ifstream,fstream对象进行对文件的读写操作

函数:

open()

参数:

 

操作文件名

mode 

打开文件的方式

prot 

打开文件的属性

2、2、2关闭文件

当文件读写操作完成之后,我们必须将文件关闭以使文件重新变为可访问的。

成员函数close(),它负责将缓存中的数据排放出来并关闭文件。

这个函数一旦被调用,原先的流对象就可以被用来打开其它的文件了,这个文件也就可以重新被其它的进程所访问了。

为防止流对象被销毁时还联系着打开的文件,析构函数将会自动调用关闭函数close()。

2、2、3文本文件的读写

Read成员函数从一个文件读字节到一个指定的存储器区域,由长度参数确定要读的字节数。

如果给出长度参数,当遇到文件结束或者在文本模式文件中遇到文件结束标记字符时结束。

3学生成绩管理系统的设计与实现

3、1学生类成员及函数

表一学生类

成员(函数)

类型

含义

Name[20]

char

姓名

ID[20]

学号(九位)

Subject[3]

int

科目

sum

int

总成绩

Input()

void

输入函数

Read&

in)

读入文件函数

Show

显示函数

3、2学生信息类成员及函数

表二学生信息类

函数(成员)

*Head,*End;

;

Student

用于链表的开始与结束

Studentmassage()

构造函数

~Studentmassage()

析构函数

ShowMenu()

菜单函数

AddItem()

创建信息函数

Sort()

排序函数

Display()

显示信息函数

RemoveItem()

删除信息函数

ModifyItem()

修改信息函数

ListCount()

记录当前链表数目

S*,Student*)

删除结点

save()

保存函数

3、3主要函数说明

首先在创建菜单时,应包括创建学生成绩录入,显示,查询,修改,删除,排序这六个功能,然后通过调用创建信息函数完成学生成绩的录入,显示函数实现学生信息的全部显示,通过修改可以改变输入错的信息,针对有的学生如果转学什么的可以对其信息进行删除,利用姓名来调用查询函数能够得到所想要的学生信息;

最后,通过调用排序函数后在,可以在所见的文件夹里打开所有录入的学生信息及最终排序结果。

3、4学生成绩管理系统的总结构图

通过总结构图能够直观地瞧出所制作的成绩管理系统的各项功能,总结构图如下图3、

图3学生成绩管理系统的总结构

3、5模块的流程图

根据系统提示,选择1创建学生信息,根据系统提示可以一次输入姓名,学号,成绩,如果要对成绩显示则继续选择2,可以对成绩显示,当创建的信息大于等于2时可以继续选择3,进行排序,最终的结果可以在当前所建的记事本里显示各项成绩及排序,要对信息查询选择4来查询您想要的信息,也可以对信息修改等,最终可以选择0安全退出系统。

进入系统根据系统提示来选择想要进行的操作,从而完成各项的功能,利用信息查询也可以来判断所操作的删除就是否删除成功的测试,查询流程如下,图4、

图4信息查询流程图

3、6难点及难点的解决

难点:

通过构造两个类来实现各种功能,使用链表来对各项功能的实现及使用文件来保存所得到的成绩排序结果的连接中相对较难。

解决:

通过自己认真学习课本所学过的链表及文件相关的知识,并通过上网查找类似的链表与文件在C++中的应用来完成。

4结果分析及改进

首先进入系统界面后,会有时间,日期的显示,并提示密码的输入,如下图5、

图5首界面

根据界面提示进入菜单界面,可以对想要的操作进行选择,如图6、

图6菜单界面

选择1,创建学生信息,创建学生的姓名、学号,各科成绩,最后会显示添加成功,结果如下图7、

图7创建学生信息

根据刚才创建更多的学生信息后,选择3,可以显示创建的所有学生的信息,如图8、

图8显示学生信息

根据刚才创建的所有信息可以进行查询自己所想要的学生信息,如下图9、

图9查询学生信息

如果有的同学转学或其她什么的,该信息已经无意义,可以对该信息进行删除,如图9、

图10删除学生信息

如果第一次创建信息过程中出现错误或输入的姓名与学号不对应,则可以通过修改学生的信息,如图10、

图11修改信息

最后完成所有输入的成绩排序,得到最终的结果显示,如图11、

图12排序结果

所有的操作完成后,选择0,可以安全退出系统。

如下图12、

图13系统安全退出系统

5小结与心得

对于我们所选的学生成绩管理系统的设计与实现,我就是根据我们所做的ssrt的项目有启发而做的,经过查阅资料发现利用文件与链表来实现,所以自己又把我们学过的链表与文件进行学习,查阅相关的实例练习链表的应用,但刚开始我们想的比较简单就是依据C语言而实现的,到后来经老师的点拨,发现我们做的应该就是基于C++的程序,虽然仅剩一天半左右的时间,我与队友能够更根据自己前期准备的基础上,进一步查阅资料并对自己原有的程序进行修改,最终的以完成。

通过这次C++的课程设计的学习,让我体会到我们所学的C++课程的实用性,以前我认为计算机方面的课程仅仅就是我所要必修的,没有什么的实际价值,但就是经过这次课程设计,瞧到同学们所做的小游戏后,我发现其实我们所学的都就是非常有用的,只就是在以前我们缺乏思考与锻炼,仅仅把游戏当作一种娱乐,并没有发现用我们所学的知识也就是可以制作的,所以启发我们以后需要多思考,多进行实际操作。

利用这次训练,我发现自己能够掌握更多的知识,通过两个人的合作,能够相互取长补短,对我后期的学习也有很大的帮助,让我不再对计算机课程感到头疼,同时也增加了我对编程的兴趣与爱好,希望以后的学习、生活中,我能够与做这次课程设计一样,勤于动手,动脑,努力来弥补不足之处。

6参考文献

[1]谭浩强、C++程序设计[M]、北京、清华大学出版社,2004、6、

[2]谭浩强、C++程序设计解题与上机指导[M]、北京、清华大学出版社、2005、3、

[3]钱新贤,杨猛,程兆炜,张少东.Visual 

C++编程疑难详解[M].北京、人民邮电出版社,2000、5

[4]

[5]

附录

#include<

fstream>

string>

#include<

iostream>

conio、h>

ctime>

//用getch();

usingnamespacestd;

//﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌Student类﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌

classStudent

{

public:

charname[20];

charId[20];

intCnum;

//C++课程得分

intMnum;

//数学课程得分

intEnum;

//英语课程得分

intsum;

//总分

Student*Next;

voidInput()

{

cout<

<

"

\t\t请输入学生的姓名:

;

cin>

>

name;

\t\t请输入学生的学号(九位):

Id;

\t\t请输入C++课程的期末成绩:

Cnum;

\t\t请输入数学课程的期末成绩:

Mnum;

\t\t请输入英语课程的成绩:

Enum;

sum=Cnum+Mnum+Enum;

}

voidRead&

in)

in>

name>

Id>

Cnum>

Mnum>

Enum>

sum;

voidShow()

姓名"

<

学号"

C++"

数学"

英语"

总成绩"

endl;

name<

"

Id<

Cnum<

Mnum<

Enum<

sum<

};

//﹌﹌﹌﹌﹌﹌﹌﹌﹌Studentmassage类﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌

classStudentmassage

Studentmassage();

~Studentmassage();

voidShowMenu();

voidFind();

voidSave();

voidModifyItem();

voidRemoveItem();

voidS*,Student*);

voidSort();

//voidUnpass();

intListCount();

//voidAverage();

voidDisplay()

for(Student*p=Head->

Next;

p!

=End;

p=p->

Next)

p->

Show();

输入任意字符!

继续……"

getch();

voidAddItem()

End->

Input();

Next=newStudent;

End=End->

添加成功!

private:

Student*Head,*End;

ifstreamin;

ofstreamout;

Student*FindItem(char*name)

for(Student*p=Head;

p->

Next!

Next)//匹配成功则返回上一个指针,不成功就返回空

if(!

strcmp(p->

Next->

name,name))returnp;

returnNULL;

Student*FindID(char*Id)

Id,Id))returnp;

//﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌构造函数﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌

Studentmassage:

:

Studentmassage()

Head=newStudent;

Head->

End=Head->

in、open("

sort、txt"

);

in)

这就是一个新系统,无学生信息。

请先输入。

else

while(!

in、eof())

Read);

if(End->

name[0]=='

\0'

)break;

in、close();

\t\t读取学生信息成功!

}

//﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌析构函数﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌

~Studentmassage()

Save();

for(Student*temp;

Head->

temp=Head->

Next=Head->

deletetemp;

deleteHead,End;

//﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌菜单﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌

voidStudentmassage:

ShowMenu()

cout<

**************************************************************"

********制作人:

西安建筑科技大学张丹莉周春燕***********"

*********欢迎来到学生成绩管理系统***********"

*********1创建学生信息***********"

*********2显示学生信息***********"

*********3排序学生信息***********"

*********4查询学生信息***********"

*********5删除学生信息***********"

*********6修改学生信息***********"

*********0成功退出系统***********"

请输入您想完成的操作:

}

//﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌查找函数﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌

Find()

charname[20],Id[10];

intx;

Student*p=NULL;

\n\t\t*********************************\n"

\t\t※1、按学生的姓名查找\n\t\t※2、按学生学号查找"

\n\t\t*********************************\n请选择:

x;

switch(x)

case1:

{cout<

\t\t请输入要查找的学生的姓名:

cin>

if(p=FindItem(name))

\t\t没有找到该姓名的学生!

'

\n'

}break;

case2:

\t\t请输入要查找的学生的学号:

if(p=FindID(Id))

\t\t没有找到该学好的学生!

//﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌修改信息﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌

ModifyItem()//修改信息

\t\t请输入要修改的人的姓名:

\t\t已找到学生的信息,请输入新的信息!

修改成功!

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 求职职场 > 社交礼仪

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1