资源描述
.上海电力学院课程设计报告面向对象程序设计( 2014/2015 学年第一学期 )课题名称课程设计选题管理系统设计院(系)电子与信息工程学院专业通信工程学号20132234姓名储昊时间2015 年1月19日至 1月23日地点虚拟仿真实验室 (南 4 教 312 )专业 .专注.指导老师骆政屹目录一、设计目的与任务.错误!未定义书签。1、本课程设计的目的.32、本课程设计的任务 .错误!未定义书签。二、设计方案 . 错误!未定义书签。专业 .专注.1、总体设计.52、系统设计.错误!未定义书签。3、系统实现.54、系统测试16三.心得体会 . 20一、设计目的与任务1、本课程设计的目的1)课程设计是实践教学环节。设置课程设计的目的是加强学生对本课程及相关课程知识的理解 ,培养学生综合运用理论知识分析和解决实际问题的方法与能专业 .专注.力。有助于提高学生的创新能力和创新意识。搞好课程设计教学工作,对实现专业培养目标 ,提高学生全面素质有重要作用。2)通过课程设计更进一步理解C+ 的基础知识 。3)训练用系统的观点及软件开发的一般规范进行软件开发,并在此过程中培养严谨的科学态度和良好的工作作风。初步掌握软件开发过程中的问题分析、系统设计、程序编码 、调试、测试等方面的基本方法和技能。4) 熟练掌握C+ 知识在程序中的应用 ,了解书本知识在解决实际问题中的用途。2、本课程设计的任务( 1)问题描述课程设计题目包括 :编号、名称、关键词 、实现技术 、人员数 (由几个人来完成)等信息。学生信息包括 :学号、姓名、性别、年龄、班级、专业等信息 。( 2)功能要求 添加功能 :程序能够添加学生的记录和课程设计题目记录 ,提供选择界面供用户选择所要添加的类别 。添加记录时 ,要求学号和编号要唯一 。 如果添加了重复记录 ,则提示数据添加重复并取消添加 。 查询功能 :可根据学号 、姓名、编号、名称等信息对已添加的学生和课程设计题目进行查询,如果未找到 ,给出相应的提示信息,如果找到 ,则显示相应的记录信息 。专业 .专注. 显示功能 :可显示当前系统中所有学生的信息和课程设计题目信息,每条记录占据一行 。 编辑功能 :可根据查询结果对相应的记录进行修改,修改时注意学号的唯一性。 删除功能 :主要实现对已添加的学生和课程设计题目记录进行删除。如果当前系统中没有相应的记录,则提示 “记录为空 !”并返回操作 。 统计功能 :能根据多种参数进行统计。能按课程设计题目名称统计出学生选择该题目的人员的信息。 保存功能 :可将当前系统中各类记录存入文件中,存入方式任意 。 读取功能 :可将保存在文件中的信息读入到当前系统中,供用户进行使用。二、设计方案1 、总体设计我们设计一个程序对学生课程设计选题信息进行保存 ,对学生的选题信息进行可执行多种操作 ,该程序包括以下功能模块 :1)学生信息添加模块 :能够输入学生基本信息并保存到文件中 。2)查询模块 :显示所有符合要求的课程设计信息 。 3)编辑模块 :可对学生信息进行修改 。4 )删除模块 :可删除相应的学生信息 。 5)统计模块 :能根据多种参数进行统计 。 6)查看模块 :显示所有课程设计选题的信息 。7)退出系统 。为了完善系统 ,我们还添加了一个登录界面。专业 .专注.2 、系统设计1)类设计定义一个学生类 Student ,类中包括学号 stuid ,姓名 stuname ,性别 sex,年龄 age ,班级 clas,专业 specialty ,及所选课程的课程编号 couid ,课程名称 couname ,关键词 keyword ,实现技术 technology ;定义一个管理类 Guanli ,其成员函数包括向文件输入函数void write(int n);从文件读取函数 ,int read(); 添加学生信息函数void add() ,查询信息函数 voidsearch() , 按 学 号 查 询 函 数voidsearchsid() , 按 姓 名 查 询 函 数voidsearchsname() ,按题目编号查询函数voidsearchcid() ,按题目名称查询函数void searchcname() ;修改信息函数 void alter() ; 删除信息函数 void del() ;统计信息函数voidtotal() ;显示函数voiddisplay() 以及一个数据成员Studentstu50 。2)函数设计void write(intn) ,向文件中写入数据 ,打开文本文档 ,并将数据输入到文本文档中 ;intread() ,向文件中写入数据从文件中读数据,打开文本文档 ,并将文本文档中的数据输出;void add() ,添加学生信息 ; void search() 查询信息(可根据学生的学号 、姓名、所选课程编号 、课程名称进行信息查询); voidalter() ,修改学生信息 ; voiddel() ,删除学生信息 ,根据输入的学生学号通过调用函数实现; voidtotal() ,统计学生信息 (根据学生所选课程名称进行统计); void display() ,显示函数用来显示所有学生信息;int main() 主函数,显示主菜单 ,调用各个函数实现所有功能。专业 .专注.3)系统流程图课程设计学生选课系统设计结构图:进入功能界面后 ,可以进行多项功能选择,如添加 、查询、显示、修改、删除、统计,将数据写入文件以及从文件读取数据等 ;而查询功能又可以分为按学号、姓名、题目编号 、题目名称等方式进行查询 。如下图所示 。主菜单添 加修 改查 询删 除统 计显 示退出新 的学 生记 录学 生所 有所 有系统记录信息信息信息记录记录按按按按学姓编名号名号称查查查查询询询询4)界面设计主界面是 “欢迎使用课程设计选课系统”,下面是所要使用的功能 :1. 添加新的纪录专业 .专注.2. 查询记录信息3. 修改学生信息4. 删除学生信息5. 统计所有记录6. 显示所有记录0. 退出系统其中,查询记录又可以弹出一个界面分别有以下几个功能:1. 根据学号查询2. 根据姓名查询3. 根据编号查询4. 根据题目名称查询每实现一个功能 ,重新弹出主界面 ,进行下一个的功能选择 。3、系统实现1)类实现class Studentpublic:int stuid;/ 学号char stuname10;/ 姓名char sex2;/ 性别专业 .专注.int age;/ 年龄char clas10;/ 班级char specialty10;/ 专业int couid;/ 题目编号char couname10;/ 题目名称char keyword20;/ 关键词char technology30;/ 实现技术stu50;/ 定义对象class Guanliprivate:Student stu50;public:void add();/ 添加学生信息void search();/ 查询信息void searchsid();/ 按学号查询信息void searchsname();/ 按名字查询信息void searchcid();/ 按题目编号查询信息void searchcname();/ 按题目名称查询信息void alter();/ 修改信息void del();/ 删除信息void total();/ 统计信息专业 .专注.void display();/ 显示信息void write(int n);/ 向文件中写入数据int read();/ 从文件中读数据;2 )函数实现void Guanli:write(int n)fstream myfile;myfile.open(student.txt,ios:out|ios:binary);if(!myfile)cout 该文件不能打开 !endl;abort();int count=n;myfilecountendlendl;for(int i=0;i=count;i+)myfilestui.stuidstui.stunamestui.sexstui.age stui.clas stui.specialty stui.couid专业 .专注.stui.counamestui.keywordstui.technologyendl;myfile.close();int Guanli:read()fstream myfile;myfile.open(student.txt,ios:in|ios:binary);if(!myfile)cout 该文件不能打开 !count;for(int i=0;istui.stuidstui.stunamestui.sexstui.agestui.classtui.specialtystui.couidstui.counamestui.keywordstui.te专业 .专注.chnology;coutendl;myfile.close();return count;void Guanli:add()int n=read();int i=0;char sign;coutendl请输入增加的学生的相关信息: endl;while(sign!=N)loop:coutstui.stuid;cout endl;int c=0;while(ci)c+;专业 .专注.if(stui.stuid=stui-c.stuid)cout 你输入的学号已经存在!请重新输入 endl;goto loop;coutstui.stuname;coutendl;coutstui.sex;coutendl;coutstui.age;coutendl;coutstui.clas;coutendl;coutstui.specialty;coutendl;coutstui.couid;coutendl;coutstui.couname;coutendl;coutstui.keyword;coutendl;coutstui.technology;coutendl;coutsign; /输入判断i+;write(i);void Guanli:search()int n=read();cout* (1)根据学号查询*endl;cout* (2)根据姓名查询*endl;专业 .专注.cout* (3)根据编号查询*endl;cout* (4)根据名称查询*endl;coutendl;int c;Guanli g;coutc;switch(c)case 1:g.searchsid();break;case 2:g.searchsname();break;case 3:g.searchcid();break;case 4:g.searchcname();break;default:专业 .专注.cout 输入错误 ,请重新输入 !endl;g.write(n);void Guanli:searchsid()int n=read();int s;int i=0;coutendl查找学生信息 :endl;cout 请输入需要查找学生的学号:s;while(stui.stuid-s)!=0&in) i+; /查找判断if(i=n)cout 提示:对不起,无法找到该学生的信息 ! endl;elsecout*endl;cout 学号 : stui.stuidendl;cout 姓名 : stui. stunameendl;专业 .专注.cout 性别 : stui.sexendl ;cout 年龄 : stui. ageendl;cout 班级 : stui.clas endl;cout 专业 : stui. specialtyendl;cout 题目编号 : stui.couidendl;cout 题目名称 : stui.counameendl;cout 关键词 : stui.keywordendl;cout 实现技术 : stui.technologyendl;void Guanli:searchsname()int n=read();char a10;cout 请输入需要查找学生的姓名:a;for(int i=0;in;i+)if(strcmp(stui.stuname,a)=0)cout*endl;cout 学号 : stui.stuidendl;cout 姓名 : stui. stunameendl;专业 .专注.cout 性别 : stui.sexendl ;cout 年龄 : stui. ageendl ;cout 班级 : stui.clasendl;cout 专业 : stui. specialtyendl;cout 题目编号 : stui.couidendl;cout 题目名称 : stui.counameendl;cout 关键词 : stui.keywordendl;cout 实现技术 : stui.technologyendl;void Guanli:searchcid()int n=read();int b;int i=0;cout 请输入需要查找的题目编号:b;while(stui.couid-b)!=0&in) i+; /查找判断if(i=n)cout 提示:对不起,无法找到该信息 ! endl;专业 .专注.elsecout*endl;cout 学号 : stui.stuidendl;cout 姓名 : stui. stunameendl;cout 性别 : stui.sexendl ;cout 年龄 : stui. ageendl ;cout 班级 : stui.clas endl;cout 专业 : stui. specialtyendl;cout 题目编号 : stui.couidendl;cout 题目名称 : stui.counameendl;cout 关键词 : stui.keywordendl;cout 实现技术 : stui.technologyendl;void Guanli:searchcname()int n=read();char c10;cout 请输入需要查找的题目名称:c;for(int i=0;in;i+)专业 .专注.if(strcmp(stui.couname,c)=0)cout*endl;cout 学号 : stui.stuidendl;cout 姓名 : stui. stunameendl;cout 性别 : stui.sexendl ;cout 年龄 : stui. ageendl ;cout 班级 : stui.clas endl;cout 专业 : stui. specialtyendl;cout 题目编号 : stui.couidendl;cout 题目名称 : stui.counameendl;cout 关键词 : stui.keywordendl;cout 实现技术 : stui.technologyendl;void Guanli:alter()int n=read();int s;int i=0;coutendl修改学生信息 :endl;cout 请输入需要修改学生的学号:s;while(stui.stuid-s)!=0&in) i+; /查找判断if(i=n)cout 提示:对不起 ,无该学生的信息 !endl;/ 输入失败信息elsecout 该学生的信息 :endl;cout学号stui.stuidn姓名stui.stunamen性别stui.sexn年龄stui.agen班级 stui.clasn专业 stui.specialtyn题目编号 stui.couidn题目名称 stui.counamen关键词stui.keywordn实现技术stui.technologynendl;cout 请重新输入该学生的信息endl;coutstui. stuid ;coutendl;coutstui. stuname;coutendl;coutstui.sex;coutendl;coutstui.age;coutendl;coutstui.clas ;coutendl;coutstui. specialty;coutendl;coutstui.couid;coutendl;coutstui.couname;coutendl;coutstui.keyword;专业 .专注.coutendl;coutstui.technology;coutendl;char c;cout 是否保存数据 ?(y/n)c;if(c=y)cout 修改成功 !endl;write(n);void Guanli:del()int n=read();int s;int i=0,j;coutendl删除学生信息 :endl;cout 请输入需要删除学生的学号:s;while(stui.stuid-s)!=0&in) i+; /查找判断if(i=n)专业 .专注.cout 提示:记录为空 !endl; /返回失败信息elsefor(j=i;jn-1;j+) /删除操作stuj.stuid=stuj+1.stuid;strcpy(stuj.stuname,stuj+1.stuname);strcpy(stuj.sex,stuj+1.sex);stuj.age=stuj+1.age;strcpy(stuj.clas,stuj+1.clas);strcpy(stuj.specialty,stuj+1.specialty);stuj.couid=stuj+1.couid;strcpy(stuj.couname,stuj+1.couname);strcpy(stuj.keyword,stuj+1.keyword);strcpy(stuj.technology,stuj+1.technology);cout 提示:已成功删除 !endl; /返回成功信息cout 你要删除的信息如下 :endl;cout 姓名 :stui.stunameendl;专业 .专注.cout 学号 :stui.stuidendl;cout 性别 :stui.sexendl;cout 年龄 :stui.ageendl;cout 班级 :stui.clasendl;cout 专业 :stui.specialtyendl;cout 题目编号 :stui.couidendl;cout 题目名称 :stui.counameendl;cout 关键词 :stui.keywordendl;cout 实现技术 :stui.technologyendl;write(n-1);void Guanli:total()int n=read();char c10;cout 请输入需要查找的题目名称:c;for(int i=0;in;i+)if(strcmp(stui.couname,c)=0)cout 你要统计的信息如下 :endl;专业 .专注.cout 姓名 :stui.stunameendl;cout 学号 :stui.stuidendl;cout 性别 :stui.sexendl;cout 年龄 :stui.ageendl;cout 班级 :stui.clasendl;cout 专业 :stui.specialtyendl;cout 题目编号 :stui.couidendl;cout 题目名称 :stui.counameendl;cout 关键词 :stui.keywordendl;cout 实现技术 :stui.technologyendl;elsecout 没有此条记录 !endl;void Guanli:display()int n=read();coutendl显示全部学生信息 :endl;if(!stu)专业 .专注.cout 没有记录 endl;elsefor(int i=0;in;i+) /循环输入cout学号stui.stuidn姓名stui.stunamen性别stui.sexn年龄stui.agen班级 stui.clasn专 业 stui.specialtyn题目 编号stui.couidn题目名称 stui.counamen关键词stui.keywordn实现技术stui.technologynendl;3 )主函数实现int main()char choice;coutnnt *欢迎使用课程设计选题管理系统*nn;coutt1.* 添加新的记录 *n;coutt2.* 查询记录信息 *n;专业 .专注.coutt3.*修改学生信息 *n;coutt4.*删除学生信息 *n;coutt5.*统计所有记录 *n;coutt6.*显示所有记录 *n;coutt0.*退出系统 *n;coutchoice;Guanli g;if(choice=0)coutntt谢谢您使用本系统 !nnendl;exit(0);else if(choice=1)g.add();system(pause);main();else if(choice=2)g.search();专业 .专注.system(pause);main();else if(choice=3)g.alter();system(pause);main();else if(choice=4)g.del();system(pause);main();else if(choice=5)g.total();system(pause);main();else if(choice=6)专业 .专注.g.display();system(pause);main();elsecoutt输入错误 ,请重新输入您的选择 :;main();return 0;、系统测试)添加功能添加学生信息界面如下图所示:专业 .专注.)查询功能查询学生信息的界面如下图所示:根据学生学号进行查询 :根据学生姓名进行查询 :专业 .专注.根据题目编号进行查询 :根据题目名称进行查询 :)修改功能修改学生的相关信息 ,界面如下图所示 :专业 .专注.)删除功能删除指定学生的信息 ,界面如下图所示 :专业 .专注.)统计功能根据题目名称统计学生的信息,界面如下图所示 :)显示功能显示全部学生的信息 ,界面如下图所示 :专业 .专注.)退出系统退出使用系统 ,界面如下图所示 :三、心得体会专业 .专注.本课程设计中 ,我终于成功地实现了一个学生课程设计选题系统的程序,一个一开始看来很难完成的任务。在做这个课程设计之前,我对课程设计都有一种笼统的恐怕与抗拒,但在通过查阅资料,有了大概的纹路 ,一步步开展我们自己的课程设计时,我们发现看上去的困难并不那么无法攻略,只要有耐心 ,细致往下做 ,悉心请教同学与老师 ,我们能够完成看似无从下手的设计。在课程设计之前对C+ 程序的认识仅停留在看的阶段, 而对编程实现的认识很模糊 , 只知道大概的意思, 在课程设计期间才知道离独立编程还有很远的距离 。 通过这次课程设计 ,一点点解决所碰到的问题,我们学到了很多在课堂和书本上学不到的知识。而且,我们对面向对象编程、类、数组,指针等一系列概念也都有了更进一步的认识,也初步意识到所学知识在实际应用中的作用。因为本人水平有限 ,在做课程设计是参考了很多资料,并在一些书籍中找到了解决问题的方法,在查阅书籍的同时进行学习,经过多次的修改与调试,最后交出了一份自己比较满意的答卷。通过这次课设 ,让我进一步掌握了C+ 程序设计语言 ,更好的理解了面向对象的程序设计思想。我相信这会对以后的学习有帮助作用。在以后的学习中应当继续努力 。专业 .专注.
展开阅读全文