课程
选
管理系统设计(私信我发源程序)
青岛理工大学
C++面向对象课程设计报告
院(系):
专业:
学生姓名:
班级 学号: 题目: 课程设计选题管理系统设计
起迄日期:
设计地点: 指 导 教 师:
完成日期: 年月日
《C++面向对象课程设计》任务书
一、课程设计目的与要求
1(课程设计目的
面向对象程序设计作为一门软件设计的课程,具有极强的实践性,必须使学生具备灵活应用理论知识的能力及面向对象程序设计技能。所以在《C++面向对象程序设计》课程学习完成后,安排课程设计教学环节。
通过课程设计,使学生实际掌握面向对象的程序设计方法,了解C++面向对象的设计方法与技巧,有效地、深刻地理解课程内容,体会理论、方法和设计原则;培养学生分析实际问题和解决问题的能力,使学生具备使用面向对象程序设计开发工具设计实际系统的能力。 2(课程设计要求
结构化程序设计使用的是功能抽象,面向对象程序设计不仅能进行功能抽象,而且能进行数据抽象。“对象”实际上是功能抽象和数据抽象的统一。C++语言的“对象”是“类”的实例,程序设计的基础是设计类,所以类的有关概念都是重点,尤其要抓住抽象、封装、继承和多态性等要素。
面向对象程序设计的核心是类层次的设计。而具体类的设计的重点是如何选择数据成员和成员函数。根据数据成员和成员函数的特点,结合具体问题设计合适的类。成员函数设计中的难点是选择函数类型及其参数传递方式。
开发系统离不开设计平台,学生应在掌握面向对象程序设计基础上,熟悉并能熟练使用面向对象程序设计开发平台,结合相关理论知识,进行相应系统开发。
利用所学的面向对象及C++编程知识和技巧,通过布置具有一定难度的程序设计题目,并且要求学生独立完成所布置题目,在分析设计过程中,要求学生养成良好的编程习惯,学会分析简单的实际问题,并能利用所学的知识建立系统的逻辑结构,学会程序调试方法和技巧。根据系统的功能要求,要求学生在教师的指导下逐步完成应用程序的设计。 (1)实行“以学生个别化学习为主,教师辅导为辅”的教学模式。
(2)了解面向对象的基本概念和使用面向对象技术进行程序设计的基本思想。 (3)能比较熟练地用C++语言进行一般面向对象程序设计。
(4)初步掌握面向对象编程环境Visual C++6.0的使用。
(5)该课程实践性较强,需要学生多作练习,要求辅导教师有比较熟练的编程经验,
并对Visual C++环境比较熟悉。
(6)课程设计需要提交的内容:
1)源程序; 2)执行程序; 3)设计文档; 4)测试记录。
其中1)、2)和3)三项刻在一张光盘上。
1
二、课程设计内容
题目13“课程设计选题管理系统设计”
1、问题描述
课程设计题目包括:编号、名称、关键词、实现技术、人员数(由几个人来完成)等信息。
学生信息包括:学号、姓名、性别、年龄、班级、专业等信息。
2、功能要求
(1)添加功能:程序能够添加学生的记录和课程设计题目记录,提供选择界面供用户选择所要添加的类别。添加记录时,要求学号和编号要唯一。如果添加了重复记录,则提示数据添加重复并取消添加。
(2)查询功能:可根据学号、姓名、编号、名称等信息对已添加的学生和课程设计题目进行查询,如果未找到,给出相应的提示信息,如果找到,则显示相应的记录信息。
(3)显示功能:可显示当前系统中所有学生的信息和课程设计题目信息,每条记录占据一行。
(4)编辑功能:可根据查询结果对相应的记录进行修改,修改时注意学号的唯一性。
(5)删除功能:主要实现对已添加的学生和课程设计题目记录进行删除。如果当前系统中没有相应的记录,则提示“记录为空~”并返回操作。
(6)统计功能:能根据多种参数进行统计。能按课程设计题目名称统计出学生选择该题目的人员的信息。
(7)保存功能:可将当前系统中各类记录存入文件中,存入方式任意。
(8)读取功能:可将保存在文件中的信息读入到当前系统中,供用户进行使用。 3、问题的解决方案
根据系统功能要求,可以将问题解决分为以下步骤:
(1)应用系统分析,建立该系统的功能模块框图以及界面的组织和设计;
(2)分析系统中的各个实体及它们之间的关系;
(3)根据问题描述,设计系统的类层次;
(4)完成类层次中各个类的描述;
(5)完成类中各个成员函数的定义;
(6)完成系统的应用模块;
(7)功能调试;
(8)完成系统总结报告。
三、课程设计报告
(1) 不少于5000字,可以使用统一的设计说明书稿纸(A4),亦可以自己打印(A4)。注意要双面打印。
(2) 主要内容及装订顺序:封面(统一提供)、目录、正文、参考文献。
(3) 正文部分应该包括:需求分析、总体设计、数据库设计(非数据库编程不需要)、程序模块设计(含功能需求、用户界面设计、程序代码设计与分析、运行结果,每个人可选择2个模块进行)、系统使用说明。
2
(4) 设计报告严禁抄袭,即使是同一小组也不允许雷同,否则按不及格论。
(5) 软件要求:最终的软件对问题的描述应正确无误,运行稳定、可靠,界面友好。
(6) 每人都需要交一份总结报告。
四、时间安排及考核方式
1(时间安排
设计时间为第17,18两周(6.29—7.10),7月8日开始可向指导教师提交报告、程序,并对设计内容进行答辩。
(1)分析设计准备阶段(6.29—7.1)
(2)编程调试阶段(7.2—7.7)
(3)总结报告和书写说明书阶段(7.8—7.9)
(4)考核阶段(7.10)
2(考核标准
采用答辩和设计报告相结合的考核方法对课程设计效果进行考核。其中课程设计报告不少于5000字)(占总成绩40%),答辩(占总成绩60%)。 (
(1)程序设计的可用性,实用性,通用性,可扩充性( 40% )。
(2)学生的动手能力,创新能力( 20% )。
(3)总结报告( 40% ) :包括系统设计要求,设计思路,系统功能模块图,系统
图,类的层次图(包括类成员列
),调试过程,关键程序代码,总结,参考书目。不符合以上要求者,则本次设计以不及格记。
主要考核学生的科学研发的基本知识和基本技能。考核共分五个等级,标准如下:
优秀:论述逻辑严谨,行文流畅,方案合理,创新点突出,完成题目指标。
良好:论述严谨,方案得当,特色鲜明,完成课题要求指标。
中等:论述合理,方案可行,完成题目要求。
及格:论述、行文不够严谨,基本完成题目要求。
不及格:论述、行文杂乱,没有完成题目要求。
五、主要参考文献
1(郑莉(C++语言程序设计(第3版)(北京:清华大学出版社,2005.7
2(钱能(C++程序设计
(第2版)(北京:清华大学出版社,2005.8
3. 黄维通. Visual C++面向对象与可视化程序设计(第2版).北京:清华大学出版社,2003.12
4. 刘路放. Visual C++与面向对象程序设计教程(第二版). 北京:高等教育出版社,2007.8
5. 潘爱民. COM原理与应用.北京:清华大学出版社,1999.11
3
一、需求分析
1.选做此课题或项的目的
在当前大学课程选课系统中,往往需要对学生进行编号以便于管理和统计工作。所以需要一套适合自身特点的管理系统能够使课程管理变得更有效率。所以本系统的目的在于可以很好的管理学生的选课信息,使得系统的功能和用途更加的全面和实用,这样将选课管理的多个功能合在一起可以避免用户使用起来的麻烦,使得可以更好的方便于使用者。
本课程设计的目的就是通过一次集中的强化训练,能及时巩固已学知识,补充未学但又必要的内容。进行课程设计目的在于加深对程序设计基础理论和基本知识的理解,促进理论与实践的结合,进一步提高程序设计能力。具体目的如下:
(1)更深入地理解和掌握该课程中的有关基本概念,程序设计思想和方法。
(2)培养综合运用所学知识独立完成课程设计的能力。
(3)可以将自己所学的知识运用在系统的实现。
(4)能够熟练掌握C++语言的基本知识和技能。
(5)基本掌握面向对象程序设计的基本思路和方法。
(6)能够运用面向对象(类和对象)的机制来实现系统功能。
(7)能够建立清晰的类与函数之间的关系,学会对函数调用的熟练使用。
(8)能够利用所学的基本知识和技能,解决简单的面向对象程序设计问题。
2.程序所实现的功能
(1)添加信息功能:程序能够添加学生的记录和课程设计题目记录,提供选择界面供用户选择所要添加的类别(如果添加了重复记录,则提示数据添加重复并取消添加)。
(2)查询信息功能:可根据学号、姓名、编号、名称等信息对已添加的学生和课程设计题目进行查询,如果未找到,给出相应的提示信息,如果找到,则显示相应的记录信息。
(3)修改信息功能:可根据查询结果对相应的记录进行修改。
(4)删除信息功能:实现对已添加的学生和课程设计题目记录进行删除(如果当前系统中没有相应的记录,则提示“记录为空~”并返回操作)。
(5)统计信息功能:能根据多种参数进行统计。能按课程设计题目名称统计出学生选择该题目的人员的信息。
(6)显示信息功能:可显示当前系统中所有学生的信息和课程设计题目信息。
(7)保存信息功能:可将当前系统中各类记录存入文件中,存入方式任意。
(8)读取信息功能:可将保存在文件中的信息读入到当前系统中,供用户进行使用。
(9)退出系统功能:可以通过选择此功能退出课程设计选题管理系统。
4
二、内容设计
1.根据所选题目,给出模块图
图2.1 系统模块图
5
2.画出主程序及其主要模块的流程图
图2.2 添加信息流程图
图2.3 查询信息流程图
6
图2.4 按学生学号查询流程图
图2.5 按学生姓名查询流程图
7
图2.6 按题目编号查询流程图
图2.7 按题目名称查询流程图
8
图2.8 修改信息流程图
图2.9 删除信息流程图
9
图2.10 统计信息流程图
图2.11 显示信息流程图
10
3.编写程序关键代码
(1)向文件写入数据,打开文本文档代码
void manage::write(int n) //向文件写入数据,打开文本文档
{
fstream myfile;
myfile.open("student.txt",ios::out|ios::binary);
//fstream myfile("student.txt",ios::out|ios::binary);
if(! myfile)
{
cout<<"该文件不能打开!"<
>count;
for(int i = 0; i <= count; i++)
{
myfile>>stu[i].student_id>>stu[i].student_name>>stu[i].sex>>stu[i].age>>stu[i].Class>>stu[
i].specialty>>stu[i].course_id
11
>>stu[i].course_name>>stu[i].keyword>>stu[i].technology>>stu[i].number;
cout<>stu[i].student_id;
cout<>stu[i].student_name;
cout<>stu[i].sex;
cout<>stu[i].age;
cout<>stu[i].Class;
cout<>stu[i].specialty;
cout<>stu[i].course_id;
cout<>stu[i].course_name;
cout<>stu[i].keyword;
cout<>stu[i].technology;
cout<>stu[i].number;
cout<>sign;
cout<<"____________________________________________________________________
______"<>c;
switch(c)
{
case 1: g.search_student_id();break;
case 2: g.search_student_name();break;
13
case 3: g.search_course_id();break;
case 4: g.search_course_name();break;
default: cout<<"输入错误,请重新输入~"<>s;
while((stu[i].student_id - s) != 0 && i < n) i++;
if(i == n)
{
cout<<"提示: 对不起,无法找到该学生的信息! "<>a;
for(int i = 0; i < n; i++)
if(strcmp(stu[i].student_name, a) == 0)
{
cout<<"\t\t\t\t"<<"查询信息如下:"<>b;
while((stu[i].course_id - b) != 0 && i < n) i++;
if(i == n)
{
cout<<"提示:对不起,无法找到该信息!"<>c;
for(int i = 0; i < n; i++)
if(strcmp(stu[i].course_name, c) == 0)
{
cout<<"\t\t\t\t"<<"查询信息如下:"<>s;
while((stu[i].student_id - s) != 0 && i < n) i++;
if(i == n)
{
cout<<"提示:对不起,无该学生的信息~~~"<>stu[i].student_id;
cout<>stu[i].student_name;
cout<>stu[i].sex;
cout<>stu[i].age;
cout<>stu[i].Class;
cout<>stu[i].specialty;
cout<>stu[i].course_id;
cout<>stu[i].course_name;
cout<>stu[i].keyword;
cout<>stu[i].technology;
cout<>stu[i].number;
cout<>c;
if(c == 'y')
{
cout<<"\t\t\t"<<"修改成功~"<>s;
while((stu[i].student_id - s) != 0 && i < n) i++;
if(i == n)
{
cout<<"提示:记录为空~~~"<>c;
for(int i = 0; i < n; i++)
if(strcmp(stu[i].course_name, c) == 0)
{
cout<<"\t\t\t"<<"你要统计的信息如下:"<>n;
manage g;
switch(n)
{
case 0:
cout<
#include
#include
#include
using namespace std; class Student
{
public:
int age; //年龄
int student_id; //学号
int course_id; //题目编号
char student_name[40]; //姓名
char sex[10]; //性别
char Class[40]; //班级
char specialty[40]; //专业
char course_name[40]; //题目名称
char keyword[40]; //关键词
char technology[40]; //实现技术
int number; //人员数 };
class manage //定义对象 {
public:
void add(); //添加学生信息
void search(); //查询信息函数
void search_student_id(); //按学号查询
void search_student_name(); //按学生姓名查询
void search_course_id(); //按题目编号查询函数
void search_course_name(); //按题目名称查询
void student_alter(); //修改学生信息
void student_delete(); //删除学生信息
void total(); //统计学生信息
31
void display(); //显示函数用来显示学生所有信息
void write(int n); //向文件写入数据,打开文本文档
int read(); //从文件读取函数
private:
Student stu[50];
};
void manage::write(int n) //向文件写入数据,打开文本文档
{
fstream myfile;
myfile.open("student.txt",ios::out|ios::binary);
//fstream myfile("student.txt",ios::out|ios::binary);
if(! myfile)
{
cout<<"该文件不能打开!"<>count;
for(int i = 0; i <= count; i++)
{
32
myfile>>stu[i].student_id>>stu[i].student_name>>stu[i].sex>>stu[i].age>>stu[i].Class>>stu[
i].specialty>>stu[i].course_id
>>stu[i].course_name>>stu[i].keyword>>stu[i].technology>>stu[i].number;
cout<>stu[i].student_id;
cout<>stu[i].student_name;
cout<>stu[i].sex;
cout<>stu[i].age;
cout<>stu[i].Class;
cout<>stu[i].specialty;
cout<>stu[i].course_id;
cout<>stu[i].course_name;
cout<>stu[i].keyword;
cout<>stu[i].technology;
cout<>stu[i].number;
cout<>sign;
cout<<"____________________________________________________________________
______"<>c;
switch(c)
{
case 1: g.search_student_id();break;
case 2: g.search_student_name();break;
34
case 3: g.search_course_id();break;
case 4: g.search_course_name();break;
default: cout<<"输入错误,请重新输入~"<>s;
while((stu[i].student_id - s) != 0 && i < n) i++;
if(i == n)
{
cout<<"提示: 对不起,无法找到该学生的信息! "<>a;
for(int i = 0; i < n; i++)
if(strcmp(stu[i].student_name, a) == 0)
{
cout<<"\t\t\t\t"<<"查询信息如下:"<>b;
while((stu[i].course_id - b) != 0 && i < n) i++;
if(i == n)
{
cout<<"提示:对不起,无法找到该信息!"<>c;
for(int i = 0; i < n; i++)
if(strcmp(stu[i].course_name, c) == 0)
{
cout<<"\t\t\t\t"<<"查询信息如下:"<>s;
while((stu[i].student_id - s) != 0 && i < n) i++;
if(i == n)
{
cout<<"提示:对不起,无该学生的信息~~~"<>stu[i].student_id;
cout<>stu[i].student_name;
cout<>stu[i].sex;
cout<>stu[i].age;
cout<>stu[i].Class;
cout<>stu[i].specialty;
cout<>stu[i].course_id;
cout<>stu[i].course_name;
cout<>stu[i].keyword;
cout<>stu[i].technology;
cout<>stu[i].number;
cout<>c;
if(c == 'y')
{
cout<<"\t\t\t"<<"修改成功~"<>s;
while((stu[i].student_id - s) != 0 && i < n) i++;
if(i == n)
{
39
cout<<"提示:记录为空~~~"<>c;
for(int i = 0; i < n; i++)
if(strcmp(stu[i].course_name, c) == 0)
{
cout<<"\t\t\t"<<"你要统计的信息如下:"<>n;
manage g;
switch(n)
{
case 0:
cout<