《面向对象程序设计》课程设计

一、课程设计题目

结合实际,用面向对象程序设计的思想设计一个应用实例,要求用到下面设计要求中提到的知识点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。提高程序设计和调试能力。提高编程能力,学会书写课程设计

  • 课程设计内容

建立一个小学生的成绩管理系统包括:

学生的基本信息:姓名 学号 班级

基本操作:数据的录入

数据修改:错误数据的修改

数据删除:毕业学生,错误数据

数据插入:插入新学生

数据查询:按学号 姓名

数据排序:按学号或者总分或平均分

 

  • 整体设计(设计了哪些类,每个类的功能与声明,类之间的关系,继承关系需要画出相应DAG图)

类名为student:成员函数包括

  1. 显示内存动态数据记录函数

 函数原型  void    show();

 功能 显示内存你面的记录

 返回值 无返回值

  1. 查找记录函数

函数原型  void    search();

功能 根据关键字,查询是否存在需要的信息

返回值 无返回值

  1. 修改记录函数

函数原型void    change();

功能 修改指定的关键字

返回值 无

工作方式 根据指定的关键字,查找栈中符合的信息并显示信息

4.添加记录信息

函数原型 void    add();

功能 增加学生信息

5.将学生信息按照一定方法排序

函数原型 void    sort();

功能 将学生信息按一定次序排序后并输出

按学号 总成绩 或平均分

  1. 删除记录函数

 函数原型 void del()

 功能 删除内存中指定的信息

 返回值 无

  1. 输入信息函数

函数原型 void    input();

功能 添加新记录

工作方式 从尾部开始逐个追加记录

8.重载“<<”函数

函数原型 friend ostream &operator << (ostream &os, student &ob);

功能 重载“<<”

参数 对象的引用

返回值 返回输入值对象

工作方式 按定义实现多个数据的输出

  1. 重载“>>”函数

函数原型 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;

}

录入学生信息

 

  • 8
    点赞
  • 94
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值