《程序设计语言C++》课程设计参考模板.docx
《《程序设计语言C++》课程设计参考模板.docx》由会员分享,可在线阅读,更多相关《《程序设计语言C++》课程设计参考模板.docx(68页珍藏版)》请在冰豆网上搜索。
《程序设计语言C++》课程设计参考模板
《程序设计语言(C++)》课程设计
一、设计目的
1、进一步掌握利用C++进行类的定义和操作方法;
2、进一步掌握类的继承和派生方法;
3、进一步理解虚函数和多态;
4、综合利用上述知识,学习设计并编写面向对象的C++简单应用程序;
5、培养学生团结协作的能力。
二、环境配置要求:
硬件配置:
586以上PC兼容机或品牌机,配有彩色显示器、鼠标、键盘,内存不小于64MB,硬盘自由空间不少于200MB。
推荐配置为内存128MB或256MB(或以上),硬盘自由空间500MB以上。
操作系统:
Windows2000/NT/Xp、VisualC++集成开发环境。
三、设计题目
题目1学生学籍管理系统
(一)、系统的主要功能
1.添加
系统将提示用户输入新添加的职员的信息,插入在链表中。
2.删除
首先由用户输入要删除的学生的学号,然后调用删除函数,删除该名学生的资料。
3.查找
首先由用户输入要查找的学生的学号,然后系统用查找函数查找,然后系统就调用输出函数,输出所查找的学生资料。
4.修改
首先由用户输入要修改的学生的学号,然后系统用修改函数查找,显示该名学生的资料,然后系统提示用户输入需要修改的项目和新的资料。
5.其他功能
在上述功能的基础上进行进一步完善。
(二)、系统总框架图
(三)、系统数据结构定义
classlistNode{//这是数据节点!
public:
listNode(){}
listNode(Inform&);
listNode(listNode&);
listNode*create();//创建链表
listNode*insert(listNode*);//对链表进行插入操作;
listNode*del(listNode*,char*);//删除资料中含有char*的节点;
voidprintlistNode(listNode*);//打印链表;
~listNode();
voidsearch(char*,listNode*);//查找链表中含有char*的学生;
listNode*modify(listNode*);//修改
private:
Informdata;
staticintnum;
listNode*nextPtr;
};
****************************Inform.h**************************
classInform{
friendostream&operator<<(ostream&,Inform&);
friendistream&operator>>(istream&,Inform&);
public:
Inform();
Inform(Inform&);
intoperator==(constInform&);
intoperator==(char*);
intoperator!
=(char*);
Inform&operator=(Inform&);
~Inform();
private:
char*number;
char*id;
char*name;
char*sex;
achieveach;
char*phonenumber;
char*roomnumber;
};
************************achieve.h********************************************cclassachieve{
friendostream&operator<<(ostream&output,achieve&);
friendistream&operator>>(istream&input,achieve&);
public:
achieve();
voidcountaverage(subject*);
intoperator==(achieve&);
achieve&operator=(achieve&);
voidinstruction();
~achieve();
voidsetnum(inta);
intgetnum();
subject*TT;
private:
intnum;
floatsum;
floataverage;
};
*******************************subject.h*************************************
classsubject{
friendistream&operator>>(istream&,subject&);
friendostream&operator<<(ostream&,constsubject&);
public:
subject&operator=(constsubject&);
charname[MAX1];
floatachievement;
floatxuefen;
};
题目2学生选修课系统
(一)、系统的主要功能
1.选修课系统学生端
完成学生选课、学生情况、选课情况、退出系统等功能的设计与实现。
2.选修课系统管理端
完成增加学生、增加课程、删除学生、删除课程、填写成绩、更改学分、学生情况、选课情况、保存数据、退出系统等功能的设计与实现。
(二)、系统总框架图
(三)、系统数据结构定义
//定义课程
structcourse//某个学生所学的课程中的某一个
{
charcname[20];//课程名称
floatgrade;//课程成绩
course*Next;//指向下一个课程的指针
};
//学生类
classstudent
{
public:
student()
{
root=NULL;
constmaxcourse=5;
factcourse=0;
}
voidreadname(charN[]);//读入学生的姓名
voidgetname(charN[]);//得到学生的姓名
voidwrecourse(charN[],floatscore);//要据课程名写入学生课程的成绩
floataverage();//学生课程的平均成绩
voidaddcourse(charN[],floatg);//给学生增加一门课
intfindcourse(charN[]);//查找是否已有此课程,如果有返回1,如果没有返回0
intretfactcourse()
{
returnfactcourse;
}//得到所学的课程数目
course*retroot()
{
returnroot;//利用键表将所有的课程保存起来
}
intretmaxcourse()
{
return5;//得到最多可学的课程数目
}
voidclrroot()//清零
{
root=NULL;
factcourse=0;
}
private:
charsname[20];//学生的姓名
intmaxcourse;//学生最多可以学五门课程
intfactcourse;//学生实际所学的课程数目
course*root;//课程的根结点指针
};
structstudentdb
{
studentstu;
studentdb*Next;
};
structstudentname
{
chartname[20];//学生的名字
floatresult;//学生所得的该课程分数
studentname*Next;
};
//课程类
classsubject
{
public:
subject()
{
first=NULL;
maxstudent=30;
activestudnet=0;
}
floatreadcredit();//得到课程的学分
voidgetcredit(floata);//设置学分
floatgetaverage();//得到学生的平均成绩
floatgetresult(charN[]);//查找某个学生的成绩
voidgetkname(charN[]);//读出课程的名称
voidsetkname(charN[]);//读入课程的名称
voidfindstudent(studentdb*P);//根据该课程的名称,寻找选这课程的学生
studentname*retfirst()
{
returnfirst;//返回根结点
}
intretactivestudent()
{
returnactivestudnet;//返回实际学生数
}
intretmaxstudent()
{
return30;//返回最多学生数30
}
voidclractivestudnet()
{
activestudnet=0;//从文件中读出来后将实际学生数清零
}
private:
intmaxstudent;//最多学生数
intactivestudnet;//实际学生数
studentname*first;//学生名单
floatcredit;//该课程的学分
floataveragerusult;//该课程的平均成绩
charkname[20];//该课程的名称
};
四、课程设计文字资料要求
(1)每个同学必须独立完成自己任务的课程设计说明书,字数不少于2000字;
(2)不得少于300行有效代码;
(3)说明书书写规范、语句通顺、图表清晰。
(4)说明书正文前附《课程设计任务书》,《课程设计指导情况表》(此内容不在2000字范围中),一律用A4纸打印或使用学校统一的课程设计报告纸;
(5)说明书要求文字打印,统一格式,封面规范,装订成册,一式一份。
五、总结报告
学生对课程设计的全过程做出系统总结报告(《课程设计说明书》)。
课程设计说明书(正文)应包括的主要内容有:
需求分析、系统总框图、每个模块的设计分析、列出所有定义的函数及说明、举例说明1、2个比较有特点的算法、存在的问题与不足及对策、使用说明(操作手册)、课程设计的心得和体会等,再报告的最后附上程序源代码。
六、考核
学生完成课程设计后,采用设计答辩的形式,评定学生设计水平。
每位学生必须在规定时间内完成课程设计。
指导教师要从以下几个方面加以考察:
学生软件开发基础知识掌握的程度、选定的方案及设计是否正确、独立分析问题和解决问题的能力、学生的创新精神、总结报告水平、学习态度(可从平时指导过程中考察)、科学作风、思想表现等。
对雷同报告均记为不合格报告,成绩也不合格。
教师对每一个学生做出评语,并根据以上几方面给出具体的成绩。
答辩时需提交程序源代码文档。
(提交的电子文档文件的命名方式为:
学号+姓名)
附录:
参考代码
学生学籍管理系统
//程序源代码
*****************************listNode.h**************************************
#ifndeflistNode_h
#definelistNode_h
#defineLENsizeof(listNode)
#include
#include
#include
#include
#include
#include"Inform.h"
#defineMAX24
classlistNode{
public:
listNode(){}
listNode(Inform&);
listNode(listNode&);
listNode*create();
listNode*insert(listNode*);//对链表进行插入操作;
listNode*del(listNode*,char*);//删除资料中含有char*的节点;
voidprintlistNode(listNode*);//打印链表;
~listNode();
voidsearch(char*,listNode*);//查找链表中含有char*的学生;
listNode*modify(listNode*);
private:
Informdata;
staticintnum;
listNode*nextPtr;
};
#endif
*********************listNode.cpp*********************************
#include"listNode.h"
intlistNode:
:
num=0;
listNode:
:
listNode(Inform&da)
{
data=da;
nextPtr=newlistNode[LEN];
}
listNode:
:
listNode(listNode©)//拷贝构造函数。
{
data=copy.data;
nextPtr=newlistNode[LEN];
assert(nextPtr!
=0);
nextPtr=copy.nextPtr;
}
listNode*listNode:
:
create()//从文件f3.txt中读入链表数据;
{
listNode*head=NULL;
listNode*p1,*p2;
p1=p2=newlistNode[LEN];
charch;
cout<<"\t输入第一个学生的情况:
"<do
{
cin>>p1->data;
num=num+1;
if(num==1)
head=p1;
else
p2->nextPtr=p1;
p2=p1;
p1=newlistNode[LEN];
cout<<"\t要继续输入吗?
(y/n):
";
cin>>ch;
}while(ch=='y');
p2->nextPtr=NULL;
cout<<"\t输入学生个数为:
"<return(head);
}
listNode*listNode:
:
insert(listNode*head)//将Inform类的一个对象DATA插入链表头。
{
cout<<"\t输入要插入的学生资料:
"<Informinsertdata;
cin>>insertdata;
listNode*p0,*p1;
p0=newlistNode[LEN];
assert(p0!
=0);
p0->data=insertdata;
p0->nextPtr=NULL;
p1=newlistNode[LEN];
assert(p1!
=0);
p1=head;
head=p0;
p0->nextPtr=p1;
num+=1;
cout<<"TheDATAhavebeeninsertedintothelist."<returnhead;
}
listNode*listNode:
:
del(listNode*head,char*DELDATA)//删除链表中数据为DELDATA的节点。
{
listNode*p1,*p2;
cout<<"确定要删除该生的资料吗?
(y/n):
";
charch;
cin>>ch;
if(ch=='y')
{
if(head==NULL)
{
cout<abort();
}
p1=head;
while(p1->data!
=DELDATA&&p1->nextPtr!
=NULL)
{
p2=p1;
p1=p1->nextPtr;
}
if(p1->data==DELDATA)
{
if(p1==head)
head=p1->nextPtr;
else
p2->nextPtr=p1->nextPtr;
cout<"<num-=1;
}
else
cout<"<returnhead;
}
else
returnhead;
}
voidlistNode:
:
printlistNode(listNode*head)//打印以head为头指针的链表。
{
listNode*p;
if(num==0)
cout<<"\t没有学生资料。
"<p=head;
if(head!
=NULL)
do{
cout<data<p=p->nextPtr;
}while(p!
=NULL);
}
voidlistNode:
:
search(char*sea,listNode*head)
{
listNode*p=newlistNode[LEN];
listNode*t[MAX2];
intn=0,j=0;
for(inti=0;i{
if(head->data==sea)
{
n+=1;
while(j{
t[j]=head;
j++;
break;
}
}
head=head->nextPtr;
}
if(n==0)
cout<"<elseif(n==1)
{
cout<<"找到一个学生资料,要输出吗?
(y/n)."<charc;
cin>>c;
if(c=='y')
{
cout<<"\t该学生学生资料是:
"<cout<<(*t)->data<}
}
else
{
cout<<"\t找到"<cout<<"要输出这些学生资料(y/n)."<charc;
if((c=getchar())!
='y')
exit
(2);
else
for(intj=n-1;j>=0;j--)
cout<data<}
}
listNode*listNode:
:
modify(listNode*head)
{
cout<<"输入要修改的学生的一项资料(姓名,学号,电话号,身份证号或寝室号):
";
charch[20];
cin>>ch;
search(ch,head);
cout<<"\t即将删除该生的资料,确定吗?
(y/n)";
charc;cin>>c;
if(c=='y')
{
head=del(head,ch);
cout<<"\t输入修改的学生资料:
"<Informinsertdata;
cin>>insertdata;
head=insert(head);
returnhead;
}
else
returnhead;
}
listNode:
:
~listNode()
{
delete[]nextPtr;
}
****************************Inform.h**************************
#ifndefInform_h
#defineInform_h
#include
#include
#include
#include
#include
#include
#include
#include"achieve.h"
classInform{
friendostream&operator<<(ostream&,Inform&);
friendistream&operator>>(istream&,Inform&);
public:
Inform();
Inform(Inform&);
intoperator==(constInform&);
intoperator==(char*);
intoperator!
=(char*);
Inform&operator=(Inform&);
~Inform();
private:
char*number;
char*id;
char*name;
char*sex;
achieveach;
char*phonenumber;
char*roomnumber;
};
#endif
******************************Inform.cpp************************************
#include
#include"Inform.h"
ostream&operator<<(ostream&output,Inform&t)
{
cout<<"********************基本资料********************"<cout<<"姓名性别学号"<output<cout<output<chara;
cout<<"\t\t要输出详细信息吗?
(y/n)";
cin>>a;
if(a=='