欢迎来到淘文阁 - 分享文档赚钱的网站! | 帮助中心 好文档才是您的得力助手!
淘文阁 - 分享文档赚钱的网站
全部分类
  • 研究报告>
  • 管理文献>
  • 标准材料>
  • 技术资料>
  • 教育专区>
  • 应用文书>
  • 生活休闲>
  • 考试试题>
  • pptx模板>
  • 工商注册>
  • 期刊短文>
  • 图片设计>
  • ImageVerifierCode 换一换

    学生学籍管理系统课程设计报告c++(共32页).doc

    • 资源ID:13516224       资源大小:553KB        全文页数:32页
    • 资源格式: DOC        下载积分:20金币
    快捷下载 游客一键下载
    会员登录下载
    微信登录下载
    三方登录下载: 微信开放平台登录   QQ登录  
    二维码
    微信扫一扫登录
    下载资源需要20金币
    邮箱/手机:
    温馨提示:
    快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。
    如填写123,账号就是123,密码也是123。
    支付方式: 支付宝    微信支付   
    验证码:   换一换

     
    账号:
    密码:
    验证码:   换一换
      忘记密码?
        
    友情提示
    2、PDF文件下载后,可能会被浏览器默认打开,此种情况可以点击浏览器菜单,保存网页到桌面,就可以正常下载了。
    3、本站不支持迅雷下载,请使用电脑自带的IE浏览器,或者360浏览器、谷歌浏览器下载即可。
    4、本站资源下载后的文档和图纸-无水印,预览文档经过压缩,下载后原文更清晰。
    5、试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。

    学生学籍管理系统课程设计报告c++(共32页).doc

    精选优质文档-倾情为你奉上南昌航空大学学院:软件学院 学号: 姓名:未猛猛 指导老师:王星目录一、需求分析先看题目要求:用数据文件存放学生的学籍,可对学生学籍进行注册,增加,修改,删除,查找,学籍变化等操作。系统必须以菜单方式工作;登记学生的学号,姓名,年龄,籍贯,系别,专业,班级;修改已知学生的学号信息;删除已知学号的学生信息;查找已知学号的学生信息;按学号,专业输出学生籍贯表;查询学生学籍变化,比如入学,转专业,退学,降级,休学,毕业;1.本题目要求做出学生学籍管理系统,系统以菜单方式工作,我们可以用一个类的成员函数来单独完成菜单功能,然后在主函数调用。2.根据题目我们首先确定用两个类去实现,一个可类为student,里面为学生的信息,例如学号,姓名等,另一个类为operate;实现各个操作,例如注册,增加等。3.需要对学生学籍进行注册,那么我们就用input()输入函数去完成注册,在opetate类体里面完成,在student中用input()去实现输入功能,在operate中用input()对student中的input()进行调用,具体调用及实现会在下面详细介绍。4.需要对学生信息进行增加,那么我们就增加个add()函数,实现注册玩后的增加功能。5.可以在operate中添加mend()函数和del()函数实现修改和删除功能,用found()函数和show()函数实现查找和统计功能,单独用一个xueji()函数去实现学籍变化操作,如入学,转专业等,并按学号和专业去输出学生籍贯表。6.主函数执行命令:1.初始化对象2.初始化菜单3. 操作执行,结果显示二、概要设计1.两个类模块:第一个class student,首先在student中定义几个保护型的数据成员,学号num,姓名 name,性别sex,a年龄 age,籍贯address,学院 collge,班级classes,专业zhuan;再定义一个student的next指针student *next;这样是将两个类联系起来的桥梁。 成员函数介绍string getname ()/返回姓名name; Int getnum()/返回学号num; string getplace()/返回籍贯 address; String getzhuan();/返回专业 zhuan; void getxueji(int b,int c,int d,int e,int f,int g)/将6个整型值分别表示入学,转专业,退学,降级,休学,毕业; 整型值负值1或0; Void input();/在学生类中定义一个input函数实现屏幕上的输入功能; void input(ifstream &is)/创建文件类型引用Void output()/输出学生的信息,与类operate中的output联系将其打印在屏幕,下面会讲述;void output(ofstream &os)/实现对文件的写入2. 第二个类模块操作类operate,首先两个类必须有个接口将他们联系起来,这样我们就在用一个类的对象指针作为operate类中的一个私有数据成员,故定义私有成员student *head再定义一个整型key,下面在保存和推出时会用到;下面介绍共有的成员函数: Operate()/构造函数,赋初值operate()/析构函数Void input()/这里的input函数才是实现真正的注册,用此数据成员(即student的对象)实现对学生类中input的调用;Void show()/次实现实现统计功能Void mend()/实现对注册信息的修改功能Void found()/实现查找功能,并将其显示Int find(student *p,int num,string name)/自查找函数,在此函数中实现查找功能,并在found函数中调用它完成查找的操作Void del()/此函数实现删除功能,与find()共同实现Void add()/增加函数Void xueji()/查询学籍变化的函数Void jiguan()/按学号,专业输出籍贯的函数Void bf()/初始化的文件操作函数Void save()/保存函数Int mainmenu()/主菜单函数Int key()/返回key Void setkey()/创建key3. void main()/主函数中实现对象的建立和各个功能的调用和主菜单的循环;三、详细设计 这里我们将详细的介绍各个函数的函数体实现与之间的调用; 1.首先看类student; string getname()return name; /返回姓名name;name为字符串型; int getnum() return num; /返回一个整形值 学号num; string getplace() /返回籍贯(字符串型) return address; string getzhuan() /返回专业(字符串型) return zhuan; 看函数getxueji()void getxueji(int b,int c,int d,int e,int f,int g)/实现学籍的查询if(b=1) cout<<"入学 " /如果b=1,那么就输出入学;相反则未入学 elsecout<<"未入学 "if(b=0)cout<<"暂无学籍信息" /未入学,则显示无学籍信息elseif(c=1) cout<<"转专业 " /若c=1,显示转专业 else cout<<"未转专业 " /不等于,则显示未转专业 if(d=1) cout<<"未退学 " ; /同上,若d=1,则显示未退学else cout<<"已退学 " /若d!=1则显示已退学,下面的同上if(e=1) cout<<"未降级 "else cout<<"已降级 "if(f=1) cout<<"未休学 "else cout<<"已休学 "if(g=1) cout<<"未毕业 "else cout<<"已毕业 "void input()/输入函数int a=1; /定义整型变量并负值1cout<<"ttt请按提示输入:"<<endl;cout<<"ttt输入学号:"cin>>num;cout<<"ttt输入姓名:"cin>>name;cout<<"ttt输入年龄:"cin>>age;docout<<"tt输入性别:"cin>>sex; if(sex="男"|sex="女") /判断输入的性别是否正确 cout<<"ttt输入籍贯:"cin>>address; cout<<"ttt输入学院:"cin>>collage; cout<<"ttt输入班级:"cin>>classes; cout<<"ttt输入专业:"cin>>zhuan; cout<<"n请输入学生学籍信息:默认1:入学;1:转专业;1:未退 学;1:未降级;1:未休学;1:未毕业;"<<endl; cout<<"tt输入学籍信息,请依次输入6个数:(0或1) /上面已经 提过,输入0或者1" cout<<endl; cin>>b>>c>>d>>e>>f>>g;/一次输入五个值(0或1) getxueji(b,c,d,e,f,g); /调用个getxueji()函数,上面已介绍该函数 a=0; /把0赋给a,使循环结束 else cout<<"无此性别,请重新输入!"<<endl; a=1;/重复while循环while(a); void input(ifstream &is) /创建文件类型引用is>>num>>name>>age>>sex>>address>>collage>>classes >>zhuan; /输入学号,姓名,年龄,性别,学院,班级,专业 is.get(); /获取文件指针void output() /输出显示函数,实现显示cout<<"学生的基本信息如下:"<<endl; cout<<"学号:"<<num; cout<<" 姓名:"<<name;cout<<" 年龄:"<<age;cout<<" 性别:"<<sex;cout<<" 籍贯:"<<address;cout<<" 学院:"<<collage;cout<<" 班级:"<<classes;cout<<" 专业:"<<zhuan<<endl;void output(ofstream &os) /将内容写入文件显示 os<<setw(6)<<num<<setw(10)<<name<<setw(5)<<age<<setw(10)<<sex<< setw(10)<<address<<setw(10)<<collage<<setw(6)<<classes <<setw(10)<<zhuan<<endl; / 写入文件并为各个数据分配宽度2. student类中的函数已经介绍清楚,下面看第二个类opetate首先定义私有成员student *head /将student 的对象指针作为该类的私 有数据成员,使该类中函数可以实现对student类各个函数的调用;再定义和一个整型key变量;operate() /该类的构造函数head=new student; head->next=NULL;key=1;operate()delete head; /析构函数 void operate:input() /注册(输入)函数,和上个类的input一块/实现功能看下面函数体student *p,*p2=NULL; /定义一个对象指针p,p2指向空 p=head; int n; /把p赋给头指针headwhile(n) /进行循环 p2=new student; p2->input(); /为p2开辟空间并指向/input函数 p->next=p2; p2->next=NULL; p=p->next; /增加新的结点 cout<<"ttt按1继续,按0返回:" cin>>n; /输入n判断/while循环是否继续void operate:add() /增加函数,和input()功能相同input(); /将input在执行一次,void operate:jiguan() /输出籍贯函数 student *p;/定义学生类的指针p并负值head p=head; while(p->next) / 执行循环直至p->next=NULL结束 cout<<"学号:"<<(p->next)->getnum()<<" "<<"专业:"<<(p->next)->getzhuan()<<" "<<"籍贯:"<<(p->next)->getplace()<<" "<<endl; p=p->next; /p执行循环,指向下一个 void operate:xueji() /查询学籍变化函数student *p=head;int num; /定义指针p,负值headcout<<"输入查询学生学号:"cin>>num; /输入学号if(p->getnum()!=num) /判断输入的学号是否等于第一个注册/的学生学号,p=p->next; /若不等,令p指向下一个,继续判断 cout<<"该学生的学籍信息为:" p->getxueji(p->b,p->c,p->d,p->e,p->f,p->g); /调用getxueji()函数void operate:show() /统计(显示)函数 student *p; p=head; /定义指针p并赋值headwhile(p->next) /执行循环,只到p->next为空 (p->next)->output(); /指向调用output函数 p=p->next; /使p指向下一个void operate:bf() /初始化函数,文件操作 student *p,*p2; /定义两个指针p和p2,将p赋值head p=head; long t; /定义长整型t ifstream is("课设.txt",ios:in); /打开课设.txt文件 if(!is) / 如果打不开 ofstream os("课设.txt",ios:out); /进行写操作 os.close(); return ; int num=-1; while(1) num=-1; t=is.tellg(); /搭配seeg() is>>num; is.seekg(t); /不连续进行访问if(num<0) is.close(); /关闭文件 return; p2=new student; p2->input(is); /为p2分配空间,并指向input p->next=p2; p2->next=NULL; p=p->next; / 开辟新的结点,以便下次主函数运行的时候已经为此开辟了空间,否则将不能打开 void operate:save() /保存函数 student *p; p=head; /定义指针p赋值headofstream os("课设.txt",ios:out); /打开文件进行写入保存while(p->next) (p->next)->output(os); /将p->next指向的output内容写入/ 文件p=p->next; /p指向下一个cout<<"ttt文件已保存! "<<endl;operate:setkey(0); /将key 赋值0int operate:find(student *p1,int num,string pn) /子查找函数,里面/三个参数,一个是指向指针的指针p1,一个是学号num,和姓名pn student *p; p=head;/同上while(p->next) (*p1)=p; /将p赋值*p1,用双指针,方便下面的调用if( (p->next)->getnum()=num|(p->next)->getname()=pn)/判/断是否相等(学号或姓名) return 1; p=p->next; return 0; void operate:found() /查找函数student *p; int num=-1;int t=-1; /随便赋值初值num和t为-1 string name;do cout<<"1:按学号查找 ,2:按姓名查找:" cin>>t;while(t>2|t<1); if(t=1) /即按学号查找 cout<<"ttt请输入学号:" cin>>num; if(t=2) /即按姓名查找 cout<<"ttt请输入姓名:" cin>>name; if( !find(&p,num,name) ) /调用find函数实现查找 cout<<"tt找不到你要查找的内容!"<<endl; return; (p->next)->output(); /将其输出void operate:del() /删除函数 student *p,*p2; int num; cout<<"ttt输入学号:"cin>>num;if( !find(&p,num,"") ) /再次调用find函数 cout<<"tt找不到你要删除的内容!"<<endl; return; (p->next)->output(); /输出 p2=p->next; p->next=p2->next; delete p2; /删除结点void operate:mend() /修改函数 student *p; int num=-1,n; string name; do cout<<"tt1:按学号修改,2:按姓名修改:" cin>>n; while(n<1|n>2); if(n=1) /即按学号修改 cout<<"ttt输入学号:" cin>>num; if(n=2) /按姓名修改 cout<<"ttt输入姓名:" cin>>name; if( !find(&p,num,"name") ) /再次调用find函数查找要修改的/内容 cout<<"tt找不到你要修改的内容!"<<endl; return; (p->next)->output(); /先将其输出 cout<<"ttt输入修改信息:" (p->next)->input(); /再次输入进行修改int operate:mainmenu() /主菜单函数int n;cout<<"t 001 001 001 001 001 欢迎光临学生学籍管理系统 001 001 001 001 001 "<<endl<<" * * * * * * * * * * * * * * * * * * * * * * * * * * *"<<endl<<" * * * * * * * * * * * * * * * * * * * * * * * * * * *"<<endl<<" * * * * * * * * 001 1.学生注册 * * * * * * * *"<<endl<<" * * * * * * * * 001 2.增加 * * * * * * * *"<<endl<<" * * * * * * * * 001 3.修改信息 * * * * * * * *"<<endl<<" * * * * * * * * 001 4.删除 * * * * * * * *"<<endl<<" * * * * * * * * 001 5.查找 * * * * * * * *"<<endl<<" * * * * * * * * 001 6.统计 * * * * * * * *"<<endl<<" * * * * * * * * 001 7.学籍查询 * * * * * * * *"<<endl<<" * * * * * * * * 001 8.籍贯输出 * * * * * * * *"<<endl <<" * * * * * * * * 001 9.保存信息 * * * * * * * *"<<endl<<" * * * * * * * * 001 0.退出系统 * * * * * * * *"<<endl<<" * * * * * * * * * * * * * * * * * * * * * * * * * * *"<<endl<<" * * * * * * * * * * * * * * * * * * * * * * * * * * *"<<endl<<" 请选择:"cin>>n; return n; 3. 两个类已经介绍完毕,下面看主函数 void main() operate o; /定义operate的对象o int n=1;int c; o.bf(); /初始化查找文件 while(n) / 使其能在没有命令的前提下保持菜单的循环 cout<<endl; c=o.mainmenu(); switch(c) /选择语句进行判断该执行什么功能 case 1:o.input();break; /若c=1,执行input(); case 2:o.add();break; case 3:o.mend();break; case 4:o.del();break; case 5:o.found();break; case 6:o.show();break; case 7:o.xueji();break; case 8:o.jiguan();break; case 9:o.save();break; case 0: if(o.getkey()=1) /判断key是否等于1 cout<<"是否保存,按1:保存,按2:不保存。选择:" cin>>n; if(n=1) o.save(); n=0; /将n赋值0,跳出while循环 break;结构图如下:8籍贯输出7学籍查询现行系统组织结构图:开始选择菜单序号0退出9保存信息6统计成绩5查找信息4删除信息3修改信息2增加信息1录入信息选择查找方式1?按要求逐步输入学生信息2?保存?按编号修改按姓名修改保存退出系统功能结构图:主程序籍贯输出学籍查询采单程序初始化程序增加删除修改统计退出查找显示输入类体结构:Getname()Student()Input(ifstream&is)ClassStudentGetnum()Getxueji()Getzhuan()Input()student()Output(ofsttream&os)Output()Bf()Found()opetate()Operate()Mainmenu()Input()ClassOperateGetkey()Find()Setkey()Add()Show()Mend()Save()Del()Jiguan()Xueji()四 调试分析1.首先设计思想上开始想用友员去实现两个类的相互联系,但是因为仅仅用一个类去调用另一个类的函数,所以就用一个类的对象指针作为另一个类的数据成员更为合适,调用也简单很多2. 编译会出现很多错误,但是却都是不太难,可以在努力下改正,但是运行是却出现问题,会自动出现错误而关闭,后来知道是指针的运用不当!在 input函数中当p2指向学生类中的input()之后,应先将p2赋给p->next而不是将p->next赋给p2,这样p2空间出现问题,也未能释放,出现错误!故不能运行;3. 开始菜单只出现一次然后就跳出了,后来加了个while循环将它一直循环下去就可以;4. 运行后按9可以保存,但是再继续按0它将继续提示问是否保存,但此时已经保存,所以赘余,因此在类中加两个函数即可,即所看到的key;5. 在保存后出现乱码,即屯屯屯屯屯,主要是在output(os&)函数中的数据age未写入导致最后的专业未能存储进去,导致出现乱码!五、用户手册1.首先对此程序运行,然后会有菜单提示2.按键实现您所想的操作3.进行一次结束后会继续跳出菜单框,请按键实现继续循环,操作比较简单易懂六、测试数据我们依次看运行结果按键:1;再依次按提示输入 按1继续;先按0,在按2,进行信息添加按6进行显示继续按3进行修改修改完毕再次显示按4删除;删除完毕进行显示;按5进行查找按7看学籍输出按8输出学号专业和籍贯;按9进行文件的保存,便于下次的打开最后按0退出;此时文件已保存;七、附录#include<iostream>#include<string>#include<fstream>#include<iomanip> using namespace std; class student protected: int num; string name; string sex; int age; string address; string collage; string classes; string zhuan; public: int b,c,d,e,f,g; student *next;student()student() string getname() return name;int getnum() return num; string getplace() return address; string getzhuan() return zhuan; void getxueji(int b,int c,int d,int e,int f,int g)if(b=1) cout<<"入学 "elsecout<<"未入学 "if(b=0)cout<<"暂无学籍信息"elseif(c=1) cout<<"转专业 " else cout<<"未转专业 " if(d=1) cout<<"未退学 " ;else cout<<"已退学 "if(e=1) cout<<"未降级 "else cout<<"已降级 "if(f=1) cout<<"未休学 "else cout<<"已休学 "if(g=1) cout<<"未毕业 "else cout<<"已毕业 "void input()int a=1; cout<<"ttt请按提示输入:"<<endl;cout<<"ttt输入学号:"cin>>num;cout<<"ttt输入姓名:"cin>>name;cout<<"ttt输入年龄:"cin>>age;docout<<"tt输入性别:"cin>>sex; if(sex="男"|sex="女") cout<<"ttt输入籍贯:"cin>>address; cout<<"ttt输入学院:"cin>>collage; cout<<"ttt输入班级:"cin>>classes; cout<<"ttt输入专业:"cin>>zhuan; cout<<"n请输入学生学籍信息:默认1:入学;1:转专业;1:未退学;1:未降级;1:未休学;1:未毕业;"<<endl; cout<<"tt输入学籍信息,请依次输入6个数:(0或1)"cout<<endl; cin>>b>>c>>d>>e>>f>>g; getxueji(b,c,d,e,f,g); a=0; else cout<<"无此性别,请重新输入!"<<endl; a=1;while(a);void input(ifstream &is)/创建文件类型引用is>>num>>name>>age>>sex>>address>>collage>>classes >>zhuan; is.get();/获取文件指针void output()cout<<"学生的基本信息如下:"<<endl; cout<<"学号:"<<num; cout<<" 姓名:"<<name;cout<<" 年龄:"<<age;cout<<" 性别:"<<sex;cout<<" 籍贯:"<<address;cout<<" 学院:"<<collage;cout<<" 班级:"<<classes;cout<<" 专业:"<<zhuan<<endl;void output(ofstream &os) os<<setw(6)<<num<<setw(10)<<name<<setw(5)<<age<<setw(10)<<sex<< setw(10)<<address<<setw(10)<<collage<<setw(6)<<classes <<setw(10)<<zhuan<<endl; class operateprivate:student *head; int key; pu

    注意事项

    本文(学生学籍管理系统课程设计报告c++(共32页).doc)为本站会员(飞****2)主动上传,淘文阁 - 分享文档赚钱的网站仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知淘文阁 - 分享文档赚钱的网站(点击联系客服),我们立即给予删除!

    温馨提示:如果因为网速或其他原因下载失败请重新下载,重复下载不扣分。




    关于淘文阁 - 版权申诉 - 用户使用规则 - 积分规则 - 联系我们

    本站为文档C TO C交易模式,本站只提供存储空间、用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。本站仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知淘文阁网,我们立即给予删除!客服QQ:136780468 微信:18945177775 电话:18904686070

    工信部备案号:黑ICP备15003705号 © 2020-2023 www.taowenge.com 淘文阁 

    收起
    展开