c++课程设计之学生选修课程系统设计(共24页)_第1页
c++课程设计之学生选修课程系统设计(共24页)_第2页
c++课程设计之学生选修课程系统设计(共24页)_第3页
c++课程设计之学生选修课程系统设计(共24页)_第4页
c++课程设计之学生选修课程系统设计(共24页)_第5页
已阅读5页,还剩20页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

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);

5、 void Save(); 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、结构表: 序号成员名数据类型字段含义1namchar姓名2numchar学号3zxfint总学分4cntint选课总数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

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

8、void Save();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 del();void AddStuInfo()FILE *fp;fp=fopen(d:stud

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

10、 password1,password2;char password20;int _cnt=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(*

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

12、ndl;coutt * 课 程 信 息 *endl;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 %

13、d %d %d %d %sn,vi.num,,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,t,zi.zxf);for(it=TTi.begin(); it!=TTi.end(); it+)fprintf(fp, %d,*it);fprintf(fp,n);

14、fclose(fp);void quit() /退出函数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 ChaXu

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

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

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

18、dlendl;coutt *endl;coutt * 课 程 信 息 *endl;coutt *endlendl;coutt 课程 课程 课程 总 授课 实验或 学分 开课endl;coutt 编号 名称 性质 学时 学时 上机学时 学分 学期endlendl;if(!strcmp(vi.cha,key)cnt+;printf(t %3d%12s%8s%4d%6d%8d%8d%7sn,vi.num,,vi.cha,vi.Time,vi.time1,vi.time2,vi.xf,vi.kkxq);coutendls;if(s0=Y|s0=y) chaxun2();else Main

19、Menu();void tq1(char *str) /提取出选课时输入的课程编号string 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()

20、cont+;TTF.insert(tmp);zF.zxf += vfind(tmp).xf;zF.cnt += 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 = e

21、ndl;coutendlt 请输入所选课程编号:; gets(str);if(strcmp(str,) 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.cha,vi.Time,vi.time1,vi.time2,vi.x

22、f,vi.kkxq);coutendlt =;coutendlt 请输入所选课程编号:; gets(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%8

23、d%7sn,vi.num,,vi.cha,vi.Time,vi.time1,vi.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.cnt;cout门课程 已选课程总学分:zF.zxf endl;coutt =endl;coutt 已选课程信息:n;coutt 课程 课程 课程 总 授课 实验或 学

24、分 开课endl;coutt 编号 名称 性质 学时 学时 上机学时 学分 学期endlendl;for(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 * 学 生

25、 选 课 *endl;coutt *endlendl;coutt 姓名:zF.nam 学号:zF.num 已选 zF.cnt;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

26、if(choice=0) MainMenu();else XuanKeMenu();void tq2(char *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.cnt-;zF.zxf-=vfind(tmp).xf;i+;int tmp=atoi(t.c_str();set:iterato

27、r _t=TTF.find(tmp);if(_t!=TTF.end()t=;TTF.erase(_t);zF.cnt-;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.cnt;cout门课程 已选课程总学分:zF.zxf endl;coutt =endl;coutt 已选课程信息:n;coutt

28、课程 课程 课程 总 授课 实验或 学分 开课endl;coutt 编号 名称 性质 学时 学时 上机学时 学分 学期endlendl;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

29、.cnt;cout门课程 已选课程总学分:zF.zxf endl;coutt =endl;coutt 已选课程信息:n;coutt 课程 课程 课程 总 授课 实验或 学分 开课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%d%d%d%s,&S.num,S.name,S.cha,&S.Time,&S.time1,&S.time2,&S.xf,S.kkxq);v.push_back(S)

温馨提示

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

评论

0/150

提交评论