中南大学C课程设计_第1页
中南大学C课程设计_第2页
中南大学C课程设计_第3页
中南大学C课程设计_第4页
中南大学C课程设计_第5页
已阅读5页,还剩63页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

中南大学

二。一二〜二O一三学年第二学期

信息科学与工程学院

计算机与程序设计语言

课程设计报告

课程名称:计算机与程序设计语言C++

班级:电气信息2012级1207班

学号:________学09120703___________

姓名:黎毅刚

指导教师:__________向遥_____________

二。一三年七月

目录

一.需求分析

二.程序结构

三.算法分析

四.运行结果

五.学之心得

六.程序源码

一.需求分析

(-)小型学生成绩管理系统

1、需要处理的基础数据

令学生基本信息:如班级、学号、姓名、性别、年龄、宿舍号码、电话号

码等。

令学生选修课程的基本信息:课程编号、课程名称、考试成绩、平时成绩、

综合成绩、学分、重修否等。

2、系统的基本功能

令数据的录入:如录入学生的基本信息,以及该学生选修课程的基本信息;

令数据的修改:如修改指定学号、或者指定姓名的学生信息,或者修改其

选修课程信息;

令数据的插入:插入某个学生信息;

令数据的查询:如按学号查询、按姓名查询等;

令数据的删除:如删除指定学号、或者指定姓名的学生及其选修课程信息;

令平均成绩的计算:计算每个学生各门功课的平均成绩,并按平均成绩从

高到低的次序输出学生信息;

令列出不及格学生清单(学号、姓名、不及格的课程和成绩)。

令考虑用文件把数据保存起来(可选)。

.程序结构

(1)程序框图

3456操作7

5/

可选择按照姓名和学号两种

方式进行操作

break

(2)功能模块的划分与功能实现

输入学生信息

利用友元函数:friendvoidlnput(Stustud[])可以实现,学生

基本信息和课程信息的录入的功能,并且能够能够将信息保存到

student.dat文件中。

二.浏览统计信息

利用友元函数:friendvoidStatistic(Stustud[])可以实现,浏

览学生的基本信息和平均分数信息的功能

三.查询学生信息

利用友元函数:friendvoidLookup(Stustud[])可以实现,分别

按学号和姓名两种方式来查询信息的功能。

四.修改学生信息

利用友元函数:friendvoidModify(Stustud[])可以实现,分别按

学号和姓名两种方式来修改信息的功能,修改后的信息可以保存进文

件中。

五.删除学生信息

利用友元函数:friendvoidDelete(Stustud[])可以实现,分别按学

号和姓名两种方式来删除信息的功能,删除后的信息可以保存进文件

中。

六.插入学生信息

利用友元函数:friendvoidInsert(Stustud[])可以实现,插入的学

生信息可以保存进文件中。

七.按平均分排序

利用友元函数:friendvoidSort(Stustud[])可以实现,按每名学

生的平均分进行降序排序的功能。

八.浏览全部信息

利用友元函数:friendvoidOutput(Stustud[])可以实现,一次性浏

览学生全部信息的功能,包括课程是否从修的信息等。

九.不及格学生清单

利用友元函数:friendvoidShowfail(Stustud[])可以实现,输出不

及格学生的信息和不及格的课程的功能。

十.退出管理系统

利用函数exit(l)就可轻松退出管理系统。

三.算法分析

(1)整体部分

①先要建立一个课程类classCourse,并且包含课程编号、课程名称、

平时成绩、末考成绩、综合成绩、是否重修等数据成员。

②再建立一个学生类classStu,并且包含班级、学号、姓名、性别、

年龄、宿舍号码、电话号码、课程数目、名次等数据成员,而且还要

在学生类中建立一个课程类的对象数组Coursecourse[20]o

③建立一个友元函数friendvoidWrite(Stustud[],intn),来实现将各

种更新的数据的保存进文件student.dat中。

(4)建立一个友元函数friendintRead(Stustudl]),来读取文件中的数

据,并且返回文件中保存数据的学生个数returncounto

⑤建立一个菜单函数intmenu();来实现对系统主界面的输出,以及

返回不同的操作指令,从而实现不同的函数功能。

(2)功能实现部分

⑥主函数部分

(―)先建立学生类的对象Stustud[100]

(二)利用for循环for(;;),菜单函数和switch函数

“switch(menu())来实现系统不同功能的运行。

