C++学生选课管理系统.docx

上传人:b****7 文档编号:8713797 上传时间:2023-02-01 格式:DOCX 页数:36 大小:156.36KB
下载 相关 举报
C++学生选课管理系统.docx_第1页
第1页 / 共36页
C++学生选课管理系统.docx_第2页
第2页 / 共36页
C++学生选课管理系统.docx_第3页
第3页 / 共36页
C++学生选课管理系统.docx_第4页
第4页 / 共36页
C++学生选课管理系统.docx_第5页
第5页 / 共36页
点击查看更多>>
下载资源
资源描述

C++学生选课管理系统.docx

《C++学生选课管理系统.docx》由会员分享,可在线阅读,更多相关《C++学生选课管理系统.docx(36页珍藏版)》请在冰豆网上搜索。

C++学生选课管理系统.docx

C++学生选课管理系统

河南城建学院

 

《C++程序设计》课程设计

 

设计题目:

学生选修课程系统设计

指导教师:

郭力争刘荣辉薛冰

专业:

数学与应用数学

学生班级:

1314101

学生学号:

131410111

学生姓名:

刘亚欣

同组人:

李菲马小川

 

数理学院

2013年6月

1、课题目标

1.1设计要求

假定有n门课程,每门课程有课程编号,课程名称,课程性质,总学时,授课学时,实验或上机学时,学分,开课学期等信息,学生可按要求(如总学分不得少于10)自由选课。

试设计一个选修课程系统,使之能提供以下功能:

1.系统以菜单方式工作;

2.课程信息录入功能(课程信息用文件保存);

3.课程信息浏览功能;

4.查询功能(至少一种查询方式:

按学分查询、按课程性质查询);

5.学生选修课程。

1.2选题背景

当今时代是飞速发展的信息时代。

在各行各业中离不开信息处理,这正是计算机被广泛应用于信息管理系统的环境。

计算机的最到好处在于利用它能够进行信息管理。

使用计算机进行信息控制,不仅提高了工作效率,而且大大的提高了其安全性。

尤其对于复杂的信息管理,计算机能够充分发挥它的优越性。

计算机进行信息管理与信息管理系统的开发密切相关,系统的开发是系统管理的前提。

本系统就是为了管理好学生选课信息而设计的。

随着高校的多样全面发展,学生的人数和课程的种类急速增加,传统的选课管理模式已经无法满足当前的实际需求,学生选课作为一种信息资源的集散地,包含很多的信息数据的管理。

由于数据繁多,容易丢失,且不易查找。

并且数据处理手工操作工作量大,出错率高,出错后不易更改,造成各种不便,总的来说,缺乏系统,规范的信息管理手段。

尽管有的学校有计算机,但是尚未用于信息管理,没有发挥它的效力,资源闲置比较突出,这就是学生选课管理信息系统的开发基本环境背景。

1.3课题意义

基于以上问题,我们认为有必要建立一个学生选课管理信息系统,使学生选课信息管理工作规范化、系统化、程序化,以避免学生选课管理的随意性,提高信息处理的速度和准确性,能够及时、准确、有效的查询和修改选课情况。

系统实现后,极大的方便对学生进行选课和选课后班级的安排管理工作,学生选课信息的管理。

避免在安排课程信息的滞后,减少信息交流的繁琐过程及其带来的额外开销。

促进高校教育的计算机信息化进程,提高高校的工作效率。

并且对于系统本身而言,具有更高的使用性、安全性。

能够满足学生选课,以及学生对选课信息的管理。

同时,通过该课程设计,我们可以达到把C++程序设计理论知识更加的巩固加深,加强动手操作能力与实践能力,学以致用,与现实生活中的应用充分的结合起来,也实现了知识的活学活用。

1.4功能需求分析

一个完善的学生选课管理信息系统能够极大的提高学生选课信息的管理效率,具有检索迅速,查找方便,可靠性高,存储量大,更新快,寿命长,成本低等优点。

本系统主要可以实现以下任务目标:

1、系统可以准确的记录和查询学生、老师以及所开设的课程的基本信息

2、学生登录系统后可以根据本专业制定的教学计划进行选课操作,可以查询个人的基本信息

性能需求:

本学生信息管理系统要能够抵御用户可能的各种操作,包括修改、更新、删除等操作,以保证软件的可行性、稳定性、健壮性,同时要对数据进行检验,保证数据有效性,可操作性,安全性。

