一、课程设计题目
结合实际,用面向对象程序设计的思想设计一个应用实例,要求用到下面设计要求中提到的知识点5个以上。
二、设计要求
通过此次课程设计,更好地掌握面向对象程序设计的基本概念及编程方法,进一步加深对继承性、多态性、抽象类、动态联编、重载、静态成员、静态成员函数、运算符重载、异常处理等知识点的理解,在实际运用中合理选用子对象、堆对象、对象数组、对象指针及对象引用等复杂对象。
三、几点说明
1.本次课程设计可以单人独立完成,也可以由两人合作完成,不允许3人及以上的合作。两人合作只提交一份文档。
2.6月8日提交,以《面向对象程序设计》各课堂的学生名单为准。
3.每一份课程设计文档包含:
(1) 设计报告,WORD文档
(2) 代码,CPP源代码(所有代码放在一个文件中),代码须在VC++6.0环境下编译运行
(3) 分工,WORD文档,两人合作时在此文档中写明各人分别承担了哪些工作,独立完成者不需要提交此项
3.将以上文档压缩打包,压缩包以“学号姓名”为文件主名,两人合作则一前一后排列两个人的学号姓名,提交压缩包后请主动跟班干部确认。
四、评分标准
对每一份完整的文档先按下面的方式计算总分,然后以60-69为及格,70-79为中等,80-89为良好,90-100为优秀登录成绩。合作完成者两人成绩相同。
只要应用实例是用面向对象程序设计的思想设计的,程序正确,并用到设计要求中提到的知识点5个,就可以得70分。应用实例是用面向对象程序设计的思想设计的,但用到的知识点少于5个,最多只能得60分。如果应用实例不是用面向对象程序设计的思想设计的,将不及格。
各知识点的说明正确,可增加10分。
知识点多余5个,可增加5分。
程序有实用性,可增加5分。
课程设计报告规范,可增加10分。
五、对雷同的处理
与他人设计内容相近部分达1/2及以上者视为抄袭(不区分抄与被抄,请保护好自己的作品。可以与他人交流思想,但具体内容必须自己完成),成绩为“不及格”。
培养应用《面向对象程序设计》设计方法及思想解决实际问题的能力,近一步理解课堂上抽象的知识和方法。如使同学们可以结合理论知识和方法,系统化,全面分析问题,并能独立设计解决实际问题的结构和算法。掌握使用面向对象程序设计语言C++,熟悉面向对象开发平台Visual C++6.0。提高程序设计和调试能力。提高编程能力,学会书写课程设计
建立一个小学生的成绩管理系统包括:
学生的基本信息:姓名 学号 班级
基本操作:数据的录入
数据修改:错误数据的修改
数据删除:毕业学生,错误数据
数据插入:插入新学生
数据查询:按学号 姓名
数据排序:按学号或者总分或平均分
类名为student:成员函数包括
函数原型 void show();
功能 显示内存你面的记录
返回值 无返回值
函数原型 void search();
功能 根据关键字,查询是否存在需要的信息
返回值 无返回值
函数原型void change();
功能 修改指定的关键字
返回值 无
工作方式 根据指定的关键字,查找栈中符合的信息并显示信息
4.添加记录信息
函数原型 void add();
功能 增加学生信息
5.将学生信息按照一定方法排序
函数原型 void sort();
功能 将学生信息按一定次序排序后并输出
按学号 总成绩 或平均分
函数原型 void del()
功能 删除内存中指定的信息
返回值 无
函数原型 void input();
功能 添加新记录
工作方式 从尾部开始逐个追加记录
8.重载“<<”函数
函数原型 friend ostream &operator << (ostream &os, student &ob);
功能 重载“<<”
参数 对象的引用
返回值 返回输入值对象
工作方式 按定义实现多个数据的输出
函数原型 friend istream & operator >>(istream& is, student &ob);
功能 重载“>>”
参数 对象的引用
返回值 返回输入值对象
工作方式 按定义实现多个数据的赋值,允许有空格的字符串
/****
***/显示
void show()
{
cout << left; //设置输出左对齐
cout << setw(10) << "学生学号"
<< setw(10) << "学生姓名"
<< setw(13) << "学生班级"
<< setw(12) << "语文成绩"
<< setw(12) << "数学成绩"
<< setw(12) << "英语成绩"
<< endl;
for (int i = 1; i <= n; i++)
{
cout << setw(10) << s[i].num
<< setw(10) << s[i].name
<< setw(13) << s[i].class1
<< setw(12) << s[i].chinese
<< setw(12) << s[i].math
<< setw(12) << s[i].english << endl;
}
cout << endl;
}
/*******查询
***/
void search()
{
int a, b, i; char c[20];
cout << "请选择查询方式:" << endl;
cout << "按学生姓名查询请按1" << endl;
cout << "按学生学号查询请按2" << endl;
cin >> a;
switch (a)
{
case 1:
{char sel;
do {
cout << "请输入你要查的学生的姓名:" << endl;
cin >> c;
for (i = 1; i <= n; i++)
if (strcmp(s[i].name, c) == 0)
{
cout << "你要查的学生信息为:" << endl;
cout << "学生学号:" << s[i].num << endl << "学生姓名:"
<< s[i].name << endl << "学生班级:"
<< s[i].class1 << endl << "语文成绩:"
<< s[i].chinese << endl << "数学成绩:"
<< s[i].math << endl << "英语成绩:"
<< s[i].english << endl;
break;
}
else if (strcmp(s[i].name, c) != 0 && i == n)
{
cout << "没有这个学生!" << endl; break;
}
cout << "是否要继续查询学生信息(Y/N):";
cin >> sel;
} while (sel == 'Y' || sel == 'y');
break;
}
/****
用学号查询
***/case 2:
{ char sel;
do {
cout << "请输入你要查的学生的学号:" << endl;
cin >> b;
for (i = 1; i <= n; i++)
if (s[i].num == b)
{
cout << "你要查的学生信息为:" << endl;
cout << "学生学号:" << s[i].num << endl << "学生姓名:"
<< s[i].name << endl << "学生班级:"
<< s[i].class1 << endl << "语文成绩:"
<< s[i].chinese << endl << "数学成绩:"
<< s[i].math << endl << "英语成绩:"
<< s[i].english << endl;
break;
}
else if (s[i].num != b&&i == n)
{
cout << "没有这个学生!请核对后再输入!" << endl; break;
}
cout << "是否要继续查询学生信息(Y/N):";
cin >> sel;
} while (sel == 'Y' || sel == 'y');
break; }
default:
cout << "您的输入有误!" << endl;
}
}
/*****
**修改
**/
void change()
{
{ char sel;
int d, i, e, f, g = 0;
do {
cout << "请输入你要修改的学生的学号:" << endl;
cin >> d;
for (i = 1; i <= n; i++)
if (s[i].num == d)
{
cout << "你要修改的学生信息为:" << endl;
cout << "学生学号:" << s[i].num << endl << "学生姓名:"
<< s[i].name << endl << "学生班级:"
<< s[i].class1 << endl << "语文成绩:"
<< s[i].chinese << endl << "数学成绩:"
<< s[i].math << endl << "英语成绩:"
<< s[i].english << endl;
e = 1;
break;
}
else if (s[i].num != d&&i == n)
{
cout << "没有这个学生!请核对后再输入!" << endl;
e = 0; break;
}
while (e == 1)
{
{cout << "请输入该学生要修改的信息对应的数字:" << endl;
cout << "学生学号:1"
<< '\t' << "学生姓名:2"
<< '\t' << "学生班级:3"
<< '\t' << "语文成绩:4"
<< '\t' << "数学成绩:5"
<< '\t' << "英语成绩:6" << endl;
}
cin >> f;
switch (f)
{
case 1:cout << "\t新的学生学号为:";
cin >> s[i].num; break;
case 2:cout << "\t新的学生姓名为:";
cin >> s[i].name; break;
case 3:cout << "\t新的学生班级为:";
cin >> s[i].class1; break;
case 4:cout << "\t新的语文成绩为:";
cin >> s[i].chinese; break;
case 5:cout << "\t新的数学成绩为:";
cin >> s[i].math; break;
case 6:cout << "\t新的英语成绩为:";
cin >> s[i].english; break;
default:cout << "您的输入有误,请重新输入!";
cin >> f;
}
e = 0;
g = 1;
}
if (g == 1)
{
cout << "修改成功!";
}
cout << "是否要继续修改学生信息(Y/N):";
cin >> sel;
} while (sel == 'Y' || sel == 'y');
}
}
/***
**增添新函数
**/
void add()
{
char sel;
do
{
n++;
cout << "\n请输入第" << n << "个学生信息:\n";
cout << "\t学生学号:";
cin >> s[n].num;
cout << "\t学生姓名:";
cin >> s[n].name;
cout << "\t学生班级:";
cin >> s[n].class1;
cout << "\t语文成绩:";
cin >> s[n].chinese;
cout << "\t数学成绩:";
cin >> s[n].math;
cout << "\t英语成绩:";
cin >> s[n].english;
cout << "是否要继续添加学生信息(Y/N):";
cin >> sel;
} while (sel == 'Y' || sel == 'y');
}
/****
***排序
***按学号 成绩 平均分 有小到大输出
**/
void sort()
{
int a;
cout << "请选择排序方式:" << endl;
cout << "1.按学号排序;" << endl
<< "2.按总成绩排序;" << endl
<< "3.按平均成绩排序;" << endl;
cin >> a;
switch (a)
{
case 1:
{int t = 0;
for (int i = 0; i < n - 1; i++)
for (int j = 0; j < n - i; j++)
if (s[j].num > s[j + 1].num)
{
t = s[j].num;
s[j].num = s[j + 1].num;
s[j + 1].num = t;
}
cout << "按学号排序结果:" << endl;
cout << left; //设置输出左对齐
cout << setw(10) << "学生学号"
<< setw(10) << "学生姓名"
<< setw(13) << "学生班级"
<< setw(12) << "语文成绩"
<< setw(12) << "数学成绩"
<< setw(12) << "英语成绩"
<< endl;
for (int i = 1; i <= n; i++)
{
cout << setw(10) << s[i].num
<< setw(10) << s[i].name
<< setw(13) << s[i].class1
<< setw(12) << s[i].chinese
<< setw(12) << s[i].math
<< setw(12) << s[i].english << endl;
}
}
break;
case 2:
{double t;
for (int i = 0; i < n - 1; i++)
{
for (int j = 0; j > n - i - 1; j++)
{
if (s[j].sum > s[j + 1].sum)
t = s[j].sum;
s[j].sum = s[j + 1].sum;
s[j + 1].sum = t;
}
}
cout << "按总成绩排序结果:" << endl;
for (int i = 1; i <= n; i++)
{
s[i].sum = (s[i].chinese + s[i].english + s[i].math);
s[i + 1].sum = s[i + 1].chinese + s[i + 1].english + s[i + 1].math;
cout << "学号:" << s[i].num << "\t" << "姓名:" << s[i].name << "\t" << "班级:" << s[i].class1 << "\t"
<< "语文成绩:" << s[i].chinese << "\t" << "数学成绩:" << s[i].math << "\t" << "英语成绩" << s[i].english << "\t总成绩" << s[i].sum << endl;
cout << endl;
}
}
break;
case 3:
{int t;
for (int i = 0; i < n - 1; i++)
{
for (int j = 0; j > n - 1 - i; j++)
{
s[j].aver1 = (s[j].chinese + s[j].english + s[j].math) / 3;
s[j + 1].aver1 = (s[j + 1].chinese + s[j + 1].english + s[j + 1].math) / 3;
if (s[j].aver1 > s[j + 1].aver1)
t = s[j].aver1; s[j].aver1 = s[j + 1].aver1; s[j + 1].aver1 = t;
}
}
cout << "按平均成绩排序结果:" << endl;
for (int i = 0; i < n; i++)
cout << "学号:" << s[i].num << "\t" << "姓名:" << s[i].name << "\t" << "班级:" << s[i].class1 << "\t"
<< "语文成绩:" << s[i].chinese << "\t" << "数学成绩:" << s[i].math << "英语成绩" << s[i].english << "\t平均成绩" << s[i].aver1 << endl;
cout << endl;
}
break;
default:
{cout << "您的输入有误!请重新输入!" << endl;
cin >> a;
}
}
/***
**输入信息函数
**/
void input() //录入学生信息的函数
{
char sel;
do
{
n++;
cout << "\t请输入第" << n << "个学生信息:\t" << endl;
s[n].set();
cout << "是否要继续录入学生信息(Y/N):";
cin >> sel;
} while (sel == 'Y' || sel == 'y');
}
}
ostream & operator<<(ostream & os, student & ob)
{
os << setw(10) << ob.num
<< setw(10) << ob.name
<< setw(13) << ob.class1
<< setw(12) << ob.chinese
<< setw(12) << ob.math
<< setw(12) << ob.english << endl;
return os;
// TODO: 在此处插入 return 语句
}
istream & operator>>(istream & is, student & ob)
{
is.getline(ob.name, 20, '\n');
is.getline(ob.class1, 20, '\n');
is >> ob.num;
is >> ob.chinese;
is >> ob.math;
is >> ob.english;
is >> ob.sum;
is >> ob.aver1;
return is;
// TODO: 在此处插入 return 语句
}
;
五、关键技术(结合设计中用到的知识点介绍)
六、测试(主函数与运行结果)
主函数main()
int main()
{
int select;
while (1)
{
system("cls");
cout << "\t ******************欢迎使用学生成绩管理系统*************************************\n";
cout << "\t &&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&\n";
cout << "\t &--------------------------****-----------------------------------------------*\n";
cout << "\t *-----------------------------------------------------------------------------*\n";
cout << "\t *---------------------------------@@@@@@主菜单@@@@@@@@@--------------------------*\n";
cout << "\t * 1——录入学生信息 *\n";
cout << "\t * 2——显示学生信息 *\n";
cout << "\t * 3——查询学生信息 *\n";
cout << "\t * 4——修改学生信息 *\n";
cout << "\t * 5——添加学生信息 *\n";
cout << "\t * 6——排序学生信息 *\n";
cout << "\t * 7——删除学生信息 *\n";
cout << "\t * 0——退出 *\n";
cout << "\t ******************* 欢迎使用学生成绩管理系统***********************************\n";
cout << "\t 你要输入的编号是(0--7):";
cin >> select;
if (select == 0) break;
switch (select) {
case 1:
input(); //调用input函数录入数据
system("pause");
break;
case 2:
show(); //调用show函数显示学生信息
system("pause");
break;
case 3:
search(); //调用search函数查询学生信息
system("pause");
break;
case 4:
change(); //调用change函数修改学生信息
system("pause");
break;
case 5:
add(); //调用add函数添加学生信息
system("pause");
break;
case 6:
sort(); //调用sort函数对学生信息进行排序
system("pause");
break;
case 7:
del(); // 调用del函数删除学生信息
system("pause");
break;
system("pause");
default:
cout << "没有此选项,请重新选择!" << endl;
}
}
return 0;
}
录入学生信息