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

更新时间:2024-01-25 14:36:01 阅读量: 教育文库 文档下载

说明:文章内容仅供预览,部分内容可能不全。下载后的文档,内容与下面显示的完全一致。下载之前请确认下面内容是否您想要的,是否完整无缺。

目录

封面???????????????????????????1 任务书??????????????????????????1 一、需求分析???????????????????????5

1.1、系统设计目的与意义 ???????????????????????5 1.2、系统功能需求(系统流程图)????????????????????5 1.3、输入输出的要求??????????????????????????6

二、结构设计???????????????????????6 三、界面设计与各功能模块实现………………………………..………7 四、系统调试???????????????????????8 五、使用说明及编程体会??????????????????9

5.1、使用说明 ???????????????????????????? 9

5.2、编程体会 ????????????????????????????13

附件 ??????????????????????????13 参考文献 ????????????????????????32 评分表 ?????????????????????????33

(一)需求分析

1.1、系统设计目的与意义

当今时代是飞速发展的信息时代。在各行各业中离不开信息处理,这正是计算机被广泛应用于信息管理系统的环境。计算机的最大好处在于利用它能够进行信息管理。使用计算机进行信息控制,不仅提高了工作效率,而且大大的提高了其安全性。尤其对于复杂的信息管理,计算机能够充分发挥它的优越性。计算机进行信息管理与信息管理系统的开发密切相关,系统的开发是系统管理的前提。

本系统就是为了管理好选课信息而设计的。学校作为一种信息资源的集散地,学生和课程繁多,包含很多的信息数据的管理,现今,有很多的学校都是初步开始使用,甚至尚未使用计算机进行信息管理。根据调查得知,他们以前对信息管理的主要方式是基于文本、表格等纸介质的手工处理,对于选课情况的统计和查询等往往采用对课程的人工检查进行,对学生的选课权限、以及选课代号等用人工计算、手抄进行。数据信息处理工作量大,容易出错;由于数据繁多,容易丢失,且不易查找。总的来说,缺乏系统,规范的信息管理手段。尽管学校都有计算机,但是尚未用于信息管理,没有发挥它的效力,资源闲置比较突出,这就是管理信息系统的开发的基本环境。数据处理手工操作,工作量大,出错率高,出错后不易更改。学校采取手工方式对学生选课情况进行人工管理,由于信息比较多,选课信息的管理工作混乱而又复杂;一般选课情况是记录在文件上,课程的数目和代号也记录在文件中,学校的工作人员也只是当时对它比较清楚,时间长了,如再要进行查询,就得在众多的资料中翻阅、查找了,造成查询费时、费力。如要对很长时间以前的选课进行更改就更加困难了。

基于这些问题,我认为有必要建立一个学生选课系统,使选课管理工作规范化,系统化,程序化,避免选课管理的随意性,提高信息处理的速度和准确性,能够及时、准确、有效的查询和修改选课情况。

1.2、系统功能需求(系统流程图)

1

主 模 块 学生模块 管理员模块 学生选课 学生情况 选课情况 退出系统 增加学生 增加课程 删除学生 删填更学除写改生课成学情程绩分 况 选课情况 保退存出数系据统

1.3、输入输出的要求

(1) 输入:确定与功能有关的所有输入信息,包括数据来源、意义、格式、接收方法、数量、输入范围及处理方法,必须说明时间要求、优先顺序、操作控制和使用的输入设备(媒体)。

(2) 输出:对错误输入提示

(二)结构设计

(1)(E-R图);

2

(2)类层次图

Course Student Subject (三)界面设计与各功能模块实现

界面设计

1、 主界面:

******************************************** * * * 选修课小系统 * * * * * * 操作方式: * * 1.选修课系统学生端 * * * * 2.选修课系统管理端 * * * ********************************************

2、选修课系统学生端:

3

※※※※※※※※※※※※※※※※※※※ ※ 选修课系统学生端 ※ ※ ※ ※ 操作方式: ※ ※ 1.学生选课 ※ ※ 2.学生情况 ※ ※ 3.选课情况 ※ ※ 4.退出系统 ※ ※ ※ ※※※※※※※※※※※※※※※※※※※ 3、选修课系统管理端 :