同时普通用户登录只有浏览的权限。

系统的非功能性需求:

实用性:

系统以用户需求为目标,以方便用户为原则。

根据用户实际的需求情况,度身订造一套先进的局域网数据传输,从用户角度出发尽可能的方便用户使用,满足基本的用户需要,成为学校等通用的网络软件。

高可靠性:

一个实用的系统同时必须是可靠的,本设计通过合理而先进的网络设计以及软、硬件的优化选型,可保证系统数据传输的正确性。

高安全性:

在设计中,将充分利用网络软、硬件提供的各种安全措施,既可以保证用户共享资源,同时也可保证关键数据的安全性。

可扩展性及灵活性:

系统的设计以方便未来业务的扩展和系统扩充为目标,系统要求能够方便的升级,充分保护系统的投资。

智能型:

系统在设计时,充分考虑系统运行的智能性,在使用系统一段时间后,系统可以适应于任何局域网。

1.5系统功能分析

根据设计要求,我们认为该系统应该包括:

(1)课程信息输入功能;

(2)课程信息浏览功能;(3)按学分查询功能;(4)按课程性质查询功能;(5)数据保存功能;(6)正确退出系统功能。

其中对于课程信息输入功能可以有两个实现途径:

①直接在系统中根据提示输入;②根据系统的功能在相应文件下建立text文件直接输入课程信息。

对于其余四个功能则主要是供学生选课使用。

本程序将课程性质统一规定为考试和考查两种;数据保存功能是为了保证在系统中直接输入的课程信息顺利保存到text文件。

 

2、程序具体实现原理

2.1总体方案

首先根据设计要求,我们定义了三个类:

Class类,Control类,Menu类。

Class类用来存放一系列课程的信息,以及一些获取信息的get函数;Control类是用来定义选课类的操作属性,从Control类里面来判断并实现用户所需要执行的动作;Menu类定义了菜单的操作,其中包括显示菜单,显示提示信息,获取用户从键盘输入的信息并执行。

针对Class类的定义,首先我们定义了一系列的设置相关课程信息的公有函数,用来将输入的内容传给私有函数,其次定义了常函数,目的是为了防止数据被其它函数调用时发生改变,同时将学分定义为浮点型,范围在0~10之间。

针对Menu类的定义,我们先定义了一个获取键盘输入的函数getInput(),用于获取数据,接着定义了界面友好的显示目录函数,使得用户进行操作更加方便,最后定义了一系列的显示提示信息函数。

为了使得在今后的修改中更加清楚方便,我们将这些函数独立分开。

针对Control类的定义,因为它的目的是用于判断并实现用户所要执行的操作,是学生选课系统的核心。

一切从start()函数开始,通过switch语句判断按下了哪个数字键,然后执行对应的操作,在文件录入这一方面,我定义了一个initIalization()函数,首先建立一个输入流,打开文件,将用户录入的课程信息放入到变量中,再由变量放入文件中。

其中的公有函数即课程设计所要求的功能部分:

添加选课,浏览选课,查询选课,保存文件。

私有函数我们用了链表,classList,用来一条一条记录课程信息,方便添加浏览以及查询。

两种查询方法都运用了迭代器的功能,迭代器的作用相当于指针,从链表的头部一个个指向链表的末尾,用于浏览以及查询部分。

最后把迭代器指向的对象每个字段写入文件中,文件名定义为classSave,保存到程序的当前目录下。

最后主函数的实现,代码十分简单,先定义一个Control类的对象,ControlClass,再通过controlClass.start()启动整个程序。

 

2.1.1开发平台

操作系统:

Win7

开发软件:

MirosoftVisualC++6.0

2.1.2基本原理

开始

进入系统界面

进入主菜单

课程信息浏览

按学分查询

退出

课程信息录入

信息存储

结束

按课程性质查询

2.1.3数据结构

表1数据结构表

数据名称

数据类型

解释

classNum

string

课程编号

className

string

课程名称

classProperties

string

课程性质

totalClassNumber

Int

总课时

currentClassNumber

Int

授课学时

expClassNumber

Int

上级或实验学时

credit

Double

学分

rightTerm

string

开课学期

2.1.4类的UML图

表2Class类的UML图

Class

-ClassNum:

string

-ClassName:

string

-ClassProperties:

string

-TotalClassNumber:

int

-currentClassNumber:

int

