《程序设计语言(C++)》课程设计参考模板.doc
目录一、设计目的3二、环境配置要求:3三、设计题目3题目1 学生学籍管理系统3题目2 学生选修课系统6四、课程设计文字资料要求9五、总结报告9六、考核9七、实间安排10附录:参考代码11学生学籍管理系统11选修课系统26程序设计语言(C+)课程设计一、设计目的1、进一步掌握利用C+进行类的定义和操作方法;2、进一步掌握类的继承和派生方法;3、进一步理解虚函数和多态;4、综合利用上述知识,学习设计并编写面向对象的C+简单应用程序;5、培养学生团结协作的能力。二、环境配置要求:硬件配置:586以上PC兼容机或品牌机,配有彩色显示器、鼠标、键盘,内存不小于64MB,硬盘自由空间不少于200MB。推荐配置为内存128MB或256MB(或以上),硬盘自由空间500MB以上。操作系统:Windows2000/NT/Xp、Visual C+集成开发环境。三、设计题目题目1 学生学籍管理系统(一)、系统的主要功能1.添加系统将提示用户输入新添加的职员的信息,插入在链表中。2.删除首先由用户输入要删除的学生的学号,然后调用删除函数,删除该名学生的资料。3.查找首先由用户输入要查找的学生的学号,然后系统用查找函数查找,然后系统就调用输出函数,输出所查找的学生资料。4.修改首先由用户输入要修改的学生的学号,然后系统用修改函数查找,显示该名学生的资料,然后系统提示用户输入需要修改的项目和新的资料。5.其他功能在上述功能的基础上进行进一步完善。(二)、系统总框架图主要提示的菜单界面开 始界 面查找资 料修改资 料删除资 料输出资料插入资 料(三)、系统数据结构定义class listNode/这是数据节点!public:listNode()listNode(Inform &);listNode(listNode &);listNode *create();/创建链表listNode *insert(listNode *);/对链表进行插入操作;listNode *del(listNode *,char *);/删除资料中含有char*的节点;void printlistNode(listNode *);/打印链表;listNode();void search(char *,listNode *);/查找链表中含有char*的学生;listNode *modify(listNode *);/修改private:Inform data;static int num;listNode *nextPtr;*Inform.h*class Informfriend ostream &operator<<(ostream &,Inform &);friend istream &operator>>(istream &,Inform &);public:Inform();Inform(Inform &);int operator=(const Inform &);int operator=(char *);int operator!=(char *);Inform &operator=(Inform &);Inform();private:char *number;char *id;char *name;char *sex;achieve ach;char *phonenumber;char *roomnumber;*achieve.h*cclass achievefriend ostream &operator<<(ostream &output,achieve &);friend istream &operator>>(istream &input,achieve &);public:achieve();void countaverage(subject *);int operator=(achieve &);achieve &operator=(achieve &);void instruction();achieve();void setnum(int a);int getnum();subject *TT;private:int num;float sum;float average;*subject.h*class subjectfriendistream &operator>>(istream &,subject &);friend ostream &operator<<(ostream &,const subject &);public:subject &operator=(const subject &);char nameMAX1;float achievement;float xuefen;题目2 学生选修课系统(一)、系统的主要功能1. 选修课系统学生端完成学生选课、学生情况、选课情况、退出系统等功能的设计与实现。2.选修课系统管理端完成增加学生、增加课程、删除学生、删除课程、填写成绩、更改学分、学生情况、选课情况、保存数据、退出系统等功能的设计与实现。(二)、系统总框架图选课系统选修课系统学生端选修课系统管理端学生选课学生情况选课情况退出系统增加课程增加学生删除学生删除课程填写成绩更改学分学生情况选课情况保存数据退出系统(三)、系统数据结构定义/定义课程struct course /某个学生所学的课程中的某一个char cname20; /课程名称float grade; /课程成绩course *Next; /指向下一个课程的指针;/学生类class studentpublic:student()root = NULL;const maxcourse = 5;factcourse = 0;void readname(char N ); /读入学生的姓名void getname(char N); /得到学生的姓名void wrecourse(char N,float score); /要据课程名写入学生课程的成绩float average(); /学生课程的平均成绩void addcourse(char N,float g); /给学生增加一门课int findcourse(char N); /查找是否已有此课程,如果有返回1,如果没有返回0int retfactcourse()return factcourse; /得到所学的课程数目course *retroot()return root; /利用键表将所有的课程保存起来int retmaxcourse()return 5; /得到最多可学的课程数目void clrroot() /清零root = NULL;factcourse = 0;private:char sname20; /学生的姓名int maxcourse; /学生最多可以学五门课程int factcourse; /学生实际所学的课程数目course *root; /课程的根结点指针;struct studentdbstudent stu;studentdb *Next;struct studentnamechar tname20; /学生的名字float result; /学生所得的该课程分数studentname *Next;/课程类class subjectpublic:subject()first = NULL;maxstudent=30;activestudnet=0;float readcredit(); /得到课程的学分void getcredit(float a); /设置学分float getaverage(); /得到学生的平均成绩float getresult(char N); /查找某个学生的成绩void getkname(char N); /读出课程的名称void setkname(char N); /读入课程的名称void findstudent(studentdb *P); /根据该课程的名称,寻找选这课程的学生studentname *retfirst()return first; /返回根结点int retactivestudent()return activestudnet; /返回实际学生数int retmaxstudent()return 30; /返回最多学生数30void clractivestudnet()activestudnet = 0; /从文件中读出来后将实际学生数清零private:int maxstudent; /最多学生数int activestudnet; /实际学生数studentname *first; /学生名单float credit; /该课程的学分float averagerusult; /该课程的平均成绩char kname20; /该课程的名称;四、课程设计文字资料要求(1) 每个同学必须独立完成自己任务的课程设计说明书,字数不少于2000字;(2) 不得少于300行有效代码;(3) 说明书书写规范、语句通顺、图表清晰。(4) 说明书正文前附课程设计任务书,课程设计指导情况表(此内容不在2000字范围中),一律用A4纸打印或使用学校统一的课程设计报告纸;(5) 说明书要求文字打印,统一格式,封面规范,装订成册,一式一份。五、总结报告学生对课程设计的全过程做出系统总结报告(课程设计说明书)。课程设计说明书(正文)应包括的主要内容有:需求分析、系统总框图、每个模块的设计分析、列出所有定义的函数及说明、举例说明1、2个比较有特点的算法、存在的问题与不足及对策、使用说明(操作手册)、课程设计的心得和体会等,再报告的最后附上程序源代码。六、考核学生完成课程设计后,采用设计答辩的形式,评定学生设计水平。每位学生必须在规定时间内完成课程设计。指导教师要从以下几个方面加以考察:学生软件开发基础知识掌握的程度、选定的方案及设计是否正确、独立分析问题和解决问题的能力、学生的创新精神、总结报告水平、学习态度(可从平时指导过程中考察)、科学作风、思想表现等。对雷同报告均记为不合格报告,成绩也不合格。教师对每一个学生做出评语,并根据以上几方面给出具体的成绩。答辩时需提交程序源代码文档。(提交的电子文档文件的命名方式为:学号+姓名)附录:参考代码学生学籍管理系统/程序源代码*listNode.h*#ifndef listNode_h#define listNode_h#define LEN sizeof(listNode)#include<iostream.h>#include<stdlib.h>#include<assert.h>#include<string.h>#include<stdio.h>#include"Inform.h"#define MAX2 4class listNodepublic:listNode()listNode(Inform &);listNode(listNode &);listNode *create();listNode *insert(listNode *);/对链表进行插入操作;listNode *del(listNode *,char *);/删除资料中含有char*的节点;void printlistNode(listNode *);/打印链表;listNode();void search(char *,listNode *);/查找链表中含有char*的学生;listNode *modify(listNode *);private:Inform data;static int num;listNode *nextPtr;#endif*listNode.cpp*#include"listNode.h"int listNode:num=0;listNode:listNode(Inform &da)data=da;nextPtr=new listNodeLEN;listNode:listNode(listNode ©) /拷贝构造函数。data=copy.data;nextPtr=new listNodeLEN;assert(nextPtr!=0);nextPtr=copy.nextPtr;listNode *listNode:create() /从文件f3.txt中读入链表数据;listNode *head=NULL;listNode *p1,*p2;p1=p2=new listNodeLEN;char ch;cout<<"t输入第一个学生的情况:"<<endl;docin>>p1->data;num=num+1;if(num=1)head=p1;elsep2->nextPtr=p1;p2=p1;p1=new listNodeLEN;cout<<"t要继续输入吗?(y/n): " cin>>ch;while(ch='y');p2->nextPtr=NULL;cout<<"t输入学生个数为:"<<num<<endl;return(head);listNode *listNode:insert(listNode *head)/将Inform类的一个对象DATA插入链表头。cout<<"t输入要插入的学生资料: "<<endl;Inform insertdata; cin>>insertdata;listNode *p0,*p1;p0=new listNodeLEN;assert(p0!=0);p0->data=insertdata;p0->nextPtr=NULL;p1=new listNodeLEN;assert(p1!=0);p1=head;head=p0;p0->nextPtr=p1; num+=1;cout<<"The DATA have been inserted into the list."<<endl;return head;listNode *listNode:del(listNode *head,char *DELDATA)/删除链表中数据为DELDATA的节点。listNode *p1,*p2;cout<<"确定要删除该生的资料吗?(y/n):"char ch;cin>>ch;if(ch='y')if(head=NULL)cout<<endl<<"*-没有学生的资料-*"<<endl;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;elsep2->nextPtr=p1->nextPtr;cout<<endl<<"t删除操作成功。"<<endl;num-=1;elsecout<<endl<<"t没有找到与"<<DELDATA<<"相匹配的资料。"<<endl;return head;elsereturn head;void listNode:printlistNode(listNode *head)/打印以head为头指针的链表。listNode *p;if(num=0)cout<<"t没有学生资料。"<<endl;p=head;if(head!=NULL)docout<<p->data<<endl;p=p->nextPtr;while(p!=NULL);void listNode:search(char *sea,listNode *head)listNode *p=new listNodeLEN;listNode *tMAX2;int n=0,j=0;for(int i=0;i<num;i+)if(head->data=sea)n+=1;while(j<MAX2)tj=head;j+;break;head=head->nextPtr;if(n=0)cout<<endl<<"t没有找到与"<<sea<<"相匹配的资料。"<<endl;else if(n=1)cout<<"找到一个学生资料,要输出吗?(y/n)."<<endl;char c;cin>>c;if(c='y')cout<<"t该学生学生资料是 :"<<endl;cout<<(*t)->data<<endl;elsecout<<"t找到"<<n<<" 个学生."<<endl;cout<<"要输出这些学生资料(y/n)."<<endl;char c;if(c=getchar()!='y')exit(2);elsefor(int j=n-1;j>=0;j-)cout<<j<<(tj)->data<<endl;listNode *listNode:modify(listNode *head)cout<<"输入要修改的学生的一项资料(姓名,学号,电话号,身份证号或寝室号):"char ch20;cin>>ch;search(ch,head);cout<<"t即将删除该生的资料,确定吗?(y/n)"char c;cin>>c;if(c='y')head=del(head,ch);cout<<"t输入修改的学生资料: "<<endl;Inform insertdata;cin>>insertdata;head=insert(head);return head;elsereturn head;listNode:listNode()delete nextPtr;*Inform.h*#ifndef Inform_h#define Inform_h#include <iostream.h>#include <string.h>#include <assert.h>#include<stdlib.h>#include<stdio.h>#include<iomanip.h>#include<fstream.h>#include"achieve.h"class Informfriend ostream &operator<<(ostream &,Inform &);friend istream &operator>>(istream &,Inform &);public:Inform();Inform(Inform &);int operator=(const Inform &);int operator=(char *);int operator!=(char *);Inform &operator=(Inform &);Inform();private:char *number;char *id;char *name;char *sex;achieve ach;char *phonenumber;char *roomnumber;#endif*Inform.cpp* #include<iostream.h>#include"Inform.h"ostream &operator<<(ostream &output,Inform &t)cout<<"*基本资料*"<<endl;cout<<"姓名性别学号 "<<endl;output<<setprecision(16)<<t.name<<"ttt"cout<<t.sex<<"ttt"output<<t.number<<endl;char a;cout<<"tt要输出详细信息吗?(y/n) "cin>>a;if(a='y')cout<<endl;cout<<"*详细资料*"<<endl;cout<<"身份证号电话号码 寝室号"<<endl;output<<setprecision(20)<<t.id<<"ttt"output<<t.phonenumber<<"ttt"output<<t.roomnumber<<endl;if(t.ach).getnum()=0)cout<<"t没有输入成绩信息。"<<endl;else(t.ach).instruction();output<<t.ach;output<<endl;return output;istream &operator>>(istream &input,Inform &t)cout<<" 姓名: "input>>t.name;cout<<" 学号: "input>>t.number;cout<<" 身份证号: "input>>t.id;cout<<" 性别: "input>>t.sex;cout<<" 电话号码:"input>>t.phonenumber;cout<<" 寝室号:"input>>t.roomnumber;cout<<"tt要继续输入成绩情况吗?(y/n)"char a;cin>>a;if(a='y')cout<<" t&&&&&&&&&&&&&成绩情况&&&&&&&&&&&&&"<<endl;cout<<endl<<"t输入该生学习的科目数目:"int ch; cin>>ch;(t.ach).setnum(ch);input>>t.ach;else(t.ach).setnum(0);return input;Inform:Inform()id=new char19;number=new char12;name=new char10;sex=new char4;phonenumber=new char8;roomnumber=new char4;Inform:Inform(Inform &p)id=new char19;assert(id!=0);strcpy(id,p.id);number=new char12;assert(number!=0);strcpy(number,p.number);name=new char10;assert(name!=0);strcpy(name,p.name);sex=new char4;assert(sex!=0);strcpy(sex,p.sex);phonenumber=new char8;assert(phonenumber!=0);strcpy(phonenumber,p.phonenumber);roomnumber=new char4;assert(roomnumber!=0);strcpy(roomnumber,p.roomnumber);ach=p.ach;int Inform:operator=(const Inform &t)if(strcmp(number,t.number)=0)|(strcmp(name,t.name)=0)|(strcmp(id,t.id)=0) |strcmp(phonenumber,t.phonenumber)|(strcmp(roomnumber,t.roomnumber)=0)return 1;elsereturn 0;int Inform:operator=(char *s)if( (strcmp(number,s)=0)|(strcmp(name,s)=0)|(strcmp(id,s)=0)| (strcmp(roomnumber,s)=0)|(strcmp(phonenumber,s)=0)return 1;elsereturn 0;int Inform:operator!=(char *t)if( (strcmp(number,t)=0)|(strcmp(name,t)=0)|(strcmp(id,t)=0) |(strcmp(phonenumber,t)=0)|(strcmp(roomnumber,t)=0)return 0;elsereturn 1;Inform &Inform:operator=(Inform &a)ach=a.ach;strcpy(id,a.id);strcpy(name,a.name);strcpy(number,a.number);strcpy(sex,a.sex);strcpy(phonenumber,a.phonenumber);strcpy(roomnumber,a.roomnumber);return *this;Inform:Inform()delete number;delete id;delete name;delete sex;delete phonenumber;delete roomnumber;*achieve.h*#ifndef achieve_h#define achieve_h#include"subject.h"class achievefriend ostream &operator<<(ostream &output,achieve &);friend istream &operator>>(istream &input,achieve &);public:achieve();void countaverage(subject *);int operator=(achieve &);achieve &operator=(achieve &);void instruction();achieve();void setnum(int a);int getnum();subject *TT;private:int num;float sum;float average;#endif*achieve.cpp*#include"achieve.h"achieve:achieve()TT=new subjectsizeof(subject);void achieve:setnum(int a=0)num=a;int achieve:getnum()return num;void achieve:countaverage(subject *t)sum=average=0;float temp=0;for(int i=0;i<num;i+)sum+=(t+i)->xuefen;temp+=(t+i)->achievement)*(t+i)->xuefen);average=temp/sum;ostream &operator<<(ostream &output,achieve &t)t.countaverage(t.TT);for(int i=0;i<t.num;i+)output<<t.TTi;output<<"t总学分:"<<t.sum<<endl;output<<"t该生的加权平均分是:"<<setprecision(4)<<t.average<<endl;return output;istream &operator>>(istream &input,achieve &t)for(int i=0;i<t.num;i+)input>>t.TTi;return input;int achieve:operator=(achieve &t)if(average=t.average&&sum=t.sum&&TT=t.TT)return 1;elsereturn 0;achieve &achieve:operator =(achieve &t)average=t.average;sum=t.sum;for(int i=0;i<MAX1;i+)TTi=t.TTi;return *this;void achieve:instruction()cout<<endl;cout<<"*成绩资料*"<<endl;cout<<"科目tt成绩tt学分"<<endl;achieve:achieve()delete TT;*subject.h*