您的当前位置:首页正文

c++学生选课系统报告

2024-06-20 来源:一二三四网


C++程序设计课程报告

课题名称: 学生选修课程系统设计 组 号: 指导教师:

目 录

引言……………………………………………………………….. 一 设计目的及内容…………………………………………………… 二 课题总体设计………………………………………………………

1. 性能需求…………………………………………………………… 2. 功能需求……………………………………………………………. 3. 功能模块图…………………………………………………………

三 详细设计…………………………………………………………….

1.各模块说明. ………………………………………………………. 2.各模块功能流程图 ………………………………………………

四 测试与调试………………………………………………………… 五 心得体会………………………………………………….. 六 附:源代码……………………………………………….

引 言

21世纪以高科技为核心的知识经济占主导地位,国家的综合国力和以国际竞争力将越来越取决于科学技术创新水平。教育作为知识创新,传播和应用的基础,培养和输送人才的摇篮,已经成为经济发展和社会进步的基础。

尽管人类进步的程度随着不同时代,不同地区而有所变化,教育的口径不断扩宽,以便使过去仅供少数人使用的教育资源能够为更多各种年龄,不同社会阶层和背景的人们所用。在信息爆炸的时代,传统教学管理面临诸多挑战。

课程设计是课程教学必不可缺的一个重要环节,可加深学生对该课程所学内容的进一步的了解与巩固,是将计算机课程与实际问题相连接的关键步骤。此次程序设计综合运用所学知识解决实际问题,将课堂的书本知识有效的在程序中体现出来,让学生更理解了C++功能之强大,进一步让学生对面向对象的方法以及C++的编程思想有了较好了解和认识。

一 设计目的及内容:

网上选课系统是针对在校学生和教师使用,从学生的角度来说,由于学校教学制度的改革,现在大部分高等院校开始实行的是学生的自主选课模式,传统的教学模式(学生按照学校安排好的课程上课)已经不能适应新型的教学手段,如果仍然通过纸上的选课,一方面浪费大量的人力,物力资源,另一方面浪费时间以及在人为的统计过程中不可避免出现的差错等情况。随着学校规模的不断扩大,专业,班级,学生的数量急剧增加,有关学生选课的各种信息也成倍增加,而目前许多高校的学生的选课管理仍然停留在复杂的人工操作上,重复工作较多,工作量大,效率低,各种弊端会越来越多的暴露出来,因此利用网络,使学

生只要在计算机前输入自己的个人选课信息即可完成原来几倍的工作量。从教师的角度上来说,同样是节省了大量的工作量,由于教师提出代课申请完成课程发布的工作较学生选课而言更加的复杂,因此在网上进行课程发布能大幅度的减少教师的工作量,减少错误发生几率,作为教师,也只要通过自己的电脑来操作即可,不用奔波于教务处和办公室之间。 1、课题名称:学生选修课程系统设计 2、课程设计详细内容

说明:假定有n门课程,每门课程有课程编号、课程名称、课程性质、总学时、授课学时、实验学时、学分、开课学期等信息。学生可以按要求(如每个学生总学分不得少于20、没学期不能超过3门课程,每门课程不得超过50个人,但不能少于10否则该课程不开设)自由选课。使之能提供一些功能: 要求:具体设计要求实现如下功能: 1、课程信息录入功能 2、课程信息浏览功能

3、查询功能:(按课程性质查询、按课程学分查询,查询每个学生的选修信息、查询每门课程的选修信息等) 4、学生选修课程

5、修改课程或选课信息(根据课程编号或名称修改课程信息、根据学生姓名修改选课信息);

6、删除课程或选课信息(根据课程编号或名称删除课程信息、根据学生姓名删除选课信息);

二 课题总体设计:

1、

性能需求:

在现代,高科技的飞跃发展,人们工作习惯的改变,别特是电脑的大量普及,人们生活节奏越来越来快,怎样提高工作效率是人们首先考虑的问题。学生选课是一个非常繁琐与复杂的一项工作,一个原因就是工作量大,不好管。对于一个学校而言,更应该运用一些本地资源,提高管理的力度,对学生负责,对国家负责。

