学生管理程序课程设计.docx
- 文档编号:8745181
- 上传时间:2023-02-01
- 格式:DOCX
- 页数:34
- 大小:270.68KB
学生管理程序课程设计.docx
《学生管理程序课程设计.docx》由会员分享,可在线阅读,更多相关《学生管理程序课程设计.docx(34页珍藏版)》请在冰豆网上搜索。
学生管理程序课程设计
程序设计类课程
课程设计报告书
题目:
学生成绩管理程序
系别:
计算机科学与应用系
学号:
091007113
学生姓名:
景晓楠
指导教师:
薛海燕
完成日期:
2011年6月1日
学生成绩管理程序
1、需求分析
输入部分,要求输入学生信息,包括学生的姓名、学号、三门课的成绩、总分。
程序部分通过输入序号来完成指定要求,包括删除记录、修改记录、查询记录和对记录进行排序。
输出结果。
2、概要设计
程序流程可以用以下流程图来刻画:
3、详细设计
采用VC2009作为开发工具,建立文件并进行读写操作,定义学生信息,运用指针和switch语句实现学生信息的删除、修改、查询和排序。
3.1学生信息的定义
定义并录入学生信息,定义学生信息我们用C++中的类来描述,代码如下:
classstudent
{
public:
student*next;
public:
stringname;//姓名
longnum;//学号
intx,y,z;//数学,语文,英语
intAA;//总分
voidplay(){cout< "< "< "< "< student(stringsname,longsnum,intsx,intsy,intsz) { name=sname; num=snum; x=sx; y=sy; z=sz; } }; classcla { public: cla()//构造函数 { stu=0; sload(); } ~cla()//析构函数 { student*p; p=stu; while(p) { p=p->next; deletestu; stu=p; } stu=0; } voidsadd();//录入 voidsremove();//删除 voidsamend();//修改 voidssearch();//查询 voidstaxis();//排序 voidsload();//读取 //排序函数 voidpxh(); voidpAA(); private: student*stu;//头接点 }; voidcla: : sadd()//录入 { student*q; stringname1; longnum1; intx1,y1,z1; system("cls"); cout<<"\n**录入的学生**\n"< cout<<"请输入学生的(中间用空格间隔)"< cout<<"姓名学号数学成绩语文成绩英语成绩: "< cin>>name1>>num1>>x1>>y1>>z1; q=newstudent(name1,num1,x1,y1,z1); q->next=0; q->AA=x1+y1+z1; if(stu) { student*t; t=stu; if(t->num==num1) { cout<<"学号已存在,请重新输入"< return; } while(t->next) { if(t->num==num1) { cout<<"学号已存在,请重新输入"< return; } t=t->next; } t->next=q; } else { stu=q; } cout<<"输入完毕"< } 3.2删除记录 voidcla: : sremove()//删除 { system("cls"); intnum1; 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]"< charc;cin>>c; if(toupper(c)! ='Y')return; if(p1==stu)//若要删除的结点是第一个结点 { stu=p1->next; deletep1; } else//若要删除的结点是后续结点 { p2->next=p1->next; deletep1; } cout<<"找到学号为"< } else//未找到结点 cout<<"未找到想要删除的学生! \n"; } 3.3修改记录 voidcla: : samend()//修改 { system("cls"); longnum1; 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<<"学号是"< cout<<"姓名"< cout<<"请输入修改后的信息: 姓名数学成绩语文成绩英语成绩"< cin>>p1->name>>p1->x>>p1->y>>p1->z; p1->AA=p1->x+p1->y+p1->z; cout<<"修改成功"< } else//未找到接点 cout<<"未找到! \n"; } 3.4查询记录 voidcla: : ssearch()//查询 { system("cls"); cout<<"\n**查询学生信息**\n"< cout<<"请输入查询方式: "< cout<<"1.按学号查询"< cout<<"2.按姓名查询"< cout<<"3.返回"< charc;cin>>c; switch(c) { case'1': { longnum1; 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<<"学号是"< cout<<"姓名: "< "< "< "< cout<<"查询完毕..."; } else//未找到接点 cout<<"未找到! \n"; break; } case'2': { stringname1; cout<<"要查询的学生姓名"< cin>>name1; //查找要查询的结点 student*p1,*p2; p1=stu; while(p1) { if(p1->name==name1) break; else { p2=p1; p1=p1->next; } } if(p1! =NULL) { cout< cout<<"学号: "< "< "< "< cout<<"查询完毕..."; } else//未找到接点 cout<<"未找到! \n"; break; } case'3': return; } } 3.5对记录进行排序 voidcla: : pxh()//按学号排序 { student*p1,*p2; intn; p1=stu; n=1; while(p1->next) {n++;p1=p1->next;} cout<<"共有"< inti; p1=stu; for(i=1;i { 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); } voidcla: : pAA()//按总分排序 { student*p1,*p2; intn; p1=stu; n=1; while(p1->next) {n++;p1=p1->next;} cout<<"共有"< inti; p1=stu; for(i=1;i {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); } voidcla: : staxis()//排序 { system("cls"); charc; cout<<"请选择以何种方式排序: "< cout<<"1……以学号排序"< cout<<"2……以总分排序"< cout<<"3……返回"< cout<<"请选择(1-3)"< cin>>c; switch(c) { case'1': pxh();break; case'2': pAA();break; case'3': return; } } 4、调试分析 在设计过程中主要遇到下列问题: (1)、析构函数的构建。 通过查阅《c++高级语言程序设计》一书得到解决. (2)、成员原函数的调用。 通过查阅《c++高级语言程序设计》一书得到解决。 (3)、指针的运用。 通过查阅《c语言程序》一书得到解决。 5、测试结果 下面是我的测试函数及运行结果: #include #include #include #include usingnamespacestd; #definemax100; classstudent { public: student*next; public: stringname;//姓名 longnum;//学号 intx,y,z;//数学,语文,英语 intAA;//总分 floatave;//平均分 voidplay(){cout< "< "< "< "< "< student(stringsname,longsnum,intsx,intsy,intsz) { name=sname; num=snum; x=sx; y=sy; z=sz; } }; classcla { public: cla()//构造函数 { stu=0; sload(); } ~cla()//析构函数 { student*p; p=stu; while(p) { p=p->next; deletestu; stu=p; } stu=0; } voidsadd();//录入 voidsremove();//删除 voidsamend();//修改 voidssearch();//查询 voidstaxis();//排序 voidsload();//读取 //排序函数 voidpxh(); voidpAA(); voidqave(); private: student*stu;//头接点 }; voidcla: : sadd()//录入 { student*q; stringname1; longnum1; intx1,y1,z1; system("cls"); cout<<"\n**录入的学生**\n"< cout<<"请输入学生的(中间用空格间隔)"< cout<<"姓名学号数学成绩语文成绩英语成绩: "< cin>>name1>>num1>>x1>>y1>>z1; q=newstudent(name1,num1,x1,y1,z1); q->next=0; q->AA=x1+y1+z1; q->ave=(x1+y1+z1)/3; if(stu) { student*t; t=stu; if(t->num==num1) { cout<<"学号已存在,请重新输入"< return; } while(t->next) { if(t->num==num1) { cout<<"学号已存在,请重新输入"< return; } t=t->next; } t->next=q; } else { stu=q; } cout<<"输入完毕"< } voidcla: : sremove()//删除 { system("cls"); intnum1; 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]"< charc;cin>>c; if(toupper(c)! ='Y')return; if(p1==stu)//若要删除的结点是第一个结点 { stu=p1->next; deletep1; } else//若要删除的结点是后续结点 { p2->next=p1->next; deletep1; } cout<<"找到学号为"< } else//未找到结点 cout<<"未找到想要删除的学生! \n"; } voidcla: : samend()//修改 { system("cls"); longnum1; 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<<"学号是"< cout<<"姓名"< cout<<"请输入修改后的信息: 姓名数学成绩语文成绩英语成绩"< cin>>p1->name>>p1->x>>p1->y>>p1->z; p1->AA=p1->x+p1->y+p1->z; cout<<"修改成功"< } else//未找到接点 cout<<"未找到! \n"; } voidcla: : ssearch()//查询 { system("cls"); cout<<"\n**查询学生信息**\n"< cout<<"请输入查询方式: "< cout<<"1.按学号查询"< cout<<"2.按姓名查询"< cout<<"3.返回"< charc;cin>>c; switch(c) { case'1': { longnum1; 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<<"学号是"< cout<<"姓名: "< "< "< "< "< cout<<"查询完毕..."; } else//未找到接点 cout<<"未找到! \n"; break; } case'2': { stringname1; cout<<"要查询的学生姓名"< cin>>name1; //查找要查询的结点 student*p1,*p2; p1=stu; while(p1) { if(p1->name==name1) break; else { p2=p1; p1=p1->next; } } if(p1! =NULL) { cout< cout<<"学号: "< "< "< "< "< cout<<"查询完毕..."; } else//未找到接点 cout<<"未找到! \n"; break; } case'3': return; } } voidcla: : pxh()//按学号排序 { student*p1,*p2; intn; p1=stu; n=1; while(p1->next) {n++;p1=p1->next;} cout<<"共有"< inti; p1=stu; for(i=1;i { 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); } voidcla: : pAA()//按总分排序 { student*p1,*p2; intn; p1=stu; n=1; while(p1->next) {n++;p1=p1->next;} cout<<"共有"< inti; p1=stu; fo
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 学生 管理程序 课程设计