c课程设计-学生选修课选课系统_第1页
c课程设计-学生选修课选课系统_第2页
c课程设计-学生选修课选课系统_第3页
c课程设计-学生选修课选课系统_第4页
c课程设计-学生选修课选课系统_第5页
已阅读5页,还剩22页未读 继续免费阅读

下载本文档

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

文档简介

学生选修课选课系统

目录

1前言................................................................1

2需求分析............................................................2

2.1编写目的......................................................2

2.2需求概述......................................................2

2.3需求说明......................................................2

2.4开发环境......................................................2

3总体设计............................................................3

3.1功能模块图....................................................3

3.2流程图........................................................4

3.3类的设计图....................................................5

4各功能模块设计....................................................7

4.1整体设计......................................................7

4.2主要的功能函数设计............................................7

5系统调试............................................................8

6总结与体会.........................................................14

6.1总结..........................................................14

6.2编写程序中遇到的问题及解决办法..............................14

参考文献.............................................................15

附录源程序..........................................................16

须眉原作

1前言

随着计算机的普及,各高校均采用计算机进行学生选课。学生选修课系统主

要包含选修课管理系统及学生选课系统两部分。

学生选修课系统i般需要有管理员管理选修课课程,然后学生对经过管理员

操作后的选修课进行选课,选修课管理系统由管理员登录,对当前所有选修课课

程进行管理操作。学生选课系统则是由学生登录,学生可以杏看由管理员整理好

的所有选修课,并从显示出的选修课中选择自己要选择的课程。

管理员管理选修课实质是对后台选修课库中的选修课信息进行操作,可以在

库中添加课程或删除课程,学生选课的实质即是先打印出后台选修课库中所有选

修课信息以供选择,选择课程即是对后台学生信息库里的学生信息进行修改。

1

2需求分析

2.1编写目的

(1)要求学生达到熟练掌握C++语言的基本知识和技能;

(2)基本掌握面向对象程序设计的基本思路和方法;

(3)能够利用所学的基本知识和技能,解决简单的面向对象程序设计问题;

(4)通过编写此系统,实现选修课系统的基本功能c

2.2需求概述

(1)系统中包括两个登陆身份(管理员与学生),并对应不同的功能;

(2)对于管理员,此系统具有添加、删除、杳看选修课等功能;

(3)对于学生,此系统具有选课、杳询等功能

2.3需求说明

此系统可以实现学生选课,管理员管理课程的基本功能

24开发环境

使用VisualC++6.0编程软件

2

3.2流程图

进入系统后可以选择以学生身份或者管理员身份登录。学生登录需要输入个人

的学号及姓名,成功登录后可以选课或查询个人信息。管理员的登录需要输入密

码,成功登录后则可以对当前所有的选修课进行管理操作,可添加新选修课或删

除已有的选修课。详细操作流程如卜.图所示。

图3.3流程图

4

3.3类的设计图

⑴Course类

Course类即选修课课程类。数据成员分别是:课程编号、课程名称、课程类型、

开课时间、授课学时、实验学时、总学时以及学分。成员函数则包含所有数据

成员的get函数,用以获取数据成员的值,set函数用来修改课程,print函数则

是打印课程的信息。如卜图所示。

Course

id:char*

name:char*

nature:char*

date:char*

shours:int

ahours:int

zhours:int

score:double

score:double

getld():char*

getName():char*

getNaturef):char*

getDate():char*

getAhours():int

getShours():int

getZhoursf):int

getScore():double

setfchar*a,char*b,char*c,char*d,inte,intf,doubleg):void

print():void

图3.4Course类

5

(2)Student类

Sludent类即学生类。其中包含了学生的学号、学生姓名、所选的两门课程及

两门选修课课程的总学分。setkl和selName是用来修改相关成员的值,getName

获取学生的姓名,print函数用来打印学生的相关信息,个seleciCourse则是用来

选课。如下图所示。

Student

id:char*

name:char*

cl:Course

c2:Course

