1、 . 课程名称:C++面向对象程序设计 课程设计题目:大学生学籍管理系统 目录: 一、 系统设计目标、意义 二、 系统设计思路 三、 系统功能介绍 四、 输入输出的设计
2、 (1) 界面的设计 (2) 数据输出设计 (3) 系统运行结果 五、 详细设计 (1) 系统功能结构图 (2) UML 六、 附录 七、 系统设计、开发过程中遇到的问题 八、 心得体会 学生学籍管理系统 一、系统设计目标、意义 (一)系统实现的目标 1、课程设计的任务: 制作一个小型的学生学籍管理系统,要求制作一个菜单,实现数据的录入,数据的显示,数据查找,数据的删除,数据的保存,数据的统计,数据的修改,系统的退出。系统的设计要求用到C++面向对象的程序设计,要求用到类来实现,同时每一个功能用到一个函数。 2、(1)基本功能
3、 学生基本信息(编号,,性别,籍贯,民族,生日,政治面貌,省份证,数学成绩,英语成绩,计算机成绩) 成绩统计(各科总成绩,各科平均成绩,各科的及格率) (2)扩展功能: 学生数据的添加、修改、与删除 学生数据的读取与存储 3、系统特点: 系统要能够对相应的数据进行很好的测试,系统的统计对每一科的总成绩,平均成绩,及格律都进行了统计;系统数据的录入 除可以手工录入外,还可以采用文件的录入;系统统计学生的基本信息较全面,包括学号,,民族,政治面貌,号,生日,性别,数学、英语、计算机的成绩;程序中查找运用了两种查找方式即学号查找和查找。 (二)系统设计的意义 通过设计此项程
4、序,能够对学生的学籍进行统一的管理,对学生的学籍进行录入、修改、保存等功能进行处理,从而能够较快地对信息进行处理,系统数据的录入 除可以手工录入外,还可以采用文件的录入;系统统计学生的基本信息较全面,程序中查找运用了两种查找方式即学号查找和查找,方便查询。 二、系统设计思路 第一步:分析题目,建立类并派生出它的子类,画出类图。 第二步:画出流程,根据流程图编写程序清单 第三步:上机调试程序(使用单步调试,设置断点、分块调试的方法)。 第四步:及时整理资料,撰写课程设计报告中有关这个题目的容。 三、系统功能介绍 (一)程序对学生学籍的数据处理要求 ① 能够输入并浏览学生的基
5、本信息; ② 能够实现对学生信息的查询和修改; ③ 能够对成绩进行统计; ④ 能够对学生的信息进行保存; (二)系统功能: 资料维护:系统维护包括对各学生信息和成绩的录入操作。 资料维护:对数据表中的信息进行浏览。 系统查询:可以对不同科目的总成绩、不及率、各科平均成绩相关信息。 四、输入输出的设计 1.界面的设计 ①、界面设计 程序运行后会出现一个简捷的窗口,便于用户查询数据。 ②、功能设计 通过主窗体调用其他窗体,具体实现可以参照系统分析相关容。应用系统主控界面包括学生信息录入,查找等功能模块。学生信息录入功能完成学生信息和成绩的输入。记录查询功能可以对数据各分类
6、的记录进行查询。 2.数据输出设计 主要运行界面: 统计界面: 查找界面: 显示界面: 录入界面: 保存界面: 修改界面: 删除界面: 3、系统运行的结果: (仅部分) 五、详细设计 1、系统功能结构图: 主程序 菜单程序 初始化程序 退出 统计 修改 删除 查找 显示 输入 2、(1)类:student 数据成员:编号,,性别,籍贯,民族,生日,政治面貌,省份证,数学成绩,英语成绩,计算机成绩 (2)类:school 成员函数:录
7、入函数Input():输入编号到计算机的成绩; 统计函数count():统计各科的总成绩,计算平均成绩,统计各科的及格率; 查询函数found():按学号或查找学生的记录; 修改函数mend():修改指定学号学生成绩记录; 删除函数del():删除指定学号学生记录; 输出函数show():输出班级所有学生成绩记录; UML图: Student #number:int #name[20]:char #sex[6]:char #place[20]:char #nation[6]:char #birth[20]:char #party[10]: char #id[20]
8、char #score[3]:float +student*next; +student(){ } +~student(){ } + * getname():char +getnumber():int +getscore(inti)double + getg():float + input():void +input(ifstream & is): void +output():void +output(ofstream&os):void school +school() +~school() + input():void
9、
+ mend():void
+ del():void
+ find:int
+found():void
+ show():void
+ count():void
+ save():void
+ begin():void
+ clear():void
+mainmenu():char
+getkey():int
+setkey(intk):void
- *head: student
- key:int
六、附录:(主要代码)
#include
10、
11、 student *next; student(){ } ~student(){ } char* getname(){ return name; } int getnumber(){ return number;} double getscore(int i) { return score[i];} float getg(){ return (score[0]+score[1]+s
12、core[2]); }
void input()
{int e=1;
cout<<"\t\t\t按提示输入:"<
13、t\t输入生日: ";cin>>birth; cout<<"\t\t输入政治面貌: ";cin>>party;
cout<<"\t\t输入号: ";cin>>id; cout<<"\t\t输入数学分数: ";cin>>score[0];
cout<<"\t\t输入英语分数: ";cin>>score[1];
cout<<"\t\t输入计算机分数: ";cin>>score[2];
e=0;}
else
{cout<<"\t\t\t无此类型性别!重新输入!"< 14、oid input(ifstream & is)
{is>>number>>name>>sex>>place>>nation>>birth>>party>>id
>>score[0]>>score[1]>>score[2];
is.get(); }
void output()
{cout<<"学生基本信息如下:"< 15、< 16、re[1]
< 17、ar *pn="^");
void found();void show();void count();
void save();void begin(); void clear();
char mainmenu();
int getkey(){ return key;}
void setkey(int k){ key=k; }
private:
student *head; int key;
};
//录入函数
void school::input()
{student *p,*p2=NULL;
p=h 18、ead; int n;
while(p->next)
p=p->next;
while(n)
{p2=new student; p2->input();
p->next=p2;p2->next=NULL;p=p->next;
school::setkey(1);
cout<<"\t\t\t按1继续,按0返回 : "; cin>>n;
}}
//子查找函数
int school::find(student **p1,int num,char *pn)
{student *p;p=head;
while( 19、p->next)
{
(*p1)=p;
if( (p->next)->getnumber()==num||!strcmp( (p->next)->getname(),pn ) )
return 1; p=p->next;
}
return 0;}
//查找函数
void school::found()
{student *p;
int num=-1,n=9;char name[20]="^";
do
{ cout<<"\t\t1:按编号查找,2:按查找: ";
cin>>n;
}while(n<1||n>2);
if(n==1)
{ co 20、ut<<"\t\t\t输入编号: ";
cin>>num;}
if(n==2)
{ cout<<"\t\t\t输入: ";
cin>>name;}
if(!find(&p,num,name) )
{ cout<<"\t\t找不到你要查找的容!"< 21、找不到你要删除的容!"< 22、
{ cout<<"\t\t1:按编号修改,2:按修改: ";
cin>>n;
}while(n<1||n>2);
if(n==1)
{ cout<<"\t\t\t输入编号: ";
cin>>num;
}
if(n==2)
{cout<<"\t\t\t输入: ";
cin>>name;
}
if( !find(&p,num,name) )
{ cout<<"\t\t找不到你要修改的容!"< 23、id school::save() //保存函数
{student *p;p=head;
ofstream os("student.txt",ios::out);
if (school::getkey()==1)
{
while(p->next)
{ (p->next)->output(os);
p=p->next;}
}
cout<<"\t\t\t文件已保存! "< 24、t;
ifstream is("student.txt",ios::in);
if(!is)
{ofstream os("student.txt",ios::out);
os.close();
return ;
}
int num=-1;
while(1)
{ num=-1; t=is.tellg();
is>>num;
is.seekg(t);
if(num<0)
{ is.close();
return;
}
p2=new student;p2->input(is);
p->next=p2;p2->next=NULL;p=p->next;
25、
}}
void school::clear()//清空函数
{student *p,*p2;
p=head->next;
while( p )
{p2=p;p=p->next;
delete p2;
}}
void school::count()//统计函数
{student *p;p=head;
int n=0;
double g[3]={0,0,0};float j[3]={0,0,0};
while(p->next)
{ p=p->next;
n++;
for(int i=0;i<3;i++)
{ g[i]=g[i]+( p->get 26、score(i) );
(p->getscore(i) )>=60.0" j[i]++ : 0 ;
}
}
cout<<"\t\t\b\b\b\b数学总分:"< 27、ool::mainmenu()
{
char n[6];
cout<<"\n\n ☆☆☆☆欢迎进入学籍管理系统☆☆☆☆"< 28、 2: 显示学生信息 * *"< 29、ndl
<<" * * 0: 退出系统 * *"< 30、char n;pp.begin();
while(k==1)
{n=pp.mainmenu();
switch(n)
{case '1':pp.input(); break;
case '2':pp.show(); break;
case '3':pp.found(); break;
case '4':pp.del(); break;
case '5':pp.mend(); break;
case '6':pp.count(); break;
case '7':pp.save(); break;
case '0':
if(pp.getke 31、y()==1)
{ cout<<"\t\t\t是否保存" 1 : 保存 0:不保存 : ";
cin>>k;
if(k==1)
pp.save();
}
pp.clear();
k=0;
break; }}}
七、系统设计、开发过程中遇到的问题及创新点
本程序基本完成了题目要求的功能。但是由于显示的限制,所罗列的学生成绩只给出了数学,英语,计算机的成绩。程序可通过改进,增加科目数。程序在显示学生信息时输入过于繁杂,不够清晰明朗,若显示成类似表格的形式就好了。解决办法将输出函数的输出格式改一下,难点是计算输出点的控制。
至 32、于创新,就是在课题的选择上,我更加偏向于选择自己感兴趣的课题,更加注意程序的实用性
八、心得体会
通过这次课程设计,我学会了很多的知识,我通过自学相关的书籍,浏览,接触了大量的编程知识,在编程过程中逐渐提升自己的自学能力,克服困难的能力。我觉得首先要对程序的设计要求有一个比较明确的认识,然后系统分析与系统设计,最后是代码设计与调试。程序实现上,设计了简单的查询界面,将各个功能集中出来按照程序编写原则,便于查询。
根据C++课程所学的概念、理论和方法,按照C++程序设计的基本步骤,设计出一个适当规模的程序;进一步加深对C++语言的理解和掌握。理论联系实际,加深和巩固所学的理论知识,提高实践能力和计算机的综合运用能力。我们编写程序的过程是辛苦与快乐的,程序的编写原则很重要,只要我们在编程,就必须不断改进,才能更好提高编程能力。
- 优选






