课程设计说明书
题 目: 学生选课系统
课 程: C/C++课程设计
院 (部): 计算机科学与技术学院
专 业: 计算机科学与技术
班 级: 计科143
学生姓名: 肖洋
学 号: ***********
**** ***
完成日期: 2015//12//30
1、课程设计目的
本课程设计是计算机科学与技术专业重要的实践性环节之一,是在学习完《C/C++语言》课程后进行的一次全面的综合练习。本课程设计的目的和任务:(1)巩固和加深学生对C/C++课程的基本知识的理解和掌握;(2)掌握C/C++编程和程序调试的基本技能;(3)利用C/C++进行简单软件设计的基本思路和方法,初步理解面向过程和面向对象的编程思想;(4)提高运用C/C++解决实际问题的能力;(5)掌握书写程序设计说明文档的能力。(6) 培养实际操作能力,为以后的工作打下坚实的基础
2、课程设计任务
| 设计题目 | 学生选课系统 |
| 已知技术参数和设计要求 | 假定有N门课程,每门课程有课程编号,课程名称,课程性质,学时,授课学时,实验或上机学时,学分,开课学期等信息,学生可按要求(如总学分不得少于15)自由选课。试设计一个选修课程系统,使之能提供以下功能: 1、系统以菜单方式工作 2、课程信息和学生选课信息录入功能(课程信息用文件保存) 3、课程信息浏览功能 4、查询功能 5、按学分查询 6、某门课程学生选修情况(可选项) |
| 设计内容与步骤 | 1、模块化程序设计。 2、具体数据结构的定义及其处理数据算法的设计。 3、锯齿型程序书写格式。 4、程序设计、实现、调试。 5、课程设计说明书。 |
| 设计工作计划与进度安排 | 1、程序设计10学时。 2、实现与调试6学时。 3、课程设计说明书4学时。 |
| 设计考核要求 | 1、考勤20%。 2、课程设计说明书50%。 3、答辩、成果演示30%。 |
3、学生选课系统
3.1 问题描述与功能设计
第一步: 分析问题
a)对于不同的函数,luru(),luru2(),xxqingkuang(),liulan(),find(),确定要产生的数据(输出),应定义表示输入和输出的各种符合类型的变量。
c)根据需要,定义结构体,并通过顺序操作,通过循环操作 完成包括许多文本和图象处理操作。
| Struct kech[N] | 课程的结构数组 |
| char name[10]; | 课程名称 |
| 课程性质 | |
| 课程编号 | |
| 学时 | |
| 授课学时 | |
| 实验或上机学时 | |
| int begintime; | 开课学期 |
| 学分 | |
| int people; | 该课程选课人数 |
| Struct xuanke[N] | 选课信息的结构数组 |
| double xuehao ; | 学号 |
| int bianhao[10] | 选课课程编号 |
| 可获得学分 |
录入课程信息(并保存文件):
录入学生选课信息(也可以保存在文件中)
课程信息浏览功能
按学分查询功能
某门课程学生选修情况功能
各种功能之间以菜单方式工作,实现信息对信息的灵活获取和操作。
3.2 概要设计
总体框图
3.3 详细设计
流程图
3.4测试数据与测试情况
4、参考文献
[1] 何钦铭、颜晖著,C语言程序设计,高等教育出版社,2011年12月。
[2] 杜茂康、李昌兵著,C++面向对象程序设计(第二版),电子工业出版社,2009年11月。
[3] 钱能,C/C++程序设计教程(修订版)—设计思想与实现,清华大学出版社,2013年1月。
[4] 郑秋生:C/C/C++程序设计教程,电子工业出版社,2007年10月。
5、课程设计总结
通过这次课程设计,认识了C语言结构的用法和各种流程的控制输出样式:
1、设计课程结构和学生选课的结构元素时应考虑存储字节大小其中char型数组,整型数据,其中存储学号的整形数组在存储例如20141111099学号时内存不足会导致运行出错。
2、对异常的处理能力也得到提升,在按学分查询课程时,首先没有录入数据时应该输出“你还没有录入课程”其次查询录入的数据中,如果存在则输出在该结构数组,如果不存在则输出“没有该课程”。
3、在一次次的修改文件的执行代码和编辑时,在菜单显示的功能上也需要排列整齐和有序,在完成设计功能的同时也增加了一些相应的小功能,对学生的选课信息进行可获得学分的计算。
4、通过本次课程设计也培养了我思考、综合运用所学有关相应知识能力,掌握工程软件设计的基本方法,强化上机动手编程能力,闯过理论与实践相结合的难关。在这次课程设计中也知道了自己的动手能力不强有待进一部的提高,只是掌握的还不够,还需强化知识。
6.附件(源程序)
#include #include #include using namespace std; #define N 5 struct kech { //定义课程结构 char name[10]; //课程名称 char xz[20]; //课程性质 int num; //课程编号 int time; //学时 int Atime; //授课学时 int Btime; //实验或上机学时 int score; //学分 int begintime; //开课学期 int people; }kech[N]; struct xuanke { //定义学生选课结构 double xuehao; //学号 int bianhao[10]; //选课编号 int hdxf; //可获得学分 }xuanke[N]; int subject = 0, index = 0; void luru() //录入课程信息 { int i = subject; ofstream ofile("e:\\\\ksfiles\\\ext.txt", ios::app); cout << "/******请输入课程信息******/\\n"; cout << "课程编号:"; //输入课程编号 cin >> kech[i].num; ofile << kech[i].num << " "; cout << "课程名称:"; //输入课程名称 cin >> kech[i].name; ofile << kech[i].name << " "; cout << "课程性质:"; //输入课程性质 cin >> kech[i].xz; ofile << kech[i].xz << " "; cout << "总学时:"; //输入总学时 cin >> kech[i].time; ofile << kech[i].time << " "; cout << "授课学时:"; //输入授课学时 cin >> kech[i].Atime; ofile << kech[i].Atime << " "; cout << "实验或上机学时:"; //输入实验或上机学时 cin >> kech[i].Btime; ofile << kech[i].Btime << " "; cout << "学分:"; //输入学分 cin >> kech[i].score; ofile << kech[i].score << " "; cout << "开课学期:"; //输入开课学期 cin >> kech[i].begintime; ofile << kech[i].begintime << " "; kech[i].people = 0; ofile << kech[i].people << endl; ofile.close(); subject++; } void luru2() //录入学生选课信息 { int i = index; int n; if (subject == 0) { cout << "你还没有录入课程信息!" << endl; //异常处理 return; } ofstream open("e:\\\\ksfiles\\\\class.txt", ios::app);//保存文件 cout << "/******请输入选课学生信息******/" << endl; cout << "学生学号:"; //输入学号 cin >> xuanke[i].xuehao; open << xuanke[i].xuehao << " "; cout << "请输入该生所选课程数量:"; cin >> n; int j = 0; int panduan = 0; xuanke[i].hdxf = 0; while (j != n) { cout << "第" << j + 1 << "个课程编号: "; cin >> xuanke[i].bianhao[j]; open << xuanke[i].bianhao[j] << " "; for (int k = 0;k if (xuanke[i].bianhao[j] == kech[k].num) { panduan = 1; xuanke[i].hdxf += kech[k].score; kech[k].people++;//对可获得学分进行计算 } } if (panduan == 0) cout << "该课程编号不存在!请重新输入" << endl; //异常处理 else j++; } cout << "该学生可获得" << xuanke[i].hdxf << "学分" << endl; open << xuanke[i].hdxf << endl; open.close(); index++; } void liulan() //浏览课程信息 { int i; if (subject != 0) { cout << endl << "课程编号 课程名称 课程性质 总学时 授课学时 实验或上机学时 学分 开课学期" << endl; //*输出信息 for (i = 0;i cout << " " << kech[i].num << "\ " << kech[i].name << "\ " << kech[i].xz << " \" << kech[i].time << " \" << kech[i].Atime << " \" << kech[i].Btime << "\ " << kech[i].score << "\ " << kech[i].begintime << endl; } } else { cout << "你还没有录入课程信息!" << endl; //异常处理 return; } } int find() // 查询功能 { int s; int panduan = 0; cout << "请输入你所要查询课程的学分为:"; cin >> s; if (subject == 0) cout << "你还没有录入课程信息!" << endl; //异常处理 else { for (int i = 0;i if (s == kech[i].score) { panduan = 1; cout << endl << "课程编号 课程名称 课程性质 总学时 授课学时 实验或上机学时 学分 开课学期" << endl; cout << " " << kech[i].num << "\ " << kech[i].name << "\ " << kech[i].xz << " \" << kech[i].time << " \" << kech[i].Atime << " \" << kech[i].Btime << "\ " << kech[i].score << "\ " << kech[i].begintime << endl; } } if (panduan == 0) cout << "没有该学分的课程!" << endl; //异常处理 } return -1; } void xxqingkuang() //某课程的选课情况统计 { int m; int panduan = 0; cout << "请输入您要查询的的课程编号:"; cin >> m; if (subject == 0) cout << "你还没有录入课程信息!" << endl; //异常处理 else for (int i = 0;i if (m == kech[i].num) { panduan = 1; cout << "该课程的选课人数为 " << kech[i].people << "人" << endl; } } if (panduan == 0) cout << "抱歉,还没有该课程编号!" << endl; //异常处理 } void main() //主函数 { int choice = 0; while (choice != 6) { cout << "/*************欢迎使用本系统,请根据需要进行操作!*************/" << endl; cout << "/**********主菜单**********/" << endl; cout << "1.课程录入" << endl; cout << "2.课程浏览" << endl; cout << "3.课程查询" << endl; cout << "4.学生选课" << endl; cout << "5.学生选修情况" << endl; cout << "6.系统退出" << endl; cout << "请选择:" << endl; cin >> choice; switch (choice) { case 1: luru(); break; case 2: liulan(); break; case 3: find(); break; case 4: luru2();break; case 5: xxqingkuang(); break; case 6: cout << "/*************感谢使用本系统!*************/\\n"; break; default: cout << "选择错误,请重新选择!" << endl; } } }下载本文