《C++程序设计》教学实习报告.docx
《《C++程序设计》教学实习报告.docx》由会员分享,可在线阅读,更多相关《《C++程序设计》教学实习报告.docx(40页珍藏版)》请在冰点文库上搜索。
《C++程序设计》教学实习报告
天津农学院
计算机科学与信息工程系
《C++程序设计》教学实习报告
二零一一年九月二十三日
1教学实习的内容
使用VisualC++开发环境结合所学知识进行C++程序的设计、编辑、编译、调试、运行、测试,完成实习报告。
(此段自行扩展)
2教学实习的目的
完成《C++程序设计》课程学习后,通过本次教学实习,对所学专业知识进一步消化、理解并掌握,锻炼和提高综合运用所学知识解决实际问题的能力。
设计一个《同学录管理系统》,使我进一步熟悉C++中类的概念、基本知识和技能,类的封装、继承的实现方式。
掌握面向对象程序设计的基本思路和方法,并利用所学的基本知识和技能解决简单的面向对象的程序设计问题。
了解系统开发的需求分析、类层次设计、模块分解、编码测试、模块组装与整体调试的全过程,加深对C++的理解与VisualC++环境的使用:
逐步熟悉程序设计的方法,并养成良好的编程习惯。
3教学实习设计介绍
3.1主程序详解
此章为报告重点。
设计过程及结果的详细介绍。
我在menu类中定义了多个函数,分别是add函数、display函数、survey函数、sort函数、del函数、modify函数、start函数、remind函数和quit函数。
其中,add函数、display函数、survey函数、sort函数、del函数和modify函数分别实现系统的添加、显示、查询,排序、删除和修改功能。
start函数使系统以菜单的形式进行工作,remind函数使用户使用更加方便,而quit函数是控制系统退出。
下面我来具体介绍一下这些函数:
1、add函数
程序:
voidmenu:
:
add()
{
ofstreamoutfile("D:
\\classmates.txt",ios:
:
binary);
if(!
outfile)
{
cout<<"对不起,你的文件打开失败了哦!
亲~~"<abort();
}
cout<<"请输入你们班的人数:
";
cin>>numberofpeople;
cout<for(i=0;i{
cout<<"这是第"<<(i+1)<<"个同学的信息:
"<cout<<"学号:
";
cin>>stud[i].num;
……
outfile.write((char*)&stud[i],sizeof(student));
}
outfile.close();
}
在这个函数中,用for语句实现学生学号、姓名、年龄、性别、出生日期、住址、扣扣、手机和email信息的录入,并且以二进制的方式把输入的信息保存在D:
\\student.txt文件中。
C++程序中的文件类型有两种形式:
文本文件和二进制文件。
我在这个程序里选用的二进制文件作为储存。
二进制文件打开需要在打开方式选项中加入参数ios:
:
binary,此处所指的二进制文件可以输入文件,也可以输出文件。
二进制文件输入操作可以通过I/O流的write()函数实现,而write()函数的作用就是将内存中一定数量的字节写入到文件中。
当我打开D:
\\student.txt文件时,看到的都是乱码(二进制文件)。
这是由于字符是以单个字节存储的,而二进制文件也是以单个字节进行读取和储存的,因此二进制文件中字符可以显示,而汉字与数字由于采用多个字节储存,可能存在夸自己饿操作,因此出现乱码。
2、display函数
程序:
voidmenu:
:
display()
{
students[m];
ifstreaminfile("D:
\\student.txt",ios:
:
binary);
if(!
infile)
{
cout<<"对不起,你企图打开的操作失败了哟!
"<abort();
}
for(i=0;iinfile.read((char*)&s[i],sizeof(s[i]));
infile.close();
for(i=0;i{
cout<<"第"<<(i+1)<<"个同学的信息:
"<……
cout<}
}
使用此函数实现对刚才使用二进制形式保存的同学信息数据的的查看,还是用一个for语句,把学生的学号、姓名、年龄、性别、出生日期、手机、扣扣、地址和email信息的显示到屏幕上。
二进制文件的输出的操作也可以通过I\O流的read()函数,而且read()函数也是从文件中读取一定数量的字节并存放到指定的内存地址中。
3、survey函数
程序:
voidmenu:
:
survey()
{
intm,flag=0;
longn;
charxm[20];
cout<<"1.按学号查询;2.按姓名查询.请选择!
"<cin>>m;
if(m==1)
{
cout<<"请输入学号:
";
cin>>n;
cout<for(i=0;i{
if(stud[i].num==n)
{
cout<<"这是第"<<(i+1)<<"个同学"<…………
cout<<"Email:
"<flag=1;
}
}
if(flag==0)
cout<<"没有您想查到的同学的信息!
~"<}
if(m==2)
{
cout<<"请输入姓名:
"<cin>>xm;
for(i=0;i{
if(strcmp(stud[i].name,xm)==0)
{
cout<<"这是第"<<(i+1)<<"个同学"<…………
flag=1;
}
}
if(flag==0)
cout<<"没有您想查到的同学的信息哦!
亲~"<}
}
使用此函数时会提示用户是按照什么要求寻找(按学号和按姓名查找)并让用户做出选择,如果flag提示有没有找到用户查找的学生信息,如果找到,输出查询学生的所有信息,如果没找到,输出没有找到需要查询的学生。
4、sort函数
程序:
voidmenu:
:
sort()
{
inta[m],j,t;
for(i=0;ia[i]=i;
for(i=0;i{
for(j=0;j{
if(stud[a[j]].num>stud[a[j+1]].num)
{
t=a[j];
a[j]=a[j+1];
a[j+1]=t;
}
}
}
cout<<"这是排序后的信息哟:
"<for(i=0;i{
cout<<"这是第"<<(i+1)<<"个同学"<…………
cout<}
}
此函数的作用就是使用冒泡法根据学号对学生信息进行排序,在这里把学生的学号、姓名、性别、年龄、出生日期、地址、手机、扣扣、email看做一个整体,交换两个同学的信息,只是交换两个学生的序号而已,并且输出排序后的学生排名。
5、del函数
程序:
voidmenu:
:
del()
{
intj,a[m],t,flag=0;
longn;
charna[20];
for(i=0;i{a[i]=i;}
cout<<"1.按学号和谐;2.按姓名和谐.";
cout<<"请您做出选择!
"<cin>>j;
if(j==1)
{
cout<<"输入您想和谐掉的同学的学号:
";
cin>>n;
for(i=0;i{
if(stud[i].num==n)
{
t=i;
flag=1;
cout<<"已经搜到您要河蟹掉的同学信息!
"<cout<cout<<"和谐后的同学信息为:
"<for(;t{
a[t]=t+1;
}
for(i=0;i{
cout<<"这是第"<<(i+1)<<"个同学"<……
cout<<"Email:
"<cout<}
}
}
if(flag==0)
{
cout<<"没有寻找到您想和谐的同学的信息!
"<}
}
if(j==2)
{
cout<<"输入您要河蟹的姓名:
";
cin>>na;
for(i=0;i{
if(strcmp(stud[i].name,na)==0)
{
t=i;
flag=1;
cout<<"已经搜到您要河蟹掉的同学信息!
"<cout<cout<<"和谐后的同学信息为:
"<for(;t{
a[t]=t+1;
}
for(i=0;i{
cout<<"这是第"<<(i+1)<<"个同学"<cout<}
}
}
if(flag==0)
{
cout<<"没有寻找到您想和谐的同学的信息!
"<}
}
}
使用此函数时依然会先提示用户按照什么要求什么方式删除(按学号或者姓名),用if语句来实现用户的选择,首先还是用flag判断有没有寻找到需要删除同学的信息。
如果没找到,显示没有找到你需要删除同学的信息,如果找到,删除此同学的信息(只是删除了该同学所对应的序号),再输出删除后所有同学的信息。
6、modify函数
程序:
voidmenu:
:
modify()
{
intn,flag=0;
charna[20];
inta;
chars[10];
doubley;
intm;
intd;
charadd[30];
charq[20];
charmob[20];
chare[100];
cout<<"输入您需要修改的同学的学号:
";
cin>>n;
for(i=0;i{
if(stud[i].num==n)
{
cout<<"新的姓名:
";
cin>>na;
strcpy(stud[i].name,na);
cout<<"新的年龄:
";
cin>>a;
stud[i].age=a;
cout<<"新的性别:
";
cin>>s;
strcpy(stud[i].sex,s);
cout<<"新的出生日期:
"<cout<<"年:
";
cin>>y;
stud[i].year=y;
cout<<"月:
";
cin>>m;
stud[i].month=m;
cout<<"日:
";
cin>>d;
stud[i].day=d;
cout<<"新的住址:
";
cin>>add;
strcpy(stud[i].address,add);
cout<<"新的扣扣:
";
cin>>q;
strcpy(stud[i].qq,q);
cout<<"新的手机:
";
cin>>phn;
strcpy(stud[i].mobile,mob);
cout<<"新的email:
";
cin>>e;
strcpy(stud[i].email,e);
flag=1;
cout<cout<<"修改后同学的信息为:
"<cout<<"这是第"<<(i+1)<<"个同学"<cout<<"学号:
"<cout<<"姓名:
"<cout<<"年龄:
"<cout<<"性别:
"<cout<<"出生日期:
"<cout<<"住址:
"<cout<<"扣扣:
"<cout<<"手机:
"<cout<<"Email:
"<}
}
if(flag==0)
cout<<"没有寻找到您修改的同学的信息!
"<}
此函数依然还是用flag判断有没有所需要修改的同学的信息,如果有,修改后再输出修改后的同学信息,如果没有,输出没有找到您需要寻找的信息。
7、start函数
程序:
voidmenu:
:
start()
{
inti;
cout<<"\t\t|********************************************|"<cout<<"\t\t||"<cout<<"\t\t|热烈欢迎使用同学录管理系统!
|"<cout<<"\t\t||"<cout<<"\t\t|制作人:
宋长健|"<cout<<"\t\t||"<cout<<"\t\t|学号:
1008044128|"<cout<<"\t\t||"<cout<<"\t\t|********************************************|"<cout<cout<<"同学信息管理系统的菜单:
"<cout<cout<<"\t1.同学滴信息添加";
cout<<"\t2.同学滴信息浏览";
cout<<"\t3.同学滴信息查询"<cout<<"\t4.同学滴信息排序";
cout<<"\t5.同学滴信息删除";
cout<<"\t6.同学滴信息修改"<cout<<"\t0.退出"<cout<cout<<"请选择命令(0-6):
";
cin>>i;
if(i==1)
{
add();
remind();
}
if(i==2)
{
display();
remind();
}
if(i==3)
{
survey();
remind();
}
if(i==4)
{
sort();
remind();
}
if(i==5)
{
del();
remind();
}
if(i==6)
{
modify();
remind();
}
if(i==0)
{
quit();
}
}
此函数的作用就是让系统以菜单的方式工作,使用户方便、明确的知道系统的各项功能。
8、remind函数
程序:
voidmenu:
:
remind()
{
intj;
cout<<"小厮我提醒您是否继续其他的操作呢?
"<cout<<"1.必须继续;0,耍够了,我要退出."<cin>>j;
if(j==0)
quit();
if(j==1)
start();
}
这个函数的作用就是在用户每使用完系统的一项功能之后出现的提示,询问用户是否需要进行其他操作,使系统更加人性化。
9、quit函数
程序:
voidmenu:
:
quit()
{
cout<<"\t\t\t谢谢玩耍同学露官吏系统,bye~~!
"<system("pause");
}
当用户在remind函数中选择不继续使用之后,此函数就会输出谢谢使用系统的话语,使系统更加的人性化。
3.2调试中出现的错误
在这次课程设计的过程中,曾经出过最大的问题就是,手机号码输出的问题,最一开始,我定义num、mobile和qq的时候用的是double,因为这是逻辑错误,但是语法正确,所以编译没有显示错误,在我测试的时候,因为我为了简便,输入的很简单的数字,没有仔细测试,造成在正式使用截图的时候,变成了这样
学号、扣扣和手机都是以科学技术法显示的,后来我想改用long,但是到输入手机的时候直接会崩溃退出,所以我就用字符数组的方式定义,就可以了的说。
通过这个问题使我明白了,程序测试的时候不能图省事,要仔仔细细检查。
3.3源代码
#include
#include
#include
usingnamespacestd;
constintm=100;
inti;
structstudent
{
longnum;
charname[20];
intage;
charsex[10];
doubleyear;
intmonth;
intday;
charaddress[30];
charqq[20];
charmobile[20];
charemail[100];
};
classmenu
{
public:
voidadd();
voiddisplay();
voidsurvey();
voidsort();
voiddel();
voidmodify();
voidstart();
voidremind();
voidquit();
protected:
studentstud[m];
intnumberofpeople;
};
voidmenu:
:
add()
{
ofstreamoutfile("D:
\\student.txt",ios:
:
binary);
if(!
outfile)
{
cout<<"对不起,你的文件打开失败了哦!
亲~~"<abort();
}
cout<<"请输入你们班的人数:
";
cin>>numberofpeople;
cout<for(i=0;i{
cout<<"这是第"<<(i+1)<<"个同学的信息:
"<cout<<"学号:
";
cin>>stud[i].num;
cout<<"姓名:
";
cin>>stud[i].name;
cout<<"年龄:
";
cin>>stud[i].age;
cout<<"性别:
";
cin>>stud[i].sex;
cout<<"出生日期:
"<cout<<"年:
";
cin>>stud[i].year;
cout<<"月:
";
cin>>stud[i].month;
cout<<"日";
cin>>stud[i].day;
cout<<"住址:
";
cin>>stud[i].address;
cout<<"扣扣:
";
cin>>stud[i].qq;
cout<<"手机:
";
cin>>stud[i].mobile;
cout<<"email:
";
cin>>stud[i].email;
cout<outfile.write((char*)&stud[i],sizeof(stud[i]));
}
outfile.close();
}
voidmenu:
:
display()
{
students[m];
ifstreaminfile("D:
\\student.txt",ios:
:
binary);
if(!
infile)
{
cout<<"对不起,你企图打开的操作失败了哟!
"<abort();
}
for(i=0;iinfile.read((char*)&s[i],sizeof(s[i]));
infile.close();
for(i=0;i{
cout<<"第"<<(i+1)<<"个同学的信息:
"<cout<<"学号:
"<
cout<<"姓名:
"<
cout<<"年龄:
"<
c