显然,靠手工进行管理这种选课方法已经不能适应时代的发展,学校的需求。今天这种传统的管理方法必然会被计算机为基础的信息系统所代替。同时这种传统方式放映出很多问题:

第一, 当要查询某个同学或某个班级的选课情况极不方便;

第二, 每次 选课时省老师花大量时间统计各班级各学生的选课情况,这样准确

率也较难保证; 第三, 选课的可靠性很低;

第四, 现在学校虽然已用计算机进行选课管理,但工作并不完善,有很大的局

限性。 2、

功能需求:

我们设计的是一个学生选修金额系统,这个系统的功能比较完善。使用主函数中的switch语句实现该结构,进而实现该系统的各项功能。该系统能实现六项功能:1.录入信息、2.查询信息、3.删除课程、4.显示课程、5.保存信息、6.读取信息,设计本次试验所用到的知识点有:类和对象、FOR循环、switch语句、do while()语句、构造函数等等。 3、

功能模块图:

学生信息模块

课程信息模块

选课模块 三 详细设计:

1. 各模块说明:

(1) 我们这学生选修课系统的主界面分有两个选项一个是学生使用的学生

端一个是老师使用的教师端。

(2) 学生端包括学生的选课情况、学生情况和学生选课,学生可在这里进

行选课查询各学生选修课情况还可以查看学生的情况。

(3) 选课系统管理端只有教师可以进入因为需要密码,设计密码是防止学

生进入管理端随意修改。管理端包括一些要求里有的如:课程浏览、课程录入、课程删除、课程查询等,还包括一些要求里边没有的功能如:填写成绩、更改学分等。这些功能只有管理员才能进行修改和填写。

2 各模块功能流程图: (1)主界面流程图:

开始

i=1 i=1 接受数据依据输入值执行 i=2 i=2 Case 1 Case 2 Case 1 Case 2

(2)学生端流程图:

结束

开始

(3)管理端流程图:

结束 Y 按输入数据 任意键 n 是否为4 学生选课 学生情况 选课情况

是否为123456 输入数据 否但小于三次 开始

Y 否且大于三次 Y 输入数据 N 是否为0 录入课程 删除课程 保存数据 等

四 测试与调试:

运行:

1. 学生选课主界面

结束

2. 选修课系统学生端

3. 系统管理端

4. 学生选课界面

5. 查询学生所选课程界面

6. 删除课程界面

7. 课程信息录入功能

8. 按课程查询所选人数

遇到的问题和解决办法:这个程序用到了数据结构的内容可是我们还没有学习数据结构当时这件事真是吧我们难住了,没办法只能自己上网还有去图书馆这中间也去问过老师最终还是把主要问题解决了,不过这中间可能有一些问题是我们现在解决不了的。

五 心得体会:

1 每当拿到一个小工程,我们都得先仔细分析用户的需求,然后再给程序定位(所花费的人力、物力以及财力),这将花费我们大量的时间,就如本次任务一样,我们首先聚在一起分析,然后得出大致方向,再具体分配任务,无论哪一部分都是我们努力的结果。

2 通过这次学生选课系统设计,以C++语言为基础的编写,更让我掌握到C++语言中的相关语句的应用。

3 用Visual C++ 6.0 环境下编写,我觉得,从文件中读入数据十分麻烦,没有数据库中读入数据那么轻松,如果我要用到两个表中的记录,非常麻烦。 4 整个设计过程过后,我也基本掌握了设计的基本步骤,为我们以后做毕业论

文也有很好的帮助。

5 C++是很好的系统编程语言,但不能以此独立,但用C++语言是做不出好的

系统,还是要和其他软件结合,以C++为基础编写的系统,这样做出来的系统也更好,更美观。

6 这次系统设计有很多不足之处,在这过程中也认识到自己对C++也有很多的

