c++课程设计之学生选修课程系统设计

上传人:无*** 文档编号:83952958 上传时间:2022-05-02 格式:DOC 页数:24 大小:440KB
收藏 版权申诉 举报 下载
c++课程设计之学生选修课程系统设计_第1页
第1页 / 共24页
c++课程设计之学生选修课程系统设计_第2页
第2页 / 共24页
c++课程设计之学生选修课程系统设计_第3页
第3页 / 共24页
资源描述:

《c++课程设计之学生选修课程系统设计》由会员分享,可在线阅读,更多相关《c++课程设计之学生选修课程系统设计(24页珍藏版)》请在装配图网上搜索。

1、文档C+程序设计课程设计报告学生选修课程系统设计一、需求分析计算机技术作为信息化的核心技术受到全社会的普遍重视。如今,计算机的使用也已不再局限于科学计算,它已进入人类社会的各个领域并发挥着越来越重要的作用。深入掌握计算机专业知识、具有良好系统设计与分析能力的计算机高级专业人才在社会上深受欢迎。而系统设计与分析能力的培养需要通过实践训练才能获得。通过计算机对一些系统的管理已经成为一种系统、便捷的方式。本课程设计就是用C+设计学生选课系统的问题,实现对学生选课的管理操作。本课程设计的目的是设计一个学生选修课程系统的程序,用来实现对学生成绩的管理,其中包括学生信息的文件读入、添加、查询、保存、删除以

2、与相应的课程信息管理。程序设计了两个类,其中一个包含学生的学号、选课数以与选修总学分,另一个如此包含了课程的信息,包括课程编号、课程名称、课程性质、课时等等。然后通过数组、向量、集合等来实现学生选课信息的记录、保存,删除等相关操作从而达到管理学生选课的。二、设计要求假定有n门课程,每门课程有课程编号、课程名称、课程性质、总学时、授课学时、实验学时、学分、开课学期等信息。学生可以按要求(如每个学生总学分不得少于20、没学期不能超过3门课程,每门课程不得超过50个人,但不能少于10否如此该课程不开设)自由选课。使之能提供一些功能:1) 课程信息录入功能2) 课程信息浏览功能3) 查询功能:按课程性

3、质查询、按课程学分查询,查询每个学生的选修信息、查询每门课程的选修信息等4) 学生选修课程5) 修改课程或选课信息根据课程编号或名称修改课程信息、根据学生修改选课信息;6) 删除课程或选课信息根据课程编号或名称删除课程信息、根据学生删除选课信息;三、总体设计我们设计一个程序对学生选课信息进展保存,对学生的选课信息进展可执行操作,如添加、删除、查询等等。该程序包括以下功能模块: 1) 学生信息添加模块:能够输入学生根本信息并保存到文件中。2) 查看模块:显示所有可选修课程的信息。3) 查询:显示所有符合要求的课程信息。4) 选课:显示学生已选课程信息和选课,删除已选课程信息。5) 退出系统。为了

4、完善系统,我们还添加了一个登录界面。考虑到添加课程信息的功能只适合教师,因此我们设置了添加课程的权限设置必须输入密码。我们建立了两个文件用来保存学生信息和课程信息。student.txt和subject.txt该系统功能说明:1) 系统以菜单方式工作 2) 课程信息录入功能(课程信息用文件保存)输入 3) 课程信息浏览功能输出 4) 查询功能:(至少一种查询方式)算法 5) 按学分查询 6) 按课程性质查询 7) 学生选修课程(可选项) 四、详细设计该成序包含的主要函数功能说明:void XuanKeMenu(); / 选课主菜单函数int find(int no); void Save();

5、 void DL();/登录界面的函数void MainMenu();void output(); void Load(); /载入文件信息的函数void Load2();void quit();void add();void ChaXun();void chaxun1();void chaxun2();void xuanke();void tq1(); /提取选课编号的函数void tq2();void AddStuInfo();/添加学生信息的函数void SaveStuInfo(); /保存学生信息到文件中void del();/删除已选课程信息的函数主要的数据结构表: 序号成员名数据类

6、型字段含义1namchar2numchar学号3zxfint总学分4tint选课总数5namechar课程名称6numint课程编号7chachar 课程性质8Timeint课程总学时9time1int授课总学时10time2int实验上机总学时11xfint课程学分12kkxqchar开课学期五、程序代码#include#include#include#include#include#define N 10using namespace std;int F;class subject /建立一个课程类,保存课程信息public:int num;char name30;char cha20;i

