1.看一下C和C++的关系,主要看区别基本输入流和输出流类cin、cout、引用、new和delete、行注释.
2.直接看类和对象(构造函数,析构函数,拷贝构造函数,成员函数,成员变量)
3.看作用域限定符“::”、对象生存期、友元和友元函数、静态成员、
4.看对象数组和指针、string类使用。
5.看继承和组合、虚函数和虚基类、虚函数、纯虚函数与抽象类
6.运算符重载、模板和函数重载。
看完这些基本上已经学完C++了,下面就要编程练习了!!注意,学程序必须是在上机的环境下学习的,我学了一个星期都是每天都是通过写程序学习的。
#include<iostream>#include<iomanip>
#include<fstream>
#include<string>
using namespace std
#define max 100
class student
{
public:
student *next
public:
string name//姓名
long num//学号
int x,y,z//数学,语文,英语
int AA//总分
void play(){cout<<name<<"学生的学号是"<<num<<",数学:"<<x<<",语文:"<<y<<",英语:"<<z<<",总分:"<<AA<<endl}
student(string sname,long snum,int sx,int sy,int sz)
{
name=sname
num=snum
x=sx
y=sy
z=sz
}
}
class cla
{
public:
cla()//构造函数
{
stu=0
sload()
}
~cla()//析构函数
{
student *p
p=stu
while(p)
{
p=p->next
delete stu
stu=p
}
stu=0
}
void sadd()//添加
void sremove()//删除
void samend()//修改
void ssearch()//查询
void staxis()//排序
void ssave()//保存
void sload()//读取
//排序函数
void pxh()
void psx()
void pyw()
void pyy()
void pAA()
private:
student *stu//头接点
}
void cla::sadd()//添加
{
student *q
string name1
long num1
int x1,y1,z1
system("cls")
cout<<"\n **增加的学生** \n"<<endl
cout<<"请输入学生的(中间用空格间隔) "<<endl
cout<<"姓名 学号 数学成绩语文成绩英语成绩:"<<endl
cin>>name1>>num1>>x1>>y1>>z1
q=new student(name1,num1,x1,y1,z1)
q->next=0
q->AA=x1+y1+z1
if(stu)
{
student *t
t=stu
if(t->num==num1)
{
cout<<"学号已存在,请重新输入"<<endl
return
}
while(t->next)
{
if(t->num==num1)
{
cout<<"学号已存在,请重新输入"<<endl
return
}
t=t->next
}
t->next=q
}
else
{
stu=q
}
cout<<"输入完毕"<<endl
}
void cla::sremove()//删除
{
system("cls")
int num1
cout<<"\n** 删除学生信息 **\n"
cout<<"请输入想要删除学生的学号:"
cin>>num1
//查找要删除的结点
student *p1,*p2
p1=stu
while(p1)
{
if(p1->num==num1)
break
else
{
p2=p1
p1=p1->next
}
}
//删除结点
if(p1!=NULL)//若找到结点,则删除
{
p1->play()
cout<<"确定删除吗?[Y/N]"<<endl
char ccin>>c
if(toupper(c)!='Y') return
if(p1==stu) //若要删除的结点是第一个结点
{
stu=p1->next
delete p1
}
else //若要删除的结点是后续结点
{
p2->next=p1->next
delete p1
}
cout<<"找到学号为"<<num1<<"的学生,并删除\n"
}
else //未找到结点
cout<<"未找到想要删除的学生!\n"
}
void cla::samend()//修改
{
system("cls")
long num1
cout<<"\n** 修改学生信息 **\n"
cout<<"输入要修改学生的学号"
cin>>num1
//查找要修改的结点
student *p1,*p2
p1=stu
while(p1)
{
if(p1->num==num1)
break
else
{
p2=p1
p1=p1->next
}
}
if(p1!=NULL)
{
cout<<"学号是"<<num1<<"的学生的信息"<<endl
cout<<"姓名 "<<p1->name<<"数学"<<p1->x<<"语文"<<p1->y<<"英语"<<p1->z<<endl
cout<<"请输入修改后的信息:姓名 数学成绩语文成绩英语成绩"<<endl
cin>>p1->name>>p1->x>>p1->y>>p1->z
p1->AA=p1->x+p1->y+p1->z
cout<<"修改成功"<<endl
}
else //未找到接点
cout<<"未找到!\n"
}
void cla::ssearch()//查询
{
system("cls")
cout<<"\n** 查询学生信息 **\n"<<endl
cout<<"请输入查询方式:"<<endl
cout<<"1.按学号查询"<<endl
cout<<"2.按姓名查询"<<endl
cout<<"3.返回"<<endl
char ccin>>c
switch (c)
{
case '1':
{
long num1
cout<<"要查询的学号"<<endl
cin>>num1
//查找要查询的结点
student *p1,*p2
p1=stu
while(p1)
{
if(p1->num==num1)
break
else
{
p2=p1
p1=p1->next
}
}
if(p1!=NULL)
{
cout<<"学号是"<<num1<<"的学生的信息"<<endl
cout<<"姓名:"<<p1->name<<" 数学:"<<p1->x<<" 语文:"<<p1->y<<" 英语:"<<p1->z<<endl
cout<<"查询完毕..."
}
else //未找到接点
cout<<"未找到!\n"
break
}
case '2':
{
string name1
cout<<"要查询的学生姓名"<<endl
cin>>name1
//查找要查询的结点
student *p1,*p2
p1=stu
while(p1)
{
if(p1->name==name1)
break
else
{
p2=p1
p1=p1->next
}
}
if(p1!=NULL)
{
cout<<name1<<"的学生的信息"<<endl
cout<<"学号:"<<p1->num<<" 数学:"<<p1->x<<" 语文:"<<p1->y<<" 英语:"<<p1->z<<endl
cout<<"查询完毕..."
}
else //未找到接点
cout<<"未找到!\n"
break
}
case '3': return
}
}
void cla::pxh() //按学号排序
{
student *p1,*p2
int n
p1=stu
n=1
while(p1->next)
{ n++p1=p1->next}
cout<<"共有"<<n<<"条信息..."<<endl
int i
p1=stu
for(i=1i<ni++)
{
p1=stu
if (p1->num>p1->next->num) // 如果头结点大于第二个的
{
p2=p1->next
p1->next=p1->next->next
p2->next=p1//头结点交换
stu=p2
}
p1=stu
while(p1->next->next) //中间的交换
{
p2=p1
p1=p1->next
if(p1->num>p1->next->num)
{
p2->next=p1->next
p1->next=p1->next->next
p2->next->next=p1
p1=p2->next//交换
}
}
}
p1=stu
do
{
p1->play()
p1=p1->next
}while(p1)
}
void cla::psx()//按数学成绩排序
{
student *p1,*p2
int n
p1=stu
n=1
while(p1->next)
{ n++p1=p1->next}
cout<<"共有"<<n<<"条信息..."<<endl
int i
p1=stu
for(i=1i<ni++)
{ p1=stu
if (p1->x>p1->next->x) // 如果头结点大于第二个的
{ p2=p1->next
p1->next=p1->next->next
p2->next=p1//头结点交换
stu=p2
}
p1=stu
while(p1->next->next) //中间的交换
{ p2=p1
p1=p1->next
if(p1->x>p1->next->x)
{
p2->next=p1->next
p1->next=p1->next->next
p2->next->next=p1
p1=p2->next//交换
}
}
}
p1=stu
do
{ p1->play()
p1=p1->next
}while(p1)
}
void cla::pyw()//按语文成绩排序
{
student *p1,*p2
int n
p1=stu
n=1
while(p1->next)
{ n++p1=p1->next}
cout<<"共有"<<n<<"条信息..."<<endl
int i
p1=stu
for(i=1i<ni++)
{ p1=stu
if (p1->y>p1->next->y) // 如果头结点大于第二个的
{ p2=p1->next
p1->next=p1->next->next
p2->next=p1//头结点交换
stu=p2
}
p1=stu
while(p1->next->next) //中间的交换
{ p2=p1
p1=p1->next
if(p1->y>p1->next->y)
{
p2->next=p1->next
p1->next=p1->next->next
p2->next->next=p1
p1=p2->next//交换
}
}
}
p1=stu
do
{ p1->play()
p1=p1->next
}while(p1)
}
void cla::pyy()//按英语成绩排序
{
student *p1,*p2
int n
p1=stu
n=1
while(p1->next)
{ n++p1=p1->next}
cout<<"共有"<<n<<"条信息..."<<endl
int i
p1=stu
for(i=1i<ni++)
{ p1=stu
if (p1->z>p1->next->z) // 如果头结点大于第二个的
{ p2=p1->next
p1->next=p1->next->next
p2->next=p1//头结点交换
stu=p2
}
p1=stu
while(p1->next->next) //中间的交换
{ p2=p1
p1=p1->next
if(p1->z>p1->next->z)
{
p2->next=p1->next
p1->next=p1->next->next
p2->next->next=p1
p1=p2->next//交换
}
}
}
p1=stu
do
{ p1->play()
p1=p1->next
}while(p1)
}
void cla::pAA()//按总分排序
{
student *p1,*p2
int n
p1=stu
n=1
while(p1->next)
{ n++p1=p1->next}
cout<<"共有"<<n<<"条信息..."<<endl
int i
p1=stu
for(i=1i<ni++)
{ p1=stu
if (p1->AA>p1->next->AA) // 如果头结点大于第二个的
{ p2=p1->next
p1->next=p1->next->next
p2->next=p1//头结点交换
stu=p2
}
p1=stu
while(p1->next->next) //中间的交换
{ p2=p1
p1=p1->next
if(p1->AA>p1->next->AA)
{
p2->next=p1->next
p1->next=p1->next->next
p2->next->next=p1
p1=p2->next//交换
}
}
}
p1=stu
do
{ p1->play()
p1=p1->next
}while(p1)
}
void cla::staxis()//排序
{
system("cls")
char c
cout<<"请选择以何种方式排序:"<<endl
cout<<"1……以学号排序"<<endl
cout<<"2……以数学成绩排序"<<endl
cout<<"3……以语文成绩排序"<<endl
cout<<"4……以英语成绩排序"<<endl
cout<<"5……以总分排序"<<endl
cout<<"6……返回"<<endl
cout<<"请选择(1-6)"<<endl
cin>>c
switch (c)
{
case '1':pxh()break
case '2':psx()break
case '3':pyw()break
case '4':pyy()break
case '5':pAA()break
case '6':return
}
}
void cla::ssave() //保存到文件
{
system("cls")
char c
cout<<"\n保存学生信息(将覆盖原文件),是否继续?[Y/N]:"cin>>c
if(toupper(c)!='Y') return
ofstream tfile("date.txt",ios_base::binary)
student *p=stu
while(p)// 写入文件
{
tfile<<p->name<<"\t"<<p->num<<"\t"<<p->x<<"\t"<<p->y<<"\t"<<p->z
tfile<<endl
p=p->next
}
tfile.close()
cout<<"保存完毕..."<<endl
}
void cla::sload() //读取
{
student *p
p=stu
while(p)
{
stu=p->next
delete p
p=stu
}
ifstream tfile("date.txt",ios_base::binary)
string name1
long num1
int x1,y1,z1
tfile>>name1>>num1>>x1>>y1>>z1
while(tfile.good())
{
//创建学生接点
student *s
s=stu
s=new student(name1,num1,x1,y1,z1)
s->next=0
s->AA=x1+y1+z1
if(stu) //若已经存在结点
{
student *p2
p2=stu
while(p2->next) //查找尾结点
{
p2=p2->next
}
p2->next=s//连接
}
else //若不存在结点(表空)
{
stu=s//连接
}
tfile>>name1>>num1>>x1>>y1>>z1
}
tfile.close()
cout<<"\n学生信息已经装入...\n"
}
void main()
{
char c
cla a
do
{
cout<<"\n 学 生 成 绩 管 理 系 统 \n"
cout<<"**************************************\n"
cout<<" 作者:软件工程06110119:zgjxwl \n"
cout<<" 1……增加学生 \n"
cout<<" 2……删除学生 \n"
cout<<" 3……修改学生 \n"
cout<<" 4……查询学生信息 \n"
cout<<" 5……排序 \n"
cout<<" 6……保存信息 \n"
cout<<" 7……读取信息 \n"
cout<<" 8……退出 \n"
cout<<"**************************************\n"
cout<<"请选择(1-8):"
cin>>c
switch(c)
{
case '1': a.sadd()break
case '2': a.sremove()break
case '3': a.samend()break
case '4': a.ssearch()break
case '5': a.staxis()break
case '6': a.ssave()break
case '7': a.sload()break
}
}while(c!='8')
}
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)