-ExpClassNumber:

int

-credit:

double

-rightTerm:

string

+setClassNum(classNumTemp:

string)

+setClassName(classNameTemp:

string)

+setClassProperties(classPropertiesTemp:

string)

+setTotalClassNumber(totalClassNumberTemp:

int)

+setCurrentClassNumber(currentClassNumber:

int)

+setExpClassNumber(expClassNumberTemp:

int)

+setCredit(credit:

double)

+setRightTerm(rightTermTemp:

string)

<>+getClassNum():

string

<>+getClassName():

string

<>+getClassProperties():

string

<>+getTotalClassNumber():

int

<>+getCurrentClassNumber():

int

<>+getExpClassNumber():

int

<>+getCredit():

double

<>+getRightTerm():

string

表3Menue类的UML图

Menue

<>+getInput():

char

<>+showMenu():

void

<>+clearScreen():

void

<>+pauseScreen():

void

<>+showAddClass():

void

<>+showBrowseClass():

void

<>+showSearchByCredit():

void

<>+showSearchByClassProperties():

void

<>+showAddClassNum():

void

<>+showAddClassName():

void

<>+showAddClassProperties():

void

<>+showAddCurrentClassNumber():

void

<>+showAddExpClassNumber():

void

<>+showLoadingSaving():

void

<>+showSuccessedSaving():

void

<>+showEachClassInfo(ClassclassTemp):

void

<>+quit():

void

表4Control类的UML图

Control

-classList:

list

+Control()

+Start():

void

+initIalization():

void

+addClass():

void

+quit():

void

+showAllClass():

void

+searchByCredit():

void

+searchByClassProperties():

void

+saveClass():

bool

2.1.5模块说明

(1)课程信息录入。

课程信息录入应包括:

课程编号、课程名称、课程性质、总学时、授课学时、实验学时、学分、开课信息八个成员,为录入以上信息,首先使用setClassNum、setClassName、setClassProperties、setTotalClassNumber、setCurrentClassNumber、setExpClassNumber、setCredit、setRightTerm输出提示信息,其次使用addClass函数添加课程信息。

(2)课程信息浏览。

该功能主要是读取所有的课程信息,在程序中首先通过getClassNum、getClassName、getClassProperties、getTotalClassNumber、getCurrentClassNumber、getExpClassNumber、getCredit、getRightTerm八个函数读取课程信息的相关信息,设置为静态成员函数,防止已录入的数据被篡改;其次使用showclass、showeachclassinfo函数显示全部课程信息。

(3)按学分查询。

首先使用getCredit函数得到课程的学分信息,其次使用searchByCredit函数输出“按学分查询”的提示信息;接着使用showAddCredit函数输出“请输入学分”的提示信息;最后使用showSearchByCredit函数将查询结果输出。

(4)按课程性质查询。

按照课程性质的查询实现了根据课程的性质对课程的查询,程序主要通过、showAddClassProperties、setClassProperties、getClassProperties、searchByClassProperties、showSearchByClassProperties、来实现对课程的查询,同样全部设置为静态成员函数,已经录入的数据部能被篡改,根据提示输入就能得到想要查询的内容。

(5)存储信息。

选择存储信息选项之后用showLoadingSaving函数进行数据的存储,显示正在存储数据。

数据存储完毕后用showSuccessedSaving函数显示输出数据存储完毕。

(6)退出系统。

一个完整的系统应该包括退出系统,在程序中使用quit函数,在按数字键6后给出提示信息:

“pressanykeytocontinue”提示使用者按任意键退出系统。

2.2程序各个功能说明

2.2.1程序结构

将class类的属性和行为进行封装:

1.Class的封装

classClass{//定义了课程类的一些属性

public:

voidsetClassNum(stringclassNumTemp);//课程编号

voidsetClassName(stringclassNameTemp);//课程名称

voidsetClassProperties(stringclassPropertiesTemp);//课程性质

voidsetTotalClassNumber(inttotalClassNumberTemp);//总学时

voidsetCurrentClassNumber(intcurrentClassNumber);//授课学时

voidsetExpClassNumber(intexpClassNumberTemp);//实验或上机学时

voidsetCredit(doublecredit);//学分

voidsetRightTerm(stringrightTermTemp);//开课信息

//录入函数设为常量函数防止信息被篡改

stringgetClassNum()const;//课程编号录入

stringgetClassName()const;//课程名称录入

stringgetClassProperties()const;//课程性质录入

intgetTotalClassNumber()const;//总学时录入

intgetCurrentClassNumber()const;//授课学时录入

intgetExpClassNumber()const;//实验或上机学时录入

doublegetCredit()const;//学分录入

stringgetRightTerm()const;//开课信息录入

//class类的私有成员

private:

stringclassNum;//课程编号

stringclassName;//课程名称

stringclassProperties;//课程性质

inttotalClassNumber;//总学时

intcurrentClassNumber;//授课学时

intexpClassNumber;//上级或实验学时

doublecredit;//学分

stringrightTerm;//开课学期

};