※※※※※※※※※※※※※※※※※※※※※※※※※※※ ※ ※ ※ 选修课系统管理端 ※ ※ ※ ※ 操作方式: ※ ※ 1.增加学生 2.增加课程 ※ ※ 3.删除学生 4.删除课程 ※ ※ 5.填写成绩 6.更改学分 ※ ※ 7.学生情况 8.选课情况 ※ ※ 9.保存数据 0.退出系统 ※ ※ ※ ※※※※※※※※※※※※※※※※※※※※※※※※※※※

(四)系统调试

在这一节中,主要解决的了两个问题,一个是系统的联机文档,另一个是系统的测试,下面我们分别加以说明。作为一个完整的系统,联机文档是其中不可缺少的部分也是相当重要的部分。好的文档能够使用户快速了解并准确的使用系统的各项功能。减少误操作,减少错误产生的可能,这对用户和开发人员都有很多的好处。所以在开发本系统中,也加入了不少的文档,除了对于四大模块的详细说明外,对于易出错和不易操作的地方(如多条件查询部分)又作了详细的说明。

由于本身能力的局限性,所以做编写的代码,即使经过反复检查也难免出错所以在本阶段力求使用有限的时间找出尽可能多的错误,力求系统尽量正确。我们在本系统的测试中使用了黑盒法(即不关心程序内部的逻辑结构,而是根据程序的功能来设计是检测)请一位不熟悉本系统的人来进行随意性的操作,打破习惯的操作顺序,从中发现错误,在此阶段系统的大量错误得到了改正。 信息管理系统所涉及的数据库设计的重要步骤加载测试。加载测试工作贯穿

4

于程序测试工作的全过程,整个录入、修改、查询、处理工作均可视为对数据库的加载测试工作。要设计出一个好的信息管理系统数据库,除满足系统所要求的功能外,还必须遵守下列原则:1)基本表的个数越少越好。2) 主键的个数越少越好。键是表间连接的工具,主键越少,表间的连接就越简单。3)字段的个数越少越好。4) 所有基本表的设计均应尽量符合第三范式。数据库的设计中,如何处理多对多的关系和如何设计主键,是两个有着较大难度、需要重点考虑的问题。 例如:

--------------------Configuration: 8 - Win32 Debug--------------------

Compiling... 9.cpp

E:\\新建文件夹\\9.cpp(53) : error C2535: '__thiscall student::student(void)' : member function already defined or declared

E:\\新建文件夹\\9.cpp(24) : see declaration of 'student::student' 执行 cl.exe 时出错.

9.obj - 1 error(s), 0 warning(s)

改正:将中的去掉

(五)使用说明及编程体会

5.1使用说明

1、登录

首先,运行学生选课系统,出现学生选课系统画面 :

5

2、进入选修课系统学生端

当主菜单出现后,在“请选择登录方式:”后输入“1”,就进入了“选修课系统学生端”,界面如下:

3、选课

在“请选择操作方式: ”输入“1”,进入网上选课系统,请首先进入课程预览菜单,预览自己的课程表,学生自行选课后,也可进入课程预览菜单,查看

6

选课结果。课程表中已有的课程为教务处按各班教学计划整班指定上去的,不得自行退选

4、管理员登录

管理员密码admin。用管理员帐号登录可以查看每个人的选课,及退课情况。

(1)如密码正确,则出现以下界面:

此时,管理员可以在“请选择操作方式: ”后输入相应的数字,比如数日“1”,那么所执行的操作就是:增加学生,则出现以下界面:

7

(2)若密码不正确,则出现界面 第一次密码错误

第二次密码错误

5 、退出系统

(1)学生选课完成后可以按“4”退出选课系统,以防他人修改数据。 (2)密码错误次数超过3次,可按任意键退出,界面如下:

8

5.2编程体会