没掌握的地方。但是在老师和同学的帮助下,也算是弄出了一个简单的系统,在以后也要更加努力的学习,掌握更好的编程技术。

7 做程序真的是个很累的活,有时就为了一个小小的错误,可以一两顿饭不吃,但是做出来的那一刻,真心的感觉很开心,很有成就感,虽然其应用性不高,至少这也是我们小组努力的结果。

8 经过我们多天的团结合作终于把这个学生选课系统做完了,虽然这过程是艰难的但是做完之后感觉挺有成就感的,在这个过程中我们学到了很多光听老师讲学不到的东西。在写这个程序的时候用到了数据结构的内容,如果不是这个程序我觉得我是不会去自学数据结构的内容。

参考书目:

⑴ ⑵ ⑶ ⑷

谭浩强,《C++程序设计》,清华大学出版社,2002.4 求是科技,《Visual C++ 6.0信息管理系统开发》,人民邮电出版社,2005.4 陈良银、游洪跃、李旭伟,《C语言程序设计(C99版)》,清华大学出版社,2006.10 殷人昆,《数据结构》(用面向对象方法与C++语言描述),清华大学出版社,2007.2

编程人员:孙双蕾、白晓兰 实验报告设计:牟炼 调试人员:孙双蕾 讲解人员:白晓兰

附录:源代码

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

class course //某个学生所学的课程中的某一个 {public:

};

char cname[20]; //课程名称 float grade; //课程成绩

course *Next; //指向下一个课程的指针

//学生类 class student {public: student() 回

int retfactcourse()

{ return factcourse;} //得到所学的课程数目 course *retroot()

{ return root; } //利用键表将所有的课程保存起来 int retmaxcourse()

{ return 5; } //得到最多可学的课程数目 void clrroot() //清零 {

root = NULL; factcourse = 0;} {

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[]); //查找是否已有此课程,如果有返回,如果没有返

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)//要据课程名写入学生课程的成绩 { }

float student::average()//学生课程的平均成绩 {

float aver=0.0; course *p = root; while (p)

{ aver = aver+p->grade; } aver = aver/factcourse; return aver; } 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;}

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; 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: };

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

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

int maxstudent; //最多学生数 int activestudnet; //实际学生数 studentname *first; //学生名单 float credit; //该课程的学分

float averagerusult; //该课程的平均成绩 char kname[20]; //该课程的名称

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;

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(\"cls\");

cout<<\"\\n\\n谢谢你使用选修课系统\\n\\n\"<//总菜单 char menu() {

int k=0; char a[3],c,i;

system(\"cls\"); cout<cout<<\"*******************************************\\n\"

<<\"* *\\n\" <<\"* 学生选修课系统 *\\n\" <<\"* *\\n\" <<\"* *\\n\" <<\"* 操作方式: *\\n\" <<\"* 1.选修课系统学生端 *\\n\" <<\"* *\\n\" <<\"* 2.选修课系统管理端 *\\n\" <<\"* *\\n\" <<\"*******************************************\\n\"<while(1) {

cout<<\"\\n\\请选择登入方式: \"; cin>>a; if(strlen(a)==1) { }

cerr<<\"\\n\\n\\\\输入有误!\\n\"<2) {

system(\"cls\");

cerr<<\"\\n\\n\\n\\~~提示~~:错误输入次数超过三次,你将被强制退for(i='1';i<='2';i++) {

c=i; if(c==a[0])

return c; }

出!!\\n\\n\"<cout<<\"\\按任意键继续\"<}

}

tuichu(); }

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