⑦输入学生信息部分

(一)利用while循环“while(sign!='n'&&sign!='N')和for循环

“for(j=0;j<stud[i].num_of_course;j++)来实现对学生数

据的输入。

(二)利用loop循环,这个VB中的循环来防止学号重复的问

题。利用Write函数来将数据保存进文件中。

⑧浏览学生统计信息部分

(一)通过Read函数"intn=Read(stud);和for循环—for(int

i=0;i<n;i++)来对学生的学号、姓名、班级和平均分进行

输出

⑨查询学生信息部分

(—)通过Read函数“intn=Read(stud);和switch函数》

switch(choose)来实现分别按学号和姓名查询学生信息的

功能

(二)通过定义变量-intb=0;intp=0;for循环和if语句f

for(i=0;i<n;i++)for(i=0;i<n;i++)

({

if(stud[i].num==a)if(stud[i].name==namel)

{{

b++;P++;

if(b==O)

(

cout<<"对不起,查无此人,请确认学号是否正确"<<endl;

}

if(p==O)

cout<<”对不起,查无此人,请确认姓名是否正确"<<endl;

)

来输出报错信息。

®修改学生信息部分

(一)通过Read函数—intn=Read(stud);和switch函数》

switch(choose)以及for循环来实现分别按学号和姓

名修改学生信息的功能,并且还要通过Write函数,

将修改过后的信息保持进文件中。

(二)和⑨的功能相同,通过一样的方法,可以输出报

错信息。

⑪删除学生信息部分

(一)通过Read函数—intn=Read(stud);和switch函数—

switch(choose)以及for循环来实现分别按学号和姓

名学生信息的功能

(二)通过不断地给前一位学生类对象赋值的方法》

for(i=0;i<n-1;i++)

{if(stud[i].name==namel)

|

stud[i]=stud[i+l];

n--;

cout<<"提示:已成功删除!"<<endl;

并且在还要记得学生的个数要减去Ifn-;

,然后再保存数据—Write(stud,n);

(三)报错信息的实现跟⑨一样。

。插入学生信息

(一)利用while循环“while(s!='n&&s!='N')和for循环》

for(j=0;j<stud[nj.num_of_course;j++)来实现学生信

息的插入

(二)通过Write函数及时的将数据保存起来。

Q按平均分排序部分

(一)通过冒泡法可以实现对学生平均成绩的降序排列

for(i=0;i<n-l;i++)

for(j=0;j<n-l-i;j++)

if(stud[j].average<stud[j+1].average)

(

Stutemp;

temp=stud[j];

stud[j]=stud[j+l];

stud[j+l]=temp;

)

(二)利用for循环来对学生的成绩进行排名

for(i=0;i<n;i++)

stud[i].order=i+l;

⑭浏览全部信息部分

(一)通过for循环和Read函数就可以输出所有学生的全部

信息,其中包括课程是否重修情况。

⑮不及格学生名单部分

(一)通过for循环和Read函数,以及cout的运用,就可以

输出不及格学生的基本信息以及不及格的科目。

(3)独特功能展示部分

①防止错误操作功能

(-)利用do—while循环来实现错误操作所带来的死循环

或者是系统意外停止。实现该功能的部分代码和结果

图片如下:

第一个》防止主界面的错误操作

部分代码如下:

coutv<”请输入你需要的操作:n«endl;

cin»c;

if(c>9llc<0)

coutv<"尼玛,看清楚了再输入,系统很累的啊!”<vendl;

system("pausen);

}while(c>9llc<0);

retum(c);

结果如下:

|。|回

1T・D:\程序设计\实验报告\Debug\80.exe-

Mf2M川**

-M--M-

生^

1豆

W一

2计

3生

4一

5一

6三

7.<自

8览

违3

学M

9生

俏.

0.4统

j】1

情输入你需要的操作:

10

忸玛,看道楚了再输入,系统很累的啊!

储按任意疆继续.一

第二个》防止按姓名和学号的方式来查询、删除、修改时的错误操作

部分代码如下:

cout«endl<<"*******查找学生成绩*******“<<endl;

do

(

coutvv”请选择查找方式:1.按学号查询2.按姓名查询"vvendl;

cin»choose;

}while(choose<lllchoose>2);

结果如下:

②学生信息录入以及处理功能

(一)利用loop循环来实现避免输入重复学号的功能

部分代码如下:

loop://loop循环

coutvv"学号:“;

cin»stud[i].num;

intc=0;

while(c<i)

(

C++;

if(stud[i].num==stud[i-c].num)

(

coutvv”你输入的学号已经存在!请重新输入。"vvendl;

gotoloop;

结果如下:

(二)可以实现不同学生不同科目数和不同科目的操作要

求。

部分代码如下:

cout<<"请输入需要登记的学科数目:";

cin»studliJ.num_ofLcourse;

intj;

floatsum=0;

for(j=0;j<stud[i].num_oCcourse;j++)

(

cout<<"请登记第"v<j+1<v”门课的信息:"vvendl;

结果如下:

(三)当输入学生的平时成绩和末考成绩时,可以计算出

学生的综合成绩(平时占30%,期末占70%),并

且能够是否需要重修,还能算出学生的平均成绩,

用于以后的排序。

部分代码如下:

for(j=0;j<stud[i].num_of_course;j++)

(

coutvv”请登记第"vvj+l<v”门课的信息:u«endl;

coutvv"课程编号:”;

cin»stud[i].course[j].course_num;

coutvv”课程名称:”;

cin»stud[i].course[j].course_name;

coutvv”平时成绩:";

cin»stud[i].course[j].regular_score;

coutvv”末考成绩:”;

cin»stud[i].course[j].final_score;

coutvv”学分:

cin»stud[i].coursefj].study_score;

stud[i].course|j].zonghe_score=stud[i].course[j].regular_score:i:0.3+stud[i].course[j].final_score*0.

7;//求综合成绩

coutvv”该门课的综合成绩是:"vvstud[i].course[j].zonghe_scorevvendl;

if(stud[i].course[j].zonghe_score<60)

stud[ij.course|jj.rebulid=,'^n;

else

stud[i].course|j].rebulid="否";

coutvv”是否重修:"vvstud[i].course[j].rebulidvvendl;

sum=sum+stud[i].course|j].zonghe_score;//综合成绩的总和

stud[i].average=sum/stud[i].num_of_course;

cout«n该学生这几门课的平均分为:n«stud[i].average«endl;

coutv<”提示:是否继续写入学生成绩?(Y/N)”;

cin»sign;

i++;

Write(stud,i);〃调用文件写入函数,把信息写入文件

I

结果如下:

i'D:\程序没计供验报告\Debug\80.exe。

A目

E内/

0祝

级:1

学123

:0皿

09纲070

舍23

请56

请⑭

01数

学78

564

不.

绩是

课8

I1重

IV汽

-示

提q:68.2

:;绩?<Y/N〉

③查询、修改、删除的错误提示功能(利用for循环和if语句来实

现的)

部分代码如下:

intb=0;

intp=0;

if(stud[i].num==numl)

(

b++;

if(b==O)

(

cout<<”对不起,系统中没有此人,请确定学号是否正确"<<endl;

}

运行结果如下:

注:修改和删除功能实现的原理与上面的一样,一下不做赘余。

④按平均分排序时,还能实现学生名次的输出功能

部分代码如下:

for(i=0;i<n;i++)

(

stud[i].order=i+l;

结果如下:

®浏览学生全部信息时的浏览界面功能

运用两个for循环可以很直观的浏览到学生的各方面的信息,包

括学生的课程是否重修等

代码如下:

voidOulput(Stustud[])〃输出全部学生信息

{

system("cls");

intn=Read(stud);

coutvvendkv”******显示全部学生信息******”<vendl;

if(!stud)

coutvv”没有记录”;

else

(

for(inti=0;i<n;i++)

(

cout«H----------------------------------------------------------------------------------u«endl;

coutvv”基本信息:H«endl;

cout«setw(8)«u班级H«setw(12)«"学号K«setw(8)«n姓名

H«setw(8)«n年龄,,«setw(8)«,,性别"vvsetw(12)«M宿舍电话n«setw(l2)«"个人电话

u«endl;

cout«setw(8)«stud[i].class_num«setw(12)«stud[i].num«setw(8)«stud[i].name«setw(8)<

<stud[i].age«setw(8)«stud[i].sex«setw(12)«stud[i].room«setw(12)«studfi].tel«endl;

coutv<”成绩信息:"vvendl;

for(intj=0;j<stud[i].num_o匚course;j++)

(

cout«setw(8)«stud[i].course(j].course_name«setw(6)<<"重修

u«setw(6)«"学分"«endl;

cout«setw(8)«stud[i].course[jJ.zonghe_score«setw(6)«studLi].course[jJ.rebulid«setw(6)«s

tud[i].course[j].study_score«endl;

)

cout<<”所有科目平均分:"《stud「].average«endl:

)

cout«endl«M---------------------------------------------------------------------------------H«endl«endl;

运行结果:

■验报告\Debug\80.exe"

******显示全部学生信息

媒>:

号姓:年龄宿舍电话个人电话

岛9

12杨20

绩123456

成07

文09

否3

-场

-

89分

科.7

目87

LZ.-.9

陛本信息:

或缴学号黎毅俞年龄性别宿舍电话个人电话

1207班90912070319男123456

成绩信息:

嵩数重修学分

COO不C

所有科目平均分:68.2

请按任意健继续..•

半:

⑥不及格学生清单的输出功能

部分代码如下:

voidShowfail(Stustud[])〃不及格学生清单

(

intj;

systemC^ls");

intn=Read(stud);

cout<vendlv<"===>部分不及格学生信息显示如下v===="v<endl;

if(!stud)

(

coutvv”对不起,现在还没有学生信息记录!n«endl;

exit(l);

)

else

(

for(inti=0;i<n;i++)

(

for(j=0;j<stud[i].num_of_course;j++)

if(stud[i].course[j].zonghe__score<60)

cout«setw(8)«u班级"«setw(l2)«u学号n«setw(8)«n姓名

n«endl;

cout«setw(8)«stud[i].class_num«setw(12)«stud[i].num«setw(8)«stud[i].name«endl;

coutvv”其不及格科目如下:M«endl;

)

break;

}

for(j=0;j<stud[i].num_ofLcourse;j++)

(

if(stud[i].course[j].zonghe_score<60)

(

cout«stud[i].course[j].course_name«”:";

cout«studfi1.course[j].zonghe_score«endl;

结果如下:

四.运行结果

①输入学生信息

■D\程序没计\实验报告\Debug\80,exe-

居9

曹:i

请:2

^F记

ru2

s一

船•

n一

^。

!^!

01高.

时.

课p::.

t=90

奏g

4成

K绩64

学•

.5

.合

成绩是

(课

综8

71

^登

的信息

^簟K

课2|:

02英

h绩.

支.

H成89

K62

学•3

成是

i不71

^10.

IAJE钗

I言

l捏z-

②浏览统计信息

■枕驰报S\Debug\80.exe-|w=w|r(a-|fc^gj

平均成绩

1207班909120703黎载刚70.95

1207班909120704桶铁68.45

请按任意键继续..一■

半:

③查询学生信息

1,D:\程序没计供验报告\Debug\80.exe-H■叵

*******查找学生成绩XXXXXXX

请选择查册式:[金学号查询2.按姓名查询

2

请输入要查询的姓名:黎毅刚

现级•121

・07

号900

学•91

•密

・19

•s

舍■

L:1

性LB1-

L2

LI-

数TB1-

央"718

・701

均s"V0

x'fT:-

请按任意键继续...

半:

■您\程序设计\实验报告\Debug\80.exe'

*******查找学生成绩XXKXXXX

请选择查册式:1弟学号查询2.按姓名查询

1

请输入要查询的学号:0909120703

班级

朝I

•1207X

号•9091207

«4

*冈

■«仅

年19

孕B

>

舍>-p

^、

E9l:1

^Enl、:2

局718

■・

语-

0

央>1

>-

平7

^7095

7--

请按任意键继续..•

半:

④修改学生信息

注:按姓名修改以上面的相似

⑤删除学生信息

删除前:

删除后:

⑥插入学生信息

插入后:

⑦按平均分排序

⑧浏览学生全部信息

,'口:\的没计'实验报告\Debug\86.exe"

******显示全部学生信息

基本信息:

学号年龄性别宿舍电话个人电话

12理班90912080420男22

成绩信息:

重修学分

83.6不3

所有科目平均芬:83.6

基1.,:

年龄性别宿舍电话个人电话

看9

0904男

成121923

绩>=

09学

-管.

善/

/T

FO1窗

.4

49二4

=否/

有8669

科.4

目7.

请按任意键继续.••・

⑨不及格学生清单

⑩退出管理系统

成绩

亲欢

*用

1<息

W喧

2息

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论