C++课程设计2Word下载.docx

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

C++课程设计2Word下载.docx

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

C++课程设计2Word下载.docx

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

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

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

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

〞2021〞;

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

〞1〞;

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

〞01〞;

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

〞23〞。

〔2〕开发环境要求

软件环境:

windowsXP/windows7,VisualC++

硬件环境:

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

〔3〕技术文档要求:

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

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

1.2个人完成局部

第一阶段:

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

第二阶段:

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

第三阶段:

独立完成论文的书写。

2主要算法与原理

2.1链表

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

但假设对数组元素进展插入和删除操作,那么会引起大量数据的移动,从而使简单的数据处理变得非常复杂,低效。

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

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

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

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

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

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

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

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

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

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

如果要在链表中的结点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指针的指针为空。

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

〔1〕假设要删除的结点a是第一个结点,那么把head指向a的下一个结点。

〔2〕假设要删除的结点a存在于链表中,但不是第一个结点,那么应使a得上一个结点a_k-1的指针域指向的下一个结点a_k+1。

〔3〕空表或要删除的结点a不存在,那么不做任何改变。

2.2文件的使用 

在ofstream类中,成员函数open〔〕实现翻开文件的操作,从而将数据流和文件进展关联,通过ofstream,ifstream,fstream对象进展对文件的读写操作

函数:

open()

参数:

filename 

操作文件名

mode 

翻开文件的方式

prot 

翻开文件的属性

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

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

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

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

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

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

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

3.1学生类成员及函数

表一学生类

成员〔函数〕

类型

含义

Name[20]

char

姓名

ID[20]

学号〔九位〕

Subject[3]

int

科目

sum

int

总成绩

Input〔〕

void

输入函数

ReadFile(istream&

in)

读入文件函数

Show

显示函数

3.2学生信息类成员及函数

表二学生信息类

函数〔成员〕

*Head,*End;

;

Student

用于链表的开场和完毕

Studentmassage()

构造函数

~Studentmassage()

析构函数

ShowMenu()

菜单函数

AddItem()

创立信息函数

Sort()

排序函数

Display()

显示信息函数

RemoveItem()

删除信息函数

ModifyItem()

修改信息函数

ListCount()

记录当前链表数目

Swap(Student*,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.

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

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

[4]:

//wenku.baidu/link?

url=H3Fwag-V9gQ5Xp2l7eH-pfvTUjUciMMvcY14V

[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;

}

voidReadFile(istream&

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();

voidSwap(Student*,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())

ReadFile(in);

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已找到学生的信息,请输入新的信息!

修改成功!

\t\t没有找到!

//﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌删除信息﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌

RemoveItem()//删除信息

S

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

当前位置:首页 > 高等教育 > 医学

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

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