char A[10];char b;char i;int k = 0; system(\"cls\");; cout<<\"\\n\\n\\n\"

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

\\n\"<while(1) {

cout<<\"\\\请选择操作方式: \"; cin>>A; if(strlen(A)==1) { }

cerr<<\"\\n\\\\输入有误!\\n\"<2)

for(i='1';i<='4';i++) {

b=i;

if(b==A[0]) return b; }

{

system(\"cls\");

cerr<<\"\\n\\n\\\~~提示~~:错误输入超过三次!你将被强制退

出!!\\n\"<char server() {

char A[10];char b;char i;int k = 0;system(\"cls\");; cout<<\"\\n\\n\\n\"

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

cout<<\"\\按任意键继续\"<\\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\\\\输入有误!\\n\"<2) {

cerr<<\"错误输入超过三次!\\n\"; exit(-1); }

//密码检查 void password() { int k=0,i;

char A[]=\"123456\"; char B[10]; char a; system(\"cls\"); for(i=0;i<8;i++) cout<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\\n\\\密码输入错误!请重新输入!\\n\"<=3) {

system(\"cls\");

cerr<<\"\\n\\n\\\输入错误密码超过三次!请按任意键退出..\"<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(\"cls\");

cout<<\"\\n\\n\\\\学生选课操作\"<Next; int i;

char N[20],M[20]; if(q!=NULL)

cout<<\"\\n\\n\\n\\所有学生名单如下:\\n\"<else {

cerr<<\"\\n\\n\\n\\对不起,暂无学生名单!请先创建!请按任意键继

续..\"<return 1; }

while(q) {

q->stu.getname(N); cout<<\"\\\\\"<Next ; }

q = P->Next; if(q==NULL)

return 1;

cout<<\"\\n\\n\\ 请输入学生姓名:\"; 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<<\"\\n\\n\\没有这个学生!! 请按任意键返回..\"<else if(i>1) {

cout<<\"\\n\\n\\共找到\"<>k; }

if(k>i||k<=0) {

cerr<<\"\\n\\\输入有误!按任意键继续\"<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<<\"\\n\\所选课程已满!按任意键继续\"<else {

subjectdb *t=X->Next; char N1[20]; system(\"cls\");; if(t!=NULL) {

cout<<\"\\n\\n\\n\\所有课程如下:\"<else {

cerr<<\"\\n\\n\\n\\对不起,暂时没有课程\"<while(t)

{

t->sub.getkname(N1); cout<<\"\\\\

\"<sub.readcredit()<t = t->Next ; }

char N2[20];

cout<<\"\\n\ 输入你所要选的课程: \"; cin>>N2; t = X->Next; while(t) {

t->sub.getkname(N1); if(strcmp(N1,N2)==0) {

if(q->stu.findcourse(N2)==1) {

cout<<\"\\n\\此课程你已选过了,不能再选.按任意键

继续\"<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<<\"\\n\\此课程已选满,不能选.按任意

键继续\"<}

t = t->Next; }

return 1; }

q->stu.addcourse(N2,0.0);

cout<<\"\\n\\n\\选课成功!按任意键继续\"<t = t->Next; }

cerr<<\"\\n\\没有此课程!按任意键继续\"<return 1; }

q = q->Next; }

return 1; }

int menu_1_2(studentdb *P,subjectdb *X) //学生情况 {

studentdb *q=P->Next; char N[20]; system(\"cls\");

cout<<\"\\n\\n\\\\学生情况操作\"<cout<<\"\\n\\n\\n\\所有学生选课信息如下:\\n\"<else {

cerr<<\"\\n\\n\\n\\对不起,暂时没有学生名单!!请按任意键继续..\"<while(q) {

q->stu.getname(N); cout<<\"\\

\"<

\"<stu.retfactcourse()<<\" 门课\"<q = q->Next ; }

char M[20];

cout<<\"\\n\\输入要查看的学生姓名:\"; 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<<\"\\n\\\没找到这个学生!!请按任意键继续..\"<else if(i>1) {

cout<<\"\\n\\共找到\"<>k; }

if(k>i||k<=0) {

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

q->stu.getname(N); if(strcmp(N,M)==0)

j++;

if(j==k) {

system(\"cls\");;

course *T=q->stu.retroot(); if(T==NULL) {

cout<<\"\\n\\n\\n\\\\"<续..\"<return 1; }

if (T!=NULL)

T = T->Next;

cout<<\"\\n\\n\\n\\\"<stu.retfactcourse()<<\"

门课,具体如下\\n\\n\"<cout<<\"\\\课程名称\\成绩\\n\"<cout<<\"\\\

\"<cname<cname))<grade<T = T->Next; }

j=0; }

q = q->Next; }

cout<<\"\\n\\请按任意键继续...\"<int menu_1_3(subjectdb *P) //选课情况 {

cout<<\"\\\\"<sub.retactivestudent()<q = q->Next ; } subjectdb *q=P->Next; char N[20]; system(\"cls\");

cout<<\"\\n\\n\\\\选课情况操作\"<cout<<\"\\n\\n\\n\\所有选课情况如下:\\n\"<else {

cerr<<\"\\n\\n\\n\\对不起,暂时没有课程!!请按任意键继续..\"<while(q) {

q->sub.getkname(N);

cout<<\"\\n\\请按任意键继续..\"<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(\"cls\");;

cout<<\"\\n\\n\\\\增加学生操作\\n\"<>N;

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(\"cls\");;

cout<<\"\\n\\n\\\\增加课程操作\\n\"<>N; cout<subjectdb *q = P->Next; while(q) {

q->sub.getkname(M); if(strcmp(N,M)==0)

{

cout<<\"\\n\\此课程已经存在,按任意键继续\"<q = q->Next; }

cout<<\"\\输入此课程的学分:\"; cin>>k;

cout<<\"\\n\\增加课程操作成功,按任意键继续\"<Next = P->Next ; newnode->sub.setkname(N); newnode->sub.getcredit(k); P->Next = newnode ; return 1; }

int menu_2_3(studentdb *P) //删除学生 {

system(\"cls\");

cout<<\"\\n\\n\\\\删除学生操作\"<studentdb *q = P->Next; if(q==NULL)

return 1;

int i;

char N[20],M[20];

cout<<\"\\n\请输入要删除的学生姓名:\"; cin>>N; i=0; while(q) {

q->stu.getname(M); if(strcmp(N,M)==0)

i++;

q = q->Next; }

int j=0,k=1;

if(i==0) {

cerr<<\"\\n\\没有这个学生!!请按任意键继续..\"<else if(i>1) {

cout<<\"\\n\\共找到\"<>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<<\"\\n\\删除学生操作成功,按任意键继续..\"<q = q->Next; R = R->Next; }

return 1; }

int menu_2_4(subjectdb *P) //删除课程 {

subjectdb *q=P->Next; char N[20]; system(\"cls\");;

cout<<\"\\n\\n\\\\删除课程操作\"<cout<<\"\\n\\n\\n\\所有课程如下:\\n\"<else {

cerr<<\"\\n\\n\\n\\对不起,暂时没有课程!!请按任意键继续..\"<while(q) {

q->sub.getkname(N); cout<<\"\\\\\"<Next ; }

q = P->Next; subjectdb *R = P; if(q==NULL)

return 1;

char M[20];

cout<<\"\\n\ 请输入要删除的课程:\"; cin>>M; while(q) {

q->sub.getkname(N); if(strcmp(N,M)==0) {

R->Next = q->Next; free(q);

cout<<\"\\n\\删除课程操作成功,按任意键继续\"<q = q->Next; R = R->Next; }

cerr<<\"\\n\\没有此课程!!\请按任意键继续..\"<int menu_2_5(studentdb *X,subjectdb *P) //填写成绩 {

subjectdb *q=P->Next; char M[20],N[20],NA[20]; float score;

system(\"cls\");

cout<<\"\\n\\n\\\\ 填写成绩操作\\n\"<cout<<\"\\n\\\课程名称\\选课人数\\n\"<else {

cout<<\"\\n\\n\\n\\对不起,暂时没有任何选修课程。请按任意键继

续..\"<cout<<\"\\\\"<sub.retactivestudent()<q = q->Next ; }

return 1; }

while(q) {

q->sub.getkname(N);

q = P->Next;

cout<<\"\\n\请输入课程名称:\"; 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(\"cls\");; if(K!=NULL) {

cout<<\"\\n\\n\\请填写选修\"<if(K==NULL)

cerr<<\"\\n\\\无任何信息!!请按任意键继续..\"<while(K) {

cout<<\"\\n\\\\"<tname<<\"\\ \";

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<<\"\\n\\填写成绩完毕!!请按任意键继续..\"<return 1; }

q = q->Next; }

cerr<<\"\\n\\没有此课程!!请按任意键继续..\"<int menu_2_6(subjectdb *P) //更改学分 {

float k; system(\"cls\");

cout<<\"\\n\\n\\n\\\\更改学分操作\\n\"<Next; char N[20],M[20]; if(q!=NULL)

cout<<\"\\n\\n\\n\\ 所有课程如下:\\n\"<else {

cerr<<\"\\n\\n\\n\\对不起,暂时没有任何可选课程。请按任意键继

续..\"<return 1; }

while(q) {

q->sub.getkname(N); cout<<\"\\\\ \"<Next ; }

q = P->Next;

cout<<\"\\n\\n\\n\\请输入要改的课程:\"; cin>>M; while(q) {

q->sub.getkname(N); if(strcmp(N,M)==0) {

cout<<\"\\n\\\原来学分为:\"<sub.readcredit()<>k;

q->sub.getcredit(k);

cout<<\"\\n\\更改课程学分成功,按任意键继续\"<q = q->Next; }

cerr<<\"\\n\\无此课程!!请按任意键继续..\"<int menu_2_7(studentdb *P) //学生情况 {

studentdb *q=P->Next; char N[20]; system(\"cls\");

cout<<\"\\n\\n\\n\\\\学生情况操作\\n\"<cout<<\"\\n\\n\\n\\所有学生名单如下:\\n\"<else {

cerr<<\"\\n\\n\\n\\对不起,暂时没有学生名单!请按任意键继续..\"<while(q) {

q->stu.getname(N); cout<<\"\\\\\"<Next ; }

cout<<\"\\n\\按任意键继续..\"<int menu_2_8(subjectdb *P) //选课情况 {

cout<<\"\\\\"<sub.retactivestudent()<q = q->Next ; } subjectdb *q = P->Next; char M[20],N[20]; system(\"cls\");

cout<<\"\\n\\n\\\\选课情况操作\"<cout<<\"\\n\\n\\n\\所有选课情况如下:\\n\"<else {

cerr<<\"\\n\\n\\n\\对不起,暂时没有课程!!请按任意键继续..\"<while(q) {

q->sub.getkname(N);

q = P->Next;

cout<<\"\\n\请输入课程名称:\"; 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(\"cls\");; if(K==NULL)

l;

{

cerr<<\"\\n\\n\无任何选课信息!!\请按任意键继续..\"<}

cout<<\"\\n\\n\\n\\选修\"<cout<<\"\\n\\\\"<tname<tname))<result<K = K->Next; }

cout<<\"\\n\\请按任意键继续..\"<q = q->Next; }

cerr<<\"\\n\\无此课程!!\请按任意键继续..\"<int menu_2_9(studentdb *Y,subjectdb *P) //保存数据 {

studentdb *Z = Y->Next; subjectdb *X = P->Next; system(\"cls\");;

fstream file(\"subject.txt\while(X) {

file.write ((char *)&(X->sub),sizeof(X->sub)); X = X->Next; }

file.close();

fstream file1(\"student.txt\fstream file2(\"course.txt\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<<\"\\n\\n\\n\\\保存数据成功!按任意键继续..\"<int menu_2_0() //退出系统 {

tuichu(); return 0; }

int main() {

subjectdb *P = new subjectdb,*Q=P; P->Next = NULL; subject M;

fstream file(\"subject.txt\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(\"student.txt\fstream file2(\"course.txt\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) {

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;

}

//增加学生 //增加课程 //删除课程 //删除学生 //填写成绩 //更改学分 //学生情况 //选课情况 //保存数据 //退出系统

因篇幅问题不能全部显示,请点此查看更多更全内容