{ 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<
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