刚看到这个课程设计题目时,觉得这个课题比较难。今天回过去看看,却十分的欣慰,因为通过我们的努力终于完成了。虽然这不是我读大学以来第一次做课程设计,但却是花费心血最多的一次,这是对我这学期学习下来最好的检验。经过这次课程设计,我的能力有了很大的提高,比如操作能力、分析问题的能力、合作精神、严谨的工作作风等方方面面都进步了。

还要特别感谢老师对我的悉心指导,帮我理清设计思路,指导操作方法,并对我所做的设计方案提出有效的改进方案。老师渊博的知识、严谨的作风、诲人不倦的态度和学术上精益求精的精神让我受益终生。

附件:

#include #include #include #include using namespace std; //定义课程

class course //某个学生所学的课程中的某一个 {public: char cname[20]; //课程名称 float grade; //课程成绩 course *Next; //指向下一个课程的指针 };

//学生类 class student

{public: student() { root = NULL; const int maxcourse = 5; factcourse = 0;} void readname(char N[] ); //读入学生的姓名 void getname(char N[]); //得到学生的姓名 void wrecourse(char N[],float score); //要据课程名写入学生课程的成绩 float average(); //学生课程的平均成绩 void addcourse(char N[],float g); //给学生增加一门课 int findcourse(char N[]); //查找是否已有此课程,如果有返回,如果没有返回 int retfactcourse() { return factcourse;} //得到所学的课程数目 course *retroot()

9

{ return root; } //利用键表将所有的课程保存起来 int retmaxcourse() { return 5; } //得到最多可学的课程数目 void clrroot() //清零 { root = NULL; factcourse = 0;}

private: char sname[20]; //学生的姓名 int maxcourse; //学生最多可以学五门课程 int factcourse; //学生实际所学的课程数目 course *root; //课程的根结点指针 };

void student::readname (char N[])//读入学生的姓名 { strcpy(sname,N); }

void student::getname(char N[])//得到学生的姓名 { strcpy(N,sname); }

void student::wrecourse(char N[],float score)//要据课程名写入学生课程的成绩 { course *p = root; if(p==NULL) return; if(p!=NULL) p = p->Next; while(p) { if(strcmp(p->cname,N)==0) p->grade = score; p = p->Next;} }

float student::average()//学生课程的平均成绩 { float aver=0.0; course *p = root; while (p) { aver = aver+p->grade; } aver = aver/factcourse; return aver; }

void student::addcourse (char N[],float g)//给学生增加一门课 { course *s = new course; s->Next=NULL; if(root == NULL) root = s; course *p = root; course *newcourse = new course; newcourse->Next = p->Next; p->Next=newcourse; strcpy(newcourse->cname,N); newcourse->grade = g;

10

factcourse++;}

int student::findcourse (char N[])//查找是否已有此课程,如果有返回,如果没有返回 { course *p = root; if(root==NULL) return 0; p = p->Next; while(p) { if(strcmp(p->cname,N)==0) return 1; p = p->Next;} return 0; } class studentdb {public: student stu; studentdb *Next; }; struct studentname

