c++课设
- 格式:doc
- 大小:624.50 KB
- 文档页数:17
辽宁工业大学《C++语言程序设计》课程设计(论文)题目:学生选课系统院(系):软件学院专业班级:起止时间:2010.12.20-2010.12.31课程设计(论文)任务及评语目录第1章课程设计目的与要求 (1)1.1 课程设计目的 (1)1.2 课程设计的实验环境 (1)1.3 课程设计的预备知识 (1)1.4 课程设计要求 (1)第2章课程设计内容 (2)2.1 C++语言程序设计------《学生选课系统》问题分析。
(2)2.1.1 功能分析 (2)2.1.2 算法设计及程序设计中技术重点 (2)2.2 程序中涉及的类的UML类图和主要函数流程图或框图。
(4)2.2.1 系统的UML类 (4)2.2.2 主要函数流程图 (5)2.3 程序源代码 (6)2.4 程序运行结果 (11)第3章课程设计总结 (13)参考文献 (14)第1章课程设计目的与要求1.1 课程设计目的将理论教学中涉及到的知识点贯穿起来,对不同的数据类型、程序控制结构、数据结构作一比较和总结,结合设计题目进行综合性应用,对所学知识达到融会贯通的程度。
通过课程设计,学生在下述各方面的能力应该得到锻炼:(1)进一步巩固、加深学生所学专业课程《C++语言教程》的基本理论知识,理论联系实际,进一步培养学生综合分析问题,解决问题的能力。
(2)全面考核学生所掌握的基本理论知识及其实际业务能力,从而达到提高学生素质的最终目的。
(3)利用所学知识,开发小型应用系统,掌握运用C++语言编写调试应用系统程序,训练独立开发应用系统,进行数据处理的综合能力。
(4)对于给定的设计题目,如何进行分析,理清思路,并给出相应的数学模型。
(5)掌握面向对象程序设计的方法。
(6)熟练掌握C++语言的基本语法,灵活运用各种数据类型。
(7)进一步掌握在集成环境下如何调试程序(单步调试,设置断点、观察表达式,分块调试)和修改程序。
1.2 课程设计的实验环境硬件要求能运行Windows 操作系统的微机系统。
C++语言应用程序开发软件使用:VC++ 系统,或其他C++语言应用程序开发软件。
1.3 课程设计的预备知识熟悉C++语言程序设计的基本知识及VC++编辑器的使用方法。
1.4 课程设计要求1. 仔细分析设计题目,画出程序流程图,编写程序源代码。
2. 积极上机调试源程序,增强编程技巧与调程能力。
3. 认真书写课程设计预习报告,课程设计说明书。
4. 遵守课程设计要求和机房管理制度,服从指导教师的安排,确保课程设计的顺利完成课程设计内容。
对于综合课程设计根据题目要求做出系统分析与设计,包括:系统总体框架、系统功能模块、系统关键算法流程图等。
对其相应部分的设计出相应的学时编写源程序代码;根据系统功能对系统提供的所有功能进行测试,并写出系统调试报告;由学生对本次综合课程设计做出个人总结。
第2章课程设计内容2.1 C++语言程序设计------《学生选课系统》问题分析。
随着学校规模的不断扩大,专业、班级、学生的数量急剧增加,有关学生选课的各种信息量也成倍增长,而目前许多高校的学生选课管理仍停留在复杂的人工操作上,重复工作较多,工作量大,效率低,因此,迫切需要开发基于互联网的体育课信息管理系统来提高管理工作的效率。
基于互联网的学生选课管理系统,在学生选课的规范管理、科学统计和快速查询方面具有较大的实用意义。
它提高了信息的开放性,大大地改善了学生、教师对其最新信息查询的准确性。
2.1.1功能分析1. 学生选课系统完成录入课程基本信息操作、浏览课程基本信息操作、课程基本信息操作、选修课程、修改选修课程、查找已选修的课程等功能的设计与实现。
主要功能的实现如下:(1)录入课程基本信息系统将管理员输入新添加的课程息,插入在链表中。
(2)浏览课程基本信息首先由管理员输入要删除课程的课程名,然后调用删除函数,删除该课程的资料。
(3)查找课程基本信息首先由管理员输入要查找课程的课程名,然后系统用查找函数查找,然后系统就调用输出函数,输出所查找的课程资料。
(4)修改首先由管理员输入要修改的课程名,然后系统用修改函数查找,显示该课程的资料,然后系统提示用户输入需要修改的项目和新的资料。
(5)其他功能在上述功能的基础上进行进一步完善。
2.1.2 算法设计及程序设计中技术重点该程序采用的是结构体类型来处理学生选课的基本信息,如下所述。
1、算法设计方面:本系统在算法方面采用了类的概念,其中有类的定义,结构体变量的定义和排序的算法等等,在排序模块利用了排序的某种方法,能够很稳定的对数据进行查找,在程序中还使用了函数的实参和形参的调用方法,来判断值是否重复。
本程序的技术重点在于:(1)学生类(student)的定义。
(2)学生信息结构体变量(studentrecord)的定义。
(3)课程类(course)的定义(4)课程信息结构体变量(courserecord)的定义。
本系统还采用的数据存储模式,系统在该模式下对数据进行插入和修改,单链表模式的好处是节省存储空间,数据的连贯性好。
本系统的特点为存储的数据会生成外部的一个文件,让用户或管理员去调用这个文件实现插入、修改和查询的功能。
2、程序设计中的难点部分:在程序设计的过程中,比较难设计的是功能抽象成类的过程,在本程序中包括了两个类,即student类和course类。
两个类都是将事务进行抽象和实现系统功能的类,抽象成了一个类,实现的基本特征的类。
2、派生类如果需要,派生类可以从多个基类继承,也就是多重继承。
通过继承,派生类自动得到了除基类私有成员以外的其它所有数据成员和成员函数,在派生类中可以直接访问,从而实现了代码的复用。
3、派生类是继承原有类的特性而生成的新类的名称。
一个派生类可以同时有多个基类,这种情况称为多继承,这时派生类只有一个直接基类的情况,称为单继承。
单继承可以看作是多继承的一个最简单的特例,多继承可以看作是多个单继承的组合,它们之间的很多特性是相同的。
在派生过程中,派生出来的新类也同样可以作用基类再继承派生新的类,此外,一个基类可以同时派生出多个派生类。
也就是说,一个类从父类继承来的特征也可以被其他新的类所继承,一个父类的特征,可以同时被多个子类继承。
这样,就形成了一个相互关联的类的家族,有时也称作类族。
类的组合组合构造函数定义的一般形式为:在创建一个组合类的对象时,不仅它自身的构造函数将被调用,而且还将调用其内嵌对象的构造函数。
这时构造函数的调用顺序是:调用内嵌对象的构造函数,调用顺序按照内嵌对象在组合类的定义中出现的次序。
执行本类构造函数的函数体。
4、数据类型的应用bool类型的应用有几个模块使用的为bool类型的存储,bool在C++里是占用1字节,而BOOL是int 类型,int类型的大小是视具体环境而定的;所以来说:false/true只占用1个字节,而TRUE/FALSE视具体环境而言的。
bool course::search ()这里我应用C++中的bool 类型来存储课程名。
5.应用fstream类对C++进行文件操作在程序中我应用了:ifstream infile;infile.open("pstuData.txt");这些都用到了fstream类中的属性,可以对C++进行文件读取操作。
<fstream>库包含了三个基本的类:ifstream, ofstream和fstream。
这三个类分别代表一个输入文件,一个输出文件,以及一个输入输出文件。
Ifstream类支持>>操作符,ofstream类支持<<操作符,fstream类同时支持>>和<<操作符。
所有<fstream>对象都能够把一个文件名当成构造函数的变量,并能够自动的打开文件,如:std::ofstream dictionary("myfile.txt");<fstream>类的析构函数自动地添加清除文件内容并关闭文件,所以当你忘记关闭文件时也无大碍。
如果在构造函数中不提供一个文件名,可以通过调用open()成员方法来打开文件,如下所示: std::ofstream dictionary; dictionary.open("myfile.txt"); dictionary.close(); //explicit文件打开模式:如果不具体指明文件的打开模式,fstream类会使用缺省模式。
例如,ifstream在缺省情况下会以读的模式打开一个文件,并把文件指针定在文件的起始处。
同样的,ofstream在缺省情况下也是以读的模式打开一个文件。
你可以通过使用OR操作符设置多个标记,如下所示:ofstream logfile("login.dat", ios::binary|ios::app);下面是包含的库函数:#include<iostream>#include<fstream>#include<string>2.2 程序中涉及的类的UML类图和主要函数流程图或框图。
2.2.1 系统的UML类统一建模语言(UML)是用来对软件密集系统进行描述、构造、视化和文档编制的一种语言。
UML建模的具体占先式实时内核概述占先式实时内核具有多任务机制。
UML是一种定义良好、易于表达、功能强大且普遍适用的建模语言。
它溶入了软件工程领域的新思想、新方法和新技术。
它的作用域不限于支持面向对象的分析与设计,还支持从需求分析开始的软件开发的全过程。
多任务机制是基于面向任务对象的,以任务为对象,以事件和时间为驱动,通过实时内核管理时间关键任务和任务的优先级,实现任务之间的调度、协同和仲裁。
多任务机制的具体实现由调度程度来完成。
下图为系统的UML图图2.1类的UML图2.2.2主要函数流程图下图为系统的功能模块图图2.2系统功能模块图2.3 程序源代码student::choice(){cout<<"******欢迎进入选课主页******"<<endl; ifstream infile("D:zlz_1.txt",ios::binary);if(!infile){cerr<<"不能打开zlz_1.txt文件!!!"<<endl; exit(1);}ofstream f1("D:zlz_2.txt");if(!f1) {cerr<<"不能打开zlz_2.txt文件!!!"<<endl;exit(1);}cout<<"请输入名字:";cin>>name;cout<<"请输入学号:";cin>>num;char a[20];char m;do{cout<<"请输入所要选择的课程名称:";cin>>a;while(!infile.eof()){infile.read((char *)&cour,sizeof(cour));if(strcmp(cour.program,a)==0){number=cour.number; strcpy(program,cour.program); strcpy(xz,cour.xz);time=cour.time;strcpy(period,cour.period); }stu.num=num;strcpy(,name);stu.number=number;strcpy(stu.program,program);strcpy(stu.xz,xz);stu.time=time;strcpy(stu.period,period);f1.write((char *)&stu,sizeof(stu)); }cout<<"是否继续选课(Y/N):";cin>>m; }while(m=='Y'||m=='y');infile.close();f1.close();return 0;}int student::moditify(){char a[20];int n=0;ifstream f1("D:zlz_2.txt",ios::in);if(!f1) { cerr<<"不能打开zlz_2.txt文件!!!"<<endl; exit(1);}while(!f1.eof()){f1.read((char *)&stu,sizeof(stu));num=stu.num;strcpy(name,);number=stu.number;strcpy(program,stu.program);strcpy(xz,stu.xz);time=stu.time;strcpy(period,stu.period);s[n].num=num;strcpy(s[n].name,name);s[n].number=number;strcpy(s[n].program,program);strcpy(s[n].xz,xz);s[n].time=time;strcpy(s[n].period,period);n++;}f1.close();ofstream f2("D:zlz_2.txt");if(!f2){ cerr<<"不能打开zlz_2.txt文件!!!"<<endl; exit(1);}for(int i=0;i<n;i++){f2.write((char *)&s[i],sizeof(s[i]));}f2.close();ifstream f4("D:zlz_2.txt",ios::in);if(!f4 {cerr<<"不能打开zlz_2.txt文件!!!"<<endl;exit(1); }cout<<"请输入名字:";cin>>name;cout<<"请输入学号:";cin>>num;cout<<"请输入所要修改的课程名称:"; cin>>a;int i;for(i=0;i<1000;i++){f4.read((char *)&s[i],sizeof(s[i]));if(strcmp(cour.program ,a)==0){number=s[i].number;strcpy(program,s[i].program);strcpy(xz,s[i].xz);time=s[i].time;strcpy(period,s[i].period);cout<<number<<" "<<program<<" "<<xz<<" "<<time<<" "<<period<<endl;}}cout<<"请输入你重新选修的课程:";cin>>a;for(int j=0;j<n;j++){f4.read((char *)&s[i],sizeof(s[i]));if(strcmp(s[i].program ,a)==0){number=s[j].number;strcpy(program,s[j].program);strcpy(xz,s[j].xz);time=s[j].time;strcpy(period,s[j].period);} }s[i].num=num;strcpy(s[i].name,name);s[i].number=number;strcpy(s[i].program,program);strcpy(s[i].xz,xz);s[i].time=time;strcpy(s[i].period,period);f4.close();ofstream f3("D:zlz_2.txt");if(!f3){cerr<<"不能打开zlz_2.txt文件!!!"<<endl;exit(1);}for(i=0;i<n;i++){f3.write((char *)&s[i],sizeof(s[i]));}return n;}void student::list(){int i;ifstream f1("D:zlz_2.txt",ios::in);if(!f1){cerr<<"不能打开zlz_2.txt文件!!!"<<endl;exit(1);}ut<<"请输入名字:";cin>>name;cout<<"请输入学号:";cin>>num;cout<<"课程号"<<" "<<"课名称"<<" "<<"课性质"<<" "<<"总学时"<<" "<<"开课学期"<<endl;for(i=0;i<moditify();i++){f1.read((char *)&s[i],sizeof(s[i]));if(strcmp(s[i].name,name)==0 && s[i].num==num){number=s[i].number;strcpy(program,s[i].program);strcpy(xz,s[i].xz);time=s[i].time;strcpy(period,s[i].period);cout<<number<<" "<<program<<" "<<xz<<" "<<time<<" "<<period<<endl; }}f1.close();}/////////////// 主函数////////////////int main(){int m;course t1;student t2;cout<<endl<<"==============================";cout<<endl<<"======== 学生选课系统========";cout<<endl<<"==============================";while(true){cout<<endl<<endl<<"***** 请选择操作*****"<<endl;cout<<"1 录入课程基本信息"<<endl;cout<<"2 浏览课程基本信息"<<endl;cout<<"3 查找课程基本信息"<<endl;cout<<"4 选修课程"<<endl;cout<<"5 修改选修课程"<<endl;cout<<"6 查找已选修的课程"<<endl<<endl;cout<<"请输入数字:";cin>>m;while(m<0 || m>6){cout<<"输入有误,请重新输入:";cin>>m;}if(m==1) t1.enter(); //录入else if(m==2) t1.disply(); //显示else if(m==3) t1.search(); //查找课程else if(m==4) t2.choice(); //选修课程else if(m==5) t2.moditify(); //修改else if(m==6) t2.list(); //查找已选课程else break;}return 0;}2.4 程序运行结果下图为程序运行的开始界面图2.4开始界面下图为当选择浏览课程信息的程序运行界面,它显示了已有的课程名、课程号、课性质、总学时和开课学期等信息图2.5浏览课程基本信息界面下图为程序的查找课程基本信息界面,提示系统的用户输入所要查询的课程名称。