7、nt Time,time1,time2,xf;char kkxq20;S;class student /建立一个学生类,保存学生信息public:char nam10;char num15;int zxf;int t;Stu;vector v; /声明一个 指向课程信息的向量vector z; /声明一个 指向学生信息的向量set T; /建立一个 集合vector set TT; /建立一个 向量集合set :iterator it; /建立一个 迭代器void XuanKeMenu(); /声明一个 选课主菜单函数int find(int no);void Save();void DL()

8、; /声明一个登录界面的函数void MainMenu();void output();void Load(); /声明载入文件信息的函数void Load2();void quit();void add();void ChaXun();void chaxun1();void chaxun2();void xuanke();void tq1(); /声明提取信息的函数void tq2();void AddStuInfo(); /声明添加学生信息的函数void del();void AddStuInfo()FILE *fp;fp=fopen(d:student.txt,a);fseek(fp,0

9、,2); /打开学生信息文件system(cls);coutendlendlendlendlendl;couttt*endl;couttt* 学生选课系统 *endl;couttt*endlendl;coutStu.num;coutStu.nam;Stu.t=Stu.zxf=0;fprintf(fp,%s %s %d %dn,Stu.num,Stu.nam,Stu.t,Stu.zxf); /存入文件z.push_back (Stu); T.clear(); TT.push_back(T); /用向量指向学生信息fclose(fp);void add()string password1,pass