{ char tname[20]; //学生的名字 float result; //学生所得的该课程分数 studentname *Next; }; //课程类 class subject {public: subject() { first = NULL; maxstudent=30; activestudnet=0; } float readcredit(); //得到课程的学分 void getcredit(float a); //设置学分 float getaverage(); //得到学生的平均成绩 float getresult(char N[]); //查找某个学生的成绩 void getkname(char N[]); //读出课程的名称 void setkname(char N[]); //读入课程的名称 studentname *retfirst() { return first; } //返回根结点 void findstudent(studentdb *P); //根据该课程的名称,寻找选这课程的学生 int retactivestudent() { return activestudnet; } //返回实际学生数 int retmaxstudent() { return 30; } //返回最多学生数 void clractivestudnet() { activestudnet = 0; } //从文件中读出来后将实际学生数清零 private: int maxstudent; //最多学生数 int activestudnet; //实际学生数

11

studentname *first; //学生名单 float credit; //该课程的学分 float averagerusult; //该课程的平均成绩 char kname[20]; //该课程的名称 };

float subject::readcredit ()//得到课程的学分 { return credit; }

void subject::getcredit (float a)//设置学分 { credit=a; }

float subject::getaverage()//得到学生的平均成绩 { float k = 0.0; studentname *p; p=first->Next; if(p==NULL) return 0; while(p) { k = k + p->result; p = p->Next ; } return k/activestudnet; }

float subject::getresult (char N[]) //查找某个学生的成绩 { studentname *p; p = first; while(p) { if(strcpy(p->tname ,N)==0) return p->result; p = p->Next ; } return -1; }

void subject::getkname (char N[]) //读出课程的名称 { strcpy(N,kname); }

void subject::setkname (char N[]) //读入课程的名称 { strcpy(kname,N); }

void subject::findstudent(studentdb *P) //根据该课程的名称,寻找选这课程的学生 { studentname *newcode = new studentname; newcode->Next=NULL; first = newcode; studentname *T = first; studentdb *K = P->Next; while(K) { course *Y = K->stu.retroot(); if(Y ==NULL) { K = K->Next; continue; } if(Y!=NULL) Y = Y->Next;

12

while(Y) { if(strcmp(Y->cname,kname)==0) { studentname *Acode = new studentname; char Name[20]; K->stu.getname(Name); strcpy(Acode->tname,Name); Acode->result = Y->grade; Acode->Next = T->Next; T->Next = Acode; activestudnet = activestudnet + 1; break; } Y = Y->Next; } K = K->Next; } return ; } void tuichu()

{ system(\ cout<<\谢谢你使用选修课系统\\n\\n\ cout<<\ you're welcome ! \\n\ getch(); exit(-1); } //总菜单 char menu() { int k=0; char a[3],c,i; system(\ cout<>a; if(strlen(a)==1) { for(i='1';i<='2';i++) { c=i; if(c==a[0])

13

return c; } } cerr<<\输入有误!\\n\ k++; if(k>2) { system(\ cerr<<\提示~~:错误输入次数超过三次,你将被强制退出!!\\n\\n\ cout<<\按任意键继续\ getch(); tuichu(); } } }

//选修课系统端操作 char custom()