2.Menu类的封装

//menu类主要实现系统的主界面

classMenu{

public:

charstaticgetInput();

voidstaticshowMenu();//显示菜单

voidstaticclearScreen();//清屏

voidstaticpauseScreen();//暂停

voidstaticshowAddClass();//显示添加课程信息的提示语

voidstaticshowBrowseClass();//

voidstaticshowSearchByCredit();//显示按学分查询的提示语

voidstaticshowSearchByClassProperties();显示按课程性质查询的提示语

voidstaticshowAddClassNum();//显示输入课程编号的的提示语

voidstaticshowAddClassName();//显示增加课程名称的提示语

voidstaticshowAddClassProperties();//显示输入课程性质的提示语

voidstaticshowAddTotalClassNumber();//显示输入总学时的提示语

voidstaticshowAddCurrentClassNumber();//显示授课学时的提示语

voidstaticshowAddExpClassNumber();//显示输入实验学时的提示语

voidstaticshowAddCredit();//显示输入学分的提示语

voidstaticshowAddRightTerm();//显示开课学期的提示语

voidstaticshowLoadingSaving();//显示正在存储信息的提示语

voidstaticshowSuccessedSaving();//显示信息已成功存储

voidstaticquit();//退出系统函数

voidstaticshowEachClassInfo(ClassclassTemp);//调用class类中的对象显示信息

};

3.Control类的封装

classControl{//定义了选课类的操作属性

public:

Control(){}

voidstart();

voidinitIalization();

voidaddClass();

voidquit();//退出函数

voidshowAllClass();

voidsearchByCredit();

voidsearchByClassProperties();

boolsaveClass();

private:

listclassList;

};

2.2.2课程设计要求的实现

//Class类中各成员函数的实现

voidClass:

:

setClassNum(stringclassNumTemp){

this->classNum=classNumTemp;

}//设置课程编号的实现

voidClass:

:

setClassName(stringclassNameTemp){

this->className=classNameTemp;

}//设置课程名称的实现

voidClass:

:

setClassProperties(stringclassPropertiesTemp){

this->classProperties=classPropertiesTemp;

}//设置课程性质的实现

voidClass:

:

setTotalClassNumber(inttotalClassNumberTemp){

this->totalClassNumber=totalClassNumberTemp;

}//设置总学时的实现

voidClass:

:

setCurrentClassNumber(intcurrentClassNumber){

this->currentClassNumber=currentClassNumber;

}//设置授课学时的实现

voidClass:

:

setExpClassNumber(intexpClassNumberTemp){

this->expClassNumber=expClassNumberTemp;

}//设置上机或实验学时的实现

voidClass:

:

setCredit(doublecredit){

this->credit=credit;

}//设置课程学分的实现

voidClass:

:

setRightTerm(stringrightTermTemp){

this->rightTerm=rightTermTemp;

}//设置开课学期的实现

stringClass:

:

getClassNum()const{//设置为常函数防止数据改变

returnthis->classNum;

}

stringClass:

:

getClassName()const{

returnthis->className;

}

stringClass:

:

getClassProperties()const{

returnthis->classProperties;

}

intClass:

:

getTotalClassNumber()const{

returnthis->totalClassNumber;

}

intClass:

:

getCurrentClassNumber()const{

returnthis->currentClassNumber;}

intClass:

:

getExpClassNumber()const{

returnthis->expClassNumber;}

doubleClass:

:

getCredit()const{

returnthis->credit;}

stringClass:

:

getRightTerm()const{

returnthis->rightTerm;}

//Menu类各成员函数的实现

charMenu:

:

getInput(){//获取输入函数金融数学考试大三下

charkey=cin.get();

retu

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

当前位置:首页 > 初中教育 > 学科竞赛

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

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