资源描述
.
中南大学
C++程序设计实践报告
学 院: 材料院
专业班级:
学 号:
姓 名:
一、 实践目的
C++是一种运用广泛的电脑程序式设计语言。在学完C++程序设计课程后,为了加深和巩固课程的每个知识点,训练并培养自己运用所学知识独立进行程序设计、解决实际问题的能力,学会编制结构清晰、风格良好、数据结构适当的C++语言程序。我们在老师的指导下进行了C++程序设计实践,用C++语言编制学生档案管理软件。
二、实践要求
1)、进行C++程序设计实践要求我们利用面向对象的方法以及C++的编程思想来完成该软件的设计。
2)、建立学生档案管理软件,要对所包含的学生的全部信息,能进行相应的学生信息输入、学生信息输出、学生信息删除、学生信息添加以及学生信息修改。
3)、系统的主程序中,要求会使用口令判断功能函数。使得程序体对信息的修改更为方便。
4)、程序主函数中也要提供菜单选项,该选项具有一定的选择信息,以方便使用者使用。
三、实践内容
实践内容包括了:学生档案管理软件的总设计框架,系统口令函数的框图,以及数据的输入、添加、修改、删除、显示等的子框图还有退出系统的框图。
学生档案管理软件总框架:
5、数据显示
4、数据删除
3、数据修改
2、数据添加
1、数据输入
显示主菜单
系统口令
开始
N
Y
结束
系统口令流程图:
开始
password()
输入系统口令
str1=system?
N
Y
进入管理系统主界面
主菜单流程图:
main()
输入要操作的选项代码
flag=0
输入p
N
flag==0
P>='0'&&p<='9'
Y
flag=1
Y
输入数据
选项为0?
N
Y
添加数据
选项为1?
N
Y
修改数据
选项为2?
N
Y
选项为3?
删除学生信息
N
Y
选项为4?
输出所有学生成绩
N
Y
选项为5?
退出系统
是否继续其他操作(y/n)
Y
W=='y'
结束
N
输入w
数据录入
数据输入流程图:
初始化i,j=0
依次输入学生的姓名、学号、专业、成绩等信息
输出总成绩
输出平均成绩
录入到file并将j指向下一个
录入到student并将i指向下一个
Y//flage==1
Else//flage==0
判断是否继续y/n
N//flage==1
初始化flage
是否继续y/n
主菜单
Y//flage==1
Else//flage==0
N//flage==1
Break
数据添加
数据添加流程图:
依次输入学生的姓名、学号、专业、成绩等信息
输出总成绩
输出平均成绩
录入到file并将j指向下一个
录入到student并将i指向下一个
Y//flage==1
Else//flage==0
判断是否继续y/n
N//flage==1
Else//flage==0
Y//flage==1
主菜单
初始化flage是否继续y/n
N//flage==1
Break
数据修改流程图:
数据修改
I==0//没数据
初始化定义
I==0?//判断是否有数据
I!=0//有数据
输入要修改的学生姓名
Flag==0//无
没找到
strcmp(name,s[h].name)//查找
Flag=1//有
依次输入学生的学号、专业、成绩等信息
输出总成绩
输出平均成绩
录入到file
录入到student
Y//flage==1
Else//flage==0
判断是否继续y/n
N//flage==1
Else//flage==0
Y//flage==1
初始化flage
是否继续y/n
主菜单
N//flage==1
Break
数据删除流程图:
数据删除
Else//flage==0
N//flage==1
Y//flage==1
没找到
主菜单
Break
初始化flage
是否继续y/n
成功
数据依次覆盖
Strcmp(name,s[h].name)/查找
输入要删除的学生姓名
精选范本
数据显示流程图:
数据显示
标题-数据如下
没数据
I==0?//是否有数据?
数据依次输出
主菜单
Y//flage==1
Else//flage==0
初始化flage
是否继续y/n
N//flage==1
Break
退出流程图:
Bye bye!
exit(0)
退出
四、实践体会
在指导老师的耐心教导下,我们完成了此次C++程序设计实践。在实践过程中,我们学会了如何运用C++语言编写一个学生档案管理软件。
首先,我们要对所编软件有相应的认识,了解该学生档案管理系统应有的功能,对相应的功能思考需要运行的函数。例如整个程序体的主函数,系统口令函数以及数据输入输出修改删除等的函数。然后对课堂所学内容进行灵活运用,如源程序中多次使用到的指针与数组等。此外还需用到部分课外知识,这就考查了我们对C++程序语言的自主学习能力。
通过此次程序设计实践,用理论联系实际,加深了我对C++语言的理解与掌握,提高了我的实践能力及计算机操作能力。编程的过程也锻炼了我运用多种方法完成编程任务的思维转换能力。编程虽然不易但收获颇丰。同时自身编程能力还存在一定不足,我也会在日后的学习生活中不断改进。
学生档案管理软件源代码
#include<iostream>
#include<string>
#include<fstream>
#include<iomanip>
using namespace std;
class student
{
private:
char name[4]; //姓名
char xibie[8];
char banji[4];
double cpro,english,math,sport,computer,allscore,average;//课程
int order, number; //名次,学号
public:
student(){}
password();//这个是用于系统口令的,函数声明
student(char n[4],int nu,double cc,double eng,double ma,double sp,double com,double as,double av)
{
strcpy(name,n);
number=nu;
cpro=cc; english=eng;math=ma;sport=sp;computer=com;allscore=as;average=av;
}
friend void main();
};
void password()//从这里开始,口令函数
{
string str1;
system("cls");
cout<<endl<<endl<<endl;
cout<<setw(30)<<"请输入口令:";
cin>>str1;
cout<<endl<<endl<<endl;
if (str1!="system")
{
cout<<setw(40)<<"口令不正确!请重新输入!\n";
system("pause");
password();
}
return;
}
void main()
{
password();
double allscore;
double average;
cout<<" 欢迎使用学生管理系统"<<endl;
cout<<" ******************************************"<<endl;
cout<<" **** 学生成绩管理系统 ****"<<endl;
cout<<" ******************************************"<<endl;
cout<<" 0、输入数据 "<<endl;
cout<<" 1、添加数据 "<<endl;
cout<<" 2、修改数据 "<<endl;
cout<<" 3、删除学生信息 "<<endl;
cout<<" 4、输出所有学生成绩 "<<endl;
cout<<" 5、退出系统 "<<endl;
cout<<" =========================================="<<endl;
cout<<" 选择0-5数字进行操作"<<endl;
cout<<" =========================================="<<endl;
char p;char w;
student s[50]; //指针对象,最多存50个学生数据
ofstream *file[50]; //负责对文件插入操作
int i=0;
int j=0;
int flag=0;
do //flag判断输入是否有效
{
cin>>p;
if((p>='0'&&p<='9'))
flag=1;
else
cout<<" 指令错误!请重新输入:"<<endl;
}while(flag==0);
do{
switch(p) //接收功能选项
{
case '0': //输入数据
{
char c;
char name[4];int number;char xibie[8];char banji[4];double cpro,english,math,sport,core,computer;
do{
cout<<endl<<" 姓名:";
cin>>name;
cout<<endl<<" 学号:";
cin>>number;
cout<<endl<<" 专业:";
cin>>xibie;
cout<<endl<<" 班级:";
cin>>banji;
cout<<endl<<" C++成绩:";
cin>>cpro;
cout<<endl<<" 英语成绩:";
cin>>english;
cout<<endl<<" 线代成绩:";
cin>>math;
cout<<endl<<" 体育成绩:";
cin>>sport;
cout<<endl<<" 微积分成绩:";
cin>>computer;
cout<<endl;
{allscore=cpro+english+math+sport+computer;}
cout<<" 总成绩:"<<allscore<<endl;
{average=(cpro+english+math+sport+computer)/5;}
cout<<" 平均成绩:"<<average<<endl;
file[j]=new ofstream("D:\student.dat",ios::ate);
*file[j]<<" 姓名 "<<name<<" 学号 "<<number<<" C++成绩 "<<cpro
<<" 英语成绩 "<<english<<" 线代成绩 "<<math<<" 体育成绩 "
<<sport<<" 微积分成绩 "<<computer<<"总成绩"<<allscore<<"平均成绩"<<endl;
j++;
s[i]= student(name, number,cpro,english,math,sport,computer,allscore,average);
i++;
cout<<" 数据输入成功,想继续输入吗(y/n):";
cin>>c;
cout<<endl;
do
{
if(c!='y'&&c!='n')
{
cout<<" 指令错误!请重新输入!"<<endl<<" ";
cin>>c;
}
else
flag=1;
}while(flag==0);
}while(c=='y');
break;
}
case '1': //增加数据
{
char name[20];
int number;double cpro,english,math,sport,computer;
char c;
do
{
cout<<" 请输入您要增加的学生的姓名:";
cin>>name;
cout<<endl<<" 学号:";
cin>>number;
cout<<endl<<" C++成绩:";
cin>>cpro;
cout<<endl<<" 英语成绩:";
cin>>english;
cout<<endl<<" 线代成绩:";
cin>>math;
cout<<endl<<" 体育成绩:";
cin>>sport;
cout<<endl<<" 微积分成绩:";
cin>>computer;
cout<<endl;
{allscore=cpro+english+math+sport+computer;}
cout<<" 总成绩:"<<allscore<<endl;
{average=(cpro+english+math+sport+computer)/5;}
cout<<" 平均成绩:"<<average<<endl;
file[j]=new ofstream("d:\student.dat",ios::ate);
*file[j]<<" 姓名 "<<name<<" 学号 "<<number
<< " C++成绩 "<<cpro<<" 英语成绩 "<<english<<" 线代成绩 "
<<math<<" 体育成绩 "<<sport<<" 微积分成绩 "<<computer
<<" 总成绩 "<<allscore<<" 平均成绩 "<<average<<endl;
j++;
s[i]= student(name, number,cpro,english,math,sport,computer,allscore,average);
i++;
cout<<" 数据输入成功,想继续数入吗(y/n):";
cin>>c;
cout<<endl;
if(c!='y'&&c!='n')
{
cout<<" 指令错误!请重新输入!"<<endl<<" ";
cin>>c;
}
}while(c=='y');
break;
}
case '2': //修改数据
{
char name[20];int nu;double cc,eng,ma,sp,l,hb,com,as,av;flag=0;
char c;
if(i==0)
{
cout<<"系统中找不到这个学生";
}
do
{
cout<<" 请输入您要修改的学生的姓名:";
cin>>name;
cout<<endl;
for(int h=0;h<i;h++) //h纪录要修改学生的位置
{
if(strcmp(name,s[h].name)==0)
{
flag=1;
cout<<" 新的学号:";
cin>>nu;
cout<<endl<<" C++成绩:";
cin>>cc;
cout<<endl<<" 英语成绩:";
cin>>eng;
cout<<endl<<" 线代成绩:";
cin>>ma;
cout<<endl<<" 体育成绩:";
cin>>sp;
cout<<endl<<" 微积分成绩:";
cin>>com;
{as=cc+eng+ma+sp+com;}
cout<<endl<<" 总成绩:"<<as;
{av=as/5;}
cout<<endl<<" 平均成绩:"<<av;
cout<<endl;
s[h].cpro=cc;
s[h].english=eng;
s[h].math=ma;
s[h].sport=sp;
s[h].number=nu;
cout<<" 数据修改成功!"<<endl;
}
}
if(flag==0)
{
cout<<" 您要修改的学生本来就不存在!请检查重新输入!"<<endl;
}
cout<<" 想继续修改吗(y/n):";
cin>>c;
cout<<endl;
if(c!='y'&&c!='n')
{
cout<<" 指令错误!请重新输入!"<<endl<<" ";
cin>>c;
}
}while(c=='y');
break;
}
case '3':
{
cout<<" 请输入你要删除的姓名 :";
char m[20];
cin>>m;
for(int a=0;a<i;a++)
{
if(strcmp(s[a].name,m)==0)
{
int w;
w=a;
for(w;w<i;w++)
{
s[w]=s[w+1];
i=i-1;}
cout<<" 删除成功!"<<endl;
}
}
break;}
case '4': //输出
{
cout<<" 本系统所有学生数据如下:"<<endl;
if(i==0)
cout<<" 管理系统中没有输入数据!"<<endl;
cout<<"姓名 学号 c++ 英语 线代 体育 微积分 总成绩 平均成绩 "<<endl;
for(int k=0;k<i;k++)
{
cout<<s[k].name<<setw(7)<<s[k].number<<setw(4)
<<(s[k]).cpro<<setw(5)<<(s[k]).english<<setw(5)
<<(s[k]).math<<setw(4)<<(s[k]).sport<<setw(5)
<<(s[k]).computer<<setw(6)
<<s[k].allscore<<setw(10)<<(s[k]).average<<setw(7)<<endl;
}
break;
}
case'5'://退出
{exit(0); cout<<"Bye bye!"<<endl;}
}
cout<<" 您想继续进行其他操作吗?(y/n):";
int flag=0;
do
{
cin>>w;
cout<<endl;
if(w!='y'&&w!='n')
cout<<" 指令错误!请重新输入!"<<endl;
else
flag=1;
}while(flag==0);
if(w=='y')
cout<<" 请输入操作代码:0 输入数据"<<endl;
cout<<" 1 增加数据"<<endl;
cout<<" 2 修改数据"<<endl;
cout<<" 3 删除学生信息"<<endl;
cout<<" 4 输出所有学生成绩"<<endl;
cout<<" 5 退出系统"<<endl;
cin>>p;
}while(w=='y');
}
展开阅读全文