{ char A[10];char b;char i;int k = 0; system(\ cout<<\ <<\※※※※※※※※※※※※※※※※※※※※※※※※※※\\n\ <<\※ 选修课系统学生端 ※\\n\ <<\※ ※\\n\ <<\※ 操作方式:. ※\\n\ <<\※ 1、 学生选课 ※\\n\ <<\※ 2、 学生情况 ※\\n\ <<\※ 3、 选课情况 ※\\n\ <<\※ 4、 退出系统 ※\\n\ <<\※ ※\\n\ <<\※※※※※※※※※※※※※※※※※※※※※※※※※※\\n\ while(1) { cout<<\请选择操作方式: \ cin>>A; if(strlen(A)==1) { for(i='1';i<='4';i++) { b=i; if(b==A[0]) return b; } } cerr<<\输入有误!\\n\ k++; if(k>2) { system(\ cerr<<\提示~~:错误输入超过三次!你将被强制退出!!\\n\ cout<<\按任意键继续\ getch(); tuichu(); }

14

} }

char server()

{ char A[10];char b;char i;int k = 0;system(\ cout<<\ <<\※※※※※※※※※※※※※※※※※※※※※※※※※\\n\ <<\※ ※\\n\ <<\※ 选修课系统管理端 ※\\n\ <<\※ ※\\n\ <<\※ 操作方式: ※\\n\ <<\※ 1.增加学生 2.增加课程 ※\\n\ <<\※ 3.删除学生 4.删除课程 ※\\n\ <<\※ 5.填写成绩 6.更改学分 ※\\n\ <<\※ 7.学生情况 8.选课情况 ※\\n\ <<\※ 9.保存数据 0.退出系统 ※\\n\ <<\※ ※\\n\ <<\※※※※※※※※※※※※※※※※※※※※※※※※※\\n\ while(1) { cout<<\请选择操作方式: \ cin>>A; if(strlen(A)==1) { for(i='0';i<='9';i++) { b=i; if(b==A[0]) return b; } } cerr<<\输入有误!\\n\ k++; if(k>2) { cerr<<\错误输入超过三次!\\n\ exit(-1); } } }

//密码检查 void password() {

int k=0,i;

char A[]=\char B[10]; char a;

system(\for(i=0;i<8;i++) cout<

15

{

printf(\请输入管理员密码:\i=0; while(1) {

a=getch(); if(a==13) break; B[i]=a; i++;

printf(\}

B[i]='\\0';

if(strcmp(A,B)==0) return; else { k++;

cerr<<\密码输入错误!请重新输入!\\n\}

if(k>=3) {

system(\

cerr<<\输入错误密码超过三次!请按任意键退出..\getch(); tuichu(); } } }

struct subjectdb { subject sub; subjectdb *Next;};

int menu_2_7(studentdb *P);

int menu_2_9(studentdb *Y,subjectdb *P); int menu_2_8(subjectdb *P); //学生端功能函数

int menu_1_1(studentdb *P,subjectdb *X) //学生选课 { system(\ cout<<\学生选课操作\ studentdb *q=P->Next; int i; char N[20],M[20]; if(q!=NULL) cout<<\所有学生名单如下:\\n\

16

else

{ cerr<<\对不起,暂无学生名单!请先创建!请按任意键继续..\ return 1; } while(q)

{ q->stu.getname(N); cout<<\ cout<Next ; } q = P->Next; if(q==NULL) return 1;

cout<<\请输入学生姓名:\cin>>N; i=0;

q=P->Next; while(q)

{ q->stu.getname(M); if(strcmp(N,M)==0) i++; q = q->Next; } int j=0,k=1; if(i==0)

{ cout<<\没有这个学生!! 请按任意键返回..\ return 1; } else if(i>1)

{ cout<<\共找到\个姓名为\的学生\ cout<<\选择第几个:\ cin>>k; } if(k>i||k<=0)

{ cerr<<\输入有误!按任意键继续\ return 1; } q = P->Next; j=0; while(q)

{ q->stu.getname(M); if(strcmp(N,M)==0) j++; if(j==k) { if(q->stu.retfactcourse()>=q->stu.retmaxcourse()) { cout<<\所选课程已满!按任意键继续\ return 1; } else { subjectdb *t=X->Next; char N1[20];

17

system(\ if(t!=NULL) { cout<<\所有课程如下:\ cout<<\课程名称\\t\\t 学分\ else { cerr<<\对不起,暂时没有课程\ return 1; } while(t) { t->sub.getkname(N1); cout<<\ t = t->Next ; } char N2[20]; cout<<\ 输入你所要选的课程: \ cin>>N2; t = X->Next; while(t) { t->sub.getkname(N1); if(strcmp(N1,N2)==0) { if(q->stu.findcourse(N2)==1) { cout<<\此课程你已选过了,不能再选.按任意键继续\ return 1; } t=X->Next; char NA[20]; while(t) { t->sub.getkname(NA); if(strcmp(NA,N2)==0) { if(t->sub.retactivestudent()>=t->sub.retmaxstudent ()) { cout<<\此课程已选满,不能选.按任意键继续\ return 1; } } t = t->Next; } q->stu.addcourse(N2,0.0); cout<<\选课成功!按任意键继续\ return 1; } t = t->Next; } cerr<<\没有此课程!按任意键继续\ return 1; } q = q->Next; } return 1; }

int menu_1_2(studentdb *P,subjectdb *X) //学生情况 { studentdb *q=P->Next; char N[20];

18

system(\ cout<<\学生情况操作\ int i; if(q!=NULL) { cout<<\所有学生选课信息如下:\\n\ cout<<\ 姓名\\t\\t\\t选课情况\\n\ else { cerr<<\对不起,暂时没有学生名单!!请按任意键继续..\ return 1; } while(q) { q->stu.getname(N); cout<<\ \已选\门课\ q = q->Next ; } char M[20]; cout<<\输入要查看的学生姓名:\ cin>>M; i=0; q=P->Next; while(q) { q->stu.getname(N); if(strcmp(N,M)==0) i++; q = q->Next; } int j=0,k=1; if(i==0) { cout<<\没找到这个学生!!请按任意键继续..\ return 1; } else if(i>1) { cout<<\共找到\个姓名为\的学生\ cout<<\选择第几个:\ cin>>k; } if(k>i||k<=0) { cerr<<\输入有误!按任意键继续..\ return 1; } q = P->Next; j=0; q=P->Next; while(q) { q->stu.getname(N); if(strcmp(N,M)==0) j++; if(j==k) { system(\

19

course *T=q->stu.retroot(); if(T==NULL) { cout<<\同学你还未选课! 请按任意键继续..\ return 1; } if (T!=NULL) T = T->Next; cout<<\同学你已选\门课,具体如下\\n\\n\ cout<<\课程名称\\t\\t成绩\\n\ while(T) { cout<<\ T = T->Next; } j=0; } q = q->Next; } cout<<\请按任意键继续...\ return 1; }

int menu_1_3(subjectdb *P) //选课情况 { subjectdb *q=P->Next; char N[20]; system(\ cout<<\选课情况操作\ if(q!=NULL) { cout<<\所有选课情况如下:\\n\ cout<<\课程名称\\t\\t选课人数\\n\ else { cerr<<\对不起,暂时没有课程!!请按任意键继续..\ return 1; } while(q) { q->sub.getkname(N); cout<<\ q = q->Next ; } cout<<\请按任意键继续..\ return 1; }

int menu_1_4(studentdb *X,subjectdb *P) //退出系统 { menu_2_9(X,P); tuichu(); return 0; } //管理端功能函数

int menu_2_1(studentdb *P) //增加学生 { char N[20]; system(\ cout<<\增加学生操作\\n\ cout<<\请输入学生姓名:\ cin>>N;

20

cout<Next = P->Next ; newnode->stu.readname(N); P->Next = newnode ; return 1; }

int menu_2_2(subjectdb *P) //增加课程 { float k; char N[20],M[20]; system(\ cout<<\增加课程操作\\n\ cout<<\ 请输入课程名称:\ cin>>N; cout<Next; while(q) { q->sub.getkname(M); if(strcmp(N,M)==0) { cout<<\此课程已经存在,按任意键继续\ return 1; } q = q->Next; } cout<<\输入此课程的学分:\ cin>>k; cout<<\增加课程操作成功,按任意键继续\ subjectdb *newnode = new subjectdb; newnode->Next = P->Next ; newnode->sub.setkname(N); newnode->sub.getcredit(k); P->Next = newnode ; return 1; }

int menu_2_3(studentdb *P) //删除学生 { system(\ cout<<\删除学生操作\ menu_2_7(P); studentdb *q = P->Next; if(q==NULL) return 1; int i; char N[20],M[20]; cout<<\请输入要删除的学生姓名:\ cin>>N; i=0; while(q) { q->stu.getname(M);

21

if(strcmp(N,M)==0) i++; q = q->Next; } int j=0,k=1; if(i==0) { cerr<<\没有这个学生!!请按任意键继续..\ return 1; } else if(i>1) { cout<<\共找到\个姓名为\的学生\ cout<<\要删除第几个:\ cin>>k; } if(k>i||k<=0) return 1; q = P->Next; studentdb *R = P; j=0; while(q) { q->stu.getname(M); if(strcmp(N,M)==0) j++; if(j==k) { R->Next = q->Next; free(q); cout<<\删除学生操作成功,按任意键继续..\ return 1; } q = q->Next; R = R->Next; } return 1; }

int menu_2_4(subjectdb *P) //删除课程 { subjectdb *q=P->Next; char N[20]; system(\ cout<<\删除课程操作\ if(q!=NULL) cout<<\所有课程如下:\\n\ else { cerr<<\对不起,暂时没有课程!!请按任意键继续..\ return 1; } while(q) { q->sub.getkname(N); cout<<\ q = q->Next ; } q = P->Next; subjectdb *R = P;

22

if(q==NULL) return 1; char M[20]; cout<<\ 请输入要删除的课程:\ cin>>M; while(q) { q->sub.getkname(N); if(strcmp(N,M)==0) { R->Next = q->Next; free(q); cout<<\删除课程操作成功,按任意键继续\ return 1; } q = q->Next; R = R->Next; } cerr<<\没有此课程!!\\t请按任意键继续..\ return 1; }

int menu_2_5(studentdb *X,subjectdb *P) //填写成绩 { subjectdb *q=P->Next; char M[20],N[20],NA[20]; float score; system(\ cout<<\ 填写成绩操作\\n\ if(q!=NULL) cout<<\课程名称\\t\\t选课人数\\n\ else { cout<<\对不起,暂时没有任何选修课程。请按任意键继续..\ return 1; } while(q) { q->sub.getkname(N); cout<<\ q = q->Next ; } q = P->Next; cout<<\请输入课程名称:\ cin>>M; while(q) { q->sub.getkname(N); studentname *K = q->sub.retfirst(); if(K!=NULL) K = K->Next; if(strcmp(N,M)==0) { system(\ if(K!=NULL) { cout<<\请填写选修\的学生成绩\\n\ cout<<\姓名\\t\\t成绩\

23

if(K==NULL) cerr<<\无任何信息!!请按任意键继续..\ while(K) { cout<<\ cin>>score; studentdb *XX = X->Next; while(XX) { XX->stu.getname(NA); if(strcmp(NA,K->tname)==0) XX->stu.wrecourse(M,score); XX = XX->Next; } K = K->Next; } if(K==NULL) cout<<\填写成绩完毕!!请按任意键继续..\ return 1; } q = q->Next; } cerr<<\没有此课程!!请按任意键继续..\ return 1; }

int menu_2_6(subjectdb *P) //更改学分 { float k; system(\ cout<<\更改学分操作\\n\ subjectdb *q = P->Next; char N[20],M[20]; if(q!=NULL) cout<<\所有课程如下:\\n\ else { cerr<<\对不起,暂时没有任何可选课程。请按任意键继续..\ return 1; } while(q) { q->sub.getkname(N); cout<<\ \ q = q->Next ; } q = P->Next; cout<<\请输入要改的课程:\ cin>>M; while(q) { q->sub.getkname(N); if(strcmp(N,M)==0) { cout<<\原来学分为:\ cout<<\现要更改为:\ cin>>k; q->sub.getcredit(k); cout<<\更改课程学分成功,按任意键继续\

24

return 1; } q = q->Next; } cerr<<\无此课程!!请按任意键继续..\ return 1; }