10、word2;char password20;int _t=0;FILE *fp;fp=fopen(d:password,r);fscanf(fp,%s,password); password2=password;fclose(fp);system(cls);coutendlendlendl;coutt *endl;coutt * 课 程 信 息 *endl;coutt *endlendl;coutt 请输入密码:; /对添加课程进展权限设置char ch;while(ch=getch()if(ch=13) break;if(ch != 8) putchar(*); password1 += c

11、h;_t+;elseif(_t)password1.erase(password1.end()-1);_t-;system(cls);coutendlendlendl;coutt *endl;coutt * 课 程 信 息 *endl;coutt *endlendl;coutt 请输入密码:;int x=_t;while(x-)cout*;if(password1 != password2) coutnnttt 密码错误!;getch(); MainMenu(); A: system(cls);coutendlendlendl;coutt *endl;coutt * 课 程 信 息 *endl

12、;coutt *endlendl;coutS.num;coutS.name;coutS.cha;coutS.Time;coutS.time1;coutS.time2;coutS.xf;coutS.kkxq;v.push_back(S);Save();coutendls;if(s0=Y|s0=y) goto A;else MainMenu();void Save() /保存已选的课程信息FILE *fp;fp=fopen(d:subject.txt,w);for(int i=0;iv.size();i+)fprintf(fp,%d %s %s %d %d %d %d %sn,vi.num,vi.

13、name,vi.cha,vi.Time,vi.time1,vi.time2,vi.xf,vi.kkxq);fclose(fp);void SaveStuInfo() /保存学生信息FILE *fp;fp=fopen(d:student.txt,w);for(int i=0;iz.size();i+)fprintf(fp,%s %s %d %d,zi.num,zi.nam,zi.t,zi.zxf);for(it=TTi.begin(); it!=TTi.end(); it+)fprintf(fp, %d,*it);fprintf(fp,n);fclose(fp);void quit() /退出函

14、数exit(1);void ChaXun() /查询主菜单函数system(cls);coutendlendlendl;coutt *endl;coutt * 课 程 信 息 *endl;coutt *endlendl;couttttt请选择查询方式:ntttt1学分查询ntttt2课程性质查询ntttt0返回主菜单nn;coutchoice;if(choice=0&choice3)if(choice=1) chaxun1();if(choice=2) chaxun2();if(choice=0) MainMenu();else ChaXun();void chaxun1() /按学分方式查询

15、system(cls);intt=0;coutendlendlendl;coutt *endl;coutt * 课 程 信 息 *endl;coutt *endlendl;coutkey;coutt 课程 课程 课程 总 授课 实验或 学分 开课endl;coutt 编号 名称 性质 学时 学时 上机学时 学分 学期endlendl;for(int i=0;iv.size();i+)if(t&t%10=0)coutendlt = endl;coutt 按任意键查看下一页; getch();system(cls);coutendlendlendl;coutt *endl;coutt * 课 程

16、信 息 *endl;coutt *endlendl;coutt 课程 课程 课程 总 授课 实验或 学分 开课endl;coutt 编号 名称 性质 学时 学时 上机学时 学分 学期endlendl;if(vi.xf=key)t+;printf(t %3d%12s%8s%4d%6d%8d%8d%7sn,vi.num,vi.name,vi.cha,vi.Time,vi.time1,vi.time2,vi.xf,vi.kkxq);coutendls;if(s0=Y|s0=y) chaxun1();else MainMenu();void chaxun2() /按课程性质查询system(cls);

17、intt=0;coutendlendlendl;coutt *endl;coutt * 课 程 信 息 *endl;coutt *endlendl;coutkey;coutt 课程 课程 课程 总 授课 实验或 学分 开课endl;coutt 编号 名称 性质 学时 学时 上机学时 学分 学期endlendl;for(int i=0;iv.size();i+)if(t&t%10=0)coutendlt = endl;coutt 按任意键查看下一页; getch();system(cls);coutendlendlendl;coutt *endl;coutt * 课 程 信 息 *endl;co

18、utt *endlendl;coutt 课程 课程 课程 总 授课 实验或 学分 开课endl;coutt 编号 名称 性质 学时 学时 上机学时 学分 学期endlendl;if(!strcmp(vi.cha,key)t+;printf(t %3d%12s%8s%4d%6d%8d%8d%7sn,vi.num,vi.name,vi.cha,vi.Time,vi.time1,vi.time2,vi.xf,vi.kkxq);coutendls;if(s0=Y|s0=y) chaxun2();else MainMenu();void tq1(char *str) /提取出选课时输入的课程编号stri

19、ng t=;int i=0,cont=0;while(stri)if(isalnum(stri) t += stri;elseint tmp=atoi(t.c_str();if(TTF.find(tmp)!=TTF.end() t=;i+; continue;zF.zxf += vfind(tmp).xf;TTF.insert(tmp); t=;cont+;i+;/int tmp=atoi(t.c_str();/coutt ;system(pause);if(TTF.find(tmp)=TTF.end()cont+;TTF.insert(tmp);zF.zxf += vfind(tmp).xf

20、;zF.t += cont;void xuanke() /选课函数:执行选课功能char str100;system(cls);coutendlendl;coutt *endl;coutt * 课 程 信 息 *endl;coutt *endlendl;coutt 课程 课程 课程 总 授课 实验或 学分 开课endl;coutt 编号 名称 性质 学时 学时 上机学时 学分 学期endlendl;for(int i=0; iv.size(); i+)if(i&i%10=0)coutendlt = endl;coutendlt 请输入所选课程编号:; gets(str);if(strcmp(s

21、tr,) tq1(str);/,system(cls);coutendlendl;coutt *endl;coutt * 课 程 信 息 *endl;coutt *endlendl;coutt 课程 课程 课程 总 授课 实验或 学分 开课endl;coutt 编号 名称 性质 学时 学时 上机学时 学分 学期endlendl;printf(t %3d%12s%8s%4d%6d%8d%8d%7sn,vi.num,vi.name,vi.cha,vi.Time,vi.time1,vi.time2,vi.xf,vi.kkxq);coutendlt =;coutendlt 请输入所选课程编号:; ge

22、ts(str);if(strcmp(str,) tq1(str);SaveStuInfo();if(zF.zxf60)coutx;if(x0=y|x0=Y) xuanke();else XuanKeMenu();else XuanKeMenu();int find(int no) /寻找函数,找到想要的课程编号for(int i=0;iv.size();i+)if(vi.num=no) return i;void display(int i)printf(t %3d%12s%8s%4d%6d%8d%8d%7sn,vi.num,vi.name,vi.cha,vi.Time,vi.time1,vi

23、.time2,vi.xf,vi.kkxq);void XuanKeMenu() /选课菜单函数system(cls);int choice,l=0;coutendlendl;coutt *endl;coutt * 学 生 选 课 *endl;coutt *endlendl;coutt :zF.nam 学号:zF.num 已选 zF.t;cout门课程 已选课程总学分:zF.zxf endl;coutt =endl;coutt 已选课程信息:n;coutt 课程 课程 课程 总 授课 实验或 学分 开课endl;coutt 编号 名称 性质 学时 学时 上机学时 学分 学期endlendl;fo

24、r(it=TTF.begin();it!=TTF.end();it+,l+)if(l&l%10=0)coutendlt = endl;coutchoice; getchar();if(choice=1) xuanke();else if(choice=2) del();else if(choice=0) MainMenu();else if(choice=3) ;else XuanKeMenu();system(cls);coutendlendl;coutt *endl;coutt * 学 生 选 课 *endl;coutt *endlendl;coutt :zF.nam 学号:zF.num

25、已选 zF.t;cout门课程 已选课程总学分:zF.zxf endl;coutt =endl;coutt 已选课程信息:n;coutt 课程 课程 课程 总 授课 实验或 学分 开课endl;coutt 编号 名称 性质 学时 学时 上机学时 学分 学期endlendl;display(find(*it);coutendlt = endl;coutchoice; getchar();if(choice=1) xuanke();else if(choice=2) del();else if(choice=0) MainMenu();else XuanKeMenu();void tq2(char

26、 *str) /提取函数:提前删除时输入的课程编号string t=;int i=0,cont=0;while(stri)if(isalnum(stri) t += stri;elseint tmp=atoi(t.c_str();set:iterator _t=TTF.find(tmp);if(_t!=TTF.end()t=;TTF.erase(_t);zF.t-;zF.zxf-=vfind(tmp).xf;i+;int tmp=atoi(t.c_str();set:iterator _t=TTF.find(tmp);if(_t!=TTF.end()t=;TTF.erase(_t);zF.t-

27、;zF.zxf-=vfind(tmp).xf;void del() /删除已选课程信息int m,l=0,k=0;char str100;system(cls);coutendlendl;coutt *endl;coutt * 学 生 选 课 *endl;coutt *endlendl;coutt :zF.nam 学号:zF.num 已选 zF.t;cout门课程 已选课程总学分:zF.zxf endl;coutt =endl;coutt 已选课程信息:n;coutt 课程 课程 课程 总 授课 实验或 学分 开课endl;coutt 编号 名称 性质 学时 学时 上机学时 学分 学期endl

28、endl;for(it=TTF.begin();it!=TTF.end();it+,l+)if(l&l%10=0)coutendlt = endl;couttttt请输入要删除的课程的编号:;gets(str);if(strcmp(str,) tq2(str);system(cls);coutendlendl;coutt *endl;coutt * 学 生 选 课 *endl;coutt *endlendl;coutt :zF.nam 学号:zF.num 已选 zF.t;cout门课程 已选课程总学分:zF.zxf endl;coutt =endl;coutt 已选课程信息:n;coutt 课

29、程 课程 课程 总 授课 实验或 学分 开课endl;coutt 编号 名称 性质 学时 学时 上机学时 学分 学期endlendl;display(find(*it);couttttt请输入要删除的课程的编号:;gets(str);if(strcmp(str,) tq2(str);SaveStuInfo();XuanKeMenu();void Load() /载入函数:载入课程信息文件此前已建立FILE *fp1;bool f=1;fp1=fopen(d:subject.txt,r);if(fp1=NULL) f=0;while(f&!feof(fp1)fscanf(fp1,%d%s%s%d

30、%d%d%d%s,&S.num,S.name,S.cha,&S.Time,&S.time1,&S.time2,&S.xf,S.kkxq);v.push_back(S);fclose(fp1);void Load2() /载入学生信息文件此前已建立FILE *fp;fp=fopen(d:student.txt,r);while(!feof(fp)int x;fscanf(fp,%s%s%d%d,Stu.num,&Stu.nam,&Stu.t,&Stu.zxf);z.push_back(Stu); T.clear();for(int j=0;jStu.t;j+)fscanf(fp,%d,&x),T

31、.insert(x);TT.push_back(T);fclose(fp);void output() /显示函数:将课程信息输出到屏幕system(cls);coutendlendlendl;coutt *endl;coutt * 课 程 信 息 *endl;coutt *endlendl;coutt 课程 课程 课程 总 授课 实验或 学分 开课endl;coutt 编号 名称 性质 学时 学时 上机学时 学分 学期endlendl;for(int i=0; iv.size(); i+)if(i&i%10=0)coutendlt = endl;coutt 按任意键查看下一页; getch(

32、);system(cls);coutendlendlendl;coutt *endl;coutt * 课 程 信 息 *endl;coutt *endlendl;coutt 课程 课程 课程 总 授课 实验或 学分 开课endl;coutt 编号 名称 性质 学时 学时 上机学时 学分 学期endlendl;printf(t %3d%12s%8s%4d%6d%8d%8d%7sn,vi.num,vi.name,vi.cha,vi.Time,vi.time1,vi.time2,vi.xf,vi.kkxq);coutendls;if(s0=Y|s0=y) output();else MainMenu();void MainMenu() /系统主菜单system(cls);coutendlendlendlendlendl;couttt*endl;couttt* 学生选课系统 *endl;couttt*endl;couttttttt 欢迎 zF.namendl;couttttt1 查看课程信息endl;couttttt2 添加课程信息endl;couttttt3 查询课程信息endl;couttttt4 学 生 选 课

展开阅读全文
温馨提示:
1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
2: 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
3.本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
关于我们 - 网站声明 - 网站地图 - 资源地图 - 友情链接 - 网站客服 - 联系我们

copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


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