zscorc:dounble

setld(char*al):void

se(Name(char*al):void

geiName():char*

selectCourse_1(Coursecc):void

selec(Course_2(Coursecc):void

print():voidprinlO:void

图3.5Student类

6

4各功能模块设计

4.1整体设计

对于学生和选修课,我们分别定义了相应的类Student和类Course,其间的

关系就是学生类中有两个选修课类对象成员。而对于管理员我们并没有单独去定

义类,因为管理员只是对选修课进行操作,程序中并不需要访问管理员的信息。

为/方便对选修课进行管理及多位学生的登录,我们定义了一个选修课数组

和学生数组。

4.2主要的功能函数设计

(1)选课函数

voidselcctCoursc(Studcntsi[10],Coursec1[M],ints_num1)

对当前学生对象进行操作,覆盖其选修课对象成员cl或c2,即学生

的选课。

(2)两种输出所需选修课函数

按学分输出选修课函数voidselectScore(Coursec1[M])

按类型输出选修课voidselectNature(Coursec1[M])

对传递进来的选修课数组进行扫描,输出符合要求的选修课。

(3)选修课排序函数

voidxu(Coursecl[M])

使用冒泡排序法对选修课数组进行编号从小到大的排序。

(4)主菜单函数

voidmcnu(Coursccl[6],Studentsl[10])

所有菜单循环都在其中,调用其他函数来实现具体功能。

7

5系统调试

1.系统主界面

进入系统主界面后可以选择登录身份或退出程序。如图5.1所示。

图5.1系统主界面

2.选修课管理系统

图5.1选择登录身份为管理员,默认密码123,输入-1可返回图5.1界面。密

码输入正确后可进入管理员登录系统。如图5.2所示。

图5.2选修课管埋系统

8

3.按学分查看选修课

图5.2选择查看选修课,可以查看当前所有的选修课课程的相关信息。可以

选择不同的输出方式:按学分查询、按类型查询、显示全部。选择按学分查询,

在选择0.5,可打印当前所有课程中学分为0.5的课程信息。如图5.3所示。

c:"C:\PrograBFilesMicrosoftVisualStudioMyProjects\bf\Debug\bf.exe*

学分

查量

1•课

修课

选修

2询

•显

示全

3部

•返

4回上

•一

£选择:1

号输入选修课的学分:J

1.0.5

2.1.0

请选择।1

.编号:010名称:上课时间:5.10-6.2

声学时:12h授课学0.5

.编号:015名称:药膳类型:学术类上课时间:5.7-5.30

2、学弟15h接谏学时:12h实验学时:3h学分:0.5

图5,3按学分查看选修课

4.查询全部选修课

查看选修课功能中可以选择显示全部,即罗列出当前所有的选修课课程信

息。如图5.4所示。

I*C:\Progra>Files\licrosoftVisualStudio\ByProjects\bf\Debug\bf.exe*•同2s

精选择:3口

1.编号:001名称:健康与养生类型:上课时间:5.13-5.30

接谏学时:15b实验学时:0b

,匕、j-15h1

2.编号:003刍逐工声乐鉴赏菱型工百术类上课时间:5.21-6.10

总学时:15h接谏学用12h实验学时:3b学分:0.5U

3.编号:006名称:数苧建模类型:学术类上课时间:5.7-6.2

总学时:16h授课学时:10h实验学时:6h学分:1

4.绢号:007名称:酒文化与鉴赏类型:上课时间:5.20-6.23

总率时:18h佞谏学吩:15b实验学时:3b1

5.编号:010第竭缪注囊学时甥;上课时间:5.10-6.2

总学时:12h0.5

6.编号:015名淡:药膳类型:学术类上课时间:5.7-5.30

总学时:15h授课学时:12h实验学时:3h学分:0.5

图5.4查询全部选修课

9

5.管理员添加选修课

图5.2选择添加选修课,可以添加一门新的选修课,然后按要求输入课程信

息。如图5.5所示。

*C:\Progra*FilesMicrosoftVisualStudio\lyProjects\bf\Debug\bf.exe-

2

请选择:i

道技格式依次输入选修课的编号'名称、上课时间<x.xx-x.xx).类型〈艺术类或学术类)、

授课学时、实验学时、空

008论语5.6-5.30学术类1301.0

添加成功!

图5.5管理员添加选修课

6.添加后的选修课信息

添加选修课后选择返回上一层,再选择显示全部选修课可以看到已新增的选

修课已添加成功。如图5.6所示。

Files\IicrosoftVisualStudioMyProjectskbf\Debug\bf.exe”

请选卷:3

.编号;□

1001名称:健康与养生类型;上课时间:

京学时:15h侵谏学时:15h实验学时:0h

2.编号:003徽奉京乐簪菱嘉将望步翳时5.21-6.10

总学时:IShb

3.编号:006徽拿料潦翳琲载吗:

总学时:16h

4.编号:007名称:酒文化与鉴赏类型:上课时间:5.20-6.23

总学时:18h授课学时:15h实验学时:3h

5.编号:008名称:论语类型:5.6-5.30较吗:学术类

接谏学时:实验学时:

总学时:13h13h0h

6.编号:010老舜二盘视名片锣a-类型:上课时间:5.10-6.2

总学时:12h佞棣学时:12h实验学时:0h.5

7.编号:015上课时间:5.7-5.30

总学时:15h12h学分:0.5

图5.6添加后的选修课

10

7.管理员删除选修课

图5.2选择删除选修课。输入要删除的选修课的编号,即可删除相应的选修

课。如图5.7所示。

c:\WC:XPrograaFiles\IicrosoftVisualStudio\lyProjectskbf\Debug\bf.exe-日日

菜单

添加选

修课

删除

查有

返回

2

.*

您A

功IM

图5.7管理员删除选修课

8.删除后的选修课信息

删除选修课后选择返回上一层,再选择显示全部选修课可以看到已删除的选

修课已删除成功。如图5.8所示。

I*C:\Progra>Files\licrosoftVisualStudio\ByProjects\bf\Debug\bf.exe*二叵3

请选接:3

1•.编石:001箫康言资震验学时手春上课时间:5.13-5.30

总学时:15h1

2编.号:006名称:数学建模类型:学术类上课时间:5.7-6.2

总学时:16h是谏学时:10b实验学时:6h学分:1

3编.号:007名称:酒文化与鉴赏类型:上课时间:5.20-6.23

总学时:18h授课学时二15h实验学时:3h1U

名称:论语类型:上课时间:学术关

008授谭学时:实验学时5:.6-。5卜.30率分:

13h13h1

5编.号:010鲁懿露初萧噩学时甥:上课时间:5.10-6.2

总学时:12h0.5

6编.号:015百膳类型:学术类上课时间:5.7-5.30

总学时:15h:12h实验学时:3h学分:0.5

图5.8删除后的选修课信息

II

9.学牛.选课系统

图5.1选择学生,然后输入学生的姓名及学号就能进入学生选课系统。如图

5.9所示。

上I,

图5.9学生选课系统

10.学生选课

以学生身份登录成功后,可以选择选课或是查询个人信息。选择选课可以选

择按学分选课、按课程类型选课或显示全部课程再进行选课。选择按学分选课,

再选艺术类,再输入课程编号即可选择相应课程。如图5.10所示。

□X

学分

查篡

1果

选修

示全

回上

12

I*C:\Progra>FilesMicrosoftVisualStudio\lyProjects\bf\Debug\bf.exe*■叵|x|

1.编号:003名称:音乐鉴赏类型:艺术类上课时间:5.21-6.10■

总学时:15h授谏学祖12h实验学时:3h学分:0.5

2编.号:007名称:酒文化与鉴赏类型:艺术类上课时间:5.20-6.23LJ

总学时:18h授课学时:15h实验学时:3b学短1

3编.号:010名称:聆时需学时错上课时间:5.10-6.2

总学时:12h授课学0.5

标想

第几

泞g1

。r

请输

/I靠

您是

彳、L/

第ny

」r

r勺

您想

:<y

4R讲

>:。

P选<1r

要6

请输

1/,V课

/4H

图5.10学生选课

11.学生信息

选择查看个人信息程序即打印出当前学生的相关信息。如图5.11所示。

1课

2人

U号

4F:

4名■

1-:5二

K的

5/修

名称

第氐

4赏

编0:

•.上课时间:5.21-6.10

3工03

H用

1酒h

^学.

-5h文3h0.5

12与

U0化

.各

-0?•中上课时间:5.20-6.23

-X812h时

8h雳

>总153h

1千

.5

图5.11学生信息

12.退出

图5.1选择退出即退出程序。如图5.12所示。

*C:\Progra>FilesMicrosoftVisualStudioMyProjects\bf\Debug\bf.exe*-n

tocontinue▼

图5.12退出程序

13

6总结与体会

6.1总结

本程序实现了学生选课及管理员对课程的操作功能,而学生的选课及管理员

对课程的管理,都可以按学分或类型来进行操作。管理员登录的默认密码是123,

管理员可以添加新的选修课课程,也可以删除原有的选修课。

经过此次的课程设计,我们受益颇丰,尤其是对在编写过程中遇到的难题的

处理方法,学会了很多程序设计的技巧。

6.2编写程序中遇到的问题及解决办法

(1)在无法与后台交互的情况下如何实现用户登录?

因为只需要管理员有对选修课操作的能力,因此不需储存管理员的信息,

只需在其登录前询问密码即可。而学生的登录,在其登录时分配一个对象空

间,储存在其登录时获取的学号及姓名即可,即每一个学生的登录相当于注

册过程”

(2)如何在不退出程序的情况下,能够让多位学生进行选课?

定义学生类对象数组,每一位学生选完课后,再分配一个新的学生类对

象空间。

(3)如何实现对学生对象中课程对象成员的覆盖?

一开始我们为了方便起见是考虑学生类课程对象定义为引用,这样只需

引用已有的选修课课程即可,但这样的话,在对学生对象初始化时引用的初

始化就成了问题,因此只能放弃。最终是选择了使用set和get方法对对象成

员的成员一个个覆盖。

14

参考文献

[1]黄维通.VisualC++面向对象与可视化程序设计(第2版).北京:清华大学出

版社,2007.

[21张乃孝,陈光,孙猛.算法与数据结构一一C语言描述(第三版),2011.

[3]谭浩强.C程序语言设计(第三版)[M].北京:清华大学出版社,2007.

[4]杨永斌.数据结构理论与实践[M].天津:科学技术出版社,2011.

[5]罗建军.C++程序射机枪教程(第2版).北京:高等教育出版社,2004.

[6]郑振杰.C++程序设计.北京:人民邮电出版社,2005.

[7]刘觉夫,王更生等.C++程序设计.北京:邮电大学出版社,2011.

[8]邵伟忠.C常用算法程序集.天津:人民出版社,2009.

[9]徐世亮.C++大学教程.北京:人民邮电出版社,2010.

[10]吴华恩.C++程序设计,北京:机械工业出版社,2008.

[111邵伟忠C常用算法程序集.天津:人民出版社,?009

15

附录源程序

#includc<iostrcam.h>

#include<string.h>

#defineM10

classCourse〃选修课课程类

{private:

char*id;

char*name;

char*nature;

char*date;

intshours;

intahours;

intzhours;

doublescore;

public:

Coursc()

(

id="unknown”;

name="unknown";

nature="unknown";

zhours=0;

shours=0;

ahours=0;

date="unknown";

score=0:

)

Course(char*a.char*b,char*c,char*d.inte,intf,doubleg)

(

id=a;

name=b;

nature=c;

date=d;

shours=c;

ahours=f;

score=g;

zhours=e+f:

)

voidset(char*a,char*b.char*c,char*d,inte,intf,doubleg>

(

id=a;

name=b;

16

nature=c;

date=d;

shours=e;

ahours=f;

score=g;

zhours=e+f;

)

char*getDate()

{returndate;}

intgetZhours()

{returnzhours;}

intgctShours()

{eturnshours;}

intgetAhours()

{returnahours;}

doublegetScore()

{returnscore;}

char*gctNaturcO

{returnnature;}

char*gctld()

{eturnid;}

char*getNameO

{returnname;}

voidprint()

(

coutvv"编号:"«id«'\t,;

cout<<"名称:"«name«''t';

coui«"类型:"«nature«'\c';

cout«”上课时间:"«date«endl;

cout«"总学时:”《zhours«'h'«V;

cout«”授课学时:"«shours«'h'«Y;

cout«"实验学时:"«ahours«'h1«'\f;

cout«"学分:"《score«endl;

)

);

classStudent〃学生类

(

private:〃学生选的课程是对象的成员

char*id;

char*name;

CoursecI;

17

Coursec2;

double/score;

public:

StudentO

{id="unknown";

name="unknown";

zscore=0;

)

voidsetld(char*al)

{d=al;}

voidsciNamc(char*al)

{name=a1;}

char*getName()

{returnname;}

voidprint()

(

cout«”\n学号:"«id«endl;

coutvv"姓名:"vvname«cndl;

cout«"您已选的选修课:\nl.";

cl.printO;

cout«"2.n;

c2.print();

cout«"选修课总学分:"«cl.getScore()+c2.getScore()«'\n'«endl;

I

voidsclcc(Coursc_l(Coursecc)〃修改对象的课程成员

(

cl.set(cc.getId(),cc.getNanie(),cc.getNature(),cc.getDate(),cc.getShours(),cc.getAhours().cc.g

etScoreO);

)

voidselectCourse_2(Coursecc)

(

c2.set(cc.getId(),cc.getNairie(),cc.getNature(),cc.getDate(),cc.getShours(),cc.getAhours(),cc.g

etScoreO):

}

);

voidselcctCourse(Studcn(sl[101.Coursecl[M].ints_nuin1)〃选课

(

charid[2][IO],selectl;

inti,j,k;

for(j=0;j<2;j++)

18

cout«”\n您想选您的第几门选修课(1or2):";

cin»k;

cout«”请输入您想要选的选修课的编号:”;

cin»id[j];

for(i=0;i<M&&cl[i\getScore()!=0;i++)〃扫描所有选修课,如果当前选修

课为空则跳出循环

(

if(strcmp(idlj],cli].getld())==0)

(

if(l==k)

(

sI[s_num1].selectCourse_1(c1[i]);

break;

1

if(2==k)

(

s1[s_numl].selectCourse_2(cl[i]);

break;

)

}

)

if(O==j)

(

8111«"\11您是否想要继续选课?(y/n):";

cin»select1;

if('n'==select1)break;

}

)

cout«”\n选课成功!"«endl;

}

voidsclcctScorc(Coursccl[MD//按学分行询选修课

(

intselect,num.i;

coui«”\n请输入选修课的学分:";

cout«"\ni.0.5\n2.1.0"«endl;

cout«"请选择:";

cin»select;

num=1;

if(l==select)

(

for(i=0;i<M&&cl[i.getScore()!=0;i++)

19

if(0.5==cl[i].getScore())

{

cout«num«

print。;

cout«endl;

num++;

elseif(2==select)

{

for(i=0;i<M&&cl[i\getScore()!=0;i++)

(

if(1.0==cI[i].getScore())

(

cout«num«

clliJ.printO;

cout«cndl;

num++;

}

)

)

elsecouivv"对不起,您的输入有误,请重新输入!\n\n";

)

voidselectNature(Coursecl(M))〃按类型查询选修课

{

intselect,num.i;

charnl[10]="艺术类”,n2[IO]="学术类”;

COUl«"请输入选修课的学分:";

cout«"\n1.艺术类\n2.学术类"《endl;

cout«"请选择:

cin»select;

num=1;

if(l==select)

(

for(i=0;i<M&&cl(i.getScore()!=0;i++)

I

if(strcmp(n1.cl[:].getNatureO)==0)

|

cout«num«

cl[i].prin(();

cout«endl;

num++;

20

elseif(2==select)

(

for(i=0;i<M&&cl[i;.ge(Score()!=0;i++)

(

if(strcmp(n2,cHJ.getNature())==0)

(

cout«num«

cl[i].print();

cou(«cndl;

num++;

)

)

)

elsecouiv〈"对不起,您的输入有误,请重新输入!\n\n";

)

voidxu(Courscc1[MJ)”当前所有选修课进行排序(编号从小到大)

{

inti,j,k=0.num=0;

Coursecc;

for(j=0;j<M&&cl[j].getScore()!=0:j++)

|

for(i=num;i<M&&cl[i].getScore()!=0;i++)

(

if(strcmp(c1(i].getld(),c1[i+1].getld())>0)

(

k++;

cc.set(cl(i].getId(),cl[i].getName(Xcl[i].getNature(Xcl[i].getDate(),cl[i].getShours(),cl[i].g

etAhours(),c1[i].getScore());

c1[i].set(cl[i+l].getld(),cl|i+l].getName(),c1[i+1].getNature(),cl[i+l].getDate(),cl[i+l].get

Shours(),cl[i+lJ.getAhours(),cl[i+l].getScore());

cl[i+l].set(cc.getId(),cc.getName(),cc.getNature(),cc.getDate(),cc.getShours(),cc.getAhours(

),cc.getScore());

}

elsek=2;

if(l==k)num=i;

}

k=0;

21

voidmenu(Coursecl[6],StudentsillOJ)〃菜单

(

intflagO,flag1,f)ag2,flag3,flag4,password=0;

intselect,s_num=0,i,j,num,newNuni;

charid[IO][IO];

charselect1;

charidHIO];

charname1[10];

charda[20];

charna[101;

intsh;

intah;

doublesc;

flagO=1;

while(flagO)

(

cout«"\n============"«cndl;

cout«菜单I"«endl;

cout«"============"«cndl;

cout«1.管理员I"«cndl;

cout«2.学生I"«endi;

coutvv3.退出I"«endl;

cout«"============"«endl;

cout«"\n请选择:";

cin»select;

switch(sclcc()

(

caseI:

flag3=1;

while(1)

(

coin<<"请输入密码(输入/退出):";

cin»password;

if(-l==password)

(

flag3=0;

break;

)

if(123==password)

cout«"\n管理员,你好!欢迎登录!"《cndl;

break;

22

cout«"密码错误,请重新输入!\n";

)

whilc(flag3)

(

cout«"\n================"«cndl;

cout«"|菜单I"«endl;

cout«"================"«endl;

cout«1.添加选修课I"«cndl;

cout«M|2.删除选修课I"«endl;

cout«3.查看选修课I"«endl;

cout«4.返回上一层I"«cndl;

cout«"================"«endl;

cout«"\n请选择:

cin»select;

switch(select)

(

case1:

newNum=0;

for(i=0;i<M&&cl(iJ.gctScorc()!=0;i++)ncwNum++;

cout<<"\n请按格式依次输入选修课的编号、名称、上

课时间(x.xx-x.xx)、类型(艺术类或学术类)、授课学时、实验学时、学分:"<vendl;

cin»idI»name1»da»na»sh»ah»sc;

cI[newNum].set(idl.naincl.da,na,sh.ah,sc);

xu(cl);

cout<<"添力口成功!"«endl;

break;

case2:

flag4=1;

j=0;

num=0;

while(flag4)

(

cout«”5请输入您想要删除课程的编号:";

cin»id|j];

for(i=0:i<M&&cl[i].gctScorc()!=0;i++)

温馨提示

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

评论

0/150

提交评论