int menu_2_7(studentdb *P) //学生情况 { studentdb *q=P->Next; char N[20]; system(\ cout<<\学生情况操作\\n\ if(q!=NULL) cout<<\所有学生名单如下:\\n\ else { cerr<<\对不起,暂时没有学生名单!请按任意键继续..\ return 1; } while(q) { q->stu.getname(N); cout<<\ cout<Next ; } cout<<\按任意键继续..\ return 1; }

int menu_2_8(subjectdb *P) //选课情况 { subjectdb *q = P->Next; char M[20],N[20]; system(\ cout<<\选课情况操作\ if(q!=NULL) { cout<<\所有选课情况如下:\\n\ cout<<\课程名称\\t\\t选课人数\\n\ else { cerr<<\对不起,暂时没有课程!!请按任意键继续..\ return 1; } while(q) { q->sub.getkname(N); cout<<\ q = q->Next ; } q = P->Next; cout<<\请输入课程名称:\ cin>>M; while(q) { q->sub.getkname(N); studentname *K = q->sub.retfirst(); if(K!=NULL) K = K->Next;

25

if(strcmp(N,M)==0) { system(\ if(K==NULL) { cerr<<\无任何选课信息!!\\t请按任意键继续..\ return 1; } cout<<\选修\课的学生名单如下:\\n\ cout<<\姓名\\t\\t 成绩\ while(K) { cout<<\ K = K->Next; } cout<<\请按任意键继续..\ return 1; } q = q->Next; } cerr<<\无此课程!!\\t请按任意键继续..\ return 1; }

