1《C++程序设计》课程设计报告学生选修课程系统设计2一、需求分析计算机技术作为信息化的核心技术受到全社会的普遍重视。如今,计算机的使用也已不再局限于科学计算,它已进入人类社会的各个领域并发挥着越来越重要的作用。深入掌握计算机专业知识、具有良好系统设计与分析能力的计算机高级专业人才在社会上深受欢迎。而系统设计与分析能力的培养需要通过实践训练才能获得。通过计算机对一些系统的管理已经成为一种系统、便捷的方式。本课程设计就是用C++设计学生选课系统的问题,实现对学生选课的管理操作。本课程设计的目的是设计一个学生选修课程系统的程序,用来实现对学生成绩的管理,其中包括学生信息的文件读入、添加、查询、保存、删除以及相应的课程信息管理。程序设计了两个类,其中一个包含学生的学号、姓名、选课数以及选修总学分,另一个则包含了课程的信息,包括课程编号、课程名称、课程性质、课时等等。然后通过数组、向量、集合等来实现学生选课信息的记录、保存,删除等相关操作从而达到管理学生选课的。二、设计要求假定有n门课程,每门课程有课程编号、课程名称、课程性质、总学时、授课学时、实验学时、学分、开课学期等信息。学生可以按要求(如每个学生总学分不得少于20、没学期不能超过3门课程,每门课程不得超过50个人,但不能少于10否则该课程不开设)自由选课。使之能提供一些功能:1)课程信息录入功能2)课程信息浏览功能3)查询功能:(按课程性质查询、按课程学分查询,查询每个学生的选修信息、查询每门课程的选修信息等)4)学生选修课程5)修改课程或选课信息(根据课程编号或名称修改课程信息、根据学生姓名修改选课信息);6)删除课程或选课信息(根据课程编号或名称删除课程信息、根据学生姓名删除选课信息);三、总体设计我们设计一个程序对学生选课信息进行保存,对学生的选课信息进行可执行操作,如添加、删除、查询等等。该程序包括以下功能模块:1)学生信息添加模块:能够输入学生基本信息并保存到文件中。2)查看模块:显示所有可选修课程的信息。3)查询:显示所有符合要求的课程信息。4)选课:显示学生已选课程信息和选课,删除已选课程信息。5)退出系统。为了完善系统,我们还添加了一个登录界面。考虑到添加课程信息的功能只适合老师,因此我们设置了添加课程的权限设置(必须输入密码)。我们建立了两个文件用来保存学生信息和课程信息。(student.txt和subject.txt)该系统功能说明:1)系统以菜单方式工作2)课程信息录入功能(课程信息用文件保存)--输入3)课程信息浏览功能--输出4)查询功能:(至少一种查询方式)--算法5)按学分查询6)按课程性质查询7)学生选修课程(可选项)3四、详细设计该成序包含的主要函数功能说明:voidXuanKeMenu();//选课主菜单函数intfind(intno);voidSave();voidDL();//登录界面的函数voidMainMenu();voidoutput();voidLoad();//载入文件信息的函数voidLoad2();voidquit();voidadd();voidChaXun();voidchaxun1();voidchaxun2();voidxuanke();voidtq1();//提取选课编号的函数voidtq2();voidAddStuInfo();//添加学生信息的函数voidSaveStuInfo();//保存学生信息到文件中voiddel();//删除已选课程信息的函数主要的数据结构表:序号成员名数据类型字段含义1namchar姓名2numchar学号3zxfint总学分4cntint选课总数5namechar课程名称6numint课程编号7chachar课程性质8Timeint课程总学时9time1int授课总学时10time2int实验(上机)总学时11xfint课程学分12kkxqchar开课学期五、程序代码#includeiostream#includevector#includeset#includestring#includeconio.h#defineN10usingnamespacestd;intF;4classsubject//建立一个课程类,保存课程信息{public:intnum;charname[30];charcha[20];intTime,time1,time2,xf;charkkxq[20];}S;classstudent//建立一个学生类,保存学生信息{public:charnam[10];charnum[15];intzxf;intcnt;}Stu;vectorsubjectv;//声明一个指向课程信息的向量vectorstudentz;//声明一个指向学生信息的向量setintT;//建立一个集合vectorsetintTT;//建立一个向量集合setint::iteratorit;//建立一个迭代器voidXuanKeMenu();//声明一个选课主菜单函数intfind(intno);voidSave();voidDL();//声明一个登录界面的函数voidMainMenu();voidoutput();voidLoad();//声明载入文件信息的函数voidLoad2();voidquit();voidadd();voidChaXun();voidchaxun1();voidchaxun2();voidxuanke();voidtq1();//声明提取信息的函数voidtq2();voidAddStuInfo();//声明添加学生信息的函数voiddel();voidAddStuInfo(){FILE*fp;fp=fopen(d:\\student.txt,a);fseek(fp,0,2);//打开学生信息文件system(cls);5coutendlendlendlendlendl;cout\t\t***************************************************endl;cout\t\t*****************学生选课系统******************endl;cout\t\t***************************************************endlendl;cout\t\t\t请输入学号:;cinStu.num;cout\t\t\t请输入姓名:;cinStu.nam;Stu.cnt=Stu.zxf=0;fprintf(fp,%s%s%d%d\n,Stu.num,Stu.nam,Stu.cnt,Stu.zxf);//存入文件z.push_back(Stu);T.clear();TT.push_back(T);//用向量指向学生信息fclose(fp);}voidadd(){stringpassword1,password2;charpassword[20];int_cnt=0;FILE*fp;fp=fopen(d:\\password,r);fscanf(fp,%s,password);password2=password;fclose(fp);system(cls);coutendlendlendl;cout\t********************************************************endl;cout\t**********************课程信息*******************endl;cout\t********************************************************endlendl;cout\t请输入密码:;//对添加课程进行权限设置charch;while(ch=getch()){if(ch==13)break;if(ch!=8){putchar('*');password1+=ch;_cnt++;}else{if(_cnt){password1.erase(password1.end()-1);_cnt--;system(cls);coutendlendlendl;cout\t********************************************************endl;cout\t**********************课程信息*******************endl;cout\t********************************************************endlendl;cout\t请输入密码:;intx=_cnt;6while(x--)cout*;}}}if(password1!=password2){cout\n\n\t\t\t密码错误!!!;getch();MainMenu();}A:system(cls);coutendlendlendl;cout\t********************************************************endl;cout\t**********************课程信息*******************endl;cout\t********************************************************endlendl;cout\t\t\t请输入课程编号:;cinS.num;cout\t\t\t请输入课程名称:;cinS.name;cout\t\t\t请输入课程性质:;cinS.cha;cout\t\t\t请输入总课时:;cinS.Time;cout\t\t\t请输入授课学时;cinS.time1;cout\t\t\t请输入上机学时(实验学时):;cinS.time2;cout\t\t\t请输入学分:;cinS.xf;cout\t\t\t请输入开课学期:;cinS.kkxq;v.push_back(S);Save();coutendl\t是否继续添加[Y/N]:;strings;cins;if(s[0]=='Y'||s[0]=='y')gotoA;elseMainMenu();}voidSave()//保存已选的课程信息{FILE*fp;fp=fopen(d:\\subject.txt,w);for(inti=0;iv.size();i++)fprintf(fp,%d%s%s%d%d%d%d%s\n,v[i].num,v[i].name,v[i].cha,v[i].Time,v[i].time1,v[i].time2,v[i].xf,v[i].kkxq);fclose(fp);}voidSaveStuInfo()//保存学生信息{FILE*fp;7fp=fopen(d:\\student.txt,w);for(inti=0;iz.size();i++){fprintf(fp,%s%s%d%d,z[i].num,z[i].nam,z[i].cnt,z[i].zxf);for(it=TT[i].begin();it!=TT[i].end();it++)fprintf(fp,%d,*it);fprintf(fp,\n);}fclose(fp);}voidquit()//退出函数{exit(1);}voidChaXun()//查询主菜单函数{system(cls);coutendlendlendl;cout\t****************************