int menu_2_9(studentdb *Y,subjectdb *P) //保存数据 { studentdb *Z = Y->Next; subjectdb *X = P->Next; system(\ fstream file(\ while(X) { file.write ((char *)&(X->sub),sizeof(X->sub)); X = X->Next; } file.close(); fstream file1(\ fstream file2(\ while(Z) { file1.write ((char *)&(Z->stu),sizeof(Z->stu)); int time = Z->stu.retfactcourse(); course *co = Z->stu.retroot(),*co1; if(co!=NULL) co1 = co->Next; while(time) { file2.write((char *)(co1),sizeof(*co1)); co1 = co1->Next; time = time - 1; } Z = Z->Next; } file2.close (); file1.close(); cout<<\保存数据成功!按任意键继续..\ return 1; }

int menu_2_0() //退出系统 { tuichu(); return 0; }

26

int main()

{ subjectdb *P = new subjectdb,*Q=P; P->Next = NULL; subject M; fstream file(\ while(1) { file.read((char *)&M,sizeof(M)); if(!file) break; Q->Next = new subjectdb; Q->Next ->Next = NULL; Q->Next ->sub = M; Q = Q->Next; } file.close (); studentdb *Y = new studentdb,*X=Y; Y->Next=NULL; student N; course O; fstream file1(\ fstream file2(\ while(1) { file1.read((char *)&N,sizeof(N)); if(!file1) break; Y->Next = new studentdb; Y->Next ->Next = NULL; Y->Next ->stu = N; int time = N.retfactcourse(); Y->Next->stu.clrroot (); while(time) { file2.read ((char *)&O,sizeof(course)); if(!file2) break; Y->Next->stu.addcourse(O.cname ,O.grade); time--; } Y=Y->Next; } file2.close (); file1.close (); Q=P->Next; while(Q) { Q->sub.clractivestudnet(); Q->sub.findstudent(X); Q = Q->Next; } char c;char b; int br=1;b = menu(); if(b=='1') { while(1)

27

{ c = custom(); switch(c) {case '1':br = menu_1_1(X,P);getch();break; //学生选课 case '2':br = menu_1_2(X,P);getch();break; //学生情况 case '3':br = menu_1_3(P);getch(); break; //选课情况 case '4':br = menu_1_4(X,P); break; //退出系统 } if (br == 0) break; } } if(b=='2')

{ password(); while(1) { c = server(); switch(c) {case '1':br = menu_2_1(X);getch(); break; //增加学生 case '2':br = menu_2_2(P);getch(); break; //增加课程 case '4':br = menu_2_4(P);getch(); break; //删除课程 case '3':br = menu_2_3(X);getch(); break; //删除学生 case '5':br = menu_2_5(X,P);getch();break; //填写成绩 case '6':br = menu_2_6(P);getch(); break; //更改学分 case '7':br = menu_2_7(X);getch(); break; //学生情况 case '8':br = menu_2_8(P);getch(); break; //选课情况 case '9':br = menu_2_9(X,P);getch();break; //保存数据 case '0':br = menu_2_0(); break; //退出系统 } if (br == 0) break;} }

return 0; }

参考文献

谭浩强编,C++面向对象程序设计(含实验指导书),清华大学出版社,2008.9 朱战立等著, C++面向对象程序设计,人民邮电出版社;

郑莉著, C++ 语言程序设计(含实验指导书)。 清华大学出版社 ( 结构化程序设计部分 )

钱能主编 ,C++ 程序设计教程,清华大学出版社, 2000.11 戴锋编著, Visual C++ 程序设计基础 , 清华大学出版社 ,2001.4 吕日著, C++ 程序设计教程,清华大学出版社, C++ 大学教程,美国 Harvey M.Deitel 等

28

理学院课程设计评分表

课题名称: 学生选修课程系统

项 目 评 价 设计方案的合理性与创造性 设计与调试结果 设计说明书的质量 答辩陈述与回答问题情况 课程设计周表现情况 综合成绩

教师签名: 日 期:

29

本文来源:https://www.bwwdw.com/article/299w.html

Top